/* {{{ 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:
+ * <pre>
+ * <?php
+ * $urls = array('www.php.net', 'pecl.php.net', 'pear.php.net')
+ * $pool = new HttpRequestPool;
+ * foreach ($urls as $url) {
+ * $req[$url] = new HttpRequest("http://$url", HTTP_HEAD);
+ * $pool->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'
+ * );
+ * }
+ * ?>
+ * </pre>
*/
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);
}
/* }}} */
NO_ARGS;
- //http_request_pool_detach_all(&obj->pool);
+ http_request_pool_detach_all(&obj->pool);
}
/* }}} */
#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)
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()