[Opalvoip-devel] Own vxm session
Brought to you by:
csoutheren,
rjongbloed
From: Denis <bab...@ma...> - 2010-12-11 18:41:13
|
Hello. I made my own vxml session like this: class MyIVREndPoint : public OpalIVREndPoint { public: MyIVREndPoint(OpalManager & manager) : OpalIVREndPoint(manager) {} OpalIVRConnection * CreateConnection( OpalCall & call, ///< Owner of connection void * userData, ///< Arbitrary data to pass to connection const PString & vxml, ///< vxml to execute unsigned int options, OpalConnection::StringOptions * stringOptions = NULL ); }; class MyIVRConnection : public OpalIVRConnection { public: MyIVRConnection( OpalCall & call, ///< Owner calll for connection OpalIVREndPoint & endpoint, ///< Owner endpoint for connection void * userData, ///< Arbitrary data to pass to connection const PString & vxml, ///< vxml to execute unsigned int options, OpalConnection::StringOptions * stringOptions = NULL ); }; class MyVXMLSession : public OpalVXMLSession { public: MyVXMLSession( OpalConnection * conn, PTextToSpeech * tts = NULL, PBoolean autoDelete = PFalse ); }; OpalIVRConnection * MyIVREndPoint::CreateConnection(OpalCall & call, void * userData, const PString & vxml, unsigned int options, OpalConnection::StringOptions * stringOptions) { return new MyIVRConnection(call, *this, userData, vxml, options, stringOptions); } MyIVRConnection::MyIVRConnection(OpalCall & call, OpalIVREndPoint & ep, void * userData, const PString & vxml, unsigned int options, OpalConnection::StringOptions * stringOptions) : OpalIVRConnection(call, ep, userData, vxml, options, stringOptions) { MyVXMLSession vxmlSession(this, PFactory<PTextToSpeech>::CreateInstance(ep.GetDefaultTextToSpeech()), true); } MyVXMLSession::MyVXMLSession(OpalConnection * conn, PTextToSpeech * tts, PBoolean autoDelete) : OpalVXMLSession(conn, tts, autoDelete) { } Why application crashes on exit: void OpalManager::GarbageCollection() { PBoolean allCleared = activeCalls.DeleteObjectsToBeRemoved(); endpointsMutex.StartRead(); for (PList<OpalEndPoint>::iterator ep = endpointList.begin(); ep != endpointList.end(); ++ep) { if (!ep->GarbageCollection()) <<-- "Access violation" exeception allCleared = false; } endpointsMutex.EndRead(); if (allCleared && m_clearingAllCallsCount != 0) m_allCallsCleared.Signal(); } |