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