X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_client_request.c;h=2a842b47d8bd0dae24718085049b81e00db13f0a;hp=2050bf2fe7153b9dccd39ec2fe26abbfc36507cd;hb=34c8af32031e2e847b4919402373ad70fc28a863;hpb=fd8c28f586debd296715805050fa808e1f46ee01 diff --git a/php_http_client_request.c b/php_http_client_request.c index 2050bf2..2a842b4 100644 --- a/php_http_client_request.c +++ b/php_http_client_request.c @@ -86,11 +86,23 @@ PHP_METHOD(HttpClientRequest, __construct) with_error_handling(EH_THROW, php_http_exception_get_class_entry()) { if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!s!a!O!", &meth_str, &meth_len, &url_str, &url_len, &zheaders, &zbody, php_http_message_body_get_class_entry())) { php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_message_body_object_t *body_obj = NULL; + + if (zbody) { + body_obj = zend_object_store_get_object(zbody TSRMLS_CC); + Z_OBJ_ADDREF_P(zbody); + obj->body = Z_OBJVAL_P(zbody); + php_http_message_body_addref(body_obj->body); + } if (obj->message) { php_http_message_set_type(obj->message, PHP_HTTP_REQUEST); + if (body_obj) { + php_http_message_body_free(&obj->message->body); + obj->message->body = body_obj->body; + } } else { - obj->message = php_http_message_init(NULL, PHP_HTTP_REQUEST TSRMLS_CC); + obj->message = php_http_message_init(NULL, PHP_HTTP_REQUEST, body_obj ? body_obj->body : NULL TSRMLS_CC); } if (meth_str && meth_len) { @@ -102,14 +114,6 @@ PHP_METHOD(HttpClientRequest, __construct) if (zheaders) { array_copy(Z_ARRVAL_P(zheaders), &obj->message->hdrs); } - if (zbody) { - php_http_message_body_object_t *body_obj = zend_object_store_get_object(zbody TSRMLS_CC); - - php_http_message_body_dtor(&obj->message->body); - php_http_message_body_copy(body_obj->body, &obj->message->body, 0); - Z_OBJ_ADDREF_P(zbody); - obj->body = Z_OBJVAL_P(zbody); - } } } end_error_handling(); }