- add ob_(deflate|inflate)handler
[m6w6/ext-http] / http_request_object.c
index 7706fd7ef1cd45df6c46532d464d707c41973a9a..8ff7b25ed21fcb98874fa877f5f23d3572e80fd6 100644 (file)
 #include "php_http_request_pool_api.h"
 #include "php_http_url_api.h"
 
-ZEND_EXTERN_MODULE_GLOBALS(http);
-
 #define HTTP_BEGIN_ARGS(method, ret_ref, req_args)     HTTP_BEGIN_ARGS_EX(HttpRequest, method, ret_ref, req_args)
 #define HTTP_EMPTY_ARGS(method, ret_ref)                       HTTP_EMPTY_ARGS_EX(HttpRequest, method, ret_ref)
 #define HTTP_REQUEST_ME(method, visibility)                    PHP_ME(HttpRequest, method, HTTP_ARGS(HttpRequest, method), visibility)
 #define HTTP_REQUEST_ALIAS(method, func)                       HTTP_STATIC_ME_ALIAS(method, func, HTTP_ARGS(HttpRequest, method))
 
-HTTP_EMPTY_ARGS(__destruct, 0);
 HTTP_BEGIN_ARGS(__construct, 0, 0)
        HTTP_ARG_VAL(url, 0)
        HTTP_ARG_VAL(method, 0)
@@ -217,7 +214,6 @@ static inline void _http_request_object_declare_default_properties(TSRMLS_D);
 zend_class_entry *http_request_object_ce;
 zend_function_entry http_request_object_fe[] = {
        HTTP_REQUEST_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
-       HTTP_REQUEST_ME(__destruct, ZEND_ACC_PUBLIC|ZEND_ACC_DTOR)
 
        HTTP_REQUEST_ME(setOptions, ZEND_ACC_PUBLIC)
        HTTP_REQUEST_ME(getOptions, ZEND_ACC_PUBLIC)
@@ -687,18 +683,6 @@ PHP_METHOD(HttpRequest, __construct)
 }
 /* }}} */
 
-/* {{{ proto void HttpRequest::__destruct()
- *
- * Destroys the HttpRequest object.
- */
-PHP_METHOD(HttpRequest, __destruct)
-{
-       getObject(http_request_object, obj);
-
-       NO_ARGS;
-}
-/* }}} */
-
 /* {{{ proto bool HttpRequest::setOptions([array options])
  *
  * Set the request options to use.  See http_get() for a full list of available options.
@@ -1204,13 +1188,13 @@ PHP_METHOD(HttpRequest, setPostFields)
        zval *post, *post_data = NULL;
        getObject(http_request_object, obj);
 
-       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!", &post_data)) {
+       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/!", &post_data)) {
                RETURN_FALSE;
        }
 
        MAKE_STD_ZVAL(post);
        array_init(post);
-       if (post_data && (Z_TYPE_P(post_data) == IS_ARRAY)) {
+       if (post_data && zend_hash_num_elements(Z_ARRVAL_P(post_data))) {
                array_copy(post_data, post);
        }
        SET_PROP(obj, postFields, post);
@@ -1290,13 +1274,18 @@ PHP_METHOD(HttpRequest, addRawPostData)
        }
        
        if (data_len) {
-               zval *zdata = GET_PROP(obj, rawPostData);
+               zval *data, *zdata = GET_PROP(obj, rawPostData);
                
-               SEPARATE_ZVAL(&zdata);
-               Z_STRVAL_P(zdata) = erealloc(Z_STRVAL_P(zdata), (Z_STRLEN_P(zdata) += data_len) + 1);
-               Z_STRVAL_P(zdata)[Z_STRLEN_P(zdata)] = '\0';
-               memcpy(Z_STRVAL_P(zdata) + Z_STRLEN_P(zdata) - data_len, raw_data, data_len);
-               SET_PROP(obj, rawPostData, zdata);
+               ALLOC_ZVAL(data);
+               *data = *zdata;
+               zval_copy_ctor(data);
+               INIT_PZVAL(data);
+               convert_to_string(data);
+               Z_STRVAL_P(data) = erealloc(Z_STRVAL_P(data), (Z_STRLEN_P(data) += data_len) + 1);
+               Z_STRVAL_P(data)[Z_STRLEN_P(data)] = '\0';
+               memcpy(Z_STRVAL_P(data) + Z_STRLEN_P(data) - data_len, raw_data, data_len);
+               SET_PROP(obj, rawPostData, data);
+               zval_ptr_dtor(&data);
        }
        
        RETURN_TRUE;
@@ -1368,6 +1357,7 @@ PHP_METHOD(HttpRequest, addPostFile)
        }
        add_next_index_zval(new_post, entry);
        SET_PROP(obj, postFiles, new_post);
+       zval_ptr_dtor(&new_post);
 
        RETURN_TRUE;
 }
@@ -1386,23 +1376,16 @@ PHP_METHOD(HttpRequest, addPostFile)
  */
 PHP_METHOD(HttpRequest, setPostFiles)
 {
-       zval *files, *post;
+       zval *files = NULL, *post;
        getObject(http_request_object, obj);
 
-       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/", &files)) {
+       if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!/", &files)) {
                RETURN_FALSE;
        }
 
-       post = GET_PROP(obj, postFiles);
-       if (Z_TYPE_P(post) == IS_NULL) {
-               MAKE_STD_ZVAL(post);
-               array_init(post);
-       } else {
-               SEPARATE_ZVAL(&post);
-       }
-       
-       zend_hash_clean(Z_ARRVAL_P(post));
-       if (files && zend_hash_num_elements(Z_ARRVAL_P(files))) {
+       MAKE_STD_ZVAL(post);
+       array_init(post);
+       if (files && (Z_TYPE_P(files) == IS_ARRAY)) {
                array_copy(files, post);
        }
        SET_PROP(obj, postFiles, post);