From: Mark L. Woodward Date: Sat, 22 Dec 2001 02:10:19 +0000 (+0000) Subject: reverted chages X-Git-Tag: PRE_ISSET_PATCH~457 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c057aaf67760f0e6a7f72a2781158c1e0a49ca9;p=php reverted chages Restored zend_get_parameters_ex Put back ansi brackets Added author note. Added msession_call --- diff --git a/ext/msession/msession.c b/ext/msession/msession.c index d4602f2f4f..bc5c2581cf 100644 --- a/ext/msession/msession.c +++ b/ext/msession/msession.c @@ -15,6 +15,18 @@ | Authors: Mark Woodward | | Portions copyright the PHP group. | +----------------------------------------------------------------------+ + | Notes from the author: | + | While I appreciate work done in this module by well meaning | + | developers, and this is the nature of Open Source. I would Really | + | appreciate a few considerations BEFORE you start mucking around: | + | DO NOT ever remove backward compatibility!!!! NEVER!!!! | + | DO NOT rename my variable names | + | DO NOT reformat by braces, if you don't like the way I brace my code | + | too bad. I take strides to follow the format that other authors use | + | I expect the same consideration. I use vi, not emacs. If you do not | + | have an editor that will not muck up my braces, do not edit this | + | code. | + +----------------------------------------------------------------------+ */ #include "php.h" #include "php_ini.h" @@ -31,6 +43,8 @@ // #define ERR_DEBUG +#define OLD_ZEND_PARAM + #ifdef ERR_DEBUG #define ELOG( str ) php_log_err( str ) #else @@ -39,7 +53,6 @@ char g_msession[]="Msession"; - #if HAVE_MSESSION #ifdef HAVE_PHP_SESSION @@ -64,7 +77,10 @@ static REQB * g_reqb=NULL; #define GET_REQB \ if(!g_reqb) { RETURN_NULL(); } +static char errfmt[]="MSession Error :%s"; +/* Every user visible function must have an entry in msession_functions[]. +*/ function_entry msession_functions[] = { PHP_FE(msession_connect,NULL) PHP_FE(msession_disconnect,NULL) @@ -87,6 +103,7 @@ function_entry msession_functions[] = { PHP_FE(msession_uniq,NULL) PHP_FE(msession_randstr,NULL) PHP_FE(msession_plugin,NULL) + PHP_FE(msession_call,NULL) {NULL, NULL, NULL} /* Must be the last line in msession_functions[] */ }; @@ -95,11 +112,11 @@ zend_module_entry msession_module_entry = { "msession", msession_functions, PHP_MINIT(msession), - NULL, - NULL, - PHP_RSHUTDOWN(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), - NO_VERSION_YET, + NO_VERSION_YET, STANDARD_MODULE_PROPERTIES }; @@ -107,8 +124,16 @@ zend_module_entry msession_module_entry = { 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; @@ -119,18 +144,34 @@ PHP_MINIT_FUNCTION(msession) 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) { + if(g_conn) + { CloseReqConn(g_conn); g_conn = NULL; } - if(g_reqb) { + if(g_reqb) + { FreeRequestBuffer(g_reqb); g_reqb=NULL; } - return SUCCESS; } @@ -139,52 +180,56 @@ 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(); + */ } int PHPMsessionConnect(const char *szhost, int nport) { - if(!g_reqb) + if(!g_reqb) g_reqb = AllocateRequestBuffer(2048); - + if(!g_reqb) // no buffer, it won't work! return 0; - if(g_conn) { + if(g_conn) + { CloseReqConn(g_conn); php_log_err("Call to connect with non-null g_conn"); } - - if(strcmp(g_host, szhost)) { + 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); - } +{ + 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) { + if(g_conn) + { CloseReqConn(g_conn); g_conn = NULL; } - - if(g_reqb) { + if(g_reqb) + { FreeRequestBuffer(g_reqb); g_reqb = NULL; } @@ -193,98 +238,114 @@ void PHPMsessionDisconnect() char *PHPMsessionGetData(const char *session) { char *ret = NULL; - #ifdef ERR_DEBUG - { - char buffer [256]; - sprintf(buffer,"PHPMsessionGetData: %s (%X)\n", session, (unsigned)g_conn); - php_log_err(buffer); - } +{ + char buffer [256]; + sprintf(buffer,"PHPMsessionGetData: %s (%X)\n", session, (unsigned)g_conn); + php_log_err(buffer); +} #endif - - if(!g_reqb) + 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); + else if(g_reqb->req.param != REQE_NOSESSION) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); return ret; } - int PHPMsessionSetData(const char *session, const char *data) { int ret=0; - #ifdef ERR_DEBUG - { - char buffer [256]; - sprintf(buffer,"PHPMsessionSetData: %s=%s (%X)\n", session, data, (unsigned)g_conn); - php_log_err(buffer); - } +{ + char buffer [256]; + 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); - + if(g_reqb->req.stat!=REQ_OK) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); return ret; } int PHPMsessionDestroy(const char *session) { int ret=0; - if(!g_reqb) - return 0; - + { + return 0; + } FormatRequest(&g_reqb, REQ_DROP, session, "","",0); DoRequest(g_conn,&g_reqb); ret = (g_reqb->req.stat==REQ_OK); - + if(g_reqb->req.stat!=REQ_OK) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); return ret; } -/* {{{ proto bool msession_connect(string host, string port) - Connect to msession sever */ PHP_FUNCTION(msession_connect) { - char *host; - int host_len, port; + char *szhost; + int nport; + +#ifdef OLD_ZEND_PARAM + zval **zhost; + zval **zport; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl" - , &host, &host_len, &port - ) == FAILURE) { + 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)); +#else + int cbhost; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl" , + &szhost, &cbhost, &nport) == FAILURE) + { return; } - - RETVAL_BOOL( PHPMsessionConnect(host,port) ? TRUE : FALSE ); +#endif + if(PHPMsessionConnect(szhost,nport)) + { + RETURN_TRUE; + } + else + { + php_error(E_WARNING, "MSession connect failed"); + RETURN_FALSE; + } } -/* }}} */ - -/* {{{ proto void msession_disconnect(void) - Close connection to msession server */ PHP_FUNCTION(msession_disconnect) { PHPMsessionDisconnect(); RETURN_NULL(); } -/* }}} */ -/* {{{ proto int msession_count(void) - Get session count */ PHP_FUNCTION(msession_count) { - if(g_conn) { + if(g_conn) + { int count; - - GET_REQB; - + GET_REQB FormatRequest(&g_reqb, REQ_COUNT, "", "","",0); DoRequest(g_conn,&g_reqb); @@ -294,340 +355,487 @@ PHP_FUNCTION(msession_count) } RETURN_NULL(); } -/* }}} */ -/* {{{ proto bool msession_create(string session) - Create a session */ PHP_FUNCTION(msession_create) { - char *session; - int session_len; - - GET_REQB; + int stat; + char *szsession; +#ifdef OLD_ZEND_PARAM + zval **session; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + szsession = Z_STRVAL_PP(session); +#else + int cbsession; + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" , + &szsession, &cbsession) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_CREATE, session, "","",0); + } + FormatRequest(&g_reqb, REQ_CREATE, szsession, "","",0); DoRequest(g_conn,&g_reqb); - - RETVAL_BOOL( (g_reqb->req.stat==REQ_OK) ? TRUE : FALSE ); + if(g_reqb->req.stat==REQ_OK) + { + RETURN_TRUE; + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_FALSE; + } } -/* }}} */ -/* {{{ proto bool msession_destroy(string name) - Destroy a session */ PHP_FUNCTION(msession_destroy) { - char *session; - int session_len; - - GET_REQB; + char *szsession; +#ifdef OLD_ZEND_PARAM + zval **session; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + szsession = Z_STRVAL_PP(session); +#else + int cbsession; + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" , + &szsession, &cbsession) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - PHPMsessionDestroy(session); + } + PHPMsessionDestroy(szsession); RETURN_TRUE; } -/* }}} */ - -/* {{{ proto int msession_lock(string name) - Lock a session */ PHP_FUNCTION(msession_lock) { - char *session; - int session_len; - - GET_REQB; + char *szsession; +#ifdef OLD_ZEND_PARAM + zval **session; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + szsession = Z_STRVAL_PP(session); +#else + int cbsession; + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" , + &szsession, &cbsession) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_SLOCK, session, "", "", 0); + } + + FormatRequest(&g_reqb, REQ_SLOCK, szsession, "","",0); DoRequest(g_conn,&g_reqb); - RETURN_LONG( (g_reqb->req.stat == REQ_OK) ? g_reqb->req.param : 0 ); -} -/* }}} */ + if(g_reqb->req.stat==REQ_OK) + { + RETURN_LONG(g_reqb->req.param); + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_FALSE; + } -/* {{{ proto int msession_unlock(string session, int key) - Unlock a session */ +} PHP_FUNCTION(msession_unlock) { - long key; - char *session; - int session_len; - - GET_REQB; + char *szsession; + long lkey; +#ifdef OLD_ZEND_PARAM + zval **session; + zval **key; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl" - , &session, &session_len - , &key - ) == FAILURE) { - return; + GET_REQB + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &key) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + szsession = Z_STRVAL_PP(session); + convert_to_long_ex(key); + lkey = Z_LVAL_PP(key); +#else + int cbsession; + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl" , &szsession, &cbsession, &lkey) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_SUNLOCK, session, "", "", key); + } + FormatRequest(&g_reqb, REQ_SUNLOCK, szsession, "","",lkey); DoRequest(g_conn,&g_reqb); - RETURN_LONG( (g_reqb->req.stat == REQ_OK) ? g_reqb->req.param : 0 ); + if(g_reqb->req.stat==REQ_OK) + { + RETURN_LONG(g_reqb->req.param); + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_FALSE; + } } -/* }}} */ -/* {{{ proto bool msession_set(string session, string name, string value) - Set value in session */ PHP_FUNCTION(msession_set) { - char *session, *name, *value; - int session_len, name_len, value_len; + char *szsession; + char *szname; + char *szvalue; + +#ifdef OLD_ZEND_PARAM + 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; + } + convert_to_string_ex(session); + convert_to_string_ex(name); + convert_to_string_ex(value); + + szsession = Z_STRVAL_PP(session); + szname = Z_STRVAL_PP(name); + szvalue = Z_STRVAL_PP(value); +#else + int cbsession, cbname, cbvalue; GET_REQB; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss" - , &session, &session_len - , &name, &name_len - , &value, &value_len - ) == FAILURE) { - return; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", + &szsession, &cbsession , &szname, &cbname,&szvalue, &cbvalue) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_SETVAL, session, name, value, 0); + } + FormatRequest(&g_reqb, REQ_SETVAL, szsession, szname, szvalue, 0); DoRequest(g_conn,&g_reqb); - RETVAL_BOOL( (g_reqb->req.stat==REQ_OK) ? TRUE : FALSE); -} -/* }}} */ + if(g_reqb->req.stat==REQ_OK) + { + RETURN_TRUE; + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_FALSE; + } -/* {{{ proto string msession_get(string session, string name, string value) - Get value from session */ +} PHP_FUNCTION(msession_get) { - char *session, *name, *value; - int session_len, name_len, value_len; - - GET_REQB; + char *szsession; + char *szname; + char *szvalue; +#ifdef OLD_ZEND_PARAM + zval **session; + zval **name; + zval **value; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss" - , &session, &session_len - , &name, &name_len - , &value, &value_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &session, &name, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + convert_to_string_ex(name); + convert_to_string_ex(value); + szsession = Z_STRVAL_PP(session); + szname = Z_STRVAL_PP(name); + szvalue = Z_STRVAL_PP(value); +#else + int cbsession, cbname, cbvalue; + GET_REQB; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", + &szsession, &cbsession,&szname,&cbname,&szvalue,&cbvalue) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_GETVAL, session, name, value, 0); + } + FormatRequest(&g_reqb, REQ_GETVAL, szsession, szname, szvalue,0); DoRequest(g_conn, &g_reqb); if(g_reqb->req.stat==REQ_OK) - value = safe_estrdup(g_reqb->req.datum); + { + szvalue = safe_estrdup(g_reqb->req.datum); + RETURN_STRING(szvalue, 0) + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_NULL(); + } - RETURN_STRING(value, 0); } -/* }}} */ - -/* {{{ proto string msession_uniq(int param) - Get uniq id */ PHP_FUNCTION(msession_uniq) { long val; - - GET_REQB; +#ifdef OLD_ZEND_PARAM + zval **param; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l" - , &val - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE) + { + WRONG_PARAM_COUNT; } - + convert_to_long_ex(param); + val = Z_LVAL_PP(param); +#else + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l" , &val) == FAILURE) + { + WRONG_PARAM_COUNT; + } +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_UNIQ,"", "", "", val); + } + FormatRequest(&g_reqb, REQ_UNIQ,"", "", "",val); DoRequest(g_conn, &g_reqb); - if(g_reqb->req.stat==REQ_OK) { + if(g_reqb->req.stat==REQ_OK) + { char *szval = safe_estrdup(g_reqb->req.datum); - RETURN_STRING(szval, 0); - } else { + RETURN_STRING(szval, 0) + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_NULL(); } } -/* }}} */ - -/* {{{ proto string msession_randstr(int param) - Get random string */ PHP_FUNCTION(msession_randstr) { long val; - - GET_REQB; +#ifdef OLD_ZEND_PARAM + zval **param; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l" - , &val - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE) + { + WRONG_PARAM_COUNT; } - + convert_to_long_ex(param); + val = Z_LVAL_PP(param); +#else + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l" , &val) == FAILURE) + { + WRONG_PARAM_COUNT; + } +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_RANDSTR,"", "", "", val); + } + FormatRequest(&g_reqb, REQ_RANDSTR,"", "", "",val); DoRequest(g_conn, &g_reqb); - if(g_reqb->req.stat==REQ_OK) { + if(g_reqb->req.stat==REQ_OK) + { char *szval = safe_estrdup(g_reqb->req.datum); - RETURN_STRING(szval, 0); - } else { + RETURN_STRING(szval, 0) + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_NULL(); } } -/* }}} */ - -/* {{{ proto array msession_find(string name, string value) - Find value */ PHP_FUNCTION(msession_find) { - char *name, *value; - int name_len, value_len; - - GET_REQB; + char *szname; + char *szvalue; +#ifdef OLD_ZEND_PARAM + zval **name; + zval **value; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss" - , &name, &name_len - , &value, &value_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(name); + convert_to_string_ex(value); + szname = Z_STRVAL_PP(name); + szvalue = Z_STRVAL_PP(value); +#else + int cbname, cbvalue; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", + &szname,&cbname,&szvalue,&cbvalue) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_FIND, "", name, value, 0); + } + + FormatRequest(&g_reqb, REQ_FIND, "", szname, szvalue,0); DoRequest(g_conn,&g_reqb); - if(g_reqb->req.stat==REQ_OK && g_reqb->req.param) { + 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++) { + 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 { + } + else if(g_reqb->req.stat != REQ_OK) + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_NULL(); } } -/* }}} */ - -/* {{{ proto array msession_list(void) - List ... ? */ PHP_FUNCTION(msession_list) { - GET_REQB; + GET_REQB if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_LIST, "", "", "", 0); + } + + FormatRequest(&g_reqb, REQ_LIST, "", "", "",0); DoRequest(g_conn,&g_reqb); - - if(g_reqb->req.stat==REQ_OK && g_reqb->req.param) { + + 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++) { + + 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 { + } + else if(g_reqb->req.stat != REQ_OK) + { + // May this should be an error? + if(g_reqb->req.param != REQE_NOSESSION) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_NULL(); } } -/* }}} */ -/* {{{ proto array msession_get_array(string session) - Get array of ... ? */ PHP_FUNCTION(msession_get_array) { - char *session; - int session_len; - - GET_REQB; + char *szsession; +#ifdef OLD_ZEND_PARAM + zval **session; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(session); + szsession = Z_STRVAL_PP(session); +#else + int cbsession; + GET_REQB + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" , &szsession, &cbsession) == FAILURE) + { + WRONG_PARAM_COUNT; } - +#endif if(!g_conn) + { RETURN_FALSE; - FormatRequest(&g_reqb, REQ_GETALL, session, "", "", 0); + } + + FormatRequest(&g_reqb, REQ_GETALL, szsession, "", "",0); DoRequest(g_conn,&g_reqb); array_init(return_value); - if(g_reqb->req.stat == REQ_OK) { + 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) { + + 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); } } + else + { + if(g_reqb->req.param != REQE_NOSESSION) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_NULL(); + } } -/* }}} */ - -/* {{{ proto bool msession_set_array(string session, array tuples) - Set array of ... */ PHP_FUNCTION(msession_set_array) { zval **session; @@ -641,26 +849,27 @@ PHP_FUNCTION(msession_set_array) char **pairs; HashTable *htTuples; int i; + int countpair; - GET_REQB; + GET_REQB - ELOG("msession_set_array"); - - if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE) { - WRONG_PARAM_COUNT; - } - + if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE) + { + WRONG_PARAM_COUNT; + } if(!g_conn) + { RETURN_FALSE; - + } htTuples = Z_ARRVAL_PP(tuples); countpair = zend_hash_num_elements(htTuples); pairs = (char **)emalloc(sizeof(char *) * countpair * 2); - if(!pairs) { + if(!pairs) + { ELOG("no pairs"); RETURN_FALSE; } @@ -672,13 +881,16 @@ PHP_FUNCTION(msession_set_array) ELOG("reset pointer"); - for(i=0; i < countpair; i++) { + for(i=0; i < countpair; i++) + { if(zend_hash_get_current_data_ex(htTuples, (void **)&entry, &pos) != SUCCESS) break; - if(entry) { + if(entry) + { convert_to_string_ex(entry); - if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING) { + if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING) + { #ifdef ERR_DEBUG { char buffer [256]; @@ -692,214 +904,299 @@ PHP_FUNCTION(msession_set_array) } zend_hash_move_forward_ex(htTuples, &pos); } - + ELOG("FormatMulti"); FormatRequestMulti(&g_reqb, REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0); DoRequest(g_conn,&g_reqb); + + if(g_reqb->req.stat != REQ_OK) + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); efree((void *)pairs); + RETURN_NULL(); } -/* }}} */ -/* {{{ proto array msession_listvar(string name) - List variables in session */ PHP_FUNCTION(msession_listvar) { - char *session; - int session_len; - - GET_REQB; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; - } + zval **name; + GET_REQB + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) + { + WRONG_PARAM_COUNT; + } if(!g_conn) + { RETURN_FALSE; - - FormatRequest(&g_reqb, REQ_LISTVAR, "", session, "", 0); + } + + 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) { + 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) { + + 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); } } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_NULL(); + } } -/* }}} */ -/* {{{ proto int msession_timeout(string session [, int param ]) - Set/get session timeout */ PHP_FUNCTION(msession_timeout) { - char *session; - int session_len; + zval **session; + int ac = ZEND_NUM_ARGS(); int zstat = FAILURE; int timeout = 0; - - GET_REQB; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l" - , &session, &session_len - , &timeout - ) == FAILURE) { - return; - } + 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; - - FormatRequest(&g_reqb, REQ_TIMEOUT, session, "", "", timeout); + } + 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) { + if(g_reqb->req.stat == REQ_OK) + { RETURN_LONG( g_reqb->req.param); - } else { + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_NULL(); } } -/* }}} */ - -/* {{{ proto string msession_inc(string session, string name) - Increment value in session */ PHP_FUNCTION(msession_inc) { - char *session, *name; - int session_len, name_len; char *val; - - GET_REQB; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss" - , &session, &session_len - , &name, &name_len - ) == FAILURE) { - return; - } + 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, session, name, 0, 0); + 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) { + if(g_reqb->req.stat==REQ_OK) + { val = safe_estrdup(g_reqb->req.datum); - RETURN_STRING(val, 0); - } else { + RETURN_STRING(val, 0) + } + else + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_FALSE; } } -/* }}} */ - -/* {{{ proto string msession_getdata(string session) - Get data ... ? */ PHP_FUNCTION(msession_getdata) { char *val; - char *session; - int session_len; - - GET_REQB; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s" - , &session, &session_len - ) == FAILURE) { - return; - } + zval **session; + if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) + { + WRONG_PARAM_COUNT; + } if(!g_conn) + { RETURN_FALSE; - - val = PHPMsessionGetData(session); - - if(val) { - RETURN_STRING(val, 0); - } else { + } + + convert_to_string_ex(session); + + val = PHPMsessionGetData(Z_STRVAL_PP(session)); + + if(val) + { + RETURN_STRING(val, 0) + } + else + { RETURN_NULL(); } + } -/* }}} */ -/* {{{ proto bool msession_setdata(string session, string value) - Set data ... ?*/ PHP_FUNCTION(msession_setdata) { - char *session, *value; - int session_len, value_len; - - GET_REQB; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss" - , &session, &session_len - , &value, &value_len - ) == FAILURE) { - return; - } + 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; - - RETVAL_BOOL(PHPMsessionSetData(session, value) ? TRUE : FALSE); -} -/* }}} */ + } + convert_to_string_ex(session); + convert_to_string_ex(value); -/* {{{ proto string msession_plugin(string session, string val [, string param ]) - Register a session plugin ... ? */ + if(PHPMsessionSetData(Z_STRVAL_PP(session),Z_STRVAL_PP(value))) + { + RETURN_TRUE; + } + else + { + RETURN_FALSE; + } +} PHP_FUNCTION(msession_plugin) { - char *session, *value, *param=NULL; - int session_len, value_len, param_len; int ret; char *retval; - int zstat = FAILURE; - int timeout = 0; - - GET_REQB; + zval **session; + zval **val; + zval **param=NULL; + GET_REQB - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s" - , &session, &session_len - , &value, &value_len - , ¶m, ¶m_len - ) == FAILURE) { - return; + if(ZEND_NUM_ARGS() == 3) + { + ret = zend_get_parameters_ex(3, &session, &val, ¶m); + convert_to_string_ex(param); } + else if(ZEND_NUM_ARGS() == 2) + { + ret = zend_get_parameters_ex(2, &session, &val); + } + else + { + WRONG_PARAM_COUNT; + } + if(ret == FAILURE) + { + WRONG_PARAM_COUNT; + } + if(!g_conn) + { + RETURN_FALSE; + } + + convert_to_string_ex(session); + convert_to_string_ex(val); + + ret = atoi(Z_STRVAL_PP(val)); + + FormatRequest(&g_reqb, REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ? Z_STRVAL_PP(param) : "",ret); + DoRequest(g_conn, &g_reqb); + + if(g_reqb->req.stat==REQ_OK && g_reqb->req.len) + { + retval = safe_estrdup(g_reqb->req.datum); + RETURN_STRING(retval, 0) + } + else if(g_reqb->req.stat != REQ_OK) + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); + RETURN_FALSE; + + } +} +#define MAX_EXT_VAL 5 +PHP_FUNCTION(msession_call) +{ + int n; + int i; + int ret; + char *retval; + zval **val[MAX_EXT_VAL]; + char *strings[MAX_EXT_VAL+1]; + zval **param=NULL; + GET_REQB + n = ZEND_NUM_ARGS(); + + if((n < 1) || (n > MAX_EXT_VAL)) + { + WRONG_PARAM_COUNT; + } + + ret = zend_get_parameters_ex(ZEND_NUM_ARGS(), &val[0],&val[1],&val[2],&val[3],&val[4]); + + if(ret == FAILURE) + { + WRONG_PARAM_COUNT; + } if(!g_conn) + { RETURN_FALSE; + } - ret = atoi(value); + for(i=0; i < n; i++) + { + convert_to_string_ex(val[i]); + strings[i] = Z_STRVAL_PP(val[i]); + } - FormatRequest(&g_reqb, REQ_PLUGIN, session, value, param ? param : "",ret); + FormatRequestStrings(&g_reqb, REQ_CALL, NULL , n, strings); DoRequest(g_conn, &g_reqb); - if(g_reqb->req.stat==REQ_OK && g_reqb->req.len) { + if(g_reqb->req.stat==REQ_OK && g_reqb->req.len) + { retval = safe_estrdup(g_reqb->req.datum); - RETURN_STRING(retval, 0); - } else { + RETURN_STRING(retval, 0) + } + else if(g_reqb->req.stat != REQ_OK) + { + php_error(E_WARNING, errfmt, ReqErr(g_reqb->req.param)); RETURN_FALSE; } } -/* }}} */ #ifdef HAVE_PHP_SESSION @@ -920,17 +1217,17 @@ PS_CLOSE_FUNC(msession) PS_READ_FUNC(msession) { ELOG( "ps_read_msession"); - *val = PHPMsessionGetData(key); - - if(*val) { + if(*val) + { *vallen = strlen(*val); - } else { + } + else + { *val = emalloc(1); **val=0; *vallen = 0; } - return SUCCESS; } @@ -953,12 +1250,3 @@ PS_GC_FUNC(msession) } #endif /* HAVE_PHP_SESSION */ #endif /* HAVE_MSESSION */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */