Diff
Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp (14542 => 14543)
--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp 2009-08-17 04:22:03 UTC (rev 14542)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp 2009-08-17 07:28:19 UTC (rev 14543)
@@ -299,7 +299,6 @@
{
commandTransaction = _commandQueue.dequeue();
event = bgapi(commandTransaction->getCommand());
- qDebug() << "Sent a command and got this response : " << event;
if (event)
_commandHash.insert(event->_headers.value("Job-UUID"), commandTransaction);
}
Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp (14542 => 14543)
--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp 2009-08-17 04:22:03 UTC (rev 14542)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.cpp 2009-08-17 07:28:19 UTC (rev 14543)
@@ -2,6 +2,13 @@
#include "eslconnection.h"
#include "esl.h"
+Call::Call(QString orig_uuid, Channel *orig_channel, QString caller_uuid, Channel *caller_channel) :
+ _orig_uuid(orig_uuid),
+ _orig_channel(orig_channel),
+ _caller_uuid(caller_uuid),
+ _caller_channel(caller_channel)
+{}
+
MonitorStateMachine::MonitorStateMachine()
{
}
@@ -37,6 +44,44 @@
}
break;
}
+ case (ESL_EVENT_CHANNEL_BRIDGE) :
+ {
+ QString orig_uuid = e._headers.value("Other-Leg-Unique-ID");
+ QString caller_uuid = e._headers.value("Unique-ID");
+ Channel * orig_chan = _channels.value(orig_uuid, NULL);
+ Channel * caller_chan = _channels.value(caller_uuid, NULL);
+ if (!orig_chan || !caller_chan)
+ {
+ qDebug() << QString("Channel %1 or %2 do not exist! [ESL_EVENT_CHANNEL_BRIDGE]").arg(orig_uuid, caller_uuid);
+ }
+ else
+ {
+ Call * new_call = new Call(orig_uuid, orig_chan, caller_uuid, caller_chan);
+ _calls.insert(caller_uuid,new_call);
+ caller_chan->stateChanged(e._headers);
+ emit callCreated(new_call);
+ }
+ break;
+ }
+ case (ESL_EVENT_CHANNEL_UNBRIDGE) :
+ {
+ QString orig_uuid = e._headers.value("Other-Leg-Unique-ID");
+ QString caller_uuid = e._headers.value("Unique-ID");
+ Channel * orig_chan = _channels.value(orig_uuid, NULL);
+ Channel * caller_chan = _channels.value(caller_uuid, NULL);
+ if (!orig_chan || !caller_chan)
+ {
+ qDebug() << QString("Channel %1 or %2 do not exist! [ESL_EVENT_CHANNEL_UNBRIDGE]").arg(orig_uuid, caller_uuid);
+ }
+ else
+ {
+ Call *ecall = _calls.take(caller_uuid);
+ _inactive_calls.insert(caller_uuid, ecall);
+ caller_chan->stateChanged(e._headers);
+ emit callDestroyed(ecall);
+ }
+ break;
+ }
case (ESL_EVENT_CHANNEL_STATE) :
{
if (!_channels.contains(e._headers.value("Unique-ID")))
@@ -48,7 +93,6 @@
_channels[e._headers.value("Unique-ID")]->stateChanged(e._headers);
emit channelStateChanged(_channels.value(e._headers.value("Unique-ID")));
}
-
break;
}
case (ESL_EVENT_CHANNEL_DESTROY):
@@ -59,15 +103,15 @@
}
else
{
- _channels[e._headers.value("Unique-ID")]->stateChanged(e._headers);
- emit channelDestroyed(_channels.value(e._headers.value("Unique-ID")));
+ Channel * chan = _channels.take(e._headers.value("Unique-ID"));
+ _inactive_channels.insert(e._headers.value("Unique-ID"), chan);
+ emit channelDestroyed(chan);
}
break;
}
default:
{
- if (e.getType() != "COMMAND")
- qDebug() << "Event not treated: " << e.getType();
+ break;
}
}
Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h (14542 => 14543)
--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h 2009-08-17 04:22:03 UTC (rev 14542)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/monitorstatemachine.h 2009-08-17 07:28:19 UTC (rev 14543)
@@ -18,15 +18,37 @@
QHash<QString, QString> getVariables() { return _variables; }
QString getUUID() { return _uuid; }
QString getHeader(QString header) { return _variables.value(header, ""); }
+ QHash<QString, QString> getHeaders() { return _variables; }
void stateChanged(QHash<QString, QString> variables) { _variables = variables; }
};
+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; }
+ Channel *getCallerChannel() { return _caller_channel; }
+ Channel *getOriginateeChannel() { return _orig_channel; }
+};
+
class MonitorStateMachine : public QObject
{
Q_OBJECT
private:
QList<ESLconnection *> _listESL;
QHash <QString, Channel *> _channels;
+ QHash <QString, Channel *> _inactive_channels;
+ /*! Always indexed by caller UUID */
+ QHash <QString, Call *> _calls;
+ /*! Always indexed by caller UUID */
+ QHash <QString, Call *> _inactive_calls;
public:
MonitorStateMachine();
void addESLconnection(ESLconnection *);
@@ -39,6 +61,8 @@
signals:
void channelStateChanged(Channel *);
void channelCreated(Channel *);
+ void callCreated(Call *);
+ void callDestroyed(Call *);
void channelDestroyed(Channel *);
};
Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp (14542 => 14543)
--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp 2009-08-17 04:22:03 UTC (rev 14542)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.cpp 2009-08-17 07:28:19 UTC (rev 14543)
@@ -9,12 +9,23 @@
_sm(sm)
{
m_ui->setupUi(this);
+
+ /* Connect channel stuff */
connect(sm, SIGNAL(channelCreated(Channel*)),
this, SLOT(channelCreate(Channel*)));
connect(sm, SIGNAL(channelDestroyed(Channel*)),
this, SLOT(channelDestroy(Channel*)));
+ connect(sm, SIGNAL(channelStateChanged(Channel*)),
+ this, SLOT(channelStateChanged(Channel*)));
connect(m_ui->listActiveChannels, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(channelSelected(QListWidgetItem*)));
+
+ /* Connect call stuff */
+ connect(sm, SIGNAL(callCreated(Call*)),
+ this, SLOT(callCreate(Call*)));
+ connect(sm, SIGNAL(callDestroyed(Call*)),
+ this, SLOT(callDestroy(Call*)));
+
delete m_ui->tab_2;
}
@@ -37,6 +48,10 @@
void RealtimeStatisticsDialog::channelCreate(Channel *ch)
{
+ /* Sanity checking */
+ if (!ch)
+ return;
+
QListWidgetItem *item = new QListWidgetItem(QString("%1 - %2").arg(ch->getUUID(), ch->getHeader("Channel-State")),
m_ui->listActiveChannels);
item->setData(Qt::UserRole, ch->getUUID());
@@ -44,6 +59,10 @@
void RealtimeStatisticsDialog::channelDestroy(Channel *ch)
{
+ /* Sanity checking */
+ if (!ch)
+ return;
+
for (int i = 0; i < m_ui->listActiveChannels->count(); i++)
{
if (m_ui->listActiveChannels->item(i)->data(Qt::UserRole) == ch->getUUID())
@@ -56,6 +75,23 @@
}
}
+void RealtimeStatisticsDialog::channelStateChanged(Channel * ch)
+{
+ /* Sanity checking */
+ if (!ch)
+ return;
+
+ for (int i = 0; i < m_ui->listActiveChannels->count(); i++)
+ {
+ if (m_ui->listActiveChannels->item(i)->data(Qt::UserRole).toString() == ch->getUUID())
+ if (m_ui->listActiveChannels->currentItem() == m_ui->listActiveChannels->item(i))
+ {
+ channelSelected(m_ui->listActiveChannels->item(i));
+ }
+ m_ui->listActiveChannels->item(i)->setText(QString("%1 - %2").arg(ch->getUUID(), ch->getHeader("Channel-State")));
+ }
+}
+
void RealtimeStatisticsDialog::channelSelected(QListWidgetItem *item)
{
m_ui->listActiveVariables->clear();
@@ -69,3 +105,30 @@
m_ui->listActiveVariables->addItem(QString("%1 = %2").arg(key, ch->getVariables().value(key)));
}
}
+
+void RealtimeStatisticsDialog::callCreate(Call *c)
+{
+ /* 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");
+ QListWidgetItem *item = new QListWidgetItem(QString("%1(%2) <-> %3").arg(caller_cidnum,
+ caller_cidname,
+ orig_cidnum), m_ui->listActiveCalls);
+ item->setData(Qt::UserRole, c->getCallerUUID());
+}
+
+void RealtimeStatisticsDialog::callDestroy(Call *c)
+{
+ /* Sanity checking */
+ if (!c)
+ return;
+
+ for (int i = 0; i < m_ui->listActiveCalls->count(); i++)
+ {
+ if (m_ui->listActiveCalls->item(i)->data(Qt::UserRole) == c->getCallerUUID())
+ delete m_ui->listActiveCalls->item(i);
+ }
+}
Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.h (14542 => 14543)
--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.h 2009-08-17 04:22:03 UTC (rev 14542)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/realtimestatisticsdialog.h 2009-08-17 07:28:19 UTC (rev 14543)
@@ -10,6 +10,7 @@
class QListWidgetItem;
class MonitorStateMachine;
class Channel;
+class Call;
class RealtimeStatisticsDialog : public QDialog {
Q_OBJECT
@@ -24,7 +25,10 @@
private slots:
void channelCreate(Channel *);
void channelDestroy(Channel *);
+ void channelStateChanged(Channel *);
void channelSelected(QListWidgetItem *);
+ void callCreate(Call *);
+ void callDestroy(Call *);
private:
Ui::RealtimeStatisticsDialog *m_ui;