sofaswitch-svn
Threads by month
- ----- 2026 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
February 2007
- 1 participants
- 4 discussions
Author: derek
Date: Wed Feb 14 16:29:02 2007
New Revision: 243
Modified:
sofaswitch/trunk/voip/udpconnection.cxx
Log:
Fix passing of string options parameter around. Now, h323 voip calls seem to work.
Modified: sofaswitch/trunk/voip/udpconnection.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.cxx (original)
+++ sofaswitch/trunk/voip/udpconnection.cxx Wed Feb 14 16:29:02 2007
@@ -273,8 +273,8 @@
{
PTRACE(3, "Initiate call ");
phase = SetUpPhase;
- OpalConnection::StringOptions stringOptions;
- if (!OnIncomingConnection(0, &stringOptions))
+
+ if (!OnIncomingConnection(0, NULL))
Release(EndedByCallerAbort);
else {
PTRACE(2, "UdpSs\tOutgoing call routed to " << ownerCall.GetPartyB() << " for " << *this);
1
0
Author: derek
Date: Tue Feb 13 23:11:32 2007
New Revision: 242
Modified:
sofaswitch/trunk/voip/jocall.cxx
sofaswitch/trunk/voip/mymanager.cxx
sofaswitch/trunk/voip/mymanager.h
sofaswitch/trunk/voip/udpconnection.cxx
sofaswitch/trunk/voip/udpconnection.h
sofaswitch/trunk/voip/udpep.cxx
sofaswitch/trunk/voip/udpep.h
Log:
Add code to cope with recent changes in the openh323 cvs, which creates
the variable stringOptions. Currently, this variable is Not set to null, so calls crash (which use h323/sip)
Modified: sofaswitch/trunk/voip/jocall.cxx
==============================================================================
--- sofaswitch/trunk/voip/jocall.cxx (original)
+++ sofaswitch/trunk/voip/jocall.cxx Tue Feb 13 23:11:32 2007
@@ -107,7 +107,7 @@
for (PSafePtr<OpalConnection> conn(connectionsActive, PSafeReadOnly); conn != NULL; ++conn, i++) {
PTRACE(3, "connection " << i << " is " << (*conn));
}
-
+
for (PSafePtr<OpalConnection> conn(connectionsActive, PSafeReadOnly); conn != NULL; ++conn) {
PTRACE(3, "TRY " << (*conn));
if (conn != &connection) {
Modified: sofaswitch/trunk/voip/mymanager.cxx
==============================================================================
--- sofaswitch/trunk/voip/mymanager.cxx (original)
+++ sofaswitch/trunk/voip/mymanager.cxx Tue Feb 13 23:11:32 2007
@@ -822,7 +822,7 @@
call->SetPartyB(partyB);
- if (MakeConnection(*call, partyA))
+ if (MakeConnection(*call, partyA, NULL))
return TRUE;
call->Clear();
@@ -896,9 +896,22 @@
BOOL MyManager::OnIncomingConnection(OpalConnection & connection)
{
+ return OnIncomingConnection(connection, 0);
+}
+
+BOOL MyManager::OnIncomingConnection(OpalConnection & connection,
+ unsigned options)
+{
+ return OnIncomingConnection(connection, options, NULL);
+}
+
+BOOL MyManager::OnIncomingConnection(OpalConnection & connection,
+ unsigned options,
+ OpalConnection::StringOptions *stringOptions)
+{
PTRACE(3, "Incoming connection from " << connection.GetRemotePartyName());
- return OpalManager::OnIncomingConnection(connection);
+ return OpalManager::OnIncomingConnection(connection, options, stringOptions);
}
OpalConnection::AnswerCallResponse
Modified: sofaswitch/trunk/voip/mymanager.h
==============================================================================
--- sofaswitch/trunk/voip/mymanager.h (original)
+++ sofaswitch/trunk/voip/mymanager.h Tue Feb 13 23:11:32 2007
@@ -39,6 +39,7 @@
#include <ptlib.h>
#include <ptclib/ipacl.h>
#include <opal/manager.h>
+#include <opal/connection.h>
#include "comms.h"
@@ -75,22 +76,63 @@
/**Where we sit, while waiting for commands & events */
void Main(PArgList & args);
- /**Call back for answering an incoming call.
+ /**Call back for answering an incoming call.
+ This function is used for an application to control the answering of
+ incoming calls.
+
+ If TRUE is returned then the connection continues. If FALSE then the
+ connection is aborted.
+
+ Note this function should not block for any length of time. If the
+ decision to answer the call may take some time eg waiting for a user to
+ pick up the phone, then AnswerCallPending or AnswerCallDeferred should
+ be returned.
+
+ If an application overrides this function, it should generally call the
+ ancestor version to complete calls. Unless the application completely
+ takes over that responsibility. Generally, an application would only
+ intercept this function if it wishes to do some form of logging. For
+ this you can obtain the name of the caller by using the function
+ OpalConnection::GetRemotePartyName().
+
+ The default behaviour is to call OnRouteConnection to determine a
+ B party for the connection.
+
+ If the call associated with the incoming call already had two parties
+ and this connection is a third party for a conference call then
+ AnswerCallNow is returned as a B party is not required.
+ */
+ virtual BOOL OnIncomingConnection(
+ OpalConnection & connection, ///< Connection that is calling
+ unsigned options, ///< options for new connection (can't use default as overrides will fail)
+ OpalConnection::StringOptions * stringOptions///< Used for specifiy local party name etc. NULL is a valid value.
+ );
+
+ /**Call back for answering an incoming call, identical to above
+ This function is used for an application to control the answering of
+ incoming calls.
+ */
+ virtual BOOL OnIncomingConnection(
+ OpalConnection & connection, ///< Connection that is calling
+ unsigned options ///< options for new connection (can't use default as overrides will fail)
+ );
+
+ /**Call back for answering an incoming call, identical to above
This function is used for an application to control the answering of
incoming calls.
*/
virtual BOOL OnIncomingConnection(
- OpalConnection & connection /// Connection that is calling
+ OpalConnection & connection ///< Connection that is calling
);
/**A call has been established, and now is running with media in both directions */
virtual void OnEstablishedCall(
- OpalCall & call /// Call that was completed
+ OpalCall & call ///< Call that was completed
);
/**A call has been cleared, and is about to be totally destroyed */
virtual void OnClearedCall(
- OpalCall & call /// Connection that was established
+ OpalCall & call ///< Connection that was established
);
/**Create a new media stream for them to use */
Modified: sofaswitch/trunk/voip/udpconnection.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.cxx (original)
+++ sofaswitch/trunk/voip/udpconnection.cxx Tue Feb 13 23:11:32 2007
@@ -65,15 +65,17 @@
OpalUdpSsConnection::OpalUdpSsConnection(OpalCall & call,
OpalUdpSsEndPoint & ep,
- const PString & newToken)
- : OpalConnection(call, ep, newToken),
+ const PString & newToken,
+ unsigned int options,
+ OpalConnection::StringOptions * _stringOptions)
+ : OpalConnection(call, ep, newToken, options, _stringOptions),
endpoint(ep)
{
IncOpalUdpSsConnection();
silenceDetector = new OpalPCM16SilenceDetector;
- PTRACE(3, "UdpSs\tCreated UDP sound system OpalConnection" << GetToken());
+ PTRACE(3, "UdpSs\tCreated UDP sound system OpalUdpSsConnection" << GetToken());
}
@@ -93,18 +95,47 @@
BOOL OpalUdpSsConnection::SetUpConnection()
{
- PTRACE(3, "SETUPConnection ");
-
remotePartyName = ownerCall.GetOtherPartyConnection(*this)->GetRemotePartyName();
remotePartyAddress = ownerCall.GetOtherPartyConnection(*this)->GetRemotePartyAddress();
remoteApplication = ownerCall.GetOtherPartyConnection(*this)->GetRemoteApplication();
- PTRACE(3, "UdpSs\tSetUpConnection(" << remotePartyName << ')');
- phase = AlertingPhase;
- endpoint.OnShowIncoming(*this);
- OnAlerting();
-
+ PTRACE(3, "UdpSs\tSetUpConnection, Remote party name " << remotePartyName << ')');
+ PTRACE(3, "UdpSs\tSetUpConnection, Remote party address" << remotePartyAddress << ')');
+ PTRACE(3, "UdpSs\tSetUpConnection, Remote application " << remoteApplication << ')');
+
+ // Check if we are A-Party in thsi call, so need to do things differently
+ if (ownerCall.GetConnection(0) == this) {
+ phase = SetUpPhase;
+ if (!OnIncomingConnection(0, NULL)) {
+ Release(EndedByCallerAbort);
+ return FALSE;
+ }
+
+ PTRACE(2, "PCSS\tOutgoing call routed to " << ownerCall.GetPartyB() << " for " << *this);
+ if (!ownerCall.OnSetUp(*this)) {
+ Release(EndedByNoAccept);
+ return FALSE;
+ }
+
return TRUE;
+ }
+
+ {
+ PSafePtr<OpalConnection> otherConn = ownerCall.GetOtherPartyConnection(*this);
+ if (otherConn == NULL)
+ return FALSE;
+
+ remotePartyName = otherConn->GetRemotePartyName();
+ remotePartyAddress = otherConn->GetRemotePartyAddress();
+ remoteApplication = otherConn->GetRemoteApplication();
+ }
+
+ PTRACE(3, "PCSS\tSetUpConnection(" << remotePartyName << ')');
+ phase = AlertingPhase;
+ endpoint.OnShowIncoming(*this);
+ OnAlerting();
+
+ return TRUE;
}
Modified: sofaswitch/trunk/voip/udpconnection.h
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.h (original)
+++ sofaswitch/trunk/voip/udpconnection.h Tue Feb 13 23:11:32 2007
@@ -58,8 +58,10 @@
OpalUdpSsConnection(
OpalCall & call, /*!< Owner calll for connection */
OpalUdpSsEndPoint & endpoint, /*!< Owner endpoint for connection */
- const PString & newToken /*!< token for this connection */
- );
+ const PString & newToken, /*!< token for this connection */
+ unsigned int options,
+ OpalConnection::StringOptions * _stringOptions);
+
/**Destroy endpoint.
*/
Modified: sofaswitch/trunk/voip/udpep.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpep.cxx (original)
+++ sofaswitch/trunk/voip/udpep.cxx Tue Feb 13 23:11:32 2007
@@ -75,19 +75,9 @@
}
BOOL OpalUdpSsEndPoint::MakeConnection(OpalCall & call,
- const PString & remoteParty,
+ const PString & remoteParty,
void * userData)
{
- return MakeConnection(call, remoteParty, userData, 0);
-}
-
-
-
-BOOL OpalUdpSsEndPoint::MakeConnection(OpalCall & call,
- const PString & remoteParty,
- void * userData,
- unsigned int /*options*/)
-{
// First strip of the prefix if present
PINDEX prefixLength = 0;
if (remoteParty.Find(GetPrefixName()+":") == 0)
@@ -95,12 +85,12 @@
const PString conToken = MakeToken();
- PSafePtr<OpalUdpSsConnection> connection = CreateConnection(call, userData, conToken);
+ PSafePtr<OpalUdpSsConnection> connection = CreateConnection(call, userData, conToken);
if (connection == NULL) {
PTRACE(1, "Failed to create a connection on " << conToken);
return FALSE;
}
-
+
connectionsActive.SetAt(conToken, connection);
// If we are the A-party then need to initiate a call now in this thread and
@@ -113,6 +103,27 @@
return TRUE;
}
+
+
+
+BOOL OpalUdpSsEndPoint::MakeConnection(OpalCall & call,
+ const PString & remoteParty,
+ void * userData,
+ unsigned int /*options*/,
+ OpalConnection::StringOptions *stringOptions)
+{
+ return MakeConnection(call, remoteParty, userData);
+}
+
+BOOL OpalUdpSsEndPoint::MakeConnection(OpalCall & call,
+ const PString & remoteParty,
+ void *userData,
+ unsigned int /*options*/)
+{
+ return MakeConnection(call, remoteParty, userData);
+}
+
+
PString OpalUdpSsEndPoint::OnGetDestination(const OpalUdpSsConnection & /*connection*/)
{
PTRACE(1, "OnGetDestination " << destinationAddress);
@@ -149,7 +160,7 @@
const PString & newToken)
{
PTRACE(1, "Create opalUdpSsConnection");
- return new OpalUdpSsConnection(call, *this, newToken);
+ return new OpalUdpSsConnection(call, *this, newToken, 0, NULL);
}
Modified: sofaswitch/trunk/voip/udpep.h
==============================================================================
--- sofaswitch/trunk/voip/udpep.h (original)
+++ sofaswitch/trunk/voip/udpep.h Tue Feb 13 23:11:32 2007
@@ -101,22 +101,28 @@
The default behaviour is pure.
*/
virtual BOOL MakeConnection(
- OpalCall & call, ///< Owner of connection
- const PString & party, ///< Remote party to call
- void * userData = NULL, ///< Arbitrary data to pass to connection
- unsigned int options = 0 ///< options to pass to conneciton
+ OpalCall & call, ///< Owner of connection
+ const PString & party, ///< Remote party to call
+ void * userData = NULL ///< Arbitrary data to pass to connection
+ );
+ virtual BOOL MakeConnection(
+ OpalCall & call, ///< Owner of connection
+ const PString & party, ///< Remote party to call
+ void * userData, ///< Arbitrary data to pass to connection
+ unsigned int options ///< options to pass to conneciton
);
-
- /**This filler method is identical to that above, and is provided as a
- convenience, when working against different library versions.*/
virtual BOOL MakeConnection(
- OpalCall & call, ///< Owner of connection
- const PString & party, ///< Remote party to call
- void * userData = NULL ///< Arbitrary data to pass to connection
+ OpalCall & call, ///< Owner of connection
+ const PString & party, ///< Remote party to call
+ void * userData, ///< Arbitrary data to pass to connection
+ unsigned int options, ///< options to pass to conneciton
+ OpalConnection::StringOptions * stringOptions
);
+
+
/**Get the data formats this endpoint is capable of operating.
This provides a list of media data format names that may be used by an
OpalMediaStream may be created by a connection from this endpoint.
1
0
Author: derek
Date: Tue Feb 13 19:20:25 2007
New Revision: 241
Modified:
sofaswitch/trunk/server/main.cxx
Log:
Improve reporting, so it is clear what messages are receveived,
and what messages are sent from the server.
Modified: sofaswitch/trunk/server/main.cxx
==============================================================================
--- sofaswitch/trunk/server/main.cxx (original)
+++ sofaswitch/trunk/server/main.cxx Tue Feb 13 19:20:25 2007
@@ -575,7 +575,7 @@
if (reportReadMessages) {
PStringStream msg;
msg << GetNow()
- << " New node of "
+ << " Recv New node of "
<< sourceId << endl;
PWaitAndSignal m(outputMutex);
cerr << msg;
@@ -693,7 +693,7 @@
PStringStream msg;
msg << GetNow()
- << " " <<sourceId << ::setw(25) << " "
+ << " Recv " <<sourceId << ::setw(25) << " "
<< ::setw(0) << txt << endl;
PWaitAndSignal m(outputMutex);
cerr << msg;
@@ -832,8 +832,8 @@
IncCountSent();
if (reportSentMessages) {
PStringStream msg;
- msg << GetNow() << ::setw(18)
- << " " << sourceId << ::setw(0) << " --> "
+ msg << GetNow() << " Send "
+ << ::setw(18) << sourceId << ::setw(0) << " --> "
<< PString((const char *)message.GetPointer(), message.GetSize() - 1)
<< endl;
PWaitAndSignal m(outputMutex);
1
0
[Sofaswitch-svn] [commit] r240 - in sofaswitch/trunk/callflow: src tests
by SofaSWITCH SVN 14 Feb '07
by SofaSWITCH SVN 14 Feb '07
14 Feb '07
Author: derek
Date: Tue Feb 13 19:19:29 2007
New Revision: 240
Modified:
sofaswitch/trunk/callflow/src/requestnode.cpp
sofaswitch/trunk/callflow/src/shapelist.cpp
sofaswitch/trunk/callflow/tests/makevoipcall.src
Log:
Reliability issues resolved, and cope with malformed events better.
Modified: sofaswitch/trunk/callflow/src/requestnode.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/requestnode.cpp (original)
+++ sofaswitch/trunk/callflow/src/requestnode.cpp Tue Feb 13 19:19:29 2007
@@ -78,7 +78,7 @@
file.AddLine(" def Request_Node(self, aTuple): ");
file.AddLine(" a,y,z = aTuple ");
file.AddLine(" eName = self.data[a][\"Timer label\"] ");
- file.AddLine(" self.pendingEvents[eName] = a ");
+ file.AddLine(" self.pendingEvents[eName] = (a, eName, \"\") ");
file.AddLine(" reactor.callLater(self.data[a][\"Timer period\"], self.timerObjectExpired, eName)");
file.AddLine(" rhost = self.data[a][\"Request node from\"] ");
file.AddLine(" try: ");
Modified: sofaswitch/trunk/callflow/src/shapelist.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/shapelist.cpp (original)
+++ sofaswitch/trunk/callflow/src/shapelist.cpp Tue Feb 13 19:19:29 2007
@@ -414,7 +414,11 @@
file.AddLine(" #found a match ");
file.AddLine(" eventNode = self.currentHandlers[handler] ");
file.AddLine(" eHandler = self.data[eventNode][\"Event Handler\"] ");
- file.AddLine(" eSource,eName,eData = self.generatedEvents.pop(event) ");
+ file.AddLine(" try: ");
+ file.AddLine(" eSource,eName,eData = self.generatedEvents.pop(event)");
+ file.AddLine(" except: ");
+ file.AddLine(" print \"failed to read the generated events for \", event");
+ file.AddLine(" eSource, eName, eData = \"failed\", \"to\", \"read\" ");
file.AddLine(" pVbl = self.data[eventNode][\"Event Source\"] ");
file.AddLine(" pVbl += \" = \" + self.quote + eSource + self.quote ");
@@ -439,9 +443,9 @@
file.AddLine(" self.DoWork(eHandler) ");
- file.AddLine(" self.generatedEvents.clear() ");
- file.AddLine(" ");
- file.AddLine(" def networkEventData(self, eName, data): ");
+ file.AddLine(" self.generatedEvents.clear() ");
+ file.AddLine(" ");
+ file.AddLine(" def networkEventData(self, eName, dataTuple): ");
file.AddLine(" \"\"\"This node has received a message from some remote node. The ");
file.AddLine(" eventName is a concatanation of the sender name and the event. ");
file.AddLine(" Thus, an example eventName would be voip34REQUESTNEWID. ");
@@ -453,11 +457,15 @@
file.AddLine(" This method places the event on the generated events list, and ");
file.AddLine(" places the data there also. ");
file.AddLine(" Then, this methods asks for processing to resume ");
- file.AddLine(" \"\"\" ");
- file.AddLine(" self.generatedEvents[eName] = data ");
- file.AddLine(" reactor.callLater(0, self.processQueue, 0) ");
- file.AddLine(" ");
- file.AddLine(" def timerObjectExpired(self, data): ");
+ file.AddLine(" ");
+ file.AddLine(" Note that the dataTuple consists of the ");
+ file.AddLine(" eSource, eName, eData where e implies event ");
+ file.AddLine(" \"\"\" ");
+// file.AddLine(" print \"Network event data tuple is \", dataTuple ");
+ file.AddLine(" self.generatedEvents[eName] = dataTuple ");
+ file.AddLine(" reactor.callLater(0, self.processQueue, 0) ");
+ file.AddLine(" ");
+ file.AddLine(" def timerObjectExpired(self, data): ");
file.AddLine(" \"\"\"Some timer has expired. Move it from the pending list and place ");
file.AddLine(" it in the active list. Then activate processing so that things move ");
file.AddLine(" along ");
Modified: sofaswitch/trunk/callflow/tests/makevoipcall.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/makevoipcall.src (original)
+++ sofaswitch/trunk/callflow/tests/makevoipcall.src Tue Feb 13 19:19:29 2007
@@ -1 +1 @@
-10<B>448<B>518<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>10<B>293<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>14<B>297<B>184<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQ<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.soundNode<ms><special> <B><Shape>12<B>439<B>683<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1<ms><special>Timer label (Python code)<ms>"hanguptime"<ms><special> <B><Shape>14<B>375<B>236<B> extra <special>Tool Tip<ms>A timer - did we receive a voip node before this timer fires<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestvoip<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.requestVoip<ms><special> <B><Shape>9<B>214<B>353<B>214,353,216,402<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>412<B>261<B> extra <special>Tool Tip<ms>Did we rceive a sound node in time<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestsound<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.requestSound<ms><special> <B><Shape>9<B>214<B>308<B>309,335,214,308<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>6<B>189<B>402<B> extra <special>Tool Tip<ms>Make Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>Call destination (python code)<ms>"h323:h323.voxgratia.org"<ms><special> <B><Shape>19<B>216<B>606<B> extra <special>Tool Tip<ms>Send Dtmf<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>DTMF to send to worker node (python code)<ms>self.dtmfData<ms><special> <B><Shape>15<B>439<B>579<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>15<B>190<B>450<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.voipNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>9<B>497<B>330<B>511,330,497,418<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>338<B>210<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.hanguptime<ms><special> <B><Shape>2<B>523<B>304<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>403<B>444<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "End this as the voip or sound did not respond in time"<ms><special> <B><Shape>13<B>189<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestvoip<ms><special> <B><Shape>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>458<B>279<B>458,279,511,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>191<B>71<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"voip"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestvoip<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>9<B>218<B>518<B>218,628,463,518<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>189<B>304<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.voipNode != None) and (self.soundNode != None)<ms><special> <B><Shape>2<B>438<B>731<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>202<B>158<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voipREQ<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.voipNode<ms><special> <B><Shape>5<B>193<B>579<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>14<B>204<B>491<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.dtmfData<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"sound"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestsound<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>5<B>397<B>310<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.requestVoip==None) or(self.requestSound==None)<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>10<B>198<B>252<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new voip node on ", self.voipNode<ms><special> <B><Shape>9<B>418<B>359<B>421,359,418,448<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>227<B>517<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>419<B>504<B>419,504,420,570,464,578<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>218<B>330<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>386<B>284<B>386,284,386,313,424,314<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>200<B>531<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>14<B>501<B>279<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voip[0-9]*Terminat<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.eventData<ms><special> <B><Shape>9<B>464<B>478<B>497,478,495,572,464,578<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>216<B>573<B>216,573<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>506<B>388<B>506,388<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>481<B>418<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "the voip node has died ", self.eventData<ms><special> <B><Shape>20<B>336<B>255<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestsound<ms><special> <B><Shape>2<B>425<B>333<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>215<B>653<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>7<B>440<B>632<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special> <B><Shape>
+15<B>190<B>450<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.voipNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>14<B>202<B>158<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voipREQ<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.voipNode<ms><special> <B><Shape>2<B>227<B>517<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestsound<ms><special> <B><Shape>10<B>403<B>444<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "End this as the voip or sound did not respond in time"<ms><special> <B><Shape>9<B>464<B>478<B>497,478,495,572,464,578<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>218<B>330<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>198<B>252<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new voip node on ", self.voipNode<ms><special> <B><Shape>2<B>215<B>653<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>448<B>518<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>11<B>191<B>71<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"voip"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestvoip<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>5<B>193<B>579<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>14<B>338<B>210<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.hanguptime<ms><special> <B><Shape>14<B>412<B>261<B> extra <special>Tool Tip<ms>Did we rceive a sound node in time<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestsound<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.requestSound<ms><special> <B><Shape>5<B>189<B>304<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.voipNode != None) and (self.soundNode != None)<ms><special> <B><Shape>9<B>497<B>330<B>511,330,497,418<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>19<B>216<B>606<B> extra <special>Tool Tip<ms>Send Dtmf<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>DTMF to send to worker node (python code)<ms>self.dtmfData<ms><special> <B><Shape>9<B>418<B>359<B>421,359,418,448<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>2<B>523<B>304<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>214<B>308<B>309,335,214,308<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>7<B>440<B>632<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special> <B><Shape>12<B>439<B>683<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1<ms><special>Timer label (Python code)<ms>"hanguptime"<ms><special> <B><Shape>9<B>458<B>279<B>458,279,511,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>501<B>279<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voip[0-9]*Terminat<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.eventData<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"sound"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestsound<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>14<B>375<B>236<B> extra <special>Tool Tip<ms>A timer - did we receive a voip node before this timer fires<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestvoip<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.requestVoip<ms><special> <B><Shape>9<B>218<B>518<B>218,628,463,518<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>214<B>353<B>214,353,216,402<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>425<B>333<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>506<B>388<B>506,388<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>6<B>189<B>402<B> extra <special>Tool Tip<ms>Make Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>Call destination (python code)<ms>"h323:h323.voxgratia.org"<ms><special> <B><Shape>15<B>439<B>579<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>10<B>481<B>418<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "the voip node has died ", self.eventData<ms><special> <B><Shape>14<B>204<B>491<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.dtmfData<ms><special> <B><Shape>9<B>419<B>504<B>419,504,420,570,464,578<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>293<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>5<B>397<B>310<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.requestVoip==None) or(self.requestSound==None)<ms><special> <B><Shape>20<B>336<B>255<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>14<B>297<B>184<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQ<ms><special>Python variable: source of the event<ms>self.eventSource<ms><special>Python variable: name of the event<ms>self.eventName<ms><special>Python variable: generated data<ms>self.soundNode<ms><special> <B><Shape>2<B>438<B>731<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>200<B>531<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>9<B>216<B>573<B>216,573<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>386<B>284<B>386,284,386,313,424,314<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>189<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestvoip<ms><special> <B><Shape>
1
0