diff --git a/src/mod/languages/mod_perl/Makefile b/src/mod/languages/mod_perl/Makefile index 740cdc3060..75542e2bae 100644 --- a/src/mod/languages/mod_perl/Makefile +++ b/src/mod/languages/mod_perl/Makefile @@ -10,13 +10,15 @@ VERBOSE=1 include $(BASE)/build/modmake.rules +reswig: swigclean mod_perl_wrap.cpp + swigclean: clean rm -f mod_perl_wrap.* freeswitch.so freeswitch.pm mod_perl_wrap.cpp: swig -static -shadow -perl5 -c++ -DMULTIPLICITY -I../../../../src/include -o mod_perl_wrap.cpp freeswitch.i echo "#include \"mod_perl_extra.c\"" >> mod_perl_wrap.cpp - # patch -s -p0 -i hack.diff + patch -s -p0 -i hack.diff diff --git a/src/mod/languages/mod_perl/freeswitch.pm b/src/mod/languages/mod_perl/freeswitch.pm index 3f91e202fe..6a9c8e564c 100644 --- a/src/mod/languages/mod_perl/freeswitch.pm +++ b/src/mod/languages/mod_perl/freeswitch.pm @@ -391,6 +391,12 @@ sub DESTROY { *swig_cb_state_set = *freeswitchc::CoreSession_cb_state_set; *swig_hook_state_get = *freeswitchc::CoreSession_hook_state_get; *swig_hook_state_set = *freeswitchc::CoreSession_hook_state_set; +*swig_uuid_get = *freeswitchc::CoreSession_uuid_get; +*swig_uuid_set = *freeswitchc::CoreSession_uuid_set; +*swig_tts_name_get = *freeswitchc::CoreSession_tts_name_get; +*swig_tts_name_set = *freeswitchc::CoreSession_tts_name_set; +*swig_voice_name_get = *freeswitchc::CoreSession_voice_name_get; +*swig_voice_name_set = *freeswitchc::CoreSession_voice_name_set; *answer = *freeswitchc::CoreSession_answer; *preAnswer = *freeswitchc::CoreSession_preAnswer; *hangup = *freeswitchc::CoreSession_hangup; @@ -473,9 +479,12 @@ sub DESTROY { *end_allow_threads = *freeswitchc::Session_end_allow_threads; *check_hangup_hook = *freeswitchc::Session_check_hangup_hook; *run_dtmf_callback = *freeswitchc::Session_run_dtmf_callback; +*setME = *freeswitchc::Session_setME; *setInputCallback = *freeswitchc::Session_setInputCallback; *setHangupHook = *freeswitchc::Session_setHangupHook; *ready = *freeswitchc::Session_ready; +*swig_suuid_get = *freeswitchc::Session_suuid_get; +*swig_suuid_set = *freeswitchc::Session_suuid_set; *swig_cb_function_get = *freeswitchc::Session_cb_function_get; *swig_cb_function_set = *freeswitchc::Session_cb_function_set; *swig_cb_arg_get = *freeswitchc::Session_cb_arg_get; diff --git a/src/mod/languages/mod_perl/freeswitch_perl.cpp b/src/mod/languages/mod_perl/freeswitch_perl.cpp index f0f9fdf69b..f84572a80b 100644 --- a/src/mod/languages/mod_perl/freeswitch_perl.cpp +++ b/src/mod/languages/mod_perl/freeswitch_perl.cpp @@ -16,11 +16,26 @@ Session::Session():CoreSession() Session::Session(char *uuid):CoreSession(uuid) { init_me(); + suuid = switch_core_session_sprintf(session, "main::uuid_%s\n", switch_core_session_get_uuid(session)); + for (char *p = suuid; p && *p; p++) { + if (*p == '-') { + *p = '_'; + } + if (*p == '\n') { + *p = '\0'; + } + } } Session::Session(switch_core_session_t *new_session):CoreSession(new_session) { init_me(); + suuid = switch_core_session_sprintf(session, "main::uuid_%s\n", switch_core_session_get_uuid(session)); + for (char *p = suuid; p && *p; p++) { + if (*p == '-') { + *p = '_'; + } + } } static switch_status_t perl_hanguphook(switch_core_session_t *session_hungup); Session::~Session() @@ -54,6 +69,11 @@ void Session::setPERL(PerlInterpreter * pi) my_perl = pi; } +void Session::setME(SV *p) +{ + me = p; +} + PerlInterpreter *Session::getPERL() { if (!my_perl) { @@ -92,13 +112,13 @@ void Session::do_hangup_hook() } if (hangup_func_arg) { - code = switch_mprintf("%s(%s,%s)", hangup_func_str, hook_state == CS_HANGUP ? "hangup" : "transfer", hangup_func_arg); - } else { - code = switch_mprintf("%s(%s)", hangup_func_str, hook_state == CS_HANGUP ? "hangup" : "transfer"); - } + code = switch_mprintf("%s($%s,\"%s\",%s)", hangup_func_str, suuid, hook_state == CS_HANGUP ? "hangup" : "transfer", hangup_func_arg); + } else { + code = switch_mprintf("%s($%s,\"%s\")", hangup_func_str, suuid, hook_state == CS_HANGUP ? "hangup" : "transfer"); + } - Perl_eval_pv(my_perl, code, TRUE); - free(code); + Perl_eval_pv(my_perl, code, TRUE); + free(code); } } @@ -189,7 +209,7 @@ switch_status_t Session::run_dtmf_callback(void *input, switch_input_type_t ityp sv_setpv(this_sv, str); hv_store(hash, "duration", 8, this_sv, 0); - code = switch_mprintf("$__RV = %s('dtmf', \\%%__dtmf, %s);", cb_function, switch_str_nil(cb_arg)); + code = switch_mprintf("$__RV = %s($%s, 'dtmf', \\%%__dtmf, %s);", cb_function, suuid, switch_str_nil(cb_arg)); Perl_eval_pv(my_perl, code, FALSE); free(code); @@ -204,7 +224,7 @@ switch_status_t Session::run_dtmf_callback(void *input, switch_input_type_t ityp mod_perl_conjure_event(my_perl, event, "__Input_Event__"); - code = switch_mprintf("$__RV = %s('event', $__Input_Event__, %s);", cb_function, switch_str_nil(cb_arg)); + code = switch_mprintf("$__RV = %s($%s, 'event', $__Input_Event__, %s);", cb_function, suuid, switch_str_nil(cb_arg)); Perl_eval_pv(my_perl, code, TRUE); free(code); diff --git a/src/mod/languages/mod_perl/freeswitch_perl.h b/src/mod/languages/mod_perl/freeswitch_perl.h index 63fa83c6cb..deef2ecf6f 100644 --- a/src/mod/languages/mod_perl/freeswitch_perl.h +++ b/src/mod/languages/mod_perl/freeswitch_perl.h @@ -25,6 +25,7 @@ class Session : public CoreSession { PerlInterpreter *my_perl; int hh; int mark; + SV *me; public: Session(); Session(char *uuid); @@ -36,10 +37,11 @@ class Session : public CoreSession { virtual void check_hangup_hook(); virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype); - void setInputCallback(char *cbfunc, char *funcargs); + void setME(SV *p); + void setInputCallback(char *cbfunc = "on_input", char *funcargs = NULL); void setHangupHook(char *func, char *arg=NULL); bool ready(); - + char *suuid; char *cb_function; char *cb_arg; char *hangup_func_str; diff --git a/src/mod/languages/mod_perl/hack.diff b/src/mod/languages/mod_perl/hack.diff index 17a8de68dc..b9e305cc45 100644 --- a/src/mod/languages/mod_perl/hack.diff +++ b/src/mod/languages/mod_perl/hack.diff @@ -1,29 +1,69 @@ ---- mod_perl_wrap2.cpp 2008-05-11 20:28:24.000000000 -0400 -+++ mod_perl_wrap.cpp 2008-05-11 20:26:06.000000000 -0400 -@@ -6754,7 +6754,7 @@ +--- mod_perl_wrap.cpp 2008-07-14 15:52:35.000000000 -0400 ++++ old.cpp 2008-07-14 15:52:01.000000000 -0400 +@@ -8852,13 +8852,17 @@ + { + PERL::Session *result = 0 ; + int argvi = 0; ++ SV *foo; + dXSARGS; +- ++ if ((items < 0) || (items > 0)) { SWIG_croak("Usage: new_Session();"); } -- result = (PERL::Session *)new PERL::Session(); result->setPERL(my_perl); -+ result = (PERL::Session *)new PERL::Session(); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; +- result = (PERL::Session *)new PERL::Session(); +- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; ++ result = (PERL::Session *)new PERL::Session(); ++ foo = get_sv("foo", TRUE); ++ SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); ++ result->setME(foo); ++ ST(argvi) = foo; argvi++ ; XSRETURN(argvi); fail: -@@ -6781,7 +6781,7 @@ + SWIG_croak_null(); +@@ -8874,6 +8878,7 @@ + char *buf1 = 0 ; + int alloc1 = 0 ; + int argvi = 0; ++ SV *foo; + dXSARGS; + + if ((items < 1) || (items > 1)) { +@@ -8884,9 +8889,13 @@ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "char *""'"); } arg1 = reinterpret_cast< char * >(buf1); -- result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl); -+ result = (PERL::Session *)new PERL::Session(arg1); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; +- result = (PERL::Session *)new PERL::Session(arg1); +- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; ++ result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl); ++ foo = get_sv(result->suuid, TRUE); ++ SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); ++ result->setME(foo); ++ ST(argvi) = foo; argvi++ ; if (alloc1 == SWIG_NEWOBJ) delete[] buf1; ++ XSRETURN(argvi); -@@ -6809,7 +6809,7 @@ - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "switch_core_session_t *""'"); + fail: + if (alloc1 == SWIG_NEWOBJ) delete[] buf1; +@@ -8902,6 +8911,7 @@ + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; ++ SV *foo; + dXSARGS; + + if ((items < 1) || (items > 1)) { +@@ -8913,8 +8923,11 @@ } arg1 = reinterpret_cast< switch_core_session_t * >(argp1); -- result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl); -+ result = (PERL::Session *)new PERL::Session(arg1); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; - + result = (PERL::Session *)new PERL::Session(arg1); +- ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; +- ++ foo = get_sv(result->suuid, TRUE); ++ SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); ++ result->setME(foo); ++ ST(argvi) = foo; argvi++ ; ++ XSRETURN(argvi); + fail: + diff --git a/src/mod/languages/mod_perl/mod_perl.c b/src/mod/languages/mod_perl/mod_perl.c index 46dd8c98e8..fa750f9d30 100644 --- a/src/mod/languages/mod_perl/mod_perl.c +++ b/src/mod/languages/mod_perl/mod_perl.c @@ -139,8 +139,11 @@ static int perl_parse_and_execute(PerlInterpreter * my_perl, char *input_code, c return error; } +#define HACK_CLEAN_CODE "foreach my $kl(keys %main::) {undef($$kl) if (defined($$kl) && ($kl =~ /^\\w+[\\w\\d_]+$/))}" + static void destroy_perl(PerlInterpreter ** to_destroy) { + Perl_safe_eval(*to_destroy, HACK_CLEAN_CODE); perl_destruct(*to_destroy); perl_free(*to_destroy); *to_destroy = NULL; @@ -189,14 +192,20 @@ static perl_parse_and_execute(PerlInterpreter * my_perl, char *input_code, char } #endif + + + + + + + static void perl_function(switch_core_session_t *session, char *data) { char *uuid = switch_core_session_get_uuid(session); PerlInterpreter *my_perl = clone_perl(); - char code[1024]; + char code[1024] = ""; perl_parse(my_perl, xs_init, 3, embedding, NULL); - Perl_safe_eval(my_perl, code); switch_snprintf(code, sizeof(code), "use lib '%s/perl';\n" @@ -204,8 +213,6 @@ static void perl_function(switch_core_session_t *session, char *data) "$SWITCH_ENV{UUID} = \"%s\";\n" "$session = new freeswitch::Session(\"%s\")", SWITCH_GLOBAL_dirs.base_dir, uuid, uuid); perl_parse_and_execute(my_perl, data, code); - Perl_safe_eval(my_perl, "undef $session;"); - Perl_safe_eval(my_perl, "undef (*);"); destroy_perl(&my_perl); } @@ -264,12 +271,6 @@ static void *SWITCH_THREAD_FUNC perl_thread_run(switch_thread_t *thread, void *o perl_parse_and_execute(my_perl, cmd, NULL); } - if (uuid) { - switch_snprintf(code, sizeof(code), "undef $session;", uuid); - Perl_safe_eval(my_perl, code); - } - - Perl_safe_eval(my_perl, "undef(*);"); destroy_perl(&my_perl); switch_safe_free(cmd); @@ -277,7 +278,7 @@ static void *SWITCH_THREAD_FUNC perl_thread_run(switch_thread_t *thread, void *o if (po->d) { free(po); } - + return NULL; } diff --git a/src/mod/languages/mod_perl/mod_perl_wrap.cpp b/src/mod/languages/mod_perl/mod_perl_wrap.cpp index 39dcbb0206..ab499b49c6 100644 --- a/src/mod/languages/mod_perl/mod_perl_wrap.cpp +++ b/src/mod/languages/mod_perl/mod_perl_wrap.cpp @@ -5381,6 +5381,222 @@ XS(_wrap_CoreSession_hook_state_get) { } +XS(_wrap_CoreSession_uuid_set) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: CoreSession_uuid_set(self,uuid);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_uuid_set" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_uuid_set" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + if (arg1->uuid) delete[] arg1->uuid; + if (arg2) { + size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1; + arg1->uuid = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size))); + } else { + arg1->uuid = 0; + } + + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_uuid_get) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: CoreSession_uuid_get(self);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_uuid_get" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + result = (char *) ((arg1)->uuid); + ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_tts_name_set) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: CoreSession_tts_name_set(self,tts_name);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_tts_name_set" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_tts_name_set" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + if (arg1->tts_name) delete[] arg1->tts_name; + if (arg2) { + size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1; + arg1->tts_name = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size))); + } else { + arg1->tts_name = 0; + } + + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_tts_name_get) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: CoreSession_tts_name_get(self);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_tts_name_get" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + result = (char *) ((arg1)->tts_name); + ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_voice_name_set) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: CoreSession_voice_name_set(self,voice_name);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_voice_name_set" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_voice_name_set" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + if (arg1->voice_name) delete[] arg1->voice_name; + if (arg2) { + size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1; + arg1->voice_name = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size))); + } else { + arg1->voice_name = 0; + } + + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); + } +} + + +XS(_wrap_CoreSession_voice_name_get) { + { + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: CoreSession_voice_name_get(self);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_voice_name_get" "', argument " "1"" of type '" "CoreSession *""'"); + } + arg1 = reinterpret_cast< CoreSession * >(argp1); + result = (char *) ((arg1)->voice_name); + ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + XS(_wrap_CoreSession_answer) { { CoreSession *arg1 = (CoreSession *) 0 ; @@ -8636,13 +8852,17 @@ XS(_wrap_new_Session__SWIG_0) { { PERL::Session *result = 0 ; int argvi = 0; + SV *foo; dXSARGS; - + if ((items < 0) || (items > 0)) { SWIG_croak("Usage: new_Session();"); } - result = (PERL::Session *)new PERL::Session(); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; + result = (PERL::Session *)new PERL::Session(); + foo = get_sv("foo", TRUE); + SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); + result->setME(foo); + ST(argvi) = foo; argvi++ ; XSRETURN(argvi); fail: SWIG_croak_null(); @@ -8658,6 +8878,7 @@ XS(_wrap_new_Session__SWIG_1) { char *buf1 = 0 ; int alloc1 = 0 ; int argvi = 0; + SV *foo; dXSARGS; if ((items < 1) || (items > 1)) { @@ -8668,9 +8889,13 @@ XS(_wrap_new_Session__SWIG_1) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "char *""'"); } arg1 = reinterpret_cast< char * >(buf1); - result = (PERL::Session *)new PERL::Session(arg1); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; + result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl); + foo = get_sv(result->suuid, TRUE); + SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); + result->setME(foo); + ST(argvi) = foo; argvi++ ; if (alloc1 == SWIG_NEWOBJ) delete[] buf1; + XSRETURN(argvi); fail: if (alloc1 == SWIG_NEWOBJ) delete[] buf1; @@ -8686,6 +8911,7 @@ XS(_wrap_new_Session__SWIG_2) { void *argp1 = 0 ; int res1 = 0 ; int argvi = 0; + SV *foo; dXSARGS; if ((items < 1) || (items > 1)) { @@ -8697,8 +8923,11 @@ XS(_wrap_new_Session__SWIG_2) { } arg1 = reinterpret_cast< switch_core_session_t * >(argp1); result = (PERL::Session *)new PERL::Session(arg1); - ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ; - + foo = get_sv(result->suuid, TRUE); + SWIG_MakePtr(foo, SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); + result->setME(foo); + ST(argvi) = foo; argvi++ ; + XSRETURN(argvi); fail: @@ -8939,7 +9168,38 @@ XS(_wrap_Session_run_dtmf_callback) { } -XS(_wrap_Session_setInputCallback) { +XS(_wrap_Session_setME) { + { + PERL::Session *arg1 = (PERL::Session *) 0 ; + SV *arg2 = (SV *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: Session_setME(self,p);"); + } + 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_setME" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + arg2 = ST(1); + (arg1)->setME(arg2); + + + + XSRETURN(argvi); + fail: + + + SWIG_croak_null(); + } +} + + +XS(_wrap_Session_setInputCallback__SWIG_0) { { PERL::Session *arg1 = (PERL::Session *) 0 ; char *arg2 = (char *) 0 ; @@ -8988,6 +9248,180 @@ XS(_wrap_Session_setInputCallback) { } +XS(_wrap_Session_setInputCallback__SWIG_1) { + { + PERL::Session *arg1 = (PERL::Session *) 0 ; + char *arg2 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: Session_setInputCallback(self,cbfunc);"); + } + 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_setInputCallback" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_setInputCallback" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + (arg1)->setInputCallback(arg2); + + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); + } +} + + +XS(_wrap_Session_setInputCallback__SWIG_2) { + { + 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_setInputCallback(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_setInputCallback" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + (arg1)->setInputCallback(); + + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + +XS(_wrap_Session_setInputCallback) { + dXSARGS; + + { + unsigned long _index = 0; + SWIG_TypeRank _rank = 0; + if (items == 1) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_PERL__Session, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_1; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 1; + if (_rank == _rankm) goto dispatch; + } + } + check_1: + + if (items == 2) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_PERL__Session, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_2; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 2; + if (_rank == _rankm) goto dispatch; + } + } + check_2: + + if (items == 3) { + SWIG_TypeRank _ranki = 0; + SWIG_TypeRank _rankm = 0; + SWIG_TypeRank _pi = 1; + int _v = 0; + { + void *vptr = 0; + int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_PERL__Session, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_3; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_3; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + { + int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0); + _v = SWIG_CheckState(res); + } + if (!_v) goto check_3; + _ranki += _v*_pi; + _rankm += _pi; + _pi *= SWIG_MAXCASTRANK; + if (!_index || (_ranki < _rank)) { + _rank = _ranki; _index = 3; + if (_rank == _rankm) goto dispatch; + } + } + check_3: + + dispatch: + switch(_index) { + case 1: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_Session_setInputCallback__SWIG_2); return; + case 2: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_Session_setInputCallback__SWIG_1); return; + case 3: + ++PL_markstack_ptr; SWIG_CALLXS(_wrap_Session_setInputCallback__SWIG_0); return; + } + } + + croak("No matching function for overloaded 'Session_setInputCallback'"); + XSRETURN(0); +} + + XS(_wrap_Session_setHangupHook__SWIG_0) { { PERL::Session *arg1 = (PERL::Session *) 0 ; @@ -9189,6 +9623,78 @@ XS(_wrap_Session_ready) { } +XS(_wrap_Session_suuid_set) { + { + PERL::Session *arg1 = (PERL::Session *) 0 ; + char *arg2 = (char *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: Session_suuid_set(self,suuid);"); + } + 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_suuid_set" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_suuid_set" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + if (arg1->suuid) delete[] arg1->suuid; + if (arg2) { + size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1; + arg1->suuid = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size))); + } else { + arg1->suuid = 0; + } + + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + XSRETURN(argvi); + fail: + + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + SWIG_croak_null(); + } +} + + +XS(_wrap_Session_suuid_get) { + { + PERL::Session *arg1 = (PERL::Session *) 0 ; + char *result = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: Session_suuid_get(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_suuid_get" "', argument " "1"" of type '" "PERL::Session *""'"); + } + arg1 = reinterpret_cast< PERL::Session * >(argp1); + result = (char *) ((arg1)->suuid); + ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ; + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + XS(_wrap_Session_cb_function_set) { { PERL::Session *arg1 = (PERL::Session *) 0 ; @@ -9720,6 +10226,12 @@ static swig_command_info swig_commands[] = { {"freeswitchc::CoreSession_cb_state_get", _wrap_CoreSession_cb_state_get}, {"freeswitchc::CoreSession_hook_state_set", _wrap_CoreSession_hook_state_set}, {"freeswitchc::CoreSession_hook_state_get", _wrap_CoreSession_hook_state_get}, +{"freeswitchc::CoreSession_uuid_set", _wrap_CoreSession_uuid_set}, +{"freeswitchc::CoreSession_uuid_get", _wrap_CoreSession_uuid_get}, +{"freeswitchc::CoreSession_tts_name_set", _wrap_CoreSession_tts_name_set}, +{"freeswitchc::CoreSession_tts_name_get", _wrap_CoreSession_tts_name_get}, +{"freeswitchc::CoreSession_voice_name_set", _wrap_CoreSession_voice_name_set}, +{"freeswitchc::CoreSession_voice_name_get", _wrap_CoreSession_voice_name_get}, {"freeswitchc::CoreSession_answer", _wrap_CoreSession_answer}, {"freeswitchc::CoreSession_preAnswer", _wrap_CoreSession_preAnswer}, {"freeswitchc::CoreSession_hangup", _wrap_CoreSession_hangup}, @@ -9772,9 +10284,12 @@ static swig_command_info swig_commands[] = { {"freeswitchc::Session_end_allow_threads", _wrap_Session_end_allow_threads}, {"freeswitchc::Session_check_hangup_hook", _wrap_Session_check_hangup_hook}, {"freeswitchc::Session_run_dtmf_callback", _wrap_Session_run_dtmf_callback}, +{"freeswitchc::Session_setME", _wrap_Session_setME}, {"freeswitchc::Session_setInputCallback", _wrap_Session_setInputCallback}, {"freeswitchc::Session_setHangupHook", _wrap_Session_setHangupHook}, {"freeswitchc::Session_ready", _wrap_Session_ready}, +{"freeswitchc::Session_suuid_set", _wrap_Session_suuid_set}, +{"freeswitchc::Session_suuid_get", _wrap_Session_suuid_get}, {"freeswitchc::Session_cb_function_set", _wrap_Session_cb_function_set}, {"freeswitchc::Session_cb_function_get", _wrap_Session_cb_function_get}, {"freeswitchc::Session_cb_arg_set", _wrap_Session_cb_arg_set},