]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Properly remove account. Requires http://jira.freeswitch.org/browse/MODENDP-284
authorJoão Mesquita <jmesquita@freeswitch.org>
Sat, 23 Jan 2010 06:50:13 +0000 (06:50 +0000)
committerJoão Mesquita <jmesquita@freeswitch.org>
Sat, 23 Jan 2010 06:50:13 +0000 (06:50 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16476 d0543943-73ff-0310-b7d9-9358b9ac24b2

fscomm/account.h
fscomm/fshost.cpp
fscomm/preferences/accountdialog.cpp
fscomm/preferences/prefaccounts.cpp
fscomm/preferences/prefaccounts.h

index ef66e70bd2ef161d41f2b7c825e645b247fe3a67..7a044151f314069c97fcf103ae5638dcaf0968a0 100644 (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 {
index 9533806e871d758e647bcd1fabc73ad8d4a4fef6..63b8e04c58029f127f94bdedb2a8ce156f5299fa 100644 (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)
+            {
+                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
             {
index 3010d7f1f59bd888dbc2031c7bbf75d55d57d946..44cfb0814317de147332fb1494effe2ef542e882 100644 (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());
index 929b36baea58a295f58da21298999d9d92ce9b96..c551a11f6b03fa2fa4a5a71fe62c9aa240bc7333 100644 (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)
index 7d98b571d32bda2e32001055f41c9b68c93064de..e995cab208736592774628254282e828f899cc83 100644 (file)
@@ -16,7 +16,7 @@ public:
     void writeConfig();
 
 public slots:
-    void readConfig();
+    void readConfig(bool reload=true);
 
 private slots:
     void addAccountBtnClicked();