HTTP_EMPTY_ARGS(getAttachedRequests);
HTTP_EMPTY_ARGS(getFinishedRequests);
+HTTP_BEGIN_ARGS(enablePipelining, 0)
+ HTTP_ARG_VAL(enable, 0)
+HTTP_END_ARGS;
+
zend_class_entry *http_requestpool_object_ce;
zend_function_entry http_requestpool_object_fe[] = {
HTTP_REQPOOL_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
HTTP_REQPOOL_ME(getAttachedRequests, ZEND_ACC_PUBLIC)
HTTP_REQPOOL_ME(getFinishedRequests, ZEND_ACC_PUBLIC)
+
+ HTTP_REQPOOL_ME(enablePipelining, ZEND_ACC_PUBLIC)
EMPTY_FUNCTION_ENTRY
};
{
http_requestpool_object *o = (http_requestpool_object *) object;
- if (OBJ_PROP(o)) {
- zend_hash_destroy(OBJ_PROP(o));
- FREE_HASHTABLE(OBJ_PROP(o));
- }
http_request_pool_dtor(&o->pool);
- efree(o);
+ freeObject(o);
}
#define http_requestpool_object_llist2array _http_requestpool_object_llist2array
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_try {
- http_request_pool_attach(&obj->pool, *(argv[i]));
- } http_request_pool_catch();
+ http_request_pool_attach(&obj->pool, *(argv[i]));
}
}
- http_request_pool_final();
}
efree(argv);
SET_EH_NORMAL();
+ http_final(HTTP_EX_CE(request_pool));
}
/* }}} */
SET_EH_THROW_HTTP();
status = http_request_pool_send(&obj->pool);
SET_EH_NORMAL();
+
+ /* rethrow as HttpRequestPoolException */
+ http_final(HTTP_EX_CE(request_pool));
RETURN_SUCCESS(status);
}
{
NO_ARGS;
- IF_RETVAL_USED {
+ if (return_value_used) {
getObject(http_requestpool_object, obj);
RETURN_BOOL(obj->iterator.pos >= 0 && obj->iterator.pos < zend_llist_count(&obj->pool.handles));
}
{
NO_ARGS;
- IF_RETVAL_USED {
+ if (return_value_used) {
long pos = 0;
zval **current = NULL;
zend_llist_position lpos;
{
NO_ARGS;
- IF_RETVAL_USED {
+ if (return_value_used) {
getObject(http_requestpool_object, obj);
RETURN_LONG(obj->iterator.pos);
}
}
/* }}} */
+/* {{{ proto bool HttpRequest::enablePiplelinig([bool enable = true])
+ *
+ * Enables pipelining support for all attached requests if support in libcurl is given.
+ *
+ * Returns TRUE on success, or FALSE on failure.
+ */
+PHP_METHOD(HttpRequestPool, enablePipelining)
+{
+ zend_bool enable = 1;
+ getObject(http_requestpool_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &enable)) {
+ RETURN_FALSE;
+ }
+#if defined(HAVE_CURL_MULTI_SETOPT) && HTTP_CURL_VERSION(7,16,0)
+ if (CURLM_OK == curl_multi_setopt(obj->pool.ch, CURLMOPT_PIPELINING, (long) enable)) {
+ RETURN_TRUE;
+ }
+#endif
+ RETURN_FALSE;
+}
+/* }}} */
+
#endif /* ZEND_ENGINE_2 && HTTP_HAVE_CURL */
/*