| modification, are permitted provided that the conditions mentioned |
| in the accompanying LICENSE file are met. |
+--------------------------------------------------------------------+
- | Copyright (c) 2004-2006, Michael Wallner <mike@php.net> |
+ | Copyright (c) 2004-2007, Michael Wallner <mike@php.net> |
+--------------------------------------------------------------------+
*/
#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"
# ifdef HTTP_HAVE_CURL
# include "php_http_request_object.h"
# include "php_http_requestpool_object.h"
+# include "php_http_requestdatashare_object.h"
# endif
# ifdef HTTP_HAVE_ZLIB
# include "php_http_deflatestream_object.h"
/* {{{ http_functions[] */
zend_function_entry http_functions[] = {
- PHP_FE(http_test, NULL)
PHP_FE(http_date, NULL)
PHP_FE(http_build_url, http_arg_pass_ref_4)
PHP_FE(http_build_str, NULL)
PHP_FE(http_parse_message, NULL)
PHP_FE(http_parse_headers, NULL)
PHP_FE(http_parse_cookie, NULL)
+ PHP_FE(http_build_cookie, NULL)
PHP_FE(http_parse_params, NULL)
PHP_FE(http_get_request_headers, NULL)
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)
+ PHP_FE(http_persistent_handles_ident, NULL)
+# endif
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)
PHP_FE(http_put_file, http_arg_pass_ref_4)
PHP_FE(http_put_stream, http_arg_pass_ref_4)
PHP_FE(http_request, http_arg_pass_ref_5)
-#ifdef HAVE_CURL_GETFORMDATA
PHP_FE(http_request_body_encode, NULL)
-#endif
#endif
PHP_FE(http_request_method_register, NULL)
PHP_FE(http_request_method_unregister, NULL)
static inline void _http_globals_init(zend_http_globals *G TSRMLS_DC)
{
#ifdef HTTP_HAVE_SAPI_RTIME
- G->request.time = Z_LVAL_P(http_get_server_var("REQUEST_TIME"));
+ G->request.time = sapi_get_request_time(TSRMLS_C);
#else
G->request.time = time(NULL);
#endif
- G->send.buffer_size = HTTP_SENDBUF_SIZE;
- G->send.not_found_404 = 1;
+ G->send.buffer_size = 0;
G->read_post_data = 0;
}
#define http_globals_free(g) _http_globals_free((g) TSRMLS_CC)
static inline void _http_globals_free(zend_http_globals *G TSRMLS_DC)
{
+ if (G->request.headers) {
+ zend_hash_destroy(G->request.headers);
+ FREE_HASHTABLE(G->request.headers);
+ G->request.headers = NULL;
+ }
STR_SET(G->send.content_type, NULL);
STR_SET(G->send.unquoted_etag, NULL);
+ if (G->server_var) {
+ zval_ptr_dtor(&G->server_var);
+ G->server_var = NULL;
+ }
}
/* }}} */
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);
}
+#ifdef HTTP_HAVE_PERSISTENT_HANDLES
+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);
+}
+#endif
#ifndef ZEND_ENGINE_2
# define OnUpdateLong OnUpdateInt
HTTP_PHP_INI_ENTRY("http.log.composite", "", PHP_INI_ALL, OnUpdateString, log.composite)
HTTP_PHP_INI_ENTRY("http.request.methods.allowed", "", PHP_INI_ALL, http_update_allowed_methods, request.methods.allowed)
HTTP_PHP_INI_ENTRY("http.request.methods.custom", "", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateString, request.methods.custom.ini)
+#if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL)
+ HTTP_PHP_INI_ENTRY("http.request.datashare.cookie", "0", PHP_INI_SYSTEM, OnUpdateBool, request.datashare.cookie)
+ HTTP_PHP_INI_ENTRY("http.request.datashare.dns", "1", PHP_INI_SYSTEM, OnUpdateBool, request.datashare.dns)
+ HTTP_PHP_INI_ENTRY("http.request.datashare.ssl", "0", PHP_INI_SYSTEM, OnUpdateBool, request.datashare.ssl)
+ HTTP_PHP_INI_ENTRY("http.request.datashare.connect", "0", PHP_INI_SYSTEM, OnUpdateBool, request.datashare.connect)
+#endif
#ifdef HTTP_HAVE_ZLIB
HTTP_PHP_INI_ENTRY("http.send.inflate.start_auto", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, send.inflate.start_auto)
HTTP_PHP_INI_ENTRY("http.send.inflate.start_flags", "0", PHP_INI_ALL, OnUpdateLong, send.inflate.start_flags)
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
+#ifdef HTTP_HAVE_PERSISTENT_HANDLES
+ HTTP_PHP_INI_ENTRY("http.persistent.handles.ident", "GLOBAL", PHP_INI_ALL, http_update_persistent_handle_ident, persistent.handles.ident.s)
#endif
HTTP_PHP_INI_ENTRY("http.send.not_found_404", "1", PHP_INI_ALL, OnUpdateBool, send.not_found_404)
#ifdef ZEND_ENGINE_2
(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)) ||
+# ifdef ZEND_ENGINE_2
+ (SUCCESS != PHP_MINIT_CALL(http_request_pool)) ||
+# endif
+# endif
(SUCCESS != PHP_MINIT_CALL(http_request)) ||
+# ifdef ZEND_ENGINE_2
+ (SUCCESS != PHP_MINIT_CALL(http_request_datashare)) ||
+# endif
#endif /* HTTP_HAVE_CURL */
#ifdef HTTP_HAVE_ZLIB
(SUCCESS != PHP_MINIT_CALL(http_encoding)) ||
# ifdef HTTP_HAVE_CURL
(SUCCESS != PHP_MINIT_CALL(http_request_object)) ||
(SUCCESS != PHP_MINIT_CALL(http_requestpool_object))||
+ (SUCCESS != PHP_MINIT_CALL(http_requestdatashare_object))||
# endif /* HTTP_HAVE_CURL */
# ifdef HTTP_HAVE_ZLIB
(SUCCESS != PHP_MINIT_CALL(http_deflatestream_object)) ||
{
UNREGISTER_INI_ENTRIES();
#ifdef HTTP_HAVE_CURL
- return PHP_MSHUTDOWN_CALL(http_request);
+ if (
+# 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
+ ) {
+ return FAILURE;
+ }
#endif
return SUCCESS;
}
if ( (SUCCESS != PHP_RINIT_CALL(http_request_method))
#ifdef HTTP_HAVE_ZLIB
|| (SUCCESS != PHP_RINIT_CALL(http_encoding))
+#endif
+#if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL)
+ || (SUCCESS != PHP_RINIT_CALL(http_request_datashare))
#endif
) {
return FAILURE;
#ifdef HTTP_HAVE_ZLIB
|| (SUCCESS != PHP_RSHUTDOWN_CALL(http_encoding))
#endif
- ) {
+#if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL)
+ || (SUCCESS != PHP_RSHUTDOWN_CALL(http_request_datashare))
+#endif
+ ) {
status = FAILURE;
}
# ifdef HTTP_HAVE_CURL
"HttpRequest, "
"HttpRequestPool, "
+ "HttpRequestDataShare, "
# endif
# ifdef HTTP_HAVE_ZLIB
"HttpDeflateStream, "
"http.chunked_decode, http.chunked_encode, http.deflate, http.inflate"
#endif
);
+#ifdef HTTP_HAVE_PERSISTENT_HANDLES
+ {
+ phpstr s;
+ HashTable *ht;
+ HashPosition pos1, pos2;
+ HashKey key1 = initHashKey(0), key2 = initHashKey(0);
+ zval **val1, **val2;
+
+ if ((ht = http_persistent_handle_statall()) && zend_hash_num_elements(ht)) {
+ phpstr_init(&s);
+
+ FOREACH_HASH_KEYVAL(pos1, ht, key1, val1) {
+ phpstr_append(&s, key1.str, key1.len-1);
+ phpstr_appends(&s, " (");
+ if (zend_hash_num_elements(Z_ARRVAL_PP(val1))) {
+ FOREACH_KEYVAL(pos2, *val1, key2, val2) {
+ phpstr_append(&s, key2.str, key2.len-1);
+ phpstr_appendf(&s, ":%ld, ", Z_LVAL_PP(val2));
+ }
+ PHPSTR_LEN(&s) -= 2;
+ } else {
+ phpstr_appends(&s, "0");
+ }
+ phpstr_appends(&s, "), ");
+ }
+ 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();
#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");