- Moved msession to PECL.

This commit is contained in:
Derick Rethans 2006-01-31 08:13:31 +00:00
parent 1a62352dac
commit d54967b956
9 changed files with 0 additions and 2521 deletions

View file

@ -1,3 +0,0 @@
msession
Mark L. Woodward
mailto:mlwmohawk@mohawksoft.com

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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";
?>

View file

@ -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

View file

@ -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:
*/

View file

@ -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