X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_pool_api.c;h=b78e354174ab5e358195a662bd265499cd123bfe;hp=1775293452eddf63cd526c8d23d60d248677370c;hb=b0919f33875667baecb05888fba006d5652d68d1;hpb=b08947e98f1832091c8a9f6dea3799e0524d2822 diff --git a/http_request_pool_api.c b/http_request_pool_api.c index 1775293..b78e354 100644 --- a/http_request_pool_api.c +++ b/http_request_pool_api.c @@ -36,7 +36,11 @@ ZEND_EXTERN_MODULE_GLOBALS(http); -static void http_request_pool_freebody(http_request_body **body); +#ifndef HAVE_CURL_MULTI_STRERROR +# define curl_multi_strerror(dummy) "unknown error" +#endif + +static void http_request_pool_freebody(http_request_callback_ctx **body); static int http_request_pool_compare_handles(void *h1, void *h2); /* {{{ http_request_pool *http_request_pool_init(http_request_pool *) */ @@ -63,7 +67,7 @@ PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool pool->unfinished = 0; zend_llist_init(&pool->handles, sizeof(zval *), (llist_dtor_func_t) ZVAL_PTR_DTOR, 0); - zend_llist_init(&pool->bodies, sizeof(http_request_body *), (llist_dtor_func_t) http_request_pool_freebody, 0); + zend_llist_init(&pool->bodies, sizeof(http_request_callback_ctx *), (llist_dtor_func_t) http_request_pool_freebody, 0); #if HTTP_DEBUG_REQPOOLS fprintf(stderr, "Initialized request pool %p\n", pool); #endif @@ -81,9 +85,9 @@ PHP_HTTP_API STATUS _http_request_pool_attach(http_request_pool *pool, zval *req if (req->pool) { http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "HttpRequest object(#%d) is already member of %s HttpRequestPool", Z_OBJ_HANDLE_P(request), req->pool == pool ? "this" : "another"); } else { - http_request_body *body = http_request_body_new(); + http_request_callback_ctx *body = http_request_callback_data_ex(http_request_body_new(), 0); - if (SUCCESS != http_request_pool_requesthandler(request, body)) { + if (SUCCESS != http_request_pool_requesthandler(request, body->data)) { http_error_ex(HE_WARNING, HTTP_E_REQUEST, "Could not initialize HttpRequest object for attaching to the HttpRequestPool"); } else { CURLMcode code = curl_multi_add_handle(pool->ch, req->ch); @@ -105,6 +109,7 @@ PHP_HTTP_API STATUS _http_request_pool_attach(http_request_pool *pool, zval *req return SUCCESS; } } + efree(body->data); efree(body); } return FAILURE; @@ -182,7 +187,11 @@ PHP_HTTP_API STATUS _http_request_pool_send(http_request_pool *pool TSRMLS_DC) fprintf(stderr, "> %d unfinished requests of pool %p remaining\n", pool->unfinished, pool); #endif if (SUCCESS != http_request_pool_select(pool)) { - http_error(HE_WARNING, HTTP_E_SOCKET, "Socket error"); +#ifdef PHP_WIN32 + http_error(HE_WARNING, HTTP_E_SOCKET, WSAGetLastError()); +#else + http_error(HE_WARNING, HTTP_E_SOCKET, strerror(errno)); +#endif return FAILURE; } } @@ -256,11 +265,12 @@ void _http_request_pool_responsehandler(zval **req TSRMLS_DC) /*#*/ -/* {{{ static void http_request_pool_freebody(http_request_body **) */ -static void http_request_pool_freebody(http_request_body **body) +/* {{{ static void http_request_pool_freebody(http_request_ctx **) */ +static void http_request_pool_freebody(http_request_callback_ctx **body) { - TSRMLS_FETCH(); - http_request_body_free(*body); + HTTP_REQUEST_CALLBACK_DATA(*body, http_request_body *, b); + http_request_body_free(b); + efree(*body); } /* }}} */