[commit] r2527 - freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript
Author: docelmo Date: Tue Sep 5 22:50:55 2006 New Revision: 2527 Added: freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/mod_elmoscript.c Modified: freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.c freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.i Log: Added: freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/mod_elmoscript.c ============================================================================== --- (empty file) +++ freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/mod_elmoscript.c Tue Sep 5 22:50:55 2006 @@ -0,0 +1,132 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005/2006, Anthony Minessale II <anthmct@yahoo.com> + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II <anthmct@yahoo.com> + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Brian Fertig <brian.fertig@convergencetek.com> + * + * + * mod_elmoscript.c -- php Framework + * + */ + +#include "php.h" +#include "switch.h" +static char *embedding[] = { "", "-q", "" }; +EXTERN_C void xs_init(pTHX); + +static const char modname[] = "mod_php"; + +static struct { + phpInterpreter *my_php; +} globals; + + +static void destroy_php(phpInterpreter **to_destroy) +{ + php_destruct(*to_destroy); + php_free(*to_destroy); + *to_destroy = NULL; +} + +static phpInterpreter *clone_php(void) +{ + return php_clone(globals.my_php, CLONEf_COPY_STACKS|CLONEf_KEEP_PTR_TABLE); +} + + +static void php_function(switch_core_session_t *session, char *data) +{ + char *uuid = switch_core_session_get_uuid(session); + char code[1024]; + phpInterpreter *my_php = clone_php(); + sprintf(code, "package fs_elmoscript;\n" + "$SWITCH_ENV{UUID} = \"%s\";\n" + "chdir(\"%s/php\");\n", + uuid, SWITCH_GLOBAL_dirs.base_dir); + + php_eval_pv(my_php, code, TRUE); + + + php_eval_pv(my_php, data, TRUE); + destroy_php(&my_php); +} + +static const switch_application_interface_t php_application_interface = { + /*.interface_name */ "elmoscript", + /*.application_function */ php_function +}; + +static switch_loadable_module_interface_t php_module_interface = { + /*.module_name */ modname, + /*.endpoint_interface */ NULL, + /*.timer_interface */ NULL, + /*.dialplan_interface */ NULL, + /*.codec_interface */ NULL, + /*.application_interface */ &php_application_interface, + /*.api_interface */ NULL, + /*.file_interface */ NULL, + /*.speech_interface */ NULL, + /*.directory_interface */ NULL +}; + + +SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void) +{ + if (globals.my_php) { + php_destruct(globals.my_php); + php_free(globals.my_php); + globals.my_php = NULL; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Unallocated php interpreter.\n"); + } + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_module_interface_t **module_interface, char *filename) +{ + + phpInterpreter *my_php; + char code[1024]; + + if (!(my_php = php_alloc())) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not allocate php intrepreter\n"); + switch_core_destroy(); + return SWITCH_STATUS_MEMERR; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Allocated php intrepreter.\n"); + + php_SET_CONTEXT(my_php); + php_construct(my_php); + php_parse(my_php, xs_init, 3, embedding, NULL); + php_run(my_php); + globals.my_php = my_php; + sprintf(code, "use lib '%s/php';use fs_elmoscript;use freeswitch\n", SWITCH_GLOBAL_dirs.base_dir); + php_eval_pv(my_php, code, TRUE); + + + /* connect my internal structure to the blank pointer passed to me */ + *module_interface = &php_module_interface; + + /* indicate that the module should continue to be loaded */ + return SWITCH_STATUS_SUCCESS; +} Modified: freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.c ============================================================================== --- freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.c (original) +++ freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.c Tue Sep 5 22:50:55 2006 @@ -4,12 +4,12 @@ #endif - +/* #ifdef _MSC_VER #include <php.h> #pragma comment(lib, PHP_LIB) #endif - +*/ void fs_core_set_globals(void) { switch_core_set_globals(); Modified: freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.i ============================================================================== --- freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.i (original) +++ freeswitch/branches/docelmo/trunk/src/mod/languages/mod_elmoscript/switch_swig.i Tue Sep 5 22:50:55 2006 @@ -1,9 +1,9 @@ // gd.i %module fs_elmoscript %{ -#include "/usr/local/freeswitch/include/switch.h" +#include "switch.h" %} // Grab the gd.h header file -%include "/usr/local/freeswitch/include/switch.h" +%include "switch.h"
participants (1)
-
Freeswitch SVN