Project 'savoirfairelinux/ring-daemon' was moved to 'savoirfairelinux/jami-daemon'. Please update any links and bookmarks that may still have the old path.
Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
managerimpl_registration.cpp 6.19 KiB
/*
* Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc.
* Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
* Author: Yan Morin <yan.morin@savoirfairelinux.com>
* Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
* Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
* Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Additional permission under GNU GPL version 3 section 7:
*
* If you modify this program, or any covered work, by linking or
* combining it with the OpenSSL project's OpenSSL library (or a
* modified version of that library), containing parts covered by the
* terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
* grants you additional permission to convey the resulting work.
* Corresponding Source for a non-source form of such a combination
* shall include the source code for the parts of OpenSSL used as well
* as that of the covered work.
*/
#include "managerimpl.h"
#include "account.h"
#include "dbus/callmanager.h"
#include "global.h"
#include "sip/sipaccount.h"
#include "audio/audiolayer.h"
#include "sip/sipvoiplink.h"
#include "manager.h"
#include "dbus/configurationmanager.h"
#include "conference.h"
#include <errno.h>
#include <cstdlib>
int
ManagerImpl::registerAccounts()
{
int status;
bool flag = true;
AccountMap::iterator iter;
_debugInit ("Manager: Initiate VoIP Links Registration");
iter = _accountMap.begin();
/* Loop on the account map previously loaded */
while (iter != _accountMap.end()) {
if (iter->second) {
if (iter->second->isEnabled()) {
_debug ("Register account %s", iter->first.c_str());
status = iter->second->registerVoIPLink();
if (status != 0) {
flag = false;
}
}
}
iter++;
}
audioLayerMutexLock();
// calls the client notification here in case of errors at startup...
if (_audiodriver->getErrorMessage() != -1) {
notifyErrClient (_audiodriver->getErrorMessage());
}
audioLayerMutexUnlock();
if (flag)
return 0;
else
return 1;
}
//THREAD=Main
int
ManagerImpl::initRegisterAccounts()
{
int status;
bool flag = true;
AccountMap::iterator iter;
_debugInit ("Manager: Initiate VoIP Links Registration");
iter = _accountMap.begin();
/* Loop on the account map previously loaded */
while (iter != _accountMap.end()) {
if (iter->second) {
iter->second->loadConfig();
/* If the account is set as enabled, try to register */
if (iter->second->isEnabled()) {
status = iter->second->registerVoIPLink();
if (status != 0) {
flag = false;
}
}
}
iter++;
}
audioLayerMutexLock();
// calls the client notification here in case of errors at startup...
if (_audiodriver->getErrorMessage() != -1) {
notifyErrClient (_audiodriver->getErrorMessage());
}
audioLayerMutexUnlock();
if (flag)
return 0;
else
return 1;
}
void ManagerImpl::restartPJSIP (void)
{
_debug ("ManagerImpl::restartPJSIP\n");
SIPVoIPLink *siplink = SIPVoIPLink::instance ();
_debug ("ManagerImpl::unregister sip account\n");
this->unregisterCurSIPAccounts();
/* Terminate and initialize the PJSIP library */
_debug ("ManagerImpl::Terminate sip\n");
siplink->terminate ();
siplink = SIPVoIPLink::instance ();
_debug ("ManagerImpl::Init new sip\n");
siplink->init ();
_debug ("ManagerImpl::register sip account\n");
/* Then register all enabled SIP accounts */
this->registerCurSIPAccounts ();
}
VoIPLink* ManagerImpl::getAccountLink (const std::string& accountID) const
{
if (not accountID.empty()) {
Account* acc = getAccount (accountID);
if (acc)
return acc->getVoIPLink();
return 0;
} else
return SIPVoIPLink::instance ();
}
pjsip_regc *getSipRegcFromID (const std::string& id UNUSED)
{
return NULL;
}
void ManagerImpl::unregisterCurSIPAccounts()
{
AccountMap::iterator iter;
for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
Account *current = iter->second;
if (current && current->isEnabled() && current->getType() == "sip")
current->unregisterVoIPLink();
}
}
void ManagerImpl::registerCurSIPAccounts (void)
{
AccountMap::iterator iter;
for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
Account *current = iter->second;
if (current && current->isEnabled() && current->getType() == "sip")
current->registerVoIPLink();
}
}
void
ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable)
{
// Update the active field
Account* acc = getAccount (accountID);
acc->setEnabled (!!enable);
acc->loadConfig();
Manager::instance().saveConfig();
// Test on the freshly updated value
if (acc->isEnabled()) {
// Verify we aren't already registered, then register
_debug ("Send register for account %s\n" , accountID.c_str());
acc->registerVoIPLink();
} else {
// Verify we are already registered, then unregister
_debug ("Send unregister for account %s\n" , accountID.c_str());
acc->unregisterVoIPLink();
}
}