Commit ae739913 authored by Yun Liu's avatar Yun Liu
Browse files

Adding the initialization of sip manager in manageimpl

parent 41643411
......@@ -37,13 +37,16 @@
#include "manager.h"
#include "account.h"
#include "sipaccount.h"
#include "audio/audiolayer.h"
#include "audio/alsalayer.h"
#include "audio/pulselayer.h"
#include "audio/tonelist.h"
#include "accountcreator.h" // create new account
#include "voiplink.h"
#include "sipvoiplink.h"
#include "sipmanager.h"
#include "user_cfg.h"
......@@ -83,6 +86,10 @@ ManagerImpl::ManagerImpl (void)
_nbIncomingWaitingCall=0;
_hasTriedToRegister = false;
// SIP Link
_sipManager = NULL;
_sipManagerInitlized = false;
// initialize random generator for call id
srand (time(NULL));
......@@ -114,6 +121,12 @@ ManagerImpl::init()
{
// Load accounts, init map
loadAccountMap();
//Initialize sip manager
if(_sipManagerInitlized) {
_sipManager->sipCreate();
_sipManager->sipInit();
}
initVolume();
......@@ -144,6 +157,7 @@ ManagerImpl::init()
// initRegisterAccounts was here, but we doing it after the gui loaded...
// the stun detection is long, so it's a better idea to do it after getEvents
initZeroconf();
}
void ManagerImpl::terminate()
......@@ -229,6 +243,7 @@ ManagerImpl::outgoingCall(const std::string& accountid, const CallID& id, const
ManagerImpl::answerCall(const CallID& id)
{
stopTone(false);
_debug("Try to answer call: %s\n", id.data());
AccountID accountid = getAccountFromCall( id );
if (accountid == AccountNULL) {
_debug("Answering Call: Call doesn't exists\n");
......@@ -558,7 +573,7 @@ ManagerImpl::isWaitingCall(const CallID& id) {
bool
ManagerImpl::incomingCall(Call* call, const AccountID& accountId)
{
_debug("Incoming call\n");
_debug("Incoming call %s\n", call->getCallId().data());
associateCallToAccount(call->getCallId(), accountId);
......@@ -582,8 +597,9 @@ ManagerImpl::incomingCall(Call* call, const AccountID& accountId)
from.append(number);
from.append(">");
}
_dbus->getCallManager()->incomingCall(accountId, call->getCallId(), from);
// Reduce volume of the other pulseaudio-connected audio applications
if( getConfigInt( PREFERENCES , CONFIG_PA_VOLUME_CTRL ) )
_audiodriver->reducePulseAppsVolume();
......@@ -948,7 +964,7 @@ ManagerImpl::behindNat(const std::string& svr, int port)
}
// Firewall address
//_debug("STUN server: %s\n", svr.data());
_debug("STUN server: %s\n", svr.data());
return getStunInfo(stunSvrAddr, port);
}
......@@ -2109,6 +2125,7 @@ ManagerImpl::associateCallToAccount(const CallID& callID, const AccountID& accou
if ( accountExists(accountID) ) { // account id exist in AccountMap
ost::MutexLock m(_callAccountMapMutex);
_callAccountMap[callID] = accountID;
_debug("Associate Call %s with Account %s\n", callID.data(), accountID.data());
return true;
} else {
return false;
......@@ -2175,7 +2192,22 @@ ManagerImpl::loadAccountMap()
accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE);
if (accountType == "SIP") {
if(!_sipManagerInitlized) {
// Initialize the SIP Link Manager
_sipManager = new SIPManager();
_sipManagerInitlized = true;
}
tmpAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT, *iter);
// Determine whether to use stun for the current account or not
int useStun = Manager::instance().getConfigInt(tmpAccount->getAccountID(),SIP_USE_STUN);
if(useStun == 1) {
_sipManager->setStunServer(Manager::instance().getConfigString(tmpAccount->getAccountID(), SIP_STUN_SERVER).data());
}
}
else if (accountType == "IAX") {
tmpAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT, *iter);
......@@ -2241,6 +2273,24 @@ ManagerImpl::getAccountLink(const AccountID& accountID)
return 0;
}
pjsip_regc
*getSipRegcFromID(const AccountID& id)
{
/*SIPAccount *tmp = dynamic_cast<SIPAccount *>getAccount(id);
if(tmp != NULL)
return tmp->getSipRegc();
else*/
return NULL;
}
/**
* Return the instance of sip manager
*/
SIPManager *ManagerImpl::getSipManager()
{
return _sipManager;
}
#ifdef TEST
/**
......
......@@ -47,6 +47,7 @@ class CodecDescriptor;
class GuiFramework;
class TelephoneTone;
class VoIPLink;
class SIPManager;
#ifdef USE_ZEROCONF
class DNSService;
......@@ -810,6 +811,13 @@ class ManagerImpl {
*/
bool isCurrentCall(const CallID& callId);
/**
* Get the _regc in each sip account
* @param AccountID Account ID
* @return pjsip_regc* The regc in the account
*/
//pjsip_regc *getSipRegcFromID(const AccountID& id);
private:
/**
* Create .PROGNAME directory in home user and create
......@@ -964,13 +972,6 @@ class ManagerImpl {
*/
bool associateCallToAccount(const CallID& callID, const AccountID& accountID);
/** Return the AccountID from a CallID
* Protected by mutex
* @param callID the CallID in the list
* @return AccountID The accountID associated or "" if the callID is not found
*/
AccountID getAccountFromCall(const CallID& callID);
/** Remove a CallID/AccountID association
* Protected by mutex
* @param callID the CallID to remove
......@@ -1007,6 +1008,14 @@ class ManagerImpl {
*/
Account* getAccount(const AccountID& accountID);
public:
/** Return the AccountID from a CallID
* Protected by mutex
* @param callID the CallID in the list
* @return AccountID The accountID associated or "" if the callID is not found
*/
AccountID getAccountFromCall(const CallID& callID);
/**
* Get the voip link from the account pointer
* @param accountID Account ID to get
......@@ -1014,11 +1023,25 @@ class ManagerImpl {
*/
VoIPLink* getAccountLink(const AccountID& accountID);
private:
/**
* The SIPManager provides sip operation facilities for all sip accounts
*/
SIPManager *_sipManager;
/** Whether the _SIPManager has been initialized */
bool _sipManagerInitlized;
#ifdef TEST
bool testCallAccountMap();
bool testAccountMap();
#endif
public:
/**
* Retuun the instance of sip manager
*/
SIPManager *getSipManager();
};
#endif // __MANAGER_H__
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment