- add pipelining support to HttpRequestPool (libcurl >= 7.16.0)
[m6w6/ext-http] / http_requestpool_object.c
index 69c3f9616a0ade832514f9e38e153d90d61c2655..ff8f75d4431e073faec37dffefa09a240998935a 100644 (file)
@@ -67,6 +67,10 @@ HTTP_EMPTY_ARGS(count);
 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)
@@ -91,6 +95,8 @@ zend_function_entry http_requestpool_object_fe[] = {
        
        HTTP_REQPOOL_ME(getAttachedRequests, ZEND_ACC_PUBLIC)
        HTTP_REQPOOL_ME(getFinishedRequests, ZEND_ACC_PUBLIC)
+       
+       HTTP_REQPOOL_ME(enablePipelining, ZEND_ACC_PUBLIC)
 
        EMPTY_FUNCTION_ENTRY
 };
@@ -517,6 +523,29 @@ PHP_METHOD(HttpRequestPool, getFinishedRequests)
 }
 /* }}} */
 
+/* {{{ 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 */
 
 /*