X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_requestpool_object.c;h=43941bb84faee94c40b705663d243d444ee8004d;hp=4a4293ba29549eed553b30540971e918bd8f42e6;hb=ad5f896b03adaa073134a00108a9cdf00720673a;hpb=9e37263154391dec762b839cad4b7dd13e35467e diff --git a/http_requestpool_object.c b/http_requestpool_object.c index 4a4293b..43941bb 100644 --- a/http_requestpool_object.c +++ b/http_requestpool_object.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2007, Michael Wallner | + | Copyright (c) 2004-2010, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -50,7 +50,9 @@ HTTP_END_ARGS; HTTP_EMPTY_ARGS(send); HTTP_EMPTY_ARGS(socketPerform); -HTTP_EMPTY_ARGS(socketSelect); +HTTP_BEGIN_ARGS(socketSelect, 0) + HTTP_ARG_VAL(timeout, 0) +HTTP_END_ARGS; HTTP_EMPTY_ARGS(valid); HTTP_EMPTY_ARGS(current); @@ -127,9 +129,13 @@ zend_object_value _http_requestpool_object_new(zend_class_entry *ce TSRMLS_DC) http_request_pool_init(&o->pool); +#if PHP_VERSION_ID < 50399 ALLOC_HASHTABLE(OBJ_PROP(o)); zend_hash_init(OBJ_PROP(o), zend_hash_num_elements(&ce->default_properties), NULL, ZVAL_PTR_DTOR, 0); zend_hash_copy(OBJ_PROP(o), &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); +#else + object_properties_init(&o->zo, ce); +#endif ov.handle = putObject(http_requestpool_object, o); ov.handlers = &http_requestpool_object_handlers; @@ -173,8 +179,8 @@ PHP_METHOD(HttpRequestPool, __construct) } } efree(argv); - SET_EH_NORMAL(); http_final(HTTP_EX_CE(request_pool)); + SET_EH_NORMAL(); } /* }}} */ @@ -277,14 +283,23 @@ PHP_METHOD(HttpRequestPool, socketPerform) } /* }}} */ -/* {{{ proto protected bool HttpRequestPool::socketSelect() */ +/* {{{ proto protected bool HttpRequestPool::socketSelect([double timeout]) */ PHP_METHOD(HttpRequestPool, socketSelect) { + double timeout = 0; + struct timeval custom_timeout, *custom_timeout_ptr = NULL; getObject(http_requestpool_object, obj); - NO_ARGS; + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|d", &timeout)) { + RETURN_FALSE; + } + if (ZEND_NUM_ARGS() && timeout > 0) { + custom_timeout.tv_sec = (time_t) timeout; + custom_timeout.tv_usec = HTTP_USEC(timeout) % HTTP_MCROSEC; + custom_timeout_ptr = &custom_timeout; + } - RETURN_SUCCESS(http_request_pool_select(&obj->pool)); + RETURN_SUCCESS(http_request_pool_select_ex(&obj->pool, custom_timeout_ptr)); } /* }}} */ @@ -407,7 +422,9 @@ PHP_METHOD(HttpRequestPool, getFinishedRequests) PHP_METHOD(HttpRequestPool, enablePipelining) { zend_bool enable = 1; +#if defined(HAVE_CURL_MULTI_SETOPT) && HTTP_CURL_VERSION(7,16,0) getObject(http_requestpool_object, obj); +#endif if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &enable)) { RETURN_FALSE; @@ -426,7 +443,9 @@ PHP_METHOD(HttpRequestPool, enablePipelining) PHP_METHOD(HttpRequestPool, enableEvents) { zend_bool enable = 1; +#if defined(HTTP_HAVE_EVENT) getObject(http_requestpool_object, obj); +#endif if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &enable)) { #if defined(HTTP_HAVE_EVENT)