cvs: php4 /ext/session php_session.h session.c /ext/standard basic_functions.c url_scanner_ex.c url_scanner_ex.h url_scanner_ex.re /main output.c
| From: | Zeev Suraski | Date: | Sat, 25 Aug 2001 15:57:43 +0000 |
| Subject: | cvs: php4 /ext/session php_session.h session.c /ext/standard basic_functions.c url_scanner_ex.c url_scanner_ex.h url_scanner_ex.re /main output.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-7059@lists.php.net to get a copy of this message | ||
zeev Sat Aug 25 11:57:43 2001 EDT
Modified files:
/php4/ext/session php_session.h session.c
/php4/ext/standard basic_functions.c url_scanner_ex.c
url_scanner_ex.h url_scanner_ex.re
/php4/main output.c
Log:
Move the trans-sid mechanism to use the output buffering mechanism.
Advantages:
- Would work with the output buffering mechanism in general, and with
output compression in particular
- Should yield better performance (untested as of yet)
Index: php4/ext/session/php_session.h diff -u php4/ext/session/php_session.h:1.52 php4/ext/session/php_session.h:1.53 --- php4/ext/session/php_session.h:1.52 Sat Aug 25 08:47:12 2001 +++ php4/ext/session/php_session.h Sat Aug 25 11:57:38 2001 @@ -144,17 +144,16 @@ { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) } #ifdef TRANS_SID -void session_adapt_uris(const char *, size_t, char **, size_t * TSRMLS_DC); +void session_adapt_uris(const char *, size_t, char **, size_t *,zend_bool TSRMLS_DC); void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC); -void session_adapt_flush(int (*)(const char *, uint TSRMLS_DC) TSRMLS_DC); #else -#define session_adapt_uris(a,b,c,d) do { } while(0) +#define session_adapt_uris(a,b,c,d,e) do { } while(0) #define session_adapt_url(a,b,c,d) do { } while(0) -#define session_adapt_flush(a) do { } while(0) #endif void php_set_session_var(char *name, size_t namelen, zval *state_val,HashTable *var_hash TSRMLS_DC); int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC); +void php_session_start_output_handler(INIT_FUNC_ARGS, uint chunk_size); int php_session_register_module(ps_module *); Index: php4/ext/session/session.c diff -u php4/ext/session/session.c:1.238 php4/ext/session/session.c:1.239 --- php4/ext/session/session.c:1.238 Tue Aug 21 08:57:51 2001 +++ php4/ext/session/session.c Sat Aug 25 11:57:38 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session.c,v 1.238 2001/08/21 12:57:51 zeev Exp $ */ +/* $Id: session.c,v 1.239 2001/08/25 15:57:38 zeev Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -523,6 +523,7 @@ } } + static void php_session_save_current_state(TSRMLS_D) { char *val; @@ -1280,25 +1281,18 @@ /* }}} */ #ifdef TRANS_SID -void session_adapt_uris(const char *src, size_t srclen, char **new, size_t *newlen TSRMLS_DC) +void session_adapt_uris(const char *src, size_t srclen, char **new, size_t *newlen, zend_bool do_flush TSRMLS_DC) { - if (PS(define_sid) && (PS(session_status) == php_session_active)) - *new = url_adapt_ext_ex(src, srclen, PS(session_name), PS(id), newlen TSRMLS_CC); + if (PS(define_sid) && (PS(session_status) == php_session_active)) { + *new = url_adapt_ext_ex(src, srclen, PS(session_name), PS(id), newlen, do_flush TSRMLS_CC); + } } void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC) { - if (PS(define_sid) && (PS(session_status) == php_session_active)) + if (PS(define_sid) && (PS(session_status) == php_session_active)) { *new = url_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC); -} - -void session_adapt_flush(int (*write)(const char *, uint TSRMLS_DC) TSRMLS_DC) -{ - char *str; - size_t len; - - str = url_adapt_flush(&len TSRMLS_CC); - if (str) write(str, len TSRMLS_CC); + } } #endif @@ -1424,6 +1418,26 @@ php_info_print_table_end(); DISPLAY_INI_ENTRIES(); +} + + +static void php_session_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC) +{ + zend_bool do_flush; + + if (mode&PHP_OUTPUT_HANDLER_END) { + do_flush=1; + } + session_adapt_uris(output, output_len, handled_output, handled_output_len, do_flush TSRMLS_CC); +} + + +void php_session_start_output_handler(INIT_FUNC_ARGS, uint chunk_size) +{ + PHP_RINIT(url_scanner)(INIT_FUNC_ARGS_PASSTHRU); + PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU); + php_start_ob_buffer(NULL, chunk_size TSRMLS_CC); + php_ob_set_internal_handler(php_session_output_handler, chunk_size TSRMLS_CC); } /* Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.386 php4/ext/standard/basic_functions.c:1.387 --- php4/ext/standard/basic_functions.c:1.386 Wed Aug 15 18:49:15 2001 +++ php4/ext/standard/basic_functions.c Sat Aug 25 11:57:40 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.386 2001/08/15 22:49:15 zeev Exp $ */ +/* $Id: basic_functions.c,v 1.387 2001/08/25 15:57:40 zeev Exp $ */ #include "php.h" #include "php_main.h" @@ -28,6 +28,7 @@ #include "php_math.h" #include "php_incomplete_class.h" #include "ext/standard/info.h" +#include "ext/session/php_session.h" #include "zend_operators.h" #include <stdarg.h> #include <stdlib.h> @@ -882,8 +883,7 @@ #ifdef TRANS_SID if (BG(use_trans_sid)) { - PHP_RINIT(url_scanner)(INIT_FUNC_ARGS_PASSTHRU); - PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU); + php_session_start_output_handler(INIT_FUNC_ARGS_PASSTHRU, 4096); } #endif Index: php4/ext/standard/url_scanner_ex.c diff -u php4/ext/standard/url_scanner_ex.c:1.37 php4/ext/standard/url_scanner_ex.c:1.38 --- php4/ext/standard/url_scanner_ex.c:1.37 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.c Sat Aug 25 11:57:41 2001 @@ -836,7 +836,7 @@ return buf.c; } -char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC) +char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC) { char *ret; url_adapt_state_ex_t *ctx; @@ -848,9 +848,16 @@ mainloop(ctx, src, srclen TSRMLS_CC); *newlen = ctx->result.len; - if (!ctx->result.c) + if (!ctx->result.c) { smart_str_appendl(&ctx->result, "", 0); + } smart_str_0(&ctx->result); + if (do_flush) { + smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len); + *newlen += ctx->buf.len; + ctx->buf.c = 0; + ctx->buf.len = 0; + } ctx->result.len = 0; return ctx->result.c; } Index: php4/ext/standard/url_scanner_ex.h diff -u php4/ext/standard/url_scanner_ex.h:1.12 php4/ext/standard/url_scanner_ex.h:1.13 --- php4/ext/standard/url_scanner_ex.h:1.12 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.h Sat Aug 25 11:57:42 2001 @@ -24,7 +24,7 @@ PHP_RSHUTDOWN_FUNCTION(url_scanner_ex); PHP_RINIT_FUNCTION(url_scanner_ex); -char *url_adapt_ext_ex(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC); +char *url_adapt_ext_ex(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC); char *url_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC); Index: php4/ext/standard/url_scanner_ex.re diff -u php4/ext/standard/url_scanner_ex.re:1.34 php4/ext/standard/url_scanner_ex.re:1.35 --- php4/ext/standard/url_scanner_ex.re:1.34 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.re Sat Aug 25 11:57:42 2001 @@ -352,7 +352,7 @@ return buf.c; } -char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC) +char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC) { char *ret; url_adapt_state_ex_t *ctx; @@ -364,9 +364,16 @@ mainloop(ctx, src, srclen TSRMLS_CC); *newlen = ctx->result.len; - if (!ctx->result.c) + if (!ctx->result.c) { smart_str_appendl(&ctx->result, "", 0); + } smart_str_0(&ctx->result); + if (do_flush) { + smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len); + *newlen += ctx->buf.len; + ctx->buf.c = 0; + ctx->buf.len = 0; + } ctx->result.len = 0; return ctx->result.c; } Index: php4/main/output.c diff -u php4/main/output.c:1.74 php4/main/output.c:1.75 --- php4/main/output.c:1.74 Sat Aug 11 18:55:00 2001 +++ php4/main/output.c Sat Aug 25 11:57:42 2001 @@ -17,11 +17,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: output.c,v 1.74 2001/08/11 22:55:00 zeev Exp $ */ +/* $Id: output.c,v 1.75 2001/08/25 15:57:42 zeev Exp $ */ #include "php.h" #include "ext/standard/head.h" -#include "ext/session/php_session.h" #include "ext/standard/basic_functions.h" #include "SAPI.h" @@ -253,10 +252,6 @@ while (OG(ob_nesting_level)!=0) { php_end_ob_buffer(send_buffer, 0 TSRMLS_CC); } - - if (!OG(disable_output) && send_buffer && BG(use_trans_sid)) { - session_adapt_flush(OG(php_header_write) TSRMLS_CC); - } } /* }}} */ @@ -427,11 +422,7 @@ if (OG(disable_output)) { return 0; - } - if (BG(use_trans_sid)) { - session_adapt_uris(str, str_length, &newstr, &new_length TSRMLS_CC); - } - + } if (newstr) { str = newstr; str_length = new_length;
Index: php4/ext/session/php_session.h diff -u php4/ext/session/php_session.h:1.52 php4/ext/session/php_session.h:1.53 --- php4/ext/session/php_session.h:1.52 Sat Aug 25 08:47:12 2001 +++ php4/ext/session/php_session.h Sat Aug 25 11:57:38 2001 @@ -144,17 +144,16 @@ { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) } #ifdef TRANS_SID -void session_adapt_uris(const char *, size_t, char **, size_t * TSRMLS_DC); +void session_adapt_uris(const char *, size_t, char **, size_t *,zend_bool TSRMLS_DC); void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC); -void session_adapt_flush(int (*)(const char *, uint TSRMLS_DC) TSRMLS_DC); #else -#define session_adapt_uris(a,b,c,d) do { } while(0) +#define session_adapt_uris(a,b,c,d,e) do { } while(0) #define session_adapt_url(a,b,c,d) do { } while(0) -#define session_adapt_flush(a) do { } while(0) #endif void php_set_session_var(char *name, size_t namelen, zval *state_val,HashTable *var_hash TSRMLS_DC); int php_get_session_var(char *name, size_t namelen, zval ***state_var TSRMLS_DC); +void php_session_start_output_handler(INIT_FUNC_ARGS, uint chunk_size); int php_session_register_module(ps_module *); Index: php4/ext/session/session.c diff -u php4/ext/session/session.c:1.238 php4/ext/session/session.c:1.239 --- php4/ext/session/session.c:1.238 Tue Aug 21 08:57:51 2001 +++ php4/ext/session/session.c Sat Aug 25 11:57:38 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session.c,v 1.238 2001/08/21 12:57:51 zeev Exp $ */ +/* $Id: session.c,v 1.239 2001/08/25 15:57:38 zeev Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -523,6 +523,7 @@ } } + static void php_session_save_current_state(TSRMLS_D) { char *val; @@ -1280,25 +1281,18 @@ /* }}} */ #ifdef TRANS_SID -void session_adapt_uris(const char *src, size_t srclen, char **new, size_t *newlen TSRMLS_DC) +void session_adapt_uris(const char *src, size_t srclen, char **new, size_t *newlen, zend_bool do_flush TSRMLS_DC) { - if (PS(define_sid) && (PS(session_status) == php_session_active)) - *new = url_adapt_ext_ex(src, srclen, PS(session_name), PS(id), newlen TSRMLS_CC); + if (PS(define_sid) && (PS(session_status) == php_session_active)) { + *new = url_adapt_ext_ex(src, srclen, PS(session_name), PS(id), newlen, do_flush TSRMLS_CC); + } } void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC) { - if (PS(define_sid) && (PS(session_status) == php_session_active)) + if (PS(define_sid) && (PS(session_status) == php_session_active)) { *new = url_adapt_single_url(url, urllen, PS(session_name), PS(id), newlen TSRMLS_CC); -} - -void session_adapt_flush(int (*write)(const char *, uint TSRMLS_DC) TSRMLS_DC) -{ - char *str; - size_t len; - - str = url_adapt_flush(&len TSRMLS_CC); - if (str) write(str, len TSRMLS_CC); + } } #endif @@ -1424,6 +1418,26 @@ php_info_print_table_end(); DISPLAY_INI_ENTRIES(); +} + + +static void php_session_output_handler(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode TSRMLS_DC) +{ + zend_bool do_flush; + + if (mode&PHP_OUTPUT_HANDLER_END) { + do_flush=1; + } + session_adapt_uris(output, output_len, handled_output, handled_output_len, do_flush TSRMLS_CC); +} + + +void php_session_start_output_handler(INIT_FUNC_ARGS, uint chunk_size) +{ + PHP_RINIT(url_scanner)(INIT_FUNC_ARGS_PASSTHRU); + PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU); + php_start_ob_buffer(NULL, chunk_size TSRMLS_CC); + php_ob_set_internal_handler(php_session_output_handler, chunk_size TSRMLS_CC); } /* Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.386 php4/ext/standard/basic_functions.c:1.387 --- php4/ext/standard/basic_functions.c:1.386 Wed Aug 15 18:49:15 2001 +++ php4/ext/standard/basic_functions.c Sat Aug 25 11:57:40 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.386 2001/08/15 22:49:15 zeev Exp $ */ +/* $Id: basic_functions.c,v 1.387 2001/08/25 15:57:40 zeev Exp $ */ #include "php.h" #include "php_main.h" @@ -28,6 +28,7 @@ #include "php_math.h" #include "php_incomplete_class.h" #include "ext/standard/info.h" +#include "ext/session/php_session.h" #include "zend_operators.h" #include <stdarg.h> #include <stdlib.h> @@ -882,8 +883,7 @@ #ifdef TRANS_SID if (BG(use_trans_sid)) { - PHP_RINIT(url_scanner)(INIT_FUNC_ARGS_PASSTHRU); - PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU); + php_session_start_output_handler(INIT_FUNC_ARGS_PASSTHRU, 4096); } #endif Index: php4/ext/standard/url_scanner_ex.c diff -u php4/ext/standard/url_scanner_ex.c:1.37 php4/ext/standard/url_scanner_ex.c:1.38 --- php4/ext/standard/url_scanner_ex.c:1.37 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.c Sat Aug 25 11:57:41 2001 @@ -836,7 +836,7 @@ return buf.c; } -char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC) +char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC) { char *ret; url_adapt_state_ex_t *ctx; @@ -848,9 +848,16 @@ mainloop(ctx, src, srclen TSRMLS_CC); *newlen = ctx->result.len; - if (!ctx->result.c) + if (!ctx->result.c) { smart_str_appendl(&ctx->result, "", 0); + } smart_str_0(&ctx->result); + if (do_flush) { + smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len); + *newlen += ctx->buf.len; + ctx->buf.c = 0; + ctx->buf.len = 0; + } ctx->result.len = 0; return ctx->result.c; } Index: php4/ext/standard/url_scanner_ex.h diff -u php4/ext/standard/url_scanner_ex.h:1.12 php4/ext/standard/url_scanner_ex.h:1.13 --- php4/ext/standard/url_scanner_ex.h:1.12 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.h Sat Aug 25 11:57:42 2001 @@ -24,7 +24,7 @@ PHP_RSHUTDOWN_FUNCTION(url_scanner_ex); PHP_RINIT_FUNCTION(url_scanner_ex); -char *url_adapt_ext_ex(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC); +char *url_adapt_ext_ex(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC); char *url_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen TSRMLS_DC); Index: php4/ext/standard/url_scanner_ex.re diff -u php4/ext/standard/url_scanner_ex.re:1.34 php4/ext/standard/url_scanner_ex.re:1.35 --- php4/ext/standard/url_scanner_ex.re:1.34 Sun Aug 5 12:43:57 2001 +++ php4/ext/standard/url_scanner_ex.re Sat Aug 25 11:57:42 2001 @@ -352,7 +352,7 @@ return buf.c; } -char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen TSRMLS_DC) +char *url_adapt_ext(const char *src, size_t srclen, const char *name, const char *value, size_t *newlen, zend_bool do_flush TSRMLS_DC) { char *ret; url_adapt_state_ex_t *ctx; @@ -364,9 +364,16 @@ mainloop(ctx, src, srclen TSRMLS_CC); *newlen = ctx->result.len; - if (!ctx->result.c) + if (!ctx->result.c) { smart_str_appendl(&ctx->result, "", 0); + } smart_str_0(&ctx->result); + if (do_flush) { + smart_str_appendl(&ctx->result, ctx->buf.c, ctx->buf.len); + *newlen += ctx->buf.len; + ctx->buf.c = 0; + ctx->buf.len = 0; + } ctx->result.len = 0; return ctx->result.c; } Index: php4/main/output.c diff -u php4/main/output.c:1.74 php4/main/output.c:1.75 --- php4/main/output.c:1.74 Sat Aug 11 18:55:00 2001 +++ php4/main/output.c Sat Aug 25 11:57:42 2001 @@ -17,11 +17,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: output.c,v 1.74 2001/08/11 22:55:00 zeev Exp $ */ +/* $Id: output.c,v 1.75 2001/08/25 15:57:42 zeev Exp $ */ #include "php.h" #include "ext/standard/head.h" -#include "ext/session/php_session.h" #include "ext/standard/basic_functions.h" #include "SAPI.h" @@ -253,10 +252,6 @@ while (OG(ob_nesting_level)!=0) { php_end_ob_buffer(send_buffer, 0 TSRMLS_CC); } - - if (!OG(disable_output) && send_buffer && BG(use_trans_sid)) { - session_adapt_flush(OG(php_header_write) TSRMLS_CC); - } } /* }}} */ @@ -427,11 +422,7 @@ if (OG(disable_output)) { return 0; - } - if (BG(use_trans_sid)) { - session_adapt_uris(str, str_length, &newstr, &new_length TSRMLS_CC); - } - + } if (newstr) { str = newstr; str_length = new_length;