X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http.c;h=095cc1ebdc04cb6bcdbf532d561f1fc8ea9efa8c;hp=e55b35f67e9cec1641194e8af0e010b163186917;hb=273c07d02d566bb0872879f34fd82803baa5eb20;hpb=accf1817e811a7edabd687ef6105983f39f13942 diff --git a/http.c b/http.c index e55b35f..095cc1e 100644 --- a/http.c +++ b/http.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2006, Michael Wallner | + | Copyright (c) 2004-2007, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -28,14 +28,12 @@ #include "php_http_cache_api.h" #include "php_http_send_api.h" #include "php_http_message_api.h" +#include "php_http_persistent_handle_api.h" #include "php_http_request_method_api.h" #ifdef HTTP_HAVE_CURL # include "php_http_request_api.h" # include "php_http_request_pool_api.h" # include "php_http_request_datashare_api.h" -# ifdef HTTP_HAVE_PERSISTENT_HANDLES -# include "php_http_persistent_handle_api.h" -# endif #endif #ifdef HTTP_HAVE_ZLIB # include "php_http_encoding_api.h" @@ -104,11 +102,10 @@ zend_function_entry http_functions[] = { PHP_FE(http_get_request_body, NULL) PHP_FE(http_get_request_body_stream, NULL) PHP_FE(http_match_request_header, NULL) -#ifdef HTTP_HAVE_CURL -# ifdef HTTP_HAVE_PERSISTENT_HANDLES PHP_FE(http_persistent_handles_count, NULL) PHP_FE(http_persistent_handles_clean, NULL) -# endif + PHP_FE(http_persistent_handles_ident, NULL) +#ifdef HTTP_HAVE_CURL PHP_FE(http_get, http_arg_pass_ref_3) PHP_FE(http_head, http_arg_pass_ref_3) PHP_FE(http_post_data, http_arg_pass_ref_4) @@ -199,7 +196,6 @@ static inline void _http_globals_init(zend_http_globals *G TSRMLS_DC) G->request.time = time(NULL); #endif G->send.buffer_size = 0; - G->send.not_found_404 = 1; G->read_post_data = 0; } @@ -240,6 +236,11 @@ PHP_INI_MH(http_update_allowed_methods) http_check_allowed_methods(new_value, new_value_length); return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); } +PHP_INI_MH(http_update_persistent_handle_ident) +{ + HTTP_G->persistent.handles.ident.h = zend_hash_func(new_value, HTTP_G->persistent.handles.ident.l = new_value_length+1); + return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); +} #ifndef ZEND_ENGINE_2 # define OnUpdateLong OnUpdateInt @@ -266,6 +267,8 @@ PHP_INI_BEGIN() HTTP_PHP_INI_ENTRY("http.send.deflate.start_auto", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, send.deflate.start_auto) HTTP_PHP_INI_ENTRY("http.send.deflate.start_flags", "0", PHP_INI_ALL, OnUpdateLong, send.deflate.start_flags) #endif + HTTP_PHP_INI_ENTRY("http.persistent.handles.limit", "-1", PHP_INI_SYSTEM, OnUpdateLong, persistent.handles.limit) + HTTP_PHP_INI_ENTRY("http.persistent.handles.ident", "GLOBAL", PHP_INI_ALL, http_update_persistent_handle_ident, persistent.handles.ident.s) HTTP_PHP_INI_ENTRY("http.send.not_found_404", "1", PHP_INI_ALL, OnUpdateBool, send.not_found_404) #ifdef ZEND_ENGINE_2 HTTP_PHP_INI_ENTRY("http.only_exceptions", "0", PHP_INI_ALL, OnUpdateBool, only_exceptions) @@ -283,17 +286,16 @@ PHP_MINIT_FUNCTION(http) REGISTER_INI_ENTRIES(); - if ( (SUCCESS != PHP_MINIT_CALL(http_support)) || + if ( (SUCCESS != PHP_MINIT_CALL(http_persistent_handle)) || /* first */ + (SUCCESS != PHP_MINIT_CALL(http_support)) || (SUCCESS != PHP_MINIT_CALL(http_cookie)) || (SUCCESS != PHP_MINIT_CALL(http_send)) || (SUCCESS != PHP_MINIT_CALL(http_url)) || + #ifdef HTTP_HAVE_CURL -# ifdef HTTP_HAVE_PERSISTENT_HANDLES - (SUCCESS != PHP_MINIT_CALL(http_persistent_handle)) || - (SUCCESS != PHP_MINIT_CALL(http_request_pool)) || -# endif (SUCCESS != PHP_MINIT_CALL(http_request)) || # ifdef ZEND_ENGINE_2 + (SUCCESS != PHP_MINIT_CALL(http_request_pool)) || (SUCCESS != PHP_MINIT_CALL(http_request_datashare)) || # endif #endif /* HTTP_HAVE_CURL */ @@ -334,19 +336,17 @@ PHP_MINIT_FUNCTION(http) PHP_MSHUTDOWN_FUNCTION(http) { UNREGISTER_INI_ENTRIES(); -#ifdef HTTP_HAVE_CURL if ( +#ifdef HTTP_HAVE_CURL # ifdef ZEND_ENGINE_2 (SUCCESS != PHP_MSHUTDOWN_CALL(http_request_datashare)) || # endif - (SUCCESS != PHP_MSHUTDOWN_CALL(http_request)) -# ifdef HTTP_HAVE_PERSISTENT_HANDLES - || (SUCCESS != PHP_MSHUTDOWN_CALL(http_persistent_handle)) -# endif + (SUCCESS != PHP_MSHUTDOWN_CALL(http_request)) || +#endif + (SUCCESS != PHP_MSHUTDOWN_CALL(http_persistent_handle)) /* last */ ) { return FAILURE; } -#endif return SUCCESS; } /* }}} */ @@ -433,35 +433,6 @@ PHP_MINFO_FUNCTION(http) "http.chunked_decode, http.chunked_encode, http.deflate, http.inflate" #endif ); -#ifdef HTTP_HAVE_PERSISTENT_HANDLES - { - phpstr s; - HashTable *ht; - HashPosition pos; - HashKey key = initHashKey(0); - zval **val; - - if ((ht = http_persistent_handle_statall())) { - phpstr_init(&s); - - FOREACH_HASH_KEYVAL(pos, ht, key, val) { - phpstr_appendf(&s, "%s (%ld), ", key.str, Z_LVAL_PP(val)); - } - zend_hash_destroy(ht); - FREE_HASHTABLE(ht); - - PHPSTR_LEN(&s) -= 2; /* get rid of last ", " */ - phpstr_fix(&s); - - php_info_print_table_row(2, "Persistent Handles", PHPSTR_VAL(&s)); - phpstr_dtor(&s); - } else { - php_info_print_table_row(2, "Persistent Handles", "none"); - } - } -#else - php_info_print_table_row(2, "Persistent Handles", "disabled"); -#endif } php_info_print_table_end(); @@ -479,7 +450,7 @@ PHP_MINFO_FUNCTION(http) #else php_info_print_table_row(3, "libz", "disabled", "disabled"); #endif -#if defined(HTTP_HAVE_MAGIC) && !defined(WONKY) +#if defined(HTTP_HAVE_MAGIC) php_info_print_table_row(3, "libmagic", "unknown", "unknown"); #else php_info_print_table_row(3, "libmagic", "disabled", "disabled"); @@ -487,6 +458,42 @@ PHP_MINFO_FUNCTION(http) } php_info_print_table_end(); + php_info_print_table_start(); + php_info_print_table_colspan_header(4, "Persistent Handles"); + php_info_print_table_header(4, "Provider", "Ident", "Used", "Free"); + { + HashTable *ht; + HashPosition pos1, pos2; + HashKey provider = initHashKey(0), ident = initHashKey(0); + zval **val, **sub, **zused, **zfree; + + if ((ht = http_persistent_handle_statall()) && zend_hash_num_elements(ht)) { + FOREACH_HASH_KEYVAL(pos1, ht, provider, val) { + if (zend_hash_num_elements(Z_ARRVAL_PP(val))) { + FOREACH_KEYVAL(pos2, *val, ident, sub) { + if ( SUCCESS == zend_hash_find(Z_ARRVAL_PP(sub), ZEND_STRS("used"), (void *) &zused) && + SUCCESS == zend_hash_find(Z_ARRVAL_PP(sub), ZEND_STRS("free"), (void *) &zfree)) { + convert_to_string(*zused); + convert_to_string(*zfree); + php_info_print_table_row(4, provider.str, ident.str, Z_STRVAL_PP(zused), Z_STRVAL_PP(zfree)); + } else { + php_info_print_table_row(4, provider.str, ident.str, "0", "0"); + } + } + } else { + php_info_print_table_row(4, provider.str, "N/A", "0", "0"); + } + } + } else { + php_info_print_table_row(4, "N/A", "N/A", "0", "0"); + } + if (ht) { + zend_hash_destroy(ht); + FREE_HASHTABLE(ht); + } + } + php_info_print_table_end(); + php_info_print_table_start(); php_info_print_table_colspan_header(2, "Request Methods"); {