Revision
14564
Author
jmesquita
Date
2009-08-19 00:46:49 -0500 (Wed, 19 Aug 2009)

Log Message

Adjustments to the event handlers. We should rename this class since we are not a state machine...

Modified Paths

Diff

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp (14563 => 14564)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp	2009-08-19 03:37:19 UTC (rev 14563)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp	2009-08-19 05:46:49 UTC (rev 14564)
@@ -2,10 +2,21 @@
 #include "eslconnection.h"
 #include "esl.h"
 
-Call::Call(QString orig_uuid, Channel *orig_channel, QString caller_uuid, Channel *caller_channel) :
-        _orig_uuid(orig_uuid),
+State::State(int state_id, QString state_name, QHash<QString, QString> variables)
+        : _state_id(state_id),
+        _state_name(state_name),
+        _variables(variables)
+{}
+
+Channel::Channel(QString uuid, State *state)
+        : _uuid(new QString(uuid))
+{
+    _states.append(state);
+    _currentConfig = state;
+}
+
+Call::Call(Channel *orig_channel, Channel *caller_channel) :
         _orig_channel(orig_channel),
-        _caller_uuid(caller_uuid),
         _caller_channel(caller_channel)
 {}
 
@@ -39,11 +50,34 @@
             }
             else
             {
-                _channels[e._headers.value("Unique-ID")] = new Channel(e._headers.value("Unique-ID"), e._headers);
+                State *state = new State(e._headers.value("Channel-State-Number").toInt(), e._headers.value("Channel-State"), e._headers);
+                _channels[e._headers.value("Unique-ID")] = new Channel(e._headers.value("Unique-ID"), state);
                 emit channelCreated(_channels.value(e._headers.value("Unique-ID")));
             }
             break;
         }
+        case (ESL_EVENT_CHANNEL_UUID):
+        {
+            QString uuid = e._headers.value("Old-Unique-ID");
+            QString new_uuid = e._headers.value("Unique-ID");
+            Channel * chan = _channels.value(uuid, NULL);
+            if (chan)
+            {
+                chan->setUUID(new_uuid);
+                if(_calls.contains(uuid))
+                {
+                    Call *call = _calls.take(uuid);
+                    _calls.insert(new_uuid, call);
+                }
+                else if (_inactive_calls.contains(uuid))
+                {
+                    /* This is quite impossible anyway ... */
+                    Call *call = _inactive_calls.take(uuid);
+                    _inactive_calls.insert(new_uuid, call);
+                }
+            }
+            break;
+        }
         case (ESL_EVENT_CHANNEL_BRIDGE) :
         {
             QString orig_uuid = e._headers.value("Other-Leg-Unique-ID");
@@ -56,9 +90,10 @@
             }
             else
             {
-                Call * new_call = new Call(orig_uuid, orig_chan, caller_uuid, caller_chan);
+                State *state = new State(e._headers.value("Channel-State-Number").toInt(), e._headers.value("Channel-State"), e._headers);
+                Call * new_call = new Call(orig_chan, caller_chan);
                 _calls.insert(caller_uuid,new_call);
-                caller_chan->stateChanged(e._headers);
+                caller_chan->stateChanged(state);
                 emit callCreated(new_call);
             }
             break;
@@ -75,9 +110,10 @@
             }
             else
             {
+                State *state = new State(e._headers.value("Channel-State-Number").toInt(), e._headers.value("Channel-State"), e._headers);
                 Call *ecall = _calls.take(caller_uuid);
                 _inactive_calls.insert(caller_uuid, ecall);
-                caller_chan->stateChanged(e._headers);
+                caller_chan->stateChanged(state);
                 emit callDestroyed(ecall);
             }
             break;
@@ -90,7 +126,8 @@
             }
             else
             {
-                _channels[e._headers.value("Unique-ID")]->stateChanged(e._headers);
+                State *state = new State(e._headers.value("Channel-State-Number").toInt(), e._headers.value("Channel-State"), e._headers);
+                _channels[e._headers.value("Unique-ID")]->stateChanged(state);
                 emit channelStateChanged(_channels.value(e._headers.value("Unique-ID")));
             }
             break;
@@ -103,8 +140,11 @@
             }
             else
             {
+                State *state = new State(e._headers.value("Channel-State-Number").toInt(), e._headers.value("Channel-State"), e._headers);
                 Channel * chan = _channels.take(e._headers.value("Unique-ID"));
                 _inactive_channels.insert(e._headers.value("Unique-ID"), chan);
+                chan->stateChanged(state);
+                qDebug() << chan->getStates();
                 emit channelDestroyed(chan);
             }
             break;

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h (14563 => 14564)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h	2009-08-19 03:37:19 UTC (rev 14563)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h	2009-08-19 05:46:49 UTC (rev 14564)
@@ -7,33 +7,45 @@
 
 class ESLconnection;
 
-class Channel
+class State
 {
 private:
-    QString _uuid;
+    int _state_id;
+    QString _state_name;
     QHash<QString, QString> _variables;
 public:
-    Channel() {}
-    Channel(QString uuid, QHash<QString, QString> variables) : _uuid(uuid), _variables(variables) {}
-    QHash<QString, QString> getVariables() { return _variables; }
-    QString getUUID() { return _uuid; }
-    QString getHeader(QString header) { return _variables.value(header, ""); }
+    State(int state_id, QString state_name, QHash<QString, QString> variables);
     QHash<QString, QString> getHeaders() { return _variables; }
-    void stateChanged(QHash<QString, QString> variables) { _variables = variables; }
+    QString getHeader(QString header) { return _variables.value(header, NULL); }
+    QString getStateName() { return _state_name; }
+    int getStateId() { return _state_id; }
 };
 
+class Channel
+{
+private:
+    QString *_uuid;
+    QList <State *> _states;
+    State *_currentConfig;
+public:
+    Channel(QString uuid, State *state);
+    QHash<QString, QString> getCurrentStateVariables() { return _currentConfig->getHeaders(); }
+    QString getUUID() { return *_uuid; }
+    void setUUID(QString uuid) { delete _uuid; _uuid = new QString(uuid); }
+    QString getCurrentStateHeader(QString header) { return _currentConfig->getHeader(header); }
+    void stateChanged(State *state) { _states.append(state); _currentConfig = state; }
+    QList <State *> getStates() { return _states; }
+};
+
 class Call
 {
 private:
-    QString _orig_uuid;
     Channel *_orig_channel;
-    QString _caller_uuid;
     Channel *_caller_channel;
 public:
-    Call(QString orig_uuid, Channel *orig_channel,
-         QString caller_uuid, Channel *caller_channel);
-    QString getCallerUUID() { return _caller_uuid; }
-    QString getOriginateeUUID() { return _orig_uuid; }
+    Call(Channel *orig_channel, Channel *caller_channel);
+    QString getCallerUUID() { return _caller_channel->getUUID(); }
+    QString getOriginateeUUID() { return _orig_channel->getUUID(); }
     Channel *getCallerChannel() { return _caller_channel; }
     Channel *getOriginateeChannel() { return _orig_channel; }
 };

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp (14563 => 14564)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp	2009-08-19 03:37:19 UTC (rev 14563)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp	2009-08-19 05:46:49 UTC (rev 14564)
@@ -68,7 +68,7 @@
     if (!ch)
         return;
 
-    QStandardItem *item = new QStandardItem(QString("%1 - %2").arg(ch->getUUID(), ch->getHeader("Channel-State")));
+    QStandardItem *item = new QStandardItem(QString("%1 - %2").arg(ch->getUUID(), ch->getCurrentStateHeader("Channel-State")));
     item->setData(ch->getUUID(), Qt::UserRole);
     _channel_model->insertRow(0, item);
 }
@@ -107,8 +107,18 @@
             {
                 activeChannelSelected(_channel_model->indexFromItem(item));
             }
-        item->setText(QString("%1 - %2").arg(ch->getUUID(), ch->getHeader("Channel-State")));
+        item->setText(QString("%1 - %2").arg(ch->getUUID(), ch->getCurrentStateHeader("Channel-State")));
     }
+
+    foreach (QStandardItem *item, _inactive_channel_model->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive))
+    {
+        if (item->data(Qt::UserRole) == ch->getUUID())
+            if (_inactive_channel_model->itemFromIndex(m_ui->listInactiveChannels->currentIndex()) == item)
+            {
+                inactiveChannelSelected(_inactive_channel_model->indexFromItem(item));
+            }
+        item->setText(QString("%1 - %2").arg(ch->getUUID(), ch->getCurrentStateHeader("Channel-State")));
+    }
 }
 
 void RealtimeStatisticsDialog::activeChannelSelected(QModelIndex index)
@@ -119,9 +129,9 @@
     if (!ch)
         return;
 
-    foreach (QString key, ch->getVariables().keys())
+    foreach (QString key, ch->getCurrentStateVariables().keys())
     {
-        m_ui->listActiveVariables->addItem(QString("%1 = %2").arg(key, ch->getVariables().value(key)));
+        m_ui->listActiveVariables->addItem(QString("%1 = %2").arg(key, ch->getCurrentStateVariables().value(key)));
     }
 }
 
@@ -133,9 +143,9 @@
     if (!ch)
         return;
 
-    foreach (QString key, ch->getVariables().keys())
+    foreach (QString key, ch->getCurrentStateVariables().keys())
     {
-        m_ui->listInactiveVariables->addItem(QString("%1 = %2").arg(key, ch->getVariables().value(key)));
+        m_ui->listInactiveVariables->addItem(QString("%1 = %2").arg(key, ch->getCurrentStateVariables().value(key)));
     }
 }
 
@@ -178,9 +188,9 @@
     /* Sanity checking */
     if (!c)
         return;
-    QString caller_cidnum = c->getCallerChannel()->getHeader("Caller-Caller-ID-Number");
-    QString caller_cidname = c->getCallerChannel()->getHeader("variable_effective_caller_id_name");
-    QString orig_cidnum = c->getCallerChannel()->getHeader("Caller-Destination-Number");
+    QString caller_cidnum = c->getCallerChannel()->getCurrentStateHeader("Caller-Caller-ID-Number");
+    QString caller_cidname = c->getCallerChannel()->getCurrentStateHeader("variable_effective_caller_id_name");
+    QString orig_cidnum = c->getCallerChannel()->getCurrentStateHeader("Caller-Destination-Number");
     QString caller_uuid = c->getCallerUUID();
     QString callTitle = QString("%1(%2) <-> %3 (Caller UUID: %4)").arg(caller_cidnum, caller_cidname, orig_cidnum, caller_uuid);
     QListWidgetItem *item = new QListWidgetItem(callTitle, m_ui->listActiveCalls);