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
- 390 discussions
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
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
Author: derek
Date: Wed Jan 31 18:21:02 2007
New Revision: 239
Added:
sofaswitch/trunk/callflow/src/sendmessage.cpp
sofaswitch/trunk/callflow/src/sendmessage.h
Log:
Add these files to the callflow source.
Added: sofaswitch/trunk/callflow/src/sendmessage.cpp
==============================================================================
--- (empty file)
+++ sofaswitch/trunk/callflow/src/sendmessage.cpp Wed Jan 31 18:21:02 2007
@@ -0,0 +1,93 @@
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+#include <wx/textfile.h>
+#include <wx/tokenzr.h>
+#include "shapelist.h"
+
+
+#include "sendmessage.h"
+#include "bitmaps/sendmessage.xpm"
+
+/////////////////////////////////////////////////////////////////////////////
+DndShapeSendMessage::DndShapeSendMessage()
+ : DndShape(SendMessage)
+{
+ wxSize newSize(30, 40);
+ SetSize(newSize);
+
+ relInputPoints.Add(16, 0);
+ relOutputPoints.Add(16, 40);
+
+ displayData[displayData.size()] =
+ InformationSection(wxT("Message to send (Python code)"), wxT("\"voip:reporttome\""));
+
+ AdjustIoPoints();
+}
+
+void DndShapeSendMessage::Draw(wxDC& dc)
+{
+ DrawCompileError(dc);
+ dc.SetBrush(wxBrush(*wxBLACK, wxSOLID));
+ dc.SetPen(*wxBLACK_PEN);
+
+ wxPoint p1(m_rect.GetPosition());
+ wxPoint pA(p1.x + 16, p1.y + 12);
+ wxPoint pB(p1.x + 16, p1.y + 0);
+ wxPoint pC(p1.x + 16, p1.y + 50);
+ wxPoint pD(p1.x + 16, p1.y + 36);
+
+ DrawArrow(dc, pA, ArrowDown, InputPointConnected(0) ? Connected : Loose);
+ DrawArrow(dc, pC, ArrowDown, OutputPointConnected(0) ? Connected : Loose);
+ dc.DrawLine(pA, pB);
+ dc.DrawLine(pD, pC);
+
+ dc.DrawBitmap(sendmessage_xpm, p1.x + 8, p1.y + 18, true);
+
+ DndShape::Draw(dc);
+}
+
+bool DndShapeSendMessage::WriteSystemCode(wxTextFile & file)
+{
+ file.AddLine(" def Send_Message(self, sTuple): ");
+ file.AddLine(" a,b,c = sTuple ");
+ file.AddLine(" try: ");
+ file.AddLine(" mesg = eval(self.data[a][\"Send Message Code\"]) + \"\\0\" ");
+ file.AddLine(" self.transport.write(mesg) ");
+ file.AddLine(" except: ");
+ file.AddLine(" print \"Send Message command \", self.data[a][\"Send Message Code\"], \" could not be parsed\" ");
+ file.AddLine(" return self.data[a][\"Output\"] ");
+ file.AddLine("");
+
+ return true;
+}
+
+bool DndShapeSendMessage::WriteThisShapeInfo(wxTextFile & file)
+{
+ file.AddLine(wxString::Format(" \"%s\" : { ", GetKey().c_str()));
+
+ wxNode *inputNode = (wxNode *)GetInputPoints().GetFirst();
+ const wxString & inputLabel = ((LabelledPoint *)inputNode->GetData())->GetFullLabel();
+ file.AddLine(wxString::Format(" \"Input\" : "));
+ file.AddLine(wxString::Format(" %s, ", inputLabel.c_str()));
+
+ wxNode *outputNode = (wxNode *)GetOutputPoints().GetFirst();
+ const wxString & outputLabel = ((LabelledPoint *)outputNode->GetData())->GetFullLabel();
+ file.AddLine(wxString::Format(" \"Output\" : "));
+ file.AddLine(wxString::Format(" %s, ", outputLabel.c_str()));
+
+ file.AddLine(wxString::Format(" \"Send Message Code\" : "));
+ wxString dest = ProtectString(displayData[1].data);
+ file.AddLine(wxString::Format(" \"%s\", ", dest.c_str()));
+
+ file.AddLine(wxString::Format(" },"));
+
+ return true;
+}
Added: sofaswitch/trunk/callflow/src/sendmessage.h
==============================================================================
--- (empty file)
+++ sofaswitch/trunk/callflow/src/sendmessage.h Wed Jan 31 18:21:02 2007
@@ -0,0 +1,36 @@
+#ifndef SHAPE_SEND_MESSAGE_H
+
+#define SHAPE_SEND_MESSAGE_H
+
+#include "dnd.h"
+
+//////////////////////////////////////////////////////////////////////////
+/**Define a shape to indicate the sending of a message.
+ */
+class DndShapeSendMessage : public DndShape
+{
+public:
+ /**Construtor, Define this shape in terms of size and points etc */
+ DndShapeSendMessage();
+
+ /**Destroy this shape, and log it */
+ virtual ~DndShapeSendMessage()
+ {
+ }
+
+ /**Draw this particular shape to the screen..*/
+ virtual void Draw(wxDC& dc);
+
+ /** Used to report the name of this particular class. */
+ static wxString GetKindName() { return wxString("Send Message"); }
+
+ /**Write the code generic to this SendMessage code shape */
+ virtual bool WriteSystemCode(wxTextFile & file);
+
+ /**Write the dictionary containing relevant points for this shape */
+ virtual bool WriteThisShapeInfo(wxTextFile & file);
+};
+
+
+#endif // SHAPE_SEND_MESSAGE_H
+
1
0
Author: derek
Date: Wed Jan 31 17:50:16 2007
New Revision: 238
Modified:
sofaswitch/trunk/sound/main.cxx
Log:
Remove test on the sound device being opened or not.
This test does not appear to give a valid result.
Modified: sofaswitch/trunk/sound/main.cxx
==============================================================================
--- sofaswitch/trunk/sound/main.cxx (original)
+++ sofaswitch/trunk/sound/main.cxx Wed Jan 31 17:50:16 2007
@@ -330,16 +330,17 @@
return FALSE;
}
+#if 0
if (!sound.IsOpen()) {
PTRACE(3, "just opened the device, but it is not open ");
return FALSE;
}
-
+#endif
PINDEX currentVolume = 90;
sound.SetVolume(currentVolume);
sound.SetBuffers(480, 2);
-
+#if 0
if (sound.IsOpen()) {
PTRACE(3, "End of OpenAudio, sound device is opened just fine");
return TRUE;
@@ -347,6 +348,8 @@
PTRACE(3, "End of OpenAudio, but the sound device is closed");
return FALSE;
}
+#endif
+ return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
1
0
Author: derek
Date: Wed Jan 31 03:57:39 2007
New Revision: 237
Modified:
sofaswitch/trunk/voip/udpconnection.cxx
sofaswitch/trunk/voip/udpconnection.h
sofaswitch/trunk/voip/udpep.cxx
sofaswitch/trunk/voip/udpep.h
Log:
Add in fixes to get it to compile with the current cvs.
Modified: sofaswitch/trunk/voip/udpconnection.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.cxx (original)
+++ sofaswitch/trunk/voip/udpconnection.cxx Wed Jan 31 03:57:39 2007
@@ -83,6 +83,13 @@
DecOpalUdpSsConnection();
}
+BOOL OpalUdpSsConnection::OnIncomingConnection(unsigned int options,
+ OpalConnection::StringOptions *stringOptions)
+{
+ PTRACE(3, "UdpSsConnection\t " << *this << " onIncoming connection");
+ return endpoint.OnIncomingConnection(*this, options, stringOptions);
+}
+
BOOL OpalUdpSsConnection::SetUpConnection()
{
@@ -235,7 +242,8 @@
{
PTRACE(3, "Initiate call ");
phase = SetUpPhase;
- if (!OnIncomingConnection())
+ OpalConnection::StringOptions stringOptions;
+ if (!OnIncomingConnection(0, &stringOptions))
Release(EndedByCallerAbort);
else {
PTRACE(2, "UdpSs\tOutgoing call routed to " << ownerCall.GetPartyB() << " for " << *this);
Modified: sofaswitch/trunk/voip/udpconnection.h
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.h (original)
+++ sofaswitch/trunk/voip/udpconnection.h Wed Jan 31 03:57:39 2007
@@ -68,6 +68,12 @@
/**@name Overrides from OpalConnection */
//@{
+
+ /**Indicates this connection instance is about to join another connection
+ instance */
+ virtual BOOL OnIncomingConnection(unsigned int,
+ OpalConnection::StringOptions*);
+
/**Start an outgoing connection.
This function will initiate the connection to the remote entity, for
example in H.323 it sends a SETUP, in SIP it sends an INVITE etc.
Modified: sofaswitch/trunk/voip/udpep.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpep.cxx (original)
+++ sofaswitch/trunk/voip/udpep.cxx Wed Jan 31 03:57:39 2007
@@ -187,6 +187,17 @@
}
+
+BOOL OpalUdpSsEndPoint::OnIncomingConnection(OpalConnection& conn,
+ unsigned int options,
+ OpalConnection::StringOptions *stringOptions)
+{
+ return manager.OnIncomingConnection(conn, options, stringOptions);
+}
+
+
+
+
BOOL OpalUdpSsEndPoint::OnShowOutgoing(const OpalUdpSsConnection & connection)
{
//PTime now;
Modified: sofaswitch/trunk/voip/udpep.h
==============================================================================
--- sofaswitch/trunk/voip/udpep.h (original)
+++ sofaswitch/trunk/voip/udpep.h Wed Jan 31 03:57:39 2007
@@ -177,6 +177,10 @@
const PString & connectionToken /// Token of connection to accept call
);
+ /**A connection is coming in - or being added to this endpoint */
+ virtual BOOL OnIncomingConnection(OpalConnection&, unsigned int,
+ OpalConnection::StringOptions*);
+
/**Call back to indicate that remote is ringing.
If FALSE is returned the call is aborted.
1
0
Author: derek
Date: Wed Jan 17 17:29:41 2007
New Revision: 236
Modified:
sofaswitch/trunk/voip/jocall.cxx
Log:
Send DTMF text via the "SendUserInputTone" method, rather than
the SendUserInputString method. Critical for IAX2 handling.
Modified: sofaswitch/trunk/voip/jocall.cxx
==============================================================================
--- sofaswitch/trunk/voip/jocall.cxx (original)
+++ sofaswitch/trunk/voip/jocall.cxx Wed Jan 17 17:29:41 2007
@@ -173,7 +173,8 @@
void MyOpalCall::SendThisDtmf(const PString & value)
{
for (PSafePtr<OpalConnection> conn(connectionsActive, PSafeReadOnly); conn != NULL; ++conn) {
- conn->SendUserInputString(value);
+ for (PINDEX i = 0; i < value.GetLength(); i++)
+ conn->SendUserInputTone(value[i]);
}
}
1
0
Author: derek
Date: Tue Jan 16 22:41:35 2007
New Revision: 235
Modified:
sofaswitch/trunk/server/main.cxx
sofaswitch/trunk/voip/comms.cxx
sofaswitch/trunk/voip/udpconnection.cxx
sofaswitch/trunk/voip/udpconnection.h
Log:
Tidy up the formatting of messages, add new callback to the voip module.
Add more options, so handle more possibilities for the voipNode:Answer xxxx cmd.
Modified: sofaswitch/trunk/server/main.cxx
==============================================================================
--- sofaswitch/trunk/server/main.cxx (original)
+++ sofaswitch/trunk/server/main.cxx Tue Jan 16 22:41:35 2007
@@ -122,9 +122,6 @@
localManager.WaitForEmpty();
PTRACE(3, "delete the manager, as it is now the end of this program ");
- PTRACE(3, "delete the manager, as it is now the end of this program ");
- PTRACE(3, "delete the manager, as it is now the end of this program ");
- PTRACE(3, "delete the manager, as it is now the end of this program ");
}
////////////////////////////////////////////////////////////////////////////////
@@ -696,7 +693,7 @@
PStringStream msg;
msg << GetNow()
- << ::setw(30) << sourceId << " : "
+ << " " <<sourceId << ::setw(25) << " "
<< ::setw(0) << txt << endl;
PWaitAndSignal m(outputMutex);
cerr << msg;
@@ -827,15 +824,16 @@
void TcpConnection::SendThisMessage(PBYTEArray & message)
{
- PTRACE(1, "SEND " << PString((const char *)message.GetPointer(), message.GetSize()));
+ PTRACE(1, "SEND "
+ << PString((const char *)message.GetPointer(), message.GetSize()));
writeMessageLock.Wait();
messagesSocket.Write(message.GetPointer(), message.GetSize());
writeMessageLock.Signal();
IncCountSent();
if (reportSentMessages) {
PStringStream msg;
- msg << GetNow() << ::setw(30)
- << " " << ::setw(0) << "-->"
+ msg << GetNow() << ::setw(18)
+ << " " << sourceId << ::setw(0) << " --> "
<< PString((const char *)message.GetPointer(), message.GetSize() - 1)
<< endl;
PWaitAndSignal m(outputMutex);
@@ -843,7 +841,7 @@
}
}
-////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
void TcpConnectionList::Initialise()
{
Modified: sofaswitch/trunk/voip/comms.cxx
==============================================================================
--- sofaswitch/trunk/voip/comms.cxx (original)
+++ sofaswitch/trunk/voip/comms.cxx Tue Jan 16 22:41:35 2007
@@ -184,11 +184,12 @@
BOOL doAnswer = FALSE;
BOOL doAnswerDefined= FALSE;
if (cmds.GetSize() > 1) {
- if (cmds[1] *= "true") {
+ if ((cmds[1] *= "true") || (cmds[1] *= "yes") || (cmds[1] *= "accept")) {
doAnswer = TRUE;
doAnswerDefined = TRUE;
}
- if (cmds[1] *= "false") {
+
+ if ((cmds[1] *= "false") || (cmds[1] *= "no") || (cmds[1] *= "reject")) {
doAnswer = FALSE;
doAnswerDefined = TRUE;
}
@@ -200,7 +201,8 @@
if (!doAnswerDefined) {
PTRACE(0, "Answer command did not correctly specify what to do ");
- return;
+ PTRACE(0, "The command \"" << cmds[1] << "\" was not understood -- sorry");
+ doAnswer = FALSE;
}
if(!doAnswer) {
PTRACE(3, "Reject this call");
Modified: sofaswitch/trunk/voip/udpconnection.cxx
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.cxx (original)
+++ sofaswitch/trunk/voip/udpconnection.cxx Tue Jan 16 22:41:35 2007
@@ -168,6 +168,11 @@
return new OpalAudioMediaStream(mediaFormat, sessionID, isSource, 2, soundChannel);
}
+void OpalUdpSsConnection::CloseMediaStreams()
+{
+ PTRACE(5, "OpalUdpSsConnection::CloseMediaStreams");
+ OpalConnection::CloseMediaStreams();
+}
BOOL OpalUdpSsConnection::OnOpenMediaStream(OpalMediaStream & mediaStream)
{
@@ -187,6 +192,12 @@
return TRUE;
}
+void OpalUdpSsConnection::Release(CallEndReason reason)
+{
+ ((MyOpalCall &)(GetCall())).CloseThisId();
+ OpalConnection::Release(reason);
+}
+
PSoundChannel * OpalUdpSsConnection::CreateSoundChannel(BOOL isSource)
{
Modified: sofaswitch/trunk/voip/udpconnection.h
==============================================================================
--- sofaswitch/trunk/voip/udpconnection.h (original)
+++ sofaswitch/trunk/voip/udpconnection.h Tue Jan 16 22:41:35 2007
@@ -161,6 +161,10 @@
virtual BOOL SendUserInputString(
const PString & value /// String value of indication
);
+
+ /**Close media streams for session.
+ */
+ virtual void CloseMediaStreams();
//@}
/**@name New operations */
@@ -178,6 +182,20 @@
virtual PSoundChannel * CreateSoundChannel(
BOOL isSource // Direction for channel
);
+
+ /**Release the current connection.
+ This removes the connection from the current call. The call may
+ continue if there are other connections still active on it. If this was
+ the last connection for the call then the call is disposed of as well.
+
+ Note that this function will return quickly as the release and
+ disposal of the connections is done by another thread.
+ */
+ virtual void Release(
+ CallEndReason reason = EndedByLocalUser ///< Reason for call release
+ );
+
+
//@}
1
0
Author: derek
Date: Sun Jan 14 23:10:32 2007
New Revision: 234
Modified:
sofaswitch/trunk/callflow/src/eventer.cpp
sofaswitch/trunk/callflow/src/information.h
sofaswitch/trunk/callflow/src/shapelist.cpp
sofaswitch/trunk/callflow/src/timer.cpp
sofaswitch/trunk/callflow/tests/amplaywavfile.src
sofaswitch/trunk/callflow/tests/dtmf_from_sound.src
sofaswitch/trunk/callflow/tests/forloop.src
sofaswitch/trunk/callflow/tests/helloworld.src
sofaswitch/trunk/callflow/tests/loadgraph.src
sofaswitch/trunk/callflow/tests/makevoipcall.src
sofaswitch/trunk/callflow/tests/parent.src
sofaswitch/trunk/callflow/tests/recordmessage.src
sofaswitch/trunk/callflow/tests/requestnode.src
sofaswitch/trunk/callflow/tests/timetest.src
Log:
Update graphics to cope with chnages in the eventer & timer structures.
Set maximum number of entries in an information box to be 8.
Event information is now a python tuple of (sourceNode, eventName, eventData)
Modified: sofaswitch/trunk/callflow/src/eventer.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/eventer.cpp (original)
+++ sofaswitch/trunk/callflow/src/eventer.cpp Sun Jan 14 23:10:32 2007
@@ -35,7 +35,13 @@
InformationSection(wxT("Event sought (Regular Exp)"), wxT("*DTMF"));
displayData[displayData.size()] =
- InformationSection(wxT("Python variable to hold event data"), wxT("self.eventData"));
+ InformationSection(wxT("Python variable: source of the event"), wxT("self.eventSource"));
+
+ displayData[displayData.size()] =
+ InformationSection(wxT("Python variable: name of the event"), wxT("self.eventName"));
+
+ displayData[displayData.size()] =
+ InformationSection(wxT("Python variable: generated data"), wxT("self.eventData"));
}
bool DndShapeEventer::TestInternalVariables()
@@ -122,13 +128,27 @@
file.AddLine(" link not be connected, a None value will be returned. ");
file.AddLine(" \"\"\" ");
file.AddLine(" a,b,c = sTuple ");
- file.AddLine(" pVbl = self.data[a][\"Event Variable\"] ");
- file.AddLine(" pVbl += \" = None\" ");
+ file.AddLine(" pVbl = self.data[a][\"Event Source\"] + \" = None\" ");
+ file.AddLine(" try: ");
+ file.AddLine(" exec(pVbl) ");
+ file.AddLine(" except: ");
+ file.AddLine(" pVbl = self.data[a][\"Event Source\"] ");
+ file.AddLine(" print \"The Python variable \", pVbl, \" to hold event source output could not be initialisd\" ");
+
+ file.AddLine(" pVbl = self.data[a][\"Event Name\"] + \" = None\" ");
file.AddLine(" try: ");
file.AddLine(" exec(pVbl) ");
file.AddLine(" except: ");
- file.AddLine(" pVbl = self.data[a][\"Event Variable\"] ");
- file.AddLine(" print \"The Python variable \", pVbl, \" to hold event output could not be initialisd\" ");
+ file.AddLine(" pVbl = self.data[a][\"Event Name\"] ");
+ file.AddLine(" print \"The Python variable \", pVbl, \" to hold event name output could not be initialisd\" ");
+
+ file.AddLine(" pVbl = self.data[a][\"Event Data\"] + \" = None\" ");
+ file.AddLine(" try: ");
+ file.AddLine(" exec(pVbl) ");
+ file.AddLine(" except: ");
+ file.AddLine(" pVbl = self.data[a][\"Event Data\"] ");
+ file.AddLine(" print \"The Python variable \", pVbl, \" to hold event data output could not be initialisd\" ");
+
file.AddLine(" ePyn = self.data[a][\"Event Python\"] ");
file.AddLine(" eReg = self.data[a][\"Event RegExp\"] ");
file.AddLine(" if len(ePyn) > 0: ");
@@ -169,9 +189,15 @@
file.AddLine(wxString::Format(" \"Event RegExp\" : "));
file.AddLine(wxString::Format(" \"%s\", ", displayData[2].data.c_str()));
- file.AddLine(wxString::Format(" \"Event Variable\" : "));
+ file.AddLine(wxString::Format(" \"Event Source\" : "));
file.AddLine(wxString::Format(" \"%s\", ", displayData[3].data.c_str()));
+ file.AddLine(wxString::Format(" \"Event Name\" : "));
+ file.AddLine(wxString::Format(" \"%s\", ", displayData[4].data.c_str()));
+
+ file.AddLine(wxString::Format(" \"Event Data\" : "));
+ file.AddLine(wxString::Format(" \"%s\", ", displayData[5].data.c_str()));
+
file.AddLine(wxString::Format(" },"));
return true;
Modified: sofaswitch/trunk/callflow/src/information.h
==============================================================================
--- sofaswitch/trunk/callflow/src/information.h (original)
+++ sofaswitch/trunk/callflow/src/information.h Sun Jan 14 23:10:32 2007
@@ -56,7 +56,7 @@
protected:
/**An integer to specify howmany possible controls this dialog can handle */
enum MemberCount {
- MaxMembers = 5 /**This dialog can only handle 5 controls, indexed as 0..4 */
+ MaxMembers = 8 /**This dialog can only handle 5 controls, indexed as 0..7 */
};
Modified: sofaswitch/trunk/callflow/src/shapelist.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/shapelist.cpp (original)
+++ sofaswitch/trunk/callflow/src/shapelist.cpp Sun Jan 14 23:10:32 2007
@@ -320,12 +320,12 @@
file.AddLine(" self.generatedEvents = {} ");
file.AddLine(" self.pendingEvents = {} ");
file.AddLine(" self.currentHandlers= {} ");
- file.AddLine(" self.knownNetworkMessages= [] ");
- file.AddLine(" self.knownNetworkMessages.append(\"REQUESTNEWID\") ");
- file.AddLine(" self.knownNetworkMessages.append(\"RECEIVEDDTMF\") ");
- file.AddLine(" self.knownNetworkMessages.append(\"Terminating\") ");
+ file.AddLine(" self.knownNetworkMessages= [] ");
+ file.AddLine(" self.knownNetworkMessages.append(\"REQUESTNEWID\") ");
+ file.AddLine(" self.knownNetworkMessages.append(\"RECEIVEDDTMF\") ");
+ file.AddLine(" self.knownNetworkMessages.append(\"Terminating\") ");
file.AddLine(" self.knownNetworkMessages.append(\"QueryAcceptIncoming\") ");
-// file.AddLine(" self.knownNetworkMessages.append(\"\") ");
+ file.AddLine(" self.knownNetworkMessages.append(\"FinishedFile\") ");
char c= 34;
wxString tString = wxString::Format(" self.quote = \"\\%c\"", c);
file.AddLine(tString.c_str());
@@ -413,21 +413,39 @@
file.AddLine(" if len(hre.split(event)) > 1: ");
file.AddLine(" #found a match ");
file.AddLine(" eventNode = self.currentHandlers[handler] ");
- file.AddLine(" eventData = self.generatedEvents.pop(event) ");
file.AddLine(" eHandler = self.data[eventNode][\"Event Handler\"] ");
- file.AddLine(" pVbl = self.data[eventNode][\"Event Variable\"] ");
- file.AddLine(" pVbl += \" = \" + self.quote + eventData + self.quote ");
+ file.AddLine(" eSource,eName,eData = self.generatedEvents.pop(event) ");
+
+ file.AddLine(" pVbl = self.data[eventNode][\"Event Source\"] ");
+ file.AddLine(" pVbl += \" = \" + self.quote + eSource + self.quote ");
file.AddLine(" try: ");
file.AddLine(" exec(pVbl) ");
file.AddLine(" except: ");
file.AddLine(" print \"An internal error processing \", pVbl ");
+
+ file.AddLine(" pVbl = self.data[eventNode][\"Event Name\"] ");
+ file.AddLine(" pVbl += \" = \" + self.quote + eName + self.quote ");
+ file.AddLine(" try: ");
+ file.AddLine(" exec(pVbl) ");
+ file.AddLine(" except: ");
+ file.AddLine(" print \"An internal error processing \", pVbl ");
+
+ file.AddLine(" pVbl = self.data[eventNode][\"Event Data\"] ");
+ file.AddLine(" pVbl += \" = \" + self.quote + eData + self.quote ");
+ file.AddLine(" try: ");
+ file.AddLine(" exec(pVbl) ");
+ file.AddLine(" except: ");
+ file.AddLine(" print \"An internal error processing \", pVbl ");
+
+
file.AddLine(" self.DoWork(eHandler) ");
file.AddLine(" self.generatedEvents.clear() ");
file.AddLine(" ");
file.AddLine(" def networkEventData(self, eName, data): ");
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 voipREQUESTNEWID. ");
+ file.AddLine(" Thus, an example eventName would be voip34REQUESTNEWID. ");
+ file.AddLine(" This example eventName indicates voip34 wants a new id from us ");
file.AddLine(" The data is additional information on this event. In this case, ");
file.AddLine(" the date field could be voip34 (the ID of the node node on voip)");
file.AddLine(" A second possible set of parameters would be voip23DTMF and 9 ");
@@ -545,16 +563,18 @@
file.AddLine(" thisMessage = thisMessage.strip() ");
file.AddLine(" for msg in self.knownNetworkMessages: ");
file.AddLine(" if thisMessage.find(msg) >= 0: ");
- file.AddLine(" idx = thisMessage.find(\":\") ");
- file.AddLine(" msga = thisMessage[0:idx] + thisMessage[(idx+1):] ");
- file.AddLine(" idx = thisMessage.find(\" \") ");
- file.AddLine(" if idx < 0: ");
- file.AddLine(" eName= msga ");
- file.AddLine(" body=\"\" ");
+ file.AddLine(" idxc = thisMessage.find(\":\") ");
+ file.AddLine(" eventSource = thisMessage[0:idxc] ");
+ file.AddLine(" idxs = thisMessage.find(\" \") ");
+ file.AddLine(" if idxs < 0: ");
+ file.AddLine(" eventName = thisMessage[(idxc+1):] ");
+ file.AddLine(" eventData = \"\" ");
file.AddLine(" else: ");
- file.AddLine(" eName = msga[0:idx] ");
- file.AddLine(" body = thisMessage[(idx+1):] ");
- file.AddLine(" self.networkEventData(eName, body) ");
+ file.AddLine(" eventName = thisMessage[(idxc+1):] ");
+ file.AddLine(" eventData = thisMessage[(idxs+1):] ");
+ file.AddLine(" eventString = eventSource + eventName ");
+ file.AddLine(" eTuple = (eventSource, eventName, eventData) ");
+ file.AddLine(" self.networkEventData(eventString, eTuple) ");
file.AddLine(" ");
file.AddLine(" ");
for (int i = 0; i < DndShape::KnownShapes; i++) {
Modified: sofaswitch/trunk/callflow/src/timer.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/timer.cpp (original)
+++ sofaswitch/trunk/callflow/src/timer.cpp Sun Jan 14 23:10:32 2007
@@ -96,7 +96,7 @@
file.AddLine(" except: ");
file.AddLine(" print \"The timer label of \", self.data[a][\"Timer label\"], \" was unintelligible Python\" ");
file.AddLine(" return self.data[a][\"Output\"] ");
- file.AddLine(" self.pendingEvents[eName] = a ");
+ file.AddLine(" self.pendingEvents[eName] = (\"internaltimer\", \"timerexpired\", a) ");
file.AddLine(" try: ");
file.AddLine(" self.period = eval (self.data[a][\"Timer period\"]) ");
file.AddLine(" except: ");
Modified: sofaswitch/trunk/callflow/tests/amplaywavfile.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/amplaywavfile.src (original)
+++ sofaswitch/trunk/callflow/tests/amplaywavfile.src Sun Jan 14 23:10:32 2007
@@ -1,3 +1,3 @@
-5<B>770<B>331<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>16<B>516<B>561<B> extra <special>Tool Tip<ms>initial wav file<ms><special>Filename to read audio from (Python code)<ms>"../prompts/instructions.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>2<B>659<B>427<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>11<B>191<B>67<B> extra <special>Tool Tip<ms>Request Node from AM module<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>5<B>507<B>312<B> extra <special>Tool Tip<ms>Test Roger voice<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>7<B>989<B>497<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>10<B>990<B>405<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>282<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>251<B>461<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 to hold event data<ms>self.dtmfData<ms><special> <B><Shape>9<B>264<B>199<B>264,513,264,635,426,639,428,199,532,202,532,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<ms><special>Python variable to hold event data<ms>self.amNode<ms><special> <B><Shape>5<B>581<B>341<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="4"<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node from sound module<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>9<B>821<B>356<B>821,357,977,357,1018,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>991<B>588<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>544<B>394<B>606,394,602,560,544,561<special>Tool Tip<ms>Join blocks shape<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>request sound<ms><special> <B><Shape>9<B>1039<B>386<B>1039,386,1082,387<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>712<B>318<B>712,358,755,361,750,320,793,318,798,333<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>559<B>339<B>559,339,604,342<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>302<B>485<B>302,485,544,492,542,506<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>214<B>304<B>214,304,262,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>334<B>209<B> extra <special>Tool Tip<ms>Catch the timer which, when fired,
-indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<ms><special> <B><Shape>16<B>770<B>378<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/leaving.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>2<B>769<B>426<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>15<B>989<B>451<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>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>1058<B>385<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>990<B>549<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to
-play wave file process to end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>5<B>660<B>332<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>10<B>190<B>254<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>16<B>505<B>364<B> extra <special>Tool Tip<ms>Play Rogers voice<ms><special>Filename to read audio from (Python code)<ms>"../prompts/sample_message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>10<B>507<B>259<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>5<B>991<B>358<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>17<B>516<B>509<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"recorded_audio.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>16<B>659<B>379<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/entering.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>20<B>335<B>252<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>632<B>318<B>632,366,638,319,685,318,685,330<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>517<B>600<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>
+20<B>362<B>256<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>712<B>318<B>712,358,755,361,750,320,793,318,798,333<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>298<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<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: data associated<ms>self.soundNode<ms><special> <B><Shape>9<B>559<B>339<B>559,339,604,342<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>991<B>588<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>660<B>332<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>2<B>769<B>426<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>770<B>331<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>10<B>198<B>248<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>16<B>770<B>378<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/leaving.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>9<B>302<B>485<B>302,485,544,492,542,506<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>659<B>427<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>264<B>199<B>264,513,264,635,426,639,428,199,532,202,532,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>507<B>312<B> extra <special>Tool Tip<ms>Test Roger voice<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>9<B>821<B>356<B>821,357,977,357,1018,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node from sound module<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>9<B>1039<B>386<B>1039,386,1082,387<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>7<B>989<B>497<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>10<B>998<B>400<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>9<B>632<B>318<B>632,366,638,319,685,318,685,330<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>362<B>214<B> extra <special>Tool Tip<ms>Catch the timer, which when fired,
+indicates the end of call<ms><special>Event sought (Python code)<ms>self.myId + "thistimer"<ms><special>Event sought (Regular Exp)<ms><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: data associated<ms>self.hanguptime<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>16<B>505<B>364<B> extra <special>Tool Tip<ms>Play Rogers voice<ms><special>Filename to read audio from (Python code)<ms>"../prompts/sample_message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>10<B>513<B>259<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>12<B>990<B>548<B> extra <special>Tool Tip<ms>timer which, when completed
+indicates the program should end<ms><special>Timer period (seconds, Python code)<ms>0.1<ms><special>Timer label (Python code)<ms>self.myId + "thistimer"<ms><special> <B><Shape>10<B>292<B>270<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>214<B>304<B>214,304,262,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>544<B>394<B>606,394,602,560,544,561<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>17<B>516<B>509<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"recorded_audio.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>11<B>191<B>67<B> extra <special>Tool Tip<ms>Request Node from AM module<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>15<B>989<B>451<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>16<B>516<B>561<B> extra <special>Tool Tip<ms>initial wav file<ms><special>Filename to read audio from (Python code)<ms>"../prompts/instructions.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>9<B>348<B>207<B>348,207,375,214<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>1058<B>385<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>517<B>600<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>2<B>385<B>239<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>991<B>358<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>16<B>659<B>379<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/entering.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>14<B>252<B>464<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: data associated<ms>self.dtmfData<ms><special> <B><Shape>14<B>201<B>161<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<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: data associated<ms>self.amNode<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>5<B>581<B>341<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="4"<ms><special> <B><Shape>2<B>307<B>394<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>
Modified: sofaswitch/trunk/callflow/tests/dtmf_from_sound.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/dtmf_from_sound.src (original)
+++ sofaswitch/trunk/callflow/tests/dtmf_from_sound.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-9<B>335<B>274<B>338,274,335,398<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>221<B>12<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>222<B>64<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>requestnode<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>9<B>120<B>265<B>248,294,121,265,120,267<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>147<B>379<B>147,379,337,397<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>285<B>179<B>285,179,338,183<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>221<B>199<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.newNode<ms><special> <B><Shape>14<B>324<B>187<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape>20<B>110<B>395<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>5<B>98<B>354<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="*"<ms><special> <B><Shape>14<B>236<B>155<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<ms><special>Python variable to hold event data<ms>self.newNode<ms><special> <B><Shape>10<B>313<B>226<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " ", self.timerData<ms><special> <B><Shape>10<B>222<B>108<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have requested a node from sound at ", time.asctime()<ms><special> <B><Shape>10<B>98<B>311<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DTMF detected is ", self.dtmfData<ms><special> <B><Shape>14<B>110<B>269<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 to hold event data<ms>self.dtmfData<ms><special> <B><Shape>2<B>310<B>397<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>221<B>244<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>
+9<B>232<B>205<B>374,205,376,329,232,323<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>222<B>64<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>requestnode<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>14<B>109<B>266<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>2<B>310<B>397<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>105<B>307<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DTMF detected is ", self.dtmfData<ms><special> <B><Shape>13<B>221<B>244<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>9<B>335<B>294<B>336,294,335,397<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>147<B>379<B>147,379,337,397<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>233<B>195<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.newNode<ms><special> <B><Shape>10<B>320<B>234<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " ", self.timerData<ms><special> <B><Shape>9<B>285<B>179<B>285,179,338,183<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>207<B>323<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>236<B>159<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<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.newNode<ms><special> <B><Shape>10<B>230<B>98<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have requested a node from sound at ", time.asctime()<ms><special> <B><Shape>14<B>324<B>183<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<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.timerData<ms><special> <B><Shape>5<B>98<B>354<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="*"<ms><special> <B><Shape>20<B>110<B>395<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>120<B>265<B>248,294,121,265,120,267<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>160<B>291<B>160,291,232,323<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>221<B>12<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/forloop.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/forloop.src (original)
+++ sofaswitch/trunk/callflow/tests/forloop.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-4<B>301<B>152<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>1<B>306<B>11<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>3<B>299<B>62<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 10<ms><special>Increment (Python code)<ms>self.i+=1<ms><special> <B><Shape>20<B>322<B>199<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>307<B>108<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "loop index is ", self.i<ms><special> <B><Shape>9<B>258<B>84<B>296,87,258,84,259,174,299,178<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
+3<B>299<B>62<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 10<ms><special>Increment (Python code)<ms>self.i+=1<ms><special> <B><Shape>1<B>306<B>11<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>4<B>301<B>152<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>10<B>316<B>98<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "loop index is ", self.i<ms><special> <B><Shape>20<B>322<B>199<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>258<B>84<B>296,87,258,84,259,174,299,178<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/helloworld.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/helloworld.src (original)
+++ sofaswitch/trunk/callflow/tests/helloworld.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-1<B>374<B>36<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>389<B>126<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>376<B>79<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hello world!"<ms><special> <B><Shape>
+10<B>382<B>79<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hello world!"<ms><special> <B><Shape>1<B>374<B>36<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>387<B>135<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/loadgraph.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/loadgraph.src (original)
+++ sofaswitch/trunk/callflow/tests/loadgraph.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-10<B>378<B>126<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have generated the new graph"<ms><special> <B><Shape>20<B>391<B>305<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>1<B>379<B>35<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>18<B>378<B>79<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"am_test.graph"<ms><special> <B><Shape>14<B>389<B>221<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>endloadgraph<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>12<B>378<B>172<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>20<ms><special>Timer label (string literal)<ms>endloadgraph<ms><special> <B><Shape>10<B>377<B>262<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "end the master now"<ms><special> <B><Shape>
+10<B>387<B>114<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have generated the new graph"<ms><special> <B><Shape>9<B>442<B>241<B>442,241,499,241,537,241<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>378<B>172<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>20<ms><special>Timer label (string literal)<ms>endloadgraph<ms><special> <B><Shape>14<B>392<B>219<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>endloadgraph<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>1<B>379<B>35<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>10<B>388<B>258<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "end the master now"<ms><special> <B><Shape>20<B>391<B>305<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>18<B>378<B>79<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"am_test.graph"<ms><special> <B><Shape>2<B>509<B>241<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/makevoipcall.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/makevoipcall.src (original)
+++ sofaswitch/trunk/callflow/tests/makevoipcall.src Sun Jan 14 23:10:32 2007
@@ -1,4 +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>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>2<B>438<B>731<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>2<B>425<B>333<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>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<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>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>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>14<B>204<B>496<B> extra <special>Tool Tip<ms>Catch DTMF events<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<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>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>2<B>227<B>517<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>409<B>257<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestsound<ms><special>Python variable to hold event data<ms>self.requestSound<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>9<B>214<B>308<B>309,335,214,308<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>523<B>304<B> extra <special>Tool Tip<ms>End Processing<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>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>218<B>330<B> extra <special>Tool Tip<ms>End Processing<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>218<B>518<B>218,628,463,518<special>Tool Tip<ms>Join blocks shape<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>14<B>373<B>236<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestvoip<ms><special>Python variable to hold event data<ms>self.requestVoip<ms><special> <B><Shape>9<B>216<B>573<B>216,573<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Catch the creation
-of the sound node<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Catch the creation of
-the voip node<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voipREQ<ms><special>Python variable to hold event data<ms>self.voipNode<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>14<B>333<B>211<B> extra <special>Tool Tip<ms>Catch the timer which, when fired,
-indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<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>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>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>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>506<B>388<B>506,388<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>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>20<B>336<B>255<B> extra <special>Tool Tip<ms>Death<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>9<B>497<B>330<B>511,330,497,418<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>498<B>280<B> extra <special>Tool Tip<ms>The voip node has died.<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voip[0-9]*Terminating<ms><special>Python variable to hold event 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>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>9<B>419<B>504<B>419,504,420,570,464,578<special>Tool Tip<ms>Join blocks shape<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>
+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>
Modified: sofaswitch/trunk/callflow/tests/parent.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/parent.src (original)
+++ sofaswitch/trunk/callflow/tests/parent.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-9<B>187<B>42<B>187,236,283,240,285,42,334,44<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>307<B>42<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>10<ms><special>Timer label (Python code)<ms>self.myId + "thistimer"<ms><special> <B><Shape>20<B>322<B>143<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>18<B>160<B>141<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"child.graph"<ms><special>Python variable to pass to child<ms>self.data[a]<ms><special> <B><Shape>4<B>154<B>189<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>2<B>352<B>210<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>152<B>120<B>152,120,153,214<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>3<B>153<B>93<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 20<ms><special>Increment (Python code)<ms>self.i++<ms><special> <B><Shape>1<B>160<B>46<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>14<B>362<B>122<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>Terminating<ms><special>Python variable to hold event data<ms>self.termTime<ms><special> <B><Shape>10<B>360<B>161<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "child has terminated", self.termTime<ms><special> <B><Shape>2<B>387<B>145<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>321<B>96<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>
+2<B>374<B>218<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>307<B>42<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>10<ms><special>Timer label (Python code)<ms>self.myId + "thistimer"<ms><special> <B><Shape>3<B>153<B>93<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 20<ms><special>Increment (Python code)<ms>self.i++<ms><special> <B><Shape>14<B>318<B>95<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer<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>20<B>319<B>143<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>4<B>154<B>189<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>1<B>160<B>46<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>438<B>144<B>438,146,477,144<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>383<B>169<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "child has terminated", self.termTime<ms><special> <B><Shape>2<B>452<B>144<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>18<B>160<B>141<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"child.graph"<ms><special>Python variable to pass to child<ms>self.data[a]<ms><special> <B><Shape>14<B>388<B>124<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>Terminating<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.termTime<ms><special> <B><Shape>9<B>368<B>117<B>368,117,401,124<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>152<B>120<B>152,120,153,214<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>187<B>42<B>187,236,283,240,285,42,334,44<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/recordmessage.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/recordmessage.src (original)
+++ sofaswitch/trunk/callflow/tests/recordmessage.src Sun Jan 14 23:10:32 2007
@@ -1,4 +1,2 @@
-14<B>291<B>535<B> extra <special>Tool Tip<ms>Catch the timer which, when fired,
-indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<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>15<B>605<B>522<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>9<B>555<B>290<B>555,290,600,293<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>605<B>324<B> extra <special>Tool Tip<ms>End the recording..<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node from sound module<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>16<B>275<B>484<B> extra <special>Tool Tip<ms>Play the instructions<ms><special>Filename to read audio from (Python code)<ms>"../prompts/record.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<ms><special>Python variable to hold event data<ms>self.amNode<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>2<B>604<B>618<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>7<B>605<B>474<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>5<B>576<B>297<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>9<B>300<B>346<B>601,346,581,447,300,483<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>507<B>264<B> extra <special>Tool Tip<ms>Start recording now<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>17<B>695<B>537<B> extra <special>Tool Tip<ms>Stop writing to the file
-while we play it back<ms><special>Filename to contain new audio (Python code)<ms>" "<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>16<B>694<B>585<B> extra <special>Tool Tip<ms>Play the message just recorded back<ms><special>Filename to read audio from (Python code)<ms>"message.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>20<B>296<B>625<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>630<B>374<B>630,374,631,473<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>265<B>199<B>265,513,265,635,427,639,429,199,533,202,533,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>280<B>579<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DEATH NOW."<ms><special> <B><Shape>11<B>191<B>67<B> extra <special>Tool Tip<ms>Request Node from AM module<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>10<B>282<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>2<B>507<B>362<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>605<B>571<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to
-end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>656<B>401<B>656,401,666,535,721,536,721,534<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>2<B>694<B>626<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>808<B>362<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>190<B>254<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>9<B>214<B>304<B>214,304,262,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>628<B>347<B> extra <special>Tool Tip<ms>hear the recording<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>17<B>508<B>310<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>14<B>251<B>461<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 to hold event data<ms>self.dtmfData<ms><special> <B><Shape>9<B>676<B>363<B>676,371,834,363<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
+9<B>630<B>374<B>630,374,631,473<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>604<B>618<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>350<B>557<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>216<B>307<B>216,307,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>296<B>182<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<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>15<B>605<B>522<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>14<B>203<B>158<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<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.amNode<ms><special> <B><Shape>14<B>254<B>464<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>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>2<B>507<B>362<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>656<B>401<B>656,401,666,535,721,536,721,534<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>343<B>207<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>690<B>373<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>678<B>372<B>678,372,715,373<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>16<B>694<B>585<B> extra <special>Tool Tip<ms>Play the message just recorded back<ms><special>Filename to read audio from (Python code)<ms>"message.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node from sound module<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>507<B>264<B> extra <special>Tool Tip<ms>Start recording now<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>5<B>605<B>324<B> extra <special>Tool Tip<ms>End the recording..<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>5<B>576<B>297<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>191<B>67<B> extra <special>Tool Tip<ms>Request Node from AM module<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>9<B>265<B>199<B>265,513,265,635,427,639,429,199,533,202,533,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>17<B>695<B>537<B> extra <special>Tool Tip<ms>Stop writing to the file
+while we play it back<ms><special>Filename to contain new audio (Python code)<ms>" "<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>2<B>694<B>626<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>300<B>346<B>601,346,581,447,300,483<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>605<B>575<B> extra <special>Tool Tip<ms>timer, which on firing ends this flow<ms><special>Timer period (seconds, Python code)<ms>1<ms><special>Timer label (Python code)<ms>"hanguptime"<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>16<B>275<B>484<B> extra <special>Tool Tip<ms>Play the instructions<ms><special>Filename to read audio from (Python code)<ms>"../prompts/record.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>17<B>508<B>310<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>9<B>555<B>290<B>555,290,600,293<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>290<B>536<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>7<B>605<B>474<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>20<B>294<B>621<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>289<B>569<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DEATH NOW."<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>341<B>557<B>341,557,375,557<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>345<B>207<B>368,207,345,207<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>200<B>247<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>5<B>628<B>347<B> extra <special>Tool Tip<ms>hear the recording<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>9<B>253<B>180<B>253,180,309,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>294<B>267<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/requestnode.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/requestnode.src (original)
+++ sofaswitch/trunk/callflow/tests/requestnode.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-14<B>244<B>255<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>NEWID<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>13<B>231<B>340<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>2<B>323<B>370<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>20<B>245<B>386<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>323<B>322<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " from ", self.timerData<ms><special> <B><Shape>10<B>231<B>295<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.eventData<ms><special> <B><Shape>9<B>290<B>279<B>290,280,350,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>231<B>157<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>232<B>206<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>request node<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>14<B>336<B>282<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>request node<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape>
+2<B>326<B>370<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>340<B>269<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<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.timerData<ms><special> <B><Shape>10<B>336<B>311<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " from ", self.timerData<ms><special> <B><Shape>9<B>390<B>291<B>390,291,445,291<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>231<B>340<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>2<B>418<B>291<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>240<B>288<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.eventData<ms><special> <B><Shape>14<B>246<B>251<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>NEWID<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>232<B>206<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>request node<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>1<B>231<B>157<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>245<B>386<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>292<B>273<B>292,274,352,273<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/timetest.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/timetest.src (original)
+++ sofaswitch/trunk/callflow/tests/timetest.src Sun Jan 14 23:10:32 2007
@@ -1 +1 @@
-10<B>36<B>110<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Start ", time.asctime()<ms><special> <B><Shape>9<B>150<B>271<B>150,271,152,406,223,407,229,423<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>188<B>201<B>188,201,231,202<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>394<B>380<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>333<B>273<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>self.gap<ms><special>Timer label (Python code)<ms>self.myId + "thistimer"<ms><special> <B><Shape>10<B>214<B>303<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t2 ", time.asctime(), " data is ", self.timer2<ms><special> <B><Shape>14<B>139<B>179<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer1<ms><special>Python variable to hold event data<ms>self.timer1Data<ms><special> <B><Shape>14<B>347<B>327<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms>self.myId + "thistimer"<ms><special>Event sought (Regular Exp)<ms><ms><special>Python variable to hold event data<ms>self.timer3<ms><special> <B><Shape>20<B>346<B>417<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>36<B>158<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>self.gap=10<ms><special> <B><Shape>10<B>133<B>218<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t1 ", time.asctime(), " data is ", self.timer1Data<ms><special> <B><Shape>14<B>220<B>256<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer2<ms><special>Python variable to hold event data<ms>self.timer2<ms><special> <B><Shape>9<B>231<B>351<B>232,351,231,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>271<B>275<B>271,277,360,275<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>342<B>368<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t10 ", time.asctime(), " data is ", self.timer3<ms><special> <B><Shape>2<B>204<B>419<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>29<B>207<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1.95<ms><special>Timer label (Python code)<ms>"timer1"<ms><special> <B><Shape>9<B>399<B>349<B>399,349,420,352,418,379<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>54<B>157<B>153,177,156,157,105,167,73,282,57,279,54,254<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>28<B>63<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>12<B>209<B>203<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>2<ms><special>Timer label (Python code)<ms>"timer2"<ms><special> <B><Shape>
+9<B>153<B>292<B>229,419,153,420,153,292<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>219<B>302<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t2 ", time.asctime(), " data is ", self.timer2<ms><special> <B><Shape>14<B>347<B>326<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms>self.myId + "thistimer"<ms><special>Event sought (Regular Exp)<ms><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: data associated<ms>self.timer3<ms><special> <B><Shape>9<B>271<B>275<B>271,277,360,275<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>28<B>63<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>12<B>333<B>273<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>self.gap<ms><special>Timer label (Python code)<ms>self.myId + "thistimer"<ms><special> <B><Shape>9<B>54<B>157<B>153,177,156,157,105,167,73,282,57,279,54,254<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>342<B>368<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t10 ", time.asctime(), " data is ", self.timer3<ms><special> <B><Shape>14<B>222<B>256<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer2<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: data associated<ms>self.timer2<ms><special> <B><Shape>12<B>29<B>207<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1.95<ms><special>Timer label (Python code)<ms>"timer1"<ms><special> <B><Shape>10<B>36<B>158<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>self.gap=10<ms><special> <B><Shape>2<B>394<B>380<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>188<B>201<B>188,201,231,202<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>209<B>203<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>2<ms><special>Timer label (Python code)<ms>"timer2"<ms><special> <B><Shape>10<B>137<B>232<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t1 ", time.asctime(), " data is ", self.timer1Data<ms><special> <B><Shape>10<B>36<B>110<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Start ", time.asctime()<ms><special> <B><Shape>20<B>346<B>417<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>2<B>204<B>419<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>396<B>347<B>419,380,418,348,396,347<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>229<B>362<B>235,362,229,419<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>140<B>181<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer1<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: data associated<ms>self.timer1Data<ms><special> <B><Shape>
1
0
Author: derek
Date: Thu Jan 11 22:24:12 2007
New Revision: 233
Modified:
sofaswitch/trunk/voip/comms.cxx
Log:
ensure we do not attempt to simultaneously accept and reject this call.
Modified: sofaswitch/trunk/voip/comms.cxx
==============================================================================
--- sofaswitch/trunk/voip/comms.cxx (original)
+++ sofaswitch/trunk/voip/comms.cxx Thu Jan 11 22:24:12 2007
@@ -206,6 +206,7 @@
PTRACE(3, "Reject this call");
PWaitAndSignal m(opalCallLock);
myOpalCall->Clear();
+ return;
}
PString thisToken;
1
0