Annotation of embedaddon/php/ext/session/mod_user_class.c, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 1997-2012 The PHP Group |
6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 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_01.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: | Author: Arpad Ray <arpad@php.net> |
16: +----------------------------------------------------------------------+
17: */
18:
19: /* $Id$ */
20:
21: #include "php.h"
22: #include "php_session.h"
23:
24: #define PS_SANITY_CHECK \
25: if (PS(default_mod) == NULL) { \
26: php_error_docref(NULL TSRMLS_CC, E_CORE_ERROR, "Cannot call default session handler"); \
27: RETURN_FALSE; \
28: }
29:
30: #define PS_SANITY_CHECK_IS_OPEN \
31: PS_SANITY_CHECK; \
32: if (!PS(mod_user_is_open)) { \
33: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parent session handler is not open"); \
34: RETURN_FALSE; \
35: }
36:
37: /* {{{ proto bool SessionHandler::open(string save_path, string session_name)
38: Wraps the old open handler */
39: PHP_METHOD(SessionHandler, open)
40: {
41: char *save_path = NULL, *session_name = NULL;
42: int save_path_len, session_name_len;
43:
44: PS_SANITY_CHECK;
45:
46: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &save_path, &save_path_len, &session_name, &session_name_len) == FAILURE) {
47: return;
48: }
49:
50: PS(mod_user_is_open) = 1;
51: RETVAL_BOOL(SUCCESS == PS(default_mod)->s_open(&PS(mod_data), save_path, session_name TSRMLS_CC));
52: }
53: /* }}} */
54:
55: /* {{{ proto bool SessionHandler::close()
56: Wraps the old close handler */
57: PHP_METHOD(SessionHandler, close)
58: {
59: PS_SANITY_CHECK_IS_OPEN;
60:
61: // don't return on failure, since not closing the default handler
62: // could result in memory leaks or other nasties
63: zend_parse_parameters_none();
64:
65: PS(mod_user_is_open) = 0;
66: RETVAL_BOOL(SUCCESS == PS(default_mod)->s_close(&PS(mod_data) TSRMLS_CC));
67: }
68: /* }}} */
69:
70: /* {{{ proto bool SessionHandler::read(string id)
71: Wraps the old read handler */
72: PHP_METHOD(SessionHandler, read)
73: {
74: char *key, *val;
75: int key_len, val_len;
76:
77: PS_SANITY_CHECK_IS_OPEN;
78:
79: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len) == FAILURE) {
80: return;
81: }
82:
83: if (PS(default_mod)->s_read(&PS(mod_data), key, &val, &val_len TSRMLS_CC) == FAILURE) {
84: RETVAL_FALSE;
85: return;
86: }
87:
88: RETVAL_STRINGL(val, val_len, 1);
89: efree(val);
90: return;
91: }
92: /* }}} */
93:
94: /* {{{ proto bool SessionHandler::write(string id, string data)
95: Wraps the old write handler */
96: PHP_METHOD(SessionHandler, write)
97: {
98: char *key, *val;
99: int key_len, val_len;
100:
101: PS_SANITY_CHECK_IS_OPEN;
102:
103: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &key, &key_len, &val, &val_len) == FAILURE) {
104: return;
105: }
106:
107: RETVAL_BOOL(SUCCESS == PS(default_mod)->s_write(&PS(mod_data), key, val, val_len TSRMLS_CC));
108: }
109: /* }}} */
110:
111: /* {{{ proto bool SessionHandler::destroy(string id)
112: Wraps the old destroy handler */
113: PHP_METHOD(SessionHandler, destroy)
114: {
115: char *key;
116: int key_len;
117:
118: PS_SANITY_CHECK_IS_OPEN;
119:
120: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len) == FAILURE) {
121: return;
122: }
123:
124: PS(mod_user_is_open) = 0;
125: RETVAL_BOOL(SUCCESS == PS(default_mod)->s_destroy(&PS(mod_data), key TSRMLS_CC));
126: }
127: /* }}} */
128:
129: /* {{{ proto bool SessionHandler::gc(int maxlifetime)
130: Wraps the old gc handler */
131: PHP_METHOD(SessionHandler, gc)
132: {
133: long maxlifetime;
134: int nrdels;
135:
136: PS_SANITY_CHECK_IS_OPEN;
137:
138: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &maxlifetime) == FAILURE) {
139: return;
140: }
141:
142: RETVAL_BOOL(SUCCESS == PS(default_mod)->s_gc(&PS(mod_data), maxlifetime, &nrdels TSRMLS_CC));
143: }
144: /* }}} */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>