let the ctor honor the options array too
[m6w6/ext-http] / php_http_client_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_CLIENT_POOL_H
14 #define PHP_HTTP_CLIENT_POOL_H
15
16 typedef enum php_http_client_pool_setopt_opt {
17 PHP_HTTP_CLIENT_POOL_OPT_ENABLE_PIPELINING,
18 PHP_HTTP_CLIENT_POOL_OPT_USE_EVENTS,
19 } php_http_client_pool_setopt_opt_t;
20
21 typedef struct php_http_client_pool *(*php_http_client_pool_init_func_t)(struct php_http_client_pool *p, void *arg);
22 typedef struct php_http_client_pool *(*php_http_client_pool_copy_func_t)(struct php_http_client_pool *from, struct php_http_client_pool *to);
23 typedef void (*php_http_client_pool_dtor_func_t)(struct php_http_client_pool *p);
24 typedef void (*php_http_client_pool_reset_func_t)(struct php_http_client_pool *p);
25 typedef STATUS (*php_http_client_pool_exec_func_t)(struct php_http_client_pool *p);
26 typedef STATUS (*php_http_client_pool_wait_func_t)(struct php_http_client_pool *p, struct timeval *custom_timeout);
27 typedef int (*php_http_client_pool_once_func_t)(struct php_http_client_pool *p);
28 typedef STATUS (*php_http_client_pool_attach_func_t)(struct php_http_client_pool *p, php_http_client_t *r, const char *m, const char *url, php_http_message_body_t *body);
29 typedef STATUS (*php_http_client_pool_detach_func_t)(struct php_http_client_pool *p, php_http_client_t *r);
30 typedef STATUS (*php_http_client_pool_setopt_func_t)(struct php_http_client_pool *p, php_http_client_pool_setopt_opt_t opt, void *arg);
31
32 typedef struct php_http_client_pool_ops {
33 php_http_resource_factory_ops_t *rsrc;
34 php_http_client_pool_init_func_t init;
35 php_http_client_pool_copy_func_t copy;
36 php_http_client_pool_dtor_func_t dtor;
37 php_http_client_pool_reset_func_t reset;
38 php_http_client_pool_exec_func_t exec;
39 php_http_client_pool_wait_func_t wait;
40 php_http_client_pool_once_func_t once;
41 php_http_client_pool_attach_func_t attach;
42 php_http_client_pool_detach_func_t detach;
43 php_http_client_pool_setopt_func_t setopt;
44 } php_http_client_pool_ops_t;
45
46 typedef struct php_http_client_pool {
47 void *ctx;
48 php_http_resource_factory_t *rf;
49 php_http_client_pool_ops_t *ops;
50
51 struct {
52 zend_llist attached;
53 zend_llist finished;
54 } clients;
55
56 #ifdef ZTS
57 void ***ts;
58 #endif
59 } php_http_client_pool_t;
60
61 PHP_HTTP_API php_http_client_pool_t *php_http_client_pool_init(php_http_client_pool_t *pool, php_http_client_pool_ops_t *ops, php_http_resource_factory_t *rf, void *init_arg TSRMLS_DC);
62 PHP_HTTP_API php_http_client_pool_t *php_http_client_pool_copy(php_http_client_pool_t *from, php_http_client_pool_t *to);
63 PHP_HTTP_API void php_http_client_pool_dtor(php_http_client_pool_t *pool);
64 PHP_HTTP_API void php_http_client_pool_free(php_http_client_pool_t **pool);
65 PHP_HTTP_API void php_http_client_pool_reset(php_http_client_pool_t *pool);
66 PHP_HTTP_API STATUS php_http_client_pool_exec(php_http_client_pool_t *pool);
67 PHP_HTTP_API STATUS php_http_client_pool_wait(php_http_client_pool_t *pool, struct timeval *custom_timeout);
68 PHP_HTTP_API STATUS php_http_client_pool_once(php_http_client_pool_t *pool);
69 PHP_HTTP_API STATUS php_http_client_pool_attach(php_http_client_pool_t *pool, zval *request);
70 PHP_HTTP_API STATUS php_http_client_pool_detach(php_http_client_pool_t *pool, zval *request);
71 PHP_HTTP_API STATUS php_http_client_pool_setopt(php_http_client_pool_t *pool, php_http_client_pool_setopt_opt_t opt, void *arg);
72 PHP_HTTP_API void php_http_client_pool_requests(php_http_client_pool_t *h, zval ***attached, zval ***finished);
73
74 typedef struct php_http_client_pool_object {
75 zend_object zo;
76 php_http_client_pool_t *pool;
77 zend_object_value factory;
78 struct {
79 long pos;
80 } iterator;
81 } php_http_client_pool_object_t;
82
83 extern zend_class_entry *php_http_client_pool_class_entry;
84 extern zend_function_entry php_http_client_pool_method_entry[];
85
86 extern zend_object_value php_http_client_pool_object_new(zend_class_entry *ce TSRMLS_DC);
87 extern zend_object_value php_http_client_pool_object_new_ex(zend_class_entry *ce, php_http_client_pool_t *p, php_http_client_pool_object_t **ptr TSRMLS_DC);
88 extern void php_http_client_pool_object_free(void *object TSRMLS_DC);
89
90 extern zend_object_handlers *php_http_client_pool_get_object_handlers(void);
91
92 PHP_METHOD(HttpClientPool, __destruct);
93 PHP_METHOD(HttpClientPool, attach);
94 PHP_METHOD(HttpClientPool, detach);
95 PHP_METHOD(HttpClientPool, send);
96 PHP_METHOD(HttpClientPool, reset);
97 PHP_METHOD(HttpClientPool, once);
98 PHP_METHOD(HttpClientPool, wait);
99 PHP_METHOD(HttpClientPool, valid);
100 PHP_METHOD(HttpClientPool, current);
101 PHP_METHOD(HttpClientPool, key);
102 PHP_METHOD(HttpClientPool, next);
103 PHP_METHOD(HttpClientPool, rewind);
104 PHP_METHOD(HttpClientPool, count);
105 PHP_METHOD(HttpClientPool, getAttachedRequests);
106 PHP_METHOD(HttpClientPool, getFinishedRequests);
107 PHP_METHOD(HttpClientPool, enablePipelining);
108 PHP_METHOD(HttpClientPool, enableEvents);
109
110 PHP_MINIT_FUNCTION(http_client_pool);
111
112 #endif /* PHP_HTTP_CLIENT_POOL_H */
113
114 /*
115 * Local variables:
116 * tab-width: 4
117 * c-basic-offset: 4
118 * End:
119 * vim600: noet sw=4 ts=4 fdm=marker
120 * vim<600: noet sw=4 ts=4
121 */
122