Revision
16476
Author
jmesquita
Date
2010-01-23 00:50:13 -0600 (Sat, 23 Jan 2010)

Log Message

Properly remove account. Requires http://jira.freeswitch.org/browse/MODENDP-284

Modified Paths

Diff

Modified: freeswitch/trunk/fscomm/account.h (16475 => 16476)


--- freeswitch/trunk/fscomm/account.h	2010-01-23 06:17:09 UTC (rev 16475)
+++ freeswitch/trunk/fscomm/account.h	2010-01-23 06:50:13 UTC (rev 16476)
@@ -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 @@
     QString("Failed"),
     QString("Failed"),
     QString("Expired"),
-    QString("Not applicable")
+    QString("Not applicable"),
+    QString("Not available")
 };
 
 class Account {

Modified: freeswitch/trunk/fscomm/fshost.cpp (16475 => 16476)


--- freeswitch/trunk/fscomm/fshost.cpp	2010-01-23 06:17:09 UTC (rev 16475)
+++ freeswitch/trunk/fscomm/fshost.cpp	2010-01-23 06:50:13 UTC (rev 16476)
@@ -341,16 +341,9 @@
             {
                 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,11 +374,21 @@
                     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
             {
                 printEventHeaders(event);

Modified: freeswitch/trunk/fscomm/preferences/accountdialog.cpp (16475 => 16476)


--- freeswitch/trunk/fscomm/preferences/accountdialog.cpp	2010-01-23 06:17:09 UTC (rev 16475)
+++ freeswitch/trunk/fscomm/preferences/accountdialog.cpp	2010-01-23 06:50:13 UTC (rev 16476)
@@ -111,6 +111,18 @@
     _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());

Modified: freeswitch/trunk/fscomm/preferences/prefaccounts.cpp (16475 => 16476)


--- freeswitch/trunk/fscomm/preferences/prefaccounts.cpp	2010-01-23 06:17:09 UTC (rev 16475)
+++ freeswitch/trunk/fscomm/preferences/prefaccounts.cpp	2010-01-23 06:50:13 UTC (rev 16476)
@@ -13,11 +13,6 @@
     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 @@
                 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 @@
     }
 
     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 @@
     return;
 }
 
-void PrefAccounts::readConfig()
+void PrefAccounts::readConfig(bool reload)
 {
 
     _ui->accountsTable->clearContents();
@@ -155,12 +146,15 @@
 
     _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)

Modified: freeswitch/trunk/fscomm/preferences/prefaccounts.h (16475 => 16476)


--- freeswitch/trunk/fscomm/preferences/prefaccounts.h	2010-01-23 06:17:09 UTC (rev 16475)
+++ freeswitch/trunk/fscomm/preferences/prefaccounts.h	2010-01-23 06:50:13 UTC (rev 16476)
@@ -16,7 +16,7 @@
     void writeConfig();
 
 public slots:
-    void readConfig();
+    void readConfig(bool reload=true);
 
 private slots:
     void addAccountBtnClicked();