00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef OPAL_OPAL_IVR_H
00033 #define OPAL_OPAL_IVR_H
00034
00035 #ifdef P_USE_PRAGMA
00036 #pragma interface
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #if OPAL_IVR
00042
00043 #include <opal/opalvxml.h>
00044 #include <opal/localep.h>
00045
00046 class OpalIVRConnection;
00047
00048
00051 class OpalIVREndPoint : public OpalLocalEndPoint
00052 {
00053 PCLASSINFO(OpalIVREndPoint, OpalLocalEndPoint);
00054 public:
00059 OpalIVREndPoint(
00060 OpalManager & manager,
00061 const char * prefix = "ivr"
00062 );
00063
00066 ~OpalIVREndPoint();
00068
00100 virtual PSafePtr<OpalConnection> MakeConnection(
00101 OpalCall & call,
00102 const PString & party,
00103 void * userData = NULL,
00104 unsigned int options = 0,
00105 OpalConnection::StringOptions * stringOptions = NULL
00106
00107 );
00108
00118 virtual OpalMediaFormatList GetMediaFormats() const;
00120
00126 virtual OpalIVRConnection * CreateConnection(
00127 OpalCall & call,
00128 void * userData,
00129 const PString & vxml,
00130 unsigned int options,
00131 OpalConnection::StringOptions * stringOptions = NULL
00132 );
00134
00141 PSafePtr<OpalIVRConnection> GetIVRConnectionWithLock(
00142 const PString & token,
00143 PSafetyMode mode = PSafeReadWrite
00144 ) { return PSafePtrCast<OpalConnection, OpalIVRConnection>(GetConnectionWithLock(token, mode)); }
00145
00148 const PString & GetDefaultVXML() const { return defaultVXML; }
00149
00152 void SetDefaultVXML(
00153 const PString & vxml
00154 );
00155
00158 void SetDefaultMediaFormats(
00159 const OpalMediaFormatList & formats
00160 );
00161
00169 virtual void OnEndDialog(
00170 OpalIVRConnection & connection
00171 );
00172
00175 void SetDefaultTextToSpeech(const PString & tts)
00176 { defaultTts = tts; }
00177
00178 PString GetDefaultTextToSpeech() const
00179 { return defaultTts; }
00180
00182
00183 protected:
00184 PString defaultVXML;
00185 OpalMediaFormatList defaultMediaFormats;
00186 PString defaultTts;
00187
00188 private:
00189 P_REMOVE_VIRTUAL(OpalIVRConnection *, CreateConnection(OpalCall &,const PString &,void *,const PString &,OpalConnection::StringOptions *),0);
00190 };
00191
00192
00195 class OpalIVRConnection : public OpalLocalConnection
00196 {
00197 PCLASSINFO(OpalIVRConnection, OpalLocalConnection);
00198 public:
00203 OpalIVRConnection(
00204 OpalCall & call,
00205 OpalIVREndPoint & endpoint,
00206 void * userData,
00207 const PString & vxml,
00208 unsigned int options,
00209 OpalConnection::StringOptions * stringOptions = NULL
00210 );
00211
00214 ~OpalIVRConnection();
00216
00227 virtual bool IsNetworkConnection() const { return false; }
00228
00231 virtual PString GetLocalPartyURL() const;
00232
00238 void OnEstablished();
00239
00246 virtual bool TransferConnection(
00247 const PString & remoteParty
00248 );
00249
00257 virtual OpalMediaFormatList GetMediaFormats() const;
00258
00273 virtual OpalMediaStream * CreateMediaStream(
00274 const OpalMediaFormat & mediaFormat,
00275 unsigned sessionID,
00276 PBoolean isSource
00277 );
00278
00286 virtual PBoolean SendUserInputString(
00287 const PString & value
00288 );
00290
00294 virtual void OnEndDialog();
00295
00296 const PString & GetVXML() const { return m_vxmlScript; }
00297
00298 PTextToSpeech * GetTextToSpeech() const { return m_vxmlSession.GetTextToSpeech(); }
00299 PTextToSpeech * SetTextToSpeech(const PString & ttsName) { return m_vxmlSession.SetTextToSpeech(ttsName); }
00300 PTextToSpeech * SetTextToSpeech(PTextToSpeech * tts, PBoolean autoDelete = false) { return m_vxmlSession.SetTextToSpeech(tts, autoDelete); }
00301
00302 protected:
00303 virtual bool StartVXML(const PString & vxml);
00304 virtual bool StartScript(const PString & script);
00305
00306 OpalIVREndPoint & endpoint;
00307 PString m_vxmlScript;
00308 OpalMediaFormatList m_vxmlMediaFormats;
00309 OpalVXMLSession m_vxmlSession;
00310 };
00311
00312
00316 class OpalIVRMediaStream : public OpalRawMediaStream
00317 {
00318 PCLASSINFO(OpalIVRMediaStream, OpalRawMediaStream);
00319 public:
00324 OpalIVRMediaStream(
00325 OpalIVRConnection & conn,
00326 const OpalMediaFormat & mediaFormat,
00327 unsigned sessionID,
00328 PBoolean isSource,
00329 PVXMLSession & vxml
00330 );
00332
00340 virtual PBoolean Open();
00341
00346 virtual PBoolean Close();
00347
00351 virtual PBoolean IsSynchronous() const;
00353
00354 protected:
00355 OpalConnection & conn;
00356 PVXMLSession & vxmlSession;
00357 };
00358
00359
00360 #endif // OPAL_IVR
00361
00362 #endif // OPAL_OPAL_IVR_H
00363
00364
00365