lbarnaud Wed Sep 17 17:22:07 2008 UTC Modified files: /php-src/ext/session php_session.h session.c Log: Added ability to cancel upload in rfc1867 handler http://cvs.php.net/viewvc.cgi/php-src/ext/session/php_session.h?r1=1.117&r2=1.118&diff_format=u Index: php-src/ext/session/php_session.h diff -u php-src/ext/session/php_session.h:1.117 php-src/ext/session/php_session.h:1.118 --- php-src/ext/session/php_session.h:1.117 Thu Sep 11 11:51:07 2008 +++ php-src/ext/session/php_session.h Wed Sep 17 17:22:06 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_session.h,v 1.117 2008/09/11 11:51:07 lbarnaud Exp $ */ +/* $Id: php_session.h,v 1.118 2008/09/17 17:22:06 lbarnaud Exp $ */ #ifndef PHP_SESSION_H #define PHP_SESSION_H @@ -110,6 +110,7 @@ zval *current_file; zval *current_file_bytes_processed; zend_bool apply_trans_sid; + zend_bool cancel_upload; } php_session_rfc1867_progress; typedef struct _php_ps_globals { http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.493&r2=1.494&diff_format=u Index: php-src/ext/session/session.c diff -u php-src/ext/session/session.c:1.493 php-src/ext/session/session.c:1.494 --- php-src/ext/session/session.c:1.493 Thu Sep 11 11:51:07 2008 +++ php-src/ext/session/session.c Wed Sep 17 17:22:07 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session.c,v 1.493 2008/09/11 11:51:07 lbarnaud Exp $ */ +/* $Id: session.c,v 1.494 2008/09/17 17:22:07 lbarnaud Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -2152,9 +2152,23 @@ static inline void php_session_rfc1867_update(php_session_rfc1867_progress *progress TSRMLS_DC) /* {{{ */ { + zval **progress_ary, **cancel_upload; php_session_initialize(TSRMLS_C); PS(session_status) = php_session_active; IF_SESSION_VARS() { + while (!progress->cancel_upload) { + if (zend_u_symtable_find(Z_ARRVAL_P(PS(http_session_vars)), Z_TYPE(progress->key), Z_UNIVAL(progress->key), Z_UNILEN(progress->key)+1, (void**)&progress_ary) != SUCCESS) { + break; + } + if (Z_TYPE_PP(progress_ary) != IS_ARRAY) { + break; + } + if (zend_ascii_hash_find(Z_ARRVAL_PP(progress_ary), "cancel_upload", sizeof("cancel_upload"), (void**)&cancel_upload) != SUCCESS) { + break; + } + progress->cancel_upload = zend_is_true(*cancel_upload); + break; + } Z_ADDREF_P(progress->data); zend_u_symtable_update(Z_ARRVAL_P(PS(http_session_vars)), Z_TYPE(progress->key), Z_UNIVAL(progress->key), Z_UNILEN(progress->key)+1, &progress->data, sizeof(zval *), NULL); } @@ -2347,10 +2361,15 @@ zval_ptr_dtor(&progress->data); } efree(progress); + progress = NULL; + PS(rfc1867_progress) = NULL; } break; } + if (progress && progress->cancel_upload) { + return FAILURE; + } return retval; } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php