X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=87d40a01e49e1d47f8c6c335c66a7c25af204c39;hp=ca91a28cae071e142c99430bbfce41a5ceca5a7b;hb=96f5c917e43d94f2d5d7f092a09422db6b13f307;hpb=d07df3421e591d06d0bc000fabf49d6987a8bcd5 diff --git a/http_request_api.c b/http_request_api.c index ca91a28..87d40a0 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -48,14 +48,6 @@ ZEND_EXTERN_MODULE_GLOBALS(http) #if LIBCURL_VERSION_NUM < 0x070c00 # define curl_easy_strerror(code) HTTP_G(request).error -# ifndef curl_multi_strerror - static char *curl_multi_strerror(int code) - { - char message[256] = {0}; - snprintf(message, 255, "Unknown HttpRequestPool error (curl multi code: %d)", code); - return http_request_data_copy(COPY_STRING, message); - } -#endif #endif #define HTTP_CURL_INFO(I) HTTP_CURL_INFO_EX(I, I) @@ -122,11 +114,6 @@ static size_t http_curl_read_callback(void *, size_t, size_t, void *); static int http_curl_progress_callback(void *, double, double, double, double); static int http_curl_debug_callback(CURL *, curl_infotype, char *, size_t, void *); -typedef struct { - void ***tsrm_ctx; - void *data; -} http_curl_callback_ctx; - #define HTTP_CURL_CALLBACK_DATA(from, type, var) \ http_curl_callback_ctx *__CTX = (http_curl_callback_ctx *) (from); \ TSRMLS_FETCH_FROM_CTX(__CTX->tsrm_ctx); \ @@ -185,6 +172,12 @@ void *_http_request_data_copy(int type, void *data TSRMLS_DC) return data; } + case COPY_CONTEXT: + { + zend_llist_add_element(&HTTP_G(request).copies.contexts, &data); + return data; + } + default: { return data; @@ -207,6 +200,13 @@ void _http_request_data_free_slist(void *list) } /* }}} */ +/* {{{ _http_request_data_free_context(http_curl_callback_ctx **) */ +void _http_request_data_free_context(void *context) +{ + efree(*((http_curl_callback_ctx **) context)); +} +/* }}} */ + /* {{{ http_request_body *http_request_body_new() */ PHP_HTTP_API http_request_body *_http_request_body_new(TSRMLS_D) { @@ -1073,7 +1073,7 @@ static http_curl_callback_ctx *_http_curl_callback_data(void *data TSRMLS_DC) http_curl_callback_ctx *ctx = emalloc(sizeof(http_curl_callback_ctx)); TSRMLS_SET_CTX(ctx->tsrm_ctx); ctx->data = data; - return ctx; + return http_request_data_copy(COPY_CONTEXT, ctx); } /* }}} */