mlwmohawk Sun Jan 19 22:16:23 2003 EDT
Modified files:
/php4/ext/msession README msession.c php_msession.h reqclient.h
Log:
Updated for Msession 1.2.
Includes new APIs
Index: php4/ext/msession/README
diff -u php4/ext/msession/README:1.5 php4/ext/msession/README:1.6
--- php4/ext/msession/README:1.5 Sun Dec 23 14:57:32 2001
+++ php4/ext/msession/README Sun Jan 19 22:16:22 2003
@@ -1,8 +1,8 @@
This is msession, it is an interface to a stand-alone session
management system. The msession daemon can be found at
-Mohawk Software's web site, under Project Phoenix
+Mohawk Software's web site.
-http://www.mohawksoft.com/phoenix.html
+http://www.mohawksoft.com
Requirements:
Mohawk Software's Phoenix library.
Index: php4/ext/msession/msession.c
diff -u php4/ext/msession/msession.c:1.39 php4/ext/msession/msession.c:1.40
--- php4/ext/msession/msession.c:1.39 Sat Jan 18 16:31:06 2003
+++ php4/ext/msession/msession.c Sun Jan 19 22:16:22 2003
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| msession 1.0 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
+ | Copyright (c) 1997-2002 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 |
@@ -16,6 +16,7 @@
| Portions copyright the PHP group. |
+----------------------------------------------------------------------+
*/
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -39,17 +40,10 @@
#define SID_LEN 32
#endif
+
/* Uncomment to get debugging messages */
/* #define ERR_DEBUG */
-/* Uncomment for conections which are persistent for a process
- * This will be faster but allocates a thread in the msession
- * daemon.
- * Pros: No reconnect overhead.
- * cons: Msession maintains a thread per connection.
- */
-/* #define PERSISTENT_CONN */
-
#ifdef ERR_DEBUG
#define ELOG( str ) php_log_err( str )
#else
@@ -59,8 +53,8 @@
/* Test if system is OK fror use. */
/* Macros may be ugly, but I can globaly add debuging when needed. */
#define IFCONNECT_BEGIN if(s_reqb && s_conn) {
-#define IFCONNECT_ENDVAL(V) } else { php_error_docref(NULL TSRMLS_CC, E_WARNING,
s_szNoInit); return V; }
-#define IFCONNECT_END } else { php_error_docref(NULL TSRMLS_CC, E_WARNING,
s_szNoInit); RETURN_FALSE; }
+#define IFCONNECT_ENDVAL(V) } else { php_error(E_WARNING, s_szNoInit,
+get_active_function_name(TSRMLS_C)); return V; }
+#define IFCONNECT_END } else { php_error(E_WARNING, s_szNoInit,
+get_active_function_name(TSRMLS_C)); RETURN_FALSE; }
#ifndef HAVE_PHP_SESSION
#error HAVE_PHP_SESSION not defined
@@ -86,6 +80,9 @@
#warning Backward compatible msession extension requires PHP sessions. If PHP
compiles and links, you can ignore this warning.
#elif (ZEND_MODULE_API_NO >= 20010901)
#define PHP_4_1
+#else
+#warning ZEND_MODULE_API_NO not defined
+#define PHP_4_1
#endif
/*
@@ -117,8 +114,8 @@
#endif
/* Static strings */
-static char s_szNoInit[]="Msession not initialized";
-static char s_szErrFmt[]="%s";
+static char s_szNoInit[]="%s(): Msession not initialized";
+static char s_szErrFmt[]="%s(): %s";
/* Per-process variables need by msession */
static char s_szdefhost[]="localhost";
@@ -151,6 +148,8 @@
PHP_FE(msession_plugin,NULL)
PHP_FE(msession_call,NULL)
PHP_FE(msession_ctl,NULL)
+ PHP_FE(msession_exec,NULL)
+ PHP_FE(msession_ping,NULL)
{NULL, NULL, NULL}
};
@@ -198,19 +197,6 @@
PHP_RSHUTDOWN_FUNCTION(msession)
{
-#ifndef PERSISTENT_CONN
- if(s_conn)
- {
- CloseReqConn(s_conn);
- s_conn = NULL;
- }
-
- if(s_reqb)
- {
- FreeRequestBuffer(s_reqb);
- s_reqb=NULL;
- }
-#endif
return SUCCESS;
}
@@ -220,34 +206,76 @@
php_info_print_table_header(2, "msession support", "enabled");
php_info_print_table_end();
}
+#define RPT_CONN_ERR
+#ifdef ERR_DEBUG
+#undef RPT_CONN_ERR
+#define RPT_CONN_ERR if(s_reqb->req.stat == REQ_ERR && (result == REQE_BADCONN ||
+result == REQE_NOSEND)) \
+ ELOG("Socket reports closed");
+ \
+ else if(s_reqb->req.stat == REQ_ERR)\
+ ELOG("MSession call failed");\
+#else
+#endif
-/* The PHP Version of DoRequest */
-/* Manages connections that have been disconnected */
-int PHPDoRequest(void **pconn, REQB **ppreq)
-{
- void *conn = *pconn;
- int stat = (*ppreq)->req.stat;
- int param = (*ppreq)->req.param;
+#define CONN_ERR(reqb)\
+ (reqb->req.stat == REQ_ERR) && (reqb->req.param == REQE_BADCONN ||
+reqb->req.param == REQE_NOSEND)
- int result = DoRequest(conn, ppreq);
+int PHPExecRequest(int req, char *session, char *d1, char *d2,int param)
+{
+ int result;
+ FormatRequest(&s_reqb, req, session, d1, d2, param);
+ result = DoRequest(s_conn, &s_reqb);
/* Server closed the connection! */
- if((*ppreq)->req.stat == REQ_ERR && (result == REQE_BADCONN || result ==
REQE_NOSEND))
+ if(CONN_ERR(s_reqb))
{
- /* In the case of a bad socket, this should be */
- /* all that changs! */
- (*ppreq)->req.stat = stat;
- (*ppreq)->req.param = param;
ELOG("Connection was closed by server");
- if(ReopenReqConn(conn))
- result = DoRequest(*pconn, ppreq);
+ if(ReopenReqConn(s_conn))
+ {
+ FormatRequest(&s_reqb, req, session, d1, d2, param);
+ result = DoRequest(s_conn, &s_reqb);
+ }
}
-#ifdef ERR_DEBUG
- if((*ppreq)->req.stat == REQ_ERR && (result == REQE_BADCONN || result ==
REQE_NOSEND))
- ELOG("Socket reports closed");
-#endif
+ RPT_CONN_ERR
return result;
}
+int PHPExecRequestMulti(int req, char *session, int n, char **pairs, int param)
+{
+ int result;
+ FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
+ result = DoRequest(s_conn, &s_reqb);
+
+ /* Server closed the connection! */
+ if(CONN_ERR(s_reqb))
+ {
+ ELOG("Connection was closed by server");
+ if(ReopenReqConn(s_conn))
+ {
+ FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
+ result = DoRequest(s_conn, &s_reqb);
+ }
+ }
+ RPT_CONN_ERR
+ return result;
+}
+int PHPExecRequestStrings(int req, char *session, int n, char **strings)
+{
+ int result;
+ FormatRequestStrings(&s_reqb, req, session, n, strings);
+ result = DoRequest(s_conn, &s_reqb);
+ /* Server closed the connection! */
+ if(CONN_ERR(s_reqb))
+ {
+ ELOG("Connection was closed by server");
+ if(ReopenReqConn(s_conn))
+ {
+ FormatRequestStrings(&s_reqb, req, session, n, strings);
+ result = DoRequest(s_conn, &s_reqb);
+ }
+ }
+ RPT_CONN_ERR
+ return result;
+}
+
int PHPMsessionConnect(const char *szhost, int nport)
{
@@ -255,7 +283,6 @@
TSRMLS_FETCH();
-
if(!s_reqb)
s_reqb = AllocateRequestBuffer(2048);
@@ -275,16 +302,6 @@
s_port = nport;
}
-#ifndef PERSISTENT_CONN
- ELOG("PHPMsessionConnect:old");
- if(s_conn)
- {
- CloseReqConn(s_conn);
- php_log_err("Call to connect with non-null s_conn" TSRMLS_CC);
- }
-
- s_conn = OpenReqConn(s_szhost, s_port);
-#else
ELOG("PHPMsessionConnect:new");
if(s_conn && fNewHost)
{
@@ -300,7 +317,6 @@
ELOG("Reusing old connection");
}
#endif
-#endif
#ifdef ERR_DEBUG
@@ -316,28 +332,16 @@
void PHPMsessionDisconnect()
{
-#ifndef PERSISTENT_CONN
- if(s_conn)
- {
- CloseReqConn(s_conn);
- s_conn = NULL;
- }
- if(s_reqb)
- {
- FreeRequestBuffer(s_reqb);
- s_reqb = NULL;
- }
-#endif
}
-char *PHPMsessionGetData(const char *session TSRMLS_DC)
+char *PHPMsessionGetData(char *session TSRMLS_DC)
{
char *ret = NULL;
+ ELOG("PHPMsessionGetData");
IFCONNECT_BEGIN
- FormatRequest(&s_reqb, REQ_DATAGET, session,"","",0);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest(REQ_DATAGET, (char *)session,"","",0);
if(s_reqb->req.stat==REQ_OK)
ret = safe_estrdup(s_reqb->req.datum);
@@ -345,31 +349,31 @@
return ret;
}
-int PHPMsessionSetData(const char *session, const char *data TSRMLS_DC)
+int PHPMsessionSetData(char *session, char *data TSRMLS_DC)
{
+ ELOG("PHPMsessionSetData");
IFCONNECT_BEGIN
int ret=0;
- FormatRequest(&s_reqb, REQ_DATASET, session,"",data,0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest(REQ_DATASET, session,"",data,0);
ret = (s_reqb->req.stat==REQ_OK);
if(s_reqb->req.stat!=REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
return ret;
IFCONNECT_ENDVAL(0)
}
-int PHPMsessionDestroy(const char *session TSRMLS_DC)
+int PHPMsessionDestroy(char *session TSRMLS_DC)
{
+ ELOG("PHPMsessionDestroy");
IFCONNECT_BEGIN
int ret=0;
- FormatRequest(&s_reqb, REQ_DROP, session, "","",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_DROP, session, "","",0);
ret = (s_reqb->req.stat==REQ_OK);
if(s_reqb->req.stat!=REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
return ret;
IFCONNECT_ENDVAL(0)
@@ -402,7 +406,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "MSession connect failed");
+ php_error(E_WARNING, "%s(): MSession connect failed",
+get_active_function_name(TSRMLS_C));
RETURN_FALSE;
}
}
@@ -424,8 +428,7 @@
IFCONNECT_BEGIN
int count;
- FormatRequest(&s_reqb, REQ_COUNT, "", "","",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_COUNT, "", "","",0);
count = (s_reqb->req.stat == REQ_OK) ? s_reqb->req.param : 0;
@@ -450,15 +453,14 @@
}
convert_to_string_ex(session);
szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_CREATE, szsession, "","",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_CREATE, szsession, "","",0);
if(s_reqb->req.stat==REQ_OK)
{
RETURN_TRUE;
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
IFCONNECT_END
@@ -497,8 +499,7 @@
}
convert_to_string_ex(session);
szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_SLOCK, szsession, "","",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_SLOCK, szsession, "","",0);
if(s_reqb->req.stat==REQ_OK)
{
@@ -506,7 +507,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
@@ -514,8 +515,7 @@
}
/* }}} */
-
-/* {{{ proto int msession_stat(string name)
+/* {{{ proto int msession_ctl(string name)
Lock a session */
PHP_FUNCTION(msession_ctl)
{
@@ -561,22 +561,24 @@
{
if(strcasecmp(parray[i], szwhich) == 0)
{
+ ELOG(szwhich);
fn = i;
break;
}
}
}
- FormatRequest(&s_reqb, REQ_CTL, szsession, "","",fn);
- PHPDoRequest(&s_conn,&s_reqb);
+
+ PHPExecRequest( REQ_CTL, szsession, "","",fn);
if(s_reqb->req.stat==REQ_OK)
{
#ifdef ERR_DEBUG
char buffer[128];
- sprintf(buffer, "ret:%d", s_reqb->req.param);
+ sprintf(buffer, "ret:%s", s_reqb->req.datum);
ELOG(buffer);
#endif
+ s_reqb->req.param = atoi(s_reqb->req.datum);
RETURN_LONG(s_reqb->req.param);
}
else
@@ -605,8 +607,7 @@
szsession = Z_STRVAL_PP(session);
convert_to_long_ex(key);
lkey = Z_LVAL_PP(key);
- FormatRequest(&s_reqb, REQ_SUNLOCK, szsession, "","",lkey);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_SUNLOCK, szsession, "","",lkey);
if(s_reqb->req.stat==REQ_OK)
{
@@ -614,7 +615,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
IFCONNECT_END
@@ -646,8 +647,7 @@
szname = Z_STRVAL_PP(name);
szvalue = Z_STRVAL_PP(value);
- FormatRequest(&s_reqb, REQ_SETVAL, szsession, szname, szvalue, 0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_SETVAL, szsession, szname, szvalue, 0);
if(s_reqb->req.stat==REQ_OK)
{
@@ -655,7 +655,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
IFCONNECT_END
@@ -685,8 +685,7 @@
szname = Z_STRVAL_PP(name);
szvalue = Z_STRVAL_PP(value);
- FormatRequest(&s_reqb, REQ_GETVAL, szsession, szname, szvalue,0);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_GETVAL, szsession, szname, szvalue,0);
if(s_reqb->req.stat==REQ_OK)
{
@@ -695,7 +694,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -718,8 +717,7 @@
convert_to_long_ex(param);
val = Z_LVAL_PP(param);
- FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",val);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_UNIQ,"", "", "",val);
if(s_reqb->req.stat==REQ_OK)
{
@@ -728,7 +726,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -751,8 +749,7 @@
convert_to_long_ex(param);
val = Z_LVAL_PP(param);
- FormatRequest(&s_reqb, REQ_RANDSTR,"", "", "",val);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_RANDSTR,"", "", "",val);
if(s_reqb->req.stat==REQ_OK)
{
@@ -761,7 +758,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -788,8 +785,7 @@
szname = Z_STRVAL_PP(name);
szvalue = Z_STRVAL_PP(value);
- FormatRequest(&s_reqb, REQ_FIND, "", szname, szvalue,0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_FIND, "", szname, szvalue,0);
if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
{
@@ -807,7 +803,7 @@
}
else if(s_reqb->req.stat != REQ_OK)
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -819,8 +815,7 @@
PHP_FUNCTION(msession_list)
{
IFCONNECT_BEGIN
- FormatRequest(&s_reqb, REQ_LIST, "", "", "",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_LIST, "", "", "",0);
if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
{
@@ -840,7 +835,7 @@
{
/* May this should be an error? */
if(s_reqb->req.param != REQE_NOSESSION)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt,
+get_active_function_name(TSRMLS_C), ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -860,8 +855,7 @@
}
convert_to_string_ex(session);
szsession = Z_STRVAL_PP(session);
- FormatRequest(&s_reqb, REQ_GETALL, szsession, "", "",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_GETALL, szsession, "", "",0);
array_init(return_value);
@@ -891,7 +885,7 @@
else
{
if(s_reqb->req.param != REQE_NOSESSION)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt,
+get_active_function_name(TSRMLS_C), ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -972,12 +966,10 @@
zend_hash_move_forward_ex(htTuples, &pos);
}
- ELOG("FormatMulti");
- FormatRequestMulti(&s_reqb, REQ_SETVAL, Z_STRVAL_PP(session), countpair,
pairs,0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequestMulti(REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0);
if(s_reqb->req.stat != REQ_OK)
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
efree((void *)pairs);
IFCONNECT_END
}
@@ -994,8 +986,7 @@
WRONG_PARAM_COUNT;
}
convert_to_string_ex(name);
- FormatRequest(&s_reqb, REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0);
array_init(return_value);
@@ -1024,7 +1015,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -1056,8 +1047,7 @@
WRONG_PARAM_COUNT;
}
convert_to_string_ex(session);
- FormatRequest(&s_reqb, REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout);
- PHPDoRequest(&s_conn,&s_reqb);
+ PHPExecRequest( REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout);
if(s_reqb->req.stat == REQ_OK)
{
@@ -1065,7 +1055,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_NULL();
}
IFCONNECT_END
@@ -1088,8 +1078,7 @@
convert_to_string_ex(session);
convert_to_string_ex(name);
- FormatRequest(&s_reqb, REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0);
if(s_reqb->req.stat==REQ_OK)
{
@@ -1098,7 +1087,7 @@
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
IFCONNECT_END
@@ -1193,8 +1182,7 @@
ret = atoi(Z_STRVAL_PP(val));
- FormatRequest(&s_reqb, REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val),
param ? Z_STRVAL_PP(param) : "",ret);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ?
+Z_STRVAL_PP(param) : "",ret);
if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
{
@@ -1203,7 +1191,7 @@
}
else if(s_reqb->req.stat != REQ_OK)
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
@@ -1243,8 +1231,7 @@
strings[i] = Z_STRVAL_PP(val[i]);
}
- FormatRequestStrings(&s_reqb, REQ_CALL, NULL , n, strings);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequestStrings(REQ_CALL, NULL , n, strings);
if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
{
@@ -1253,7 +1240,56 @@
}
else if(s_reqb->req.stat != REQ_OK)
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
+ RETURN_FALSE;
+ }
+ IFCONNECT_END
+}
+/* }}} */
+/* {{{ proto string msession_exec(string cmdline)
+ executes a program on msession system */
+PHP_FUNCTION(msession_exec)
+{
+ IFCONNECT_BEGIN
+ char *val;
+ zval **cmdline;
+
+ if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cmdline) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+ convert_to_string_ex(cmdline);
+
+ PHPExecRequest( REQ_EXEC, Z_STRVAL_PP(cmdline), "","",0);
+
+ if(s_reqb->req.stat == REQ_OK)
+ {
+ val = safe_estrdup(s_reqb->req.datum);
+ RETURN_STRING(val, 0)
+ }
+ else
+ {
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
+ RETURN_NULL();
+ }
+ IFCONNECT_END
+}
+/* }}} */
+/* {{{ proto bool msession_ping(void)
+ returns non-zero if msession is alive*/
+PHP_FUNCTION(msession_ping)
+{
+ IFCONNECT_BEGIN
+
+ PHPExecRequest(REQ_PING,"","","", 0);
+
+ if(s_reqb->req.stat==REQ_OK)
+ {
+ RETURN_TRUE;
+ }
+ else
+ {
+ php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C),
+ReqbErr(s_reqb));
RETURN_FALSE;
}
IFCONNECT_END
@@ -1298,7 +1334,7 @@
PS_READ_FUNC(msession)
{
ELOG( "ps_read_msession");
- *val = PHPMsessionGetData(key TSRMLS_CC);
+ *val = PHPMsessionGetData((char *)key TSRMLS_CC);
if(*val)
{
*vallen = strlen(*val);
@@ -1315,13 +1351,13 @@
PS_WRITE_FUNC(msession)
{
ELOG( "ps_write_msession");
- return (PHPMsessionSetData(key, val TSRMLS_CC)) ? SUCCESS : FAILURE;
+ return (PHPMsessionSetData((char *)key, (char *)val TSRMLS_CC)) ? SUCCESS :
+FAILURE;
}
PS_DESTROY_FUNC(msession)
{
ELOG( "ps_destroy_msession");
- return (PHPMsessionDestroy(key TSRMLS_CC)) ? SUCCESS : FAILURE;
+ return (PHPMsessionDestroy((char *)key TSRMLS_CC)) ? SUCCESS : FAILURE;
}
PS_GC_FUNC(msession)
@@ -1336,21 +1372,22 @@
if(s_reqb && s_conn)
{
ELOG("Should create a new session");
- FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",SID_LEN);
- PHPDoRequest(&s_conn, &s_reqb);
+ PHPExecRequest( REQ_UNIQ,"", "", "",SID_LEN);
if(s_reqb->req.stat==REQ_OK)
{
+ ELOG("Reports UNIQ success");
if(newlen)
*newlen = SID_LEN;
return safe_estrdup(s_reqb->req.datum);
}
else
{
- php_error_docref(NULL TSRMLS_CC, E_WARNING, s_szErrFmt,
ReqbErr(s_reqb));
+ ELOG("Reports that UNIQ failed");
+ php_error(E_WARNING, s_szErrFmt,
+get_active_function_name(TSRMLS_C), ReqbErr(s_reqb));
}
}
- ELOG("Yikes, could not get sid from msession");
+ ELOG("Yikes, could not get sid from msession 2003");
return php_session_create_id(mod_data, newlen TSRMLS_CC);
}
#endif /* HAVE_PHP_SESSION_CREATESID */
Index: php4/ext/msession/php_msession.h
diff -u php4/ext/msession/php_msession.h:1.9 php4/ext/msession/php_msession.h:1.10
--- php4/ext/msession/php_msession.h:1.9 Tue Dec 31 11:06:59 2002
+++ php4/ext/msession/php_msession.h Sun Jan 19 22:16:23 2003
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| msession 1.0 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
+ | Copyright (c) 1997-2002 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 |
@@ -48,6 +48,7 @@
PHP_FUNCTION(msession_count);
PHP_FUNCTION(msession_create);
PHP_FUNCTION(msession_destroy);
+PHP_FUNCTION(msession_exec);
PHP_FUNCTION(msession_set);
PHP_FUNCTION(msession_get);
PHP_FUNCTION(msession_find);
@@ -63,6 +64,7 @@
PHP_FUNCTION(msession_randstr);
PHP_FUNCTION(msession_plugin);
PHP_FUNCTION(msession_call);
+PHP_FUNCTION(msession_ping);
/*
Declare any global variables you may need between the BEGIN
Index: php4/ext/msession/reqclient.h
diff -u php4/ext/msession/reqclient.h:1.11 php4/ext/msession/reqclient.h:1.12
--- php4/ext/msession/reqclient.h:1.11 Thu Aug 22 09:29:50 2002
+++ php4/ext/msession/reqclient.h Sun Jan 19 22:16:23 2003
@@ -30,6 +30,12 @@
WITH PHOENIX OR IT WILL NOT WORK.
--------------------------------------------------------------------------
*/
+/* Required to use the new version of Phoenix 1.2 */
+
+#ifndef REQCLIENT_VER
+#define REQCLIENT_VER 030113
+#endif
+
enum REQ_TYPES
{
REQ_ERR,
@@ -56,6 +62,8 @@
REQ_PLUGIN,
REQ_CALL,
REQ_SERIALIZE,
+ REQ_RESTORE,
+ REQ_EXEC,
REQ_LAST,
REQ_INTERNAL_BEGIN=1023,
REQ_INTERNALLAST,
@@ -80,6 +88,7 @@
REQE_UNKNOWN
};
+
#define REQ_POPEN 1024
#define REQ_PCLOSE 1025
#define REQ_PING 1026
@@ -98,8 +107,14 @@
typedef struct _requestBuf
{
- unsigned int type;
- unsigned int size;
+ unsigned int type; // Type of packet, dynamic/static
+ unsigned int size; // size of memory block
+#if (REQCLIENT_VER >= 030113)
+ unsigned int fmt; // format, binary/ascii
+ unsigned int reserved; // Just in case
+#else
+#warning You are using an old Phoenix definition, this will have problems with a
+newer version
+#endif
REQ req;
}REQB;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php