don't crash if user extends abstract classes
[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_new_t create_object;
45 zend_class_entry *(*class_entry)(void);
46 } php_http_client_pool_ops_t;
47
48 typedef struct php_http_client_pool {
49 void *ctx;
50 php_http_resource_factory_t *rf;
51 php_http_client_pool_ops_t *ops;
52
53 struct {
54 php_http_client_t *master;
55 zend_llist attached;
56 zend_llist finished;
57 } clients;
58
59 #ifdef ZTS
60 void ***ts;
61 #endif
62 } php_http_client_pool_t;
63
64 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);
65 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);
66 PHP_HTTP_API void php_http_client_pool_dtor(php_http_client_pool_t *pool);
67 PHP_HTTP_API void php_http_client_pool_free(php_http_client_pool_t **pool);
68 PHP_HTTP_API void php_http_client_pool_reset(php_http_client_pool_t *pool);
69 PHP_HTTP_API STATUS php_http_client_pool_exec(php_http_client_pool_t *pool);
70 PHP_HTTP_API STATUS php_http_client_pool_wait(php_http_client_pool_t *pool, struct timeval *custom_timeout);
71 PHP_HTTP_API STATUS php_http_client_pool_once(php_http_client_pool_t *pool);
72 PHP_HTTP_API STATUS php_http_client_pool_attach(php_http_client_pool_t *pool, zval *request);
73 PHP_HTTP_API STATUS php_http_client_pool_detach(php_http_client_pool_t *pool, zval *request);
74 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);
75 PHP_HTTP_API void php_http_client_pool_requests(php_http_client_pool_t *h, zval ***attached, zval ***finished);
76
77 typedef struct php_http_client_pool_object {
78 zend_object zo;
79 php_http_client_pool_t *pool;
80 zend_object_value client;
81 struct {
82 long pos;
83 } iterator;
84 } php_http_client_pool_object_t;
85
86 zend_object_value php_http_client_pool_object_new(zend_class_entry *ce TSRMLS_DC);
87 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 void php_http_client_pool_object_free(void *object TSRMLS_DC);
89
90 zend_class_entry *php_http_client_pool_get_class_entry(void);
91 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