prepare v4.2.5
[m6w6/ext-http] / src / php_http_client.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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #ifndef PHP_HTTP_CLIENT_H
14 #define PHP_HTTP_CLIENT_H
15
16 typedef enum php_http_client_setopt_opt {
17 PHP_HTTP_CLIENT_OPT_ENABLE_PIPELINING,
18 PHP_HTTP_CLIENT_OPT_USE_EVENTS,
19 PHP_HTTP_CLIENT_OPT_CONFIGURATION,
20 } php_http_client_setopt_opt_t;
21
22 typedef enum php_http_client_getopt_opt {
23 PHP_HTTP_CLIENT_OPT_PROGRESS_INFO, /* php_http_client_enqueue_t*, php_http_client_progress_state_t** */
24 PHP_HTTP_CLIENT_OPT_TRANSFER_INFO, /* php_http_client_enqueue_t*, HashTable* */
25 PHP_HTTP_CLIENT_OPT_AVAILABLE_OPTIONS, /* NULL, HashTable* */
26 PHP_HTTP_CLIENT_OPT_AVAILABLE_CONFIGURATION,/* NULL, HashTable */
27 } php_http_client_getopt_opt_t;
28
29 typedef struct php_http_client_enqueue {
30 php_http_message_t *request; /* unique */
31 HashTable *options;
32 void (*dtor)(struct php_http_client_enqueue *);
33 void *opaque;
34 struct {
35 zend_fcall_info fci;
36 zend_fcall_info_cache fcc;
37 } closure;
38 php_http_message_object_t *request_obj; /* supplemental to request */
39 } php_http_client_enqueue_t;
40
41 typedef struct php_http_client *(*php_http_client_init_func_t)(struct php_http_client *p, void *init_arg);
42 typedef struct php_http_client *(*php_http_client_copy_func_t)(struct php_http_client *from, struct php_http_client *to);
43 typedef void (*php_http_client_dtor_func_t)(struct php_http_client *p);
44 typedef void (*php_http_client_reset_func_t)(struct php_http_client *p);
45 typedef ZEND_RESULT_CODE (*php_http_client_exec_func_t)(struct php_http_client *p);
46 typedef int (*php_http_client_once_func_t)(struct php_http_client *p);
47 typedef ZEND_RESULT_CODE (*php_http_client_wait_func_t)(struct php_http_client *p, struct timeval *custom_timeout);
48 typedef ZEND_RESULT_CODE (*php_http_client_enqueue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
49 typedef ZEND_RESULT_CODE (*php_http_client_dequeue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
50 typedef ZEND_RESULT_CODE (*php_http_client_requeue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
51 typedef ZEND_RESULT_CODE (*php_http_client_setopt_func_t)(struct php_http_client *p, php_http_client_setopt_opt_t opt, void *arg);
52 typedef ZEND_RESULT_CODE (*php_http_client_getopt_func_t)(struct php_http_client *h, php_http_client_getopt_opt_t opt, void *arg, void **res);
53
54 typedef struct php_http_client_ops {
55 php_resource_factory_ops_t *rsrc;
56 php_http_client_init_func_t init;
57 php_http_client_copy_func_t copy;
58 php_http_client_dtor_func_t dtor;
59 php_http_client_reset_func_t reset;
60 php_http_client_exec_func_t exec;
61 php_http_client_wait_func_t wait;
62 php_http_client_once_func_t once;
63 php_http_client_enqueue_func_t enqueue;
64 php_http_client_dequeue_func_t dequeue;
65 php_http_client_requeue_func_t requeue;
66 php_http_client_setopt_func_t setopt;
67 php_http_client_getopt_func_t getopt;
68 } php_http_client_ops_t;
69
70 typedef struct php_http_client_driver {
71 zend_string *driver_name;
72 zend_string *client_name;
73 zend_string *request_name;
74 php_http_client_ops_t *client_ops;
75 } php_http_client_driver_t;
76
77 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_driver_add(php_http_client_driver_t *driver);
78 PHP_HTTP_API php_http_client_driver_t *php_http_client_driver_get(zend_string *name);
79
80 typedef struct php_http_client_progress_state {
81 struct {
82 double now;
83 double total;
84 } ul;
85 struct {
86 double now;
87 double total;
88 } dl;
89 const char *info;
90 unsigned started:1;
91 unsigned finished:1;
92 } php_http_client_progress_state_t;
93
94 typedef ZEND_RESULT_CODE (*php_http_client_response_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, php_http_message_t **response);
95 typedef void (*php_http_client_progress_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, php_http_client_progress_state_t *state);
96 typedef void (*php_http_client_debug_callback_t)(void *arg, struct php_http_client *client, php_http_client_enqueue_t *e, unsigned type, const char *data, size_t size);
97
98 #define PHP_HTTP_CLIENT_DEBUG_INFO 0x00
99 #define PHP_HTTP_CLIENT_DEBUG_IN 0x01
100 #define PHP_HTTP_CLIENT_DEBUG_OUT 0x02
101 #define PHP_HTTP_CLIENT_DEBUG_HEADER 0x10
102 #define PHP_HTTP_CLIENT_DEBUG_BODY 0x20
103 #define PHP_HTTP_CLIENT_DEBUG_SSL 0x40
104
105 typedef struct php_http_client {
106 void *ctx;
107 php_resource_factory_t *rf;
108 php_http_client_ops_t *ops;
109
110 struct {
111 struct {
112 php_http_client_response_callback_t func;
113 void *arg;
114 } response;
115 struct {
116 php_http_client_progress_callback_t func;
117 void *arg;
118 } progress;
119 struct {
120 php_http_client_debug_callback_t func;
121 void *arg;
122 } debug;
123 unsigned depth;
124 } callback;
125
126 zend_llist requests;
127 zend_llist responses;
128 } php_http_client_t;
129
130 PHP_HTTP_API zend_class_entry *php_http_client_get_class_entry();
131
132 typedef struct php_http_client_object {
133 php_http_client_t *client;
134 php_http_object_method_t *update;
135 php_http_object_method_t notify;
136 struct {
137 zend_fcall_info fci;
138 zend_fcall_info_cache fcc;
139 } debug;
140 long iterator;
141 zval *gc;
142 zend_object zo;
143 } php_http_client_object_t;
144
145 PHP_HTTP_API php_http_client_t *php_http_client_init(php_http_client_t *h, php_http_client_ops_t *ops, php_resource_factory_t *rf, void *init_arg);
146 PHP_HTTP_API php_http_client_t *php_http_client_copy(php_http_client_t *from, php_http_client_t *to);
147 PHP_HTTP_API void php_http_client_dtor(php_http_client_t *h);
148 PHP_HTTP_API void php_http_client_free(php_http_client_t **h);
149
150 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_enqueue(php_http_client_t *h, php_http_client_enqueue_t *enqueue);
151 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_dequeue(php_http_client_t *h, php_http_message_t *request);
152
153 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_wait(php_http_client_t *h, struct timeval *custom_timeout);
154 PHP_HTTP_API int php_http_client_once(php_http_client_t *h);
155
156 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_exec(php_http_client_t *h);
157 PHP_HTTP_API void php_http_client_reset(php_http_client_t *h);
158
159 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_setopt(php_http_client_t *h, php_http_client_setopt_opt_t opt, void *arg);
160 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_getopt(php_http_client_t *h, php_http_client_getopt_opt_t opt, void *arg, void *res_ptr);
161
162 typedef int (*php_http_client_enqueue_cmp_func_t)(php_http_client_enqueue_t *cmp, void *arg);
163 /* compare with request message pointer if compare_func is NULL */
164 PHP_HTTP_API php_http_client_enqueue_t *php_http_client_enqueued(php_http_client_t *h, void *compare_arg, php_http_client_enqueue_cmp_func_t compare_func);
165
166 PHP_MINIT_FUNCTION(http_client);
167 PHP_MSHUTDOWN_FUNCTION(http_client);
168
169 #endif
170
171 /*
172 * Local variables:
173 * tab-width: 4
174 * c-basic-offset: 4
175 * End:
176 * vim600: noet sw=4 ts=4 fdm=marker
177 * vim<600: noet sw=4 ts=4
178 */