fix problem with dechunk/inflate stream usage
[m6w6/ext-http] / php_http_request_pool.h
1
2 #ifndef PHP_HTTP_REQUESTPOOL_H
3 #define PHP_HTTP_REQUESTPOOL_H
4
5 struct php_http_request_pool_globals {
6 void *event_base;
7 };
8
9 typedef struct php_http_request_pool {
10 CURLM *ch;
11 zend_llist finished;
12 zend_llist handles;
13 int unfinished; /* int because of curl_multi_perform() */
14 #ifdef ZTS
15 void ***ts;
16 #endif
17 #ifdef PHP_HTTP_HAVE_EVENT
18 struct event *timeout;
19 unsigned useevents:1;
20 unsigned runsocket:1;
21 #endif
22 } php_http_request_pool_t;
23
24 typedef int (*php_http_request_pool_apply_func_t)(php_http_request_pool_t *pool, zval *request);
25 typedef int (*php_http_request_pool_apply_with_arg_func_t)(php_http_request_pool_t *pool, zval *request, void *arg);
26
27 #ifdef PHP_HTTP_HAVE_EVENT
28 PHP_RINIT_FUNCTION(php_http_request_pool);
29 #endif
30
31 extern struct timeval *php_http_request_pool_timeout(php_http_request_pool_t *pool, struct timeval *timeout);
32 extern void php_http_request_pool_responsehandler(php_http_request_pool_t *pool);
33 extern int php_http_request_pool_apply_responsehandler(php_http_request_pool_t *pool, zval *req, void *ch);
34
35 PHP_HTTP_API php_http_request_pool_t *php_http_request_pool_init(php_http_request_pool_t *pool TSRMLS_DC);
36 PHP_HTTP_API STATUS php_http_request_pool_attach(php_http_request_pool_t *pool, zval *request);
37 PHP_HTTP_API STATUS php_http_request_pool_detach(php_http_request_pool_t *pool, zval *request);
38 PHP_HTTP_API void php_http_request_pool_apply(php_http_request_pool_t *pool, php_http_request_pool_apply_func_t cb);
39 PHP_HTTP_API void php_http_request_pool_apply_with_arg(php_http_request_pool_t *pool, php_http_request_pool_apply_with_arg_func_t cb, void *arg);
40 PHP_HTTP_API void php_http_request_pool_detach_all(php_http_request_pool_t *pool);
41 PHP_HTTP_API STATUS php_http_request_pool_send(php_http_request_pool_t *pool);
42 PHP_HTTP_API STATUS php_http_request_pool_select(php_http_request_pool_t *pool, struct timeval *custom_timeout);
43 PHP_HTTP_API int php_http_request_pool_perform(php_http_request_pool_t *pool);
44 PHP_HTTP_API void php_http_request_pool_dtor(php_http_request_pool_t *pool);
45 PHP_HTTP_API void php_http_request_pool_free(php_http_request_pool_t **pool);
46
47 typedef struct php_http_request_pool_object {
48 zend_object zo;
49 php_http_request_pool_t pool;
50 struct {
51 long pos;
52 } iterator;
53 } php_http_request_pool_object_t;
54
55 extern zend_class_entry *php_http_request_pool_class_entry;
56 extern zend_function_entry php_http_request_pool_method_entry[];
57
58 extern zend_object_value php_http_request_pool_object_new(zend_class_entry *ce TSRMLS_DC);
59 extern void php_http_request_pool_object_free(void *object TSRMLS_DC);
60
61 PHP_METHOD(HttpRequestPool, __construct);
62 PHP_METHOD(HttpRequestPool, __destruct);
63 PHP_METHOD(HttpRequestPool, attach);
64 PHP_METHOD(HttpRequestPool, detach);
65 PHP_METHOD(HttpRequestPool, send);
66 PHP_METHOD(HttpRequestPool, reset);
67 PHP_METHOD(HttpRequestPool, socketPerform);
68 PHP_METHOD(HttpRequestPool, socketSelect);
69 PHP_METHOD(HttpRequestPool, valid);
70 PHP_METHOD(HttpRequestPool, current);
71 PHP_METHOD(HttpRequestPool, key);
72 PHP_METHOD(HttpRequestPool, next);
73 PHP_METHOD(HttpRequestPool, rewind);
74 PHP_METHOD(HttpRequestPool, count);
75 PHP_METHOD(HttpRequestPool, getAttachedRequests);
76 PHP_METHOD(HttpRequestPool, getFinishedRequests);
77 PHP_METHOD(HttpRequestPool, enablePipelining);
78 PHP_METHOD(HttpRequestPool, enableEvents);
79
80 PHP_MINIT_FUNCTION(http_request_pool);
81 PHP_RINIT_FUNCTION(http_request_pool);
82
83 #endif /* PHP_HTTP_REQUESTPOOL_H */