[Sofaswitch-svn] [commit] r148 - in sofaswitch/trunk: . callflow/src callflow/tests prompts sofa/include/sofa sofa/src
Author: derek Date: Tue Oct 10 16:48:03 2006 New Revision: 148 Added: sofaswitch/trunk/callflow/tests/amplaywavfile.src sofaswitch/trunk/callflow/tests/loadgraph.src Modified: sofaswitch/trunk/callflow/src/callstartstop.cpp sofaswitch/trunk/callflow/src/conditional.cpp sofaswitch/trunk/callflow/src/death.cpp sofaswitch/trunk/callflow/src/fileio.cpp sofaswitch/trunk/callflow/src/loadnewgraph.cpp sofaswitch/trunk/callflow/src/readfromfile.cpp sofaswitch/trunk/callflow/src/shapelist.cpp sofaswitch/trunk/callflow/src/shapelist.h sofaswitch/trunk/callflow/src/writetofile.cpp sofaswitch/trunk/message.cxx sofaswitch/trunk/prompts/instructions.wav sofaswitch/trunk/sofa/include/sofa/messages.h sofaswitch/trunk/sofa/src/messages.cxx Log: updates, new instructions, Modified: sofaswitch/trunk/callflow/src/callstartstop.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/callstartstop.cpp (original) +++ sofaswitch/trunk/callflow/src/callstartstop.cpp Tue Oct 10 16:48:03 2006 @@ -31,7 +31,7 @@ InformationSection(wxT("Worker node to activate (python code)"), wxT("\"voip1\"")); else displayData[displayData.size()] = - InformationSection(wxT("Worker node to close call (python code)"), wxT("\"voip1\"")); + InformationSection(wxT("Worker node for termination (python code)"), wxT("\"voip1\"")); AdjustIoPoints(); } Modified: sofaswitch/trunk/callflow/src/conditional.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/conditional.cpp (original) +++ sofaswitch/trunk/callflow/src/conditional.cpp Tue Oct 10 16:48:03 2006 @@ -36,6 +36,7 @@ { DrawCompileError(dc); dc.SetPen(*wxBLACK_PEN); + dc.SetBrush(wxBrush(*wxBLACK, wxSOLID)); wxPoint p1(m_rect.GetPosition()); wxPoint pA(p1.x + 25, p1.y + 35); Modified: sofaswitch/trunk/callflow/src/death.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/death.cpp (original) +++ sofaswitch/trunk/callflow/src/death.cpp Tue Oct 10 16:48:03 2006 @@ -19,10 +19,10 @@ DndShapeDeath::DndShapeDeath() : DndShape(Death) { - wxSize newSize(50, 40); + wxSize newSize(24, 40); SetSize(newSize); - relInputPoints.Add(25, 0); + relInputPoints.Add(12, 0); AdjustIoPoints(); skullBitmap = wxBitmap(death); @@ -35,25 +35,28 @@ dc.SetBrush(wxBrush(*wxBLACK, wxSOLID)); wxPoint p1(m_rect.GetPosition()); - wxPoint pA(p1.x + 25, p1.y + 15); - wxPoint pB(p1.x + 25, p1.y + 0); - wxPoint pC(p1.x + 25, p1.y + 10); + wxPoint pA(p1.x + 12, p1.y + 15); + wxPoint pB(p1.x + 12, p1.y + 0); + wxPoint pC(p1.x + 12, p1.y + 10); dc.DrawLine(pA, pB); DrawArrow(dc, pC, ArrowDown, InputPointConnected(0) ? Connected : Loose); - dc.DrawBitmap(skullBitmap, p1.x + 13, p1.y + 15, true); + dc.DrawBitmap(skullBitmap, p1.x + 00, p1.y + 15, true); DndShape::Draw(dc); } bool DndShapeDeath::WriteSystemCode(wxTextFile & file) { - file.AddLine(" def Death(self, sTuple): "); - file.AddLine(" \"\"\"Terminate processing of this flow chart, by closing this whole thing down "); - file.AddLine(" \"\"\" "); - file.AddLine(" reactor.disconnectAll() "); - file.AddLine(" return None "); - file.AddLine(" "); + file.AddLine(" def Death(self, sTuple): "); + file.AddLine(" \"\"\"Terminate processing of this flow chart, by closing this particular connection. "); + file.AddLine(" \"\"\" "); + file.AddLine(" if self.isMaster: "); + file.AddLine(" reactor.disconnectAll() "); + file.AddLine(" else: "); + file.AddLine(" self.transport.loseConnection() "); + file.AddLine(" return None "); + file.AddLine(" "); return true; } Modified: sofaswitch/trunk/callflow/src/fileio.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/fileio.cpp (original) +++ sofaswitch/trunk/callflow/src/fileio.cpp Tue Oct 10 16:48:03 2006 @@ -97,10 +97,12 @@ file.AddLine(wxString::Format(" %s, ", outputLabel.c_str())); file.AddLine(wxString::Format(" \"File Name\" : ")); - file.AddLine(wxString::Format(" \"%s\", ", displayData[1].data.c_str())); + wxString dest = ProtectString(displayData[1].data); + file.AddLine(wxString::Format(" \"%s\", ", dest.c_str())); file.AddLine(wxString::Format(" \"answering machine node\" : ")); - file.AddLine(wxString::Format(" \"%s\", ", displayData[2].data.c_str())); + dest = ProtectString(displayData[2].data); + file.AddLine(wxString::Format(" \"%s\", ", dest.c_str())); file.AddLine(wxString::Format(" },")); Modified: sofaswitch/trunk/callflow/src/loadnewgraph.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/loadnewgraph.cpp (original) +++ sofaswitch/trunk/callflow/src/loadnewgraph.cpp Tue Oct 10 16:48:03 2006 @@ -27,7 +27,7 @@ relOutputPoints.Add(25, 50); displayData[displayData.size()] = - InformationSection(wxT("new graph file"), wxT("some_file")); + InformationSection(wxT("new graph file (Python code)"), wxT("\"file_graph\"")); AdjustIoPoints(); } @@ -66,10 +66,14 @@ bool DndShapeLoadNewGraph::WriteSystemCode(wxTextFile & file) { - file.AddLine(" def LoadNewGraph(self, sTuple): "); - file.AddLine(" a,b,c = sTuple"); - file.AddLine(" exec(self.data[a][\"LoadNewGraph Code\"])"); - file.AddLine(" return self.data[a][\"Output\"]"); + file.AddLine(" def Load_New_Graph(self, sTuple): "); + file.AddLine(" a,b,c = sTuple "); + file.AddLine(" fname = eval(self.data[a][\"new graph file\"]) "); + file.AddLine(" f = MyFactory() "); + file.AddLine(" f.isMaster = False "); + file.AddLine(" f.setGraph(fname) "); + file.AddLine(" reactor.connectTCP(sofaServer, 5000, f) "); + file.AddLine(" return self.data[a][\"Output\"] "); file.AddLine(""); return true; @@ -90,7 +94,8 @@ file.AddLine(wxString::Format(" %s, ", outputLabel.c_str())); file.AddLine(wxString::Format(" \"new graph file\" : ")); - file.AddLine(wxString::Format(" \"%s\", ", displayData[1].data.c_str())); + wxString dest = ProtectString(displayData[1].data); + file.AddLine(wxString::Format(" \"%s\", ", dest.c_str())); file.AddLine(wxString::Format(" },")); Modified: sofaswitch/trunk/callflow/src/readfromfile.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/readfromfile.cpp (original) +++ sofaswitch/trunk/callflow/src/readfromfile.cpp Tue Oct 10 16:48:03 2006 @@ -24,11 +24,11 @@ SetSize(newSize); displayData[displayData.size()] = - InformationSection(wxT("Filename to read audio from"), wxT("src_audio.wav")); + InformationSection(wxT("Filename to read audio from (Python code)"), wxT("\"src_audio.wav\"")); displayData[displayData.size()] = - InformationSection(wxT("answering machine node"), wxT("Answering machine worker node")); + InformationSection(wxT("answering machine node (Python code)"), wxT("Answering machine worker node")); relInputPoints.Add(25, 0); relOutputPoints.Add(25, 50); Modified: sofaswitch/trunk/callflow/src/shapelist.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/shapelist.cpp (original) +++ sofaswitch/trunk/callflow/src/shapelist.cpp Tue Oct 10 16:48:03 2006 @@ -184,7 +184,9 @@ int index = graphName.Find("."); if (index >= 0) graphName = graphName.Left(index); - graphName = graphName + "_graph"; + graphName = graphName + ".graph"; + graphFileName = graphName; + wxTextFile graphFile(graphName); if (!graphFile.Exists()) graphFile.Create(); @@ -298,6 +300,7 @@ file.AddLine(" "); file.AddLine(" \"\"\" "); file.AddLine(" def __init__(self): "); + file.AddLine(" self.isMaster = True "); file.AddLine(" self.graphSet = False "); file.AddLine(" self.connectionIsMade = False "); file.AddLine(" self.endProgramNow = False "); @@ -467,7 +470,7 @@ file.AddLine(" initialise, and activate the next step of initialise. Or, it is an ordinary "); file.AddLine(" message that has to be processed "); file.AddLine(" \"\"\" "); - file.AddLine(" print \"Received the message \", data "); + file.AddLine(" #print \"Received the message \", data "); file.AddLine(" while data.find(\" \") >= 0: "); file.AddLine(" data = data.replace(\" \", \" \") "); file.AddLine(" ssdata = str(data).split(\'\\0\') "); @@ -520,11 +523,10 @@ file.AddLine(" protocol = Controller "); file.AddLine(" "); file.AddLine(" def clientConnectionFailed(self, connector, reason): "); - file.AddLine(" print \"Connection failed - goodbye!\" "); - file.AddLine(" reactor.stop() "); + file.AddLine(" self.zzzzzzz = reason "); file.AddLine(" "); file.AddLine(" def clientConnectionLost(self, connector, reason): "); - file.AddLine(" reactor.stop() "); + file.AddLine(" self.zzzzzzzz = reason "); file.AddLine(" "); file.AddLine(" def buildProtocol(self, addr): "); file.AddLine(" p = self.protocol() "); @@ -532,18 +534,12 @@ file.AddLine(" self.myController = p "); file.AddLine(" self.myController.setGraphData(self.myGraphName) "); file.AddLine(" return p "); - file.AddLine(" for key in dir(p): "); - file.AddLine(" if '__' not in key: "); - file.AddLine(" value = getattr(p,key) "); - file.AddLine(" print key "); - file.AddLine(" print key, \" \", value "); - file.AddLine(" return p "); file.AddLine(" "); file.AddLine(" def setGraph(self, newName): "); file.AddLine(" self.myGraphName = newName "); file.AddLine(" "); file.AddLine("f = MyFactory() "); - file.AddLine("f.setGraph(\"a_graph\") "); + file.AddLine(wxString::Format("f.setGraph(\"%s\") ", graphFileName.c_str())); file.AddLine("reactor.connectTCP(sofaServer, 5000, f) "); file.AddLine("reactor.run() "); file.AddLine(" "); Modified: sofaswitch/trunk/callflow/src/shapelist.h ============================================================================== --- sofaswitch/trunk/callflow/src/shapelist.h (original) +++ sofaswitch/trunk/callflow/src/shapelist.h Tue Oct 10 16:48:03 2006 @@ -81,6 +81,11 @@ which match these coordinates. If there is a match found, mark them accordingly */ void LookForMatchingShapes(const wxPoint & firstPoint, const wxPoint & lastPoint); + + /**The name of the graph file, generated as part of the compile process. If + the source name is load.py, the graph name will be load.graph. If the + source name is example, the graph name will be example.graph.*/ + wxString graphFileName; }; Modified: sofaswitch/trunk/callflow/src/writetofile.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/writetofile.cpp (original) +++ sofaswitch/trunk/callflow/src/writetofile.cpp Tue Oct 10 16:48:03 2006 @@ -24,11 +24,11 @@ SetSize(newSize); displayData[displayData.size()] = - InformationSection(wxT("Filename to contain new audio"), wxT("empty_file.wav")); + InformationSection(wxT("Filename to contain new audio (Python code)"), wxT("\"empty_file.wav\"")); displayData[displayData.size()] = - InformationSection(wxT("answering machine node"), wxT("Answering machine worker node")); + InformationSection(wxT("answering machine node (Python code)"), wxT("Answering machine worker node")); relInputPoints.Add(25, 0); relOutputPoints.Add(25, 50); Added: sofaswitch/trunk/callflow/tests/amplaywavfile.src ============================================================================== --- (empty file) +++ sofaswitch/trunk/callflow/tests/amplaywavfile.src Tue Oct 10 16:48:03 2006 @@ -0,0 +1,3 @@ +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>9<B>821<B>356<B>821,357,977,357,1018,356<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>9<B>544<B>394<B>606,394,602,560,544,561<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>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>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>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>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<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>9<B>559<B>339<B>559,339,604,342<special>Tool Tip<ms>Join blocks shape<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>20<B>529<B>662<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>16<B>505<B>364<B> extra <special>Tool Tip<ms>Read From File<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>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>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>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>505<B>398<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>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>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>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>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>485<B>302,485,544,492,542,506<special>Tool Tip<ms>Join blocks shape<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>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>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>2<B>659<B>427<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>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>190<B>68<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>am<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<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>14<B>529<B>614<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>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>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>769<B>426<B> extra <special>Tool Tip<ms>End Processing<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>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>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>12<B>990<B>549<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>1039<B>386<B>1039,386,1082,387<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>9<B>214<B>304<B>214,304,262,356<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>11<B>189<B>117<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>sound<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label<ms>request sound<ms><special> <B><Shape>2<B>991<B>588<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape> Added: sofaswitch/trunk/callflow/tests/loadgraph.src ============================================================================== --- (empty file) +++ sofaswitch/trunk/callflow/tests/loadgraph.src Tue Oct 10 16:48:03 2006 @@ -0,0 +1 @@ +12<B>378<B>172<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label (string literal)<ms>endloadgraph<ms><special> <B><Shape>1<B>379<B>35<B> extra <special>Tool Tip<ms>Start Processing<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>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>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>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> Modified: sofaswitch/trunk/message.cxx ============================================================================== --- sofaswitch/trunk/message.cxx (original) +++ sofaswitch/trunk/message.cxx Tue Oct 10 16:48:03 2006 @@ -163,6 +163,11 @@ <tr><td> senddtmf </td><td> advise the recipient worker to send the folling dtmf stream to the remote voip node. Typically, a voip worker would receive this message, and send dtmf to the other end of the call. </td> </tr> +<tr><td> receiveddtmf </td><td> A worker node has detected a DTMF sequence, and is passing the detected + sequence back to the controller. Typically, a voip worker would be able to + detect DTMF, and is passing this on to the controller. The sound node, and + telephone line handlers can also detect DTMF events (which are alternatively + key pad presses) </td> </tr> <tr><td> requestnewid </td><td> A Supervisor will receive this message, create a new Worker, and reply with the id of the created Worker. An argument can be supplied. Currently, the only entity which uses this is the Modified: sofaswitch/trunk/prompts/instructions.wav ============================================================================== Binary files. No diff available. Modified: sofaswitch/trunk/sofa/include/sofa/messages.h ============================================================================== --- sofaswitch/trunk/sofa/include/sofa/messages.h (original) +++ sofaswitch/trunk/sofa/include/sofa/messages.h Tue Oct 10 16:48:03 2006 @@ -81,6 +81,12 @@ /**A fifth flavour of sending a message */ void SendThisMessageTo(const char *message, const char * subj, PString dest); + /**have detected incoming DTMF from the remote world. This DTMF would be + detected by a voip worker node, or telephone line + handler. Consequently, a message has to be sent to the remote controller + advising them of the received DTMF */ + void DtmfReceivedFromTheWorld(const PString & receivedDtmf); + /**Report the name of the node that last sent us a message */ PString GetLastSender() { return lastSender; } Modified: sofaswitch/trunk/sofa/src/messages.cxx ============================================================================== --- sofaswitch/trunk/sofa/src/messages.cxx (original) +++ sofaswitch/trunk/sofa/src/messages.cxx Tue Oct 10 16:48:03 2006 @@ -136,6 +136,11 @@ PTRACE(3, "DEstructor for MessageFrame " << ourId); } +void MessageFrame::DtmfReceivedFromTheWorld(const PString & receivedDtmf) +{ + SendThisMessageTo(PString("RECEIVEDDTMF ") + receivedDtmf, GetRemoteController()); +} + void MessageFrame::CloseMessagesSocket() { PTRACE(3, "Close messages socket for " << GetOurId());
participants (1)
-
SofaSWITCH SVN