X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_api.c;h=36b3098737ce0e672137d881b8214bc74d1bd115;hp=5a2bdb763670023e5769d16f838bd598822964d0;hb=5dca59e3a269c903b395d97abe831c0fc138b5b6;hpb=94e87723fd916f0fe9e72f2280433b06e295bf79 diff --git a/http_message_api.c b/http_message_api.c index 5a2bdb7..36b3098 100644 --- a/http_message_api.c +++ b/http_message_api.c @@ -138,7 +138,7 @@ PHP_HTTP_API http_message *_http_message_parse_ex(http_message *msg, const char msg = http_message_init(msg); - if (SUCCESS != http_parse_headers_cb(message, &msg->hdrs, 1, (http_info_callback) http_message_info_callback, &msg)) { + if (SUCCESS != http_parse_headers_cb(message, &msg->hdrs, 1, (http_info_callback) http_message_info_callback, (void **) &msg)) { if (free_msg) { http_message_free(&msg); } @@ -150,13 +150,6 @@ PHP_HTTP_API http_message *_http_message_parse_ex(http_message *msg, const char zval *c; const char *continue_at = NULL; - /* message has content-length header */ - if (c = http_message_header(msg, "Content-Length")) { - long len = atol(Z_STRVAL_P(c)); - phpstr_from_string_ex(PHPSTR(msg), body, len); - continue_at = body + len; - } else - /* message has chunked transfer encoding */ if (c = http_message_header(msg, "Transfer-Encoding")) { if (!strcasecmp("chunked", Z_STRVAL_P(c))) { @@ -182,6 +175,13 @@ PHP_HTTP_API http_message *_http_message_parse_ex(http_message *msg, const char } } else + /* message has content-length header */ + if (c = http_message_header(msg, "Content-Length")) { + long len = atol(Z_STRVAL_P(c)); + phpstr_from_string_ex(PHPSTR(msg), body, len); + continue_at = body + len; + } else + /* message has content-range header */ if (c = http_message_header(msg, "Content-Range")) { ulong start = 0, end = 0; @@ -312,8 +312,7 @@ PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj zval strct; zval *headers; - Z_TYPE(strct) = IS_ARRAY; - Z_ARRVAL(strct) = HASH_OF(obj); + INIT_ZARR(strct, HASH_OF(obj)); add_assoc_long(&strct, "type", msg->type); add_assoc_double(&strct, "httpVersion", msg->http.version); @@ -334,7 +333,6 @@ PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj array_init(headers); zend_hash_copy(Z_ARRVAL_P(headers), &msg->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); add_assoc_zval(&strct, "headers", headers); - zval_ptr_dtor(&headers); add_assoc_stringl(&strct, "body", PHPSTR_VAL(msg), PHPSTR_LEN(msg), 1); @@ -353,8 +351,6 @@ PHP_HTTP_API void _http_message_tostruct_recursive(http_message *msg, zval *obj } else { add_assoc_null(&strct, "parentMessage"); } - http_message_dtor(msg); - efree(msg); } PHP_HTTP_API STATUS _http_message_send(http_message *message TSRMLS_DC) @@ -397,6 +393,8 @@ PHP_HTTP_API STATUS _http_message_send(http_message *message TSRMLS_DC) char *uri = NULL; zval **zhost, options, headers; + INIT_PZVAL(&options); + INIT_PZVAL(&headers); array_init(&options); array_init(&headers); zend_hash_copy(Z_ARRVAL(headers), &message->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));