git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16476 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
João Mesquita 2010-01-23 06:50:13 +00:00
parent 07de75014a
commit a9f33bc1a6
5 changed files with 50 additions and 39 deletions

View File

@ -12,6 +12,7 @@
#define FSCOMM_GW_STATE_FAIL_WAIT 6
#define FSCOMM_GW_STATE_EXPIRED 7
#define FSCOMM_GW_STATE_NOREG 8
#define FSCOMM_GW_STATE_NOAVAIL 9
static QString fscomm_gw_state_names[] = {
@ -23,7 +24,8 @@ static QString fscomm_gw_state_names[] = {
QString("Failed"),
QString("Failed"),
QString("Expired"),
QString("Not applicable")
QString("Not applicable"),
QString("Not available")
};
class Account {

View File

@ -341,16 +341,9 @@ void FSHost::generalEventHandler(switch_event_t *event)
{
QString state = switch_event_get_header_nil(event, "State");
QString gw = switch_event_get_header_nil(event, "Gateway");
QSharedPointer<Account> acc;
if (!_accounts.contains(gw))
{
Account * accPtr = new Account(gw);
acc = QSharedPointer<Account>(accPtr);
_accounts.insert(gw, acc);
emit newAccount(acc);
}
else
acc = _accounts.value(gw);
QSharedPointer<Account> acc = _accounts.value(gw);
if (acc.isNull())
return;
if (state == "TRYING") {
acc.data()->setState(FSCOMM_GW_STATE_TRYING);
@ -381,10 +374,20 @@ void FSHost::generalEventHandler(switch_event_t *event)
emit accountStateChange(acc);
}
}
else if (strcmp(event->subclass_name, "fscomm::acc_removed") == 0)
else if (strcmp(event->subclass_name, "sofia::gateway_add") == 0)
{
QSharedPointer<Account> acc = _accounts.take(switch_event_get_header_nil(event, "acc_name"));
emit delAccount(acc);
QString gw = switch_event_get_header_nil(event, "Gateway");
Account * accPtr = new Account(gw);
QSharedPointer<Account> acc = QSharedPointer<Account>(accPtr);
acc.data()->setState(FSCOMM_GW_STATE_NOAVAIL);
_accounts.insert(gw, acc);
emit newAccount(acc);
}
else if (strcmp(event->subclass_name, "sofia::gateway_del") == 0)
{
QSharedPointer<Account> acc = _accounts.take(switch_event_get_header_nil(event, "Gateway"));
if (!acc.isNull())
emit delAccount(acc);
}
else
{

View File

@ -111,6 +111,18 @@ void AccountDialog::writeConfig()
_settings->beginGroup("FreeSWITCH/conf/sofia.conf/profiles/profile/gateways");
_settings->beginGroup(_accId);
if (!g_FSHost.getAccountByUUID(_accId).isNull())
{
QString res;
QString arg = QString("profile softphone killgw %1").arg(g_FSHost.getAccountByUUID(_accId).data()->getName());
if (g_FSHost.sendCmd("sofia", arg.toAscii().data() , &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not killgw %s from profile softphone.\n",
g_FSHost.getAccountByUUID(_accId).data()->getName().toAscii().data());
}
}
_settings->beginGroup("gateway/attrs");
_settings->setValue("name", ui->sofiaGwNameEdit->text());

View File

@ -13,11 +13,6 @@ PrefAccounts::PrefAccounts(Ui::PrefDialog *ui) :
connect(_ui->sofiaGwEditBtn, SIGNAL(clicked()), this, SLOT(editAccountBtnClicked()));
_ui->accountsTable->horizontalHeader()->setStretchLastSection(true);
if (switch_event_reserve_subclass(FSCOMM_EVENT_ACC_REMOVED) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
}
}
void PrefAccounts::addAccountBtnClicked()
@ -97,9 +92,14 @@ void PrefAccounts::remAccountBtnClicked()
QSharedPointer<Account> acc = g_FSHost.getAccountByUUID(item->data(Qt::UserRole).toString());
if (!acc.isNull())
{
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "acc_name", acc.data()->getName().toAscii().data());
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "acc_uuid", acc.data()->getUUID().toAscii().data());
switch_event_fire(&event);
QString res;
QString arg = QString("profile softphone killgw %1").arg(acc.data()->getName());
if (g_FSHost.sendCmd("sofia", arg.toAscii().data() , &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not killgw %s from profile softphone.\n",
acc.data()->getName().toAscii().data());
}
}
}
_ui->accountsTable->removeRow(row-offset);
@ -108,16 +108,7 @@ void PrefAccounts::remAccountBtnClicked()
}
if (offset > 0)
{
QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
return;
}
readConfig();
}
readConfig(false);
}
void PrefAccounts::writeConfig()
@ -125,7 +116,7 @@ void PrefAccounts::writeConfig()
return;
}
void PrefAccounts::readConfig()
void PrefAccounts::readConfig(bool reload)
{
_ui->accountsTable->clearContents();
@ -155,12 +146,15 @@ void PrefAccounts::readConfig()
_settings->endGroup();
QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
if (reload)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
return;
QString res;
_settings->sync();
if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS)
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n");
return;
}
}
if (_ui->accountsTable->rowCount() == 1)

View File

@ -16,7 +16,7 @@ public:
void writeConfig();
public slots:
void readConfig();
void readConfig(bool reload=true);
private slots:
void addAccountBtnClicked();