Annotation of embedaddon/php/ext/session/mod_user_class.c, revision 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>