Author: derek
Date: Mon Jul 30 22:10:51 2007
New Revision: 374
Modified:
sofaswitch/trunk/callflow/src/shapelist.cpp
sofaswitch/trunk/callflow/src/timer.cpp
sofaswitch/trunk/callflow/tests/amplaywavfile.src
sofaswitch/trunk/callflow/tests/amtest.src
sofaswitch/trunk/callflow/tests/child.src
sofaswitch/trunk/callflow/tests/dtmf_from_sound.src
Log:
Multiple fixes, to get it to work correctly.
Tidy up tests for network events. Now, accepts all network messages.
Append to the inline documentation.
Modified: sofaswitch/trunk/callflow/src/shapelist.cpp
==============================================================================
--- sofaswitch/trunk/callflow/src/shapelist.cpp (original)
+++ sofaswitch/trunk/callflow/src/shapelist.cpp Mon Jul 30 22:10:51 2007
@@ -369,12 +369,6 @@
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.append(\"QueryAcceptIncoming\") ");
- file.AddLine(" self.knownNetworkMessages.append(\"FinishedFile\") ");
char c= 34;
wxString tString = wxString::Format(" self.quote = \"\\%c\"", c);
file.AddLine(tString.c_str());
@@ -516,8 +510,17 @@
file.AddLine(" ");
file.AddLine(" Note that the dataTuple consists of the ");
file.AddLine(" eSource, eName, eData where e implies event ");
+ file.AddLine(" ");
+ file.AddLine(" For a network event: ");
+ file.AddLine(" eSource is the sofaID of the node who sent the message ");
+ file.AddLine(" eName could be what it is - like FinishedFile ");
+ file.AddLine(" eData (often blank), is the data part of the network message");
+ file.AddLine(" For a Timer event: ");
+ file.AddLine(" eSource ID of the graph entity where the event was generated");
+ file.AddLine(" eName The name of the timer doing the timeout ");
+ file.AddLine(" eData The period of time waited for ");
file.AddLine(" \"\"\" ");
-// file.AddLine(" print \"Network event data tuple is \", dataTuple ");
+ file.AddLine(" #print \"event data tuple is \", dataTuple ");
file.AddLine(" self.generatedEvents[eName] = dataTuple ");
file.AddLine(" reactor.callLater(0, self.processQueue, 0) ");
file.AddLine(" ");
@@ -622,26 +625,22 @@
file.AddLine(" ");
file.AddLine(" def processReceivedMessage(self, thisMessage): ");
file.AddLine(" \"\"\"Handle an ordinary message from the remote sofa server. Break the message up");
- file.AddLine(" turn it into a MyEvent message, and added to the right ");
+ file.AddLine(" turn it into a MyEvent message, and added to the right ");
file.AddLine(" queue. On doing this, spark an event to drive queue processing. ");
- file.AddLine(" Note that this method can only deal with certain predefined ");
- file.AddLine(" types of messages ");
+ file.AddLine(" Note that this method can deal with all network messages. ");
file.AddLine(" \"\"\" ");
file.AddLine(" thisMessage = thisMessage.strip() ");
- file.AddLine(" for msg in self.knownNetworkMessages: ");
- file.AddLine(" if thisMessage.find(msg) >= 0: ");
- file.AddLine(" idxc = thisMessage.find(\":\") ");
- file.AddLine(" eventSource = thisMessage[0:idxc] ");
- file.AddLine(" idxs = thisMessage.find(\" \") ");
- file.AddLine(" if idxs < 0: ");
+ 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(" else: ");
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(" eTuple = (eventSource, eventName, eventData) ");
+ file.AddLine(" self.networkEventData(eventSource+eventName, 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 Mon Jul 30 22:10:51 2007
@@ -104,10 +104,10 @@
file.AddLine(" print \"The timer label of \", self.data[a][\"Timer label\"], \" was unintelligible Python\" ");
file.AddLine(" return self.data[a][\"Output\"] ");
file.AddLine(" if b == 1: ");
- file.AddLine(" #print \"Rx Timeout, now goto handler of \", self.data[a][\"Timeout Handler\"] ");
- file.AddLine(" #print \"Event data is \", self.data[a][\"Event Data\"] ");
- file.AddLine(" #print \"Event name is \", self.data[a][\"Event Name\"] ");
- file.AddLine(" #print \"Event source is \", self.data[a][\"Event Source\"] ");
+ file.AddLine(" #print \"Rx Timeout, now goto handler of \", self.data[a][\"Timeout Handler\"] ");
+ file.AddLine(" #print \"Event data is \", self.data[a][\"Event Data\"] ");
+ file.AddLine(" #print \"Event name is \", self.data[a][\"Event Name\"] ");
+ file.AddLine(" #print \"Event source is \", self.data[a][\"Event Source\"] ");
file.AddLine(" return self.data[a][\"Timeout Handler\"] ");
file.AddLine(" pVbl = self.data[a][\"Event Data\"] + \" = None\" ");
file.AddLine(" exec(pVbl) ");
@@ -121,7 +121,7 @@
file.AddLine(" print \"The timer period of \", self.data[a][\"Timer period\"], \" was unintelligible\" ");
file.AddLine(" return self.data[a][\"Output\"] ");
- file.AddLine(" self.pendingEvents[eName] = (a, eName, \"\") ");
+ file.AddLine(" self.pendingEvents[eName] = (a, eName, str(tPeriod)) ");
file.AddLine(" self.currentHandlers[eName] = a ");
file.AddLine(" #print \"add an expire timer of \", tPeriod, \" seconds\" ");
file.AddLine(" reactor.callLater(tPeriod, self.timerObjectExpired, eName) ");
Modified: sofaswitch/trunk/callflow/tests/amplaywavfile.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/amplaywavfile.src (original)
+++ sofaswitch/trunk/callflow/tests/amplaywavfile.src Mon Jul 30 22:10:51 2007
@@ -1,2 +1,2 @@
-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>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>9<B>557<B>337<B>557,337,606,341<special>Tool Tip<ms>Join blocks shape<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>1041<B>383<B>1041,383,1080,385<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>631<B>332<B>631,366,685,332<special>Tool Tip<ms>Join blocks shape<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>2<B>1055<B>385<B> extra <special>Tool Tip<ms>Suspend 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>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>199<B>121<B>199,121,214,248<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>2<B>770<B>416<B> extra <special>Tool Tip<ms>Suspend 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>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>9<B>304<B>115<B>304,119,344,115<special>Tool Tip<ms>Join blocks shape<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>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>2<B>657<B>421<B> extra <special>Tool Tip<ms>Suspend 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>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>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<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>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>991<B>599<B> extra <special>Tool Tip<ms>Death<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>9<B>266<B>148<B>266,148,308,270<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>1013<B>571<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>11<B>256<B>98<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>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.soundNode<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>9<B>302<B>486<B>302,486,541,509<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>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>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>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>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>517<B>610<B> extra <special>Tool Tip<ms>Suspend Processing<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>319<B>116<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>239<B>94<B>239,94,281,96<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>20<B>209<B>119<B> extra <special>Tool Tip<ms>Death<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>11<B>189<B>71<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.amNode<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>20<B>275<B>145<B> extra <special>Tool Tip<ms>Death<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>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>710<B>331<B>710,357,795,331<special>Tool Tip<ms>Join blocks shape<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>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>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>256<B>98<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>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.soundNode<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>770<B>416<B> extra <special>Tool Tip<ms>Suspend 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>2<B>319<B>116<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>9<B>1041<B>383<B>1041,383,1080,385<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>239<B>94<B>239,94,281,96<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>9<B>557<B>337<B>557,337,606,341<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>20<B>991<B>599<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>2<B>657<B>421<B> extra <special>Tool Tip<ms>Suspend Processing<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>1055<B>385<B> extra <special>Tool Tip<ms>Suspend Processing<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>20<B>209<B>119<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>291<B>384<B>291,384,331,384<special>Tool Tip<ms>Join blocks shape<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>9<B>304<B>115<B>304,119,344,115<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>199<B>121<B>199,121,214,248<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>517<B>610<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>9<B>266<B>148<B>266,148,308,270<special>Tool Tip<ms>Join blocks shape<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>631<B>332<B>631,366,685,332<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>1048<B>569<B> extra <special>Tool Tip<ms>Suspend Processing<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>"end diagram"<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>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>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>2<B>304<B>382<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>302<B>486<B>302,486,541,509<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>9<B>1040<B>570<B>1040,570,1073,570<special>Tool Tip<ms>Join blocks shape<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>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>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<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>9<B>214<B>308<B>214,308,266,359<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>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>710<B>331<B>710,357,795,331<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>20<B>275<B>145<B> extra <special>Tool Tip<ms>Death<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>11<B>189<B>71<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.amNode<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>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/amtest.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/amtest.src (original)
+++ sofaswitch/trunk/callflow/tests/amtest.src Mon Jul 30 22:10:51 2007
@@ -1,4 +1,4 @@
-9<B>321<B>161<B>321,162,381,161<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>7<B>262<B>239<B> extra <special>Tool Tip<ms>End the Answering
-machine node.<ms><special>Worker node for termination (python code)<ms>self.amNode<ms><special> <B><Shape>11<B>192<B>116<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.amNode<ms><special> <B><Shape>12<B>262<B>288<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1<ms><special>Timer label (Python code)<ms>"deathtimer"<ms><special> <B><Shape>9<B>312<B>308<B>312,308,312,308,312,308,312,308,312,308,352,310<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>15<B>177<B>229<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>15<B>263<B>190<B> extra <special>Tool Tip<ms>Make the sound node
-talk to itself, so the user hears echo.<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>9<B>242<B>141<B>242,141,242,141,242,141<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>242<B>136<B>242,136,288,136<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>177<B>365<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>222<B>166<B>222,166,288,186<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>329<B>310<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>17<B>177<B>276<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>14<B>275<B>136<B> extra <special>Tool Tip<ms>wait for incoming DTMF from the sound node.
-On receiving DTMF, end everything<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.eventData<ms><special> <B><Shape>20<B>266<B>340<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>22<B>201<B>72<B> extra <special>Tool Tip<ms>Register for events from sound node<ms><special>Node to receive events from (Python code)<ms>"sound"<ms><special> <B><Shape>16<B>177<B>320<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>360<B>161<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>1<B>192<B>26<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>10<B>185<B>167<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>
+10<B>185<B>167<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>177<B>320<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>12<B>262<B>288<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds, Python code)<ms>1<ms><special>Timer label (Python code)<ms>"deathtimer"<ms><special> <B><Shape>9<B>323<B>158<B>323,159,383,158<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>177<B>365<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>22<B>201<B>72<B> extra <special>Tool Tip<ms>Register for events from sound node<ms><special>Node to receive events from (Python code)<ms>"sound"<ms><special> <B><Shape>17<B>177<B>276<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>9<B>222<B>166<B>222,166,288,186<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>192<B>26<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>15<B>263<B>190<B> extra <special>Tool Tip<ms>Make the sound node
+talk to itself, so the user hears echo.<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>9<B>242<B>141<B>242,141,242,141,242,141<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>242<B>136<B>242,136,288,136<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>275<B>136<B> extra <special>Tool Tip<ms>wait for incoming DTMF from the sound node.
+On receiving DTMF, end everything<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.eventData<ms><special> <B><Shape>2<B>356<B>156<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>9<B>314<B>310<B>314,310,314,310,314,310,314,310,314,310,354,312<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>7<B>262<B>239<B> extra <special>Tool Tip<ms>End the Answering
+machine node.<ms><special>Worker node for termination (python code)<ms>self.amNode<ms><special> <B><Shape>20<B>266<B>340<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>2<B>329<B>310<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>15<B>177<B>229<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>11<B>192<B>116<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.amNode<ms><special> <B><Shape>
Modified: sofaswitch/trunk/callflow/tests/child.src
==============================================================================
--- sofaswitch/trunk/callflow/tests/child.src (original)
+++ sofaswitch/trunk/callflow/tests/child.src Mon Jul 30 22:10:51 2007
@@ -1 +1 @@
-20<B>531<B>142<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>528<B>93<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "CHILD says::: parent id is ", self.parentId, " child id is ", self.myId, "data from parent is ", self.userData<ms><special> <B><Shape>1<B>518<B>50<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>
+10<B>528<B>93<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "CHILD says::: parent id is ", self.parentId, " child id is ", self.myId, "data from parent is ", self.userData<ms><special> <B><Shape>1<B>518<B>50<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>533<B>152<B> extra <special>Tool Tip<ms>Death<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 Mon Jul 30 22:10:51 2007
@@ -1 +1 @@
-2<B>247<B>153<B> extra <special>Tool Tip<ms>Suspend 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>1<B>168<B>34<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>192<B>252<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>200<B>135<B>200,135,205,195<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>189<B>195<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>164<B>131<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.newNode<ms><special> <B><Shape>9<B>148<B>379<B>148,379,203,381,206,422<special>Tool Tip<ms>Join blocks shape<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>9<B>122<B>191<B>180,191,122,266<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>109<B>266<B> extra <special>Tool Tip<ms>Wait for DTMF from sound, to end everything.<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>10<B>252<B>103<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>11<B>170<B>85<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>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.soundNode<ms><special> <B><Shape>20<B>110<B>395<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>2<B>183<B>418<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>9<B>158<B>288<B>159,288,158,361,211,363,206,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>220<B>103<B>220,105,268,103<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>
+9<B>220<B>103<B>220,105,268,103<special>Tool Tip<ms>Join blocks shape<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>10<B>252<B>103<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>1<B>168<B>34<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>10<B>189<B>195<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>158<B>288<B>159,288,158,361,211,363,206,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>109<B>266<B> extra <special>Tool Tip<ms>Wait for DTMF from sound, to end everything.<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>247<B>153<B> extra <special>Tool Tip<ms>Suspend Processing<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>9<B>148<B>379<B>148,379,203,381,206,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>164<B>131<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.soundNode<ms><special> <B><Shape>20<B>110<B>395<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>200<B>135<B>200,135,205,195<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>183<B>418<B> extra <special>Tool Tip<ms>Suspend Processing<ms><special> <B><Shape>9<B>122<B>191<B>180,191,122,266<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>170<B>85<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>Info to send to remote node (Python code)<ms><ms><special>Python variable: generated data<ms>self.soundNode<ms><special> <B><Shape>20<B>192<B>252<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>