mirror of
https://github.com/php/php-src.git
synced 2025-08-21 01:45:16 +02:00
- Moved msession to PECL.
This commit is contained in:
parent
1a62352dac
commit
d54967b956
9 changed files with 0 additions and 2521 deletions
|
@ -1,3 +0,0 @@
|
||||||
msession
|
|
||||||
Mark L. Woodward
|
|
||||||
mailto:mlwmohawk@mohawksoft.com
|
|
|
@ -1,33 +0,0 @@
|
||||||
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
|
|
||||||
|
|
||||||
http://www.mohawksoft.com/phoenix.html
|
|
||||||
|
|
||||||
Requirements:
|
|
||||||
Mohawk Software's Phoenix library.
|
|
||||||
Mohawk Software's msession daemon.
|
|
||||||
|
|
||||||
Building:
|
|
||||||
In the config.m4 file you will need to specify the include
|
|
||||||
and library directories for Phoenix. The setting in config.m4
|
|
||||||
is probably wrong.
|
|
||||||
|
|
||||||
You will need phoenix installed and built to compile this
|
|
||||||
module.
|
|
||||||
|
|
||||||
To use msession-test.php, msession must be the default session
|
|
||||||
handler in PHP. The easiest way to do that is in the php.ini
|
|
||||||
file as:
|
|
||||||
|
|
||||||
[Session]
|
|
||||||
session.save_handler = msession
|
|
||||||
session.save_path = localhost
|
|
||||||
|
|
||||||
The session.save.path is the host name of the server running
|
|
||||||
msessiond.
|
|
||||||
|
|
||||||
12/22/2001
|
|
||||||
Changed msession_getdata(...) to msession_get_data(...)
|
|
||||||
Changed msession_setdata(...) to msession_set_data(...)
|
|
||||||
(docs to follow)
|
|
|
@ -1,35 +0,0 @@
|
||||||
dnl
|
|
||||||
dnl $Id$
|
|
||||||
dnl
|
|
||||||
|
|
||||||
PHP_ARG_WITH(msession, for msession support,
|
|
||||||
[ --with-msession[=DIR] Include msession support])
|
|
||||||
|
|
||||||
if test "$PHP_MSESSION" != "no"; then
|
|
||||||
if test -r $PHP_MSESSION/lib/libphoenix.so; then
|
|
||||||
PHOENIX_DIR=$PHP_MSESSION
|
|
||||||
else
|
|
||||||
AC_MSG_CHECKING(for msession in default path)
|
|
||||||
for i in /opt/mohawk /usr/local/phoenix /usr/local /usr; do
|
|
||||||
if test -r $i/lib/libphoenix.so; then
|
|
||||||
PHOENIX_DIR=$i
|
|
||||||
AC_MSG_RESULT(found in $i)
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$PHOENIX_DIR"; then
|
|
||||||
AC_MSG_RESULT(not found)
|
|
||||||
AC_MSG_ERROR(Please reinstall the Phoenix / msession distribution)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_DEFINE(HAVE_MSESSION, 1, [ ])
|
|
||||||
PHP_ADD_LIBRARY_WITH_PATH(phoenix, "$PHOENIX_DIR/lib", PHOENIX_LIB)
|
|
||||||
PHOENIX_INCLUDE="-I$PHOENIX_DIR/src"
|
|
||||||
PHP_SUBST(PHOENIX_LIB)
|
|
||||||
|
|
||||||
PHP_REQUIRE_CXX
|
|
||||||
PHP_NEW_EXTENSION(msession, msession.c, $ext_shared)
|
|
||||||
PHP_ADD_LIBRARY(stdc++)
|
|
||||||
fi
|
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
<?
|
|
||||||
# msession-test.php
|
|
||||||
# This is a test page for msession functions.
|
|
||||||
# most msession functions are used in this page with
|
|
||||||
# the exception of msession_get_data, and msession_set_data
|
|
||||||
# which are used implicitly with the PHP session
|
|
||||||
# extension.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
# Start the session system, this will connect to msession
|
|
||||||
# as configured in PHP.INI.
|
|
||||||
#
|
|
||||||
# Start sessions, this will set a cookie.
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
msession_connect('localhost','8086');
|
|
||||||
|
|
||||||
# Now, optional, use msession_uniq() to create a guarenteed
|
|
||||||
# uniq session name.
|
|
||||||
#
|
|
||||||
# Use uniq to create the session. This is guarenteed to be
|
|
||||||
# uniq in the server.
|
|
||||||
|
|
||||||
if($HTTP_COOKIE_VARS["PHPSESSID"])
|
|
||||||
$sid = $HTTP_COOKIE_VARS["PHPSESSID"];
|
|
||||||
else
|
|
||||||
$sid = msession_uniq(32, "phpsession");
|
|
||||||
setcookie ("PHPSESSID", $sid);
|
|
||||||
session_id($sid);
|
|
||||||
$HTTP_COOKIE_VARS["PHPSESSID"] = $sid;
|
|
||||||
# New session, set some variables
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'time',time()) ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name1','test1') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name2','test2') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name3','test3') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name4','test4') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name5','test5') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name6','test6') ."<p>\n";
|
|
||||||
echo "Set Variable: " . msession_set($sid, 'name7','test7') ."<p>\n";
|
|
||||||
|
|
||||||
$setarray = array();
|
|
||||||
$setarray['time']=time();
|
|
||||||
$setarray['name1'] = 'test1';
|
|
||||||
$setarray['name2'] = 'test2';
|
|
||||||
$setarray['name3'] = 'test3';
|
|
||||||
$setarray['name4'] = 'test4';
|
|
||||||
$setarray['name5'] = 'test5';
|
|
||||||
$setarray['name6'] = 'test6';
|
|
||||||
$setarray['name7'] = 'test7';
|
|
||||||
msession_set_array($sid, $setarray);
|
|
||||||
|
|
||||||
#This makes a link between the variable $count and the
|
|
||||||
# session variable "count"
|
|
||||||
|
|
||||||
session_register("count");
|
|
||||||
|
|
||||||
$count ++;
|
|
||||||
|
|
||||||
# Output some information.
|
|
||||||
echo "sid: " . $sid . "<br>\n";
|
|
||||||
echo "Session Count: " . $count . "<br>\n";
|
|
||||||
|
|
||||||
# Use msession_randstr() to produce a random string.
|
|
||||||
# A valid string of n characters of jibberish is returned.
|
|
||||||
echo "Random String: " . msession_randstr(32) . "<br>\n";
|
|
||||||
|
|
||||||
# This is a thread safe increment, unlike PHP's session, many web servers
|
|
||||||
# can be updating this variable and collisions are managed.
|
|
||||||
# (for this to work, older versions of msessiond must be started with "-g globals"
|
|
||||||
# newer versions create it by default)
|
|
||||||
echo "Global Count: " . msession_inc(globals, "counter") . "<br>\n";
|
|
||||||
|
|
||||||
|
|
||||||
# Thread safe functions
|
|
||||||
|
|
||||||
echo "Local Count: " . msession_add($sid, "counter", 2) . "<br>\n";
|
|
||||||
echo "Muldiv counter * 2 / 3 :" . msession_muldiv($sid, "counter", "2", "3") . "<br>\n";
|
|
||||||
|
|
||||||
# This gets a count of active sessions.
|
|
||||||
echo "Total active sessions: " . msession_count() . "<br>\n";
|
|
||||||
|
|
||||||
# This gets all the variables for a user in an associative array.
|
|
||||||
$varray = msession_get_array($sid);
|
|
||||||
|
|
||||||
if(!$varray)
|
|
||||||
echo "Get variable array: Failed<br>\n";
|
|
||||||
|
|
||||||
# Display all the user's variables
|
|
||||||
$arraykeys = array_keys($varray);
|
|
||||||
for($i=0; $arraykeys[$i]; $i++)
|
|
||||||
echo "Key: " . $arraykeys[ $i ] ." = " .$varray[$arraykeys[$i]] ."<br>\n";
|
|
||||||
|
|
||||||
|
|
||||||
# Find a list of all sessions with same name/value pair
|
|
||||||
$array = msession_find('name1', 'test1');
|
|
||||||
|
|
||||||
#display the sessions
|
|
||||||
for($i=0; $array[$i]; $i++)
|
|
||||||
echo "Similar Sessions: " . $i . " " . $array[$i] . "<br>\n";
|
|
||||||
|
|
||||||
# Find all the sessions which have the variable "time" set.
|
|
||||||
$vararray = msession_listvar('time');
|
|
||||||
|
|
||||||
$arraykeys = array_keys($vararray);
|
|
||||||
|
|
||||||
for($i=0; $arraykeys[$i]; $i++)
|
|
||||||
echo "Key: " . $arraykeys[ $i ] ." = " .$vararray[$arraykeys[$i]] ."<br>\n";
|
|
||||||
|
|
||||||
# msession can support a personality plugin, this is an escape call directly
|
|
||||||
# into the plugin's REQ_ESCAPE function.
|
|
||||||
echo "Call the plugin: " . msession_plugin($sid, 3, "test"). "<br>\n";
|
|
||||||
|
|
||||||
# msession also supprts function-only plugins. this is a call into the demo
|
|
||||||
# plugin (funct.so) which returns the uptime of the msessiond process.
|
|
||||||
echo "Call the function: " . msession_call('fntest', "1","2", "3", "4") ."<br>\n";
|
|
||||||
|
|
||||||
#List ALL sessions on the system
|
|
||||||
$sarray = msession_list();
|
|
||||||
|
|
||||||
for($i=0; $sarray[$i]; $i++)
|
|
||||||
echo "Sessions: " . $i . " " . $sarray[$i] . "<br>\n";
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,10 +0,0 @@
|
||||||
<?
|
|
||||||
$module = 'msession';
|
|
||||||
$function = 'confirm_' . $module . '_compiled';
|
|
||||||
if (extension_loaded($module)) {
|
|
||||||
$str = $function($module);
|
|
||||||
} else {
|
|
||||||
$str = "Module $module is not compiled into PHP";
|
|
||||||
}
|
|
||||||
echo "$str\n";
|
|
||||||
?>
|
|
|
@ -1,366 +0,0 @@
|
||||||
/*
|
|
||||||
Mohawk Software Framework by Mohawk Software
|
|
||||||
Copyright (C) 1998-2001 Mark L. Woodward
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
||||||
MA 02111-1307, USA
|
|
||||||
|
|
||||||
If you want support or to professionally license this library, the author
|
|
||||||
can be reached at info@mohawksoft.com
|
|
||||||
|
|
||||||
When used as part of the PHP project this file, as present in the PHP
|
|
||||||
CVS and original source distribution is to be considered part of the
|
|
||||||
PHP package and subject to version 2.02 of the PHP license.
|
|
||||||
http://www.php.net/license/2_02.txt.
|
|
||||||
|
|
||||||
*/
|
|
||||||
#ifndef _MCACHE_API_
|
|
||||||
#define _MCACHE_API_
|
|
||||||
|
|
||||||
#include "reqclient.h"
|
|
||||||
|
|
||||||
#ifdef timeout
|
|
||||||
#undef timeout
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
class MCache_conn : public MSock
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
REQB m_reqb;
|
|
||||||
int m_errno;
|
|
||||||
public:
|
|
||||||
MCache_conn(char *host, int port);
|
|
||||||
~MCache_conn();
|
|
||||||
int Request(int stat, char *session, char *name, char *value, int param=0);
|
|
||||||
int RequestData(int stat, char *session, char *name, char *value, char *data, int cbdata, int param=0);
|
|
||||||
int RequestStrings(int stat, char *session, char *name, char *value, int n, char **strings);
|
|
||||||
char * ResultToStr();
|
|
||||||
char ** ResultToArray();
|
|
||||||
char ** ResultToPairs();
|
|
||||||
Boolean create(char *session, char *classname, char *strdata);
|
|
||||||
Boolean create_pairs(char *session, char *classname, char *strdata, int count, char **pairs);
|
|
||||||
Boolean destroy(char *session);
|
|
||||||
int set(char *session, char *name, char *value);
|
|
||||||
int set_array(char *session, int count, char **pairs);
|
|
||||||
int get_int(char *session, char *name, int def);
|
|
||||||
char *get_text(char *session, char *name, char *def);
|
|
||||||
char * uniq(int cbstr, char *classname, char *strdata);
|
|
||||||
char * randstr(int cbstr);
|
|
||||||
char **get_array(char *session);
|
|
||||||
char **get_object(char *session);
|
|
||||||
char **listvar(char *name);
|
|
||||||
char **find(char *name, char *value);
|
|
||||||
char **list();
|
|
||||||
int count();
|
|
||||||
int lock(char *session);
|
|
||||||
int unlock(char *session, int key);
|
|
||||||
Boolean timeout(char *session, int timeout);
|
|
||||||
int inc_int(char *session, char *name);
|
|
||||||
char *inc_text(char *session, char *name);
|
|
||||||
int setdata(char *session, char *data);
|
|
||||||
char *getdata(char *session);
|
|
||||||
int setdata(char *session, char *data, int len);
|
|
||||||
char *getdata(char *session, int *len);
|
|
||||||
int call_int(char *fn,int n, char **strings);
|
|
||||||
char *call_text(char *fn,int n, char **strings);
|
|
||||||
int ctl(char *session,int type);
|
|
||||||
int plugin_int(char *session, char *nparam, char *sparam, int param);
|
|
||||||
char *plugin_text(char *session, char *nparam, char *sparam, int param);
|
|
||||||
int Sessionflush(int seconds);
|
|
||||||
int admin(int fn, char *opt);
|
|
||||||
int serialize(char *szparam);
|
|
||||||
char *exec(char *szcommand);
|
|
||||||
char *add(char *session, char *name, char *value);
|
|
||||||
char *muldiv(char *session, char *name, char *mul, char *div);
|
|
||||||
int ping(void);
|
|
||||||
static void free(void *result);
|
|
||||||
static int ctl_type(char *str);
|
|
||||||
inline Boolean StatOK(void) {return (m_reqb.req->stat == REQ_OK) ? TRUE : FALSE; }
|
|
||||||
inline int param() {return m_reqb.param; }
|
|
||||||
inline int merrno() {return m_errno;}
|
|
||||||
inline char *errtext() {return ReqbErr(&m_reqb); }
|
|
||||||
inline char *reqtext(void) {return (m_reqb.req->len > 1) ? m_reqb.req->datum : NULL; }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef MCache_conn *MSCONN;
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#else
|
|
||||||
typedef void * MSCONN;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAX_REQ_STRINGS 1024
|
|
||||||
#define MREQ_TOPHANDLER -42
|
|
||||||
|
|
||||||
enum REQ_TYPES
|
|
||||||
{
|
|
||||||
MREQ_CTL=2,
|
|
||||||
MREQ_SETVAL,
|
|
||||||
MREQ_GETVAL,
|
|
||||||
MREQ_CREATE,
|
|
||||||
MREQ_DROP,
|
|
||||||
MREQ_GETALL,
|
|
||||||
MREQ_FIND,
|
|
||||||
MREQ_COUNT,
|
|
||||||
MREQ_FLUSH,
|
|
||||||
MREQ_SLOCK,
|
|
||||||
MREQ_SUNLOCK,
|
|
||||||
MREQ_TIMEOUT,
|
|
||||||
MREQ_ADD,
|
|
||||||
MREQ_DATAGET,
|
|
||||||
MREQ_DATASET,
|
|
||||||
MREQ_LIST,
|
|
||||||
MREQ_LISTVAR,
|
|
||||||
MREQ_UNIQ,
|
|
||||||
MREQ_RANDSTR,
|
|
||||||
MREQ_PLUGIN,
|
|
||||||
MREQ_CALL,
|
|
||||||
MREQ_SERIALIZE,
|
|
||||||
MREQ_RESTORE,
|
|
||||||
MREQ_EXEC,
|
|
||||||
MREQ_FIND_CACHEID,
|
|
||||||
MREQ_SET_CACHEID,
|
|
||||||
MREQ_RENAME,
|
|
||||||
MREQ_GETOBJECT,
|
|
||||||
MREQ_MULDIV,
|
|
||||||
MREQ_LAST,
|
|
||||||
// These are handled by the server, not the library.
|
|
||||||
MREQ_ADMIN = REQ_INTERNAL_END,
|
|
||||||
};
|
|
||||||
#define MREQ_OK REQ_OK
|
|
||||||
#define MREQ_ERR REQ_ERR
|
|
||||||
|
|
||||||
#ifdef PLUGMSG_START
|
|
||||||
enum MREQ_PLUGIN_MSG
|
|
||||||
{
|
|
||||||
MREQ_PLUGIN_PULSE=PLUGMSG_START,
|
|
||||||
MREQ_PLUGIN_SESSION_FLUSH,
|
|
||||||
MREQ_PLUGIN_SESSION_CREATE,
|
|
||||||
MREQ_PLUGIN_SESSION_INIT,
|
|
||||||
MREQ_PLUGIN_SESSION_DESTROY,
|
|
||||||
MREQ_PLUGIN_ESCAPE,
|
|
||||||
MREQ_PLUGIN_RELAY,
|
|
||||||
MREQ_PLUGIN_SERIALIZE,
|
|
||||||
MREQ_PLUGIN_RESTORE,
|
|
||||||
MREQ_PLUGIN_SESSION_SETDATA,
|
|
||||||
MREQ_PLUGIN_SESSION_SETVALUE,
|
|
||||||
MREQ_PLUGIN_SESSION_SETBLOB,
|
|
||||||
MREQ_PLUGIN_SESSION_RENAME,
|
|
||||||
MREQ_PLUGIN_LAST
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MREQ_SESSION_INIT_FAILED -1
|
|
||||||
#define MREQ_SESSION_INIT_HANDLED 1
|
|
||||||
#define MREQ_SESSION_INIT_NOTHANDLED 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum MCACHE_ADMIN
|
|
||||||
{
|
|
||||||
MADMIN_SHUTDOWN,
|
|
||||||
MADMIN_LOADDLL,
|
|
||||||
MADMIN_SETSERIAL,
|
|
||||||
MADMIN_SETVERBOSE,
|
|
||||||
MADMIN_SETMAXTHREADS,
|
|
||||||
MADMIN_SERIALIZE,
|
|
||||||
MADMIN_AUTOSAVE,
|
|
||||||
MADMIN_AUTODROP,
|
|
||||||
MADMIN_STATUS
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MREQ_CTL_EXIST 0
|
|
||||||
#define MREQ_CTL_TTL 1
|
|
||||||
#define MREQ_CTL_AGE 2
|
|
||||||
#define MREQ_CTL_TLA 3
|
|
||||||
#define MREQ_CTL_CTIM 4
|
|
||||||
#define MREQ_CTL_TOUCH 5
|
|
||||||
#define MREQ_CTL_NOW 6
|
|
||||||
|
|
||||||
|
|
||||||
#define MPARM_TIME_MASK 0x0000FFFF
|
|
||||||
#define MPARM_TIME_FIXED 0x0000FFFF
|
|
||||||
#define MPARAM_CBSTR_MASK 0x00FF0000
|
|
||||||
|
|
||||||
|
|
||||||
#define MPARM_TIME(parm) ((parm)&MPARM_TIME_MASK)
|
|
||||||
#define MPARM_CBSTR(parm) (((parm) >> 16) & 0xFF)
|
|
||||||
|
|
||||||
#define MPARM_CREATE(TIME, CBSTR) \
|
|
||||||
((TIME) | (CBSTR << 16))
|
|
||||||
|
|
||||||
/* Added for MCache objects */
|
|
||||||
#define MSTAT_TYPE_SESSION 0x00000000
|
|
||||||
#define MSTAT_TYPE_OBJECT 0x00100000
|
|
||||||
#define MSTAT_TYPE_FAST 0x00200000
|
|
||||||
#define MSTAT_TYPE_FIXED 0x00400000
|
|
||||||
#define MSTAT_TYPE_MASK 0x00F00000
|
|
||||||
#define MSTAT_CMD_MASK 0x000FFFFF
|
|
||||||
|
|
||||||
#define MSTAT_TYPE_TEST(stat, TY) (((stat) & MSTAT_TYPE_MASK)==(TY))
|
|
||||||
#define MSTAT_CMD(stat) ((stat) & (MSTAT_CMD_MASK))
|
|
||||||
|
|
||||||
// Private session flags
|
|
||||||
#define MCACHE_FIXED MSTAT_TYPE_FIXED // Fixed object, no expiration
|
|
||||||
#define MCACHE_NORMAL MSTAT_TYPE_SESSION
|
|
||||||
#define MCACHE_OBJECT MSTAT_TYPE_OBJECT
|
|
||||||
#define MCACHE_FAST MSTAT_TYPE_FAST
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#define EXTAPI extern "C" __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define EXTAPI extern "C"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MCACHEAPI_INTERNAL
|
|
||||||
MSCONN mcache_connect(char *host, int port);
|
|
||||||
|
|
||||||
/** Disconnects a session from an mcache daemon. Returns nothing. */
|
|
||||||
void mcache_disconnect(MSCONN conn);
|
|
||||||
|
|
||||||
/** Creates a new session. Returns TRUE is successful, or FALSE if an error occured.
|
|
||||||
An error occurs if the session already exists. mcache_errno() will return REQE_DUPSESSION
|
|
||||||
if the session exists */
|
|
||||||
|
|
||||||
Boolean mcache_create(MSCONN conn, char *session, char *classname, char *strdata);
|
|
||||||
|
|
||||||
/** Behaves exactly like mcache_create, except that initial data is passed to populate the session.
|
|
||||||
"pairs" is an array of string data. pairs[0] contains a name, pairs[1] contains its value, pairs[2]
|
|
||||||
contains the second name, pairs[3] containes the second value, and so on. */
|
|
||||||
|
|
||||||
Boolean mcache_create_pairs(MSCONN conn, char *session, char *classname, char *strdata, int count, char **pairs);
|
|
||||||
|
|
||||||
/** Destroys a session. Returns TRUE on success, FALSE on error. */
|
|
||||||
Boolean mcache_destroy(MSCONN conn, char *session);
|
|
||||||
|
|
||||||
/** Sets a value in a session. Returns TRUE on success, FALSE on error */
|
|
||||||
int mcache_set(MSCONN conn, char *session, char *name, char *value);
|
|
||||||
|
|
||||||
int mcache_set_array(MSCONN conn, char *session, int count, char **pairs);
|
|
||||||
/** Gets a value in a session as an integer. Returns the value from the session, or
|
|
||||||
def from the argument list, if no value was found. */
|
|
||||||
int mcache_get_int(MSCONN conn, char *session, char *name, int def);
|
|
||||||
|
|
||||||
|
|
||||||
/** Gets a value in a session as a string. Returns the value from the session, or
|
|
||||||
def from the argument list, if no value was found. */
|
|
||||||
char * mcache_get_text(MSCONN conn, char *session, char *name, char *def);
|
|
||||||
|
|
||||||
|
|
||||||
/** Create a new session with a guaranteed unique name. Returns a string of the name */
|
|
||||||
char * mcache_uniq(MSCONN conn, int cbstr, char *classname, char *strdata);
|
|
||||||
|
|
||||||
/** Create a pseudo-random alphanumeric string */
|
|
||||||
char * mcache_randstr(MSCONN conn, int cbstr);
|
|
||||||
|
|
||||||
/** Gets all the name/value pairs from a session into a character array. The array is
|
|
||||||
formatted as an array of string data. array[0] contains a name, array[1] contains its
|
|
||||||
value, array[2] contains the second name, array[3] containes the second value, and so on.
|
|
||||||
Returns NULL on error. */
|
|
||||||
|
|
||||||
char ** mcache_get_array(MSCONN conn, char *session);
|
|
||||||
|
|
||||||
char **mcache_get_object(MSCONN conn, char *session);
|
|
||||||
|
|
||||||
/** Finds sessions which have the particular name/value property. Returns NULL
|
|
||||||
if none were found. */
|
|
||||||
char ** mcache_find(MSCONN conn, char *name, char *value);
|
|
||||||
|
|
||||||
int mcache_inc_int(MSCONN conn, char *session, char *name);
|
|
||||||
char *mcache_inc_text(MSCONN conn, char *session, char *name);
|
|
||||||
|
|
||||||
char *mcache_add(MSCONN conn, char *session, char *name, char *value);
|
|
||||||
char *mcache_muldiv(MSCONN conn,char *sn,char *nam,char *mul,char *div);
|
|
||||||
|
|
||||||
/** Lists all active sessions. */
|
|
||||||
char ** mcache_list(MSCONN conn);
|
|
||||||
|
|
||||||
/** Returns an associative array of session:var for all sessions which have
|
|
||||||
a setting of name. */
|
|
||||||
char **mcache_listvar(MSCONN conn, char *name);
|
|
||||||
|
|
||||||
/** Returns the number of active sessions */
|
|
||||||
int mcache_count(MSCONN conn);
|
|
||||||
|
|
||||||
/** Locks a session. Returns an integer key for the lock.
|
|
||||||
Locks remain exclusive for 30 seconds, after which someone else
|
|
||||||
can lock the session. Locks are coperative, no enforcement
|
|
||||||
is attempted. */
|
|
||||||
|
|
||||||
int mcache_lock(MSCONN conn, char *session);
|
|
||||||
|
|
||||||
/** Unlocks a session */
|
|
||||||
int mcache_unlock(MSCONN conn, char *session, int key);
|
|
||||||
|
|
||||||
|
|
||||||
/** Sets the timeout of a session.
|
|
||||||
* timeout = 0 means never timeout
|
|
||||||
* timeout > 0 sets session expire time in seconds
|
|
||||||
* timeout < 0 resets to default timeout
|
|
||||||
*/
|
|
||||||
Boolean mcache_timeout(MSCONN conn, char *session, int timeout);
|
|
||||||
|
|
||||||
/** Sets the session data string, creates a session if one does not exist */
|
|
||||||
int mcache_setdata(MSCONN conn, char *session, char *data);
|
|
||||||
|
|
||||||
/** Gets the session data string from a session */
|
|
||||||
char *mcache_getdata(MSCONN conn, char *session);
|
|
||||||
|
|
||||||
/** Returns the last error. */
|
|
||||||
int mcache_errno(MSCONN conn);
|
|
||||||
|
|
||||||
/** Call a function plugin, return an int */
|
|
||||||
int mcache_call_int(MSCONN conn, char *fn,int n, char **strings);
|
|
||||||
|
|
||||||
/** Call a function plugin, return a char */
|
|
||||||
char *mcache_call_text(MSCONN conn, char *fn,int n, char **strings);
|
|
||||||
|
|
||||||
/** Call to get info about a session */
|
|
||||||
int mcache_ctl(MSCONN conn, char *session, int type);
|
|
||||||
|
|
||||||
/** Convert a string ctl to a type for mcache_ctl */
|
|
||||||
int mcache_ctl_type(char *str);
|
|
||||||
|
|
||||||
/** Call the personality plugin escape function, return int */
|
|
||||||
int mcache_plugin_int(MSCONN conn, char *session, char *nparam, char *sparam, int param);
|
|
||||||
|
|
||||||
/** Call the personality plugin escape function, return char * */
|
|
||||||
char *mcache_plugin_text(MSCONN conn, char *session, char *nparam, char *sparam, int param);
|
|
||||||
|
|
||||||
int mcache_flush(MSCONN conn, int seconds);
|
|
||||||
int mcache_loaddll(MSCONN conn, char *dll);
|
|
||||||
int mcache_shutdown(MSCONN conn, char *timeout);
|
|
||||||
int mcache_serialize(MSCONN conn, char *szparam);
|
|
||||||
char * mcache_exec(MSCONN conn, char *szparam);
|
|
||||||
int mcache_setserial(MSCONN conn, char *serialize);
|
|
||||||
int mcache_setmaxthreads(MSCONN conn, char *maxt);
|
|
||||||
int mcache_setverbose(MSCONN conn, char *verbose);
|
|
||||||
int mcache_setautosave(MSCONN conn, char *autsave);
|
|
||||||
int mcache_setautodrop(MSCONN conn, char *autdrop);
|
|
||||||
int mcache_ping(MSCONN conn);
|
|
||||||
int mcache_status(MSCONN conn);
|
|
||||||
Boolean mcache_statok(MSCONN conn);
|
|
||||||
|
|
||||||
char *mcache_text(MSCONN conn);
|
|
||||||
|
|
||||||
/** Returns a static character string describing an error. */
|
|
||||||
char * mcache_errtext(MSCONN conn);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,100 +0,0 @@
|
||||||
/*
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
| msession 1.0 |
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
| Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
| This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
| that is bundled with this package in the file LICENSE, and is |
|
|
||||||
| available at through the world-wide-web at |
|
|
||||||
| http://www.php.net/license/2_02.txt. |
|
|
||||||
| If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
| obtain it through the world-wide-web, please send a note to |
|
|
||||||
| license@php.net so we can mail you a copy immediately. |
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
| Authors: Mark Woodward <markw@mohawksoft.com> |
|
|
||||||
| Portions copyright the PHP group. |
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PHP_MSESSION_H
|
|
||||||
#define PHP_MSESSION_H
|
|
||||||
|
|
||||||
/* You should tweak config.m4 so this symbol (or some else suitable)
|
|
||||||
gets defined.
|
|
||||||
*/
|
|
||||||
#if HAVE_MSESSION
|
|
||||||
|
|
||||||
extern zend_module_entry msession_module_entry;
|
|
||||||
#define phpext_msession_ptr &msession_module_entry
|
|
||||||
|
|
||||||
#ifdef PHP_WIN32
|
|
||||||
#define PHP_MSESSION_API __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define PHP_MSESSION_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PHP_MINIT_FUNCTION(msession);
|
|
||||||
PHP_MSHUTDOWN_FUNCTION(msession);
|
|
||||||
PHP_RINIT_FUNCTION(msession);
|
|
||||||
PHP_RSHUTDOWN_FUNCTION(msession);
|
|
||||||
PHP_MINFO_FUNCTION(msession);
|
|
||||||
|
|
||||||
PHP_FUNCTION(msession_connect);
|
|
||||||
PHP_FUNCTION(msession_disconnect);
|
|
||||||
PHP_FUNCTION(msession_lock);
|
|
||||||
PHP_FUNCTION(msession_unlock);
|
|
||||||
PHP_FUNCTION(msession_ctl);
|
|
||||||
PHP_FUNCTION(msession_count);
|
|
||||||
PHP_FUNCTION(msession_create);
|
|
||||||
PHP_FUNCTION(msession_destroy);
|
|
||||||
PHP_FUNCTION(msession_set);
|
|
||||||
PHP_FUNCTION(msession_get);
|
|
||||||
PHP_FUNCTION(msession_find);
|
|
||||||
PHP_FUNCTION(msession_get_array);
|
|
||||||
PHP_FUNCTION(msession_save_object);
|
|
||||||
PHP_FUNCTION(msession_get_object);
|
|
||||||
PHP_FUNCTION(msession_set_array);
|
|
||||||
PHP_FUNCTION(msession_timeout);
|
|
||||||
PHP_FUNCTION(msession_inc);
|
|
||||||
PHP_FUNCTION(msession_add);
|
|
||||||
PHP_FUNCTION(msession_muldiv);
|
|
||||||
PHP_FUNCTION(msession_setdata);
|
|
||||||
PHP_FUNCTION(msession_getdata);
|
|
||||||
PHP_FUNCTION(msession_listvar);
|
|
||||||
PHP_FUNCTION(msession_list);
|
|
||||||
PHP_FUNCTION(msession_uniq);
|
|
||||||
PHP_FUNCTION(msession_randstr);
|
|
||||||
PHP_FUNCTION(msession_plugin);
|
|
||||||
PHP_FUNCTION(msession_call);
|
|
||||||
PHP_FUNCTION(msession_find_cacheid);
|
|
||||||
PHP_FUNCTION(msession_set_cacheid);
|
|
||||||
|
|
||||||
ZEND_BEGIN_MODULE_GLOBALS(msession)
|
|
||||||
int port;
|
|
||||||
char *host;
|
|
||||||
void *conn;
|
|
||||||
void *reqb;
|
|
||||||
ZEND_END_MODULE_GLOBALS(msession)
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ZTS
|
|
||||||
#define MSESSION_G(v) TSRMG(msession_globals_id, zend_msession_globals *, v)
|
|
||||||
#else
|
|
||||||
#define MSESSION_G(v) (msession_globals.v)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define phpext_msession_ptr NULL
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* PHP_MSESSION_H */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local variables:
|
|
||||||
* tab-width: 4
|
|
||||||
* c-basic-offset: 4
|
|
||||||
* End:
|
|
||||||
*/
|
|
|
@ -1,209 +0,0 @@
|
||||||
/*
|
|
||||||
Mohawk Software Framework by Mohawk Software
|
|
||||||
Copyright (C) 1998-2001 Mark L. Woodward
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
||||||
MA 02111-1307, USA
|
|
||||||
|
|
||||||
If you want support or to professionally license this library, the author
|
|
||||||
can be reached at info@mohawksoft.com
|
|
||||||
*/
|
|
||||||
#ifndef _REQCLIENT_
|
|
||||||
#define _REQCLIENT_
|
|
||||||
|
|
||||||
#ifndef REQCLIENT_VER
|
|
||||||
#define REQCLIENT_VER 051222
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _PHOENIX_
|
|
||||||
typedef unsigned char Boolean;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Standard request transport errors.
|
|
||||||
enum REQ_ERRORS
|
|
||||||
{
|
|
||||||
REQE_NOERROR=0,
|
|
||||||
REQE_ERR,
|
|
||||||
REQE_NOSESSION,
|
|
||||||
REQE_DUPSESSION,
|
|
||||||
REQE_NOWLOCK,
|
|
||||||
REQE_NOVALUE,
|
|
||||||
REQE_LOCKED,
|
|
||||||
REQE_NOSEND,
|
|
||||||
REQE_NOCONNECT,
|
|
||||||
REQE_BADCONN,
|
|
||||||
REQE_BADHDR,
|
|
||||||
REQE_BADVER,
|
|
||||||
REQE_BADLEN,
|
|
||||||
REQE_BUFFER,
|
|
||||||
REQE_DENIED,
|
|
||||||
REQE_NOFN,
|
|
||||||
REQE_UNKNOWN,
|
|
||||||
REQE_PLUGIN1,
|
|
||||||
REQE_PLUGIN2,
|
|
||||||
REQE_PLUGIN3,
|
|
||||||
REQE_PLUGIN4
|
|
||||||
};
|
|
||||||
|
|
||||||
#define REQ_OK 0
|
|
||||||
#define REQ_ERR 1
|
|
||||||
#define REQ_UNHANDLED 3
|
|
||||||
|
|
||||||
#define REQ_INTERNAL_BEGIN 1024
|
|
||||||
#define REQ_POPEN 1024
|
|
||||||
#define REQ_PCLOSE 1025
|
|
||||||
#define REQ_PING 1026
|
|
||||||
#define REQ_INTERNAL_END 2048
|
|
||||||
|
|
||||||
/** Packet version */
|
|
||||||
#define REQV_VERSION 0x42
|
|
||||||
#define REQV_VERMASK 0xFF
|
|
||||||
|
|
||||||
/** Packet has array of strings */
|
|
||||||
#define REQVF_STRINGS 0x0200
|
|
||||||
/** Packet has binary information */
|
|
||||||
#define REQVF_BVAL 0x0400
|
|
||||||
|
|
||||||
|
|
||||||
#define REQV_ISVER(V) (((V) & REQV_VERMASK) == REQV_VERSION)
|
|
||||||
#define REQVF_TEST(V,F) (((V) & (F)) == (F))
|
|
||||||
#define REQVSZ_VERSION "MV42"
|
|
||||||
#define REQVSZ_STRINGS "MS42"
|
|
||||||
#define REQVSZ_BVAL "MB42"
|
|
||||||
|
|
||||||
#define REQFMT_BINARY 0
|
|
||||||
#define REQFMT_ASCII 1
|
|
||||||
|
|
||||||
// An application can use this to change the default
|
|
||||||
extern unsigned int g_defReqFmt;
|
|
||||||
|
|
||||||
/** Binary request packet */
|
|
||||||
/** If sizeof(int) > 4 this will need to be fixed. */
|
|
||||||
typedef struct _requestPacket
|
|
||||||
{
|
|
||||||
int version;
|
|
||||||
int stat;
|
|
||||||
int len;
|
|
||||||
int session;
|
|
||||||
int name;
|
|
||||||
int value;
|
|
||||||
int param;
|
|
||||||
int data;
|
|
||||||
char datum[0];
|
|
||||||
}REQ;
|
|
||||||
|
|
||||||
/*** Ascii string version of request packet */
|
|
||||||
typedef struct _REQSZ
|
|
||||||
{
|
|
||||||
char version[4];
|
|
||||||
char stat[4];
|
|
||||||
char len[4];
|
|
||||||
char session[4];
|
|
||||||
char name[4];
|
|
||||||
char value[4];
|
|
||||||
char param[4];
|
|
||||||
char misc[4];
|
|
||||||
char datum[0];
|
|
||||||
}REQSZ;
|
|
||||||
typedef struct _requestBuf
|
|
||||||
{
|
|
||||||
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 (pre 030113), this will have problems with a newer version
|
|
||||||
#endif
|
|
||||||
#if (REQCLIENT_VER >= 051222)
|
|
||||||
int cmd;
|
|
||||||
int param;
|
|
||||||
char * session;
|
|
||||||
char * name;
|
|
||||||
char * value;
|
|
||||||
char * data;
|
|
||||||
int cbdata;
|
|
||||||
|
|
||||||
// To be used by library layer for bookeeping
|
|
||||||
int cb;
|
|
||||||
int count;
|
|
||||||
#endif
|
|
||||||
REQ *req;
|
|
||||||
}REQB;
|
|
||||||
|
|
||||||
typedef struct ListWalkDataStruct
|
|
||||||
{
|
|
||||||
REQB *reqb;
|
|
||||||
char *Key;
|
|
||||||
char *Data;
|
|
||||||
int cb;
|
|
||||||
int count;
|
|
||||||
}ListWalkData;
|
|
||||||
|
|
||||||
#define MAX_REQ 16384
|
|
||||||
|
|
||||||
#define REQB_STATIC 1
|
|
||||||
#define REQB_DYNAMIC 2
|
|
||||||
|
|
||||||
|
|
||||||
#define STATIC_REQB( len ) \
|
|
||||||
char buffer [ len ]; \
|
|
||||||
REQB *preq = StaticRequestBuffer(buffer, len);
|
|
||||||
|
|
||||||
#define ASCII_REQB(reqb) (REQB)->fmt = REQFMT_ASCII
|
|
||||||
#define BINARY_REQB(reqb) (REQB)->fmt = REQFMT_BINARY
|
|
||||||
|
|
||||||
REQB *AllocateRequestBuffer(REQB *reqb, unsigned size);
|
|
||||||
void FreeRequestBuffer(REQB *req);
|
|
||||||
REQB *SizeRequestBuffer(REQB *req, unsigned int size);
|
|
||||||
REQB *StaticRequestBuffer(char *buffer, unsigned int cb);
|
|
||||||
|
|
||||||
int FilterRequest(REQB *preq);
|
|
||||||
int FormatRequest(REQB *preq, int stat, char *session, char *name, char *value, int param);
|
|
||||||
int FormatRequestData(REQB *preq, int stat, char *session, char *name, char *value, void *data, int cbdata, int param);
|
|
||||||
int FormatRequestStrings(REQB *preq, int stat, char *session, char *name, char *value, int n, char **strings);
|
|
||||||
int FormatRequestf(REQB *preq, int stat, char *session, char *name, char *value, int param, char *fmt, ...);
|
|
||||||
|
|
||||||
void *GetReqbDatumPtr(REQB *preq);
|
|
||||||
|
|
||||||
int DoSingleRequest(char *hostname, int port, REQB *preq);
|
|
||||||
void *OpenReqConn(char *hostname, int port);
|
|
||||||
Boolean ReopenReqConn(void *conn);
|
|
||||||
void CloseReqConn(void *conn);
|
|
||||||
int DoRequest(void *conn, REQB *preq);
|
|
||||||
char *ReqbErr(REQB *reqb);
|
|
||||||
int LWDaddNameVal(ListWalkData *plw, char *name, char *value);
|
|
||||||
int LWDaddValue(ListWalkData *plw, char *value);
|
|
||||||
|
|
||||||
|
|
||||||
#define ASSERT_STAT(PREQ) if(PREQ->stat != REQ_OK) \
|
|
||||||
{fprintf(stderr, "Error in Request %s %d %s\n", \
|
|
||||||
__FILE__,__LINE__, ReqErr(PREQ->param)); exit(-1); }
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
// C API but with class definitions
|
|
||||||
int ReadRequestTimeout(REQB *preq, MSock *sock, int timeout);
|
|
||||||
int ReadRequest(REQB *reqb, MSock *sock);
|
|
||||||
int WriteRequest(REQB *reqb, MSock *sock);
|
|
||||||
Boolean OpenReqSock(REQB *reqb, MSock *sock, char *hostname);
|
|
||||||
void CloseReqSock(REQB *reqb, MSock *sock);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
Loading…
Add table
Add a link
Reference in a new issue