PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vxml.h
Go to the documentation of this file.
1 /*
2  * vxml.h
3  *
4  * VXML engine for pwlib library
5  *
6  * Copyright (C) 2002 Equivalence Pty. Ltd.
7  *
8  * The contents of this file are subject to the Mozilla Public License
9  * Version 1.0 (the "License"); you may not use this file except in
10  * compliance with the License. You may obtain a copy of the License at
11  * http://www.mozilla.org/MPL/
12  *
13  * Software distributed under the License is distributed on an "AS IS"
14  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
15  * the License for the specific language governing rights and limitations
16  * under the License.
17  *
18  * The Original Code is Portable Windows Library.
19  *
20  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
21  *
22  * Contributor(s): ______________________________________.
23  */
24 
25 #ifndef PTLIB_VXML_H
26 #define PTLIB_VXML_H
27 
28 #ifdef P_USE_PRAGMA
29 #pragma interface
30 #endif
31 
32 
33 #include <ptclib/pxml.h>
34 
35 #if P_VXML
36 
37 #include <ptlib/pfactory.h>
38 #include <ptlib/pipechan.h>
39 #include <ptlib/sound.h>
40 #include <ptlib/videoio.h>
41 #include <ptclib/delaychan.h>
42 #include <ptclib/pwavfile.h>
43 #include <ptclib/ptts.h>
44 #include <ptclib/url.h>
45 #include <ptclib/script.h>
46 
47 #include <queue>
48 
49 
50 class PVXMLSession;
51 class PVXMLDialog;
52 class PVXMLSession;
53 
54 
55 // these are the same strings as the Opal equivalents, but as this is PWLib, we can't use Opal contants
56 #define VXML_PCM16 PSOUND_PCM16
57 #define VXML_G7231 "G.723.1"
58 #define VXML_G729 "G.729"
59 
60 
147 
149 class PVXMLGrammar : public PObject
150 {
151  PCLASSINFO(PVXMLGrammar, PObject);
152  public:
153  PVXMLGrammar(PVXMLSession & session, PXMLElement & field);
154 
155  virtual void OnUserInput(const char ch) = 0;
156  virtual void Start();
157  virtual bool Process();
158 
166  };
167 
168  GrammarState GetState() const { return m_state; }
169  void SetIdle() { m_state = Idle; }
170 
171  void SetSessionTimeout();
172  void SetTimeout(const PTimeInterval & timeout);
173 
174  protected:
175  PDECLARE_NOTIFIER(PTimer, PVXMLGrammar, OnTimeout);
176 
177  virtual bool IsFilled() { return false; }
178 
184  PTimer m_timer;
185  PDECLARE_MUTEX(m_mutex);
186 };
187 
188 
190 
192 {
193  PCLASSINFO(PVXMLMenuGrammar, PVXMLGrammar);
194  public:
195  PVXMLMenuGrammar(PVXMLSession & session, PXMLElement & field);
196  virtual void OnUserInput(const char ch);
197  virtual bool Process();
198 };
199 
200 
202 
204 {
205  PCLASSINFO(PVXMLDigitsGrammar, PVXMLGrammar);
206  public:
208  PVXMLSession & session,
209  PXMLElement & field,
210  PINDEX minDigits,
211  PINDEX maxDigits,
212  PString terminators
213  );
214 
215  virtual void OnUserInput(const char ch);
216 
217  virtual bool IsFilled();
218 
219  protected:
220  PINDEX m_minDigits;
221  PINDEX m_maxDigits;
223 };
224 
225 
227 
228 class PVXMLCache : public PSafeObject
229 {
230  public:
231  PVXMLCache();
232 
233  virtual bool Get(
234  const PString & prefix,
235  const PString & key,
236  const PString & suffix,
237  PFilePath & filename
238  );
239 
240  virtual bool PutWithLock(
241  const PString & prefix,
242  const PString & key,
243  const PString & suffix,
244  PFile & file
245  );
246 
247  void SetDirectory(
248  const PDirectory & directory
249  );
250 
251  const PDirectory & GetDirectory() const
252  { return m_directory; }
253 
254  protected:
255  virtual PFilePath CreateFilename(
256  const PString & prefix,
257  const PString & key,
258  const PString & suffix
259  );
260 
262 };
263 
265 
266 class PVXMLChannel;
267 
269 {
270  PCLASSINFO(PVXMLSession, PIndirectChannel);
271  public:
272  PVXMLSession(PTextToSpeech * tts = NULL, PBoolean autoDelete = false);
273  virtual ~PVXMLSession();
274 
275  // new functions
276  PTextToSpeech * SetTextToSpeech(PTextToSpeech * tts, PBoolean autoDelete = false);
277  PTextToSpeech * SetTextToSpeech(const PString & ttsName);
278  PTextToSpeech * GetTextToSpeech() const { return m_textToSpeech; }
279 
280  void SetCache(PVXMLCache & cache);
281  PVXMLCache & GetCache();
282 
283  void SetRecordDirectory(const PDirectory & dir) { m_recordDirectory = dir; }
284  const PDirectory & GetRecordDirectory() const { return m_recordDirectory; }
285 
286  virtual PBoolean Load(const PString & source);
287  virtual PBoolean LoadFile(const PFilePath & file, const PString & firstForm = PString::Empty());
288  virtual PBoolean LoadURL(const PURL & url);
289  virtual PBoolean LoadVXML(const PString & xml, const PString & firstForm = PString::Empty());
290  virtual PBoolean IsLoaded() const { return m_currentXML.get() != NULL; }
291 
292  virtual bool Open(const PString & mediaFormat, unsigned sampleRate = 8000, unsigned channels = 1);
293  virtual PBoolean Close();
294 
296  void UnLockVXMLChannel() { m_sessionMutex.Signal(); }
297  PMutex & GetSessionMutex() { return m_sessionMutex; }
298 
299  virtual PBoolean LoadGrammar(PVXMLGrammar * grammar);
300 
301  virtual PBoolean PlayText(const PString & text, PTextToSpeech::TextType type = PTextToSpeech::Default, PINDEX repeat = 1, PINDEX delay = 0);
302 
303  virtual PBoolean PlayFile(const PString & fn, PINDEX repeat = 1, PINDEX delay = 0, PBoolean autoDelete = false);
304  virtual PBoolean PlayData(const PBYTEArray & data, PINDEX repeat = 1, PINDEX delay = 0);
305  virtual PBoolean PlayCommand(const PString & data, PINDEX repeat = 1, PINDEX delay = 0);
306  virtual PBoolean PlayResource(const PURL & url, PINDEX repeat = 1, PINDEX delay = 0);
307  virtual PBoolean PlayTone(const PString & toneSpec, PINDEX repeat = 1, PINDEX delay = 0);
308  virtual PBoolean PlayElement(PXMLElement & element);
309 
310  //virtual PBoolean PlayMedia(const PURL & url, PINDEX repeat = 1, PINDEX delay = 0);
311  virtual PBoolean PlaySilence(PINDEX msecs = 0);
312  virtual PBoolean PlaySilence(const PTimeInterval & timeout);
313 
314  virtual PBoolean PlayStop();
315 
316  virtual void SetPause(PBoolean pause);
317  virtual void GetBeepData(PBYTEArray & data, unsigned ms);
318 
319  virtual void OnUserInput(const PString & str);
320 
321  PString GetXMLError() const { return m_lastXMLError; }
322 
323  virtual void OnEndDialog();
324  virtual void OnEndSession();
325 
330  };
331  virtual bool OnTransfer(const PString & /*destination*/, TransferType /*type*/) { return false; }
332  void SetTransferComplete(bool state);
333 
335  virtual PCaselessString GetVar(const PString & str) const;
336  virtual void SetVar(const PString & ostr, const PString & val);
337  virtual PString EvaluateExpr(const PString & oexpr);
338 
339  static PTimeInterval StringToTime(const PString & str, int dflt = 0);
340 
341  bool SetCurrentForm(const PString & id, bool fullURI);
342  bool GoToEventHandler(PXMLElement & element, const PString & eventName);
343  PXMLElement * FindElementWithCount(PXMLElement & parent, const PString & name, unsigned count);
344 
345  // overrides from VXMLChannelInterface
346  virtual void OnEndRecording(PINDEX bytesRecorded, bool timedOut);
347  virtual void Trigger();
348 
349 
350  virtual PBoolean TraverseBlock(PXMLElement & element);
351  virtual PBoolean TraverseAudio(PXMLElement & element);
352  virtual PBoolean TraverseBreak(PXMLElement & element);
353  virtual PBoolean TraverseValue(PXMLElement & element);
354  virtual PBoolean TraverseSayAs(PXMLElement & element);
355  virtual PBoolean TraverseGoto(PXMLElement & element);
356  virtual PBoolean TraverseGrammar(PXMLElement & element);
357  virtual PBoolean TraverseRecord(PXMLElement & element);
358  virtual PBoolean TraversedRecord(PXMLElement & element);
359  virtual PBoolean TraverseIf(PXMLElement & element);
360  virtual PBoolean TraversedIf(PXMLElement & element);
361  virtual PBoolean TraverseElseIf(PXMLElement & element);
362  virtual PBoolean TraverseElse(PXMLElement & element);
363  virtual PBoolean TraverseExit(PXMLElement & element);
364  virtual PBoolean TraverseVar(PXMLElement & element);
365  virtual PBoolean TraverseSubmit(PXMLElement & element);
366  virtual PBoolean TraverseMenu(PXMLElement & element);
367  virtual PBoolean TraversedMenu(PXMLElement & element);
368  virtual PBoolean TraverseChoice(PXMLElement & element);
369  virtual PBoolean TraverseProperty(PXMLElement & element);
370  virtual PBoolean TraverseDisconnect(PXMLElement & element);
371  virtual PBoolean TraverseForm(PXMLElement & element);
372  virtual PBoolean TraversedForm(PXMLElement & element);
373  virtual PBoolean TraversePrompt(PXMLElement & element);
374  virtual PBoolean TraversedPrompt(PXMLElement & element);
375  virtual PBoolean TraverseField(PXMLElement & element);
376  virtual PBoolean TraversedField(PXMLElement & element);
377  virtual PBoolean TraverseTransfer(PXMLElement & element);
378  virtual PBoolean TraversedTransfer(PXMLElement & element);
379  virtual PBoolean TraverseScript(PXMLElement & element);
380 
381  __inline PVXMLChannel * GetVXMLChannel() const { return (PVXMLChannel *)readChannel; }
382 #if P_VXML_VIDEO
383  const PVideoOutputDevice & GetVideoReceiver() const { return m_videoReceiver; }
384  PVideoOutputDevice & GetVideoReceiver() { return m_videoReceiver; }
385  const PVideoInputDevice & GetVideoSender() const { return m_videoSender; }
386  PVideoInputDevice & GetVideoSender() { return m_videoSender; }
387  static bool SetSignLanguageAnalyser(const PString & dllName);
388 #endif // P_VXML_VIDEO
389 
390  protected:
391  virtual bool InternalLoadVXML(const PString & xml, const PString & firstForm);
392  virtual void InternalStartThread();
393  virtual void InternalThreadMain();
394  virtual void InternalStartVXML();
395 
396  virtual bool ProcessNode();
397  virtual bool ProcessEvents();
398  virtual bool NextNode(bool processChildren);
399  bool ExecuteCondition(PXMLElement & element);
400  void ClearBargeIn();
401  void FlushInput();
402 
403  void SayAs(const PString & className, const PString & text);
404  void SayAs(const PString & className, const PString & text, const PString & voice);
405 
406  PURL NormaliseResourceName(const PString & src);
407 
408  PDECLARE_MUTEX(m_sessionMutex);
409 
411 
412  PTextToSpeech * m_textToSpeech;
415 
416 #if P_VXML_VIDEO
417  void SetRealVideoSender(PVideoInputDevice * device);
418  friend class PVXMLSignLanguageAnalyser;
419  PDECLARE_ScriptFunctionNotifier(PVXMLSession, SignLanguagePreviewFunction);
420  PDECLARE_ScriptFunctionNotifier(PVXMLSession, SignLanguageControlFunction);
421 
423  {
425  public:
426  VideoReceiverDevice(PVXMLSession & vxmlSession);
427  ~VideoReceiverDevice() { Close(); }
428  virtual PStringArray GetDeviceNames() const;
429  virtual PBoolean Open(const PString & deviceName, PBoolean startImmediate = true);
430  virtual PBoolean IsOpen();
431  virtual PBoolean Close();
432  virtual PBoolean SetColourFormat(const PString & colourFormat);
433  virtual PBoolean SetFrameData(const FrameData & frameData);
434  int GetAnalayserInstance() const { return m_analayserInstance; }
435  protected:
436  PVXMLSession & m_vxmlSession;
437  int m_analayserInstance;
438  };
439  VideoReceiverDevice m_videoReceiver;
440 
441  class VideoSenderDevice : public PVideoInputDeviceIndirect
442  {
443  PCLASSINFO(VideoSenderDevice, PVideoInputDeviceIndirect)
444  public:
445  VideoSenderDevice();
446  ~VideoSenderDevice() { Close(); }
447  virtual void SetActualDevice(PVideoInputDevice * actualDevice, bool autoDelete = true);
448  virtual PBoolean Start();
449  bool IsRunning() const { return m_running; }
450  protected:
451  virtual bool InternalGetFrameData(BYTE * buffer, PINDEX & bytesReturned, bool & keyFrame, bool wait);
452  bool m_running;
453  };
454  VideoSenderDevice m_videoSender;
455 #endif // P_VXML_VIDEO
456 
466  bool m_bargeIn;
468 
469  std::map<std::string, unsigned> m_eventCount;
470  unsigned m_promptCount;
471 
474 
477 #if P_SCRIPTS
478  PScriptLanguage *m_scriptContext;
479 #endif
480 
481  std::queue<char> m_userInputQueue;
482  PDECLARE_MUTEX(m_userInputMutex);
483 
484  enum {
493 
494  enum {
502 
503  friend class PVXMLChannel;
504  friend class VideoReceiverDevice;
505  friend class PVXMLTraverseEvent;
506 };
507 
508 
510 
511 class PVXMLRecordable : public PObject
512 {
513  PCLASSINFO(PVXMLRecordable, PObject);
514  public:
515  PVXMLRecordable();
516 
517  virtual PBoolean Open(const PString & arg) = 0;
518 
519  virtual bool OnStart(PVXMLChannel & incomingChannel) = 0;
520  virtual void OnStop() { }
521 
522  virtual PBoolean OnFrame(PBoolean /*isSilence*/) { return false; }
523 
524  const PTimeInterval & GetFinalSilence() const { return m_finalSilence; }
525  void SetFinalSilence(const PTimeInterval & v) { m_finalSilence = v > 0 ? v : 60000; }
526 
527  const PTimeInterval & GetMaxDuration() const { return m_maxDuration; }
528  void SetMaxDuration(const PTimeInterval & v) { m_maxDuration = v > 0 ? v : 86400000; }
529 
530  protected:
531  PSimpleTimer m_silenceTimer;
532  PSimpleTimer m_recordTimer;
535 };
536 
538 
540 {
542  public:
543  PBoolean Open(const PString & arg);
544  bool OnStart(PVXMLChannel & incomingChannel);
545  PBoolean OnFrame(PBoolean isSilence);
546 
547  protected:
549 };
550 
552 
553 class PVXMLPlayable : public PObject
554 {
555  PCLASSINFO(PVXMLPlayable, PObject);
556  public:
557  PVXMLPlayable();
558  ~PVXMLPlayable();
559 
560  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
561 
562  virtual bool OnStart() = 0;
563  virtual bool OnRepeat();
564  virtual bool OnDelay();
565  virtual void OnStop();
566 
567  virtual void SetRepeat(PINDEX v)
568  { m_repeat = v; }
569 
570  virtual PINDEX GetRepeat() const
571  { return m_repeat; }
572 
573  virtual PINDEX GetDelay() const
574  { return m_delay; }
575 
576  void SetFormat(const PString & fmt)
577  { m_format = fmt; }
578 
579  friend class PVXMLChannel;
580 
581  protected:
584  PINDEX m_repeat;
585  PINDEX m_delay;
588  bool m_delayDone; // very tacky flag used to indicate when the post-play delay has been done
589 };
590 
592 
594 {
595  PCLASSINFO(PVXMLPlayableStop, PVXMLPlayable);
596  public:
597  virtual bool OnStart();
598 };
599 
601 
603 {
604  PCLASSINFO(PVXMLPlayableURL, PVXMLPlayable);
605  public:
606  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
607  virtual bool OnStart();
608  protected:
610 };
611 
613 
615 {
616  PCLASSINFO(PVXMLPlayableData, PVXMLPlayable);
617  public:
618  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
619  void SetData(const PBYTEArray & data);
620  virtual bool OnStart();
621  virtual bool OnRepeat();
622  protected:
624 };
625 
627 
628 #if P_DTMF
629 
630 #include <ptclib/dtmf.h>
631 
633 {
635  public:
636  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
637  protected:
639 };
640 
641 #endif // P_DTMF
642 
643 
645 
647 {
648  PCLASSINFO(PVXMLPlayableCommand, PVXMLPlayable);
649  public:
650  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
651  virtual bool OnStart();
652  virtual void OnStop();
653 
654  protected:
656 };
657 
659 
661 {
662  PCLASSINFO(PVXMLPlayableFile, PVXMLPlayable);
663  public:
664  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
665  virtual bool OnStart();
666  virtual bool OnRepeat();
667  virtual void OnStop();
668  protected:
670 };
671 
673 
675 {
677  public:
679  virtual PBoolean Open(PVXMLChannel & chan, const PString & arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
680  virtual PBoolean Open(PVXMLChannel & chan, const PStringArray & filenames, PINDEX delay, PINDEX repeat, PBoolean autoDelete);
681  virtual bool OnStart();
682  virtual bool OnRepeat();
683  virtual void OnStop();
684  protected:
687 };
688 
690 
691 PQUEUE(PVXMLQueue, PVXMLPlayable);
692 
694 
696 {
697  PCLASSINFO(PVXMLChannel, PDelayChannel);
698  protected:
699  PVXMLChannel(unsigned frameDelay, PINDEX frameSize);
700  public:
701  ~PVXMLChannel();
702 
703  virtual bool Open(PVXMLSession * session, unsigned sampleRate, unsigned channels);
704 
705  // overrides from PIndirectChannel
706  virtual PBoolean IsOpen() const;
707  virtual PBoolean Close();
708  virtual PBoolean Read(void * buffer, PINDEX amount);
709  virtual PBoolean Write(const void * buf, PINDEX len);
710 
711  // new functions
712  virtual PString GetAudioFormat() const = 0;
713  bool IsMediaPCM() const { return GetAudioFormat() == VXML_PCM16; }
714 
715  virtual unsigned GetSampleRate() const = 0;
716  virtual bool SetSampleRate(unsigned rate) = 0;
717  virtual unsigned GetChannels() const = 0;
718  virtual bool SetChannels(unsigned channels) = 0;
719 
720  virtual PString GetMediaFileSuffix() const;
721  virtual bool AdjustMediaFilename(const PFilePath & ifn, PFilePath & ofn);
722  virtual PChannel * OpenMediaFile(const PFilePath & fn, bool recording);
723 
724  // Incoming channel functions
725  virtual PBoolean WriteFrame(const void * buf, PINDEX len) = 0;
726  virtual PBoolean IsSilenceFrame(const void * buf, PINDEX len) const = 0;
727 
728  virtual bool QueueRecordable(PVXMLRecordable * newItem);
729  bool EndRecording(bool timedOut);
730  bool IsRecording() const { return m_recordable != NULL; }
731 
732  // Outgoing channel functions
733  virtual PBoolean ReadFrame(void * buffer, PINDEX amount) = 0;
734  virtual PINDEX CreateSilenceFrame(void * buffer, PINDEX amount) = 0;
735  virtual void GetBeepData(PBYTEArray &, unsigned) { }
736 
737  virtual PBoolean QueueResource(const PURL & url, PINDEX repeat= 1, PINDEX delay = 0);
738 
739  virtual PBoolean QueuePlayable(const PString & type, const PString & str, PINDEX repeat = 1, PINDEX delay = 0, PBoolean autoDelete = false);
740  virtual PBoolean QueuePlayable(PVXMLPlayable * newItem);
741  virtual PBoolean QueueData(const PBYTEArray & data, PINDEX repeat = 1, PINDEX delay = 0);
742 
743  virtual PBoolean QueueFile(const PString & fn, PINDEX repeat = 1, PINDEX delay = 0, PBoolean autoDelete = false)
744  { return QueuePlayable("File", fn, repeat, delay, autoDelete); }
745 
746  virtual PBoolean QueueCommand(const PString & cmd, PINDEX repeat = 1, PINDEX delay = 0)
747  { return QueuePlayable("Command", cmd, repeat, delay, true); }
748 
749  virtual void FlushQueue();
750  virtual PBoolean IsPlaying() const { return m_currentPlayItem != NULL || m_playQueue.GetSize() > 0; }
751 
752  void SetPause(PBoolean pause) { m_paused = pause; }
753  void SetSilence(unsigned msecs);
754 
755  protected:
757 
758  PDECLARE_MUTEX(m_recordingMutex);
759  PDECLARE_MUTEX(m_playQueueMutex);
760  bool m_closed;
761  bool m_paused;
762  PINDEX m_totalData;
763 
764  // Incoming audio variables
766 
767  // Outgoing audio variables
768  PVXMLQueue m_playQueue;
770  PSimpleTimer m_silenceTimer;
771 
772 #if P_WAVFILE
773  P_REMOVE_VIRTUAL(PWAVFile*,CreateWAVFile(const PFilePath&,PBoolean),NULL);
774  P_REMOVE_VIRTUAL(PString,AdjustWavFilename(const PString&),NULL);
775 #endif
776 };
777 
778 
780 
781 class PVXMLNodeHandler : public PObject
782 {
783  PCLASSINFO(PVXMLNodeHandler, PObject);
784  public:
785  // Return true for process node, false to skip and move to next sibling
786  virtual bool Start(PVXMLSession & /*session*/, PXMLElement & /*node*/) const { return true; }
787 
788  // Return true to move to next sibling, false to stay at this node.
789  virtual bool Finish(PVXMLSession & /*session*/, PXMLElement & /*node*/) const { return true; }
790 };
791 
792 
794 
795 
796 #endif // P_VXML
797 
798 #endif // PTLIB_VXML_H
799 
800 
801 // End of file ////////////////////////////////////////////////////////////////
char m_defaultMenuDTMF
Definition: vxml.h:473
PTextToSpeech * GetTextToSpeech() const
Definition: vxml.h:278
void SetMaxDuration(const PTimeInterval &v)
Definition: vxml.h:528
enum PVXMLSession::@42 m_transferStatus
virtual bool SetSampleRate(unsigned rate)=0
PINDEX m_maxDigits
Definition: vxml.h:221
Definition: vxml.h:499
void SetTimeout(const PTimeInterval &timeout)
virtual PBoolean WriteFrame(const void *buf, PINDEX len)=0
virtual bool Process()
help keyword
Definition: vxml.h:165
virtual PBoolean PlayElement(PXMLElement &element)
PTones m_tones
Definition: vxml.h:638
virtual bool OnDelay()
virtual PBoolean TraverseGoto(PXMLElement &element)
PString m_lastXMLError
Definition: vxml.h:461
Definition: vxml.h:268
virtual PBoolean PlaySilence(PINDEX msecs=0)
virtual void Trigger()
PDECLARE_MUTEX(m_sessionMutex)
bool OnStart(PVXMLChannel &incomingChannel)
virtual PBoolean TraverseElse(PXMLElement &element)
Definition: vxml.h:496
virtual PBoolean TraverseGrammar(PXMLElement &element)
PVXMLCache * m_ttsCache
Definition: vxml.h:413
PVXMLPlayable * m_currentPlayItem
Definition: vxml.h:769
This class represents a disk file.
Definition: file.h:57
virtual PBoolean TraversedIf(PXMLElement &element)
bool ExecuteCondition(PXMLElement &element)
PVXMLChannel(unsigned frameDelay, PINDEX frameSize)
virtual void InternalStartVXML()
This class defines an arbitrary time interval to millisecond accuracy.
Definition: timeint.h:51
Definition: vxml.h:511
PINDEX frameSize
Definition: delaychan.h:241
Definition: vxml.h:497
PBoolean Open(const PString &arg)
#define PCLASSINFO(cls, par)
Declare all the standard PTLib class information.
Definition: object.h:2164
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
GrammarState GetState() const
Definition: vxml.h:168
Definition: vxml.h:632
virtual PBoolean TraversePrompt(PXMLElement &element)
#define PQUEUE(cls, T)
Declare a queue class.
Definition: lists.h:554
virtual PBoolean LoadFile(const PFilePath &file, const PString &firstForm=PString::Empty())
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
PXMLObject * m_currentNode
Definition: vxml.h:464
virtual void SetVar(const PString &ostr, const PString &val)
virtual PBoolean IsPlaying() const
Definition: vxml.h:750
virtual PBoolean QueuePlayable(const PString &type, const PString &str, PINDEX repeat=1, PINDEX delay=0, PBoolean autoDelete=false)
PTimer m_timer
Definition: vxml.h:184
virtual PBoolean ReadFrame(void *buffer, PINDEX amount)=0
virtual bool OnStart(PVXMLChannel &incomingChannel)=0
virtual bool OnRepeat()
PString m_newFormName
Definition: vxml.h:462
virtual bool Get(const PString &prefix, const PString &key, const PString &suffix, PFilePath &filename)
TransferType
Definition: vxml.h:326
bool IsRecording() const
Definition: vxml.h:730
This class defines an absolute time and date.
Definition: ptime.h:49
void FlushInput()
virtual bool OnStart()=0
virtual PBoolean TraverseField(PXMLElement &element)
void SetFormat(const PString &fmt)
Definition: vxml.h:576
virtual PBoolean TraverseForm(PXMLElement &element)
virtual PBoolean TraverseDisconnect(PXMLElement &element)
PAutoPtr< PXML > m_newXML
Definition: vxml.h:460
This class can be used to generate PCM data for tones (such as telephone calling tones and DTMF) at a...
Definition: dtmf.h:103
void SetRecordDirectory(const PDirectory &dir)
Definition: vxml.h:283
virtual PBoolean TraverseSubmit(PXMLElement &element)
virtual PBoolean TraverseBreak(PXMLElement &element)
Definition: vxml.h:674
virtual PBoolean TraversedField(PXMLElement &element)
virtual bool Open(PVXMLSession *session, unsigned sampleRate, unsigned channels)
PVXMLCache & GetCache()
virtual PBoolean Close()
Close the channel.
virtual PBoolean Close()
Close the channel.
PString m_recordingName
Definition: vxml.h:490
This is a dictionary collection class of PString objects, keyed by another string.
Definition: pstring.h:3151
void SetSilence(unsigned msecs)
This class describes a full description for a file on the particular platform.
Definition: filepath.h:61
virtual PFilePath CreateFilename(const PString &prefix, const PString &key, const PString &suffix)
virtual PBoolean Read(void *buffer, PINDEX amount)
Low level read from the file channel.
virtual PBoolean IsLoaded() const
Definition: vxml.h:290
virtual PBoolean LoadURL(const PURL &url)
virtual void OnEndDialog()
virtual PBoolean PlayResource(const PURL &url, PINDEX repeat=1, PINDEX delay=0)
bool EndRecording(bool timedOut)
virtual bool PutWithLock(const PString &prefix, const PString &key, const PString &suffix, PFile &file)
virtual PString GetAudioFormat() const =0
virtual PBoolean IsOpen() const
Determine if the channel is currently open and read and write operations can be executed on it...
This is a channel that operates indirectly through another channel(s).
Definition: indchan.h:45
PTimeInterval m_timeout
Definition: vxml.h:183
got something that matched the grammar
Definition: vxml.h:162
This class is a variation of a string that ignores case.
Definition: pstring.h:2012
enum PVXMLSession::@41 m_recordingStatus
virtual void InternalThreadMain()
PString m_command
Definition: vxml.h:655
GrammarState
Definition: vxml.h:159
const PTimeInterval & GetMaxDuration() const
Definition: vxml.h:527
PVXMLMenuGrammar(PVXMLSession &session, PXMLElement &field)
virtual PBoolean IsOpen() const
Determine if the channel is currently open and read and write operations can be executed on it...
This is an array collection class of PString objects.
Definition: pstring.h:2365
virtual bool ProcessEvents()
PChannel * readChannel
Channel for read operations.
Definition: indchan.h:362
virtual PBoolean TraverseElseIf(PXMLElement &element)
virtual ~PVXMLSession()
virtual void FlushQueue()
PVXMLQueue m_playQueue
Definition: vxml.h:768
bool m_autoDelete
Definition: vxml.h:587
PINDEX m_delay
Definition: vxml.h:585
virtual PBoolean TraversedForm(PXMLElement &element)
const PTimeInterval & GetFinalSilence() const
Definition: vxml.h:524
void SayAs(const PString &className, const PString &text)
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
virtual void OnUserInput(const PString &str)
bool GoToEventHandler(PXMLElement &element, const PString &eventName)
virtual bool OnStart()
virtual bool OnRepeat()
virtual void OnEndRecording(PINDEX bytesRecorded, bool timedOut)
virtual void OnStop()
PStringToString GetVariables() const
bool m_recordStopOnDTMF
Definition: vxml.h:489
virtual bool NextNode(bool processChildren)
std::map< std::string, unsigned > m_eventCount
Definition: vxml.h:469
Definition: vxml.h:487
Definition: vxml.h:498
Class to represent a directory in the operating system file system.
Definition: pdirect.h:173
PString m_format
Definition: vxml.h:586
PThread * m_vxmlThread
Definition: vxml.h:457
virtual PBoolean TraverseTransfer(PXMLElement &element)
PAutoPtr< PXML > m_currentXML
Definition: vxml.h:463
virtual PBoolean Open(const PString &arg)=0
bool SetCurrentForm(const PString &id, bool fullURI)
PChannel * m_subChannel
Definition: vxml.h:583
void SetTransferComplete(bool state)
Definition: vxml.h:602
Array of unsigned characters.
Definition: array.h:605
virtual bool Start(PVXMLSession &, PXMLElement &) const
Definition: vxml.h:786
PVXMLSession & m_session
Definition: vxml.h:179
PVXMLDigitsGrammar(PVXMLSession &session, PXMLElement &field, PINDEX minDigits, PINDEX maxDigits, PString terminators)
PVXMLSession(PTextToSpeech *tts=NULL, PBoolean autoDelete=false)
#define P_REMOVE_VIRTUAL(type, fn, ret)
Definition: object.h:146
Class for implementing a &quot;delay line&quot; channel.
Definition: delaychan.h:157
PTextToSpeech * m_textToSpeech
Definition: vxml.h:412
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
virtual PINDEX GetDelay() const
Definition: vxml.h:573
virtual unsigned GetChannels() const =0
void SetPause(PBoolean pause)
Definition: vxml.h:752
PXMLElement & m_field
Definition: vxml.h:180
virtual PBoolean IsSilenceFrame(const void *buf, PINDEX len) const =0
Definition: vxml.h:553
GrammarState m_state
Definition: vxml.h:182
virtual bool ProcessNode()
PXMLElement * FindElementWithCount(PXMLElement &parent, const PString &name, unsigned count)
timeout or still waiting to match
Definition: vxml.h:163
friend class PVXMLTraverseEvent
Definition: vxml.h:505
virtual PINDEX CreateSilenceFrame(void *buffer, PINDEX amount)=0
bool m_closed
Definition: vxml.h:760
virtual PBoolean LoadVXML(const PString &xml, const PString &firstForm=PString::Empty())
virtual bool OnRepeat()
virtual bool IsFilled()
Definition: vxml.h:177
PVXMLChannel * m_vxmlChannel
Definition: vxml.h:582
void ClearBargeIn()
virtual PCaselessString GetVar(const PString &str) const
bool IsMediaPCM() const
Definition: vxml.h:713
virtual PBoolean QueueResource(const PURL &url, PINDEX repeat=1, PINDEX delay=0)
const PDirectory & GetRecordDirectory() const
Definition: vxml.h:284
virtual bool Process()
void UnLockVXMLChannel()
Definition: vxml.h:296
virtual bool IsFilled()
PString m_value
Definition: vxml.h:181
virtual PINDEX GetRepeat() const
Definition: vxml.h:570
virtual bool OnStart()
virtual void OnEndSession()
PBoolean OnFrame(PBoolean isSilence)
virtual bool OnStart()
Abstract class defining I/O channel semantics.
Definition: channel.h:103
virtual PBoolean PlayText(const PString &text, PTextToSpeech::TextType type=PTextToSpeech::Default, PINDEX repeat=1, PINDEX delay=0)
#define VXML_PCM16
Definition: vxml.h:56
Definition: vxml.h:203
This class defines a thread-safe object in a collection.
Definition: safecoll.h:123
PINDEX m_totalData
Definition: vxml.h:762
virtual PBoolean TraversedMenu(PXMLElement &element)
bool PBoolean
Definition: object.h:174
virtual PBoolean QueueCommand(const PString &cmd, PINDEX repeat=1, PINDEX delay=0)
Definition: vxml.h:746
virtual bool InternalLoadVXML(const PString &xml, const PString &firstForm)
Definition: vxml.h:660
static PTimeInterval StringToTime(const PString &str, int dflt=0)
PFilePath m_fileName
Definition: vxml.h:548
virtual bool Finish(PVXMLSession &, PXMLElement &) const
Definition: vxml.h:789
bool m_autoDeleteTextToSpeech
Definition: vxml.h:414
virtual PBoolean PlayTone(const PString &toneSpec, PINDEX repeat=1, PINDEX delay=0)
PDirectory m_recordDirectory
Definition: vxml.h:492
The character string class.
Definition: pstring.h:108
bool m_bargingIn
Definition: vxml.h:467
virtual PBoolean PlayCommand(const PString &data, PINDEX repeat=1, PINDEX delay=0)
PStringToString m_variables
Definition: vxml.h:475
PMutex & GetSessionMutex()
Definition: vxml.h:297
virtual void GetBeepData(PBYTEArray &data, unsigned ms)
void SetIdle()
Definition: vxml.h:169
Not yet started.
Definition: vxml.h:160
Definition: vxml.h:539
Definition: pxml.h:398
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
virtual bool OnTransfer(const PString &, TransferType)
Definition: vxml.h:331
Definition: vxml.h:646
std::queue< char > m_userInputQueue
Definition: vxml.h:481
virtual void OnStop()
virtual void OnStop()
recognized something but didn&#39;t match the grammar
Definition: vxml.h:164
PTextToSpeech * SetTextToSpeech(PTextToSpeech *tts, PBoolean autoDelete=false)
PDECLARE_MUTEX(m_mutex)
PVXMLRecordable * m_recordable
Definition: vxml.h:765
virtual PBoolean Write(const void *buf, PINDEX len)
Low level write to the file channel.
PDECLARE_MUTEX(m_recordingMutex)
virtual PBoolean TraverseBlock(PXMLElement &element)
virtual bool Open(const PString &mediaFormat, unsigned sampleRate=8000, unsigned channels=1)
virtual PBoolean TraverseExit(PXMLElement &element)
Definition: vxml.h:781
void SetFinalSilence(const PTimeInterval &v)
Definition: vxml.h:525
virtual PBoolean TraverseSayAs(PXMLElement &element)
PURL m_rootURL
Definition: vxml.h:410
This class defines a thread mutual exclusion object.
Definition: mutex.h:101
This class defines a thread of execution in the system.
Definition: thread.h:66
Definition: vxml.h:228
Definition: vxml.h:486
__inline PVXMLChannel * GetVXMLChannel() const
Definition: vxml.h:381
virtual void OnUserInput(const char ch)=0
#define PDECLARE_ScriptFunctionNotifier(cls, fn)
Definition: script.h:243
virtual void OnStop()
Definition: vxml.h:520
This class defines a video input device.
Definition: videoio.h:940
Definition: vxml.h:614
const PDirectory & GetDirectory() const
Definition: vxml.h:251
static const PString & Empty()
Return an empty string.
virtual void Start()
virtual PString EvaluateExpr(const PString &oexpr)
PDECLARE_NOTIFIER(PTimer, PVXMLGrammar, OnTimeout)
virtual PBoolean TraverseRecord(PXMLElement &element)
Grammar awaiting input.
Definition: vxml.h:161
Class for a factory to create concrete class instances without parameters during construction.
Definition: pfactory.h:396
virtual PBoolean TraverseVar(PXMLElement &element)
PTimeInterval m_maxDuration
Definition: vxml.h:534
A wrapper around a scripting language instance.
Definition: script.h:43
Definition: vxml.h:695
PVXMLGrammar(PVXMLSession &session, PXMLElement &field)
PStringArray m_fileNames
Definition: vxml.h:685
virtual PBoolean TraverseIf(PXMLElement &element)
PSimpleTimer m_silenceTimer
Definition: vxml.h:531
virtual bool QueueRecordable(PVXMLRecordable *newItem)
bool m_bargeIn
Definition: vxml.h:466
virtual void GetBeepData(PBYTEArray &, unsigned)
Definition: vxml.h:735
PSyncPoint m_waitForEvent
Definition: vxml.h:459
PFactory< PVXMLNodeHandler, PCaselessString > PVXMLNodeFactory
Definition: vxml.h:793
virtual PString GetMediaFileSuffix() const
PDirectory m_directory
Definition: vxml.h:261
Definition: vxml.h:485
PTime m_recordingStartTime
Definition: vxml.h:491
virtual PBoolean LoadGrammar(PVXMLGrammar *grammar)
virtual void OnUserInput(const char ch)
virtual void InternalStartThread()
virtual unsigned GetSampleRate() const =0
This class defines a video output device.
Definition: videoio.h:712
Definition: vxml.h:328
PBYTEArray m_data
Definition: vxml.h:623
PINDEX m_currentIndex
Definition: vxml.h:686
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
PSimpleTimer m_silenceTimer
Definition: vxml.h:770
void SetData(const PBYTEArray &data)
friend class VideoReceiverDevice
Definition: vxml.h:504
virtual PBoolean TraverseAudio(PXMLElement &element)
unsigned frameDelay
Definition: delaychan.h:240
void SetSessionTimeout()
virtual bool SetChannels(unsigned channels)=0
PVXMLChannel * GetAndLockVXMLChannel()
Definition: vxml.h:149
This class defines a video input device which is actually another video inpuit device.
Definition: videoio.h:1187
virtual PBoolean TraversedPrompt(PXMLElement &element)
bool m_abortVXML
Definition: vxml.h:458
PINDEX m_minDigits
Definition: vxml.h:220
virtual bool OnStart()
PTimeInterval m_finalSilence
Definition: vxml.h:533
bool m_delayDone
Definition: vxml.h:588
PTime m_transferStartTime
Definition: vxml.h:501
PVXMLGrammar * m_grammar
Definition: vxml.h:472
virtual PChannel * OpenMediaFile(const PFilePath &fn, bool recording)
virtual PBoolean TraverseValue(PXMLElement &element)
virtual bool OnStart()
virtual PBoolean PlayStop()
PString GetXMLError() const
Definition: vxml.h:321
virtual bool OnRepeat()
virtual PBoolean QueueFile(const PString &fn, PINDEX repeat=1, PINDEX delay=0, PBoolean autoDelete=false)
Definition: vxml.h:743
Definition: vxml.h:593
PINDEX m_repeat
Definition: vxml.h:584
PFilePath m_filePath
Definition: vxml.h:669
void SetCache(PVXMLCache &cache)
unsigned m_promptCount
Definition: vxml.h:470
virtual PBoolean TraverseScript(PXMLElement &element)
virtual void SetPause(PBoolean pause)
virtual bool OnStart()
virtual bool AdjustMediaFilename(const PFilePath &ifn, PFilePath &ofn)
Ultimate parent class for all objects in the class library.
Definition: object.h:2204
This class defines a thread synchronisation object.
Definition: syncpoint.h:63
virtual PBoolean PlayFile(const PString &fn, PINDEX repeat=1, PINDEX delay=0, PBoolean autoDelete=false)
virtual PBoolean OnFrame(PBoolean)
Definition: vxml.h:522
PVXMLSession * m_vxmlSession
Definition: vxml.h:756
virtual PBoolean PlayData(const PBYTEArray &data, PINDEX repeat=1, PINDEX delay=0)
This class describes a Universal Resource Locator.
Definition: url.h:56
void SetDirectory(const PDirectory &directory)
bool m_speakNodeData
Definition: vxml.h:465
virtual PBoolean TraversedTransfer(PXMLElement &element)
Definition: pxml.h:313
virtual void OnUserInput(const char ch)
PSimpleTimer m_recordTimer
Definition: vxml.h:532
virtual void OnStop()
virtual PBoolean Open(PVXMLChannel &chan, const PString &arg, PINDEX delay, PINDEX repeat, PBoolean autoDelete)
Definition: vxml.h:327
virtual PBoolean TraversedRecord(PXMLElement &element)
Definition: vxml.h:495
virtual PBoolean TraverseChoice(PXMLElement &element)
Definition: vxml.h:191
PURL m_url
Definition: vxml.h:609
virtual void SetRepeat(PINDEX v)
Definition: vxml.h:567
virtual PBoolean TraverseProperty(PXMLElement &element)
virtual PBoolean TraverseMenu(PXMLElement &element)
PString m_variableScope
Definition: vxml.h:476
virtual PBoolean QueueData(const PBYTEArray &data, PINDEX repeat=1, PINDEX delay=0)
bool m_paused
Definition: vxml.h:761
PString m_terminators
Definition: vxml.h:222
PURL NormaliseResourceName(const PString &src)
virtual PBoolean Load(const PString &source)