less intrusive fix
[m6w6/ext-http] / php_http_request_pool.h
1 /*
2 +--------------------------------------------------------------------+
3 | PECL :: http |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2004-2011, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #ifndef PHP_HTTP_REQUESTPOOL_H
14 #define PHP_HTTP_REQUESTPOOL_H
15
16 typedef enum php_http_request_pool_setopt_opt {
17 PHP_HTTP_REQUEST_POOL_OPT_ENABLE_PIPELINING,
18 PHP_HTTP_REQUEST_POOL_OPT_USE_EVENTS,
19 } php_http_request_pool_setopt_opt_t;
20
21 typedef struct php_http_request_pool php_http_request_pool_t;
22
23 typedef php_http_request_pool_t *(*php_http_request_pool_init_func_t)(php_http_request_pool_t *p, void *arg);
24 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);
25 typedef void (*php_http_request_pool_dtor_func_t)(php_http_request_pool_t *p);
26 typedef void (*php_http_request_pool_reset_func_t)(php_http_request_pool_t *p);
27 typedef STATUS (*php_http_request_pool_exec_func_t)(php_http_request_pool_t *p);
28 typedef STATUS (*php_http_request_pool_wait_func_t)(php_http_request_pool_t *p, struct timeval *custom_timeout);
29 typedef int (*php_http_request_pool_once_func_t)(php_http_request_pool_t *p);
30 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);
31 typedef STATUS (*php_http_request_pool_detach_func_t)(php_http_request_pool_t *p, php_http_request_t *r);
32 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);
33
34 typedef struct php_http_request_pool_ops {
35 php_http_resource_factory_ops_t *rsrc;
36 php_http_request_pool_init_func_t init;
37 php_http_request_pool_copy_func_t copy;
38 php_http_request_pool_dtor_func_t dtor;
39 php_http_request_pool_reset_func_t reset;
40 php_http_request_pool_exec_func_t exec;
41 php_http_request_pool_wait_func_t wait;
42 php_http_request_pool_once_func_t once;
43 php_http_request_pool_attach_func_t attach;
44 php_http_request_pool_detach_func_t detach;
45 php_http_request_pool_setopt_func_t setopt;
46 } php_http_request_pool_ops_t;
47
48 struct php_http_request_pool {
49 void *ctx;
50 php_http_resource_factory_t *rf;
51 php_http_request_pool_ops_t *ops;
52
53 struct {
54 zend_llist attached;
55 zend_llist finished;
56 } requests;
57
58 #ifdef ZTS
59 void ***ts;
60 #endif
61 };
62
63 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);
64 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);
65 PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool);
66 PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool);
67 PHP_HTTP_API void php_http_request_pool_reset(php_http_request_pool_t *pool);
68 PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *pool);
69 PHP_HTTP_API STATUS php_http_request_pool_wait(php_http_request_pool_t *pool, struct timeval *custom_timeout);
70 PHP_HTTP_API STATUS php_http_request_pool_once(php_http_request_pool_t *pool);
71 PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request);
72 PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request);
73 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);
74 PHP_HTTP_API void php_http_request_pool_requests(php_http_request_pool_t *h, zval ***attached, zval ***finished);
75
76 typedef struct php_http_request_pool_object {
77 zend_object zo;
78 php_http_request_pool_t *pool;
79 zend_object_value factory;
80 struct {
81 long pos;
82 } iterator;
83 } php_http_request_pool_object_t;
84
85 extern zend_class_entry *php_http_request_pool_class_entry;
86 extern zend_function_entry php_http_request_pool_method_entry[];
87
88 extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC);
89 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);
90 extern void php_http_request_pool_object_free(void *object TSRMLS_DC);
91
92 PHP_METHOD(HttpRequestPool, __construct);
93 PHP_METHOD(HttpRequestPool, __destruct);
94 PHP_METHOD(HttpRequestPool, attach);
95 PHP_METHOD(HttpRequestPool, detach);
96 PHP_METHOD(HttpRequestPool, send);
97 PHP_METHOD(HttpRequestPool, reset);
98 PHP_METHOD(HttpRequestPool, once);
99 PHP_METHOD(HttpRequestPool, wait);
100 PHP_METHOD(HttpRequestPool, valid);
101 PHP_METHOD(HttpRequestPool, current);
102 PHP_METHOD(HttpRequestPool, key);
103 PHP_METHOD(HttpRequestPool, next);
104 PHP_METHOD(HttpRequestPool, rewind);
105 PHP_METHOD(HttpRequestPool, count);
106 PHP_METHOD(HttpRequestPool, getAttachedRequests);
107 PHP_METHOD(HttpRequestPool, getFinishedRequests);
108 PHP_METHOD(HttpRequestPool, enablePipelining);
109 PHP_METHOD(HttpRequestPool, enableEvents);
110
111 PHP_MINIT_FUNCTION(http_request_pool);
112
113 #endif /* PHP_HTTP_REQUESTPOOL_H */
114
115 /*
116 * Local variables:
117 * tab-width: 4
118 * c-basic-offset: 4
119 * End:
120 * vim600: noet sw=4 ts=4 fdm=marker
121 * vim<600: noet sw=4 ts=4
122 */
123