diff --git a/src/mod/languages/mod_lua/freeswitch_lua.cpp b/src/mod/languages/mod_lua/freeswitch_lua.cpp index 1e5b8ef2c8..4a23b9b4de 100644 --- a/src/mod/languages/mod_lua/freeswitch_lua.cpp +++ b/src/mod/languages/mod_lua/freeswitch_lua.cpp @@ -158,6 +158,16 @@ void Session::setHangupHook(char *func, char *arg) } } +void Session::unsetInputCallback(void) +{ + sanity_check_noreturn; + switch_safe_free(cb_function); + switch_safe_free(cb_arg); + args.input_callback = NULL; + switch_channel_set_private(channel, "CoreSession", NULL); + ap = NULL; +} + void Session::setInputCallback(char *cbfunc, char *funcargs) { diff --git a/src/mod/languages/mod_lua/freeswitch_lua.h b/src/mod/languages/mod_lua/freeswitch_lua.h index 63f5490db9..ad5f37697c 100644 --- a/src/mod/languages/mod_lua/freeswitch_lua.h +++ b/src/mod/languages/mod_lua/freeswitch_lua.h @@ -29,6 +29,7 @@ class Session : public CoreSession { virtual void check_hangup_hook(); virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype); + void unsetInputCallback(void); void setInputCallback(char *cbfunc, char *funcargs = NULL); void setHangupHook(char *func, char *arg = NULL); bool ready(); diff --git a/src/mod/languages/mod_lua/mod_lua_wrap.cpp b/src/mod/languages/mod_lua/mod_lua_wrap.cpp index f272976048..0b3e0d2c08 100644 --- a/src/mod/languages/mod_lua/mod_lua_wrap.cpp +++ b/src/mod/languages/mod_lua/mod_lua_wrap.cpp @@ -7157,6 +7157,30 @@ fail: } +static int _wrap_Session_unsetInputCallback(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + + SWIG_check_num_args("unsetInputCallback",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("unsetInputCallback",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_unsetInputCallback",1,SWIGTYPE_p_LUA__Session); + } + + (arg1)->unsetInputCallback(); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} + + static int _wrap_Session_setInputCallback__SWIG_0(lua_State* L) { int SWIG_arg = -1; LUA::Session *arg1 = (LUA::Session *) 0 ; @@ -7720,6 +7744,7 @@ static swig_lua_method swig_LUA_Session_methods[] = { {"end_allow_threads", _wrap_Session_end_allow_threads}, {"check_hangup_hook", _wrap_Session_check_hangup_hook}, {"run_dtmf_callback", _wrap_Session_run_dtmf_callback}, + {"unsetInputCallback", _wrap_Session_unsetInputCallback}, {"setInputCallback", _wrap_Session_setInputCallback}, {"setHangupHook", _wrap_Session_setHangupHook}, {"ready", _wrap_Session_ready}, diff --git a/src/mod/languages/mod_perl/freeswitch.pm b/src/mod/languages/mod_perl/freeswitch.pm index 6a9c8e564c..3d1fbb805b 100644 --- a/src/mod/languages/mod_perl/freeswitch.pm +++ b/src/mod/languages/mod_perl/freeswitch.pm @@ -481,6 +481,7 @@ sub DESTROY { *run_dtmf_callback = *freeswitchc::Session_run_dtmf_callback; *setME = *freeswitchc::Session_setME; *setInputCallback = *freeswitchc::Session_setInputCallback; +*unsetInputCallback = *freeswitchc::Session_unsetInputCallback; *setHangupHook = *freeswitchc::Session_setHangupHook; *ready = *freeswitchc::Session_ready; *swig_suuid_get = *freeswitchc::Session_suuid_get; diff --git a/src/mod/languages/mod_perl/freeswitch_perl.cpp b/src/mod/languages/mod_perl/freeswitch_perl.cpp index ef252fccea..b41df2b58b 100644 --- a/src/mod/languages/mod_perl/freeswitch_perl.cpp +++ b/src/mod/languages/mod_perl/freeswitch_perl.cpp @@ -166,6 +166,17 @@ void Session::setHangupHook(char *func, char *arg) } } +void Session::unsetInputCallback(void) +{ + sanity_check_noreturn; + switch_safe_free(cb_function); + switch_safe_free(cb_arg); + switch_channel_set_private(channel, "CoreSession", NULL); + args.input_callback = NULL; + ap = NULL; + +} + void Session::setInputCallback(char *cbfunc, char *funcargs) { diff --git a/src/mod/languages/mod_perl/freeswitch_perl.h b/src/mod/languages/mod_perl/freeswitch_perl.h index ccbec939ac..50f2fabfa5 100644 --- a/src/mod/languages/mod_perl/freeswitch_perl.h +++ b/src/mod/languages/mod_perl/freeswitch_perl.h @@ -39,6 +39,7 @@ class Session : public CoreSession { virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype); void setME(SV *p); void setInputCallback(char *cbfunc = "on_input", char *funcargs = NULL); + void unsetInputCallback(void); void setHangupHook(char *func, char *arg=NULL); bool ready(); char *suuid; diff --git a/src/mod/languages/mod_perl/mod_perl_wrap.cpp b/src/mod/languages/mod_perl/mod_perl_wrap.cpp index fca2c9cb35..09f72da140 100644 --- a/src/mod/languages/mod_perl/mod_perl_wrap.cpp +++ b/src/mod/languages/mod_perl/mod_perl_wrap.cpp @@ -9738,6 +9738,33 @@ XS(_wrap_Session_setInputCallback) { } +XS(_wrap_Session_unsetInputCallback) { + { + PERL::Session *arg1 = (PERL::Session *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: Session_unsetInputCallback(self);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_unsetInputCallback" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + (arg1)->unsetInputCallback(); + + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + XS(_wrap_Session_setHangupHook__SWIG_0) { { PERL::Session *arg1 = (PERL::Session *) 0 ; @@ -10602,6 +10629,7 @@ static swig_command_info swig_commands[] = { {"freeswitchc::Session_run_dtmf_callback", _wrap_Session_run_dtmf_callback}, {"freeswitchc::Session_setME", _wrap_Session_setME}, {"freeswitchc::Session_setInputCallback", _wrap_Session_setInputCallback}, +{"freeswitchc::Session_unsetInputCallback", _wrap_Session_unsetInputCallback}, {"freeswitchc::Session_setHangupHook", _wrap_Session_setHangupHook}, {"freeswitchc::Session_ready", _wrap_Session_ready}, {"freeswitchc::Session_suuid_set", _wrap_Session_suuid_set}, diff --git a/src/mod/languages/mod_python/freeswitch.py b/src/mod/languages/mod_python/freeswitch.py index 74ca3ac0d8..720be0205b 100644 --- a/src/mod/languages/mod_python/freeswitch.py +++ b/src/mod/languages/mod_python/freeswitch.py @@ -323,6 +323,7 @@ class Session(CoreSession): def check_hangup_hook(*args): return _freeswitch.Session_check_hangup_hook(*args) def run_dtmf_callback(*args): return _freeswitch.Session_run_dtmf_callback(*args) def setInputCallback(*args): return _freeswitch.Session_setInputCallback(*args) + def unsetInputCallback(*args): return _freeswitch.Session_unsetInputCallback(*args) def setHangupHook(*args): return _freeswitch.Session_setHangupHook(*args) def ready(*args): return _freeswitch.Session_ready(*args) __swig_setmethods__["cb_function"] = _freeswitch.Session_cb_function_set diff --git a/src/mod/languages/mod_python/freeswitch_python.cpp b/src/mod/languages/mod_python/freeswitch_python.cpp index df2eb4bfbc..f10872e4d7 100644 --- a/src/mod/languages/mod_python/freeswitch_python.cpp +++ b/src/mod/languages/mod_python/freeswitch_python.cpp @@ -216,6 +216,24 @@ void Session::setHangupHook(PyObject *pyfunc, PyObject *arg) } +void Session::unsetInputCallback(void) +{ + if (cb_function) { + Py_XDECREF(cb_function); + cb_function = NULL; + } + + if (cb_arg) { + Py_XDECREF(cb_arg); + cb_arg = NULL; + } + + switch_channel_set_private(channel, "CoreSession", NULL); + args.input_callback = NULL; + ap = NULL; + +} + void Session::setInputCallback(PyObject *cbfunc, PyObject *funcargs) { diff --git a/src/mod/languages/mod_python/freeswitch_python.h b/src/mod/languages/mod_python/freeswitch_python.h index 8d61407de6..b7a5c9cf0e 100644 --- a/src/mod/languages/mod_python/freeswitch_python.h +++ b/src/mod/languages/mod_python/freeswitch_python.h @@ -30,6 +30,7 @@ class Session : public CoreSession { virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype); void setInputCallback(PyObject *cbfunc, PyObject *funcargs = NULL); + void unsetInputCallback(void); void setHangupHook(PyObject *pyfunc, PyObject *arg = NULL); bool ready(); diff --git a/src/mod/languages/mod_python/mod_python_wrap.cpp b/src/mod/languages/mod_python/mod_python_wrap.cpp index 4d3bf65faf..2bf13206df 100644 --- a/src/mod/languages/mod_python/mod_python_wrap.cpp +++ b/src/mod/languages/mod_python/mod_python_wrap.cpp @@ -9153,6 +9153,27 @@ fail: } +SWIGINTERN PyObject *_wrap_Session_unsetInputCallback(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PYTHON::Session *arg1 = (PYTHON::Session *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:Session_unsetInputCallback",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_PYTHON__Session, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_unsetInputCallback" "', argument " "1"" of type '" "PYTHON::Session *""'"); + } + arg1 = reinterpret_cast< PYTHON::Session * >(argp1); + (arg1)->unsetInputCallback(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_Session_setHangupHook__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; PYTHON::Session *arg1 = (PYTHON::Session *) 0 ; @@ -9659,6 +9680,7 @@ static PyMethodDef SwigMethods[] = { { (char *)"Session_check_hangup_hook", _wrap_Session_check_hangup_hook, METH_VARARGS, NULL}, { (char *)"Session_run_dtmf_callback", _wrap_Session_run_dtmf_callback, METH_VARARGS, NULL}, { (char *)"Session_setInputCallback", _wrap_Session_setInputCallback, METH_VARARGS, NULL}, + { (char *)"Session_unsetInputCallback", _wrap_Session_unsetInputCallback, METH_VARARGS, NULL}, { (char *)"Session_setHangupHook", _wrap_Session_setHangupHook, METH_VARARGS, NULL}, { (char *)"Session_ready", _wrap_Session_ready, METH_VARARGS, NULL}, { (char *)"Session_cb_function_set", _wrap_Session_cb_function_set, METH_VARARGS, NULL},