| Authors: Mark Woodward <markw@mohawksoft.com> |
| 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"
// #define ERR_DEBUG
+#define OLD_ZEND_PARAM
+
#ifdef ERR_DEBUG
#define ELOG( str ) php_log_err( str )
#else
char g_msession[]="Msession";
-
#if HAVE_MSESSION
#ifdef HAVE_PHP_SESSION
#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)
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[] */
};
"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
};
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) {
+ if(g_conn)
+ {
CloseReqConn(g_conn);
g_conn = NULL;
}
- if(g_reqb) {
+ if(g_reqb)
+ {
FreeRequestBuffer(g_reqb);
g_reqb=NULL;
}
-
return SUCCESS;
}
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;
}
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);
}
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;
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;
}
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];
}
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
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;
}
}
#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
- */