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); \
return data;
}
+ case COPY_CONTEXT:
+ {
+ zend_llist_add_element(&HTTP_G(request).copies.contexts, &data);
+ return data;
+ }
+
default:
{
return data;
}
/* }}} */
+/* {{{ _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)
{
}
/* }}} */
-
+#ifdef ZEND_ENGINE_2
/* {{{ http_request_pool *http_request_pool_init(http_request_pool *) */
PHP_HTTP_API http_request_pool *_http_request_pool_init(http_request_pool *pool TSRMLS_DC)
{
if (SUCCESS != http_request_object_requesthandler(req, request, body)) {
http_error_ex(E_WARNING, HTTP_E_CURL, "Could not initialize HttpRequest object for attaching to the HttpRequestPool");
- } else if (CURLM_OK != (code = curl_multi_add_handle(pool->ch, req->ch))) {
- http_error_ex(E_WARNING, HTTP_E_CURL, "Could not attach HttpRequest object to the HttpRequestPool: %s", curl_multi_strerror(code));
} else {
- req->pool = pool;
- zval_add_ref(&request);
- zend_llist_add_element(&pool->handles, &request);
- zend_llist_add_element(&pool->bodies, &body);
- return SUCCESS;
+ code = curl_multi_add_handle(pool->ch, req->ch);
+ if ((CURLM_OK != code) && (CURLM_CALL_MULTI_PERFORM != code)) {
+ http_error_ex(E_WARNING, HTTP_E_CURL, "Could not attach HttpRequest object to the HttpRequestPool: %s", curl_multi_strerror(code));
+ } else {
+ req->pool = pool;
+ zval_add_ref(&request);
+ zend_llist_add_element(&pool->handles, &request);
+ zend_llist_add_element(&pool->bodies, &body);
+ return SUCCESS;
+ }
}
efree(body);
}
#if HTTP_DEBUG_REQPOOLS
fprintf(stderr, "Fetching data from request %p of pool %p\n", obj, obj->pool);
#endif
- http_request_object_responsehandler(obj, *req, NULL);
+ http_request_object_responsehandler(obj, *req);
}
/* }}} */
#endif
}
/* }}} */
+#endif /* ZEND_ENGINE_2 */
/* {{{ char *http_request_methods[] */
static const char *const http_request_methods[] = {
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);
}
/* }}} */