mirror of
https://github.com/php/php-src.git
synced 2024-11-26 03:16:33 +08:00
add an interface for registering storage modules at run-time.
This commit is contained in:
parent
172a9c9303
commit
9de9b7c1e9
@ -211,6 +211,7 @@ PHP_GINIT_FUNCTION(ps_mm)
|
||||
ps_mm_instance = NULL;
|
||||
return FAILURE;
|
||||
}
|
||||
php_session_register_module(&ps_mod_mm);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
/*
|
||||
* To add a PHP session module, #include its header file and
|
||||
* add a ps_xxx_ptr in the struct...
|
||||
*/
|
||||
|
||||
#include "mod_files.h"
|
||||
#include "mod_mm.h"
|
||||
#include "mod_user.h"
|
||||
|
||||
static ps_module *ps_modules[] = {
|
||||
ps_files_ptr,
|
||||
ps_mm_ptr,
|
||||
ps_user_ptr,
|
||||
};
|
||||
|
@ -169,6 +169,8 @@ void session_adapt_url(const char *, size_t, char **, size_t *);
|
||||
void php_set_session_var(char *name, size_t namelen, zval *state_val PSLS_DC);
|
||||
int php_get_session_var(char *name, size_t namelen, zval ***state_var PLS_DC PSLS_DC ELS_DC);
|
||||
|
||||
int php_session_register_module(ps_module *);
|
||||
|
||||
int php_session_register_serializer(const char *name,
|
||||
int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
|
||||
int (*decode)(PS_SERIALIZER_DECODE_ARGS));
|
||||
|
@ -40,10 +40,11 @@
|
||||
#include "ext/standard/php_rand.h" /* for RAND_MAX */
|
||||
#include "ext/standard/info.h"
|
||||
|
||||
#include "modules.c"
|
||||
|
||||
#include "ext/standard/php_smart_str.h"
|
||||
|
||||
#include "mod_files.h"
|
||||
#include "mod_user.h"
|
||||
|
||||
function_entry session_functions[] = {
|
||||
PHP_FE(session_name, NULL)
|
||||
PHP_FE(session_module_name, NULL)
|
||||
@ -131,6 +132,13 @@ static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = {
|
||||
PS_SERIALIZER_ENTRY(php_binary)
|
||||
};
|
||||
|
||||
#define MAX_MODULES 10
|
||||
|
||||
static ps_module *ps_modules[MAX_MODULES + 1] = {
|
||||
ps_files_ptr,
|
||||
ps_user_ptr
|
||||
};
|
||||
|
||||
int php_session_register_serializer(const char *name,
|
||||
int (*encode)(PS_SERIALIZER_ENCODE_ARGS),
|
||||
int (*decode)(PS_SERIALIZER_DECODE_ARGS))
|
||||
@ -152,6 +160,21 @@ int php_session_register_serializer(const char *name,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int php_session_register_module(ps_module *ptr)
|
||||
{
|
||||
int ret = -1;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_MODULES; i++) {
|
||||
if (!ps_modules[i]) {
|
||||
ps_modules[i] = ptr;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
PHP_MINIT_FUNCTION(session);
|
||||
PHP_RINIT_FUNCTION(session);
|
||||
@ -713,9 +736,9 @@ static ps_module *_php_find_ps_module(char *name PSLS_DC)
|
||||
{
|
||||
ps_module *ret = NULL;
|
||||
ps_module **mod;
|
||||
ps_module **end = ps_modules + (sizeof(ps_modules)/sizeof(ps_module*));
|
||||
int i;
|
||||
|
||||
for (mod = ps_modules; mod < end; mod++)
|
||||
for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++)
|
||||
if (*mod && !strcasecmp(name, (*mod)->name)) {
|
||||
ret = *mod;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user