#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[] = {
QString("Failed"),
QString("Failed"),
QString("Expired"),
- QString("Not applicable")
+ QString("Not applicable"),
+ QString("Not available")
};
class Account {
{
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);
emit accountStateChange(acc);
}
}
- else if (strcmp(event->subclass_name, "fscomm::acc_removed") == 0)
+ else if (strcmp(event->subclass_name, "sofia::gateway_add") == 0)
+ {
+ 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, "acc_name"));
- emit delAccount(acc);
+ QSharedPointer<Account> acc = _accounts.take(switch_event_get_header_nil(event, "Gateway"));
+ if (!acc.isNull())
+ emit delAccount(acc);
}
else
{
_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());
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()
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);
}
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()
return;
}
-void PrefAccounts::readConfig()
+void PrefAccounts::readConfig(bool reload)
{
_ui->accountsTable->clearContents();
_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)
void writeConfig();
public slots:
- void readConfig();
+ void readConfig(bool reload=true);
private slots:
void addAccountBtnClicked();