From e6fa3fd7117ada53dd0d8b25acbe5080ade8f00a Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 19 Feb 2007 14:07:37 +0000 Subject: [PATCH] - fixed some more issues with py_sems. It should work with the example now. - added an example for py_sems (py_sems_ex/early_media.py). - added audio features to py_sems. git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@233 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- apps/examples/py_sems_ex/early_media.py | 110 ++++++++ apps/py_sems/PySems.cpp | 6 +- apps/py_sems/PySems.h | 5 +- apps/py_sems/py/{log.py => py_sems_log.py} | 8 +- apps/py_sems/sip/AmAudio.sip | 95 +++++++ apps/py_sems/sip/AmSipRequest.sip | 3 + apps/py_sems/sip/AmUtils.sip | 7 + apps/py_sems/sip/Makefile.gen | 11 +- apps/py_sems/sip/PySemsDialog.sip | 9 +- apps/py_sems/sip/configure.py | 3 +- apps/py_sems/sip/py_sems.sbf | 4 +- apps/py_sems/sip/py_sems.sip | 2 + apps/py_sems/sip/sipAPIpy_sems_lib.h | 28 +- .../sip/sippy_sems_libAmAudioEvent.cpp | 136 ++++++++++ apps/py_sems/sip/sippy_sems_libAmAudioEvent.h | 38 +++ .../py_sems/sip/sippy_sems_libAmAudioFile.cpp | 255 ++++++++++++++++++ apps/py_sems/sip/sippy_sems_libAmAudioFile.h | 23 ++ apps/py_sems/sip/sippy_sems_libAmEvent.cpp | 192 +++++++++++++ apps/py_sems/sip/sippy_sems_libAmEvent.h | 36 +++ .../py_sems/sip/sippy_sems_libAmSipDialog.cpp | 2 +- apps/py_sems/sip/sippy_sems_libAmSipDialog.h | 4 +- apps/py_sems/sip/sippy_sems_libAmSipReply.cpp | 2 +- apps/py_sems/sip/sippy_sems_libAmSipReply.h | 4 +- .../sip/sippy_sems_libAmSipRequest.cpp | 2 +- apps/py_sems/sip/sippy_sems_libAmSipRequest.h | 4 +- .../sip/sippy_sems_libPySemsDialog.cpp | 145 +++++++++- apps/py_sems/sip/sippy_sems_libPySemsDialog.h | 7 +- apps/py_sems/sip/sippy_sems_libcmodule.cpp | 143 +++++++++- apps/py_sems/sip/sippy_sems_libstring.cpp | 2 +- apps/py_sems/sip/sippy_sems_libstring.h | 2 +- core/AmSipDialog.cpp | 23 +- 31 files changed, 1255 insertions(+), 56 deletions(-) create mode 100644 apps/examples/py_sems_ex/early_media.py rename apps/py_sems/py/{log.py => py_sems_log.py} (79%) create mode 100644 apps/py_sems/sip/AmAudio.sip create mode 100644 apps/py_sems/sip/AmUtils.sip create mode 100644 apps/py_sems/sip/sippy_sems_libAmAudioEvent.cpp create mode 100644 apps/py_sems/sip/sippy_sems_libAmAudioEvent.h create mode 100644 apps/py_sems/sip/sippy_sems_libAmAudioFile.cpp create mode 100644 apps/py_sems/sip/sippy_sems_libAmAudioFile.h create mode 100644 apps/py_sems/sip/sippy_sems_libAmEvent.cpp create mode 100644 apps/py_sems/sip/sippy_sems_libAmEvent.h diff --git a/apps/examples/py_sems_ex/early_media.py b/apps/examples/py_sems_ex/early_media.py new file mode 100644 index 00000000..942b5e85 --- /dev/null +++ b/apps/examples/py_sems_ex/early_media.py @@ -0,0 +1,110 @@ +import base64,time,os + +from py_sems_log import * +from py_sems import * +from py_sems_lib import * + +class PySemsScript(PySemsDialog): + + def __init__(self): + + debug("***** __init__ *******") + PySemsDialog.__init__(self) + self.initial_req = None + self.ann = None + + def onInvite(self,req): + + + ann_file = self.getAnnounceFile(req) + self.ann = AmAudioFile() + + try: + self.ann.open(ann_file) + + self.initial_req = AmSipRequest(req) + debug("dlg.local_tag: %s" % self.dlg.local_tag) + + debug("***** onInvite *******") + (res,sdp_reply) = self.acceptAudio(req.body,req.hdrs) + if res < 0: + self.dlg.reply(req,500) + + debug("res = %s" % repr(res)) + debug("sdp_reply = %s" % sdp_reply) + + if self.dlg.reply(req,183,"OK","application/sdp",sdp_reply,"") <> 0: + self.setStopped() + except: + self.dlg.reply(req,500,"File not found","","","") + self.ann = None + self.setStopped() + raise + + + def onSessionStart(self,req): + + debug("***** onSessionStart *******") + PySemsDialog.onSessionStart(self,req) + + self.localreq = AmSipRequest(req) + self.setOutput(self.ann) + + + def onCancel(self): + + debug("***** onCancel *******") + + self.dlg.reply(self.initial_req,487,"Call terminated","","","") + self.setStopped() + + + def getAnnounceFile(self,req): + + announce_file = config["announce_path"] + req.domain + "/" + get_header_param(req.r_uri, "play") + ".wav" + + debug("trying '%s'",announce_file) + if os.path.exists(announce_file): + return announce_file + + announce_file = config["announce_path"] + req.user + ".wav" + debug("trying '%s'",announce_file) + if os.path.exists(announce_file): + return announce_file + + announce_file = config["announce_path"] + config["announce_file"] + debug("using default '%s'",announce_file) + return announce_file + + + def process(self,ev): + + debug("*********** PySemsScript.process **************") + if isinstance(ev,AmAudioEvent): + if ev.event_id == AmAudioEvent.cleared: + + debug("AmAudioEvent.cleared") + + code = getHeader(self.localreq.hdrs,"P-Final-Reply-Code") + reason = getHeader(self.localreq.hdrs,"P-Final-Reply-Reason") + + if reason == "": + reason = "OK" + + code_i = 400 + try: + code_i = int(code) + if (code_i < 300) or (code_i>699): + debug("Invalid reply code: %d",code_i) + except: + debug("Invalid reply code: %s",code) + + debug("Replying %d %s" % (code_i, reason)) + self.dlg.reply(self.localreq, code_i, reason, "", "", "") + self.setStopped() + return + + PySemsDialog.process(self,ev); + return + + diff --git a/apps/py_sems/PySems.cpp b/apps/py_sems/PySems.cpp index 92794cda..8811e2bc 100644 --- a/apps/py_sems/PySems.cpp +++ b/apps/py_sems/PySems.cpp @@ -46,7 +46,7 @@ using std::set; EXPORT_SESSION_FACTORY(PySemsFactory,MOD_NAME); -PyMODINIT_FUNC initpy_sems(); +PyMODINIT_FUNC initpy_sems_lib(); struct PythonGIL { @@ -182,8 +182,8 @@ void PySemsFactory::import_py_sems_builtins() // add log level for the log module PyModule_AddIntConstant(py_sems_module, "SEMS_LOG_LEVEL",log_level); - import_module("log"); - initpy_sems(); + import_module("py_sems_log"); + initpy_sems_lib(); } void PySemsFactory::import_module(const char* modname) diff --git a/apps/py_sems/PySems.h b/apps/py_sems/PySems.h index 835e176e..f58936fd 100644 --- a/apps/py_sems/PySems.h +++ b/apps/py_sems/PySems.h @@ -103,8 +103,6 @@ class PySemsDialog : public AmB2BCallerSession PyObject *py_dlg; bool callPyEventHandler(char* name, char* fmt, ...); - - void process(AmEvent* event); public: AmDynInvoke* user_timer; @@ -123,6 +121,9 @@ public: /* void onOtherBye(const AmSipRequest& req); */ /* void onOtherReply(const AmSipReply& r); */ + + void process(AmEvent* event); + }; #endif diff --git a/apps/py_sems/py/log.py b/apps/py_sems/py/py_sems_log.py similarity index 79% rename from apps/py_sems/py/log.py rename to apps/py_sems/py/py_sems_log.py index 0d3c793d..cd648ed7 100644 --- a/apps/py_sems/py/log.py +++ b/apps/py_sems/py/py_sems_log.py @@ -14,7 +14,7 @@ def log(level, msg, args): else: tmp_msg = msg - ivr.log(level,"Ivr-Python: " + tmp_msg + "\n") + py_sems.log(level,"PySems: " + tmp_msg + "\n") def error(msg, args=None): @@ -47,13 +47,13 @@ def stacktrace(tb): def log_excepthook(exception, value, tb): - error('********** Ivr-Python exception report ****************') + error('********** PySems exception report ****************') error(str(exception) + ' raised: ' + str(value)) stacktrace(tb) - error('********** end of Ivr-Python exception report *********') + error('********** end of PySems exception report *********') # init code sys.excepthook = log_excepthook -debug("Python-Ivr logging started") +debug("PySems logging started") diff --git a/apps/py_sems/sip/AmAudio.sip b/apps/py_sems/sip/AmAudio.sip new file mode 100644 index 00000000..eb4f6e62 --- /dev/null +++ b/apps/py_sems/sip/AmAudio.sip @@ -0,0 +1,95 @@ + +struct AmEvent +{ +%TypeHeaderCode +#include "../../../core/AmEvent.h" +%End + + int event_id; + bool processed; + + AmEvent(int /*event_id*/); + virtual ~AmEvent(); + +%ConvertToSubClassCode + if(dynamic_cast(sipCpp)){ + sipClass = sipClass_AmAudioEvent; + } + else { + sipClass = sipClass_AmEvent; + } +%End + +}; + +class AmAudioEvent: AmEvent +{ + +%TypeHeaderCode +#include "../../../core/AmAudio.h" +%End + +public: + enum EventType { + + noAudio, // Audio class has nothing to play and/or record anymore + + // Audio input & output have been cleared: + // !!! sent only from AmSession !!! + cleared + }; + + AmAudioEvent(int /*id*/); +}; + + + +class AmAudioFile +{ + +%TypeHeaderCode +#include "../../../core/AmAudio.h" +%End + +public: + AmAudioFile(); + + + enum OpenMode { + Read=1, + Write=2 + }; + + bool getLoop(); +%MethodCode + sipRes = sipCpp->loop.get(); +%End + + void setLoop(bool); +%MethodCode + sipCpp->loop.set(a0); +%End + + + int open(const string& /*filename*/, + OpenMode /*mode*/ = AmAudioFile::Read, + bool /*is_tmp*/ = false); + + void rewind(); + void close(); + int getDataSize(); + + +private: + AmAudioFile(const AmAudioFile&); + +}; + + + + + + + + + diff --git a/apps/py_sems/sip/AmSipRequest.sip b/apps/py_sems/sip/AmSipRequest.sip index baa01004..2aee6012 100644 --- a/apps/py_sems/sip/AmSipRequest.sip +++ b/apps/py_sems/sip/AmSipRequest.sip @@ -31,6 +31,9 @@ public: string next_hop; // next_hop for t_uac_dlg string key; // transaction key to be used in t_reply + + }; string getHeader(const string& /* hdrs */,const string& /* hdr_name */); +string getHeader(const string& /*hdrs*/, const string& /*hdr_name*/, const string& /*compact_hdr_name*/); diff --git a/apps/py_sems/sip/AmUtils.sip b/apps/py_sems/sip/AmUtils.sip new file mode 100644 index 00000000..1b31cc8e --- /dev/null +++ b/apps/py_sems/sip/AmUtils.sip @@ -0,0 +1,7 @@ + +%ModuleHeaderCode +#include "AmUtils.h" +%End + +// get a header parameter value +string get_header_param(const string& /*hdr_string*/, const string& /*param_name*/); diff --git a/apps/py_sems/sip/Makefile.gen b/apps/py_sems/sip/Makefile.gen index 2b7420da..4605a7cf 100644 --- a/apps/py_sems/sip/Makefile.gen +++ b/apps/py_sems/sip/Makefile.gen @@ -1,14 +1,14 @@ TARGET = py_sems_lib.so -OFILES = sippy_sems_libcmodule.o sippy_sems_libPySemsDialog.o sippy_sems_libAmSipDialog.o sippy_sems_libAmSipReply.o sippy_sems_libAmSipRequest.o sippy_sems_libstring.o -HFILES = sipAPIpy_sems_lib.h sippy_sems_libPySemsDialog.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h +OFILES = sippy_sems_libcmodule.o sippy_sems_libPySemsDialog.o sippy_sems_libAmAudioFile.o sippy_sems_libAmAudioEvent.o sippy_sems_libAmEvent.o sippy_sems_libAmSipDialog.o sippy_sems_libAmSipReply.o sippy_sems_libAmSipRequest.o sippy_sems_libstring.o +HFILES = sipAPIpy_sems_lib.h sippy_sems_libPySemsDialog.h sippy_sems_libAmAudioFile.h sippy_sems_libAmAudioEvent.h sippy_sems_libAmEvent.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h CC = gcc CXX = g++ LINK = g++ CPPFLAGS = -I. -I$(COREPATH) -I/usr/include/python2.3 CFLAGS = -pipe -fPIC -O2 -w -CXXFLAGS = -Wall -Wno-reorder -pipe -fPIC -O2 -w -LFLAGS = -shared +CXXFLAGS = -Wall -Wno-reorder -g -pipe -fPIC -O2 -w +LFLAGS = -g -shared LIBS = .SUFFIXES: .c .o .cpp .cc .cxx .C @@ -41,6 +41,9 @@ clean: -rm -f $(TARGET) -rm -f sippy_sems_libcmodule.o -rm -f sippy_sems_libPySemsDialog.o + -rm -f sippy_sems_libAmAudioFile.o + -rm -f sippy_sems_libAmAudioEvent.o + -rm -f sippy_sems_libAmEvent.o -rm -f sippy_sems_libAmSipDialog.o -rm -f sippy_sems_libAmSipReply.o -rm -f sippy_sems_libAmSipRequest.o diff --git a/apps/py_sems/sip/PySemsDialog.sip b/apps/py_sems/sip/PySemsDialog.sip index ef103839..3c593c9e 100644 --- a/apps/py_sems/sip/PySemsDialog.sip +++ b/apps/py_sems/sip/PySemsDialog.sip @@ -26,8 +26,13 @@ public: virtual void onBye(const AmSipRequest& /* req */); virtual void onDtmf(int /* event */, int /* duration_msec */); -// virtual void onOtherBye(const AmSipRequest& /* req */); -// virtual void onOtherReply(const AmSipReply& /* r */); + + void setInput(AmAudioFile* /In/ /*in*/); + void setOutput(AmAudioFile* /In/ /*out*/); + void setInOut(AmAudioFile* /In/ /*in*/, AmAudioFile* /*out*/); + + virtual void process(AmEvent* /*In,Out*/); + private: PySemsDialog(const PySemsDialog&); diff --git a/apps/py_sems/sip/configure.py b/apps/py_sems/sip/configure.py index 8ea45b67..b69c4434 100644 --- a/apps/py_sems/sip/configure.py +++ b/apps/py_sems/sip/configure.py @@ -14,8 +14,9 @@ os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "py_sems.sip"]) # Create the Makefile. makefile = sipconfig.SIPModuleMakefile(config, build_file, makefile="Makefile.gen") -makefile.extra_cxxflags = ["-Wall -Wno-reorder"] +makefile.extra_cxxflags = ["-Wall -Wno-reorder -g"] makefile.extra_include_dirs = ["$(COREPATH)"] +makefile.extra_lflags = ["-g"] makefile._warnings = 0 # Generate the Makefile itself. diff --git a/apps/py_sems/sip/py_sems.sbf b/apps/py_sems/sip/py_sems.sbf index 808a95cd..c2ec31d3 100644 --- a/apps/py_sems/sip/py_sems.sbf +++ b/apps/py_sems/sip/py_sems.sbf @@ -1,3 +1,3 @@ target = py_sems_lib -sources = sippy_sems_libcmodule.cpp sippy_sems_libPySemsDialog.cpp sippy_sems_libAmSipDialog.cpp sippy_sems_libAmSipReply.cpp sippy_sems_libAmSipRequest.cpp sippy_sems_libstring.cpp -headers = sipAPIpy_sems_lib.h sippy_sems_libPySemsDialog.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h +sources = sippy_sems_libcmodule.cpp sippy_sems_libPySemsDialog.cpp sippy_sems_libAmAudioFile.cpp sippy_sems_libAmAudioEvent.cpp sippy_sems_libAmEvent.cpp sippy_sems_libAmSipDialog.cpp sippy_sems_libAmSipReply.cpp sippy_sems_libAmSipRequest.cpp sippy_sems_libstring.cpp +headers = sipAPIpy_sems_lib.h sippy_sems_libPySemsDialog.h sippy_sems_libAmAudioFile.h sippy_sems_libAmAudioEvent.h sippy_sems_libAmEvent.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h diff --git a/apps/py_sems/sip/py_sems.sip b/apps/py_sems/sip/py_sems.sip index 16b55499..19014320 100644 --- a/apps/py_sems/sip/py_sems.sip +++ b/apps/py_sems/sip/py_sems.sip @@ -4,4 +4,6 @@ %Include AmSipRequest.sip %Include AmSipReply.sip %Include AmSipDialog.sip +%Include AmAudio.sip %Include PySemsDialog.sip +%Include AmUtils.sip diff --git a/apps/py_sems/sip/sipAPIpy_sems_lib.h b/apps/py_sems/sip/sipAPIpy_sems_lib.h index cd8f5662..fcd41853 100644 --- a/apps/py_sems/sip/sipAPIpy_sems_lib.h +++ b/apps/py_sems/sip/sipAPIpy_sems_lib.h @@ -1,7 +1,7 @@ /* * Internal module API header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libAPI_H @@ -9,6 +9,9 @@ #include +#line 3 "AmUtils.sip" +#include "AmUtils.h" +#line 15 "sipAPIpy_sems_lib.h" /* @@ -17,6 +20,9 @@ */ #define sipName_PySemsDialog sipNm_py_sems_lib_PySemsDialog +#define sipName_AmAudioFile sipNm_py_sems_lib_AmAudioFile +#define sipName_AmAudioEvent sipNm_py_sems_lib_AmAudioEvent +#define sipName_AmEvent sipNm_py_sems_lib_AmEvent #define sipName_AmSipDialog sipNm_py_sems_lib_AmSipDialog #define sipName_AmSipReply sipNm_py_sems_lib_AmSipReply #define sipName_AmSipRequest sipNm_py_sems_lib_AmSipRequest @@ -73,6 +79,11 @@ /* The strings used by this module. */ +extern char sipNm_py_sems_lib_get_header_param[]; +extern char sipNm_py_sems_lib_process[]; +extern char sipNm_py_sems_lib_setInOut[]; +extern char sipNm_py_sems_lib_setOutput[]; +extern char sipNm_py_sems_lib_setInput[]; extern char sipNm_py_sems_lib_onDtmf[]; extern char sipNm_py_sems_lib_onBye[]; extern char sipNm_py_sems_lib_onCancel[]; @@ -82,6 +93,21 @@ extern char sipNm_py_sems_lib_setStopped[]; extern char sipNm_py_sems_lib_acceptAudio[]; extern char sipNm_py_sems_lib_dlg[]; extern char sipNm_py_sems_lib_PySemsDialog[]; +extern char sipNm_py_sems_lib_getDataSize[]; +extern char sipNm_py_sems_lib_close[]; +extern char sipNm_py_sems_lib_rewind[]; +extern char sipNm_py_sems_lib_open[]; +extern char sipNm_py_sems_lib_setLoop[]; +extern char sipNm_py_sems_lib_getLoop[]; +extern char sipNm_py_sems_lib_Write[]; +extern char sipNm_py_sems_lib_Read[]; +extern char sipNm_py_sems_lib_AmAudioFile[]; +extern char sipNm_py_sems_lib_cleared[]; +extern char sipNm_py_sems_lib_noAudio[]; +extern char sipNm_py_sems_lib_AmAudioEvent[]; +extern char sipNm_py_sems_lib_processed[]; +extern char sipNm_py_sems_lib_event_id[]; +extern char sipNm_py_sems_lib_AmEvent[]; extern char sipNm_py_sems_lib_reinvite[]; extern char sipNm_py_sems_lib_update[]; extern char sipNm_py_sems_lib_cancel[]; diff --git a/apps/py_sems/sip/sippy_sems_libAmAudioEvent.cpp b/apps/py_sems/sip/sippy_sems_libAmAudioEvent.cpp new file mode 100644 index 00000000..1cf4e1df --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmAudioEvent.cpp @@ -0,0 +1,136 @@ +/* + * Interface wrapper code. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#include "sipAPIpy_sems_lib.h" +#include "sippy_sems_libAmAudioEvent.h" + +sipAmAudioEvent::sipAmAudioEvent(int a0): AmAudioEvent(a0), sipPySelf(0) +{ + sipCommonCtor(NULL,0); +} + +sipAmAudioEvent::sipAmAudioEvent(const AmAudioEvent& a0): AmAudioEvent(a0), sipPySelf(0) +{ + sipCommonCtor(NULL,0); +} + +sipAmAudioEvent::~sipAmAudioEvent() +{ + sipCommonDtor(sipPySelf); +} + + +/* Cast a pointer to a type somewhere in its superclass hierarchy. */ +static void *cast_AmAudioEvent(void *ptr,sipWrapperType *targetClass) +{ + void *res; + + if (targetClass == sipClass_AmAudioEvent) + return ptr; + + if ((res = sipCast_AmEvent((AmEvent *)(AmAudioEvent *)ptr,targetClass)) != NULL) + return res; + + return NULL; +} + + +static void dealloc_AmAudioEvent(sipWrapper *sipSelf) +{ + if (!sipIsSimple(sipSelf)) + reinterpret_cast(sipSelf -> u.cppPtr) -> sipPySelf = NULL; + + if (sipIsPyOwned(sipSelf)) + { + if (!sipIsSimple(sipSelf)) + delete reinterpret_cast(sipSelf -> u.cppPtr); + else + delete reinterpret_cast(sipSelf -> u.cppPtr); + } +} + + +static void *init_AmAudioEvent(sipWrapper *sipSelf,PyObject *sipArgs,int *) +{ + int sipArgsParsed = 0; + sipAmAudioEvent *sipCpp = 0; + + if (!sipCpp) + { + int a0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"i",&a0)) + { + sipCpp = new sipAmAudioEvent(a0); + } + } + + if (!sipCpp) + { + const AmAudioEvent * a0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"J1",sipClass_AmAudioEvent,&a0)) + { + sipCpp = new sipAmAudioEvent(*a0); + } + } + + if (!sipCpp) + { + sipNoCtor(sipArgsParsed,sipNm_py_sems_lib_AmAudioEvent); + return 0; + } + + sipCpp -> sipPySelf = sipSelf; + + return sipCpp; +} + + +static void *forceConvertTo_AmAudioEvent(PyObject *valobj,int *iserrp) +{ + if (*iserrp || valobj == NULL) + return NULL; + + if (valobj == Py_None || sipIsSubClassInstance(valobj,sipClass_AmAudioEvent)) + return sipConvertToCpp(valobj,sipClass_AmAudioEvent,iserrp); + + sipBadClass(sipNm_py_sems_lib_AmAudioEvent); + + *iserrp = 1; + + return NULL; +} + + +/* Define this type's super-types. */ +static sipSuperClassDef supers_AmAudioEvent[] = {{2, 255, 1}}; + +static sipEnumValueInstanceDef enums_AmAudioEvent[] = { + {sipNm_py_sems_lib_cleared, AmAudioEvent::cleared}, + {sipNm_py_sems_lib_noAudio, AmAudioEvent::noAudio} +}; + + +/* The main type data structure. */ +sipTypeDef sipType_AmAudioEvent = { + 0, + "py_sems_lib.AmAudioEvent", + -1, + supers_AmAudioEvent, + 0, + 0, 0, + 2, enums_AmAudioEvent, + 0, + init_AmAudioEvent, + dealloc_AmAudioEvent, + cast_AmAudioEvent, + forceConvertTo_AmAudioEvent, + 0, + 0, + 0, + {0, 0, 0, 0, 0, 0} +}; diff --git a/apps/py_sems/sip/sippy_sems_libAmAudioEvent.h b/apps/py_sems/sip/sippy_sems_libAmAudioEvent.h new file mode 100644 index 00000000..ebfa5756 --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmAudioEvent.h @@ -0,0 +1,38 @@ +/* + * Interface header file. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#ifndef _py_sems_libAmAudioEvent_h +#define _py_sems_libAmAudioEvent_h + +#line 29 "AmAudio.sip" +#include "../../../core/AmAudio.h" +#line 13 "sippy_sems_libAmAudioEvent.h" + +#include "sippy_sems_libAmEvent.h" + + +#define sipClass_AmAudioEvent sipModuleAPI_py_sems_lib.em_types[3] +#define sipCast_AmAudioEvent sipType_AmAudioEvent.td_cast +#define sipForceConvertTo_AmAudioEvent sipType_AmAudioEvent.td_fcto + +extern sipTypeDef sipType_AmAudioEvent; + + +class sipAmAudioEvent : public AmAudioEvent +{ +public: + sipAmAudioEvent(int); + sipAmAudioEvent(const AmAudioEvent&); + ~sipAmAudioEvent(); + + sipWrapper *sipPySelf; + +private: + sipAmAudioEvent(const sipAmAudioEvent &); + sipAmAudioEvent &operator = (const sipAmAudioEvent &); +}; + +#endif diff --git a/apps/py_sems/sip/sippy_sems_libAmAudioFile.cpp b/apps/py_sems/sip/sippy_sems_libAmAudioFile.cpp new file mode 100644 index 00000000..90bd8c34 --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmAudioFile.cpp @@ -0,0 +1,255 @@ +/* + * Interface wrapper code. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#include "sipAPIpy_sems_lib.h" +#include "sippy_sems_libAmAudioFile.h" + + +static PyObject *meth_AmAudioFile_getLoop(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"m",sipSelf,sipClass_AmAudioFile,&sipCpp)) + { + bool sipRes = 0; + +#line 65 "AmAudio.sip" + sipRes = sipCpp->loop.get(); +#line 25 "sippy_sems_libAmAudioFile.cpp" + + return PyBool_FromLong(sipRes); + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_getLoop); + + return NULL; +} + + +static PyObject *meth_AmAudioFile_setLoop(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + bool a0; + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mb",sipSelf,sipClass_AmAudioFile,&sipCpp,&a0)) + { +#line 70 "AmAudio.sip" + sipCpp->loop.set(a0); +#line 50 "sippy_sems_libAmAudioFile.cpp" + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_setLoop); + + return NULL; +} + + +static PyObject *meth_AmAudioFile_open(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + const string * a0; + int a0IsTemp = 0; + AmAudioFile::OpenMode a1 = AmAudioFile::Read; + bool a2 = 0; + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mM1|eb",sipSelf,sipClass_AmAudioFile,&sipCpp,sipConvertTo_string,&a0,&a0IsTemp,&a1,&a2)) + { + int sipRes; + + sipRes = sipCpp -> AmAudioFile::open(*a0,a1,a2); + + if (a0IsTemp) + delete const_cast(a0); + + return PyInt_FromLong((long)sipRes); + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_open); + + return NULL; +} + + +static PyObject *meth_AmAudioFile_rewind(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"m",sipSelf,sipClass_AmAudioFile,&sipCpp)) + { + sipCpp -> AmAudioFile::rewind(); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_rewind); + + return NULL; +} + + +static PyObject *meth_AmAudioFile_close(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"m",sipSelf,sipClass_AmAudioFile,&sipCpp)) + { + sipCpp -> AmAudioFile::close(); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_close); + + return NULL; +} + + +static PyObject *meth_AmAudioFile_getDataSize(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"m",sipSelf,sipClass_AmAudioFile,&sipCpp)) + { + int sipRes; + + sipRes = sipCpp -> AmAudioFile::getDataSize(); + + return PyInt_FromLong((long)sipRes); + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile,sipNm_py_sems_lib_getDataSize); + + return NULL; +} + + +/* Cast a pointer to a type somewhere in its superclass hierarchy. */ +static void *cast_AmAudioFile(void *ptr,sipWrapperType *targetClass) +{ + if (targetClass == sipClass_AmAudioFile) + return ptr; + + return NULL; +} + + +static void dealloc_AmAudioFile(sipWrapper *sipSelf) +{ + if (sipIsPyOwned(sipSelf)) + { + delete reinterpret_cast(sipSelf -> u.cppPtr); + } +} + + +static void *init_AmAudioFile(sipWrapper *,PyObject *sipArgs,int *) +{ + int sipArgsParsed = 0; + AmAudioFile *sipCpp = 0; + + if (!sipCpp) + { + if (sipParseArgs(&sipArgsParsed,sipArgs,"")) + { + sipCpp = new AmAudioFile(); + } + } + + if (!sipCpp) + { + sipNoCtor(sipArgsParsed,sipNm_py_sems_lib_AmAudioFile); + return 0; + } + + return sipCpp; +} + + +static void *forceConvertTo_AmAudioFile(PyObject *valobj,int *iserrp) +{ + if (*iserrp || valobj == NULL) + return NULL; + + if (valobj == Py_None || sipIsSubClassInstance(valobj,sipClass_AmAudioFile)) + return sipConvertToCpp(valobj,sipClass_AmAudioFile,iserrp); + + sipBadClass(sipNm_py_sems_lib_AmAudioFile); + + *iserrp = 1; + + return NULL; +} + + +static PyMethodDef methods_AmAudioFile[] = { + {sipNm_py_sems_lib_close, meth_AmAudioFile_close, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_getDataSize, meth_AmAudioFile_getDataSize, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_getLoop, meth_AmAudioFile_getLoop, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_open, meth_AmAudioFile_open, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_rewind, meth_AmAudioFile_rewind, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_setLoop, meth_AmAudioFile_setLoop, METH_VARARGS, NULL} +}; + +static sipEnumValueInstanceDef enums_AmAudioFile[] = { + {sipNm_py_sems_lib_Read, AmAudioFile::Read}, + {sipNm_py_sems_lib_Write, AmAudioFile::Write} +}; + + +/* The main type data structure. */ +sipTypeDef sipType_AmAudioFile = { + 0, + "py_sems_lib.AmAudioFile", + -1, + 0, + 0, + 6, methods_AmAudioFile, + 2, enums_AmAudioFile, + 0, + init_AmAudioFile, + dealloc_AmAudioFile, + cast_AmAudioFile, + forceConvertTo_AmAudioFile, + 0, + 0, + 0, + {0, 0, 0, 0, 0, 0} +}; diff --git a/apps/py_sems/sip/sippy_sems_libAmAudioFile.h b/apps/py_sems/sip/sippy_sems_libAmAudioFile.h new file mode 100644 index 00000000..5665fc6a --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmAudioFile.h @@ -0,0 +1,23 @@ +/* + * Interface header file. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#ifndef _py_sems_libAmAudioFile_h +#define _py_sems_libAmAudioFile_h + +#line 51 "AmAudio.sip" +#include "../../../core/AmAudio.h" +#line 13 "sippy_sems_libAmAudioFile.h" + +#include "sippy_sems_libstring.h" + + +#define sipClass_AmAudioFile sipModuleAPI_py_sems_lib.em_types[1] +#define sipCast_AmAudioFile sipType_AmAudioFile.td_cast +#define sipForceConvertTo_AmAudioFile sipType_AmAudioFile.td_fcto + +extern sipTypeDef sipType_AmAudioFile; + +#endif diff --git a/apps/py_sems/sip/sippy_sems_libAmEvent.cpp b/apps/py_sems/sip/sippy_sems_libAmEvent.cpp new file mode 100644 index 00000000..a0b9aacc --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmEvent.cpp @@ -0,0 +1,192 @@ +/* + * Interface wrapper code. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#include "sipAPIpy_sems_lib.h" +#include "sippy_sems_libAmEvent.h" + +sipAmEvent::sipAmEvent(int a0): AmEvent(a0), sipPySelf(0) +{ + sipCommonCtor(NULL,0); +} + +sipAmEvent::sipAmEvent(const AmEvent& a0): AmEvent(a0), sipPySelf(0) +{ + sipCommonCtor(NULL,0); +} + +sipAmEvent::~sipAmEvent() +{ + sipCommonDtor(sipPySelf); +} + + +/* Cast a pointer to a type somewhere in its superclass hierarchy. */ +static void *cast_AmEvent(void *ptr,sipWrapperType *targetClass) +{ + if (targetClass == sipClass_AmEvent) + return ptr; + + return NULL; +} + + +static void dealloc_AmEvent(sipWrapper *sipSelf) +{ + if (!sipIsSimple(sipSelf)) + reinterpret_cast(sipSelf -> u.cppPtr) -> sipPySelf = NULL; + + if (sipIsPyOwned(sipSelf)) + { + if (!sipIsSimple(sipSelf)) + delete reinterpret_cast(sipSelf -> u.cppPtr); + else + delete reinterpret_cast(sipSelf -> u.cppPtr); + } +} + + +static void *init_AmEvent(sipWrapper *sipSelf,PyObject *sipArgs,int *) +{ + int sipArgsParsed = 0; + sipAmEvent *sipCpp = 0; + + if (!sipCpp) + { + int a0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"i",&a0)) + { + sipCpp = new sipAmEvent(a0); + } + } + + if (!sipCpp) + { + const AmEvent * a0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"J1",sipClass_AmEvent,&a0)) + { + sipCpp = new sipAmEvent(*a0); + } + } + + if (!sipCpp) + { + sipNoCtor(sipArgsParsed,sipNm_py_sems_lib_AmEvent); + return 0; + } + + sipCpp -> sipPySelf = sipSelf; + + return sipCpp; +} + + +static PyObject *var_AmEvent_processed(PyObject *sipSelf,PyObject *valobj) +{ + bool val; + AmEvent *sipCpp = reinterpret_cast(sipGetCppPtr((sipWrapper *)sipSelf,sipClass_AmEvent)); + + if (!sipCpp) + return NULL; + + if (valobj == NULL) + { + val = sipCpp -> processed; + + valobj = PyBool_FromLong(val); + + return valobj; + } + + val = (bool)PyInt_AsLong(valobj); + + if (PyErr_Occurred() != NULL) + { + sipBadSetType(sipNm_py_sems_lib_AmEvent,sipNm_py_sems_lib_processed); + return NULL; + } + + sipCpp -> processed = val; + + Py_INCREF(Py_None); + return Py_None; +} + + +static PyObject *var_AmEvent_event_id(PyObject *sipSelf,PyObject *valobj) +{ + int val; + AmEvent *sipCpp = reinterpret_cast(sipGetCppPtr((sipWrapper *)sipSelf,sipClass_AmEvent)); + + if (!sipCpp) + return NULL; + + if (valobj == NULL) + { + val = sipCpp -> event_id; + + valobj = PyInt_FromLong((long)val); + + return valobj; + } + + val = (int)PyInt_AsLong(valobj); + + if (PyErr_Occurred() != NULL) + { + sipBadSetType(sipNm_py_sems_lib_AmEvent,sipNm_py_sems_lib_event_id); + return NULL; + } + + sipCpp -> event_id = val; + + Py_INCREF(Py_None); + return Py_None; +} + +PyMethodDef variables_AmEvent[] = { + {sipNm_py_sems_lib_processed, var_AmEvent_processed, 0, NULL}, + {sipNm_py_sems_lib_event_id, var_AmEvent_event_id, 0, NULL}, + {0, 0, 0, 0} +}; + + +static void *forceConvertTo_AmEvent(PyObject *valobj,int *iserrp) +{ + if (*iserrp || valobj == NULL) + return NULL; + + if (valobj == Py_None || sipIsSubClassInstance(valobj,sipClass_AmEvent)) + return sipConvertToCpp(valobj,sipClass_AmEvent,iserrp); + + sipBadClass(sipNm_py_sems_lib_AmEvent); + + *iserrp = 1; + + return NULL; +} + + +/* The main type data structure. */ +sipTypeDef sipType_AmEvent = { + 0, + "py_sems_lib.AmEvent", + -1, + 0, + 0, + 0, 0, + 0, 0, + variables_AmEvent, + init_AmEvent, + dealloc_AmEvent, + cast_AmEvent, + forceConvertTo_AmEvent, + 0, + 0, + 0, + {0, 0, 0, 0, 0, 0} +}; diff --git a/apps/py_sems/sip/sippy_sems_libAmEvent.h b/apps/py_sems/sip/sippy_sems_libAmEvent.h new file mode 100644 index 00000000..c24c7e90 --- /dev/null +++ b/apps/py_sems/sip/sippy_sems_libAmEvent.h @@ -0,0 +1,36 @@ +/* + * Interface header file. + * + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 + */ + +#ifndef _py_sems_libAmEvent_h +#define _py_sems_libAmEvent_h + +#line 5 "AmAudio.sip" +#include "../../../core/AmEvent.h" +#line 13 "sippy_sems_libAmEvent.h" + + +#define sipClass_AmEvent sipModuleAPI_py_sems_lib.em_types[2] +#define sipCast_AmEvent sipType_AmEvent.td_cast +#define sipForceConvertTo_AmEvent sipType_AmEvent.td_fcto + +extern sipTypeDef sipType_AmEvent; + + +class sipAmEvent : public AmEvent +{ +public: + sipAmEvent(int); + sipAmEvent(const AmEvent&); + ~sipAmEvent(); + + sipWrapper *sipPySelf; + +private: + sipAmEvent(const sipAmEvent &); + sipAmEvent &operator = (const sipAmEvent &); +}; + +#endif diff --git a/apps/py_sems/sip/sippy_sems_libAmSipDialog.cpp b/apps/py_sems/sip/sippy_sems_libAmSipDialog.cpp index a8ca88fa..a612b0ff 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipDialog.cpp +++ b/apps/py_sems/sip/sippy_sems_libAmSipDialog.cpp @@ -1,7 +1,7 @@ /* * Interface wrapper code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" diff --git a/apps/py_sems/sip/sippy_sems_libAmSipDialog.h b/apps/py_sems/sip/sippy_sems_libAmSipDialog.h index cf3d41e7..0acfc738 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipDialog.h +++ b/apps/py_sems/sip/sippy_sems_libAmSipDialog.h @@ -1,7 +1,7 @@ /* * Interface header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libAmSipDialog_h @@ -16,7 +16,7 @@ #include "sippy_sems_libAmSipReply.h" -#define sipClass_AmSipDialog sipModuleAPI_py_sems_lib.em_types[1] +#define sipClass_AmSipDialog sipModuleAPI_py_sems_lib.em_types[4] #define sipCast_AmSipDialog sipType_AmSipDialog.td_cast #define sipForceConvertTo_AmSipDialog sipType_AmSipDialog.td_fcto diff --git a/apps/py_sems/sip/sippy_sems_libAmSipReply.cpp b/apps/py_sems/sip/sippy_sems_libAmSipReply.cpp index 60ed8d22..4f7f6c60 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipReply.cpp +++ b/apps/py_sems/sip/sippy_sems_libAmSipReply.cpp @@ -1,7 +1,7 @@ /* * Interface wrapper code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" diff --git a/apps/py_sems/sip/sippy_sems_libAmSipReply.h b/apps/py_sems/sip/sippy_sems_libAmSipReply.h index 990bc25a..dc541eb9 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipReply.h +++ b/apps/py_sems/sip/sippy_sems_libAmSipReply.h @@ -1,7 +1,7 @@ /* * Interface header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libAmSipReply_h @@ -14,7 +14,7 @@ #include "sippy_sems_libstring.h" -#define sipClass_AmSipReply sipModuleAPI_py_sems_lib.em_types[2] +#define sipClass_AmSipReply sipModuleAPI_py_sems_lib.em_types[5] #define sipCast_AmSipReply sipType_AmSipReply.td_cast #define sipForceConvertTo_AmSipReply sipType_AmSipReply.td_fcto diff --git a/apps/py_sems/sip/sippy_sems_libAmSipRequest.cpp b/apps/py_sems/sip/sippy_sems_libAmSipRequest.cpp index 970511dc..a23cf93c 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipRequest.cpp +++ b/apps/py_sems/sip/sippy_sems_libAmSipRequest.cpp @@ -1,7 +1,7 @@ /* * Interface wrapper code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" diff --git a/apps/py_sems/sip/sippy_sems_libAmSipRequest.h b/apps/py_sems/sip/sippy_sems_libAmSipRequest.h index ad85e0b9..f99cf56e 100644 --- a/apps/py_sems/sip/sippy_sems_libAmSipRequest.h +++ b/apps/py_sems/sip/sippy_sems_libAmSipRequest.h @@ -1,7 +1,7 @@ /* * Interface header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libAmSipRequest_h @@ -14,7 +14,7 @@ #include "sippy_sems_libstring.h" -#define sipClass_AmSipRequest sipModuleAPI_py_sems_lib.em_types[3] +#define sipClass_AmSipRequest sipModuleAPI_py_sems_lib.em_types[6] #define sipCast_AmSipRequest sipType_AmSipRequest.td_cast #define sipForceConvertTo_AmSipRequest sipType_AmSipRequest.td_fcto diff --git a/apps/py_sems/sip/sippy_sems_libPySemsDialog.cpp b/apps/py_sems/sip/sippy_sems_libPySemsDialog.cpp index d223d33b..e706fd96 100644 --- a/apps/py_sems/sip/sippy_sems_libPySemsDialog.cpp +++ b/apps/py_sems/sip/sippy_sems_libPySemsDialog.cpp @@ -1,7 +1,7 @@ /* * Interface wrapper code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" @@ -9,7 +9,7 @@ sipPySemsDialog::sipPySemsDialog(): PySemsDialog(), sipPySelf(0) { - sipCommonCtor(sipPyMethods,5); + sipCommonCtor(sipPyMethods,6); } sipPySemsDialog::~sipPySemsDialog() @@ -19,7 +19,7 @@ sipPySemsDialog::~sipPySemsDialog() void sipPySemsDialog::onInvite(const AmSipRequest& a0) { - extern void sipVH_py_sems_lib_1(sip_gilstate_t,PyObject *,const AmSipRequest&); + extern void sipVH_py_sems_lib_2(sip_gilstate_t,PyObject *,const AmSipRequest&); sip_gilstate_t sipGILState; PyObject *meth; @@ -32,12 +32,12 @@ void sipPySemsDialog::onInvite(const AmSipRequest& a0) return; } - sipVH_py_sems_lib_1(sipGILState,meth,a0); + sipVH_py_sems_lib_2(sipGILState,meth,a0); } void sipPySemsDialog::onSessionStart(const AmSipRequest& a0) { - extern void sipVH_py_sems_lib_1(sip_gilstate_t,PyObject *,const AmSipRequest&); + extern void sipVH_py_sems_lib_2(sip_gilstate_t,PyObject *,const AmSipRequest&); sip_gilstate_t sipGILState; PyObject *meth; @@ -50,12 +50,12 @@ void sipPySemsDialog::onSessionStart(const AmSipRequest& a0) return; } - sipVH_py_sems_lib_1(sipGILState,meth,a0); + sipVH_py_sems_lib_2(sipGILState,meth,a0); } void sipPySemsDialog::onCancel() { - extern void sipVH_py_sems_lib_2(sip_gilstate_t,PyObject *); + extern void sipVH_py_sems_lib_3(sip_gilstate_t,PyObject *); sip_gilstate_t sipGILState; PyObject *meth; @@ -68,12 +68,12 @@ void sipPySemsDialog::onCancel() return; } - sipVH_py_sems_lib_2(sipGILState,meth); + sipVH_py_sems_lib_3(sipGILState,meth); } void sipPySemsDialog::onBye(const AmSipRequest& a0) { - extern void sipVH_py_sems_lib_1(sip_gilstate_t,PyObject *,const AmSipRequest&); + extern void sipVH_py_sems_lib_2(sip_gilstate_t,PyObject *,const AmSipRequest&); sip_gilstate_t sipGILState; PyObject *meth; @@ -86,12 +86,12 @@ void sipPySemsDialog::onBye(const AmSipRequest& a0) return; } - sipVH_py_sems_lib_1(sipGILState,meth,a0); + sipVH_py_sems_lib_2(sipGILState,meth,a0); } void sipPySemsDialog::onDtmf(int a0,int a1) { - extern void sipVH_py_sems_lib_0(sip_gilstate_t,PyObject *,int,int); + extern void sipVH_py_sems_lib_1(sip_gilstate_t,PyObject *,int,int); sip_gilstate_t sipGILState; PyObject *meth; @@ -104,7 +104,25 @@ void sipPySemsDialog::onDtmf(int a0,int a1) return; } - sipVH_py_sems_lib_0(sipGILState,meth,a0,a1); + sipVH_py_sems_lib_1(sipGILState,meth,a0,a1); +} + +void sipPySemsDialog::process(AmEvent *a0) +{ + extern void sipVH_py_sems_lib_0(sip_gilstate_t,PyObject *,AmEvent *); + + sip_gilstate_t sipGILState; + PyObject *meth; + + meth = sipIsPyMethod(&sipGILState,&sipPyMethods[5],sipPySelf,NULL,sipNm_py_sems_lib_process); + + if (!meth) + { + PySemsDialog::process(a0); + return; + } + + sipVH_py_sems_lib_0(sipGILState,meth,a0); } @@ -287,6 +305,103 @@ static PyObject *meth_PySemsDialog_onDtmf(PyObject *sipSelf,PyObject *sipArgs) } +static PyObject *meth_PySemsDialog_setInput(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile * a0; + PySemsDialog *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0",sipSelf,sipClass_PySemsDialog,&sipCpp,sipClass_AmAudioFile,&a0)) + { + sipCpp -> PySemsDialog::setInput(a0); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_PySemsDialog,sipNm_py_sems_lib_setInput); + + return NULL; +} + + +static PyObject *meth_PySemsDialog_setOutput(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile * a0; + PySemsDialog *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0",sipSelf,sipClass_PySemsDialog,&sipCpp,sipClass_AmAudioFile,&a0)) + { + sipCpp -> PySemsDialog::setOutput(a0); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_PySemsDialog,sipNm_py_sems_lib_setOutput); + + return NULL; +} + + +static PyObject *meth_PySemsDialog_setInOut(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmAudioFile * a0; + AmAudioFile * a1; + PySemsDialog *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0J0",sipSelf,sipClass_PySemsDialog,&sipCpp,sipClass_AmAudioFile,&a0,sipClass_AmAudioFile,&a1)) + { + sipCpp -> PySemsDialog::setInOut(a0,a1); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_PySemsDialog,sipNm_py_sems_lib_setInOut); + + return NULL; +} + + +static PyObject *meth_PySemsDialog_process(PyObject *sipSelf,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + AmEvent * a0; + PySemsDialog *sipCpp; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"mJ0",sipSelf,sipClass_PySemsDialog,&sipCpp,sipClass_AmEvent,&a0)) + { + sipCpp -> PySemsDialog::process(a0); + + Py_INCREF(Py_None); + return Py_None; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoMethod(sipArgsParsed,sipNm_py_sems_lib_PySemsDialog,sipNm_py_sems_lib_process); + + return NULL; +} + + /* Cast a pointer to a type somewhere in its superclass hierarchy. */ static void *cast_PySemsDialog(void *ptr,sipWrapperType *targetClass) { @@ -398,6 +513,10 @@ static PyMethodDef methods_PySemsDialog[] = { {sipNm_py_sems_lib_onDtmf, meth_PySemsDialog_onDtmf, METH_VARARGS, NULL}, {sipNm_py_sems_lib_onInvite, meth_PySemsDialog_onInvite, METH_VARARGS, NULL}, {sipNm_py_sems_lib_onSessionStart, meth_PySemsDialog_onSessionStart, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_process, meth_PySemsDialog_process, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_setInOut, meth_PySemsDialog_setInOut, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_setInput, meth_PySemsDialog_setInput, METH_VARARGS, NULL}, + {sipNm_py_sems_lib_setOutput, meth_PySemsDialog_setOutput, METH_VARARGS, NULL}, {sipNm_py_sems_lib_setStopped, meth_PySemsDialog_setStopped, METH_VARARGS, NULL} }; @@ -409,7 +528,7 @@ sipTypeDef sipType_PySemsDialog = { -1, 0, 0, - 7, methods_PySemsDialog, + 11, methods_PySemsDialog, 0, 0, variables_PySemsDialog, init_PySemsDialog, diff --git a/apps/py_sems/sip/sippy_sems_libPySemsDialog.h b/apps/py_sems/sip/sippy_sems_libPySemsDialog.h index 0728c53a..fe348f96 100644 --- a/apps/py_sems/sip/sippy_sems_libPySemsDialog.h +++ b/apps/py_sems/sip/sippy_sems_libPySemsDialog.h @@ -1,7 +1,7 @@ /* * Interface header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libPySemsDialog_h @@ -12,6 +12,8 @@ #line 13 "sippy_sems_libPySemsDialog.h" #include "sippy_sems_libAmSipDialog.h" +#include "sippy_sems_libAmEvent.h" +#include "sippy_sems_libAmAudioFile.h" #include "sippy_sems_libAmSipRequest.h" #include "sippy_sems_libstring.h" @@ -38,6 +40,7 @@ public: void onCancel(); void onBye(const AmSipRequest&); void onDtmf(int,int); + void process(AmEvent *); sipWrapper *sipPySelf; @@ -45,7 +48,7 @@ private: sipPySemsDialog(const sipPySemsDialog &); sipPySemsDialog &operator = (const sipPySemsDialog &); - sipMethodCache sipPyMethods[5]; + sipMethodCache sipPyMethods[6]; }; #endif diff --git a/apps/py_sems/sip/sippy_sems_libcmodule.cpp b/apps/py_sems/sip/sippy_sems_libcmodule.cpp index 829f540b..6c1bad58 100644 --- a/apps/py_sems/sip/sippy_sems_libcmodule.cpp +++ b/apps/py_sems/sip/sippy_sems_libcmodule.cpp @@ -1,12 +1,15 @@ /* * Module code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" #include "sippy_sems_libPySemsDialog.h" +#include "sippy_sems_libAmAudioFile.h" +#include "sippy_sems_libAmAudioEvent.h" +#include "sippy_sems_libAmEvent.h" #include "sippy_sems_libAmSipDialog.h" #include "sippy_sems_libAmSipReply.h" #include "sippy_sems_libAmSipRequest.h" @@ -15,6 +18,11 @@ /* Define the strings used by this module. */ +char sipNm_py_sems_lib_get_header_param[] = "get_header_param"; +char sipNm_py_sems_lib_process[] = "process"; +char sipNm_py_sems_lib_setInOut[] = "setInOut"; +char sipNm_py_sems_lib_setOutput[] = "setOutput"; +char sipNm_py_sems_lib_setInput[] = "setInput"; char sipNm_py_sems_lib_onDtmf[] = "onDtmf"; char sipNm_py_sems_lib_onBye[] = "onBye"; char sipNm_py_sems_lib_onCancel[] = "onCancel"; @@ -24,6 +32,21 @@ char sipNm_py_sems_lib_setStopped[] = "setStopped"; char sipNm_py_sems_lib_acceptAudio[] = "acceptAudio"; char sipNm_py_sems_lib_dlg[] = "dlg"; char sipNm_py_sems_lib_PySemsDialog[] = "PySemsDialog"; +char sipNm_py_sems_lib_getDataSize[] = "getDataSize"; +char sipNm_py_sems_lib_close[] = "close"; +char sipNm_py_sems_lib_rewind[] = "rewind"; +char sipNm_py_sems_lib_open[] = "open"; +char sipNm_py_sems_lib_setLoop[] = "setLoop"; +char sipNm_py_sems_lib_getLoop[] = "getLoop"; +char sipNm_py_sems_lib_Write[] = "Write"; +char sipNm_py_sems_lib_Read[] = "Read"; +char sipNm_py_sems_lib_AmAudioFile[] = "AmAudioFile"; +char sipNm_py_sems_lib_cleared[] = "cleared"; +char sipNm_py_sems_lib_noAudio[] = "noAudio"; +char sipNm_py_sems_lib_AmAudioEvent[] = "AmAudioEvent"; +char sipNm_py_sems_lib_processed[] = "processed"; +char sipNm_py_sems_lib_event_id[] = "event_id"; +char sipNm_py_sems_lib_AmEvent[] = "AmEvent"; char sipNm_py_sems_lib_reinvite[] = "reinvite"; char sipNm_py_sems_lib_update[] = "update"; char sipNm_py_sems_lib_cancel[] = "cancel"; @@ -77,7 +100,20 @@ char sipNm_py_sems_lib_cmd[] = "cmd"; char sipNm_py_sems_lib_AmSipRequest[] = "AmSipRequest"; char sipNm_py_sems_lib_string[] = "string"; -void sipVH_py_sems_lib_0(sip_gilstate_t sipGILState,PyObject *sipMethod,int a0,int a1) +void sipVH_py_sems_lib_0(sip_gilstate_t sipGILState,PyObject *sipMethod,AmEvent *a0) +{ + PyObject *sipResObj = sipCallMethod(0,sipMethod,"M",a0,sipClass_AmEvent); + + if (!sipResObj || sipParseResult(0,sipMethod,sipResObj,"Z") < 0) + PyErr_Print(); + + Py_XDECREF(sipResObj); + Py_DECREF(sipMethod); + + SIP_RELEASE_GIL(sipGILState) +} + +void sipVH_py_sems_lib_1(sip_gilstate_t sipGILState,PyObject *sipMethod,int a0,int a1) { PyObject *sipResObj = sipCallMethod(0,sipMethod,"ii",a0,a1); @@ -90,7 +126,7 @@ void sipVH_py_sems_lib_0(sip_gilstate_t sipGILState,PyObject *sipMethod,int a0,i SIP_RELEASE_GIL(sipGILState) } -void sipVH_py_sems_lib_1(sip_gilstate_t sipGILState,PyObject *sipMethod,const AmSipRequest& a0) +void sipVH_py_sems_lib_2(sip_gilstate_t sipGILState,PyObject *sipMethod,const AmSipRequest& a0) { PyObject *sipResObj = sipCallMethod(0,sipMethod,"O",const_cast(&a0),sipClass_AmSipRequest); @@ -103,7 +139,7 @@ void sipVH_py_sems_lib_1(sip_gilstate_t sipGILState,PyObject *sipMethod,const Am SIP_RELEASE_GIL(sipGILState) } -void sipVH_py_sems_lib_2(sip_gilstate_t sipGILState,PyObject *sipMethod) +void sipVH_py_sems_lib_3(sip_gilstate_t sipGILState,PyObject *sipMethod) { PyObject *sipResObj = sipCallMethod(0,sipMethod,""); @@ -117,6 +153,42 @@ void sipVH_py_sems_lib_2(sip_gilstate_t sipGILState,PyObject *sipMethod) } +static PyObject *func_get_header_param(PyObject *,PyObject *sipArgs) +{ + int sipArgsParsed = 0; + + { + const string * a0; + int a0IsTemp = 0; + const string * a1; + int a1IsTemp = 0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"M1M1",sipConvertTo_string,&a0,&a0IsTemp,sipConvertTo_string,&a1,&a1IsTemp)) + { + string *sipRes; + + sipRes = new string(get_header_param(*a0,*a1)); + + if (a0IsTemp) + delete const_cast(a0); + + if (a1IsTemp) + delete const_cast(a1); + + PyObject *sipResObj = sipConvertFrom_string(sipRes); + delete sipRes; + + return sipResObj; + } + } + + /* Raise an exception if the arguments couldn't be parsed. */ + sipNoFunction(sipArgsParsed,sipNm_py_sems_lib_get_header_param); + + return NULL; +} + + static PyObject *func_getHeader(PyObject *,PyObject *sipArgs) { int sipArgsParsed = 0; @@ -146,6 +218,36 @@ static PyObject *func_getHeader(PyObject *,PyObject *sipArgs) } } + { + const string * a0; + int a0IsTemp = 0; + const string * a1; + int a1IsTemp = 0; + const string * a2; + int a2IsTemp = 0; + + if (sipParseArgs(&sipArgsParsed,sipArgs,"M1M1M1",sipConvertTo_string,&a0,&a0IsTemp,sipConvertTo_string,&a1,&a1IsTemp,sipConvertTo_string,&a2,&a2IsTemp)) + { + string *sipRes; + + sipRes = new string(getHeader(*a0,*a1,*a2)); + + if (a0IsTemp) + delete const_cast(a0); + + if (a1IsTemp) + delete const_cast(a1); + + if (a2IsTemp) + delete const_cast(a2); + + PyObject *sipResObj = sipConvertFrom_string(sipRes); + delete sipRes; + + return sipResObj; + } + } + /* Raise an exception if the arguments couldn't be parsed. */ sipNoFunction(sipArgsParsed,sipNm_py_sems_lib_getHeader); @@ -153,12 +255,34 @@ static PyObject *func_getHeader(PyObject *,PyObject *sipArgs) } +/* Convert to a sub-class if possible. */ +static sipWrapperType *sipSubClass_AmEvent(void *sipCppV) +{ + AmEvent *sipCpp = reinterpret_cast(sipCppV); + sipWrapperType *sipClass; + +#line 15 "AmAudio.sip" + if(dynamic_cast(sipCpp)){ + sipClass = sipClass_AmAudioEvent; + } + else { + sipClass = sipClass_AmEvent; + } +#line 272 "sippy_sems_libcmodule.cpp" + + return sipClass; +} + + /* * This defines each class in this module. The values are replaced by the * proper Python types during the export process. */ static sipWrapperType *typesTable[] = { (sipWrapperType *)&sipType_PySemsDialog, + (sipWrapperType *)&sipType_AmAudioFile, + (sipWrapperType *)&sipType_AmEvent, + (sipWrapperType *)&sipType_AmAudioEvent, (sipWrapperType *)&sipType_AmSipDialog, (sipWrapperType *)&sipType_AmSipReply, (sipWrapperType *)&sipType_AmSipRequest, @@ -180,6 +304,14 @@ static sipVirtHandlerFunc virtHandlersTable[] = { (sipVirtHandlerFunc)sipVH_py_sems_lib_0, (sipVirtHandlerFunc)sipVH_py_sems_lib_1, (sipVirtHandlerFunc)sipVH_py_sems_lib_2, + (sipVirtHandlerFunc)sipVH_py_sems_lib_3, +}; + + +/* This defines the class sub-convertors that this module defines. */ +static sipSubClassConvertorDef convertorsTable[] = { + {sipSubClass_AmEvent, {2, 255, 0}, NULL}, + {NULL, {0, 0, 0}, NULL} }; @@ -193,7 +325,7 @@ sipExportedModuleDef sipModuleAPI_py_sems_lib = { typesTable, mappedTypesTable, virtHandlersTable, - NULL, + convertorsTable, {NULL, NULL, NULL, NULL, NULL, NULL}, NULL }; @@ -207,6 +339,7 @@ const sipAPIDef *sipAPI_py_sems_lib; PyMODINIT_FUNC initpy_sems_lib() { static PyMethodDef methods[] = { + {sipNm_py_sems_lib_get_header_param, func_get_header_param, METH_VARARGS, NULL}, {sipNm_py_sems_lib_getHeader, func_getHeader, METH_VARARGS, NULL}, {0, 0, 0, 0} }; diff --git a/apps/py_sems/sip/sippy_sems_libstring.cpp b/apps/py_sems/sip/sippy_sems_libstring.cpp index f321bf2a..534ca2e0 100644 --- a/apps/py_sems/sip/sippy_sems_libstring.cpp +++ b/apps/py_sems/sip/sippy_sems_libstring.cpp @@ -1,7 +1,7 @@ /* * Interface wrapper code. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #include "sipAPIpy_sems_lib.h" diff --git a/apps/py_sems/sip/sippy_sems_libstring.h b/apps/py_sems/sip/sippy_sems_libstring.h index 7d2e9dc7..2c3ef2aa 100644 --- a/apps/py_sems/sip/sippy_sems_libstring.h +++ b/apps/py_sems/sip/sippy_sems_libstring.h @@ -1,7 +1,7 @@ /* * Interface header file. * - * Generated by SIP 4.1.1 (4.1.1-255) on Fri Feb 16 10:10:16 2007 + * Generated by SIP 4.1.1 (4.1.1-255) on Mon Feb 19 14:57:35 2007 */ #ifndef _py_sems_libstring_h diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index 2114576c..d1cf9b2f 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -67,6 +67,7 @@ void AmSipDialog::updateStatusFromLocalRequest(const AmSipRequest& req) DBG("dialog callid is empty, updating from UACRequest\n"); callid = req.callid; local_tag = req.from_tag; + DBG("local_tag = %s\n",local_tag.c_str()); user = req.user; domain = req.domain; local_uri = req.from_uri; @@ -266,12 +267,22 @@ int AmSipDialog::reply(const AmSipRequest& req, string reply_sock = "/tmp/" + AmSession::getNewId(); string code_str = int2str(code); - string msg = - ":t_reply:" + reply_sock + "\n" + - code_str + "\n" + - reason + "\n" + - req.key + "\n" + - local_tag + "\n"; + string msg = ":t_reply:"; + + msg += reply_sock; + msg += "\n"; + + msg += code_str; + msg += "\n"; + + msg += reason; + msg += "\n"; + + msg += req.key; + msg += "\n"; + + msg += local_tag; + msg += "\n"; if(!m_hdrs.empty()) msg += m_hdrs;