f75c01dde3801282cd99e937d8d978c7f2bd5fe6
[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_request_pool_init_func_t init;
27 php_http_request_pool_copy_func_t copy;
28 php_http_request_pool_dtor_func_t dtor;
29 php_http_request_pool_reset_func_t reset;
30 php_http_request_pool_exec_func_t exec;
31 php_http_request_pool_wait_func_t wait;
32 php_http_request_pool_once_func_t once;
33 php_http_request_pool_attach_func_t attach;
34 php_http_request_pool_detach_func_t detach;
35 php_http_request_pool_setopt_func_t setopt;
36 } php_http_request_pool_ops_t;
37
38 struct php_http_request_pool {
39 void *ctx;
40 php_http_request_pool_ops_t *ops;
41
42 struct {
43 zend_llist attached;
44 zend_llist finished;
45 } requests;
46
47 #ifdef ZTS
48 void ***ts;
49 #endif
50 };
51
52 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);
53 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);
54 PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool);
55 PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool);
56 PHP_HTTP_API void php_http_request_pool_reset(php_http_request_pool_t *pool);
57 PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *pool);
58 PHP_HTTP_API STATUS php_http_request_pool_wait(php_http_request_pool_t *pool, struct timeval *custom_timeout);
59 PHP_HTTP_API STATUS php_http_request_pool_once(php_http_request_pool_t *pool);
60 PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request);
61 PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request);
62 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);
63 PHP_HTTP_API void php_http_request_pool_requests(php_http_request_pool_t *h, zval ***attached, zval ***finished);
64
65 typedef struct php_http_request_pool_object {
66 zend_object zo;
67 php_http_request_pool_t *pool;
68 struct {
69 long pos;
70 } iterator;
71 } php_http_request_pool_object_t;
72
73 extern zend_class_entry *php_http_request_pool_class_entry;
74 extern zend_function_entry php_http_request_pool_method_entry[];
75
76 extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC);
77 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);
78 extern void php_http_request_pool_object_free(void *object TSRMLS_DC);
79
80 PHP_METHOD(HttpRequestPool, __construct);
81 PHP_METHOD(HttpRequestPool, __destruct);
82 PHP_METHOD(HttpRequestPool, attach);
83 PHP_METHOD(HttpRequestPool, detach);
84 PHP_METHOD(HttpRequestPool, send);
85 PHP_METHOD(HttpRequestPool, reset);
86 PHP_METHOD(HttpRequestPool, once);
87 PHP_METHOD(HttpRequestPool, wait);
88 PHP_METHOD(HttpRequestPool, valid);
89 PHP_METHOD(HttpRequestPool, current);
90 PHP_METHOD(HttpRequestPool, key);
91 PHP_METHOD(HttpRequestPool, next);
92 PHP_METHOD(HttpRequestPool, rewind);
93 PHP_METHOD(HttpRequestPool, count);
94 PHP_METHOD(HttpRequestPool, getAttachedRequests);
95 PHP_METHOD(HttpRequestPool, getFinishedRequests);
96 PHP_METHOD(HttpRequestPool, enablePipelining);
97 PHP_METHOD(HttpRequestPool, enableEvents);
98
99 PHP_MINIT_FUNCTION(http_request_pool);
100
101 #endif /* PHP_HTTP_REQUESTPOOL_H */