@@ -0,0 +1,14 @@ | |||
#!/bin/bash | |||
rm -f cppcms_api.so | |||
if [ "$CPPCMS_PATH" != "" ] | |||
then | |||
CPPCMS_INC=-I$CPPCMS_PATH/include | |||
CPPCMS_LIB=-L$CPPCMS_PATH/lib | |||
CPPCMS_LINK_FLAGS=-Wl,-rpath=$CPPCMS_PATH/lib | |||
fi | |||
PHP_FLAGS=`php-config5 --includes` | |||
gcc -fPIC -shared -O2 -g $CPPCMS_INC $PHP_FLAGS $CPPCMS_LIB cppcms_api.c -o cppcms_api.so $CPPCMS_LINK_FLAGS -lcppcms -lbooster |
@@ -130,10 +130,13 @@ class CppCMS_Session extends CppCMS_SessioBase implements ArrayAccess { | |||
if(isset($_COOKIE[$name])) { | |||
$session_cookie_value = $_COOKIE[$name]; | |||
} | |||
foreach($_COOKIE as $key => $value) | |||
$this->api->add_cookie_name($key); | |||
} | |||
if($session_cookie_value == null) | |||
$session_cookie_value = ""; | |||
$this->api->load($session_cookie_value); | |||
$this->api->set_session_cookie($session_cookie_value); | |||
$this->api->load(); | |||
$this->check(); | |||
} | |||
@@ -165,33 +168,3 @@ class CppCMS_Session extends CppCMS_SessioBase implements ArrayAccess { | |||
} | |||
// Code Test | |||
if (!count(debug_backtrace())) | |||
{ | |||
$pool = CppCMS_SessionPool::from_config('cppcms-config.js'); | |||
$session = $pool->session(); | |||
$session->load(); | |||
$session['x']='yes'; | |||
$session['y']=13.4; | |||
$session->set_exposed('y',true); | |||
$session->save(false); | |||
$cookies = $session->cookies(); | |||
$state=''; | |||
foreach($cookies as $c) { | |||
echo $c,"\n"; | |||
if($c->name() == $session->get_session_cookie_name()) | |||
$state = $c->value(); | |||
} | |||
$session = $pool->session(); | |||
$session->load($state); | |||
$session->set_exposed('y',false); | |||
echo implode(', ',$session->keys()),"\n"; | |||
$session->save(false); | |||
$cookies = $session->cookies(); | |||
foreach($cookies as $c) { | |||
echo $c,"\n"; | |||
if($c->name() == $session->get_session_cookie_name()) | |||
$state = $c->value(); | |||
} | |||
} |
@@ -2239,7 +2239,7 @@ fail: | |||
} | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) { | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_add_cookie_name) { | |||
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ; | |||
char *arg2 = (char *) 0 ; | |||
zval **args[2]; | |||
@@ -2252,7 +2252,7 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) { | |||
{ | |||
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) { | |||
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_load. Expected SWIGTYPE_p_cppcms_capi_session"); | |||
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_add_cookie_name. Expected SWIGTYPE_p_cppcms_capi_session"); | |||
} | |||
} | |||
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL"); | |||
@@ -2266,7 +2266,70 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) { | |||
} | |||
/*@SWIG@*/; | |||
result = (int)cppcms_capi_session_load(arg1,(char const *)arg2); | |||
result = (int)cppcms_capi_session_add_cookie_name(arg1,(char const *)arg2); | |||
{ | |||
ZVAL_LONG(return_value,result); | |||
} | |||
return; | |||
fail: | |||
SWIG_FAIL(); | |||
} | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_session_cookie) { | |||
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ; | |||
char *arg2 = (char *) 0 ; | |||
zval **args[2]; | |||
int result; | |||
SWIG_ResetError(); | |||
if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_array_ex(2, args) != SUCCESS) { | |||
WRONG_PARAM_COUNT; | |||
} | |||
{ | |||
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) { | |||
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_set_session_cookie. Expected SWIGTYPE_p_cppcms_capi_session"); | |||
} | |||
} | |||
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL"); | |||
/*@SWIG:/usr/share/swig2.0/php/utils.i,62,CONVERT_STRING_IN@*/ | |||
if ((*args[1])->type==IS_NULL) { | |||
arg2 = (char *) 0; | |||
} else { | |||
convert_to_string_ex(args[1]); | |||
arg2 = (char *) Z_STRVAL_PP(args[1]); | |||
} | |||
/*@SWIG@*/; | |||
result = (int)cppcms_capi_session_set_session_cookie(arg1,(char const *)arg2); | |||
{ | |||
ZVAL_LONG(return_value,result); | |||
} | |||
return; | |||
fail: | |||
SWIG_FAIL(); | |||
} | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load) { | |||
struct cppcms_capi_session *arg1 = (struct cppcms_capi_session *) 0 ; | |||
zval **args[1]; | |||
int result; | |||
SWIG_ResetError(); | |||
if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) { | |||
WRONG_PARAM_COUNT; | |||
} | |||
{ | |||
if(SWIG_ConvertPtr(*args[0], (void **) &arg1, SWIGTYPE_p_cppcms_capi_session, 0) < 0) { | |||
SWIG_PHP_Error(E_ERROR, "Type error in argument 1 of CppCMSAPISession_load. Expected SWIGTYPE_p_cppcms_capi_session"); | |||
} | |||
} | |||
if(!arg1) SWIG_PHP_Error(E_ERROR, "this pointer is NULL"); | |||
result = (int)cppcms_capi_session_load(arg1); | |||
{ | |||
ZVAL_LONG(return_value,result); | |||
} | |||
@@ -2762,6 +2825,8 @@ static zend_function_entry cppcms_api_functions[] = { | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_set_on_server,_wrap_CppCMSAPISession_set_on_server,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_get_on_server,_wrap_CppCMSAPISession_get_on_server,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_get_session_cookie_name,_wrap_CppCMSAPISession_get_session_cookie_name,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_add_cookie_name,_wrap_CppCMSAPISession_add_cookie_name,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_set_session_cookie,_wrap_CppCMSAPISession_set_session_cookie,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_load,_wrap_CppCMSAPISession_load,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_save,_wrap_CppCMSAPISession_save,NULL) | |||
SWIG_ZEND_NAMED_FE(cppcmsapisession_cookie_first,_wrap_CppCMSAPISession_cookie_first,NULL) | |||
@@ -230,8 +230,16 @@ class CppCMSAPISession { | |||
return CppCMSAPISession_get_session_cookie_name($this->_cPtr); | |||
} | |||
function load($session_cookie_value) { | |||
return CppCMSAPISession_load($this->_cPtr,$session_cookie_value); | |||
function add_cookie_name($key) { | |||
return CppCMSAPISession_add_cookie_name($this->_cPtr,$key); | |||
} | |||
function set_session_cookie($value) { | |||
return CppCMSAPISession_set_session_cookie($this->_cPtr,$value); | |||
} | |||
function load() { | |||
return CppCMSAPISession_load($this->_cPtr); | |||
} | |||
function save() { | |||
@@ -64,6 +64,8 @@ ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_expiration); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_on_server); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_on_server); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_get_session_cookie_name); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_add_cookie_name); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_set_session_cookie); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_load); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_save); | |||
ZEND_NAMED_FUNCTION(_wrap_CppCMSAPISession_cookie_first); | |||
@@ -0,0 +1 @@ | |||
../../wwwtest/ |
@@ -0,0 +1,3 @@ | |||
<html> | |||
<head><meta http-equiv="refresh" content="0; url=/html/" /></head> | |||
<body></body></html> |
@@ -0,0 +1,2 @@ | |||
#!/bin/bash | |||
php5 -S 0.0.0.0:8000 -d enable_dl=On -d extension=../cppcms_api.so -t ./ |
@@ -0,0 +1,94 @@ | |||
<?php | |||
include_once('../cppcms.php'); | |||
$pool=CppCMS_SessionPool::from_config('../../reference/config.js'); | |||
$session=$pool->session(); | |||
$session->load(); | |||
$output=""; | |||
for($i=1;;$i++) { | |||
$id = "_" . $i; | |||
if(!isset($_GET["op" . $id])) | |||
break; | |||
$op = $_GET["op" . $id]; | |||
$key = isset($_GET["key" . $id]) ? $_GET["key" . $id] : ""; | |||
$value = isset($_GET["value" . $id]) ? $_GET["value" . $id] : ""; | |||
$result = "ok"; | |||
if($op=="is_set") { | |||
$result = isset($session[$key]) ? "yes" : "no"; | |||
} | |||
elseif($op == "erase") { | |||
unset($session[$key]); | |||
} | |||
elseif($op == "clear") { | |||
$session->clear(); | |||
} | |||
elseif($op == "is_exposed") { | |||
$result = $session->get_exposed($key) ? "yes" : "no"; | |||
} | |||
elseif($op == "expose") { | |||
$session->set_exposed($key,intval($value)); | |||
} | |||
elseif($op == "get") { | |||
$result = $session[$key]; | |||
} | |||
elseif($op == "set") { | |||
$session[$key]=$value; | |||
} | |||
elseif($op == "get_binary") { | |||
$result = bin2hex($session->get($key)); | |||
} | |||
elseif($op == "set_binary") { | |||
$session->set($key,hex2bin($value)); | |||
} | |||
elseif($op == "get_age") { | |||
$result = strval($session->get_age()); | |||
} | |||
elseif($op == "set_age") { | |||
$session->set_age(intval($value));; | |||
} | |||
elseif($op == "default_age") { | |||
$session->set_default_age(); | |||
} | |||
elseif($op == "get_expiration") { | |||
$result = strval($session->get_expiration()); | |||
} | |||
elseif($op == "set_expiration") { | |||
$session->set_expiration(intval($value)); | |||
} | |||
elseif($op == "default_expiration") { | |||
$session->set_default_expiration(); | |||
} | |||
elseif($op == "get_on_server") { | |||
$result = $session->get_on_server() ? "yes" : "no"; | |||
} | |||
elseif($op == "set_on_server") { | |||
$session->set_on_server(intval($value)); | |||
} | |||
elseif($op == "reset_session") { | |||
$session->reset_session(); | |||
} | |||
elseif($op == "csrf_token") { | |||
$result = "t=" . $session->get_csrf_token(); | |||
} | |||
elseif($op == "keys") { | |||
$result = ""; | |||
$keys = $session->keys(); | |||
foreach($keys as $p) { | |||
if($result != "") | |||
$result = $result . ","; | |||
$result =$result . "[" . $p . "]"; | |||
} | |||
} | |||
else { | |||
$result = "invalid op=" . $op; | |||
} | |||
$output = $output . strval($i) . ":" . $result . ";"; | |||
} | |||
$session->save(); | |||
header("Content-Type: text/plain"); | |||
echo $output; |
@@ -1,7 +1,7 @@ | |||
{ | |||
"service" : { | |||
"api" : "http", | |||
"port" : 8080, | |||
"port" : 8000, | |||
"ip" : "0.0.0.0" | |||
}, | |||
"http" : { | |||
@@ -16,13 +16,14 @@ | |||
"hmac_key" : "3891bbf7f845fd4277008a63d72640fc13bb9a31" | |||
}, | |||
"server" : { | |||
"storage" : "memory" | |||
"storage" : "files", | |||
"shared" : true, | |||
} | |||
}, | |||
"security" : { "csrf" : {"enable" : true}}, | |||
"file_server" : { | |||
"enable" : true, | |||
"document_root" : "." | |||
"document_root" : "../wwwtest" | |||
}, | |||
} |
@@ -1,13 +0,0 @@ | |||
<!DOCTYPE html> | |||
<html> | |||
<head><title>Unit test</title></head> | |||
<body> | |||
<script src="/tester.js" ></script> | |||
<button onclick="tester('/test')">Run Test</button><span id="wait" style="color:green"></span> | |||
<table border='1' width='80%'> | |||
<thead> | |||
<tr><th width='200px'>Test</th><th width='100px'>Status</th><th>Comment</th></tr> | |||
<tbody id='log'> | |||
</tbody> | |||
</table> | |||
</body> |
@@ -63,7 +63,9 @@ typedef struct cppcms_capi_cookie{} cppcms_capi_cookie; | |||
int set_on_server(int is_on_server); | |||
int get_on_server(); | |||
char const *get_session_cookie_name(); | |||
int load(char const *session_cookie_value); | |||
int add_cookie_name(char const *key); | |||
int set_session_cookie(char const *value); | |||
int load(); | |||
int save(); | |||
%newobject cookie_first; | |||
cppcms_capi_cookie *cookie_first(); | |||
@@ -0,0 +1,24 @@ | |||
<!DOCTYPE html> | |||
<html> | |||
<head><title>Unit test</title></head> | |||
<body> | |||
<script src="tester.js" ></script> | |||
<script> | |||
function get_url() | |||
{ | |||
var sel = document.getElementById('url'); | |||
return sel.options[sel.selectedIndex].value; | |||
} | |||
</script> | |||
<select id="url"> | |||
<option value="/test" selected="selected">CppCMS Reference</option> | |||
<option value="/unit_test.php">PHP</option> | |||
</select> | |||
<button onclick="tester(get_url())">Run Test</button><span id="wait" style="color:green"></span> | |||
<table border='1' width='80%'> | |||
<thead> | |||
<tr><th width='200px'>Test</th><th width='100px'>Status</th><th>Comment</th></tr> | |||
<tbody id='log'> | |||
</tbody> | |||
</table> | |||
</body> |