]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Properly reload gateway after it has been edited.
authorJoão Mesquita <jmesquita@freeswitch.org>
Sat, 23 Jan 2010 16:15:59 +0000 (16:15 +0000)
committerJoão Mesquita <jmesquita@freeswitch.org>
Sat, 23 Jan 2010 16:15:59 +0000 (16:15 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16478 d0543943-73ff-0310-b7d9-9358b9ac24b2

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

index 63b8e04c58029f127f94bdedb2a8ce156f5299fa..d4a780c5cf925a5faf5d1d9b318dfc098005271a 100644 (file)
@@ -385,6 +385,7 @@ void FSHost::generalEventHandler(switch_event_t *event)
             }
             else if (strcmp(event->subclass_name, "sofia::gateway_del") == 0)
             {
+                qDebug() << "We are deleted...";
                 QSharedPointer<Account> acc = _accounts.take(switch_event_get_header_nil(event, "Gateway"));
                 if (!acc.isNull())
                     emit delAccount(acc);
@@ -400,6 +401,40 @@ void FSHost::generalEventHandler(switch_event_t *event)
     }
 }
 
+void FSHost::accountReloadCmd(QSharedPointer<Account> acc)
+{
+    QString res;
+    QString arg = QString("profile softphone killgw %1").arg(acc.data()->getName());
+
+    connect(this, SIGNAL(delAccount(QSharedPointer<Account>)), this, SLOT(accountReloadSlot(QSharedPointer<Account>)));
+
+    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());
+    }
+    _reloading_Accounts.append(acc.data()->getName());
+
+    qDebug() << "We are reloading...";
+}
+
+void FSHost::accountReloadSlot(QSharedPointer<Account> acc)
+{
+    if (_reloading_Accounts.contains(acc.data()->getName()))
+    {
+        _reloading_Accounts.takeAt(_reloading_Accounts.indexOf(acc.data()->getName(), 0));
+        QString res;
+        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 (_reloading_Accounts.isEmpty())
+            disconnect(this, SLOT(accountReloadSlot(QSharedPointer<Account>)));
+        qDebug() << "We are rescanning...";
+    }
+}
+
 switch_status_t FSHost::sendCmd(const char *cmd, const char *args, QString *res)
 {
     switch_status_t status = SWITCH_STATUS_FALSE;
index 74e215197b41671bcd9da710dfa5db3049523367..dc543947cfd1db273b23a6e364a4eeaae76adf36 100644 (file)
@@ -47,6 +47,7 @@ public:
     QSharedPointer<Call> getCurrentActiveCall();
     QList<QSharedPointer<Account> > getAccounts() { return _accounts.values(); }
     QSharedPointer<Account> getAccountByUUID(QString uuid);
+    void accountReloadCmd(QSharedPointer<Account> acc);
 
 protected:
     void run(void);
@@ -63,6 +64,9 @@ signals:
     void newAccount(QSharedPointer<Account>);
     void delAccount(QSharedPointer<Account>);
 
+private slots:
+    void accountReloadSlot(QSharedPointer<Account>);
+
 private:
     switch_status_t processBlegEvent(switch_event_t *, QString);
     switch_status_t processAlegEvent(switch_event_t *, QString);
@@ -71,6 +75,7 @@ private:
     QHash<QString, QSharedPointer<Call> > _active_calls;
     QHash<QString, QSharedPointer<Account> > _accounts;
     QHash<QString, QString> _bleg_uuids;
+    QList<QString> _reloading_Accounts;
 };
 
 extern FSHost g_FSHost;
index 44cfb0814317de147332fb1494effe2ef542e882..1d0783881a96aad224aefcc6db2dabee44d16177 100644 (file)
@@ -108,21 +108,15 @@ void AccountDialog::readConfig()
 
 void AccountDialog::writeConfig()
 {
+    QSharedPointer<Account> acc = g_FSHost.getAccountByUUID(_accId);
+    if (!acc.isNull())
+    {
+        g_FSHost.accountReloadCmd(acc);
+    }
+
     _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 c551a11f6b03fa2fa4a5a71fe62c9aa240bc7333..7374715a621ce34940b24445823571ad858adf26 100644 (file)
@@ -149,7 +149,6 @@ void PrefAccounts::readConfig(bool reload)
     if (reload)
     {
         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");