[Freeswitch-branches] [commit] r3571 - in freeswitch/branches/jkr888/trunk: scripts src/mod/languages/mod_python

Freeswitch SVN jkr888 at freeswitch.org
Thu Dec 7 18:01:01 EST 2006


Author: jkr888
Date: Thu Dec  7 18:01:00 2006
New Revision: 3571

Modified:
   freeswitch/branches/jkr888/trunk/scripts/mytest.py
   freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/Makefile
   freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch.py
   freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.cpp
   freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.h

Log:


Modified: freeswitch/branches/jkr888/trunk/scripts/mytest.py
==============================================================================
--- freeswitch/branches/jkr888/trunk/scripts/mytest.py	(original)
+++ freeswitch/branches/jkr888/trunk/scripts/mytest.py	Thu Dec  7 18:01:00 2006
@@ -1,5 +1,5 @@
 import sys, time 
-from _freeswitch import *
+from freeswitch import *
 
 print "Hello World"
 print sys.path
@@ -7,28 +7,30 @@
 print sys.argv
 
 uuid = sys.argv[0]
-fs_console_log("1","test from my python program\n")
-fs_console_clean("This is fs_consol_clean\n")
-fs_console_clean("My uuid is " + uuid + "\n")
 
-session = fs_core_session_locate(uuid)
+newSession = SessionContainer(uuid)
 
-fs_channel_answer(session)
+newSession.console_log("1","test from my python program\n")
 
+newSession.console_clean_log("This is fs_consol_clean\n")
+newSession.console_clean_log("My uuid is " + uuid + "\n")
+
+newSession.answer()
+
 #fs_switch_ivr_session_transfer(session, "1234", "XML", "default")
-fs_ivr_play_file2(session, "/root/test.gsm")
+newSession.play_file("/root/test.gsm", "")
 
 #fs_switch_ivr_speak_text2(session, "cepstral", "david", "<break time='1s' />Welcome to my first python scripts running from <emphasis level='strong'>free switch </emphasis>application.")
 
-fs_switch_ivr_speak_text(session, 
-                "cepstral",
-                "david",
-                None,
-                0, 
-                None,
-                "Welcome to my first python application",
-                None,
-                0)
+#fs_switch_ivr_speak_text(session, 
+#                "cepstral",
+#                "david",
+#                None,
+#                0, 
+#                None,
+#                "Welcome to my first python application",
+#                None,
+#                0)
 
-fs_channel_hangup(session, "")
+newSession.hangup("1")
 

Modified: freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/Makefile
==============================================================================
--- freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/Makefile	(original)
+++ freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/Makefile	Thu Dec  7 18:01:00 2006
@@ -1,11 +1,11 @@
 LCFLAGS=-fPIC
 CFLAGS += -fPIC -I$(PREFIX)/include/python2.4/
 PYMOD=freeswitch
-LDFLAGS=-lpython2.4 -Xlinker -export-dynamic -L$(PREFIX)/lib/python2.4/config/  -lutil
+LDFLAGS=-lpython2.4 -Xlinker -export-dynamic -L$(PREFIX)/lib/python2.4/config/  -lutil -lstdc++
 SWIGCFILE=../../../switch_swig.c
 SWIGIFILE=../../../switch_swig.i
 CPPCC = g++
-OBJS=freeswitch_python.o
+OBJS=freeswitch_python.o mod_python_wrap.o
 
 #all:	depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PYMOD).$(DYNAMIC_LIB_EXTEN)
 all:	depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(OBJS) 
@@ -19,13 +19,13 @@
 %.o:  %.c
 	$(CC) $(LCFLAGS) $(CFLAGS) -c $< -o $@
 
-mod_python.c:
+od_python.c:
 	$(CC) $(LCFLAGS) $(CFLAGS) -c  mod_python.c -o mod_python.o
 
 reswig: 
 	# rm -f switch_swig_wrap.c config.m4 CREDITS *${PYMOD}*
 	# swig -o switch_swig_wrap.c -l$(SWIGIFILE) -ignoremissing -DMULTIPLICITY -python -module $(PYMOD) $(SWIGCFILE)
-	swig -python -shadow -c++ mod_python.i
+	swig -python -shadow -c++ -o mod_python_wrap.cpp mod_python.i
 	# patch -p0 -i fix.diff
 
 switch_swig_wrap.o: switch_swig_wrap.c Makefile
@@ -38,8 +38,11 @@
 # $(PYMOD).$(DYNAMIC_LIB_EXTEN): $(MODNAME).$(DYNAMIC_LIB_EXTEN) switch_swig_wrap.o switch_swig.o Makefile
 #	$(CC) $(SOLINK) -o py_$(PYMOD).$(DYNAMIC_LIB_EXTEN) switch_swig_wrap.o switch_swig.o $(LDFLAGS)
 
-$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(MODNAME).o $(OBJS) switch_swig_wrap.o switch_swig.o Makefile
-	$(CC) $(LCFLAGS) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN)  $(MODNAME).o switch_swig_wrap.o switch_swig.o $(OBJS) $(LDFLAGS)
+# $(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(MODNAME).o $(OBJS) switch_swig_wrap.o switch_swig.o Makefile
+#	$(CC) $(LCFLAGS) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN)  $(MODNAME).o switch_swig_wrap.o switch_swig.o $(OBJS) $(LDFLAGS)
+
+$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(MODNAME).o $(OBJS) Makefile
+	$(CC) $(LCFLAGS) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN)  $(MODNAME).o $(OBJS) $(LDFLAGS)
 
 clean:
 	rm -fr *.$(DYNAMIC_LIB_EXTEN) *.o *~

Modified: freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch.py
==============================================================================
--- freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch.py	(original)
+++ freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch.py	Thu Dec  7 18:01:00 2006
@@ -37,68 +37,40 @@
 
 
 
-fs_core_set_globals = _freeswitch.fs_core_set_globals
+PythonDTMFCallback = _freeswitch.PythonDTMFCallback
+class SessionContainer(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SessionContainer, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, SessionContainer, name)
+    def __repr__(self):
+        return "<%s.%s; proxy of C++ SessionContainer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
+    def __init__(self, *args):
+        _swig_setattr(self, SessionContainer, 'this', _freeswitch.new_SessionContainer(*args))
+        _swig_setattr(self, SessionContainer, 'thisown', 1)
+    def __del__(self, destroy=_freeswitch.delete_SessionContainer):
+        try:
+            if self.thisown: destroy(self)
+        except: pass
 
-fs_core_init = _freeswitch.fs_core_init
+    def console_log(*args): return _freeswitch.SessionContainer_console_log(*args)
+    def console_clean_log(*args): return _freeswitch.SessionContainer_console_clean_log(*args)
+    def answer(*args): return _freeswitch.SessionContainer_answer(*args)
+    def pre_answer(*args): return _freeswitch.SessionContainer_pre_answer(*args)
+    def hangup(*args): return _freeswitch.SessionContainer_hangup(*args)
+    def set_variable(*args): return _freeswitch.SessionContainer_set_variable(*args)
+    def get_variable(*args): return _freeswitch.SessionContainer_get_variable(*args)
+    def set_state(*args): return _freeswitch.SessionContainer_set_state(*args)
+    def play_file(*args): return _freeswitch.SessionContainer_play_file(*args)
+    def set_dtmf_callback(*args): return _freeswitch.SessionContainer_set_dtmf_callback(*args)
 
-fs_core_destroy = _freeswitch.fs_core_destroy
+class SessionContainerPtr(SessionContainer):
+    def __init__(self, this):
+        _swig_setattr(self, SessionContainer, 'this', this)
+        if not hasattr(self,"thisown"): _swig_setattr(self, SessionContainer, 'thisown', 0)
+        self.__class__ = SessionContainer
+_freeswitch.SessionContainer_swigregister(SessionContainerPtr)
+cvar = _freeswitch.cvar
 
-fs_loadable_module_init = _freeswitch.fs_loadable_module_init
-
-fs_loadable_module_shutdown = _freeswitch.fs_loadable_module_shutdown
-
-fs_console_loop = _freeswitch.fs_console_loop
-
-fs_console_log = _freeswitch.fs_console_log
-
-fs_console_clean = _freeswitch.fs_console_clean
-
-fs_core_session_locate = _freeswitch.fs_core_session_locate
-
-fs_channel_answer = _freeswitch.fs_channel_answer
-
-fs_channel_pre_answer = _freeswitch.fs_channel_pre_answer
-
-fs_channel_hangup = _freeswitch.fs_channel_hangup
-
-fs_channel_set_variable = _freeswitch.fs_channel_set_variable
-
-fs_channel_get_variable = _freeswitch.fs_channel_get_variable
-
-fs_channel_set_state = _freeswitch.fs_channel_set_state
-
-fs_ivr_play_file = _freeswitch.fs_ivr_play_file
-
-fs_switch_ivr_record_file = _freeswitch.fs_switch_ivr_record_file
-
-fs_switch_ivr_sleep = _freeswitch.fs_switch_ivr_sleep
-
-fs_ivr_play_file2 = _freeswitch.fs_ivr_play_file2
-
-fs_switch_ivr_collect_digits_callback = _freeswitch.fs_switch_ivr_collect_digits_callback
-
-fs_switch_ivr_collect_digits_count = _freeswitch.fs_switch_ivr_collect_digits_count
-
-fs_switch_ivr_originate = _freeswitch.fs_switch_ivr_originate
-
-fs_switch_ivr_session_transfer = _freeswitch.fs_switch_ivr_session_transfer
-
-fs_switch_ivr_speak_text = _freeswitch.fs_switch_ivr_speak_text
-
-fs_switch_ivr_speak_text2 = _freeswitch.fs_switch_ivr_speak_text2
-
-fs_switch_channel_get_variable = _freeswitch.fs_switch_channel_get_variable
-
-fs_switch_channel_set_variable = _freeswitch.fs_switch_channel_set_variable
-CS_NEW = _freeswitch.CS_NEW
-CS_INIT = _freeswitch.CS_INIT
-CS_RING = _freeswitch.CS_RING
-CS_TRANSMIT = _freeswitch.CS_TRANSMIT
-CS_EXECUTE = _freeswitch.CS_EXECUTE
-CS_LOOPBACK = _freeswitch.CS_LOOPBACK
-CS_HOLD = _freeswitch.CS_HOLD
-CS_HIBERNATE = _freeswitch.CS_HIBERNATE
-CS_HANGUP = _freeswitch.CS_HANGUP
-CS_DONE = _freeswitch.CS_DONE
 
 

Modified: freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.cpp
==============================================================================
--- freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.cpp	(original)
+++ freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.cpp	Thu Dec  7 18:01:00 2006
@@ -3,6 +3,7 @@
 SessionContainer::SessionContainer(char *nuuid)
 {
     uuid = nuuid;
+    dtmfCallbackFunction = NULL;
     if ((session = switch_core_session_locate(uuid))) {
         switch_core_session_rwunlock(session);
         channel = switch_core_session_get_channel(session);
@@ -59,6 +60,36 @@
 
     if ((current_state = switch_channel_name_state(state)) < CS_HANGUP) {
         switch_channel_set_state(channel, current_state);
+    }
+}
+
+int SessionContainer::play_file(char *file, char *timer_name)
+{
+    switch_status_t status;
+    if (switch_strlen_zero(timer_name)) {
+        timer_name = NULL;
+    }
+
+    if (!dtmfCallbackFunction) {
+        status = switch_ivr_play_file(session, NULL, file, timer_name, NULL, NULL, 0);
+    } 
+    else {
+        globalDTMFCallBackFunction = dtmfCallbackFunction;
+        status = switch_ivr_play_file(session, NULL, file, timer_name, PythonDTMFCallback, NULL, 0);
+    }
+
+    return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
+
+}
+
+void SessionContainer::set_dtmf_callback(PyObject *pyfunc)
+{
+    if (!PyCallable_Check(pyfunc)) {
+        dtmfCallbackFunction = NULL;
+        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DTMF function is not a python function.");
+    }       
+    else {
+        dtmfCallbackFunction = pyfunc;
     }
 }
 

Modified: freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.h
==============================================================================
--- freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.h	(original)
+++ freeswitch/branches/jkr888/trunk/src/mod/languages/mod_python/freeswitch_python.h	Thu Dec  7 18:01:00 2006
@@ -1,14 +1,24 @@
+#include <Python.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #include <switch.h>
 
+void *globalDTMFCallBackFunction = NULL;
+extern switch_status_t PythonDTMFCallback(switch_core_session *session, 
+                                    void *input, 
+                                    switch_input_type_t itype,
+                                    void *buf,
+                                    unsigned int buflen);
+
 class SessionContainer {
     private:
         switch_core_session_t *session;
         switch_channel_t *channel;
         char *uuid;
+        PyObject *dtmfCallbackFunction;
     public:
         SessionContainer(char *uuid);
         ~SessionContainer();
@@ -20,6 +30,8 @@
         void set_variable(char *var, char *val);
         void get_variable(char *var, char *val);
         void set_state(char *state);
+        int  play_file(char *file, char *timer_name);
+        void set_dtmf_callback(PyObject *pyfunc);
     protected:
 };
 



More information about the Freeswitch-branches mailing list