X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_requestpool_object.c;h=dfb9c604f72f6d387f2209e491535f8a3abe1f74;hb=a0098fdbfef71be0fab417b5bc624dc884bd4549;hp=f312b7fad55664945205def9337f28af62fa38a3;hpb=ffc893b125c6cc9b385a68a357b08ba2cc4e91f6;p=m6w6%2Fext-http diff --git a/http_requestpool_object.c b/http_requestpool_object.c index f312b7f..dfb9c60 100644 --- a/http_requestpool_object.c +++ b/http_requestpool_object.c @@ -24,6 +24,7 @@ #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) #include "php_http_std_defs.h" +#include "php_http_api.h" #include "php_http_requestpool_object.h" #include "php_http_request_pool_api.h" #include "php_http_request_object.h" @@ -144,14 +145,22 @@ void _http_requestpool_object_free(zend_object *object TSRMLS_DC) * * Instantiate a new HttpRequestPool object. An HttpRequestPool is * able to send several HttpRequests in parallel. + * + * WARNING: Don't attach/detach HttpRequest objects to the HttpRequestPool + * object while you're using the implemented Interator interface. * + * Accepts virtual infinite optional parameters each referencing an + * HttpRequest object. + * + * Throws HttpRequestException, HttpRequestPoolException, HttpInvalidParamException. + * * Example: *
* send(); * foreach($pool as $request) { @@ -209,14 +218,23 @@ PHP_METHOD(HttpRequestPool, reset) getObject(http_requestpool_object, obj); NO_ARGS; - + + obj->iterator.pos = 0; http_request_pool_detach_all(&obj->pool); } /* {{{ proto bool HttpRequestPool::attach(HttpRequest request) * * Attach an HttpRequest object to this HttpRequestPool. - * NOTE: set all options prior attaching! + * WARNING: set all options prior attaching! + * + * Expects the parameter to be an HttpRequest object not alread attached to + * antother HttpRequestPool object. + * + * Returns TRUE on success, or FALSE on failure. + * + * Throws HttpInvalidParamException, HttpRequestException, + * HttpRequestPoolException, HttpEncodingException. */ PHP_METHOD(HttpRequestPool, attach) { @@ -226,7 +244,11 @@ PHP_METHOD(HttpRequestPool, attach) SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, http_request_object_ce)) { - status = http_request_pool_attach(&obj->pool, request); + if (obj->iterator.pos > 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles)) { + http_error(HE_THROW, HTTP_E_REQUEST_POOL, "Cannot attach to the HttpRequestPool while the iterator is active"); + } else { + status = http_request_pool_attach(&obj->pool, request); + } } SET_EH_NORMAL(); RETURN_SUCCESS(status); @@ -236,6 +258,13 @@ PHP_METHOD(HttpRequestPool, attach) /* {{{ proto bool HttpRequestPool::detach(HttpRequest request) * * Detach an HttpRequest object from this HttpRequestPool. + * + * Expects the parameter to be an HttpRequest object attached to this + * HttpRequestPool object. + * + * Returns TRUE on success, or FALSE on failure. + * + * Throws HttpInvalidParamException, HttpRequestPoolException. */ PHP_METHOD(HttpRequestPool, detach) { @@ -245,6 +274,7 @@ PHP_METHOD(HttpRequestPool, detach) SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &request, http_request_object_ce)) { + obj->iterator.pos = -1; status = http_request_pool_detach(&obj->pool, request); } SET_EH_NORMAL(); @@ -255,6 +285,11 @@ PHP_METHOD(HttpRequestPool, detach) /* {{{ proto bool HttpRequestPool::send() * * Send all attached HttpRequest objects in parallel. + * + * Returns TRUE on success, or FALSE on failure. + * + * Throws HttpSocketException, HttpRequestException, + * HttpRequestPoolException, HttpMalformedHeaderException. */ PHP_METHOD(HttpRequestPool, send) { @@ -271,8 +306,10 @@ PHP_METHOD(HttpRequestPool, send) } /* }}} */ -/* {{{ proto protected bool HttpRequestPool::socketSend() +/* {{{ proto protected bool HttpRequestPool::socketPerform() * + * Returns TRUE until each request has finished its transaction. + * * Usage: ** iterator.pos < zend_llist_count(&obj->pool.handles)); + RETURN_BOOL(obj->iterator.pos >= 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles)); } } /* }}} */ @@ -358,7 +397,7 @@ PHP_METHOD(HttpRequestPool, current) } /* }}} */ -/* {{{ proto long HttpRequestPool::key() +/* {{{ proto int HttpRequestPool::key() * * Implements Iterator::key(). */