2
+----------------------------------------------------------------------+
4
+----------------------------------------------------------------------+
5
| Copyright (c) 1997-2004 The PHP Group |
6
+----------------------------------------------------------------------+
7
| This source file is subject to version 3.0 of the PHP license, |
8
| that is bundled with this package in the file LICENSE, and is |
9
| available through the world-wide-web at the following url: |
10
| http://www.php.net/license/3_0.txt. |
11
| If you did not receive a copy of the PHP license and are unable to |
12
| obtain it through the world-wide-web, please send a note to |
13
| license@php.net so we can mail you a copy immediately. |
14
+----------------------------------------------------------------------+
15
| Authors: Mark Woodward <markw@mohawksoft.com> |
16
| Portions copyright the PHP group. |
17
+----------------------------------------------------------------------+
26
#include "php_msession.h"
27
#include "reqclient.h"
28
#include "ext/standard/info.h"
29
#include "ext/session/php_session.h"
44
/* Uncomment to get debugging messages */
45
/* #define ERR_DEBUG */
48
#define ELOG( str ) php_log_err( str )
53
/* Test if system is OK fror use. */
54
/* Macros may be ugly, but I can globaly add debuging when needed. */
55
#define IFCONNECT_BEGIN if(s_reqb && s_conn) {
56
#define IFCONNECT_ENDVAL(V) } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Msession not initialized"); return V; }
57
#define IFCONNECT_END } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Msession not initialized"); RETURN_FALSE; }
59
#ifndef HAVE_PHP_SESSION
60
#error HAVE_PHP_SESSION not defined
63
/* Test if session module contains custom sesson ID patch */
64
#ifdef PHP_SESSION_API
65
#if (PHP_SESSION_API >= 20020330)
66
#define HAVE_PHP_SESSION_CREATESID
70
/* This sets the PHP API version used in the file. */
71
/* If this module does not compile on the version of PHP you are using, look for */
72
/* this value in Zend/zend_modules.h, and set appropriately */
73
#if (ZEND_MODULE_API_NO <= 20001222)
77
#define TSRMLS_FETCH()
78
/* Comment out this line if you wish to have msession without php sessions */
79
#define HAVE_PHP_SESSION
80
#warning Backward compatible msession extension requires PHP sessions. If PHP compiles and links, you can ignore this warning.
81
#elif (ZEND_MODULE_API_NO >= 20010901)
84
#warning ZEND_MODULE_API_NO not defined
89
* Please do not remove backward compatibility from this module.
90
* this same source must also work with the 4.0.6 version of PHP.
92
* Module Variable naming hints:
93
* All global scope variables begin with "g_" for global.
94
* All static file scoped variables begin with "s_" for static.
95
* Zero terminated strings generally start with "sz" for "string followed by zero."
96
* integers that hold string or data lengths generally start with "cb" for "count of bytes."
97
* Also, please to not reformat braces ;-)
101
#ifdef HAVE_PHP_SESSION
102
#ifdef HAVE_PHP_SESSION_CREATESID
103
/* If the PHP Session module is compiled or available, include support */
104
PS_FUNCS_SID(msession);
105
ps_module ps_mod_msession = {
110
ps_module ps_mod_msession = {
116
/* Per-process variables need by msession */
117
static char s_szdefhost[]="localhost";
118
static char * s_szhost=s_szdefhost;
119
static int s_port=8086;
120
static void * s_conn=NULL;
121
static REQB * s_reqb=NULL;
123
function_entry msession_functions[] = {
124
PHP_FE(msession_connect,NULL)
125
PHP_FE(msession_disconnect,NULL)
126
PHP_FE(msession_lock,NULL)
127
PHP_FE(msession_unlock,NULL)
128
PHP_FE(msession_count,NULL)
129
PHP_FE(msession_create,NULL)
130
PHP_FE(msession_destroy,NULL)
131
PHP_FE(msession_set,NULL)
132
PHP_FE(msession_get,NULL)
133
PHP_FE(msession_find,NULL)
134
PHP_FE(msession_get_array,NULL)
135
PHP_FE(msession_set_array,NULL)
136
PHP_FE(msession_timeout,NULL)
137
PHP_FE(msession_inc,NULL)
138
PHP_FE(msession_set_data,NULL)
139
PHP_FE(msession_get_data,NULL)
140
PHP_FE(msession_listvar,NULL)
141
PHP_FE(msession_list,NULL)
142
PHP_FE(msession_uniq,NULL)
143
PHP_FE(msession_randstr,NULL)
144
PHP_FE(msession_plugin,NULL)
145
PHP_FE(msession_call,NULL)
146
PHP_FE(msession_ctl,NULL)
147
PHP_FE(msession_exec,NULL)
148
PHP_FE(msession_ping,NULL)
152
zend_module_entry msession_module_entry = {
154
STANDARD_MODULE_HEADER,
159
PHP_MSHUTDOWN(msession),
161
PHP_RSHUTDOWN(msession),
166
STANDARD_MODULE_PROPERTIES
169
#ifdef COMPILE_DL_MSESSION
170
ZEND_GET_MODULE(msession)
173
PHP_MINIT_FUNCTION(msession)
176
s_szhost = s_szdefhost;
178
#ifdef HAVE_PHP_SESSION
179
php_session_register_module(&ps_mod_msession);
184
PHP_MSHUTDOWN_FUNCTION(msession)
189
PHP_RINIT_FUNCTION(msession)
194
PHP_RSHUTDOWN_FUNCTION(msession)
199
PHP_MINFO_FUNCTION(msession)
201
php_info_print_table_start();
202
php_info_print_table_header(2, "msession support", "enabled");
203
php_info_print_table_end();
208
#define RPT_CONN_ERR if(s_reqb->req.stat == REQ_ERR && (result == REQE_BADCONN || result == REQE_NOSEND)) \
209
ELOG("Socket reports closed"); \
210
else if(s_reqb->req.stat == REQ_ERR)\
211
ELOG("MSession call failed");\
215
#define CONN_ERR(reqb)\
216
(reqb->req.stat == REQ_ERR) && (reqb->req.param == REQE_BADCONN || reqb->req.param == REQE_NOSEND)
218
int PHPExecRequest(int req, char *session, char *d1, char *d2,int param)
221
FormatRequest(&s_reqb, req, session, d1, d2, param);
222
result = DoRequest(s_conn, &s_reqb);
224
/* Server closed the connection! */
227
ELOG("Connection was closed by server");
228
if(ReopenReqConn(s_conn))
230
FormatRequest(&s_reqb, req, session, d1, d2, param);
231
result = DoRequest(s_conn, &s_reqb);
237
int PHPExecRequestMulti(int req, char *session, int n, char **pairs, int param)
240
FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
241
result = DoRequest(s_conn, &s_reqb);
243
/* Server closed the connection! */
246
ELOG("Connection was closed by server");
247
if(ReopenReqConn(s_conn))
249
FormatRequestMulti(&s_reqb, req, session, n, pairs, param);
250
result = DoRequest(s_conn, &s_reqb);
256
int PHPExecRequestStrings(int req, char *session, int n, char **strings)
259
FormatRequestStrings(&s_reqb, req, session, n, strings);
260
result = DoRequest(s_conn, &s_reqb);
261
/* Server closed the connection! */
264
ELOG("Connection was closed by server");
265
if(ReopenReqConn(s_conn))
267
FormatRequestStrings(&s_reqb, req, session, n, strings);
268
result = DoRequest(s_conn, &s_reqb);
276
int PHPMsessionConnect(const char *szhost, int nport)
281
s_reqb = AllocateRequestBuffer(2048);
283
if(!s_reqb) /* no buffer, it won't work! */
286
if(strcmp(s_szhost, szhost))
288
if(s_szhost != s_szdefhost)
290
s_szhost = strdup(szhost);
293
if(nport && nport != s_port)
299
ELOG("PHPMsessionConnect:new");
300
if(s_conn && fNewHost)
302
ELOG("Closing old connection, opening new");
303
CloseReqConn(s_conn);
307
s_conn = OpenReqConn(s_szhost, s_port);
311
ELOG("Reusing old connection");
319
sprintf(buffer,"Connect: %s [%d] = %d (%X)\n",
320
s_szhost, s_port, (s_conn != NULL), (unsigned)s_conn);
324
return (s_conn) ? 1 : 0;
327
void PHPMsessionDisconnect()
331
char *PHPMsessionGetData(char *session TSRMLS_DC)
334
ELOG("PHPMsessionGetData");
338
PHPExecRequest(REQ_DATAGET, (char *)session,"","",0);
340
if(s_reqb->req.stat==REQ_OK)
341
ret = safe_estrdup(s_reqb->req.datum);
346
int PHPMsessionSetData(char *session, char *data TSRMLS_DC)
348
ELOG("PHPMsessionSetData");
352
PHPExecRequest(REQ_DATASET, session,"",data,0);
353
ret = (s_reqb->req.stat==REQ_OK);
354
if(s_reqb->req.stat!=REQ_OK)
355
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
361
int PHPMsessionDestroy(char *session TSRMLS_DC)
363
ELOG("PHPMsessionDestroy");
367
PHPExecRequest( REQ_DROP, session, "","",0);
368
ret = (s_reqb->req.stat==REQ_OK);
369
if(s_reqb->req.stat!=REQ_OK)
370
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
376
/* {{{ proto bool msession_connect(string host, string port)
377
Connect to msession sever */
378
PHP_FUNCTION(msession_connect)
386
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zhost, &zport) == FAILURE)
391
convert_to_string_ex(zhost);
392
convert_to_string_ex(zport);
394
szhost = Z_STRVAL_PP(zhost);
395
nport = atoi(Z_STRVAL_PP(zport));
397
if(PHPMsessionConnect(szhost,nport))
403
php_error_docref(NULL TSRMLS_CC, E_WARNING, "MSession connect failed");
409
/* {{{ proto void msession_disconnect(void)
410
Disconnect from msession server */
411
PHP_FUNCTION(msession_disconnect)
413
PHPMsessionDisconnect();
418
/* {{{ proto int msession_count(void)
420
PHP_FUNCTION(msession_count)
425
PHPExecRequest( REQ_COUNT, "", "","",0);
427
count = (s_reqb->req.stat == REQ_OK) ? s_reqb->req.param : 0;
435
/* {{{ proto bool msession_create(string session)
437
PHP_FUNCTION(msession_create)
444
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
448
convert_to_string_ex(session);
449
szsession = Z_STRVAL_PP(session);
450
PHPExecRequest( REQ_CREATE, szsession, "","",0);
451
if(s_reqb->req.stat==REQ_OK)
457
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
464
/* {{{ proto bool msession_destroy(string name)
466
PHP_FUNCTION(msession_destroy)
470
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
474
convert_to_string_ex(session);
475
szsession = Z_STRVAL_PP(session);
476
PHPMsessionDestroy(szsession TSRMLS_CC);
482
/* {{{ proto int msession_lock(string name)
484
PHP_FUNCTION(msession_lock)
490
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
494
convert_to_string_ex(session);
495
szsession = Z_STRVAL_PP(session);
496
PHPExecRequest( REQ_SLOCK, szsession, "","",0);
498
if(s_reqb->req.stat==REQ_OK)
500
RETURN_LONG(s_reqb->req.param);
504
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
512
/* {{{ proto int msession_ctl(string name)
514
PHP_FUNCTION(msession_ctl)
516
static char *parray[] =
530
int fn = REQ_STAT_EXIST;
533
int n = ZEND_NUM_ARGS();
540
if(zend_get_parameters_ex(n,&session,&which) == FAILURE)
545
convert_to_string_ex(session);
546
szsession = Z_STRVAL_PP(session);
552
convert_to_string_ex(which);
553
szwhich = Z_STRVAL_PP(which);
554
for(i=0; parray[i]; i++)
556
if(strcasecmp(parray[i], szwhich) == 0)
566
PHPExecRequest( REQ_CTL, szsession, "","",fn);
568
if(s_reqb->req.stat==REQ_OK)
572
sprintf(buffer, "ret:%s", s_reqb->req.datum);
575
s_reqb->req.param = atoi(s_reqb->req.datum);
576
RETURN_LONG(s_reqb->req.param);
580
ELOG("msession_ctl failed");
586
/* {{{ proto int msession_unlock(string session, int key)
588
PHP_FUNCTION(msession_unlock)
596
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &key) == FAILURE)
600
convert_to_string_ex(session);
601
szsession = Z_STRVAL_PP(session);
602
convert_to_long_ex(key);
603
lkey = Z_LVAL_PP(key);
604
PHPExecRequest( REQ_SUNLOCK, szsession, "","",lkey);
606
if(s_reqb->req.stat==REQ_OK)
608
RETURN_LONG(s_reqb->req.param);
612
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
619
/* {{{ proto bool msession_set(string session, string name, string value)
620
Set value in session */
621
PHP_FUNCTION(msession_set)
632
if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
636
convert_to_string_ex(session);
637
convert_to_string_ex(name);
638
convert_to_string_ex(value);
640
szsession = Z_STRVAL_PP(session);
641
szname = Z_STRVAL_PP(name);
642
szvalue = Z_STRVAL_PP(value);
644
PHPExecRequest( REQ_SETVAL, szsession, szname, szvalue, 0);
646
if(s_reqb->req.stat==REQ_OK)
652
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
659
/* {{{ proto string msession_get(string session, string name, string default_value)
660
Get value from session */
661
PHP_FUNCTION(msession_get)
671
if(ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3,&session,&name,&value) == FAILURE)
675
convert_to_string_ex(session);
676
convert_to_string_ex(name);
677
convert_to_string_ex(value);
678
szsession = Z_STRVAL_PP(session);
679
szname = Z_STRVAL_PP(name);
680
szvalue = Z_STRVAL_PP(value);
682
PHPExecRequest( REQ_GETVAL, szsession, szname, szvalue,0);
684
if(s_reqb->req.stat==REQ_OK)
686
szvalue = safe_estrdup(s_reqb->req.datum);
687
RETURN_STRING(szvalue, 0)
691
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
698
/* {{{ proto string msession_uniq(int num_chars)
700
PHP_FUNCTION(msession_uniq)
707
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE)
711
convert_to_long_ex(param);
712
val = Z_LVAL_PP(param);
714
PHPExecRequest( REQ_UNIQ,"", "", "",val);
716
if(s_reqb->req.stat==REQ_OK)
718
char *szval = safe_estrdup(s_reqb->req.datum);
719
RETURN_STRING(szval, 0)
723
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
731
/* {{{ proto string msession_randstr(int num_chars)
733
PHP_FUNCTION(msession_randstr)
739
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE)
743
convert_to_long_ex(param);
744
val = Z_LVAL_PP(param);
746
PHPExecRequest( REQ_RANDSTR,"", "", "",val);
748
if(s_reqb->req.stat==REQ_OK)
750
char *szval = safe_estrdup(s_reqb->req.datum);
751
RETURN_STRING(szval, 0)
755
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
762
/* {{{ proto array msession_find(string name, string value)
763
Find all sessions with name and value */
764
PHP_FUNCTION(msession_find)
773
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE)
777
convert_to_string_ex(name);
778
convert_to_string_ex(value);
779
szname = Z_STRVAL_PP(name);
780
szvalue = Z_STRVAL_PP(value);
782
PHPExecRequest( REQ_FIND, "", szname, szvalue,0);
784
if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
787
char *str = s_reqb->req.datum;
788
array_init(return_value);
790
for(i=0; i < s_reqb->req.param; i++)
792
int cbstr = strlen(str);
793
char *data = safe_estrdup(str);
794
add_index_string(return_value, i, data, 0);
798
else if(s_reqb->req.stat != REQ_OK)
800
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
807
/* {{{ proto array msession_list(void)
809
PHP_FUNCTION(msession_list)
812
PHPExecRequest( REQ_LIST, "", "", "",0);
814
if(s_reqb->req.stat==REQ_OK && s_reqb->req.param)
817
char *str = s_reqb->req.datum;
818
array_init(return_value);
820
for(i=0; i < s_reqb->req.param; i++)
822
int cbstr = strlen(str);
823
char *data = safe_estrdup(str);
824
add_index_string(return_value, i, data, 0);
828
else if(s_reqb->req.stat != REQ_OK)
830
/* May this should be an error? */
831
if(s_reqb->req.param != REQE_NOSESSION)
832
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
839
/* {{{ proto array msession_get_array(string session)
840
Get array of msession variables */
841
PHP_FUNCTION(msession_get_array)
846
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
850
convert_to_string_ex(session);
851
szsession = Z_STRVAL_PP(session);
852
PHPExecRequest( REQ_GETALL, szsession, "", "",0);
854
array_init(return_value);
856
if(s_reqb->req.stat == REQ_OK)
859
char *str = s_reqb->req.datum;
860
int num = s_reqb->req.param*2;
862
for(i=0; i < num; i+=2)
869
cbname = strlen(str);
870
szname = safe_estrndup(str,cbname);
873
cbvalue = strlen(str);
874
szvalue = safe_estrndup(str,cbvalue);
876
add_assoc_string(return_value, szname, szvalue, 0);
881
if(s_reqb->req.param != REQE_NOSESSION)
882
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
889
/* {{{ proto bool msession_set_array(string session, array tuples)
890
Set msession variables from an array*/
891
PHP_FUNCTION(msession_set_array)
913
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE)
917
htTuples = Z_ARRVAL_PP(tuples);
919
countpair = zend_hash_num_elements(htTuples);
921
pairs = (char **)safe_emalloc(sizeof(char *), countpair * 2, 0);
925
/* Initializes pos */
926
zend_hash_internal_pointer_reset_ex(htTuples, &pos);
928
ELOG("reset pointer");
930
for(i=0; i < countpair; i++)
932
if(zend_hash_get_current_data_ex(htTuples, (void **)&entry, &pos) != SUCCESS)
938
convert_to_string_ex(entry);
939
szentry = Z_STRVAL_PP(entry);
941
if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING)
946
sprintf(buffer, "%s=%s\n", key, szentry);
951
pairs[ndx++] = szentry;
954
zend_hash_move_forward_ex(htTuples, &pos);
957
PHPExecRequestMulti(REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0);
959
if(s_reqb->req.stat != REQ_OK)
960
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
961
efree((void *)pairs);
966
/* {{{ proto array msession_listvar(string name)
967
return associative array of value:session for all sessions with a variable named 'name' */
968
PHP_FUNCTION(msession_listvar)
972
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE)
976
convert_to_string_ex(name);
977
PHPExecRequest( REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0);
979
array_init(return_value);
981
if(s_reqb->req.stat == REQ_OK)
984
char *str = s_reqb->req.datum;
985
int num = s_reqb->req.param*2;
987
for(i=0; i < num; i+=2)
995
szname= safe_estrndup(str,cbname);
998
cbvalue = strlen(str);
999
szvalue = safe_estrndup(str,cbvalue);
1001
add_assoc_string(return_value, szname, szvalue, 0);
1006
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1013
/* {{{ proto int msession_timeout(string session [, int param ])
1014
Set/get session timeout */
1015
PHP_FUNCTION(msession_timeout)
1019
int ac = ZEND_NUM_ARGS();
1020
int zstat = FAILURE;
1024
zstat = zend_get_parameters_ex(1, &session);
1029
zstat = zend_get_parameters_ex(2, &session, ¶m);
1030
convert_to_long_ex(param);
1031
timeout = Z_LVAL_PP(param);
1033
if(zstat == FAILURE)
1037
convert_to_string_ex(session);
1038
PHPExecRequest( REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout);
1040
if(s_reqb->req.stat == REQ_OK)
1042
RETURN_LONG( s_reqb->req.param);
1046
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1053
/* {{{ proto string msession_inc(string session, string name)
1054
Increment value in session */
1055
PHP_FUNCTION(msession_inc)
1062
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &name) == FAILURE)
1066
convert_to_string_ex(session);
1067
convert_to_string_ex(name);
1069
PHPExecRequest( REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0);
1071
if(s_reqb->req.stat==REQ_OK)
1073
val = safe_estrdup(s_reqb->req.datum);
1074
RETURN_STRING(val, 0)
1078
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1085
/* {{{ proto string msession_get_data(string session)
1086
Get data session unstructured data. (PHP sessions use this) */
1087
PHP_FUNCTION(msession_get_data)
1093
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE)
1097
convert_to_string_ex(session);
1099
val = PHPMsessionGetData(Z_STRVAL_PP(session) TSRMLS_CC);
1103
RETURN_STRING(val, 0)
1113
/* {{{ proto bool msession_set_data(string session, string value)
1114
Set data session unstructured data. (PHP sessions use this) */
1115
PHP_FUNCTION(msession_set_data)
1121
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &value) == FAILURE)
1125
convert_to_string_ex(session);
1126
convert_to_string_ex(value);
1128
if(PHPMsessionSetData(Z_STRVAL_PP(session), Z_STRVAL_PP(value) TSRMLS_CC))
1140
/* {{{ proto string msession_plugin(string session, string val [, string param ])
1141
Call the personality plugin escape function */
1142
PHP_FUNCTION(msession_plugin)
1151
if(ZEND_NUM_ARGS() == 3)
1153
ret = zend_get_parameters_ex(3, &session, &val, ¶m);
1154
convert_to_string_ex(param);
1156
else if(ZEND_NUM_ARGS() == 2)
1158
ret = zend_get_parameters_ex(2, &session, &val);
1168
convert_to_string_ex(session);
1169
convert_to_string_ex(val);
1171
ret = atoi(Z_STRVAL_PP(val));
1173
PHPExecRequest( REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ? Z_STRVAL_PP(param) : "",ret);
1175
if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
1177
retval = safe_estrdup(s_reqb->req.datum);
1178
RETURN_STRING(retval, 0)
1180
else if(s_reqb->req.stat != REQ_OK)
1182
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1189
#define MAX_EXT_VAL 5
1190
/* {{{ proto string msession_call(string fn_name, [, string param1 ], ... [,string param4])
1191
Call the plugin function named fn_name */
1192
PHP_FUNCTION(msession_call)
1199
zval **val[MAX_EXT_VAL];
1200
char *strings[MAX_EXT_VAL+1];
1201
/* zval **param=NULL; */
1203
n = ZEND_NUM_ARGS();
1205
if((n < 1) || (n > MAX_EXT_VAL))
1210
ret = zend_get_parameters_ex(ZEND_NUM_ARGS(), &val[0],&val[1],&val[2],&val[3],&val[4]);
1216
for(i=0; i < n; i++)
1218
convert_to_string_ex(val[i]);
1219
strings[i] = Z_STRVAL_PP(val[i]);
1222
PHPExecRequestStrings(REQ_CALL, NULL , n, strings);
1224
if(s_reqb->req.stat==REQ_OK && s_reqb->req.len)
1226
retval = safe_estrdup(s_reqb->req.datum);
1227
RETURN_STRING(retval, 0)
1229
else if(s_reqb->req.stat != REQ_OK)
1231
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1237
/* {{{ proto string msession_exec(string cmdline)
1238
executes a program on msession system */
1239
PHP_FUNCTION(msession_exec)
1245
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &cmdline) == FAILURE)
1249
convert_to_string_ex(cmdline);
1251
PHPExecRequest( REQ_EXEC, Z_STRVAL_PP(cmdline), "","",0);
1253
if(s_reqb->req.stat == REQ_OK)
1255
val = safe_estrdup(s_reqb->req.datum);
1256
RETURN_STRING(val, 0)
1260
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1266
/* {{{ proto bool msession_ping(void)
1267
returns non-zero if msession is alive*/
1268
PHP_FUNCTION(msession_ping)
1272
PHPExecRequest(REQ_PING,"","","", 0);
1274
if(s_reqb->req.stat==REQ_OK)
1280
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1287
#ifdef HAVE_PHP_SESSION
1289
PS_OPEN_FUNC(msession)
1292
int len = strlen(save_path)+1;
1293
char * path = emalloc(len);
1296
strcpy(path, save_path);
1298
szport = strchr(path, ':');
1303
port = atoi(szport);
1310
ELOG( "ps_open_msession");
1311
PS_SET_MOD_DATA((void *)1); /* session.c needs a non-zero here! */
1312
if (PHPMsessionConnect(path, port)) {
1321
PS_CLOSE_FUNC(msession)
1323
ELOG( "ps_close_msession");
1324
PHPMsessionDisconnect();
1328
PS_READ_FUNC(msession)
1330
ELOG( "ps_read_msession");
1331
*val = PHPMsessionGetData((char *)key TSRMLS_CC);
1334
*vallen = strlen(*val);
1345
PS_WRITE_FUNC(msession)
1347
ELOG( "ps_write_msession");
1348
return (PHPMsessionSetData((char *)key, (char *)val TSRMLS_CC)) ? SUCCESS : FAILURE;
1351
PS_DESTROY_FUNC(msession)
1353
ELOG( "ps_destroy_msession");
1354
return (PHPMsessionDestroy((char *)key TSRMLS_CC)) ? SUCCESS : FAILURE;
1357
PS_GC_FUNC(msession)
1359
ELOG( "ps_gc_msession");
1363
#ifdef HAVE_PHP_SESSION_CREATESID
1364
PS_CREATE_SID_FUNC(msession)
1366
if(s_reqb && s_conn)
1368
ELOG("Should create a new session");
1369
PHPExecRequest( REQ_UNIQ,"", "", "",SID_LEN);
1371
if(s_reqb->req.stat==REQ_OK)
1373
ELOG("Reports UNIQ success");
1376
return safe_estrdup(s_reqb->req.datum);
1380
ELOG("Reports that UNIQ failed");
1381
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ReqbErr(s_reqb));
1384
ELOG("Yikes, could not get sid from msession 2003");
1385
return php_session_create_id(mod_data, newlen TSRMLS_CC);
1387
#endif /* HAVE_PHP_SESSION_CREATESID */
1388
#endif /* HAVE_PHP_SESSION */
1389
#endif /* HAVE_MSESSION */