diff --git a/src/mod/languages/mod_perl/switch_swig.c b/src/mod/languages/mod_perl/switch_swig.c index cc8b39f345..c6cf92ecbd 100644 --- a/src/mod/languages/mod_perl/switch_swig.c +++ b/src/mod/languages/mod_perl/switch_swig.c @@ -6,8 +6,8 @@ #ifdef _MSC_VER -#include -#pragma comment(lib, PERL_LIB) +#include +#pragma comment(lib, PHP_LIB) #endif void fs_core_set_globals(void) @@ -67,7 +67,13 @@ void fs_console_clean(char *msg) switch_core_session_t *fs_core_session_locate(char *uuid) { - return switch_core_session_locate(uuid); + switch_core_session_t *session; + + if ((session = switch_core_session_locate(uuid))) { + switch_core_session_rwunlock(session); + } + + return session; } void fs_channel_answer(switch_core_session_t *session) @@ -126,3 +132,14 @@ int fs_ivr_play_file(switch_core_session_t *session, return status == SWITCH_STATUS_SUCCESS ? 1 : 0; } + +int fs_ivr_play_file2(switch_core_session_t *session, + char *file) + +{ + switch_status_t status; + + status = switch_ivr_play_file(session, NULL, file, NULL, NULL, NULL, 0); + return status == SWITCH_STATUS_SUCCESS ? 1 : 0; +} + diff --git a/src/mod/languages/mod_php/Makefile b/src/mod/languages/mod_php/Makefile index 3a9b9723b7..268257580d 100644 --- a/src/mod/languages/mod_php/Makefile +++ b/src/mod/languages/mod_php/Makefile @@ -3,8 +3,9 @@ PCFG=$(PREFIX)/bin/php-config LCFLAGS=-fPIC -DZTS -DPTHREADS CFLAGS += `$(PCFG) --includes` +MDIR += `$(PCFG) --extension-dir` PHPMOD=freeswitch -LDFLAGS += `$(PCFG) --ldflags` -lcrypt -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lphp5 +PHPLDFLAGS = `$(PCFG) --ldflags` -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lphp5 all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PHPMOD).$(DYNAMIC_LIB_EXTEN) @@ -19,7 +20,10 @@ reswig: patch -p0 -i fix.diff switch_swig_wrap.o: switch_swig_wrap.c Makefile - $(CC) $(LCFLAGS) -w $(CFLAGS) -c $< -o $@ + $(CC) -w $(CFLAGS) -c $< -o $@ + +switch_swig.o: switch_swig.c Makefile + $(CC) -w $(CFLAGS) -c $< -o $@ $(PHPMOD).$(DYNAMIC_LIB_EXTEN): $(MODNAME).$(DYNAMIC_LIB_EXTEN) switch_swig_wrap.o switch_swig.o Makefile @@ -27,10 +31,13 @@ $(PHPMOD).$(DYNAMIC_LIB_EXTEN): $(MODNAME).$(DYNAMIC_LIB_EXTEN) switch_swig_wrap $(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(MODNAME).o $(OBJS) Makefile - $(CC) $(LCFLAGS) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(MODNAME).o $(OBJS) $(LDFLAGS) + $(CC) $(LCFLAGS) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(MODNAME).o $(OBJS) $(LDFLAGS) $(PHPLDFLAGS) clean: rm -fr *.$(DYNAMIC_LIB_EXTEN) *.o *~ install: + mkdir -p $(MDIR) + cp -f php_$(PHPMOD).$(DYNAMIC_LIB_EXTEN) $(MDIR) cp -f $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PREFIX)/mod + cp -f $(PHPMOD).php $(PREFIX)/lib/php diff --git a/src/mod/languages/mod_php/apptest.php b/src/mod/languages/mod_php/apptest.php new file mode 100644 index 0000000000..e429371e9d --- /dev/null +++ b/src/mod/languages/mod_php/apptest.php @@ -0,0 +1,7 @@ + diff --git a/src/mod/languages/mod_php/freeswitch.php b/src/mod/languages/mod_php/freeswitch.php index 31c2ba43ef..905c016f8f 100644 --- a/src/mod/languages/mod_php/freeswitch.php +++ b/src/mod/languages/mod_php/freeswitch.php @@ -2,7 +2,7 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.29 + * Version 1.3.21 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -16,7 +16,7 @@ $FREESWITCH_LOADED__ = true; /* if our extension has not been loaded, do what we can */ if (!extension_loaded("php_freeswitch")) { - if (!dl("php_freeswitch.so")) return; + if (!dl("php_freeswitch.so")) return; } diff --git a/src/mod/languages/mod_php/mod_php.c b/src/mod/languages/mod_php/mod_php.c index c94727b307..91d9ecbeff 100644 --- a/src/mod/languages/mod_php/mod_php.c +++ b/src/mod/languages/mod_php/mod_php.c @@ -24,7 +24,6 @@ * Contributor(s): * * Anthony Minessale II - * Alex Leigh * * * mod_php.c -- PHP Module @@ -39,287 +38,40 @@ #define _GNU_SOURCE #endif -#include "php.h" -#include "php_variables.h" -#include "ext/standard/info.h" -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" -#include "php_version.h" -#include "TSRM.h" -#include "ext/standard/php_standard.h" +#include #include const char modname[] = "mod_php"; -static int php_freeswitch_startup(sapi_module_struct *sapi_module) -{ - return SUCCESS; -} -static int sapi_freeswitch_ub_write(const char *str, unsigned int str_length TSRMLS_DC) -{ - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, (char *)str); - return str_length; -} - - -/* - * sapi_freeswitch_header_handler: Add/update response headers with those provided by the PHP engine. - */ -static int sapi_freeswitch_header_handler(sapi_header_struct * sapi_header, sapi_headers_struct * sapi_headers TSRMLS_DC) -{ - return 0; -} - -/* - * sapi_freeswitch_send_headers: Transmit the headers to the client. This has the - * effect of starting the response under freeswitch. - */ -static int sapi_freeswitch_send_headers(sapi_headers_struct * sapi_headers TSRMLS_DC) -{ - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - -static int sapi_freeswitch_read_post(char *buffer, uint count_bytes TSRMLS_DC) -{ - return 0; -} - -/* - * sapi_freeswitch_read_cookies: Return cookie information into PHP. - */ -static char *sapi_freeswitch_read_cookies(TSRMLS_D) -{ - return NULL; -} - -static void sapi_freeswitch_register_server_variables(zval * track_vars_array TSRMLS_DC) -{ -} - -static void freeswitch_log_message(char *message) -{ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, message); -} - - -sapi_module_struct fs_sapi_module = { - "freeswitch", /* name */ - "FreeSWITCH", /* pretty name */ - - php_freeswitch_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - sapi_freeswitch_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - sapi_freeswitch_header_handler, /* header handler */ - sapi_freeswitch_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - sapi_freeswitch_read_post, /* read POST data */ - sapi_freeswitch_read_cookies, /* read Cookies */ - - sapi_freeswitch_register_server_variables, /* register server variables */ - freeswitch_log_message, /* Log message */ - NULL, /* Get request time */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - - - -typedef struct switch_php_obj { - switch_core_session_t *session; - int argc; - char *argv[129]; -} switch_php_obj_t; - - - -void freeswitch_error_handler(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args) -{ - char *buffer; - int buffer_len; - TSRMLS_FETCH(); - - buffer_len = vspprintf(&buffer, PG(log_errors_max_len), format, args); - - /* display/log the error if necessary */ - if((EG(error_reporting) & type || (type & E_CORE)) && (PG(log_errors) || PG(display_errors))) { - char *error_type_str; - - switch (type) { - case E_ERROR: - case E_CORE_ERROR: - case E_COMPILE_ERROR: - case E_USER_ERROR: - error_type_str = "Fatal error"; - break; - case E_WARNING: - case E_CORE_WARNING: - case E_COMPILE_WARNING: - case E_USER_WARNING: - error_type_str = "Warning"; - break; - case E_PARSE: - error_type_str = "Parse error"; - break; - case E_NOTICE: - case E_USER_NOTICE: - error_type_str = "Notice"; - break; - default: - error_type_str = "Unknown error"; - break; - } - - if(PG(log_errors)) { - char *log_buffer; -#ifdef PHP_WIN32 - if(type == E_CORE_ERROR || type == E_CORE_WARNING) { - MessageBox(NULL, buffer, error_type_str, MB_OK|ZEND_SERVICE_MB_STYLE); - } -#endif - spprintf(&log_buffer, 0, "PHP %s: %s in %s on line %d", error_type_str, buffer, error_filename, error_lineno); - php_log_err(log_buffer TSRMLS_CC); - efree(log_buffer); - } - - if(PG(display_errors)) { - //char *prepend_string = INI_STR("error_prepend_string"); - char *append_string = INI_STR("error_append_string"); - //char *error_format = "%s\n%s: %s in %s on line %d\n%s"; - switch_log_printf(SWITCH_CHANNEL_ID_LOG_CLEAN, (char *) error_filename, buffer, error_lineno, SWITCH_LOG_DEBUG, STR_PRINT(append_string)); - } - } - - /* Bail out if we can't recover */ - switch(type) { - case E_CORE_ERROR: - case E_ERROR: - /*case E_PARSE: the parser would return 1 (failure), we can bail out nicely */ - case E_COMPILE_ERROR: - case E_USER_ERROR: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "\nPHP: %s exiting\n", error_filename); - EG(exit_status) = 255; -#if MEMORY_LIMIT - /* restore memory limit */ - AG(memory_limit) = PG(memory_limit); -#endif - efree(buffer); - zend_bailout(); - return; - break; - } - - /* Log if necessary */ - if(PG(track_errors) && EG(active_symbol_table)) { - pval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL(tmp); - Z_STRVAL_P(tmp) = (char *) estrndup(buffer, buffer_len); - Z_STRLEN_P(tmp) = buffer_len; - Z_TYPE_P(tmp) = IS_STRING; - zend_hash_update(EG(active_symbol_table), "php_errormsg", sizeof("php_errormsg"), &tmp, sizeof(pval *), NULL); - } - efree(buffer); -} - - - -static void freeswitch_request_ctor(switch_php_obj_t *request_context TSRMLS_DC) -{ - zend_error_cb = freeswitch_error_handler; - - SG(request_info).argc = request_context->argc; - SG(request_info).argv = request_context->argv; - SG(request_info).path_translated = estrdup(request_context->argv[0]); - -} - -static void freeswitch_request_dtor(switch_php_obj_t *request_context TSRMLS_DC) -{ - efree(SG(request_info).path_translated); -} - -int freeswitch_module_main(switch_php_obj_t *request_context TSRMLS_DC) -{ - int retval; - zend_file_handle file_handle; - - if(php_request_startup(TSRMLS_C) == FAILURE) { - return FAILURE; - } - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - file_handle.opened_path = NULL; - - retval = php_execute_script(&file_handle TSRMLS_CC); - php_request_shutdown(NULL); - - return retval; -} static void php_function(switch_core_session_t *session, char *data) { char *uuid = switch_core_session_get_uuid(session); - switch_php_obj_t *request_context; uint32_t ulen = strlen(uuid); uint32_t len = strlen((char *) data) + ulen + 2; char *mydata = switch_core_session_alloc(session, len); + int argc; + char *argv[5]; + char php_code[1024]; + void*** tsrm_ls = NULL; - TSRMLS_FETCH(); + snprintf(mydata, len, "%s %s", uuid, data); - snprintf(mydata, len, "%s %s", data, uuid); - - request_context = (switch_php_obj_t *) switch_core_session_alloc(session, sizeof(*request_context)); - - request_context->session = session; - - if(switch_strlen_zero(data)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Invalid Params\n"); - return; - } - - request_context->argc = switch_separate_string(mydata, ' ', - request_context->argv, - (sizeof(request_context->argv) / sizeof(request_context->argv[0]))); + argc = switch_separate_string(mydata, ' ', + argv, + (sizeof(argv) / sizeof(argv[0]))); + sprintf(php_code, "$uuid=\"%s\"; include(\"%s\");\n", argv[0], argv[1]); + php_embed_init(argc, argv, &tsrm_ls); - SG(server_context) = request_context; + //PHP_EMBED_START_BLOCK(argc, argv); + zend_eval_string(php_code, NULL, "Embedded code" TSRMLS_CC); + //PHP_EMBED_END_BLOCK(); + php_embed_shutdown(tsrm_ls); - freeswitch_request_ctor(request_context TSRMLS_CC); - freeswitch_module_main(request_context TSRMLS_CC); - freeswitch_request_dtor(request_context TSRMLS_CC); - /* - * This call is ostensibly provided to free the memory from PHP/TSRM when - * the thread terminated, but, it leaks a structure in some hash list - * according to the developers. Not calling this will leak the entire - * interpreter, around 100k, but calling it and then terminating the - * thread will leak the struct (around a k). The only answer with the - * current TSRM implementation is to reuse the threads that allocate TSRM - * resources. - */ - /* ts_free_thread(); */ } @@ -343,15 +95,6 @@ static switch_loadable_module_interface_t php_module_interface = { SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_module_interface_t **module_interface, char *filename) { - - php_core_globals *core_globals; - - tsrm_startup(128, 1, 0, NULL); - core_globals = ts_resource(core_globals_id); - - sapi_startup(&fs_sapi_module); - fs_sapi_module.startup(&fs_sapi_module); - /* connect my internal structure to the blank pointer passed to me */ *module_interface = &php_module_interface; diff --git a/src/mod/languages/mod_php/php_freeswitch.h b/src/mod/languages/mod_php/php_freeswitch.h index df4a7aed55..25787cd2ed 100644 --- a/src/mod/languages/mod_php/php_freeswitch.h +++ b/src/mod/languages/mod_php/php_freeswitch.h @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.29 + * Version 1.3.21 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -40,10 +40,6 @@ extern zend_module_entry freeswitch_module_entry; # define PHP_FREESWITCH_API #endif -#ifdef ZTS -#include "TSRM.h" -#endif - PHP_MINIT_FUNCTION(freeswitch); PHP_MSHUTDOWN_FUNCTION(freeswitch); PHP_RINIT_FUNCTION(freeswitch); @@ -66,4 +62,25 @@ ZEND_NAMED_FUNCTION(_wrap_fs_channel_set_variable); ZEND_NAMED_FUNCTION(_wrap_fs_channel_get_variable); ZEND_NAMED_FUNCTION(_wrap_fs_channel_set_state); ZEND_NAMED_FUNCTION(_wrap_fs_ivr_play_file); +ZEND_NAMED_FUNCTION(_wrap_fs_ivr_play_file2); +/*If you declare any globals in php_freeswitch.h uncomment this: +ZEND_BEGIN_MODULE_GLOBALS(freeswitch) +ZEND_END_MODULE_GLOBALS(freeswitch) +*/ +#ifdef ZTS +#define FREESWITCH_D zend_freeswitch_globals *freeswitch_globals +#define FREESWITCH_DC , FREESWITCH_D +#define FREESWITCH_C freeswitch_globals +#define FREESWITCH_CC , FREESWITCH_C +#define FREESWITCH_SG(v) (freeswitch_globals->v) +#define FREESWITCH_FETCH() zend_freeswitch_globals *freeswitch_globals = ts_resource(freeswitch_globals_id) +#else +#define FREESWITCH_D +#define FREESWITCH_DC +#define FREESWITCH_C +#define FREESWITCH_CC +#define FREESWITCH_SG(v) (freeswitch_globals.v) +#define FREESWITCH_FETCH() +#endif + #endif /* PHP_FREESWITCH_H */ diff --git a/src/mod/languages/mod_php/switch_swig.c b/src/mod/languages/mod_php/switch_swig.c index 580ec07d3a..c6cf92ecbd 100644 --- a/src/mod/languages/mod_php/switch_swig.c +++ b/src/mod/languages/mod_php/switch_swig.c @@ -67,7 +67,13 @@ void fs_console_clean(char *msg) switch_core_session_t *fs_core_session_locate(char *uuid) { - return switch_core_session_locate(uuid); + switch_core_session_t *session; + + if ((session = switch_core_session_locate(uuid))) { + switch_core_session_rwunlock(session); + } + + return session; } void fs_channel_answer(switch_core_session_t *session) @@ -126,3 +132,14 @@ int fs_ivr_play_file(switch_core_session_t *session, return status == SWITCH_STATUS_SUCCESS ? 1 : 0; } + +int fs_ivr_play_file2(switch_core_session_t *session, + char *file) + +{ + switch_status_t status; + + status = switch_ivr_play_file(session, NULL, file, NULL, NULL, NULL, 0); + return status == SWITCH_STATUS_SUCCESS ? 1 : 0; +} + diff --git a/src/mod/languages/mod_php/switch_swig_wrap.c b/src/mod/languages/mod_php/switch_swig_wrap.c index 71f66491c3..09ae7b8409 100644 --- a/src/mod/languages/mod_php/switch_swig_wrap.c +++ b/src/mod/languages/mod_php/switch_swig_wrap.c @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.29 + * Version 1.3.21 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make @@ -8,284 +8,72 @@ * interface file instead. * ----------------------------------------------------------------------------- */ -/* ----------------------------------------------------------------------------- - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. - * ----------------------------------------------------------------------------- */ - -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) -# if (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif - -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif - -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -# elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -#endif - -#ifndef SWIGUNUSEDPARM -# ifdef __cplusplus -# define SWIGUNUSEDPARM(p) -# else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods */ -#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif -#endif - -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) -# define SWIGEXPORT __attribute__ ((visibility("default"))) -# else -# define SWIGEXPORT -# endif -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - -/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ -#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) -# define _CRT_SECURE_NO_DEPRECATE -#endif - -/* ----------------------------------------------------------------------------- - * swigrun.swg +/*************************************************************** -*- c -*- + * php4/precommon.swg * - * This file contains generic CAPI SWIG runtime support for pointer - * type checking. - * ----------------------------------------------------------------------------- */ - -/* This should only be incremented when either the layout of swig_type_info changes, - or for whatever reason, the runtime changes incompatibly */ -#define SWIG_RUNTIME_VERSION "2" - -/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ -#ifdef SWIG_TYPE_TABLE -# define SWIG_QUOTE_STRING(x) #x -# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) -# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) -#else -# define SWIG_TYPE_TABLE_NAME -#endif - -/* - You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the swig runtime code. - In 99.9% of the cases, swig just needs to declare them as 'static'. - - But only do this if is strictly necessary, ie, if you have problems - with your compiler or so. -*/ - -#ifndef SWIGRUNTIME -# define SWIGRUNTIME SWIGINTERN -#endif - -#ifndef SWIGRUNTIMEINLINE -# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE -#endif - -/* Generic buffer size */ -#ifndef SWIG_BUFFER_SIZE -# define SWIG_BUFFER_SIZE 1024 -#endif - -/* Flags for pointer conversions */ -#define SWIG_POINTER_DISOWN 0x1 - -/* Flags for new pointer objects */ -#define SWIG_POINTER_OWN 0x1 - - -/* - Flags/methods for returning states. - - The swig conversion methods, as ConvertPtr, return and integer - that tells if the conversion was successful or not. And if not, - an error code can be returned (see swigerrors.swg for the codes). - - Use the following macros/flags to set or process the returning - states. - - In old swig versions, you usually write code as: - - if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { - // success code - } else { - //fail code - } - - Now you can be more explicit as: - - int res = SWIG_ConvertPtr(obj,vptr,ty.flags); - if (SWIG_IsOK(res)) { - // success code - } else { - // fail code - } - - that seems to be the same, but now you can also do - - Type *ptr; - int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); - if (SWIG_IsOK(res)) { - // success code - if (SWIG_IsNewObj(res) { - ... - delete *ptr; - } else { - ... - } - } else { - // fail code - } - - I.e., now SWIG_ConvertPtr can return new objects and you can - identify the case and take care of the deallocation. Of course that - requires also to SWIG_ConvertPtr to return new result values, as - - int SWIG_ConvertPtr(obj, ptr,...) { - if () { - if () { - *ptr = ; - return SWIG_NEWOBJ; - } else { - *ptr = ; - return SWIG_OLDOBJ; - } - } else { - return SWIG_BADOBJ; - } - } - - Of course, returning the plain '0(success)/-1(fail)' still works, but you can be - more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the - swig errors code. - - Finally, if the SWIG_CASTRANK_MODE is enabled, the result code - allows to return the 'cast rank', for example, if you have this - - int food(double) - int fooi(int); - - and you call - - food(1) // cast rank '1' (1 -> 1.0) - fooi(1) // cast rank '0' - - just use the SWIG_AddCast()/SWIG_CheckState() - - - */ -#define SWIG_OK (0) -#define SWIG_ERROR (-1) -#define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) - -/* The CastRankLimit says how many bits are used for the cast rank */ -#define SWIG_CASTRANKLIMIT (1 << 8) -/* The NewMask denotes the object was created (using new/malloc) */ -#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) -/* The TmpMask is for in/out typemaps that use temporal objects */ -#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) -/* Simple returning values */ -#define SWIG_BADOBJ (SWIG_ERROR) -#define SWIG_OLDOBJ (SWIG_OK) -#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) -#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) -/* Check, add and del mask methods */ -#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) -#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) -#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) -#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) -#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) -#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) - - -/* Cast-Rank Mode */ -#if defined(SWIG_CASTRANK_MODE) -# ifndef SWIG_TypeRank -# define SWIG_TypeRank unsigned long -# endif -# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ -# define SWIG_MAXCASTRANK (2) -# endif -# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) -# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) { - return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; -} -SWIGINTERNINLINE int SWIG_CheckState(int r) { - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; -} -#else /* no cast-rank mode */ -# define SWIG_AddCast -# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) -#endif + * Rename all exported symbols from common.swg, to avoid symbol + * clashes if multiple interpreters are included + * + ************************************************************************/ +#define SWIG_TypeRegister SWIG_PHP4_TypeRegister +#define SWIG_TypeCheck SWIG_PHP4_TypeCheck +#define SWIG_TypeCast SWIG_PHP4_TypeCast +#define SWIG_TypeDynamicCast SWIG_PHP4_TypeDynamicCast +#define SWIG_TypeName SWIG_PHP4_TypeName +#define SWIG_TypeQuery SWIG_PHP4_TypeQuery +#define SWIG_TypeClientData SWIG_PHP4_TypeClientData +#define SWIG_PackData SWIG_PHP4_PackData +#define SWIG_UnpackData SWIG_PHP4_UnpackData +/*********************************************************************** + * common.swg + * + * This file contains generic SWIG runtime support for pointer + * type checking as well as a few commonly used macros to control + * external linkage. + * + * Author : David Beazley (beazley@cs.uchicago.edu) + * + * Copyright (c) 1999-2000, The University of Chicago + * + * This file may be freely redistributed without license or fee provided + * this copyright message remains intact. + ************************************************************************/ #include #include "switch.h" +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(_MSC_VER) || defined(__GNUC__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) extern a +# else +# define SWIGEXPORT(a) __declspec(dllexport) a +# define SWIGIMPORT(a) extern a +# endif +# else +# if defined(__BORLANDC__) +# define SWIGEXPORT(a) a _export +# define SWIGIMPORT(a) a _export +# else +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a +# endif +# endif +#else +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a +#endif + +#ifdef SWIG_GLOBAL +# define SWIGRUNTIME(a) SWIGEXPORT(a) +#else +# define SWIGRUNTIME(a) static a +#endif + #ifdef __cplusplus extern "C" { #endif @@ -293,141 +81,106 @@ extern "C" { typedef void *(*swig_converter_func)(void *); typedef struct swig_type_info *(*swig_dycast_func)(void **); -/* Structure to store inforomation on one type */ typedef struct swig_type_info { - const char *name; /* mangled name of this type */ - const char *str; /* human readable name of this type */ - swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ - struct swig_cast_info *cast; /* linked list of types that can cast into this type */ - void *clientdata; /* language specific type data */ - int owndata; /* flag if the structure owns the clientdata */ + const char *name; + swig_converter_func converter; + const char *str; + void *clientdata; + swig_dycast_func dcast; + struct swig_type_info *next; + struct swig_type_info *prev; } swig_type_info; -/* Structure to store a type and conversion function used for casting */ -typedef struct swig_cast_info { - swig_type_info *type; /* pointer to type that is equivalent to this type */ - swig_converter_func converter; /* function to cast the void pointers */ - struct swig_cast_info *next; /* pointer to next cast in linked list */ - struct swig_cast_info *prev; /* pointer to the previous cast */ -} swig_cast_info; +#ifdef SWIG_NOINCLUDE -/* Structure used to store module information - * Each module generates one structure like this, and the runtime collects - * all of these structures and stores them in a circularly linked list.*/ -typedef struct swig_module_info { - swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ - size_t size; /* Number of types in this module */ - struct swig_module_info *next; /* Pointer to next element in circularly linked list */ - swig_type_info **type_initial; /* Array of initially generated type structures */ - swig_cast_info **cast_initial; /* Array of initially generated casting structures */ - void *clientdata; /* Language specific module data */ -} swig_module_info; +SWIGIMPORT(swig_type_info *) SWIG_TypeRegister(swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *); +SWIGIMPORT(void *) SWIG_TypeCast(swig_type_info *, void *); +SWIGIMPORT(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *, void **); +SWIGIMPORT(const char *) SWIG_TypeName(const swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeQuery(const char *); +SWIGIMPORT(void) SWIG_TypeClientData(swig_type_info *, void *); +SWIGIMPORT(char *) SWIG_PackData(char *, void *, int); +SWIGIMPORT(char *) SWIG_UnpackData(char *, void *, int); -/* - Compare two type names skipping the space characters, therefore - "char*" == "char *" and "Class" == "Class", etc. +#else - Return 0 when the two name types are equivalent, as in - strncmp, but skipping ' '. -*/ -SWIGRUNTIME int -SWIG_TypeNameComp(const char *f1, const char *l1, - const char *f2, const char *l2) { - for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { - while ((*f1 == ' ') && (f1 != l1)) ++f1; - while ((*f2 == ' ') && (f2 != l2)) ++f2; - if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; - } - return (l1 - f1) - (l2 - f2); -} +static swig_type_info *swig_type_list = 0; -/* - Check type equivalence in a name list like ||... - Return 0 if not equal, 1 if equal -*/ -SWIGRUNTIME int -SWIG_TypeEquiv(const char *nb, const char *tb) { - int equiv = 0; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; +/* Register a type mapping with the type-checking */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeRegister(swig_type_info *ti) { + swig_type_info *tc, *head, *ret, *next; + /* Check to see if this type has already been registered */ + tc = swig_type_list; + while (tc) { + if (strcmp(tc->name, ti->name) == 0) { + /* Already exists in the table. Just add additional types to the list */ + if (tc->clientdata) ti->clientdata = tc->clientdata; + head = tc; + next = tc->next; + goto l1; } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) ++ne; + tc = tc->prev; } - return equiv; + head = ti; + next = 0; + + /* Place in list */ + ti->prev = swig_type_list; + swig_type_list = ti; + + /* Build linked lists */ + l1: + ret = head; + tc = ti + 1; + /* Patch up the rest of the links */ + while (tc->name) { + head->next = tc; + tc->prev = head; + head = tc; + tc++; + } + if (next) next->prev = head; + head->next = next; + return ret; } -/* - Check type equivalence in a name list like ||... - Return 0 if equal, -1 if nb < tb, 1 if nb > tb -*/ -SWIGRUNTIME int -SWIG_TypeCompare(const char *nb, const char *tb) { - int equiv = 0; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; +/* Check the typename */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeCheck(char *c, swig_type_info *ty) { + swig_type_info *s; + if (!ty) return 0; /* Void pointer */ + s = ty->next; /* First element always just a name */ + do { + if (strcmp(s->name,c) == 0) { + if (s == ty->next) return s; + /* Move s to the top of the linked list */ + s->prev->next = s->next; + if (s->next) { + s->next->prev = s->prev; + } + /* Insert s as second element in the list */ + s->next = ty->next; + if (ty->next) ty->next->prev = s; + ty->next = s; + s->prev = ty; + return s; } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) ++ne; - } - return equiv; + s = s->next; + } while (s && (s != ty->next)); + return 0; } - -/* think of this as a c++ template<> or a scheme macro */ -#define SWIG_TypeCheck_Template(comparison, ty) \ - if (ty) { \ - swig_cast_info *iter = ty->cast; \ - while (iter) { \ - if (comparison) { \ - if (iter == ty->cast) return iter; \ - /* Move iter to the top of the linked list */ \ - iter->prev->next = iter->next; \ - if (iter->next) \ - iter->next->prev = iter->prev; \ - iter->next = ty->cast; \ - iter->prev = 0; \ - if (ty->cast) ty->cast->prev = iter; \ - ty->cast = iter; \ - return iter; \ - } \ - iter = iter->next; \ - } \ - } \ - return 0 - -/* - Check the typename -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheck(const char *c, swig_type_info *ty) { - SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); +/* Cast a pointer up an inheritance hierarchy */ +SWIGRUNTIME(void *) +SWIG_TypeCast(swig_type_info *ty, void *ptr) { + if ((!ty) || (!ty->converter)) return ptr; + return (*ty->converter)(ptr); } -/* Same as previous function, except strcmp is replaced with a pointer comparison */ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { - SWIG_TypeCheck_Template(iter->type == from, into); -} - -/* - Cast a pointer up an inheritance hierarchy -*/ -SWIGRUNTIMEINLINE void * -SWIG_TypeCast(swig_cast_info *ty, void *ptr) { - return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr); -} - -/* - Dynamic pointer casting. Down an inheritance hierarchy -*/ -SWIGRUNTIME swig_type_info * +/* Dynamic pointer casting. Down an inheritance hierarchy */ +SWIGRUNTIME(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; @@ -438,251 +191,94 @@ SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { return lastty; } -/* - Return the name associated with this type -*/ -SWIGRUNTIMEINLINE const char * +/* Return the name associated with this type */ +SWIGRUNTIME(const char *) SWIG_TypeName(const swig_type_info *ty) { return ty->name; } -/* - Return the pretty name associated with this type, - that is an unmangled type name in a form presentable to the user. -*/ -SWIGRUNTIME const char * -SWIG_TypePrettyName(const swig_type_info *type) { - /* The "str" field contains the equivalent pretty names of the - type, separated by vertical-bar characters. We choose - to print the last name, as it is often (?) the most - specific. */ - if (!type) return NULL; - if (type->str != NULL) { - const char *last_name = type->str; - const char *s; - for (s = type->str; *s; s++) - if (*s == '|') last_name = s+1; - return last_name; +/* Search for a swig_type_info structure */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeQuery(const char *name) { + swig_type_info *ty = swig_type_list; + while (ty) { + if (ty->str && (strcmp(name,ty->str) == 0)) return ty; + if (ty->name && (strcmp(name,ty->name) == 0)) return ty; + ty = ty->prev; } - else - return type->name; + return 0; } -/* - Set the clientdata field for a type -*/ -SWIGRUNTIME void +/* Set the clientdata field for a type */ +SWIGRUNTIME(void) SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { - swig_cast_info *cast = ti->cast; - /* if (ti->clientdata == clientdata) return; */ + swig_type_info *tc, *equiv; + if (ti->clientdata == clientdata) return; ti->clientdata = clientdata; - - while (cast) { - if (!cast->converter) { - swig_type_info *tc = cast->type; - if (!tc->clientdata) { - SWIG_TypeClientData(tc, clientdata); + equiv = ti->next; + while (equiv) { + if (!equiv->converter) { + tc = swig_type_list; + while (tc) { + if ((strcmp(tc->name, equiv->name) == 0)) + SWIG_TypeClientData(tc,clientdata); + tc = tc->prev; } - } - cast = cast->next; - } -} -SWIGRUNTIME void -SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { - SWIG_TypeClientData(ti, clientdata); - ti->owndata = 1; -} - -/* - Search for a swig_type_info structure only by mangled name - Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - swig_module_info *iter = start; - do { - if (iter->size) { - register size_t l = 0; - register size_t r = iter->size - 1; - do { - /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - register size_t i = (l + r) >> 1; - const char *iname = iter->types[i]->name; - if (iname) { - register int compare = strcmp(name, iname); - if (compare == 0) { - return iter->types[i]; - } else if (compare < 0) { - if (i) { - r = i - 1; - } else { - break; - } - } else if (compare > 0) { - l = i + 1; - } - } else { - break; /* should never happen */ - } - } while (l <= r); } - iter = iter->next; - } while (iter != end); - return 0; -} - -/* - Search for a swig_type_info structure for either a mangled name or a human readable name. - It first searches the mangled names of the types, which is a O(log #types) - If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - /* STEP 1: Search the name field using binary search */ - swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); - if (ret) { - return ret; - } else { - /* STEP 2: If the type hasn't been found, do a complete search - of the str field (the human readable name) */ - swig_module_info *iter = start; - do { - register size_t i = 0; - for (; i < iter->size; ++i) { - if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) - return iter->types[i]; - } - iter = iter->next; - } while (iter != end); + equiv = equiv->next; } - - /* neither found a match */ - return 0; } -/* - Pack binary data into a string -*/ -SWIGRUNTIME char * -SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - register const unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register unsigned char uu = *u; +/* Pack binary data into a string */ +SWIGRUNTIME(char *) +SWIG_PackData(char *c, void *ptr, int sz) { + static char hex[17] = "0123456789abcdef"; + int i; + unsigned char *u = (unsigned char *) ptr; + register unsigned char uu; + for (i = 0; i < sz; i++,u++) { + uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } -/* - Unpack binary data from a string -*/ -SWIGRUNTIME const char * -SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - register unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register char d = *(c++); - register unsigned char uu; +/* Unpack binary data from a string */ +SWIGRUNTIME(char *) +SWIG_UnpackData(char *c, void *ptr, int sz) { + register unsigned char uu = 0; + register int d; + unsigned char *u = (unsigned char *) ptr; + int i; + for (i = 0; i < sz; i++, u++) { + d = *(c++); if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); - else - return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); - else - return (char *) 0; *u = uu; } return c; } -/* - Pack 'void *' into a string buffer. -*/ -SWIGRUNTIME char * -SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { - char *r = buff; - if ((2*sizeof(void *) + 2) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,&ptr,sizeof(void *)); - if (strlen(name) + 1 > (bsz - (r - buff))) return 0; - strcpy(r,name); - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - *ptr = (void *) 0; - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sizeof(void *)); -} - -SWIGRUNTIME char * -SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { - char *r = buff; - size_t lname = (name ? strlen(name) : 0); - if ((2*sz + 2 + lname) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,ptr,sz); - if (lname) { - strncpy(r,name,lname+1); - } else { - *r = 0; - } - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - memset(ptr,0,sz); - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sz); -} +#endif #ifdef __cplusplus } #endif -/* ----------------------------------------------------------------------------- - * See the LICENSE file for information on copyright, usage and redistribution - * of SWIG, and the README file for authors - http://www.swig.org/release.html. - * - * php4run.swg +/* + * php4.swg * * PHP4 runtime library - * ----------------------------------------------------------------------------- */ + * + */ #ifdef __cplusplus extern "C" { @@ -710,28 +306,6 @@ extern "C" { } #endif -/* But in fact SWIG_ConvertPtr is the native interface for getting typed - pointer values out of zvals. We need the TSRMLS_ macros for when we - make PHP type calls later as we handle php resources */ -#define SWIG_ConvertPtr(obj,pp,type,flags) SWIG_ZTS_ConvertPtr(obj,pp,type,flags TSRMLS_CC) - - -#define SWIG_fail goto fail - -static char *default_error_msg = "Unknown error occurred"; -static int default_error_code = E_ERROR; - -#define SWIG_PHP_Arg_Error_Msg(argnum,extramsg) "Error in argument " #argnum " "#extramsg - -#define SWIG_PHP_Error(code,msg) ErrorCode() = code; ErrorMsg() = msg; SWIG_fail; - -#define SWIG_contract_assert(expr,msg) \ - if (!(expr) ) { zend_printf("Contract Assert Failed %s\n",msg ); } else - -/* Standard SWIG API */ -#define SWIG_GetModule(clientdata) SWIG_Php4_GetModule() -#define SWIG_SetModule(clientdata, pointer) SWIG_Php4_SetModule(pointer) - /* used to wrap returned objects in so we know whether they are newobject and need freeing, or not */ typedef struct _swig_object_wrapper { @@ -739,24 +313,56 @@ typedef struct _swig_object_wrapper { int newobject; } swig_object_wrapper; +/* local scope self_constructors are set to 1 inside function wrappers + which are also class constructors, so that the php4.swg output typemaps + know whether or not to wrap returned objects in this_ptr or a new object */ +int self_constructor=0; + /* empty zend destructor for types without one */ static ZEND_RSRC_DTOR_FUNC(SWIG_landfill) {}; +/* This one makes old swig style string pointers but the php module doesn't + use these any more. This is just left here for old times sake and may go */ +SWIGRUNTIME(void) +SWIG_MakePtr(char *c, void *ptr, swig_type_info *ty) { + static char hex[17] = "0123456789abcdef"; + unsigned long p, s; + char data[32], *r; + + r = data; + p = (unsigned long) ptr; + if (p > 0) { + while (p > 0) { + s = p & 0xf; + *(r++) = hex[s]; + p = p >> 4; + } + *r = '_'; + while (r >= data) { + *(c++) = *(r--); + } + strcpy (c, ty->name); + } else { + strcpy (c, "NULL"); + } +} + +SWIGRUNTIME(void) +SWIG_SetPointerChar(char **c, void *ptr, swig_type_info *type) { + char data[512]; + + SWIG_MakePtr(data, ptr, type); + *c = estrdup(data); +} + #define SWIG_SetPointerZval(a,b,c,d) SWIG_ZTS_SetPointerZval(a,b,c,d, SWIG_module_entry TSRMLS_CC) -static void +SWIGRUNTIME(void) SWIG_ZTS_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject, zend_module_entry* module_entry TSRMLS_DC) { swig_object_wrapper *value=NULL; - /* - * First test for Null pointers. Return those as PHP native NULL - */ - if (!ptr ) { - ZVAL_NULL(z); - return; - } + /* No need to call SWIG_MakePtr here! */ if (type->clientdata) { - if (! (*(int *)(type->clientdata))) - zend_error(E_ERROR, "Type: %s failed to register with zend",type->name); + if (! (*(int *)(type->clientdata))) zend_error(E_ERROR, "Type: %s failed to register with zend",type->name); value=(swig_object_wrapper *)emalloc(sizeof(swig_object_wrapper)); value->ptr=ptr; value->newobject=newobject; @@ -768,6 +374,55 @@ SWIG_ZTS_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject, } } +/* This old-style routine converts an old string-pointer c into a real pointer + ptr calling making appropriate casting functions according to ty + We don't use this any more */ +SWIGRUNTIME(int) +SWIG_ConvertPtr_(char *c, void **ptr, swig_type_info *ty) { + register int d; + unsigned long p; + swig_type_info *tc; + + if(c == NULL) { + *ptr = 0; + return 0; + } + + p = 0; + if (*c != '_') { + *ptr = (void *) 0; + if (strcmp(c,"NULL") == 0) { + return 0; + } else { + goto type_error; + } + } + + c++; + /* Extract hex value from pointer */ + while ((d = *c)) { + if ((d >= '0') && (d <= '9')) + p = (p << 4) + (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + p = (p << 4) + (d - ('a'-10)); + else + break; + c++; + } + *ptr = (void *) p; + + if(ty) { + tc = SWIG_TypeCheck(c,ty); + if(!tc) goto type_error; + *ptr = SWIG_TypeCast(tc, (void*)p); + } + return 0; + +type_error: + + return -1; +} + /* This is a new pointer conversion routine Taking the native pointer p (which would have been converted from the old string pointer) and it's php type id, and it's type name (which also would @@ -779,9 +434,9 @@ SWIG_ZTS_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject, SWIG_ZTS_ConvertResourcePtr which gets the type name from the resource and the registered zend destructors for which we have one per type each with the type name hard wired in. */ -static int +SWIGRUNTIME(int) SWIG_ZTS_ConvertResourceData(void * p, int type, const char *type_name, void **ptr, swig_type_info *ty TSRMLS_DC) { - swig_cast_info *tc; + swig_type_info *tc; if (ty) { if (! type_name) { @@ -804,30 +459,32 @@ SWIG_ZTS_ConvertResourceData(void * p, int type, const char *type_name, void **p /* This function fills ptr with a pointer of type ty by extracting the pointer and type info from the resource in z. z must be a resource It uses SWIG_ZTS_ConvertResourceData to do the real work. */ -static int -SWIG_ZTS_ConvertResourcePtr(zval *z, void **ptr, swig_type_info *ty, int flags TSRMLS_DC) { +SWIGRUNTIME(int) +SWIG_ZTS_ConvertResourcePtr(zval *z, void **ptr, swig_type_info *ty TSRMLS_DC) { swig_object_wrapper *value; void *p; int type; char *type_name; value = (swig_object_wrapper *) zend_list_find(z->value.lval,&type); - if ( flags && SWIG_POINTER_DISOWN ) { - value->newobject = 0; - } p = value->ptr; if (type==-1) return -1; - type_name=zend_rsrc_list_get_rsrc_type(z->value.lval TSRMLS_CC); + type_name=zend_rsrc_list_get_rsrc_type(z->value.lval); return SWIG_ZTS_ConvertResourceData(p,type,type_name,ptr,ty TSRMLS_CC); } +/* But in fact SWIG_ConvertPtr is the native interface for getting typed + pointer values out of zvals. We need the TSRMLS_ macros for when we + make PHP type calls later as we handle php resources */ +#define SWIG_ConvertPtr(a,b,c) SWIG_ZTS_ConvertPtr(a,b,c TSRMLS_CC) + /* We allow passing of a STRING or RESOURCE pointing to the object or an OBJECT whose _cPtr is a string or resource pointing to the object STRING pointers are very depracated */ -static int -SWIG_ZTS_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags TSRMLS_DC) { +SWIGRUNTIME(int) +SWIG_ZTS_ConvertPtr(zval *z, void **ptr, swig_type_info *ty TSRMLS_DC) { char *c; zval *val; @@ -842,14 +499,14 @@ SWIG_ZTS_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags TSRMLS_DC /* Don't co-erce to string if it isn't */ if ((*_cPtr)->type==IS_STRING) c = Z_STRVAL_PP(_cPtr); else if ((*_cPtr)->type==IS_RESOURCE) { - return SWIG_ZTS_ConvertResourcePtr(*_cPtr,ptr,ty, flags TSRMLS_CC); + return SWIG_ZTS_ConvertResourcePtr(*_cPtr,ptr,ty TSRMLS_CC); } else goto type_error; /* _cPtr was not string or resource property */ } else goto type_error; /* can't find property _cPtr */ } else if (z->type==IS_RESOURCE) { - return SWIG_ZTS_ConvertResourcePtr(z,ptr,ty, flags TSRMLS_CC); - } if (z->type==IS_NULL ) { - *ptr = 0; - return 0; + return SWIG_ZTS_ConvertResourcePtr(z,ptr,ty TSRMLS_CC); + } else if (z->type==IS_STRING) { + c = Z_STRVAL_P(z); + return SWIG_ConvertPtr_(c,ptr,ty); } else goto type_error; type_error: @@ -857,39 +514,13 @@ type_error: return -1; } -static char const_name[] = "swig_runtime_data_type_pointer"; -static swig_module_info *SWIG_Php4_GetModule() { - zval *pointer; - swig_module_info *ret = 0; - - MAKE_STD_ZVAL(pointer); - - TSRMLS_FETCH(); - - if (zend_get_constant(const_name, sizeof(const_name), pointer TSRMLS_CC)) { - if (pointer->type == IS_LONG) { - ret = (swig_module_info *) pointer->value.lval; - } - } - FREE_ZVAL(pointer); - return ret; -} - -static void SWIG_Php4_SetModule(swig_module_info *pointer) { - TSRMLS_FETCH(); - REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, 0); -} - /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_p_void swig_types[0] -#define SWIGTYPE_p_switch_core_session_t swig_types[1] -#define SWIGTYPE_p_switch_input_callback_function_t swig_types[2] +#define SWIGTYPE_p_switch_core_session_t swig_types[0] +#define SWIGTYPE_p_void swig_types[1] +#define SWIGTYPE_p_switch_input_callback_function_t swig_types[2] static swig_type_info *swig_types[4]; -static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; -#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) -#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ @@ -912,31 +543,9 @@ static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; | | +----------------------------------------------------------------------+ */ -ZEND_BEGIN_MODULE_GLOBALS(freeswitch) -char *error_msg; -int error_code; -ZEND_END_MODULE_GLOBALS(freeswitch) -ZEND_DECLARE_MODULE_GLOBALS(freeswitch) -#ifdef ZTS -#define ErrorMsg() TSRMG(freeswitch_globals_id, zend_freeswitch_globals *, error_msg ) -#define ErrorCode() TSRMG(freeswitch_globals_id, zend_freeswitch_globals *, error_code ) -#else -#define ErrorMsg() (freeswitch_globals.error_msg) -#define ErrorCode() (freeswitch_globals.error_code) -#endif +#define SWIG_init initfreeswitch -static void freeswitch_init_globals(zend_freeswitch_globals *freeswitch_globals ) { - freeswitch_globals->error_msg = default_error_msg; - freeswitch_globals->error_code = default_error_code; -} -static void freeswitch_destroy_globals(zend_freeswitch_globals *freeswitch_globals) { } - -void SWIG_ResetError() { - TSRMLS_FETCH(); - ErrorMsg() = default_error_msg; - ErrorCode() = default_error_code; -} -#define SWIG_name "freeswitch" +#define SWIG_name "freeswitch" #ifdef __cplusplus extern "C" { #endif @@ -948,6 +557,23 @@ extern "C" { } #endif +extern void fs_core_set_globals(void); +extern int fs_core_init(char *); +extern int fs_core_destroy(void); +extern int fs_loadable_module_init(void); +extern int fs_loadable_module_shutdown(void); +extern int fs_console_loop(void); +extern void fs_console_log(char *); +extern void fs_console_clean(char *); +extern switch_core_session_t *fs_core_session_locate(char *); +extern void fs_channel_answer(switch_core_session_t *); +extern void fs_channel_pre_answer(switch_core_session_t *); +extern void fs_channel_hangup(switch_core_session_t *,char *); +extern void fs_channel_set_variable(switch_core_session_t *,char *,char *); +extern void fs_channel_get_variable(switch_core_session_t *,char *); +extern void fs_channel_set_state(switch_core_session_t *,char *); +extern int fs_ivr_play_file(switch_core_session_t *,char *,char *,switch_input_callback_function_t,void *,unsigned int); +extern int fs_ivr_play_file2(switch_core_session_t *,char *); #include "switch.h" @@ -957,23 +583,41 @@ extern "C" { /* entry subsection */ /* Every non-class user visible function must have an entry here */ function_entry freeswitch_functions[] = { - ZEND_NAMED_FE(fs_core_set_globals,_wrap_fs_core_set_globals, NULL) - ZEND_NAMED_FE(fs_core_init,_wrap_fs_core_init, NULL) - ZEND_NAMED_FE(fs_core_destroy,_wrap_fs_core_destroy, NULL) - ZEND_NAMED_FE(fs_loadable_module_init,_wrap_fs_loadable_module_init, NULL) - ZEND_NAMED_FE(fs_loadable_module_shutdown,_wrap_fs_loadable_module_shutdown, NULL) - ZEND_NAMED_FE(fs_console_loop,_wrap_fs_console_loop, NULL) - ZEND_NAMED_FE(fs_console_log,_wrap_fs_console_log, NULL) - ZEND_NAMED_FE(fs_console_clean,_wrap_fs_console_clean, NULL) - ZEND_NAMED_FE(fs_core_session_locate,_wrap_fs_core_session_locate, NULL) - ZEND_NAMED_FE(fs_channel_answer,_wrap_fs_channel_answer, NULL) - ZEND_NAMED_FE(fs_channel_pre_answer,_wrap_fs_channel_pre_answer, NULL) - ZEND_NAMED_FE(fs_channel_hangup,_wrap_fs_channel_hangup, NULL) - ZEND_NAMED_FE(fs_channel_set_variable,_wrap_fs_channel_set_variable, NULL) - ZEND_NAMED_FE(fs_channel_get_variable,_wrap_fs_channel_get_variable, NULL) - ZEND_NAMED_FE(fs_channel_set_state,_wrap_fs_channel_set_state, NULL) - ZEND_NAMED_FE(fs_ivr_play_file,_wrap_fs_ivr_play_file, NULL) - {NULL, NULL, NULL} + ZEND_NAMED_FE(fs_core_set_globals, + _wrap_fs_core_set_globals, NULL) + ZEND_NAMED_FE(fs_core_init, + _wrap_fs_core_init, NULL) + ZEND_NAMED_FE(fs_core_destroy, + _wrap_fs_core_destroy, NULL) + ZEND_NAMED_FE(fs_loadable_module_init, + _wrap_fs_loadable_module_init, NULL) + ZEND_NAMED_FE(fs_loadable_module_shutdown, + _wrap_fs_loadable_module_shutdown, NULL) + ZEND_NAMED_FE(fs_console_loop, + _wrap_fs_console_loop, NULL) + ZEND_NAMED_FE(fs_console_log, + _wrap_fs_console_log, NULL) + ZEND_NAMED_FE(fs_console_clean, + _wrap_fs_console_clean, NULL) + ZEND_NAMED_FE(fs_core_session_locate, + _wrap_fs_core_session_locate, NULL) + ZEND_NAMED_FE(fs_channel_answer, + _wrap_fs_channel_answer, NULL) + ZEND_NAMED_FE(fs_channel_pre_answer, + _wrap_fs_channel_pre_answer, NULL) + ZEND_NAMED_FE(fs_channel_hangup, + _wrap_fs_channel_hangup, NULL) + ZEND_NAMED_FE(fs_channel_set_variable, + _wrap_fs_channel_set_variable, NULL) + ZEND_NAMED_FE(fs_channel_get_variable, + _wrap_fs_channel_get_variable, NULL) + ZEND_NAMED_FE(fs_channel_set_state, + _wrap_fs_channel_set_state, NULL) + ZEND_NAMED_FE(fs_ivr_play_file, + _wrap_fs_ivr_play_file, NULL) + ZEND_NAMED_FE(fs_ivr_play_file2, + _wrap_fs_ivr_play_file2, NULL) + {NULL, NULL, NULL} }; zend_module_entry freeswitch_module_entry = { @@ -997,475 +641,501 @@ zend_module_entry* SWIG_module_entry = &freeswitch_module_entry; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_switch_core_session_t = {"_p_switch_core_session_t", "switch_core_session_t *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_switch_input_callback_function_t = {"_p_switch_input_callback_function_t", "switch_input_callback_function_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_core_session_t[] = {{"_p_switch_core_session_t", 0, "switch_core_session_t *", 0},{"_p_switch_core_session_t"},{0}}; +static swig_type_info _swigt__p_void[] = {{"_p_void", 0, "void *", 0},{"_p_void"},{0}}; +static swig_type_info _swigt__p_switch_input_callback_function_t[] = {{"_p_switch_input_callback_function_t", 0, "switch_input_callback_function_t *", 0},{"_p_switch_input_callback_function_t"},{0}}; -static swig_type_info *swig_type_initial[] = { - &_swigt__p_p_void, - &_swigt__p_switch_core_session_t, - &_swigt__p_switch_input_callback_function_t, -}; - -static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_switch_core_session_t[] = { {&_swigt__p_switch_core_session_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_switch_input_callback_function_t[] = { {&_swigt__p_switch_input_callback_function_t, 0, 0, 0},{0, 0, 0, 0}}; - -static swig_cast_info *swig_cast_initial[] = { - _swigc__p_p_void, - _swigc__p_switch_core_session_t, - _swigc__p_switch_input_callback_function_t, +static swig_type_info *swig_types_initial[] = { +_swigt__p_switch_core_session_t, +_swigt__p_void, +_swigt__p_switch_input_callback_function_t, +0 }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ -/* end header section */ /* vdecl subsection */ static int le_swig__p_switch_core_session_t=0; /* handle for */ -static int le_swig__p_p_void=0; /* handle for */ +static int le_swig__p_void=0; /* handle for */ static int le_swig__p_switch_input_callback_function_t=0; /* handle for */ /* end vdecl subsection */ /* wrapper section */ ZEND_NAMED_FUNCTION(_wrap_fs_core_set_globals) { - zval **args[0]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 0) || (zend_get_parameters_array_ex(0, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - fs_core_set_globals(); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + zval **args[1]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 0) || (zend_get_parameters_array_ex(0-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + fs_core_set_globals(); + + } ZEND_NAMED_FUNCTION(_wrap_fs_core_init) { - char *arg1 = (char *) 0 ; - int result; - zval **args[1]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 1) || (zend_get_parameters_array_ex(1, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[0]); - arg1 = (char *) Z_STRVAL_PP(args[0]); - /*@SWIG@*/; - } - result = (int)fs_core_init(arg1); - { + char *arg1 ; + int result; + zval **args[2]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + convert_to_string_ex(((0type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 0) || (zend_get_parameters_array_ex(0-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + result = (int)fs_core_destroy(); + + ZVAL_LONG(return_value,result); - } - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + } ZEND_NAMED_FUNCTION(_wrap_fs_loadable_module_init) { - int result; - zval **args[0]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 0) || (zend_get_parameters_array_ex(0, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - result = (int)fs_loadable_module_init(); - { + int result; + zval **args[1]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 0) || (zend_get_parameters_array_ex(0-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + result = (int)fs_loadable_module_init(); + + ZVAL_LONG(return_value,result); - } - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + } ZEND_NAMED_FUNCTION(_wrap_fs_loadable_module_shutdown) { - int result; - zval **args[0]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 0) || (zend_get_parameters_array_ex(0, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - result = (int)fs_loadable_module_shutdown(); - { + int result; + zval **args[1]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 0) || (zend_get_parameters_array_ex(0-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + result = (int)fs_loadable_module_shutdown(); + + ZVAL_LONG(return_value,result); - } - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + } ZEND_NAMED_FUNCTION(_wrap_fs_console_loop) { - int result; - zval **args[0]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 0) || (zend_get_parameters_array_ex(0, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - result = (int)fs_console_loop(); - { + int result; + zval **args[1]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 0) || (zend_get_parameters_array_ex(0-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + result = (int)fs_console_loop(); + + ZVAL_LONG(return_value,result); - } - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + } ZEND_NAMED_FUNCTION(_wrap_fs_console_log) { - char *arg1 = (char *) 0 ; - zval **args[1]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 1) || (zend_get_parameters_array_ex(1, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[0]); - arg1 = (char *) Z_STRVAL_PP(args[0]); - /*@SWIG@*/; - } - fs_console_log(arg1); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + char *arg1 ; + zval **args[2]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + convert_to_string_ex(((0type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + convert_to_string_ex(((0type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + convert_to_string_ex(((0type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - fs_channel_answer(arg1); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + fs_channel_answer(arg1); + + } ZEND_NAMED_FUNCTION(_wrap_fs_channel_pre_answer) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - zval **args[1]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 1) || (zend_get_parameters_array_ex(1, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_channel_pre_answer. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + zval **args[2]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - fs_channel_pre_answer(arg1); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 1) || (zend_get_parameters_array_ex(1-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + fs_channel_pre_answer(arg1); + + } ZEND_NAMED_FUNCTION(_wrap_fs_channel_hangup) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - zval **args[2]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 2) || (zend_get_parameters_array_ex(2, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_channel_hangup. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + zval **args[3]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[1]); - arg2 = (char *) Z_STRVAL_PP(args[1]); - /*@SWIG@*/; - } - fs_channel_hangup(arg1,arg2); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 2) || (zend_get_parameters_array_ex(2-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + fs_channel_hangup(arg1,arg2); + + } ZEND_NAMED_FUNCTION(_wrap_fs_channel_set_variable) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - char *arg3 = (char *) 0 ; - zval **args[3]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 3) || (zend_get_parameters_array_ex(3, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_channel_set_variable. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + char *arg3 ; + zval **args[4]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[1]); - arg2 = (char *) Z_STRVAL_PP(args[1]); - /*@SWIG@*/; - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[2]); - arg3 = (char *) Z_STRVAL_PP(args[2]); - /*@SWIG@*/; - } - fs_channel_set_variable(arg1,arg2,arg3); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 3) || (zend_get_parameters_array_ex(3-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + + convert_to_string_ex(args[2-argbase]); + arg3 = (char *) Z_STRVAL_PP(args[2-argbase]); + + fs_channel_set_variable(arg1,arg2,arg3); + + } ZEND_NAMED_FUNCTION(_wrap_fs_channel_get_variable) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - zval **args[2]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 2) || (zend_get_parameters_array_ex(2, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_channel_get_variable. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + zval **args[3]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[1]); - arg2 = (char *) Z_STRVAL_PP(args[1]); - /*@SWIG@*/; - } - fs_channel_get_variable(arg1,arg2); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 2) || (zend_get_parameters_array_ex(2-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + fs_channel_get_variable(arg1,arg2); + + } ZEND_NAMED_FUNCTION(_wrap_fs_channel_set_state) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - zval **args[2]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 2) || (zend_get_parameters_array_ex(2, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_channel_set_state. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + zval **args[3]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[1]); - arg2 = (char *) Z_STRVAL_PP(args[1]); - /*@SWIG@*/; - } - fs_channel_set_state(arg1,arg2); - - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + if(((ZEND_NUM_ARGS() + argbase )!= 2) || (zend_get_parameters_array_ex(2-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + fs_channel_set_state(arg1,arg2); + + } ZEND_NAMED_FUNCTION(_wrap_fs_ivr_play_file) { - switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - char *arg3 = (char *) 0 ; - switch_input_callback_function_t arg4 ; - void *arg5 = (void *) 0 ; - unsigned int arg6 ; - int result; - switch_input_callback_function_t *tmp4 ; - zval **args[6]; - - SWIG_ResetError(); - if(((ZEND_NUM_ARGS() )!= 6) || (zend_get_parameters_array_ex(6, args)!= SUCCESS)) { - WRONG_PARAM_COUNT; - } - - { - /* typemap(in) SWIGTYPE * */ - if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of fs_ivr_play_file. Expected SWIGTYPE_p_switch_core_session_t"); + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + char *arg3 ; + switch_input_callback_function_t arg4 ; + void *arg5 = (void *) 0 ; + unsigned int arg6 ; + int result; + zval **args[7]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; } - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[1]); - arg2 = (char *) Z_STRVAL_PP(args[1]); - /*@SWIG@*/; - } - { - /*@SWIG:CONVERT_STRING_IN@*/ - convert_to_string_ex(args[2]); - arg3 = (char *) Z_STRVAL_PP(args[2]); - /*@SWIG@*/; - } - { - if(SWIG_ConvertPtr(*args[3], (void **) &tmp4, SWIGTYPE_p_switch_input_callback_function_t, 0) < 0) { - SWIG_PHP_Error(E_ERROR, "Type error in argument 4 of fs_ivr_play_file. Expected SWIGTYPE_p_switch_input_callback_function_t"); + if(((ZEND_NUM_ARGS() + argbase )!= 6) || (zend_get_parameters_array_ex(6-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; } - arg4 = *tmp4; - } - { - if(SWIG_ConvertPtr(*args[4], (void **) &arg5, 0, 0) < 0) { - /* Allow NULL from php for void* */ - if ((*args[4])->type==IS_NULL) arg5=0; - else - SWIG_PHP_Error(E_ERROR, "Type error in argument 5 of fs_ivr_play_file. Expected SWIGTYPE_p_p_void"); + + + if(SWIG_ConvertPtr(*((0name); } - } - { - /*@SWIG:CONVERT_INT_IN@*/ - convert_to_long_ex(args[5]); - arg6 = (unsigned int) Z_LVAL_PP(args[5]); - /*@SWIG@*/; - } - result = (int)fs_ivr_play_file(arg1,arg2,arg3,arg4,arg5,arg6); - { + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + + convert_to_string_ex(args[2-argbase]); + arg3 = (char *) Z_STRVAL_PP(args[2-argbase]); + + { + switch_input_callback_function_t * argp; + if(SWIG_ConvertPtr(*args[3-argbase], (void **) &argp, SWIGTYPE_p_switch_input_callback_function_t) < 0) { + zend_error(E_ERROR, "Type error in argument %d of fs_ivr_play_file. Expected %s", 4-argbase, SWIGTYPE_p_switch_input_callback_function_t->name); + } + arg4 = *argp; + } + + if(SWIG_ConvertPtr(*args[4-argbase], (void **) &arg5, 0) < 0) { + /* Allow NULL from php for void* */ + if ((*args[4-argbase])->type==IS_NULL) arg5=0; + else zend_error(E_ERROR, "Type error in argument %d of fs_ivr_play_file. Expected %s", 5-argbase, SWIGTYPE_p_void->name); + } + + + convert_to_long_ex(args[5-argbase]); + arg6 = (unsigned int) Z_LVAL_PP(args[5-argbase]); + + result = (int)fs_ivr_play_file(arg1,arg2,arg3,arg4,arg5,arg6); + + ZVAL_LONG(return_value,result); - } - return; -fail: - zend_error(ErrorCode(),ErrorMsg()); + +} + + +ZEND_NAMED_FUNCTION(_wrap_fs_ivr_play_file2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + int result; + zval **args[3]; + int argbase=0 ; + + if (this_ptr && this_ptr->type==IS_OBJECT) { + /* fake this_ptr as first arg (till we can work out how to do it better */ + argbase++; + } + if(((ZEND_NUM_ARGS() + argbase )!= 2) || (zend_get_parameters_array_ex(2-argbase, args)!= SUCCESS)) { + WRONG_PARAM_COUNT; + } + + + if(SWIG_ConvertPtr(*((0name); + } + + + convert_to_string_ex(args[1-argbase]); + arg2 = (char *) Z_STRVAL_PP(args[1-argbase]); + + result = (int)fs_ivr_play_file2(arg1,arg2); + + + ZVAL_LONG(return_value,result); + } /* NEW Destructor style */ static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_switch_core_session_t) { - /* bah! No destructor for this simple type!! */ +/* bah! No destructor for this simple type!! */ } /* NEW Destructor style */ -static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_p_void) { - /* bah! No destructor for this simple type!! */ +static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_void) { +/* bah! No destructor for this simple type!! */ } /* NEW Destructor style */ static ZEND_RSRC_DTOR_FUNC(_wrap_destroy_p_switch_input_callback_function_t) { - /* bah! No destructor for this simple type!! */ +/* bah! No destructor for this simple type!! */ } + + + + /* end wrapper section */ /* init section */ #ifdef __cplusplus @@ -1476,230 +1146,23 @@ ZEND_GET_MODULE(freeswitch) } #endif -#define SWIG_php_minit PHP_MINIT_FUNCTION(freeswitch) -/* ----------------------------------------------------------------------------- - * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to - * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of - * swig_module, and does all the lookup, filling in the swig_module.types - * array with the correct data and linking the correct swig_cast_info - * structures together. - * - * The generated swig_type_info structures are assigned staticly to an initial - * array. We just loop though that array, and handle each type individually. - * First we lookup if this type has been already loaded, and if so, use the - * loaded structure instead of the generated one. Then we have to fill in the - * cast linked list. The cast data is initially stored in something like a - * two-dimensional array. Each row corresponds to a type (there are the same - * number of rows as there are in the swig_type_initial array). Each entry in - * a column is one of the swig_cast_info structures for that type. - * The cast_initial array is actually an array of arrays, because each row has - * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it - * adding the casts to the list. The one last trick we need to do is making - * sure the type pointer in the swig_cast_info struct is correct. - * - * First off, we lookup the cast->type name to see if it is already loaded. - * There are three cases to handle: - * 1) If the cast->type has already been loaded AND the type we are adding - * casting info to has not been loaded (it is in this module), THEN we - * replace the cast->type pointer with the type pointer that has already - * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the - * cast->type) are loaded, THEN the cast info has already been loaded by - * the previous module so we just ignore it. - * 3) Finally, if cast->type has not already been loaded, then we add that - * swig_cast_info to the linked list (because the cast->type) pointer will - * be correct. - * ----------------------------------------------------------------------------- */ - -#ifdef __cplusplus -extern "C" { -#if 0 -} /* c-mode */ -#endif -#endif - -#if 0 -#define SWIGRUNTIME_DEBUG -#endif - -SWIGRUNTIME void -SWIG_InitializeModule(void *clientdata) { - size_t i; - swig_module_info *module_head; - static int init_run = 0; - - clientdata = clientdata; - - if (init_run) return; - init_run = 1; - - /* Initialize the swig_module */ - swig_module.type_initial = swig_type_initial; - swig_module.cast_initial = swig_cast_initial; - - /* Try and load any already created modules */ - module_head = SWIG_GetModule(clientdata); - if (module_head) { - swig_module.next = module_head->next; - module_head->next = &swig_module; - } else { - /* This is the first module loaded */ - swig_module.next = &swig_module; - SWIG_SetModule(clientdata, &swig_module); - } - - /* Now work on filling in swig_module.types */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: size %d\n", swig_module.size); -#endif - for (i = 0; i < swig_module.size; ++i) { - swig_type_info *type = 0; - swig_type_info *ret; - swig_cast_info *cast; - -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); -#endif - - /* if there is another module already loaded */ - if (swig_module.next != &swig_module) { - type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); - } - if (type) { - /* Overwrite clientdata field */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found type %s\n", type->name); -#endif - if (swig_module.type_initial[i]->clientdata) { - type->clientdata = swig_module.type_initial[i]->clientdata; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); -#endif - } - } else { - type = swig_module.type_initial[i]; - } - - /* Insert casting types */ - cast = swig_module.cast_initial[i]; - while (cast->type) { - - /* Don't need to add information already in the list */ - ret = 0; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); -#endif - if (swig_module.next != &swig_module) { - ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); -#ifdef SWIGRUNTIME_DEBUG - if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); -#endif - } - if (ret) { - if (type == swig_module.type_initial[i]) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: skip old type %s\n", ret->name); -#endif - cast->type = ret; - ret = 0; - } else { - /* Check for casting already in the list */ - swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); -#ifdef SWIGRUNTIME_DEBUG - if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); -#endif - if (!ocast) ret = 0; - } - } - - if (!ret) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); -#endif - if (type->cast) { - type->cast->prev = cast; - cast->next = type->cast; - } - type->cast = cast; - } - cast++; - } - /* Set entry in modules->types array equal to the type */ - swig_module.types[i] = type; - } - swig_module.types[i] = 0; - -#ifdef SWIGRUNTIME_DEBUG - printf("**** SWIG_InitializeModule: Cast List ******\n"); - for (i = 0; i < swig_module.size; ++i) { - int j = 0; - swig_cast_info *cast = swig_module.cast_initial[i]; - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); - while (cast->type) { - printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); - cast++; - ++j; - } - printf("---- Total casts: %d\n",j); - } - printf("**** SWIG_InitializeModule: Cast List ******\n"); -#endif +PHP_MSHUTDOWN_FUNCTION(freeswitch) +{ + return SUCCESS; } - -/* This function will propagate the clientdata field of type to -* any new swig_type_info structures that have been added into the list -* of equivalent types. It is like calling -* SWIG_TypeClientData(type, clientdata) a second time. -*/ -SWIGRUNTIME void -SWIG_PropagateClientData(void) { - size_t i; - swig_cast_info *equiv; - static int init_run = 0; - - if (init_run) return; - init_run = 1; - - for (i = 0; i < swig_module.size; i++) { - if (swig_module.types[i]->clientdata) { - equiv = swig_module.types[i]->cast; - while (equiv) { - if (!equiv->converter) { - if (equiv->type && !equiv->type->clientdata) - SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); - } - equiv = equiv->next; - } +PHP_MINIT_FUNCTION(freeswitch) +{ + int i; + for (i = 0; swig_types_initial[i]; i++) { + swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]); } - } -} - -#ifdef __cplusplus -#if 0 -{ /* c-mode */ -#endif -} -#endif - - - SWIG_php_minit { - SWIG_InitializeModule(0); - /* oinit subsection */ -ZEND_INIT_MODULE_GLOBALS(freeswitch, freeswitch_init_globals, freeswitch_destroy_globals); /* Register resource destructors for pointer types */ le_swig__p_switch_core_session_t=zend_register_list_destructors_ex(_wrap_destroy_p_switch_core_session_t,NULL,(char *)(SWIGTYPE_p_switch_core_session_t->name),module_number); SWIG_TypeClientData(SWIGTYPE_p_switch_core_session_t,&le_swig__p_switch_core_session_t); -le_swig__p_p_void=zend_register_list_destructors_ex(_wrap_destroy_p_p_void,NULL,(char *)(SWIGTYPE_p_p_void->name),module_number); -SWIG_TypeClientData(SWIGTYPE_p_p_void,&le_swig__p_p_void); +le_swig__p_void=zend_register_list_destructors_ex(_wrap_destroy_p_void,NULL,(char *)(SWIGTYPE_p_void->name),module_number); +SWIG_TypeClientData(SWIGTYPE_p_void,&le_swig__p_void); le_swig__p_switch_input_callback_function_t=zend_register_list_destructors_ex(_wrap_destroy_p_switch_input_callback_function_t,NULL,(char *)(SWIGTYPE_p_switch_input_callback_function_t->name),module_number); SWIG_TypeClientData(SWIGTYPE_p_switch_input_callback_function_t,&le_swig__p_switch_input_callback_function_t); CG(active_class_entry) = NULL; @@ -1709,8 +1172,6 @@ CG(active_class_entry) = NULL; } PHP_RINIT_FUNCTION(freeswitch) { -/* rinit section */ - /* cinit subsection */ /* end cinit subsection */ @@ -1719,16 +1180,8 @@ PHP_RINIT_FUNCTION(freeswitch) return SUCCESS; } -PHP_MSHUTDOWN_FUNCTION(freeswitch) -{ -/* shutdown section */ - - return SUCCESS; -} PHP_RSHUTDOWN_FUNCTION(freeswitch) { -/* rshutdown section */ - return SUCCESS; } PHP_MINFO_FUNCTION(freeswitch)