d2b6eb47310ed7edc4ae7c58d5c6f3b035831968
[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 #include "php_http_request.h"
17
18 typedef enum php_http_request_pool_setopt_opt {
19 PHP_HTTP_REQUEST_POOL_OPT_ENABLE_PIPELINING,
20 PHP_HTTP_REQUEST_POOL_OPT_USE_EVENTS,
21 } php_http_request_pool_setopt_opt_t;
22
23 typedef struct php_http_request_pool php_http_request_pool_t;
24
25 typedef php_http_request_pool_t *(*php_http_request_pool_init_func_t)(php_http_request_pool_t *p, void *arg);
26 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);
27 typedef void (*php_http_request_pool_dtor_func_t)(php_http_request_pool_t *p);
28 typedef void (*php_http_request_pool_reset_func_t)(php_http_request_pool_t *p);
29 typedef STATUS (*php_http_request_pool_exec_func_t)(php_http_request_pool_t *p);
30 typedef STATUS (*php_http_request_pool_wait_func_t)(php_http_request_pool_t *p, struct timeval *custom_timeout);
31 typedef int (*php_http_request_pool_once_func_t)(php_http_request_pool_t *p);
32 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);
33 typedef STATUS (*php_http_request_pool_detach_func_t)(php_http_request_pool_t *p, php_http_request_t *r);
34 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);
35
36 typedef struct php_http_request_pool_ops {
37 php_http_resource_factory_ops_t *rsrc;
38 php_http_request_pool_init_func_t init;
39 php_http_request_pool_copy_func_t copy;
40 php_http_request_pool_dtor_func_t dtor;
41 php_http_request_pool_reset_func_t reset;
42 php_http_request_pool_exec_func_t exec;
43 php_http_request_pool_wait_func_t wait;
44 php_http_request_pool_once_func_t once;
45 php_http_request_pool_attach_func_t attach;
46 php_http_request_pool_detach_func_t detach;
47 php_http_request_pool_setopt_func_t setopt;
48 } php_http_request_pool_ops_t;
49
50 struct php_http_request_pool {
51 void *ctx;
52 php_http_resource_factory_t *rf;
53 php_http_request_pool_ops_t *ops;
54
55 struct {
56 zend_llist attached;
57 zend_llist finished;
58 } requests;
59
60 zval *persistent_handle_id;
61
62 #ifdef ZTS
63 void ***ts;
64 #endif
65 };
66
67 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);
68 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);
69 PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool);
70 PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool);
71 PHP_HTTP_API void php_http_request_pool_reset(php_http_request_pool_t *pool);
72 PHP_HTTP_API STATUS php_http_request_pool_exec(php_http_request_pool_t *pool);
73 PHP_HTTP_API STATUS php_http_request_pool_wait(php_http_request_pool_t *pool, struct timeval *custom_timeout);
74 PHP_HTTP_API STATUS php_http_request_pool_once(php_http_request_pool_t *pool);
75 PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request);
76 PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request);
77 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);
78 PHP_HTTP_API void php_http_request_pool_requests(php_http_request_pool_t *h, zval ***attached, zval ***finished);
79
80 typedef struct php_http_request_pool_object {
81 zend_object zo;
82 php_http_request_pool_t *pool;
83 zend_object_value factory;
84 struct {
85 long pos;
86 } iterator;
87 } php_http_request_pool_object_t;
88
89 extern zend_class_entry *php_http_request_pool_class_entry;
90 extern zend_function_entry php_http_request_pool_method_entry[];
91
92 extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC);
93 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);
94 extern void php_http_request_pool_object_free(void *object TSRMLS_DC);
95
96 PHP_METHOD(HttpRequestPool, __construct);
97 PHP_METHOD(HttpRequestPool, __destruct);
98 PHP_METHOD(HttpRequestPool, attach);
99 PHP_METHOD(HttpRequestPool, detach);
100 PHP_METHOD(HttpRequestPool, send);
101 PHP_METHOD(HttpRequestPool, reset);
102 PHP_METHOD(HttpRequestPool, once);
103 PHP_METHOD(HttpRequestPool, wait);
104 PHP_METHOD(HttpRequestPool, valid);
105 PHP_METHOD(HttpRequestPool, current);
106 PHP_METHOD(HttpRequestPool, key);
107 PHP_METHOD(HttpRequestPool, next);
108 PHP_METHOD(HttpRequestPool, rewind);
109 PHP_METHOD(HttpRequestPool, count);
110 PHP_METHOD(HttpRequestPool, getAttachedRequests);
111 PHP_METHOD(HttpRequestPool, getFinishedRequests);
112 PHP_METHOD(HttpRequestPool, enablePipelining);
113 PHP_METHOD(HttpRequestPool, enableEvents);
114
115 PHP_MINIT_FUNCTION(http_request_pool);
116
117 #endif /* PHP_HTTP_REQUESTPOOL_H */
118
119 /*
120 * Local variables:
121 * tab-width: 4
122 * c-basic-offset: 4
123 * End:
124 * vim600: noet sw=4 ts=4 fdm=marker
125 * vim<600: noet sw=4 ts=4
126 */
127