X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_request_pool.h;h=9984642823334fa4df09147fed0c966da3444286;hb=d926a12aeec96752456eddfbf9a04a002809a0d2;hp=18d724347f0d160840315758d9888b4e6ad33590;hpb=34c5e92d16dbd185ca792bd889d9e6d27cdaac80;p=m6w6%2Fext-http diff --git a/php_http_request_pool.h b/php_http_request_pool.h index 18d7243..9984642 100644 --- a/php_http_request_pool.h +++ b/php_http_request_pool.h @@ -1,54 +1,84 @@ +/* + +--------------------------------------------------------------------+ + | 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-2011, Michael Wallner | + +--------------------------------------------------------------------+ +*/ #ifndef PHP_HTTP_REQUESTPOOL_H #define PHP_HTTP_REQUESTPOOL_H -#include +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; -struct php_http_request_pool_globals { - void *event_base; -}; +typedef struct php_http_request_pool php_http_request_pool_t; -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 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); -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_ops { + php_http_resource_factory_ops_t *rsrc; + 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; -#ifdef PHP_HTTP_HAVE_EVENT -PHP_RINIT_FUNCTION(php_http_request_pool); -#endif +struct php_http_request_pool { + void *ctx; + php_http_resource_factory_t *rf; + php_http_request_pool_ops_t *ops; -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); + struct { + zend_llist attached; + zend_llist finished; + } requests; -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); + zval *persistent_handle_id; + +#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, php_http_resource_factory_t *rf, 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; + zend_object_value factory; struct { long pos; } iterator; @@ -58,6 +88,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); @@ -66,8 +97,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); @@ -80,6 +111,15 @@ 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 */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ +