/*
- +----------------------------------------------------------------------+
- | PECL :: http |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.0 of the PHP license, that |
- | is bundled with this package in the file LICENSE, and is available |
- | through the world-wide-web at http://www.php.net/license/3_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Copyright (c) 2004-2005 Michael Wallner <mike@php.net> |
- +----------------------------------------------------------------------+
+ +--------------------------------------------------------------------+
+ | PECL :: http |
+ +--------------------------------------------------------------------+
+ | Redistribution and use in source and binary forms, with or without |
+ | modification, are permitted provided that the conditions mentioned |
+ | in the accompanying LICENSE file are met. |
+ +--------------------------------------------------------------------+
+ | Copyright (c) 2004-2005, Michael Wallner <mike@php.net> |
+ +--------------------------------------------------------------------+
*/
/* $Id$ */
HTTP_EMPTY_ARGS(next, 0);
HTTP_EMPTY_ARGS(rewind, 0);
+HTTP_EMPTY_ARGS(getAttachedRequests, 0);
+HTTP_EMPTY_ARGS(getFinishedRequests, 0);
+
#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);
HTTP_REQPOOL_ME(key, ZEND_ACC_PUBLIC)
HTTP_REQPOOL_ME(next, ZEND_ACC_PUBLIC)
HTTP_REQPOOL_ME(rewind, ZEND_ACC_PUBLIC)
+
+ HTTP_REQPOOL_ME(getAttachedRequests, ZEND_ACC_PUBLIC)
+ HTTP_REQPOOL_ME(getFinishedRequests, ZEND_ACC_PUBLIC)
EMPTY_FUNCTION_ENTRY
};
{
HTTP_REGISTER_CLASS_EX(HttpRequestPool, http_requestpool_object, NULL, 0);
zend_class_implements(http_requestpool_object_ce TSRMLS_CC, 1, zend_ce_iterator);
+ http_requestpool_object_handlers.clone_obj = NULL;
return SUCCESS;
}
efree(o);
}
+#define http_requestpool_object_llist2array _http_requestpool_object_llist2array
+static void _http_requestpool_object_llist2array(zval **req, zval *array TSRMLS_DC)
+{
+ ZVAL_ADDREF(*req);
+ add_next_index_zval(array, *req);
+}
+
/* ### USERLAND ### */
/* {{{ proto void HttpRequestPool::__construct([HttpRequest request[, ...]])
* Usage:
* <pre>
* <?php
- * while ($pool->socketPerform()) {
- * do_something_else();
- * if (!$pool->socketSelect()) {
- * die('Socket error');
+ * class MyPool extends HttpRequestPool
+ * {
+ * public function send()
+ * {
+ * while ($this->socketPerform()) {
+ * if (!$this->socketSelect()) {
+ * throw new HttpSocketExcpetion;
+ * }
+ * }
+ * }
+ *
+ * protected final function socketPerform()
+ * {
+ * $result = parent::socketPerform();
+ * foreach ($this->getFinishedRequests() as $r) {
+ * $this->detach($r);
+ * // handle response of finished request
* }
+ * return $result;
* }
+ * }
* ?>
* </pre>
*/
if (0 < http_request_pool_perform(&obj->pool)) {
RETURN_TRUE;
} else {
- zend_llist_apply(&obj->pool.handles, (llist_apply_func_t) http_request_pool_responsehandler TSRMLS_CC);
RETURN_FALSE;
}
}
}
/* }}} */
+/* {{{ proto array HttpRequestPool::getAttachedRequests()
+ *
+ * Get attached HttpRequest objects.
+ *
+ * Returns an array containing all currently attached HttpRequest objects.
+ */
+PHP_METHOD(HttpRequestPool, getAttachedRequests)
+{
+ getObject(http_requestpool_object, obj);
+
+ NO_ARGS;
+
+ array_init(return_value);
+ zend_llist_apply_with_argument(&obj->pool.handles,
+ (llist_apply_with_arg_func_t) http_requestpool_object_llist2array,
+ return_value TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ proto array HttpRequestPool::getFinishedRequests()
+ *
+ * Get attached HttpRequest objects that already have finished their work.
+ *
+ * Returns an array containing all attached HttpRequest objects that
+ * already have finished their work.
+ */
+PHP_METHOD(HttpRequestPool, getFinishedRequests)
+{
+ getObject(http_requestpool_object, obj);
+
+ NO_ARGS;
+
+ array_init(return_value);
+ zend_llist_apply_with_argument(&obj->pool.finished,
+ (llist_apply_with_arg_func_t) http_requestpool_object_llist2array,
+ return_value TSRMLS_CC);
+}
+/* }}} */
+
#endif /* ZEND_ENGINE_2 && HTTP_HAVE_CURL */
/*