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
00087 class OpalIVREndPoint : public OpalLocalEndPoint
00088 {
00089 PCLASSINFO(OpalIVREndPoint, OpalLocalEndPoint);
00090 public:
00095 OpalIVREndPoint(
00096 OpalManager & manager,
00097 const char * prefix = "ivr"
00098 );
00099
00102 ~OpalIVREndPoint();
00104
00136 virtual PSafePtr<OpalConnection> MakeConnection(
00137 OpalCall & call,
00138 const PString & party,
00139 void * userData = NULL,
00140 unsigned int options = 0,
00141 OpalConnection::StringOptions * stringOptions = NULL
00142
00143 );
00144
00154 virtual OpalMediaFormatList GetMediaFormats() const;
00156
00162 virtual OpalIVRConnection * CreateConnection(
00163 OpalCall & call,
00164 void * userData,
00165 const PString & vxml,
00166 unsigned int options,
00167 OpalConnection::StringOptions * stringOptions = NULL
00168 );
00170
00177 PSafePtr<OpalIVRConnection> GetIVRConnectionWithLock(
00178 const PString & token,
00179 PSafetyMode mode = PSafeReadWrite
00180 ) { return PSafePtrCast<OpalConnection, OpalIVRConnection>(GetConnectionWithLock(token, mode)); }
00181
00184 const PString & GetDefaultVXML() const { return defaultVXML; }
00185
00188 void SetDefaultVXML(
00189 const PString & vxml
00190 );
00191
00194 void SetDefaultMediaFormats(
00195 const OpalMediaFormatList & formats
00196 );
00197
00201 virtual PBoolean StartVXML();
00202
00205 void SetDefaultTextToSpeech(const PString & tts)
00206 { defaultTts = tts; }
00207
00208 PString GetDefaultTextToSpeech() const
00209 { return defaultTts; }
00210
00212
00213 protected:
00214 PString defaultVXML;
00215 OpalMediaFormatList defaultMediaFormats;
00216 PString defaultTts;
00217
00218 private:
00219 P_REMOVE_VIRTUAL(OpalIVRConnection *, CreateConnection(OpalCall &,const PString &,void *,const PString &,OpalConnection::StringOptions *),0);
00220 };
00221
00222
00225 class OpalIVRConnection : public OpalLocalConnection
00226 {
00227 PCLASSINFO(OpalIVRConnection, OpalLocalConnection);
00228 public:
00233 OpalIVRConnection(
00234 OpalCall & call,
00235 OpalIVREndPoint & endpoint,
00236 void * userData,
00237 const PString & vxml,
00238 unsigned int options,
00239 OpalConnection::StringOptions * stringOptions = NULL
00240 );
00241
00244 ~OpalIVRConnection();
00246
00257 virtual bool IsNetworkConnection() const { return false; }
00258
00261 virtual PString GetLocalPartyURL() const;
00262
00268 void OnEstablished();
00269
00277 virtual OpalMediaFormatList GetMediaFormats() const;
00278
00293 virtual OpalMediaStream * CreateMediaStream(
00294 const OpalMediaFormat & mediaFormat,
00295 unsigned sessionID,
00296 PBoolean isSource
00297 );
00298
00306 virtual PBoolean SendUserInputString(
00307 const PString & value
00308 );
00310
00314 virtual PBoolean StartVXML();
00315
00316 virtual void OnStopMediaPatch(OpalMediaPatch & patch);
00317
00318 PTextToSpeech * SetTextToSpeech(PTextToSpeech * _tts, PBoolean autoDelete = PFalse)
00319 { return vxmlSession.SetTextToSpeech(_tts, autoDelete); }
00320
00321 PTextToSpeech * SetTextToSpeech(const PString & ttsName)
00322 { return vxmlSession.SetTextToSpeech(ttsName); }
00323
00324 PTextToSpeech * GetTextToSpeech()
00325 { return vxmlSession.GetTextToSpeech(); }
00326
00327
00328 protected:
00329 OpalIVREndPoint & endpoint;
00330 PString vxmlToLoad;
00331 OpalMediaFormatList vxmlMediaFormats;
00332 OpalVXMLSession vxmlSession;
00333 };
00334
00335
00339 class OpalIVRMediaStream : public OpalRawMediaStream
00340 {
00341 PCLASSINFO(OpalIVRMediaStream, OpalRawMediaStream);
00342 public:
00347 OpalIVRMediaStream(
00348 OpalIVRConnection & conn,
00349 const OpalMediaFormat & mediaFormat,
00350 unsigned sessionID,
00351 PBoolean isSource,
00352 PVXMLSession & vxml
00353 );
00355
00363 virtual PBoolean Open();
00364
00368 virtual PBoolean IsSynchronous() const;
00370
00371 protected:
00372 OpalConnection & conn;
00373 PVXMLSession & vxmlSession;
00374 };
00375
00376
00377 #endif // OPAL_IVR
00378
00379 #endif // OPAL_OPAL_IVR_H
00380
00381
00382