* use the resource factory
[m6w6/ext-http] / php_http_request_pool.h
1
2 #ifndef PHP_HTTP_REQUESTPOOL_H
3 #define PHP_HTTP_REQUESTPOOL_H
4
5 #include "php_http_request.h"
6
7 typedef enum php_http_request_pool_setopt_opt {
8 PHP_HTTP_REQUEST_POOL_OPT_ENABLE_PIPELINING,
9 PHP_HTTP_REQUEST_POOL_OPT_USE_EVENTS,
10 } php_http_request_pool_setopt_opt_t;
11
12 typedef struct php_http_request_pool php_http_request_pool_t;
13
14 typedef php_http_request_pool_t *(*php_http_request_pool_init_func_t)(php_http_request_pool_t *p, void *arg);
15 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);
16 typedef void (*php_http_request_pool_dtor_func_t)(php_http_request_pool_t *p);
17 typedef void (*php_http_request_pool_reset_func_t)(php_http_request_pool_t *p);
18 typedef STATUS (*php_http_request_pool_exec_func_t)(php_http_request_pool_t *p);
19 typedef STATUS (*php_http_request_pool_wait_func_t)(php_http_request_pool_t *p, struct timeval *custom_timeout);
20 typedef int (*php_http_request_pool_once_func_t)(php_http_request_pool_t *p);
21 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);
22 typedef STATUS (*php_http_request_pool_detach_func_t)(php_http_request_pool_t *p, php_http_request_t *r);
23 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);
24
25 typedef struct php_http_request_pool_ops {
26 php_http_resource_factory_ops_t *rsrc;
27 php_http_request_pool_init_func_t init;
28 php_http_request_pool_copy_func_t copy;
29 php_http_request_pool_dtor_func_t dtor;
30 php_http_request_pool_reset_func_t reset;
31 php_http_request_pool_exec_func_t exec;
32 php_http_request_pool_wait_func_t wait;
33 php_http_request_pool_once_func_t once;
34 php_http_request_pool_attach_func_t attach;
35 php_http_request_pool_detach_func_t detach;
36 php_http_request_pool_setopt_func_t setopt;
37 } php_http_request_pool_ops_t;
38
39 struct php_http_request_pool {
40 void *ctx;
41 php_http_resource_factory_t *rf;
42 php_http_request_pool_ops_t *ops;
43
44 struct {
45 zend_llist attached;
46 zend_llist finished;
47 } requests;
48
49 zval *persistent_handle_id;
50
51 #ifdef ZTS
52 void ***ts;
53 #endif
54 };
55
56 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);
57 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);
58 PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool);
59 PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool);
60 PHP_HTTP_API void php_http_request_pool_reset(php_http_request_pool_t *pool);
61 PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *pool);
62 PHP_HTTP_API STATUS php_http_request_pool_wait(php_http_request_pool_t *pool, struct timeval *custom_timeout);
63 PHP_HTTP_API STATUS php_http_request_pool_once(php_http_request_pool_t *pool);
64 PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request);
65 PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request);
66 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);
67 PHP_HTTP_API void php_http_request_pool_requests(php_http_request_pool_t *h, zval ***attached, zval ***finished);
68
69 typedef struct php_http_request_pool_object {
70 zend_object zo;
71 php_http_request_pool_t *pool;
72 zend_object_value factory;
73 struct {
74 long pos;
75 } iterator;
76 } php_http_request_pool_object_t;
77
78 extern zend_class_entry *php_http_request_pool_class_entry;
79 extern zend_function_entry php_http_request_pool_method_entry[];
80
81 extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC);
82 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);
83 extern void php_http_request_pool_object_free(void *object TSRMLS_DC);
84
85 PHP_METHOD(HttpRequestPool, __construct);
86 PHP_METHOD(HttpRequestPool, __destruct);
87 PHP_METHOD(HttpRequestPool, attach);
88 PHP_METHOD(HttpRequestPool, detach);
89 PHP_METHOD(HttpRequestPool, send);
90 PHP_METHOD(HttpRequestPool, reset);
91 PHP_METHOD(HttpRequestPool, once);
92 PHP_METHOD(HttpRequestPool, wait);
93 PHP_METHOD(HttpRequestPool, valid);
94 PHP_METHOD(HttpRequestPool, current);
95 PHP_METHOD(HttpRequestPool, key);
96 PHP_METHOD(HttpRequestPool, next);
97 PHP_METHOD(HttpRequestPool, rewind);
98 PHP_METHOD(HttpRequestPool, count);
99 PHP_METHOD(HttpRequestPool, getAttachedRequests);
100 PHP_METHOD(HttpRequestPool, getFinishedRequests);
101 PHP_METHOD(HttpRequestPool, enablePipelining);
102 PHP_METHOD(HttpRequestPool, enableEvents);
103
104 PHP_MINIT_FUNCTION(http_request_pool);
105
106 #endif /* PHP_HTTP_REQUESTPOOL_H */