b8486123a5d2f48ba7dcb7a6c502c86082115c63
[m6w6/ext-http] / php_http_request.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-2010, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 /* $Id: php_http_request_api.h 292841 2009-12-31 08:48:57Z mike $ */
14
15 #ifndef PHP_HTTP_REQUEST_H
16 #define PHP_HTTP_REQUEST_H
17
18 #include "php_http_message_body.h"
19 #include "php_http_message_parser.h"
20 #include "php_http_request_method.h"
21
22 typedef struct php_http_request_progress_state {
23 struct {
24 double now;
25 double total;
26 } ul;
27 struct {
28 double now;
29 double total;
30 } dl;
31 unsigned started:1;
32 unsigned finished:1;
33 } php_http_request_progress_state_t;
34
35 typedef struct php_http_request_progress {
36 php_http_request_progress_state_t state;
37 zval *callback;
38 unsigned in_cb:1;
39 unsigned pass_state:1;
40 } php_http_request_progress_t;
41
42 static inline void php_http_request_progress_notify(php_http_request_progress_t *progress TSRMLS_DC)
43 {
44 if (progress->callback) {
45 zval retval;
46
47 INIT_PZVAL(&retval);
48 ZVAL_NULL(&retval);
49
50 with_error_handling(EH_NORMAL, NULL) {
51 if (progress->pass_state) {
52 zval *param;
53
54 MAKE_STD_ZVAL(param);
55 array_init(param);
56 add_assoc_bool(param, "started", progress->state.started);
57 add_assoc_bool(param, "finished", progress->state.finished);
58 add_assoc_double(param, "dltotal", progress->state.dl.total);
59 add_assoc_double(param, "dlnow", progress->state.dl.now);
60 add_assoc_double(param, "ultotal", progress->state.ul.total);
61 add_assoc_double(param, "ulnow", progress->state.ul.now);
62
63 progress->in_cb = 1;
64 call_user_function(EG(function_table), NULL, progress->callback, &retval, 1, &param TSRMLS_CC);
65 progress->in_cb = 0;
66
67 zval_ptr_dtor(&param);
68 } else {
69 progress->in_cb = 1;
70 call_user_function(EG(function_table), NULL, progress->callback, &retval, 0, NULL TSRMLS_CC);
71 progress->in_cb = 0;
72 }
73 } end_error_handling();
74
75 zval_dtor(&retval);
76 }
77 }
78
79 typedef enum php_http_request_setopt_opt {
80 PHP_HTTP_REQUEST_OPT_SETTINGS, /* HashTable* */
81 PHP_HTTP_REQUEST_OPT_PROGRESS_CALLBACK, /* zval* */
82 PHP_HTTP_REQUEST_OPT_PROGRESS_CALLBACK_WANTS_STATE, /* int* */
83 PHP_HTTP_REQUEST_OPT_COOKIES_ENABLE, /* - */
84 PHP_HTTP_REQUEST_OPT_COOKIES_RESET, /* - */
85 PHP_HTTP_REQUEST_OPT_COOKIES_RESET_SESSION, /* - */
86 PHP_HTTP_REQUEST_OPT_COOKIES_FLUSH, /* - */
87 } php_http_request_setopt_opt_t;
88
89 typedef enum php_http_request_getopt_opt {
90 PHP_HTTP_REQUEST_OPT_PROGRESS_INFO, /* php_http_request_progress_t** */
91 PHP_HTTP_REQUEST_OPT_TRANSFER_INFO, /* HashTable* */
92 } php_http_request_getopt_opt_t;
93
94 typedef struct php_http_request php_http_request_t;
95
96 typedef php_http_request_t *(*php_http_request_init_func_t)(php_http_request_t *h, void *arg);
97 typedef php_http_request_t *(*php_http_request_copy_func_t)(php_http_request_t *from, php_http_request_t *to);
98 typedef void (*php_http_request_dtor_func_t)(php_http_request_t *h);
99 typedef STATUS (*php_http_request_exec_func_t)(php_http_request_t *h, php_http_request_method_t meth, const char *url, php_http_message_body_t *body);
100 typedef STATUS (*php_http_request_reset_func_t)(php_http_request_t *h);
101 typedef STATUS (*php_http_request_setopt_func_t)(php_http_request_t *h, php_http_request_setopt_opt_t opt, void *arg);
102 typedef STATUS (*php_http_request_getopt_func_t)(php_http_request_t *h, php_http_request_getopt_opt_t opt, void *arg);
103
104 typedef struct php_http_request_ops {
105 php_http_request_init_func_t init;
106 php_http_request_copy_func_t copy;
107 php_http_request_dtor_func_t dtor;
108 php_http_request_reset_func_t reset;
109 php_http_request_exec_func_t exec;
110 php_http_request_setopt_func_t setopt;
111 php_http_request_getopt_func_t getopt;
112 } php_http_request_ops_t;
113
114 PHP_HTTP_API php_http_request_ops_t *php_http_request_get_default_ops(TSRMLS_D);
115
116 struct php_http_request {
117 void *ctx;
118 php_http_request_ops_t *ops;
119 php_http_message_parser_t *parser;
120 php_http_message_t *message;
121 php_http_buffer_t *buffer;
122 #ifdef ZTS
123 void ***ts;
124 #endif
125 };
126
127 PHP_HTTP_API php_http_request_t *php_http_request_init(php_http_request_t *h, php_http_request_ops_t *ops, void *init_arg TSRMLS_DC);
128 PHP_HTTP_API php_http_request_t *php_http_request_copy(php_http_request_t *from, php_http_request_t *to);
129 PHP_HTTP_API STATUS php_http_request_exec(php_http_request_t *h, php_http_request_method_t meth, const char *url, php_http_message_body_t *body);
130 PHP_HTTP_API STATUS php_http_request_reset(php_http_request_t *h);
131 PHP_HTTP_API STATUS php_http_request_setopt(php_http_request_t *h, php_http_request_setopt_opt_t opt, void *arg);
132 PHP_HTTP_API STATUS php_http_request_getopt(php_http_request_t *h, php_http_request_getopt_opt_t opt, void *arg);
133 PHP_HTTP_API void php_http_request_dtor(php_http_request_t *h);
134 PHP_HTTP_API void php_http_request_free(php_http_request_t **h);
135
136 typedef struct php_http_request_object {
137 zend_object zo;
138 php_http_request_t *request;
139 } php_http_request_object_t;
140
141 extern zend_class_entry *php_http_request_class_entry;
142 extern zend_function_entry php_http_request_method_entry[];
143
144 extern zend_object_value php_http_request_object_new(zend_class_entry *ce TSRMLS_DC);
145 extern zend_object_value php_http_request_object_new_ex(zend_class_entry *ce, php_http_request_t *r, php_http_request_object_t **ptr TSRMLS_DC);
146 extern zend_object_value php_http_request_object_clone(zval *zobject TSRMLS_DC);
147 extern void php_http_request_object_free(void *object TSRMLS_DC);
148
149 extern STATUS php_http_request_object_requesthandler(php_http_request_object_t *obj, zval *this_ptr, php_http_request_method_t *meth, char **url, php_http_message_body_t **body TSRMLS_DC);
150 extern STATUS php_http_request_object_responsehandler(php_http_request_object_t *obj, zval *this_ptr TSRMLS_DC);
151
152 PHP_METHOD(HttpRequest, __construct);
153 PHP_METHOD(HttpRequest, getObservers);
154 PHP_METHOD(HttpRequest, notify);
155 PHP_METHOD(HttpRequest, attach);
156 PHP_METHOD(HttpRequest, detach);
157 PHP_METHOD(HttpRequest, getProgress);
158 PHP_METHOD(HttpRequest, getTransferInfo);
159 PHP_METHOD(HttpRequest, setOptions);
160 PHP_METHOD(HttpRequest, getOptions);
161 PHP_METHOD(HttpRequest, addSslOptions);
162 PHP_METHOD(HttpRequest, setSslOptions);
163 PHP_METHOD(HttpRequest, getSslOptions);
164 PHP_METHOD(HttpRequest, addHeaders);
165 PHP_METHOD(HttpRequest, getHeaders);
166 PHP_METHOD(HttpRequest, setHeaders);
167 PHP_METHOD(HttpRequest, addCookies);
168 PHP_METHOD(HttpRequest, getCookies);
169 PHP_METHOD(HttpRequest, setCookies);
170 PHP_METHOD(HttpRequest, enableCookies);
171 PHP_METHOD(HttpRequest, resetCookies);
172 PHP_METHOD(HttpRequest, flushCookies);
173 PHP_METHOD(HttpRequest, setMethod);
174 PHP_METHOD(HttpRequest, getMethod);
175 PHP_METHOD(HttpRequest, setUrl);
176 PHP_METHOD(HttpRequest, getUrl);
177 PHP_METHOD(HttpRequest, setContentType);
178 PHP_METHOD(HttpRequest, getContentType);
179 PHP_METHOD(HttpRequest, setQueryData);
180 PHP_METHOD(HttpRequest, getQueryData);
181 PHP_METHOD(HttpRequest, addQueryData);
182 PHP_METHOD(HttpRequest, getBody);
183 PHP_METHOD(HttpRequest, setBody);
184 PHP_METHOD(HttpRequest, addBody);
185 PHP_METHOD(HttpRequest, send);
186 PHP_METHOD(HttpRequest, getResponseData);
187 PHP_METHOD(HttpRequest, getResponseHeader);
188 PHP_METHOD(HttpRequest, getResponseCookies);
189 PHP_METHOD(HttpRequest, getResponseCode);
190 PHP_METHOD(HttpRequest, getResponseStatus);
191 PHP_METHOD(HttpRequest, getResponseBody);
192 PHP_METHOD(HttpRequest, getResponseMessage);
193 PHP_METHOD(HttpRequest, getRawResponseMessage);
194 PHP_METHOD(HttpRequest, getRequestMessage);
195 PHP_METHOD(HttpRequest, getRawRequestMessage);
196 PHP_METHOD(HttpRequest, getHistory);
197 PHP_METHOD(HttpRequest, clearHistory);
198 PHP_METHOD(HttpRequest, getMessageClass);
199 PHP_METHOD(HttpRequest, setMessageClass);
200
201 extern PHP_MINIT_FUNCTION(http_request);
202
203 #endif
204
205 /*
206 * Local variables:
207 * tab-width: 4
208 * c-basic-offset: 4
209 * End:
210 * vim600: noet sw=4 ts=4 fdm=marker
211 * vim<600: noet sw=4 ts=4
212 */
213