X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_request_pool.h;h=f75c01dde3801282cd99e937d8d978c7f2bd5fe6;hp=f7cedb66e37cf2640ffc0d95149e9ae3b87149fd;hb=df06e2dbf48a3b0d96f2c62071c1b5fc907a98d0;hpb=d3485e3b28336153dca690e872ffe1ddc60fedd2 diff --git a/php_http_request_pool.h b/php_http_request_pool.h index f7cedb6..f75c01d 100644 --- a/php_http_request_pool.h +++ b/php_http_request_pool.h @@ -2,51 +2,69 @@ #ifndef PHP_HTTP_REQUESTPOOL_H #define PHP_HTTP_REQUESTPOOL_H -struct php_http_request_pool_globals { - void *event_base; -}; +#include "php_http_request.h" -typedef struct php_http_request_pool { - CURLM *ch; - zend_llist finished; - zend_llist handles; - int unfinished; /* int because of curl_multi_perform() */ -#ifdef ZTS - void ***ts; -#endif -#ifdef PHP_HTTP_HAVE_EVENT - struct event *timeout; - unsigned useevents:1; - unsigned runsocket:1; -#endif -} php_http_request_pool_t; +typedef enum php_http_request_pool_setopt_opt { + PHP_HTTP_REQUEST_POOL_OPT_ENABLE_PIPELINING, + PHP_HTTP_REQUEST_POOL_OPT_USE_EVENTS, +} php_http_request_pool_setopt_opt_t; -typedef int (*php_http_request_pool_apply_func_t)(php_http_request_pool_t *pool, zval *request); -typedef int (*php_http_request_pool_apply_with_arg_func_t)(php_http_request_pool_t *pool, zval *request, void *arg); +typedef struct php_http_request_pool php_http_request_pool_t; -#ifdef PHP_HTTP_HAVE_EVENT -PHP_RINIT_FUNCTION(php_http_request_pool); -#endif +typedef php_http_request_pool_t *(*php_http_request_pool_init_func_t)(php_http_request_pool_t *p, void *arg); +typedef php_http_request_pool_t *(*php_http_request_pool_copy_func_t)(php_http_request_pool_t *from, php_http_request_pool_t *to); +typedef void (*php_http_request_pool_dtor_func_t)(php_http_request_pool_t *p); +typedef void (*php_http_request_pool_reset_func_t)(php_http_request_pool_t *p); +typedef STATUS (*php_http_request_pool_exec_func_t)(php_http_request_pool_t *p); +typedef STATUS (*php_http_request_pool_wait_func_t)(php_http_request_pool_t *p, struct timeval *custom_timeout); +typedef int (*php_http_request_pool_once_func_t)(php_http_request_pool_t *p); +typedef STATUS (*php_http_request_pool_attach_func_t)(php_http_request_pool_t *p, php_http_request_t *r, php_http_request_method_t m, const char *url, php_http_message_body_t *body); +typedef STATUS (*php_http_request_pool_detach_func_t)(php_http_request_pool_t *p, php_http_request_t *r); +typedef STATUS (*php_http_request_pool_setopt_func_t)(php_http_request_pool_t *p, php_http_request_pool_setopt_opt_t opt, void *arg); -extern struct timeval *php_http_request_pool_timeout(php_http_request_pool_t *pool, struct timeval *timeout); -extern void php_http_request_pool_responsehandler(php_http_request_pool_t *pool); -extern int php_http_request_pool_apply_responsehandler(php_http_request_pool_t *pool, zval *req, void *ch); +typedef struct php_http_request_pool_ops { + php_http_request_pool_init_func_t init; + php_http_request_pool_copy_func_t copy; + php_http_request_pool_dtor_func_t dtor; + php_http_request_pool_reset_func_t reset; + php_http_request_pool_exec_func_t exec; + php_http_request_pool_wait_func_t wait; + php_http_request_pool_once_func_t once; + php_http_request_pool_attach_func_t attach; + php_http_request_pool_detach_func_t detach; + php_http_request_pool_setopt_func_t setopt; +} php_http_request_pool_ops_t; -PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_request_pool_t *pool TSRMLS_DC); -PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request); -PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request); -PHP_HTTP_API void php_http_request_pool_apply(php_http_request_pool_t *pool, php_http_request_pool_apply_func_t cb); -PHP_HTTP_API void php_http_request_pool_apply_with_arg(php_http_request_pool_t *pool, php_http_request_pool_apply_with_arg_func_t cb, void *arg); -PHP_HTTP_API void php_http_request_pool_detach_all(php_http_request_pool_t *pool); -PHP_HTTP_API STATUS php_http_request_pool_send(php_http_request_pool_t *pool); -PHP_HTTP_API STATUS php_http_request_pool_select(php_http_request_pool_t *pool, struct timeval *custom_timeout); -PHP_HTTP_API int php_http_request_pool_perform(php_http_request_pool_t *pool); +struct php_http_request_pool { + void *ctx; + php_http_request_pool_ops_t *ops; + + struct { + zend_llist attached; + zend_llist finished; + } requests; + +#ifdef ZTS + void ***ts; +#endif +}; + +PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_request_pool_t *pool, php_http_request_pool_ops_t *ops, void *init_arg TSRMLS_DC); +PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_copy(php_http_request_pool_t *from, php_http_request_pool_t *to); PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool); PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool); +PHP_HTTP_API void php_http_request_pool_reset(php_http_request_pool_t *pool); +PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *pool); +PHP_HTTP_API STATUS php_http_request_pool_wait(php_http_request_pool_t *pool, struct timeval *custom_timeout); +PHP_HTTP_API STATUS php_http_request_pool_once(php_http_request_pool_t *pool); +PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request); +PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request); +PHP_HTTP_API STATUS php_http_request_pool_setopt(php_http_request_pool_t *pool, php_http_request_pool_setopt_opt_t opt, void *arg); +PHP_HTTP_API void php_http_request_pool_requests(php_http_request_pool_t *h, zval ***attached, zval ***finished); typedef struct php_http_request_pool_object { zend_object zo; - php_http_request_pool_t pool; + php_http_request_pool_t *pool; struct { long pos; } iterator; @@ -56,6 +74,7 @@ extern zend_class_entry *php_http_request_pool_class_entry; extern zend_function_entry php_http_request_pool_method_entry[]; extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC); +extern zend_object_value php_http_request_pool_object_new_ex(zend_class_entry *ce, php_http_request_pool_t *p, php_http_request_pool_object_t **ptr TSRMLS_DC); extern void php_http_request_pool_object_free(void *object TSRMLS_DC); PHP_METHOD(HttpRequestPool, __construct); @@ -64,8 +83,8 @@ PHP_METHOD(HttpRequestPool, attach); PHP_METHOD(HttpRequestPool, detach); PHP_METHOD(HttpRequestPool, send); PHP_METHOD(HttpRequestPool, reset); -PHP_METHOD(HttpRequestPool, socketPerform); -PHP_METHOD(HttpRequestPool, socketSelect); +PHP_METHOD(HttpRequestPool, once); +PHP_METHOD(HttpRequestPool, wait); PHP_METHOD(HttpRequestPool, valid); PHP_METHOD(HttpRequestPool, current); PHP_METHOD(HttpRequestPool, key); @@ -78,6 +97,5 @@ PHP_METHOD(HttpRequestPool, enablePipelining); PHP_METHOD(HttpRequestPool, enableEvents); PHP_MINIT_FUNCTION(http_request_pool); -PHP_RINIT_FUNCTION(http_request_pool); #endif /* PHP_HTTP_REQUESTPOOL_H */