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);