00001 #ifndef VXML_H_
00002 #define VXML_H_
00003
00004 #include <qurl.h>
00005
00006 #include "rtp.h"
00007
00008
00009 class vxmlVariable
00010 {
00011 public:
00012 vxmlVariable(QString N, QString V);
00013 vxmlVariable(QString N, short *wav, int S);
00014 virtual ~vxmlVariable() {};
00015 bool isType(QString t) { return (t == Type); };
00016 QString getName() { return Name; };
00017 QString getSValue() { return sValue; };
00018 short *getSPValue() { return spValue; };
00019 int getSPLength() { return spLength; };
00020 void delSPValue() { delete spValue; spValue=0; };
00021
00022 private:
00023 QString Name;
00024 QString Type;
00025 QString sValue;
00026 short *spValue;
00027 int spLength;
00028 };
00029
00030 class vxmlVarContainer : public QPtrList<vxmlVariable>
00031 {
00032 public:
00033 vxmlVarContainer();
00034 ~vxmlVarContainer();
00035 vxmlVariable *findFirstVariable(QString T);
00036 QString findStringVariable(QString N);
00037 short *findShortPtrVariable(QString N, int &Samples);
00038 void removeMatching(QString N);
00039
00040 private:
00041 };
00042
00043
00044 class vxmlParser
00045 {
00046
00047 public:
00048 vxmlParser();
00049 virtual ~vxmlParser();
00050 void beginVxmlSession(rtp *r, QString cName);
00051 void endVxmlSession();
00052
00053
00054 private:
00055 static void *vxmlThread(void *p);
00056 void runVxmlSession();
00057 bool killVxmlThread;
00058 bool killVxmlSession;
00059 bool killVxmlPage;
00060 QString callerName;
00061 QString vxmlUrl;
00062 QString httpMethod;
00063 QString postNamelist;
00064 void vxmlThreadWorker();
00065 bool loadVxmlPage(QString Url, QString Method, QString Namelist, QDomDocument &script);
00066 void Parse(QDomDocument &vxmlPage);
00067 void parseForm(QDomElement &formElm);
00068 bool parseField(QDomElement &field);
00069 void parseFieldType(QString Type, uint &Max, uint &Min);
00070 void parseRecord(QDomElement &record);
00071 void parseFilled(QDomElement &filled, bool &reprompt);
00072 void parseNoInput(QDomElement &noInput, bool &reprompt);
00073 void parseIfExpression(QDomElement &ifExp, bool &reprompt);
00074 bool parseIfBlock(QDomElement &ifBlock, QString Condition, bool &reprompt);
00075 void parsePrompt(QDomElement &parentElm, bool dtmfInterrupts);
00076 int parseDurationType(QString t);
00077 void PlayWav(QString wavFile);
00078 void PlayWav(short *buffer, int Samples);
00079 void SaveWav(short *buffer, int Samples);
00080 void PlayBeep(int freqHz=1000, int volume=7000, int ms=800);
00081 void PlaySilence(int ms, bool dtmfInterrupts);
00082 void PlayTTSPrompt(QString prompt, bool dtmfInterrupts);
00083 int RecordAudio(short *buffer, int Samples, bool dtmfInterrupts);
00084 void waitUntilFinished(bool dtmfInterrupts);
00085 bool evaluateExpression(QString Expression);
00086
00087 pthread_t vxmlthread;
00088 QWaitCondition *waker;
00089 QDomDocument vxmlDoc;
00090 vxmlVarContainer *vxmlVarList;
00091 QUrl lastUrl;
00092
00093 rtp *Rtp;
00094 };
00095
00096
00097
00098 #endif