ensure these properties are always set
[m6w6/ext-http] / php_http_curl_client.c
index ce47f6b2163fb8caa1be17cdb761fd1104fe14c1..d83bd5a9d24b2b519bf2b3a7f21bc91e4552dde7 100644 (file)
@@ -175,15 +175,22 @@ static int php_http_curl_client_raw_callback(CURL *ch, curl_infotype type, char
        switch (type) {
                case CURLINFO_HEADER_IN:
                case CURLINFO_DATA_IN:
-               case CURLINFO_HEADER_OUT:
-               case CURLINFO_DATA_OUT:
-                       php_http_buffer_append(h->buffer, data, length);
+                       php_http_buffer_append(h->response.buffer, data, length);
 
                        if (curl->options.redirects) {
                                flags |= PHP_HTTP_MESSAGE_PARSER_EMPTY_REDIRECTS;
                        }
 
-                       if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->parser, h->buffer, flags, &h->message)) {
+                       if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->response.parser, h->response.buffer, flags, &h->response.message)) {
+                               return -1;
+                       }
+                       break;
+
+               case CURLINFO_HEADER_OUT:
+               case CURLINFO_DATA_OUT:
+                       php_http_buffer_append(h->request.buffer, data, length);
+
+                       if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse(h->request.parser, h->request.buffer, flags, &h->request.message)) {
                                return -1;
                        }
                        break;
@@ -510,11 +517,13 @@ static STATUS set_options(php_http_client_t *h, HashTable *options)
                                zval **cookie_val;
 
                                FOREACH_KEYVAL(pos, zoption, cookie_key, cookie_val) {
-                                       if (cookie_key.type == HASH_KEY_IS_STRING) {
-                                               zval *val = php_http_ztyp(IS_STRING, *cookie_val);
-                                               php_http_buffer_appendf(&curl->options.cookies, "%s=%s; ", cookie_key.str, Z_STRVAL_P(val));
-                                               zval_ptr_dtor(&val);
-                                       }
+                                       zval *val = php_http_ztyp(IS_STRING, *cookie_val);
+
+                                       php_http_array_hashkey_stringify(&cookie_key);
+                                       php_http_buffer_appendf(&curl->options.cookies, "%s=%s; ", cookie_key.str, Z_STRVAL_P(val));
+                                       php_http_array_hashkey_stringfree(&cookie_key);
+
+                                       zval_ptr_dtor(&val);
                                }
 
                                php_http_buffer_fix(&curl->options.cookies);
@@ -1073,6 +1082,7 @@ PHP_HTTP_API STATUS php_http_curl_client_prepare(php_http_client_t *h, php_http_
        }
 
        /* request headers */
+       php_http_message_update_headers(msg);
        if (zend_hash_num_elements(&msg->hdrs)) {
                php_http_array_hashkey_t header_key = php_http_array_hashkey_init(0);
                zval **header_val;
@@ -1297,7 +1307,11 @@ zend_object_value php_http_curl_client_object_new_ex(zend_class_entry *ce, php_h
 
        o = ecalloc(1, sizeof(php_http_client_object_t));
        zend_object_std_init((zend_object *) o, ce TSRMLS_CC);
+#if PHP_VERSION_ID < 50339
+       zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*));
+#else
        object_properties_init((zend_object *) o, ce);
+#endif
 
        if (!(o->client = r)) {
                o->client = php_http_client_init(NULL, &php_http_curl_client_ops, NULL, NULL TSRMLS_CC);