diff options
author | Mark L. Woodward <mlwmohawk@php.net> | 2001-09-19 13:14:24 +0000 |
---|---|---|
committer | Mark L. Woodward <mlwmohawk@php.net> | 2001-09-19 13:14:24 +0000 |
commit | ba2bc65d31af9c1428b230bc1ecec723224c15a5 (patch) | |
tree | e86eeb009a6fb38838b28dcc0bb68ac98d7820f2 | |
parent | e261d310a04e251390e40eadcd5dddb28cf8329e (diff) | |
download | php-git-ba2bc65d31af9c1428b230bc1ecec723224c15a5.tar.gz |
Added
-rw-r--r-- | ext/msession/CREDITS | 3 | ||||
-rw-r--r-- | ext/msession/Makefile | 16 | ||||
-rw-r--r-- | ext/msession/Makefile.in | 11 | ||||
-rw-r--r-- | ext/msession/README | 21 | ||||
-rw-r--r-- | ext/msession/config.m4 | 15 | ||||
-rw-r--r-- | ext/msession/libs.mk | 7 | ||||
-rw-r--r-- | ext/msession/msession.c | 802 | ||||
-rw-r--r-- | ext/msession/msession.php | 10 | ||||
-rw-r--r-- | ext/msession/php_msession.h | 105 | ||||
-rw-r--r-- | ext/msession/reqclient.h | 108 |
10 files changed, 1098 insertions, 0 deletions
diff --git a/ext/msession/CREDITS b/ext/msession/CREDITS new file mode 100644 index 0000000000..4703783a74 --- /dev/null +++ b/ext/msession/CREDITS @@ -0,0 +1,3 @@ +msession +Mark L. Woodward +mailto:mlwmohawk@mohawksoft.com diff --git a/ext/msession/Makefile b/ext/msession/Makefile new file mode 100644 index 0000000000..8464c95a7d --- /dev/null +++ b/ext/msession/Makefile @@ -0,0 +1,16 @@ +top_srcdir = /local/projects/php/php4 +top_builddir = /local/projects/php/php4 +srcdir = /local/projects/php/php4/ext/msession +builddir = /local/projects/php/php4/ext/msession +VPATH = /local/projects/php/php4/ext/msession +# $Id$ + +LTLIBRARY_NAME = libmsession.la +LTLIBRARY_SOURCES = msession.c +LTLIBRARY_SHARED_NAME = msession.la + +LTLIBRARY_SHARED_LIBADD = $(PHOENIX_LIB) + +EXTRA_INCLUDES = $(PHOENIX_INCLUDE) + +include $(top_srcdir)/build/dynlib.mk diff --git a/ext/msession/Makefile.in b/ext/msession/Makefile.in new file mode 100644 index 0000000000..3eaadc0991 --- /dev/null +++ b/ext/msession/Makefile.in @@ -0,0 +1,11 @@ +# $Id$ + +LTLIBRARY_NAME = libmsession.la +LTLIBRARY_SOURCES = msession.c +LTLIBRARY_SHARED_NAME = msession.la + +LTLIBRARY_SHARED_LIBADD = $(PHOENIX_LIB) + +EXTRA_INCLUDES = $(PHOENIX_INCLUDE) + +include $(top_srcdir)/build/dynlib.mk diff --git a/ext/msession/README b/ext/msession/README new file mode 100644 index 0000000000..ef428f3849 --- /dev/null +++ b/ext/msession/README @@ -0,0 +1,21 @@ +This is msession, it is an interface to a stand-alone session +management system. The msession daemon can be found at +HTTP://www.mohawksoft.com under Project Phoenix + +Requirements: +Mohawk Software's Phoenix library. +Mohawk Software's msession daemon. + +http://www.mohawksoft.com/phoenix.html + +Building: +I am still a newbee at PHP hacking so I am scared to death +I will break something, and I (regretfully) have not invested +the time to make all this stuff automatic. + +In the config.m4 file you will need to specify the include +and library directories for Phoenix. The setting in config.m4 +is probably wrong. + + + diff --git a/ext/msession/config.m4 b/ext/msession/config.m4 new file mode 100644 index 0000000000..6354d1a367 --- /dev/null +++ b/ext/msession/config.m4 @@ -0,0 +1,15 @@ + +PHP_ARG_WITH(msession, for msession support, + [ --with-msession Include msession support]) + +if test "$PHP_MSESSION" != "no"; then + PHOENIX_HOME="/local/projects/phoenix" + AC_DEFINE(HAVE_MSESSION, 1, [ ]) + PHP_EXTENSION(msession, $ext_shared) + PHOENIX_INCLUDE_="-I/local/projects/phoenix/lib" + PHP_ADD_LIBRARY_WITH_PATH(phoenix, "/local/projects/phoenix/lib", PHOENIX_LIB) + + PHP_SUBST(PHOENIX_INCLUDE) + PHP_SUBST(PHOENIX_LIB) +fi + diff --git a/ext/msession/libs.mk b/ext/msession/libs.mk new file mode 100644 index 0000000000..7c6e176717 --- /dev/null +++ b/ext/msession/libs.mk @@ -0,0 +1,7 @@ +include $(top_builddir)/config_vars.mk +LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X) +LTLIBRARY_SHARED_OBJECTS = $(LTLIBRARY_OBJECTS:.lo=.slo) +$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES) + $(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD) + +targets = $(LTLIBRARY_NAME) diff --git a/ext/msession/msession.c b/ext/msession/msession.c new file mode 100644 index 0000000000..64c3bd609d --- /dev/null +++ b/ext/msession/msession.c @@ -0,0 +1,802 @@ +/* + +----------------------------------------------------------------------+ + | msession 1.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 2001 Mark L. Woodward (Mohawk Software) | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Mark Woodward <markw@mohawksoft.com> | + | Portions copyright the PHP group. | + +----------------------------------------------------------------------+ + */ +#include "php.h" +#include "php_ini.h" +#include "php_msession.h" +#include "reqclient.h" + + +#if HAVE_MSESSION + +// #define ERR_DEBUG + +/* If you declare any globals in php_msession.h uncomment this: + +ZEND_DECLARE_MODULE_GLOBALS(msession) +*/ + +/* True global resources - no need for thread safety here */ +static int le_msession; +static char g_defhost[]="localhost"; +static char * g_host=g_defhost; +static int g_port=8086; +static void * g_conn=NULL; +static REQB * g_reqb=NULL; + +#define REQ_SIZE 1024 + +#define GET_REQB \ + if(!g_reqb) { RETURN_NULL(); } + +/* Every user visible function must have an entry in msession_functions[]. +*/ +function_entry msession_functions[] = { + PHP_FE(confirm_msession_compiled, NULL) /* For testing, remove later. */ + PHP_FE(msession_connect,NULL) + PHP_FE(msession_disconnect,NULL) + PHP_FE(msession_lock,NULL) + PHP_FE(msession_unlock,NULL) + PHP_FE(msession_count,NULL) + PHP_FE(msession_create,NULL) + PHP_FE(msession_destroy,NULL) + PHP_FE(msession_set,NULL) + PHP_FE(msession_get,NULL) + PHP_FE(msession_find,NULL) + PHP_FE(msession_get_array,NULL) + PHP_FE(msession_timeout,NULL) + PHP_FE(msession_inc,NULL) + PHP_FE(msession_setdata,NULL) + PHP_FE(msession_getdata,NULL) + PHP_FE(msession_listvar,NULL) + PHP_FE(msession_list,NULL) + PHP_FE(msession_uniq,NULL) + {NULL, NULL, NULL} /* Must be the last line in msession_functions[] */ +}; + +zend_module_entry msession_module_entry = { + "msession", + msession_functions, + PHP_MINIT(msession), + PHP_MSHUTDOWN(msession), + PHP_RINIT(msession), /* Replace with NULL if there's nothing to do at request start */ + PHP_RSHUTDOWN(msession),/* Replace with NULL if there's nothing to do at request end */ + PHP_MINFO(msession), + STANDARD_MODULE_PROPERTIES +}; + +#ifdef COMPILE_DL_MSESSION +ZEND_GET_MODULE(msession) +#endif + +/* Remove comments and fill if you need to have entries in php.ini +PHP_INI_BEGIN() +PHP_INI_END() +*/ + +PHP_MINIT_FUNCTION(msession) +{ +/* Remove comments if you have entries in php.ini + REGISTER_INI_ENTRIES(); +*/ + g_conn = NULL; + g_host = g_defhost; + + return SUCCESS; +} + +PHP_MSHUTDOWN_FUNCTION(msession) +{ +/* Remove comments if you have entries in php.ini + UNREGISTER_INI_ENTRIES(); +*/ + return SUCCESS; +} + +/* Remove if there's nothing to do at request start */ +PHP_RINIT_FUNCTION(msession) +{ + return SUCCESS; +} + +/* Remove if there's nothing to do at request end */ +PHP_RSHUTDOWN_FUNCTION(msession) +{ + if(g_conn) + { + CloseReqConn(g_conn); + g_conn = NULL; + } + + if(g_reqb) + { + FreeRequestBuffer(g_reqb); + g_reqb=NULL; + } + return SUCCESS; +} + +PHP_MINFO_FUNCTION(msession) +{ + php_info_print_table_start(); + php_info_print_table_header(2, "msession support", "enabled"); + php_info_print_table_end(); + + /* Remove comments if you have entries in php.ini + DISPLAY_INI_ENTRIES(); + */ +} + +PHP_FUNCTION(confirm_msession_compiled) +{ + zval **arg; + int len; + char string[256]; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(arg); + + len = sprintf(string, "(%s) Module %s is compiled into PHP, g_host:%s, g_port:%d", + __TIME__, + Z_STRVAL_PP(arg), + g_host, + g_port); + RETURN_STRINGL(string, len, 1); +} +int PHPMsessionConnect(char *szhost, int nport) +{ + if(!g_reqb) + g_reqb = AllocateRequestBuffer(2048); + + if(!g_reqb) // no buffer, it won't work! + return 0; + + if(g_conn) + { + CloseReqConn(g_conn); + php_log_err("Call to connect with non-null g_conn"); + } + if(strcmp(g_host, szhost)) + { + if(g_host != g_defhost) + free(g_host); + g_host = strdup(szhost); + } + if(nport) + g_port = nport; + + g_conn = OpenReqConn(g_host, g_port); + +#ifdef ERR_DEBUG +{ + char buffer[256]; + sprintf(buffer,"Connect: %s [%d] = %d (%X)\n", + g_host, g_port, (g_conn != NULL), (unsigned)g_conn); + php_log_err(buffer); +} +#endif + return (g_conn) ? 1 : 0; +} + +void PHPMsessionDisconnect() +{ + if(g_conn) + { + CloseReqConn(g_conn); + g_conn = NULL; + } + if(g_reqb) + { + FreeRequestBuffer(g_reqb); + g_reqb = NULL; + } +} + +char *PHPMsessionGetData(char *session) +{ + char *ret = NULL; + +#ifdef ERR_DEBUG + sprintf(buffer,"PHPMsessionGetData: %s (%X)\n", session, (unsigned)g_conn); + php_log_err(buffer); +#endif + if(!g_reqb) + { + return NULL ; + } + + FormatRequest(&g_reqb, REQ_DATAGET, session,"","",0); + DoRequest(g_conn, &g_reqb); + + if(g_reqb->req.stat==REQ_OK) + ret = safe_estrdup(g_reqb->req.datum); + return ret; +} +int PHPMsessionSetData(char *session, char *data) +{ + int ret=0; +#ifdef ERR_DEBUG + sprintf(buffer,"PHPMsessionSetData: %s=%s (%X)\n", session, data, (unsigned)g_conn); + php_log_err(buffer); +#endif + if(!g_reqb) + { + return 0; + } + FormatRequest(&g_reqb, REQ_DATASET, session,"",data,0); + DoRequest(g_conn,&g_reqb); + ret = (g_reqb->req.stat==REQ_OK); + return ret; +} + +int PHPMsessionDestroy(char *session) +{ + int ret=0; + if(!g_reqb) + { + return 0; + } + FormatRequest(&g_reqb, REQ_DROP, session, "","",0); + DoRequest(g_conn,&g_reqb); + ret = (g_reqb->req.stat==REQ_OK); + return ret; +} + +PHP_FUNCTION(msession_connect) +{ + char *szhost; + int nport; + zval **zhost; + zval **zport; + + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zhost, &zport) == FAILURE) + { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(zhost); + convert_to_string_ex(zport); + + szhost = Z_STRVAL_PP(zhost); + nport = atoi(Z_STRVAL_PP(zport)); + + if(PHPMsessionConnect(szhost,nport)) + { + RETURN_TRUE; + } + else + { + RETURN_FALSE; + } +} +PHP_FUNCTION(msession_disconnect) +{ + PHPMsessionDisconnect(); + RETURN_NULL(); +} + +PHP_FUNCTION(msession_count) +{ + if(g_conn) + { + int count; + GET_REQB + FormatRequest(&g_reqb, REQ_COUNT, "", "","",0); + DoRequest(g_conn,&g_reqb); + + count = (g_reqb->req.stat == REQ_OK) ? g_reqb->req.param : 0; + + RETURN_LONG(count); + } + RETURN_NULL(); +} + +PHP_FUNCTION(msession_create) +{ + int stat; + char *val; + zval **session; + GET_REQB + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + + FormatRequest(&g_reqb, REQ_CREATE, Z_STRVAL_PP(session), "","",0); + DoRequest(g_conn,&g_reqb); + stat = (g_reqb->req.stat==REQ_OK); + if(stat) + { + RETURN_TRUE; + } + else + { + RETURN_FALSE; + } +} + +PHP_FUNCTION(msession_destroy) +{ + char *val; + zval **session; + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + + PHPMsessionDestroy(Z_STRVAL_PP(session)); + + RETURN_TRUE; +} +PHP_FUNCTION(msession_lock) +{ + long key; + char *val; + zval **session; + GET_REQB + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + + FormatRequest(&g_reqb, REQ_SLOCK, Z_STRVAL_PP(session), "","",0); + DoRequest(g_conn,&g_reqb); + + key = (g_reqb->req.stat == REQ_OK) ? g_reqb->req.param : 0; + + RETURN_LONG( key); +} +PHP_FUNCTION(msession_unlock) +{ + long lkey; + char *val; + zval **session; + zval **key; + GET_REQB + + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &key) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + convert_to_long_ex(key); + + FormatRequest(&g_reqb, REQ_SUNLOCK, Z_STRVAL_PP(session), "","",Z_LVAL_PP(key)); + DoRequest(g_conn,&g_reqb); + + lkey = (g_reqb->req.stat == REQ_OK) ? g_reqb->req.param : 0; + + RETURN_LONG( lkey); +} + +PHP_FUNCTION(msession_set) +{ + zval **session; + zval **name; + zval **value; + GET_REQB + + if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &session, &name, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + convert_to_string_ex(name); + convert_to_string_ex(value); + + FormatRequest(&g_reqb, REQ_SETVAL, Z_STRVAL_PP(session), Z_STRVAL_PP(name), Z_STRVAL_PP(value),0); + DoRequest(g_conn,&g_reqb); + + if(g_reqb->req.stat==REQ_OK) + { + RETURN_TRUE; + } + else + { + RETURN_FALSE; + } + +} +PHP_FUNCTION(msession_get) +{ + char *val; + zval **session; + zval **name; + zval **value; + GET_REQB + + if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &session, &name, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + convert_to_string_ex(name); + convert_to_string_ex(value); + + val = Z_STRVAL_PP(value); + + FormatRequest(&g_reqb, REQ_GETVAL, Z_STRVAL_PP(session), Z_STRVAL_PP(name), val,0); + DoRequest(g_conn, &g_reqb); + + if(g_reqb->req.stat==REQ_OK) + val = safe_estrdup(g_reqb->req.datum); + + RETURN_STRING(val, 0) +} +PHP_FUNCTION(msession_uniq) +{ + long val; + zval **param; + GET_REQB + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_long_ex(param); + val = Z_LVAL_PP(param); + + FormatRequest(&g_reqb, REQ_UNIQ,"", "", "",val); + DoRequest(g_conn, &g_reqb); + + if(g_reqb->req.stat==REQ_OK) + { + char *szval = safe_estrdup(g_reqb->req.datum); + RETURN_STRING(szval, 0) + } + else + { + RETURN_NULL(); + } +} +PHP_FUNCTION(msession_find) +{ + zval **name; + zval **value; + GET_REQB + + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(name); + convert_to_string_ex(value); + + FormatRequest(&g_reqb, REQ_FIND, "", Z_STRVAL_PP(name), Z_STRVAL_PP(value),0); + DoRequest(g_conn,&g_reqb); + + if(g_reqb->req.stat==REQ_OK && g_reqb->req.param) + { + int i; + char *str = g_reqb->req.datum; + array_init(return_value); + + for(i=0; i < g_reqb->req.param; i++) + { + int element_len = strlen(str); + char *data = safe_estrdup(str); + add_index_string(return_value, i, data, 0); + str += (element_len+1); + } + } + else + { + RETURN_NULL(); + } +} +PHP_FUNCTION(msession_list) +{ + zval **name; + zval **value; + GET_REQB + + if(!g_conn) + { + RETURN_FALSE; + } + + FormatRequest(&g_reqb, REQ_LIST, "", "", "",0); + DoRequest(g_conn,&g_reqb); + + if(g_reqb->req.stat==REQ_OK && g_reqb->req.param) + { + int i; + char *str = g_reqb->req.datum; + array_init(return_value); + + for(i=0; i < g_reqb->req.param; i++) + { + int element_len = strlen(str); + char *data = safe_estrdup(str); + add_index_string(return_value, i, data, 0); + str += (element_len+1); + } + } + else + { + RETURN_NULL(); + } +} + +PHP_FUNCTION(msession_get_array) +{ + zval **session; + GET_REQB + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + + FormatRequest(&g_reqb, REQ_GETALL, Z_STRVAL_PP(session), "", "",0); + DoRequest(g_conn,&g_reqb); + + array_init(return_value); + + if(g_reqb->req.stat == REQ_OK) + { + int i; + char *str = g_reqb->req.datum; + int num = g_reqb->req.param*2; + + for(i=0; i < num; i+=2) + { + int value_len; + int name_len; + char *value_data; + char *name_data; + + name_len = strlen(str); + name_data = safe_estrndup(str,name_len); + str += (name_len+1); + + value_len = strlen(str); + value_data = safe_estrndup(str,value_len); + str += (value_len+1); + add_assoc_string(return_value, name_data, value_data, 0); + } + } +} +PHP_FUNCTION(msession_listvar) +{ + zval **session; + zval **name; + GET_REQB + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(name); + + FormatRequest(&g_reqb, REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0); + DoRequest(g_conn,&g_reqb); + + array_init(return_value); + + if(g_reqb->req.stat == REQ_OK) + { + int i; + char *str = g_reqb->req.datum; + int num = g_reqb->req.param*2; + + for(i=0; i < num; i+=2) + { + int value_len; + int name_len; + char *value_data; + char *name_data; + + name_len = strlen(str); + name_data = safe_estrndup(str,name_len); + str += (name_len+1); + + value_len = strlen(str); + value_data = safe_estrndup(str,value_len); + str += (value_len+1); + add_assoc_string(return_value, name_data, value_data, 0); + } + } +} + +PHP_FUNCTION(msession_timeout) +{ + char *val; + zval **session; + int ac = ZEND_NUM_ARGS(); + int zstat = FAILURE; + int timeout = 0; + GET_REQB + + + if(ac == 1) + { + zstat = zend_get_parameters_ex(1, &session); + } + else if(ac == 2) + { + zval **param; + zstat = zend_get_parameters_ex(2, &session, ¶m); + convert_to_long_ex(param); + timeout = Z_LVAL_PP(param); + } + if(zstat == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + + FormatRequest(&g_reqb, REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout); + DoRequest(g_conn,&g_reqb); + + if(g_reqb->req.stat == REQ_OK) + { + RETURN_LONG( g_reqb->req.param); + } + else + { + RETURN_NULL(); + } +} +PHP_FUNCTION(msession_inc) +{ + char *val; + zval **session; + zval **name; + GET_REQB + + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &name) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + convert_to_string_ex(name); + + FormatRequest(&g_reqb, REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0); + DoRequest(g_conn, &g_reqb); + + if(g_reqb->req.stat==REQ_OK) + { + val = safe_estrdup(g_reqb->req.datum); + RETURN_STRING(val, 0) + } + else + { + RETURN_FALSE; + } +} +PHP_FUNCTION(msession_getdata) +{ + char *val; + zval **session; + + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + + val = PHPMsessionGetData(Z_STRVAL_PP(session)); + + if(val) + { + RETURN_STRING(val, 0) + } + else + { + RETURN_NULL(); + } + +} + +PHP_FUNCTION(msession_setdata) +{ + zval **session; + zval **value; + + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + convert_to_string_ex(session); + convert_to_string_ex(value); + + if(PHPMsessionSetData(Z_STRVAL_PP(session),Z_STRVAL_PP(value))) + { + RETURN_TRUE; + } + else + { + RETURN_FALSE; + } +} + +#endif /* HAVE_MSESSION */ diff --git a/ext/msession/msession.php b/ext/msession/msession.php new file mode 100644 index 0000000000..4eb9d9b6cd --- /dev/null +++ b/ext/msession/msession.php @@ -0,0 +1,10 @@ +<? +$module = 'msession'; +$function = 'confirm_' . $module . '_compiled'; +if (extension_loaded($module)) { + $str = $function($module); +} else { + $str = "Module $module is not compiled into PHP"; +} +echo "$str\n"; +?> diff --git a/ext/msession/php_msession.h b/ext/msession/php_msession.h new file mode 100644 index 0000000000..964013eb77 --- /dev/null +++ b/ext/msession/php_msession.h @@ -0,0 +1,105 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: | + | | + +----------------------------------------------------------------------+ + */ + +#ifndef PHP_MSESSION_H +#define PHP_MSESSION_H + +/* You should tweak config.m4 so this symbol (or some else suitable) + gets defined. +*/ +#if HAVE_MSESSION + +extern zend_module_entry msession_module_entry; +#define phpext_msession_ptr &msession_module_entry + +#ifdef PHP_WIN32 +#define PHP_MSESSION_API __declspec(dllexport) +#else +#define PHP_MSESSION_API +#endif + +PHP_MINIT_FUNCTION(msession); +PHP_MSHUTDOWN_FUNCTION(msession); +PHP_RINIT_FUNCTION(msession); +PHP_RSHUTDOWN_FUNCTION(msession); +PHP_MINFO_FUNCTION(msession); + +PHP_FUNCTION(confirm_msession_compiled); /* For testing, remove later. */ +PHP_FUNCTION(); +PHP_FUNCTION(msession_connect); +PHP_FUNCTION(msession_disconnect); +PHP_FUNCTION(msession_lock); +PHP_FUNCTION(msession_unlock); +PHP_FUNCTION(msession_count); +PHP_FUNCTION(msession_create); +PHP_FUNCTION(msession_destroy); +PHP_FUNCTION(msession_set); +PHP_FUNCTION(msession_get); +PHP_FUNCTION(msession_find); +PHP_FUNCTION(msession_get_array); +PHP_FUNCTION(msession_timeout); +PHP_FUNCTION(msession_inc); +PHP_FUNCTION(msession_setdata); +PHP_FUNCTION(msession_getdata); +PHP_FUNCTION(msession_listvar); +PHP_FUNCTION(msession_list); +PHP_FUNCTION(msession_uniq); +PHP_FUNCTION(); + +/* + Declare any global variables you may need between the BEGIN + and END macros here: + +ZEND_BEGIN_MODULE_GLOBALS(msession) + int global_variable; + void *conn; + char *host; +ZEND_END_MODULE_GLOBALS(msession) + +*/ +/* In every function that needs to use variables in php_msession_globals, + do call MSESSIONLS_FETCH(); after declaring other variables used by + that function, and always refer to them as MSESSIONG(variable). + You are encouraged to rename these macros something shorter, see + examples in any other php module directory. +*/ + +#ifdef ZTS +#define MSESSIONG(v) (msession_globals->v) +#define MSESSIONLS_FETCH() php_msession_globals *msession_globals = ts_resource(msession_globals_id) +#else +#define MSESSIONG(v) (msession_globals.v) +#define MSESSIONLS_FETCH() +#endif + +#else + +#define phpext_msession_ptr NULL + +#endif + +#endif /* PHP_MSESSION_H */ + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/msession/reqclient.h b/ext/msession/reqclient.h new file mode 100644 index 0000000000..46f98579f1 --- /dev/null +++ b/ext/msession/reqclient.h @@ -0,0 +1,108 @@ +/* + Mohawk Software Framework by Mohawk Software + Copyright (C) 1998-2001 Mark L. Woodward + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA + + If you want support or to professionally license this library, the author + can be reached at info@mohawksoft.com +*/ + +enum REQ_TYPES +{ + REQ_ERR, + REQ_OK, + REQ_STAT, + REQ_SETVAL, + REQ_GETVAL, + REQ_CREATE, + REQ_DROP, + REQ_GETALL, + REQ_FIND, + REQ_COUNT, + REQ_FLUSH, + REQ_SLOCK, + REQ_SUNLOCK, + REQ_TIMEOUT, + REQ_INC, + REQ_DATAGET, + REQ_DATASET, + REQ_LIST, + REQ_LISTVAR, + REQ_UNIQ, + REQ_LAST, + REQ_POPEN=1024, + REQ_PCLOSE +}; + +typedef struct _requestPacket +{ + int version; + int stat; + int len; + int session; + int name; + int value; + int param; + char datum[0]; +}REQ; + +typedef struct _requestBuf +{ + unsigned int type; + unsigned int size; + REQ req; +}REQB; + +#define MAX_REQ 16384 + +#define REQB_STATIC 1 +#define REQB_DYNAMIC 2 + +#define STATIC_REQB( len ) \ + char buffer [ len ]; \ + REQB *preq = StaticRequestBuffer(buffer, len); + +#if defined (__cplusplus) +extern "C" { +#endif + +#define SIZEREQB(REQB,SIZE) (((REQB)->size >= (unsigned int) SIZE) ? REQB : SizeRequestBuffer(REQB,SIZE)) +REQB *AllocateRequestBuffer(unsigned size); +void FreeRequestBuffer(REQB *req); +REQB *SizeRequestBuffer(REQB *req, unsigned int size); +REQB *StaticRequestBuffer(char *buffer, unsigned int cb); + +int FormatRequest(REQB **buffer, int stat, char *session, char *name, char *value, int param); +int FormatRequestMulti(REQB **buffer, int stat, char *session, int n, char **pairs, int param); +int DoSingleRequest(char *hostname, int port, REQB **preq); +void *OpenReqConn(char *hostname, int port); +void CloseReqConn(void *conn); +int DoRequest(void *conn, REQB **preq); +char *ReqErr(int param); + +#define ASSERT_STAT(PREQ) if(PREQ->stat != REQ_OK) \ + {fprintf(stderr, "Error in Request %s %d %s\n", \ + __FILE__,__LINE__, ReqErr(PREQ->param)); exit(-1); } + +#if defined (__cplusplus) + // C API but with class definitions + int ReadRequestTimeout(REQB **ppreq, MSock *sock, int timeout); + int ReadRequest(REQB **preq, MSock *sock); + int WriteRequest(REQB *preq, MSock *sock); +} +#endif + |