From: Michael Wallner Date: Tue, 14 Jun 2005 15:40:39 +0000 (+0000) Subject: - enable $pool = new HttpRequestPool(HttpRequest r, ...); X-Git-Tag: RELEASE_0_9_0~17 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=1ad1914243fce5fb0416a82258ec25e966f802b7 - enable $pool = new HttpRequestPool(HttpRequest r, ...); --- diff --git a/http_methods.c b/http_methods.c index f844c05..1e454d8 100644 --- a/http_methods.c +++ b/http_methods.c @@ -2142,13 +2142,46 @@ PHP_METHOD(HttpRequest, send) /* {{{ HttpRequestPool */ -/* {{{ proto void HttpRequestPool::__construct() +/* {{{ proto void HttpRequestPool::__construct([HttpRequest request[, ...]]) * - * Instantiate a new HttpRequestPool object. + * Instantiate a new HttpRequestPool object. An HttpRequestPool is + * able to send several HttpRequests in parallel. + * + * Example: + *
+ * attach($req[$url]);
+ *     }
+ *     $pool->send();
+ *     foreach ($urls as $url) {
+ *         printf("%s (%s) is %s\n", 
+ *             $url, $req[$url]->getResponseInfo('effective_url'), 
+ *             $r->getResponseCode() == 200 ? 'alive' : 'not alive'
+ *         );
+ *     }
+ * ?>
+ * 
*/ PHP_METHOD(HttpRequestPool, __construct) { - NO_ARGS; + int argc = ZEND_NUM_ARGS(); + zval ***argv = safe_emalloc(argc, sizeof(zval *), 0); + getObject(http_requestpool_object, obj); + + if (SUCCESS == zend_get_parameters_array_ex(argc, argv)) { + int i; + + for (i = 0; i < argc; ++i) { + if (Z_TYPE_PP(argv[i]) == IS_OBJECT && instanceof_function(Z_OBJCE_PP(argv[i]), http_request_object_ce TSRMLS_CC)) { + http_request_pool_attach(&obj->pool, *(argv[i])); + } + } + } + efree(argv); } /* }}} */ @@ -2162,7 +2195,7 @@ PHP_METHOD(HttpRequestPool, __destruct) NO_ARGS; - //http_request_pool_detach_all(&obj->pool); + http_request_pool_detach_all(&obj->pool); } /* }}} */ diff --git a/http_requestpool_object.c b/http_requestpool_object.c index 904fb96..f7161c7 100644 --- a/http_requestpool_object.c +++ b/http_requestpool_object.c @@ -36,12 +36,14 @@ #ifdef ZEND_ENGINE_2 #ifdef HTTP_HAVE_CURL +HTTP_DECLARE_ARG_PASS_INFO(); + #define http_requestpool_object_declare_default_properties() _http_requestpool_object_declare_default_properties(TSRMLS_C) static inline void _http_requestpool_object_declare_default_properties(TSRMLS_D); zend_class_entry *http_requestpool_object_ce; zend_function_entry http_requestpool_object_fe[] = { - PHP_ME(HttpRequestPool, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) + PHP_ME(HttpRequestPool, __construct, http_arg_pass_ref_all, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) PHP_ME(HttpRequestPool, __destruct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_DTOR) PHP_ME(HttpRequestPool, attach, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpRequestPool, detach, NULL, ZEND_ACC_PUBLIC) diff --git a/php_http_std_defs.h b/php_http_std_defs.h index 87de912..0024685 100644 --- a/php_http_std_defs.h +++ b/php_http_std_defs.h @@ -271,12 +271,18 @@ typedef int STATUS; ZEND_ARG_PASS_INFO(0) \ ZEND_ARG_PASS_INFO(0) \ ZEND_ARG_PASS_INFO(1) \ + ZEND_END_ARG_INFO(); \ + \ + static \ + ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_all, 1) \ + ZEND_ARG_PASS_INFO(1) \ ZEND_END_ARG_INFO() # else # define HTTP_DECLARE_ARG_PASS_INFO() \ static unsigned char http_arg_pass_ref_3[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE}; \ static unsigned char http_arg_pass_ref_4[] = {4, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE}; \ - static unsigned char http_arg_pass_ref_5[] = {5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE} + static unsigned char http_arg_pass_ref_5[] = {5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE}; \ + static unsigned char http_arg_pass_ref_all[]={1, BYREF_FORCE_REST} # endif /* ZEND_ENGINE_2 */ #else # define HTTP_DECLARE_ARG_PASS_INFO()