50b5856a36fc03481ddb297f0b214b90c5eb8aaa
[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, php_http_message_t *msg);
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 php_http_client_t *master;
53 zend_llist attached;
54 zend_llist finished;
55 } clients;
56
57 #ifdef ZTS
58 void ***ts;
59 #endif
60 } php_http_client_pool_t;
61
62 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);
63 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);
64 PHP_HTTP_API void php_http_client_pool_dtor(php_http_client_pool_t *pool);
65 PHP_HTTP_API void php_http_client_pool_free(php_http_client_pool_t **pool);
66 PHP_HTTP_API void php_http_client_pool_reset(php_http_client_pool_t *pool);
67 PHP_HTTP_API STATUS php_http_client_pool_exec(php_http_client_pool_t *pool);
68 PHP_HTTP_API STATUS php_http_client_pool_wait(php_http_client_pool_t *pool, struct timeval *custom_timeout);
69 PHP_HTTP_API STATUS php_http_client_pool_once(php_http_client_pool_t *pool);
70 PHP_HTTP_API STATUS php_http_client_pool_attach(php_http_client_pool_t *pool, zval *request);
71 PHP_HTTP_API STATUS php_http_client_pool_detach(php_http_client_pool_t *pool, zval *request);
72 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);
73 PHP_HTTP_API void php_http_client_pool_requests(php_http_client_pool_t *h, zval ***attached, zval ***finished);
74
75 typedef struct php_http_client_pool_object {
76 zend_object zo;
77 php_http_client_pool_t *pool;
78 zend_object_value client;
79 struct {
80 long pos;
81 } iterator;
82 } php_http_client_pool_object_t;
83
84 extern zend_class_entry *php_http_client_pool_class_entry;
85 extern zend_function_entry php_http_client_pool_method_entry[];
86
87 extern zend_object_value php_http_client_pool_object_new(zend_class_entry *ce TSRMLS_DC);
88 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);
89 extern void php_http_client_pool_object_free(void *object TSRMLS_DC);
90
91 extern zend_object_handlers *php_http_client_pool_get_object_handlers(void);
92
93 PHP_METHOD(HttpClientPool, __destruct);
94 PHP_METHOD(HttpClientPool, attach);
95 PHP_METHOD(HttpClientPool, detach);
96 PHP_METHOD(HttpClientPool, send);
97 PHP_METHOD(HttpClientPool, reset);
98 PHP_METHOD(HttpClientPool, once);
99 PHP_METHOD(HttpClientPool, wait);
100 PHP_METHOD(HttpClientPool, valid);
101 PHP_METHOD(HttpClientPool, current);
102 PHP_METHOD(HttpClientPool, key);
103 PHP_METHOD(HttpClientPool, next);
104 PHP_METHOD(HttpClientPool, rewind);
105 PHP_METHOD(HttpClientPool, count);
106 PHP_METHOD(HttpClientPool, getAttached);
107 PHP_METHOD(HttpClientPool, getFinished);
108 PHP_METHOD(HttpClientPool, enablePipelining);
109 PHP_METHOD(HttpClientPool, enableEvents);
110
111 PHP_MINIT_FUNCTION(http_client_pool);
112
113 #endif /* PHP_HTTP_CLIENT_POOL_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