X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_client_curl.c;h=554b57c77360ef97eacd08dd9f6a82de5c2105e3;hp=f16349e2f0472320875d300657f55b9a57f59ad0;hb=a18e662d5ff2c4e7051e028f8002dbba720cccd6;hpb=6cc24086f57aa1e8f4d6a2c12361635e7c24f60f diff --git a/php_http_client_curl.c b/php_http_client_curl.c index f16349e..554b57c 100644 --- a/php_http_client_curl.c +++ b/php_http_client_curl.c @@ -1022,10 +1022,8 @@ static STATUS php_http_client_curl_reset(php_http_client_t *h) return SUCCESS; } -static STATUS php_http_client_curl_exec(php_http_client_t *h, php_http_message_t *msg) +STATUS php_http_client_curl_prepare(php_http_client_t *h, php_http_message_t *msg) { - uint tries = 0; - CURLcode result; php_http_client_curl_t *curl = h->ctx; php_http_client_curl_storage_t *storage = get_storage(curl->handle); TSRMLS_FETCH_FROM_CTX(h->ts); @@ -1033,6 +1031,7 @@ static STATUS php_http_client_curl_exec(php_http_client_t *h, php_http_message_t /* request url */ if (!PHP_HTTP_INFO(msg).request.url) { php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT, "Cannot request empty URL"); + return FAILURE; } storage->errorbuffer[0] = '\0'; if (storage->url) { @@ -1110,6 +1109,21 @@ static STATUS php_http_client_curl_exec(php_http_client_t *h, php_http_message_t curl_easy_setopt(curl->handle, CURLOPT_POSTFIELDSIZE, body_size); } + return SUCCESS; +} + +static STATUS php_http_client_curl_exec(php_http_client_t *h, php_http_message_t *msg) +{ + uint tries = 0; + CURLcode result; + php_http_client_curl_t *curl = h->ctx; + php_http_client_curl_storage_t *storage = get_storage(curl->handle); + TSRMLS_FETCH_FROM_CTX(h->ts); + + if (SUCCESS != php_http_client_curl_prepare(h, msg)) { + return FAILURE; + } + retry: if (CURLE_OK != (result = curl_easy_perform(curl->handle))) { php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT, "%s; %s (%s)", curl_easy_strerror(result), storage->errorbuffer, storage->url); @@ -1229,6 +1243,11 @@ static php_http_resource_factory_ops_t php_http_client_curl_resource_factory_ops php_http_curl_dtor }; +static zend_class_entry *get_class_entry(void) +{ + return php_http_client_curl_class_entry; +} + static php_http_client_ops_t php_http_client_curl_ops = { &php_http_client_curl_resource_factory_ops, php_http_client_curl_init, @@ -1237,7 +1256,9 @@ static php_http_client_ops_t php_http_client_curl_ops = { php_http_client_curl_reset, php_http_client_curl_exec, php_http_client_curl_setopt, - php_http_client_curl_getopt + php_http_client_curl_getopt, + (php_http_new_t) php_http_client_curl_object_new_ex, + get_class_entry }; PHP_HTTP_API php_http_client_ops_t *php_http_client_curl_get_ops(void)