[commit] r5203 - freeswitch/branches/greenlizard/src/mod/languages/mod_python
Author: greenlizard Date: Thu May 17 19:01:23 2007 New Revision: 5203 Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch.py freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.h freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python.i freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python_wrap.cpp Log: remove set_dtmf_handler which no longer works and is not present in javascript either, fix bug which segfaults when the python dtmf handler returns None. now compares returned value with Py_None Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch.py ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch.py (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch.py Thu May 17 19:01:23 2007 @@ -127,7 +127,6 @@ __swig_destroy__ = _freeswitch.delete_PySession __del__ = lambda self : None; def streamfile(*args): return _freeswitch.PySession_streamfile(*args) - def set_dtmf_callback(*args): return _freeswitch.PySession_set_dtmf_callback(*args) def begin_allow_threads(*args): return _freeswitch.PySession_begin_allow_threads(*args) def end_allow_threads(*args): return _freeswitch.PySession_end_allow_threads(*args) PySession_swigregister = _freeswitch.PySession_swigregister Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp Thu May 17 19:01:23 2007 @@ -2,17 +2,6 @@ #define sanity_check(x) do { if (!session) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return x;}} while(0) -void PySession::set_dtmf_callback(PyObject *pyfunc) -{ - sanity_check(); - 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; - } -} int PySession::streamfile(char *file, PyObject *pyfunc, char *funcargs, int starting_sample_count) { @@ -27,14 +16,13 @@ if (!PyCallable_Check(pyfunc)) { dtmfCallbackFunction = NULL; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DTMF function is not a python function."); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "DTMF function is not a python function."); } else { dtmfCallbackFunction = pyfunc; } if (dtmfCallbackFunction) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Setting DTMF callback\n"); cb_state.function = dtmfCallbackFunction; cb_state.extra = &fh; args.buf = &cb_state; @@ -42,9 +30,6 @@ args.input_callback = PythonDTMFCallback; // defined in mod_python.i, will use ptrs in cb_state ap = &args; } - else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "NOT Setting DTMF callback\n"); - } this->begin_allow_threads(); @@ -59,12 +44,10 @@ void PySession::begin_allow_threads(void) { threadState = PyEval_SaveThread(); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Py_BEGIN_ALLOW_THREADS\n"); } void PySession::end_allow_threads(void) { PyEval_RestoreThread(threadState); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Py_END_ALLOW_THREADS\n"); } PySession::~PySession() { Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.h ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.h (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.h Thu May 17 19:01:23 2007 @@ -42,7 +42,6 @@ PySession(switch_core_session_t *session) : CoreSession(session) {}; ~PySession(); int streamfile(char *file, PyObject *pyfunc, char *funcargs, int starting_sample_count); - void set_dtmf_callback(PyObject *pyfunc); void begin_allow_threads(); void end_allow_threads(); Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python.i ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python.i (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python.i Thu May 17 19:01:23 2007 @@ -65,13 +65,17 @@ result = PyEval_CallObject(func, arglist); threadState = PyEval_SaveThread(); + Py_DECREF(arglist); // Trash arglist - if (result) { + if (result && result != Py_None) { resultStr = (char *) PyString_AsString(result); + Py_XDECREF(result); + return process_callback_result(resultStr, cb_state, session); + } + else { + return SWITCH_STATUS_FALSE; } - Py_XDECREF(result); - return process_callback_result(resultStr, cb_state, session); } @@ -84,6 +88,11 @@ switch_file_handle_t *fh = NULL; fh = (switch_file_handle_t *) cb_state->extra; + + if (!ret) { + return SWITCH_STATUS_FALSE; + } + if (!strncasecmp(ret, "speed", 4)) { char *p; @@ -111,6 +120,8 @@ switch_set_flag(fh, SWITCH_FILE_PAUSE); } return SWITCH_STATUS_SUCCESS; + } else if (!strcasecmp(ret, "stop")) { + return SWITCH_STATUS_FALSE; } else if (!strcasecmp(ret, "restart")) { unsigned int pos = 0; fh->speed = 0; Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python_wrap.cpp ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python_wrap.cpp (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/mod_python_wrap.cpp Thu May 17 19:01:23 2007 @@ -2927,13 +2927,17 @@ result = PyEval_CallObject(func, arglist); threadState = PyEval_SaveThread(); + Py_DECREF(arglist); // Trash arglist - if (result) { + if (result && result != Py_None) { resultStr = (char *) PyString_AsString(result); + Py_XDECREF(result); + return process_callback_result(resultStr, cb_state, session); + } + else { + return SWITCH_STATUS_FALSE; } - Py_XDECREF(result); - return process_callback_result(resultStr, cb_state, session); } @@ -2946,6 +2950,11 @@ switch_file_handle_t *fh = NULL; fh = (switch_file_handle_t *) cb_state->extra; + + if (!ret) { + return SWITCH_STATUS_FALSE; + } + if (!strncasecmp(ret, "speed", 4)) { char *p; @@ -2973,6 +2982,10 @@ switch_set_flag(fh, SWITCH_FILE_PAUSE); } return SWITCH_STATUS_SUCCESS; + } else if (!strcasecmp(ret, "stop")) { + return SWITCH_STATUS_FALSE; + } else if (!strcasecmp(ret, "hangup")) { + return SWITCH_STATUS_BREAK; } else if (!strcasecmp(ret, "restart")) { unsigned int pos = 0; fh->speed = 0; @@ -4672,30 +4685,6 @@ } -SWIGINTERN PyObject *_wrap_PySession_set_dtmf_callback(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - PySession *arg1 = (PySession *) 0 ; - PyObject *arg2 = (PyObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:PySession_set_dtmf_callback",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_PySession, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PySession_set_dtmf_callback" "', argument " "1"" of type '" "PySession *""'"); - } - arg1 = reinterpret_cast< PySession * >(argp1); - arg2 = obj1; - (arg1)->set_dtmf_callback(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - SWIGINTERN PyObject *_wrap_PySession_begin_allow_threads(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; PySession *arg1 = (PySession *) 0 ; @@ -4789,7 +4778,6 @@ { (char *)"new_PySession", _wrap_new_PySession, METH_VARARGS, NULL}, { (char *)"delete_PySession", _wrap_delete_PySession, METH_VARARGS, NULL}, { (char *)"PySession_streamfile", _wrap_PySession_streamfile, METH_VARARGS, NULL}, - { (char *)"PySession_set_dtmf_callback", _wrap_PySession_set_dtmf_callback, METH_VARARGS, NULL}, { (char *)"PySession_begin_allow_threads", _wrap_PySession_begin_allow_threads, METH_VARARGS, NULL}, { (char *)"PySession_end_allow_threads", _wrap_PySession_end_allow_threads, METH_VARARGS, NULL}, { (char *)"PySession_swigregister", PySession_swigregister, METH_VARARGS, NULL},
participants (1)
-
Freeswitch SVN