X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_client_request.c;h=42117f95cce513688058cb1155c4d838947f4607;hb=ee95d238f4ffa07e8c5f146848cd1e73ac2447d1;hp=3059444d5c5a7fbe83cbd248e759c287c8956bb6;hpb=759c822dcd99fdf733399a5ed92dbea382ddc474;p=m6w6%2Fext-http diff --git a/php_http_client_request.c b/php_http_client_request.c index 3059444..42117f9 100644 --- a/php_http_client_request.c +++ b/php_http_client_request.c @@ -12,6 +12,10 @@ #include "php_http_api.h" +void php_http_client_options_set_subr(zval *this_ptr, char *key, size_t len, zval *opts, int overwrite TSRMLS_DC); +void php_http_client_options_set(zval *this_ptr, zval *opts TSRMLS_DC); +void php_http_client_options_get_subr(zval *this_ptr, char *key, size_t len, zval *return_value TSRMLS_DC); + #define PHP_HTTP_BEGIN_ARGS(method, req_args) PHP_HTTP_BEGIN_ARGS_EX(HttpClientRequest, method, 0, req_args) #define PHP_HTTP_EMPTY_ARGS(method) PHP_HTTP_EMPTY_ARGS_EX(HttpClientRequest, method, 0) #define PHP_HTTP_CLIENT_REQUEST_ME(method, visibility) PHP_ME(HttpClientRequest, method, PHP_HTTP_ARGS(HttpClientRequest, method), visibility) @@ -83,14 +87,26 @@ PHP_METHOD(HttpClientRequest, __construct) int meth_len = 0, url_len = 0; zval *zheaders = NULL, *zbody = NULL; - with_error_handling(EH_THROW, php_http_exception_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_class_entry)) { + 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 +118,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(); } @@ -145,7 +153,7 @@ PHP_METHOD(HttpClientRequest, getContentType) php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); zval *zct = php_http_message_header(obj->message, ZEND_STRL("Content-Type"), 1); - RETURN_ZVAL(zct, 0, 0); + RETURN_ZVAL(zct, 0, 1); } RETURN_FALSE; } @@ -217,7 +225,6 @@ PHP_METHOD(HttpClientRequest, addQuery) if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &qdata)) { php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); php_url *old_url = NULL, new_url = {NULL}; - char empty[] = ""; zval arr, str; @@ -295,7 +302,7 @@ PHP_METHOD(HttpClientRequest, getSslOptions) PHP_MINIT_FUNCTION(http_client_request) { - PHP_HTTP_REGISTER_CLASS(http\\Client, Request, http_client_request, php_http_message_class_entry, 0); + PHP_HTTP_REGISTER_CLASS(http\\Client, Request, http_client_request, php_http_message_get_class_entry(), 0); zend_declare_property_null(php_http_client_request_class_entry, ZEND_STRL("options"), ZEND_ACC_PROTECTED TSRMLS_CC);