- crunch ARG_INFO
authorMichael Wallner <mike@php.net>
Tue, 7 Jun 2005 19:16:34 +0000 (19:16 +0000)
committerMichael Wallner <mike@php.net>
Tue, 7 Jun 2005 19:16:34 +0000 (19:16 +0000)
- move request dependend stuff from http.c to http_request_api.c
- provide a llist global for curl_slists (needed for custom headers in requests)
- make http_curl_copystr() http_request_data_copy() accepting different arguments
- don't copy request_uri twice

http.c
http_request_api.c
http_request_object.c
http_util_object.c
php_http.h
php_http_request_api.h
php_http_std_defs.h

diff --git a/http.c b/http.c
index 575fc3c724f2a43d2ec22d9d46a4341bdb6b986e..11c7439429ee52b0b6ed1af1eca8d36721ce4a66 100644 (file)
--- a/http.c
+++ b/http.c
 
 #include "phpstr/phpstr.h"
 
-#ifdef HTTP_HAVE_CURL
-#ifdef ZEND_ENGINE_2
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_3, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_4, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_5, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-#else
-static unsigned char http_request_info_ref_3[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE};
-static unsigned char http_request_info_ref_4[] = {4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE};
-static unsigned char http_request_info_ref_5[] = {5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE};
-#endif /* ZEND_ENGINE_2 */
-#endif /* HTTP_HAVE_CURL */
-
-ZEND_DECLARE_MODULE_GLOBALS(http)
+ZEND_DECLARE_MODULE_GLOBALS(http);
+HTTP_DECLARE_ARG_PASS_INFO();
 
 #ifdef COMPILE_DL_HTTP
 ZEND_GET_MODULE(http)
@@ -117,12 +86,12 @@ function_entry http_functions[] = {
        PHP_FE(http_get_request_headers, NULL)
        PHP_FE(http_match_request_header, NULL)
 #ifdef HTTP_HAVE_CURL
-       PHP_FE(http_get, http_request_info_ref_3)
-       PHP_FE(http_head, http_request_info_ref_3)
-       PHP_FE(http_post_data, http_request_info_ref_4)
-       PHP_FE(http_post_fields, http_request_info_ref_5)
-       PHP_FE(http_put_file, http_request_info_ref_4)
-       PHP_FE(http_put_stream, http_request_info_ref_4)
+       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_post_fields, http_arg_pass_ref_5)
+       PHP_FE(http_put_file, http_arg_pass_ref_4)
+       PHP_FE(http_put_stream, http_arg_pass_ref_4)
        PHP_FE(http_request_method_register, NULL)
        PHP_FE(http_request_method_unregister, NULL)
        PHP_FE(http_request_method_exists, NULL)
@@ -159,17 +128,6 @@ zend_module_entry http_module_entry = {
 
 int http_module_number;
 
-#ifdef HTTP_HAVE_CURL
-#      ifdef HTTP_CURL_USE_ZEND_MM
-static void http_curl_free(void *p)                                    { efree(p); }
-static char *http_curl_strdup(const char *p)           { return estrdup(p); }
-static void *http_curl_malloc(size_t s)                                { return emalloc(s); }
-static void *http_curl_realloc(void *p, size_t s)      { return erealloc(p, s); }
-static void *http_curl_calloc(size_t n, size_t s)      { return ecalloc(n, s); }
-#      endif /* HTTP_CURL_USE_ZEND_MM */
-static void http_curl_freestr(void *s)                         { efree(*(char **)s); }
-#endif /* HTTP_HAVE_CURL */
-
 /* {{{ http_globals */
 static inline void http_globals_init(zend_http_globals *G)
 {
@@ -177,15 +135,18 @@ static inline void http_globals_init(zend_http_globals *G)
        G->send.buffer_size = HTTP_SENDBUF_SIZE;
        zend_hash_init(&G->request.methods.custom, 0, NULL, ZVAL_PTR_DTOR, 0);
 #ifdef HTTP_HAVE_CURL
-       zend_llist_init(&G->request.curl.copies, sizeof(char *), http_curl_freestr, 0);
+       zend_llist_init(&G->request.copies.strings, sizeof(char *), http_request_data_free_string, 0);
+       zend_llist_init(&G->request.copies.slists, sizeof(struct curl_slist *), http_request_data_free_slist, 0);
 #endif
 }
+
 static inline void http_globals_free(zend_http_globals *G)
 {
        STR_FREE(G->send.content_type);
        STR_FREE(G->send.unquoted_etag);
        zend_hash_destroy(&G->request.methods.custom);
-       zend_llist_clean(&G->request.curl.copies);
+       zend_llist_clean(&G->request.copies.strings);
+       zend_llist_clean(&G->request.copies.slists);
 }
 /* }}} */
 
@@ -226,16 +187,9 @@ PHP_MINIT_FUNCTION(http)
        REGISTER_INI_ENTRIES();
 
 #ifdef HTTP_HAVE_CURL
-#      ifdef HTTP_CURL_USE_ZEND_MM
-       if (CURLE_OK != curl_global_init_mem(CURL_GLOBAL_ALL,
-                       http_curl_malloc,
-                       http_curl_free,
-                       http_curl_realloc,
-                       http_curl_strdup,
-                       http_curl_calloc)) {
+       if (SUCCESS != http_request_global_init()) {
                return FAILURE;
        }
-#      endif /* HTTP_CURL_USE_ZEND_MM */
 #endif /* HTTP_HAVE_CURL */
 
 #ifdef ZEND_ENGINE_2
@@ -353,7 +307,7 @@ PHP_MINFO_FUNCTION(http)
                php_info_print_table_header(2, "Functionality",            "Availability");
                php_info_print_table_row(2,    "Miscellaneous Utilities:", HTTP_FUNC_AVAIL("HttpUtil, HttpMessage"));
                php_info_print_table_row(2,    "Extended HTTP Responses:", HTTP_FUNC_AVAIL("HttpResponse"));
-               php_info_print_table_row(2,    "Extended HTTP Requests:",  HTTP_CURL_AVAIL("HttpRequest"));
+               php_info_print_table_row(2,    "Extended HTTP Requests:",  HTTP_CURL_AVAIL("HttpRequest, HttpRequestPool"));
        }
        php_info_print_table_end();
 
index 0f0ec2e12e538e75dd667b8ba2cd3391deb4287b..934bc87f5e58737523c8f4a9d25d4c59a1785c22 100644 (file)
 #include "php_http_requestpool_object.h"
 #include "php_http_url_api.h"
 
+#ifndef HTTP_CURL_USE_ZEND_MM
+#      define HTTP_CURL_USE_ZEND_MM 0
+#endif
+
 ZEND_EXTERN_MODULE_GLOBALS(http)
 
 #if LIBCURL_VERSION_NUM < 0x070c00
@@ -50,7 +54,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http)
                { \
                        char *c; \
                        if (CURLE_OK == curl_easy_getinfo(ch, CURLINFO_ ##I, &c)) { \
-                               add_assoc_string(&array, pretty_key(http_request_copystr(#X), sizeof(#X)-1, 0, 0), c ? c : "", 1); \
+                               add_assoc_string(&array, pretty_key(http_request_data_copy(COPY_STRING, #X), sizeof(#X)-1, 0, 0), c ? c : "", 1); \
                        } \
                } \
                break; \
@@ -59,7 +63,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http)
                { \
                        double d; \
                        if (CURLE_OK == curl_easy_getinfo(ch, CURLINFO_ ##I, &d)) { \
-                               add_assoc_double(&array, pretty_key(http_request_copystr(#X), sizeof(#X)-1, 0, 0), d); \
+                               add_assoc_double(&array, pretty_key(http_request_data_copy(COPY_STRING, #X), sizeof(#X)-1, 0, 0), d); \
                        } \
                } \
                break; \
@@ -68,7 +72,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http)
                { \
                        long l; \
                        if (CURLE_OK == curl_easy_getinfo(ch, CURLINFO_ ##I, &l)) { \
-                               add_assoc_long(&array, pretty_key(http_request_copystr(#X), sizeof(#X)-1, 0, 0), l); \
+                               add_assoc_long(&array, pretty_key(http_request_data_copy(COPY_STRING, #X), sizeof(#X)-1, 0, 0), l); \
                        } \
                } \
                break; \
@@ -81,7 +85,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http)
 #define HTTP_CURL_OPT_STRING_EX(keyname, optname) \
        if (!strcasecmp(key, #keyname)) { \
                convert_to_string_ex(param); \
-               HTTP_CURL_OPT(optname, http_request_copystr(Z_STRVAL_PP(param))); \
+               HTTP_CURL_OPT(optname, http_request_data_copy(COPY_STRING, Z_STRVAL_PP(param))); \
                key = NULL; \
                continue; \
        }
@@ -124,12 +128,72 @@ static void http_request_pool_responsehandler(zval **req TSRMLS_DC);
 static inline STATUS http_request_pool_select(http_request_pool *pool);
 static inline void http_request_pool_perform(http_request_pool *pool);
 
-/* {{{ char *http_request_copystr(char *) */
-PHP_HTTP_API char *_http_request_copystr(const char *str TSRMLS_DC)
+#if HTTP_CURL_USE_ZEND_MM
+static void http_curl_free(void *p)                                    { efree(p); }
+static char *http_curl_strdup(const char *p)           { return estrdup(p); }
+static void *http_curl_malloc(size_t s)                                { return emalloc(s); }
+static void *http_curl_realloc(void *p, size_t s)      { return erealloc(p, s); }
+static void *http_curl_calloc(size_t n, size_t s)      { return ecalloc(n, s); }
+#endif
+
+/* {{{ STATUS http_request_global_init() */
+STATUS _http_request_global_init(void)
+{
+#if HTTP_CURL_USE_ZEND_MM
+       if (CURLE_OK != curl_global_init_mem(CURL_GLOBAL_ALL,
+                       http_curl_malloc,
+                       http_curl_free,
+                       http_curl_realloc,
+                       http_curl_strdup,
+                       http_curl_calloc)) {
+               return FAILURE;
+       }
+#else
+       if (CURLE_OK != curl_global_init(CURL_GLOBAL_ALL)) {
+               return FAILURE;
+       }
+#endif
+       return SUCCESS;
+}
+/* }}} */
+
+/* {{{ void *http_request_data_copy(int, void *) */
+void *_http_request_data_copy(int type, void *data TSRMLS_DC)
+{
+       switch (type)
+       {
+               case COPY_STRING:
+               {
+                       char *new_str = estrdup((const char*) data);
+                       zend_llist_add_element(&HTTP_G(request).copies.strings, &new_str);
+                       return new_str;
+               }
+               
+               case COPY_SLIST:
+               {
+                       zend_llist_add_element(&HTTP_G(request).copies.slists, &data);
+                       return data;
+               }
+               
+               default:
+               {
+                       return data;
+               }
+       }
+}
+/* }}} */
+
+/* {{{ void http_request_data_free_string(char **) */
+void _http_request_data_free_string(void *string)
+{
+       efree(*((char **)string));
+}
+/* }}} */
+
+/* {{{ void http_request_data_free_slist(struct curl_slist **) */
+void _http_request_data_free_slist(void *list)
 {
-       char *new_str = estrdup(str);
-       zend_llist_add_element(&HTTP_G(request).curl.copies, &new_str);
-       return new_str;
+       curl_slist_free_all(*((struct curl_slist **) list));
 }
 /* }}} */
 
@@ -264,7 +328,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
        /* set options */
        if (url) {
-               HTTP_CURL_OPT(URL, url);
+               HTTP_CURL_OPT(URL, http_request_data_copy(COPY_STRING, (void *) url));
        }
 
        if (response) {
@@ -305,14 +369,14 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
        /* proxy */
        if (zoption = http_curl_getopt(options, "proxyhost", IS_STRING)) {
-               HTTP_CURL_OPT(PROXY, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(PROXY, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
                /* port */
                if (zoption = http_curl_getopt(options, "proxyport", IS_LONG)) {
                        HTTP_CURL_OPT(PROXYPORT, Z_LVAL_P(zoption));
                }
                /* user:pass */
                if (zoption = http_curl_getopt(options, "proxyauth", IS_STRING)) {
-                       HTTP_CURL_OPT(PROXYUSERPWD, http_request_copystr(Z_STRVAL_P(zoption)));
+                       HTTP_CURL_OPT(PROXYUSERPWD, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
                }
 #if LIBCURL_VERSION_NUM >= 0x070a07
                /* auth method */
@@ -324,7 +388,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
        /* outgoing interface */
        if (zoption = http_curl_getopt(options, "interface", IS_STRING)) {
-               HTTP_CURL_OPT(INTERFACE, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(INTERFACE, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
        }
 
        /* another port */
@@ -334,7 +398,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
        /* auth */
        if (zoption = http_curl_getopt(options, "httpauth", IS_STRING)) {
-               HTTP_CURL_OPT(USERPWD, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(USERPWD, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
        }
 #if LIBCURL_VERSION_NUM >= 0x070a06
        if (zoption = http_curl_getopt(options, "httpauthtype", IS_LONG)) {
@@ -345,7 +409,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
        /* compress, empty string enables deflate and gzip */
        if (zoption = http_curl_getopt(options, "compress", IS_BOOL)) {
                if (Z_LVAL_P(zoption)) {
-                       HTTP_CURL_OPT(ENCODING, http_request_copystr(""));
+                       HTTP_CURL_OPT(ENCODING, http_request_data_copy(COPY_STRING, ""));
                }
        }
 
@@ -362,14 +426,14 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
        /* referer */
        if (zoption = http_curl_getopt(options, "referer", IS_STRING)) {
-               HTTP_CURL_OPT(REFERER, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(REFERER, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
        }
 
        /* useragent, default "PECL::HTTP/version (PHP/version)" */
        if (zoption = http_curl_getopt(options, "useragent", IS_STRING)) {
-               HTTP_CURL_OPT(USERAGENT, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(USERAGENT, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
        } else {
-               HTTP_CURL_OPT(USERAGENT, "PECL::HTTP/" HTTP_PEXT_VERSION " (PHP/" PHP_VERSION ")");
+               HTTP_CURL_OPT(USERAGENT, http_request_data_copy(COPY_STRING, "PECL::HTTP/" HTTP_PEXT_VERSION " (PHP/" PHP_VERSION ")"));
        }
 
        /* additional headers, array('name' => 'value') */
@@ -384,7 +448,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
                                if (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(zoption), (void **) &header_val)) {
                                        char header[1024] = {0};
                                        snprintf(header, 1023, "%s: %s", header_key, Z_STRVAL_PP(header_val));
-                                       headers = curl_slist_append(headers, http_request_copystr(header));
+                                       headers = curl_slist_append(headers, http_request_data_copy(COPY_STRING, header));
                                }
 
                                /* reset */
@@ -393,8 +457,10 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
                }
 
                if (headers) {
-                       HTTP_CURL_OPT(HTTPHEADER, headers);
+                       HTTP_CURL_OPT(HTTPHEADER, http_request_data_copy(COPY_SLIST, headers));
                }
+       } else {
+               HTTP_CURL_OPT(HTTPHEADER, NULL);
        }
 
        /* cookies, array('name' => 'value') */
@@ -417,15 +483,15 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, const
 
                if (qstr->used) {
                        phpstr_fix(qstr);
-                       HTTP_CURL_OPT(COOKIE, http_request_copystr(qstr->data));
+                       HTTP_CURL_OPT(COOKIE, http_request_data_copy(COPY_STRING, qstr->data));
                }
                phpstr_free(qstr);
        }
 
        /* cookiestore */
        if (zoption = http_curl_getopt(options, "cookiestore", IS_STRING)) {
-               HTTP_CURL_OPT(COOKIEFILE, http_request_copystr(Z_STRVAL_P(zoption)));
-               HTTP_CURL_OPT(COOKIEJAR, http_request_copystr(Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(COOKIEFILE, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
+               HTTP_CURL_OPT(COOKIEJAR, http_request_data_copy(COPY_STRING, Z_STRVAL_P(zoption)));
        }
 
        /* resume */
@@ -972,7 +1038,7 @@ static int http_curl_progress_callback(void *data, double dltotal, double dlnow,
 {
        zval *params_pass[4], params_local[4], retval;
        HTTP_CURL_CALLBACK_DATA(data, zval *, func);
-       
+
        params_pass[0] = &params_local[0];
        params_pass[1] = &params_local[1];
        params_pass[2] = &params_local[2];
index f43d3ad3033381ffa207ae11ad4bf1a1c6d440b2..1cc8df566c0589f5d386b57dd7125bf0b22f070c 100644 (file)
@@ -237,16 +237,13 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_
                }
                strncat(request_uri, Z_STRVAL_P(qdata), HTTP_URI_MAXLEN - strlen(request_uri));
        }
-       
-       uri = http_request_copystr(request_uri);
-       efree(request_uri);
 
        switch (Z_LVAL_P(meth))
        {
                case HTTP_GET:
                case HTTP_HEAD:
                        body->type = -1;
-                       status = http_request_init(obj->ch, Z_LVAL_P(meth), uri, NULL, Z_ARRVAL_P(opts), &obj->response);
+                       status = http_request_init(obj->ch, Z_LVAL_P(meth), request_uri, NULL, Z_ARRVAL_P(opts), &obj->response);
                break;
 
                case HTTP_PUT:
@@ -261,7 +258,7 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_
                                body->data = stream;
                                body->size = ssb.sb.st_size;
 
-                               status = http_request_init(obj->ch, HTTP_PUT, uri, body, Z_ARRVAL_P(opts), &obj->response);
+                               status = http_request_init(obj->ch, HTTP_PUT, request_uri, body, Z_ARRVAL_P(opts), &obj->response);
                        } else {
                                status = FAILURE;
                        }
@@ -273,7 +270,7 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_
                        zval *fields = GET_PROP(obj, postFields), *files = GET_PROP(obj, postFiles);
 
                        if (SUCCESS == (status = http_request_body_fill(body, Z_ARRVAL_P(fields), Z_ARRVAL_P(files)))) {
-                               status = http_request_init(obj->ch, HTTP_POST, uri, body, Z_ARRVAL_P(opts), &obj->response);
+                               status = http_request_init(obj->ch, HTTP_POST, request_uri, body, Z_ARRVAL_P(opts), &obj->response);
                        }
                }
                break;
@@ -291,13 +288,14 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_
                break;
        }
 
+       efree(request_uri);
        return status;
 }
 
 STATUS _http_request_object_responsehandler(http_request_object *obj, zval *this_ptr, HashTable *info TSRMLS_DC)
 {
        http_message *msg;
-       
+
        phpstr_fix(&obj->response);
 
        if (msg = http_message_parse(PHPSTR_VAL(&obj->response), PHPSTR_LEN(&obj->response))) {
index d3ef41c2f35879ab92860f03ed3366270bdfdf17..adae1b01e1fab9b8a7419da58d001ab726c2e738 100644 (file)
 
 #ifdef ZEND_ENGINE_2
 
-#ifdef HTTP_HAVE_CURL
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_3, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_4, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-
-static
-ZEND_BEGIN_ARG_INFO(http_request_info_ref_5, 0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(0)
-       ZEND_ARG_PASS_INFO(1)
-ZEND_END_ARG_INFO();
-#endif /* HTTP_HAVE_CURL */
+HTTP_DECLARE_ARG_PASS_INFO();
 
 zend_class_entry *http_util_object_ce;
 zend_function_entry http_util_object_fe[] = {
@@ -73,10 +49,10 @@ zend_function_entry http_util_object_fe[] = {
        HTTP_STATIC_ME_ALIAS(parseHeaders, http_parse_headers, NULL)
        HTTP_STATIC_ME_ALIAS(getRequestHeaders, http_get_request_headers, NULL)
 #ifdef HTTP_HAVE_CURL
-       HTTP_STATIC_ME_ALIAS(get, http_get, http_request_info_ref_3)
-       HTTP_STATIC_ME_ALIAS(head, http_head, http_request_info_ref_3)
-       HTTP_STATIC_ME_ALIAS(postData, http_post_data, http_request_info_ref_4)
-       HTTP_STATIC_ME_ALIAS(postFields, http_post_fields, http_request_info_ref_5)
+       HTTP_STATIC_ME_ALIAS(get, http_get, http_arg_pass_ref_3)
+       HTTP_STATIC_ME_ALIAS(head, http_head, http_arg_pass_ref_3)
+       HTTP_STATIC_ME_ALIAS(postData, http_post_data, http_arg_pass_ref_4)
+       HTTP_STATIC_ME_ALIAS(postFields, http_post_fields, http_arg_pass_ref_5)
 #endif /* HTTP_HAVE_CURL */
        HTTP_STATIC_ME_ALIAS(authBasic, http_auth_basic, NULL)
        HTTP_STATIC_ME_ALIAS(authBasicCallback, http_auth_basic_cb, NULL)
index efa9e3c473ab8957d0d04a541872f029f88faba0..49b79e699d466b67ce22e6b951725bd01dbdc905 100644 (file)
@@ -61,12 +61,13 @@ ZEND_BEGIN_MODULE_GLOBALS(http)
                } methods;
 
 #ifdef HTTP_HAVE_CURL
-               struct _http_globals_request_curl {
-                       zend_llist copies;
+               struct _http_globlas_request_copies {
+                       zend_llist strings;
+                       zend_llist slists;
+               } copies;
 #      if LIBCURL_VERSION_NUM < 0x070c00
-                       char error[CURL_ERROR_SIZE + 1];
+               char error[CURL_ERROR_SIZE + 1];
 #      endif
-               } curl;
 #endif /* HTTP_HAVE_CURL */
        } request;
 
index 25b22327672cb41ea57c9707cf37c3f4c4644346..df335bf28ff8aa624d4fe89c494049f26c856ea9 100644 (file)
@@ -83,8 +83,17 @@ typedef struct {
        int unfinished;
 } http_request_pool;
 
-#define http_request_copystr(s) _http_request_copystr((s) TSRMLS_CC)
-PHP_HTTP_API char *_http_request_copystr(const char *string TSRMLS_DC);
+#define COPY_STRING    1
+#define        COPY_SLIST      2
+#define http_request_data_copy(type, data) _http_request_data_copy((type), (data) TSRMLS_CC)
+extern void *_http_request_data_copy(int type, void *data TSRMLS_DC);
+#define http_request_data_free_string _http_request_data_free_string
+extern void _http_request_data_free_string(void *string);
+#define http_request_data_free_slist _http_request_data_free_slist
+extern void _http_request_data_free_slist(void *list);
+
+#define http_request_global_init _http_request_global_init
+extern STATUS _http_request_global_init(void);
 
 #define http_request_method_name(m) _http_request_method_name((m) TSRMLS_CC)
 PHP_HTTP_API const char *_http_request_method_name(http_request_method m TSRMLS_DC);
index 0e0bc142d4ca10b6cad9a540a819ff2253fded0a..87de9121f4140b9a63563ce563a8d1018c483459 100644 (file)
@@ -246,6 +246,43 @@ typedef int STATUS;
 #define HTTP_E_URL                     7L
 #define HTTP_E_MSG                     8L
 
+#ifdef HTTP_HAVE_CURL
+#      ifdef ZEND_ENGINE_2
+#              define HTTP_DECLARE_ARG_PASS_INFO() \
+                       static \
+                       ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_3, 0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(1) \
+                       ZEND_END_ARG_INFO(); \
+ \
+                       static \
+                       ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_4, 0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(1) \
+                       ZEND_END_ARG_INFO(); \
+ \
+                       static \
+                       ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_5, 0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(1) \
+                       ZEND_END_ARG_INFO()
+#      else
+#              define HTTP_DECLARE_ARG_PASS_INFO() \
+                       static unsigned char http_arg_pass_ref_3[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE}; \
+                       static unsigned char http_arg_pass_ref_4[] = {4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE}; \
+                       static unsigned char http_arg_pass_ref_5[] = {5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE}
+#      endif /* ZEND_ENGINE_2 */
+#else
+#      define HTTP_DECLARE_ARG_PASS_INFO()
+#endif /* HTTP_HAVE_CURL */
+
+
 #endif /* PHP_HTTP_STD_DEFS_H */
 
 /*