OPAL Version 3.10.2
|
00001 /* 00002 * ivr.h 00003 * 00004 * Interactive Voice Response support. 00005 * 00006 * Open Phone Abstraction Library (OPAL) 00007 * Formally known as the Open H323 project. 00008 * 00009 * Copyright (c) 2001 Equivalence Pty. Ltd. 00010 * 00011 * The contents of this file are subject to the Mozilla Public License 00012 * Version 1.0 (the "License"); you may not use this file except in 00013 * compliance with the License. You may obtain a copy of the License at 00014 * http://www.mozilla.org/MPL/ 00015 * 00016 * Software distributed under the License is distributed on an "AS IS" 00017 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 00018 * the License for the specific language governing rights and limitations 00019 * under the License. 00020 * 00021 * The Original Code is Open Phone Abstraction Library. 00022 * 00023 * The Initial Developer of the Original Code is Equivalence Pty. Ltd. 00024 * 00025 * Contributor(s): ______________________________________. 00026 * 00027 * $Revision: 25893 $ 00028 * $Author: rjongbloed $ 00029 * $Date: 2011-05-25 20:31:43 -0500 (Wed, 25 May 2011) $ 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 const OpalVXMLSession & GetVXMLSession() const { return m_vxmlSession; } 00298 OpalVXMLSession & GetVXMLSession() { return m_vxmlSession; } 00299 00300 PTextToSpeech * GetTextToSpeech() const { return m_vxmlSession.GetTextToSpeech(); } 00301 PTextToSpeech * SetTextToSpeech(const PString & ttsName) { return m_vxmlSession.SetTextToSpeech(ttsName); } 00302 PTextToSpeech * SetTextToSpeech(PTextToSpeech * tts, PBoolean autoDelete = false) { return m_vxmlSession.SetTextToSpeech(tts, autoDelete); } 00303 00304 protected: 00305 virtual bool StartVXML(const PString & vxml); 00306 virtual bool StartScript(const PString & script); 00307 00308 OpalIVREndPoint & endpoint; 00309 PString m_vxmlScript; 00310 OpalMediaFormatList m_vxmlMediaFormats; 00311 OpalVXMLSession m_vxmlSession; 00312 }; 00313 00314 00318 class OpalIVRMediaStream : public OpalRawMediaStream 00319 { 00320 PCLASSINFO(OpalIVRMediaStream, OpalRawMediaStream); 00321 public: 00326 OpalIVRMediaStream( 00327 OpalIVRConnection & conn, 00328 const OpalMediaFormat & mediaFormat, 00329 unsigned sessionID, 00330 PBoolean isSource, 00331 PVXMLSession & vxml 00332 ); 00334 00342 virtual PBoolean Open(); 00343 00348 virtual PBoolean Close(); 00349 00353 virtual PBoolean IsSynchronous() const; 00355 00356 protected: 00357 OpalConnection & conn; 00358 PVXMLSession & vxmlSession; 00359 }; 00360 00361 00362 #endif // OPAL_IVR 00363 00364 #endif // OPAL_OPAL_IVR_H 00365 00366 00367 // End of File ///////////////////////////////////////////////////////////////