c9bbbde551d76f1e71977d78c7085a014f0941d0
[m6w6/ext-http] / http_request_object.c
1 /*
2
3 +----------------------------------------------------------------------+
4
5 | PECL :: http |
6
7 +----------------------------------------------------------------------+
8
9 | This source file is subject to version 3.0 of the PHP license, that |
10
11 | is bundled with this package in the file LICENSE, and is available |
12
13 | through the world-wide-web at http://www.php.net/license/3_0.txt. |
14
15 | If you did not receive a copy of the PHP license and are unable to |
16
17 | obtain it through the world-wide-web, please send a note to |
18
19 | license@php.net so we can mail you a copy immediately. |
20
21 +----------------------------------------------------------------------+
22
23 | Copyright (c) 2004-2005 Michael Wallner <mike@php.net> |
24
25 +----------------------------------------------------------------------+
26
27 */
28
29
30
31 /* $Id$ */
32
33
34
35
36
37 #ifdef HAVE_CONFIG_H
38
39 # include "config.h"
40
41 #endif
42
43
44
45 #ifdef HTTP_HAVE_CURL
46
47 # ifdef PHP_WIN32
48
49 # include <winsock2.h>
50
51 # endif
52
53 # include <curl/curl.h>
54
55 #endif
56
57
58
59 #include "php.h"
60
61
62
63 #include "php_http_std_defs.h"
64
65 #include "php_http_request_object.h"
66
67 #include "php_http_request_api.h"
68
69
70
71 #ifdef ZEND_ENGINE_2
72
73 #ifdef HTTP_HAVE_CURL
74
75
76
77 #define http_request_object_declare_default_properties() _http_request_object_declare_default_properties(TSRMLS_C)
78
79 static inline void _http_request_object_declare_default_properties(TSRMLS_D);
80
81
82
83 zend_class_entry *http_request_object_ce;
84
85 zend_function_entry http_request_object_fe[] = {
86
87 PHP_ME(HttpRequest, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
88
89 PHP_ME(HttpRequest, __destruct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_DTOR)
90
91
92
93 PHP_ME(HttpRequest, setOptions, NULL, ZEND_ACC_PUBLIC)
94
95 PHP_ME(HttpRequest, getOptions, NULL, ZEND_ACC_PUBLIC)
96
97 PHP_ME(HttpRequest, unsetOptions, NULL, ZEND_ACC_PUBLIC)
98
99 PHP_ME(HttpRequest, setSslOptions, NULL, ZEND_ACC_PUBLIC)
100
101 PHP_ME(HttpRequest, getSslOptions, NULL, ZEND_ACC_PUBLIC)
102
103 PHP_ME(HttpRequest, unsetSslOptions, NULL, ZEND_ACC_PUBLIC)
104
105
106
107 PHP_ME(HttpRequest, addHeaders, NULL, ZEND_ACC_PUBLIC)
108
109 PHP_ME(HttpRequest, getHeaders, NULL, ZEND_ACC_PUBLIC)
110
111 PHP_ME(HttpRequest, unsetHeaders, NULL, ZEND_ACC_PUBLIC)
112
113 PHP_ME(HttpRequest, addCookies, NULL, ZEND_ACC_PUBLIC)
114
115 PHP_ME(HttpRequest, getCookies, NULL, ZEND_ACC_PUBLIC)
116
117 PHP_ME(HttpRequest, unsetCookies, NULL, ZEND_ACC_PUBLIC)
118
119
120
121 PHP_ME(HttpRequest, setMethod, NULL, ZEND_ACC_PUBLIC)
122
123 PHP_ME(HttpRequest, getMethod, NULL, ZEND_ACC_PUBLIC)
124
125
126
127 PHP_ME(HttpRequest, setURL, NULL, ZEND_ACC_PUBLIC)
128
129 PHP_ME(HttpRequest, getURL, NULL, ZEND_ACC_PUBLIC)
130
131
132
133 PHP_ME(HttpRequest, setContentType, NULL, ZEND_ACC_PUBLIC)
134
135 PHP_ME(HttpRequest, getContentType, NULL, ZEND_ACC_PUBLIC)
136
137
138
139 PHP_ME(HttpRequest, setQueryData, NULL, ZEND_ACC_PUBLIC)
140
141 PHP_ME(HttpRequest, getQueryData, NULL, ZEND_ACC_PUBLIC)
142
143 PHP_ME(HttpRequest, addQueryData, NULL, ZEND_ACC_PUBLIC)
144
145 PHP_ME(HttpRequest, unsetQueryData, NULL, ZEND_ACC_PUBLIC)
146
147
148
149 PHP_ME(HttpRequest, setPostData, NULL, ZEND_ACC_PUBLIC)
150
151 PHP_ME(HttpRequest, getPostData, NULL, ZEND_ACC_PUBLIC)
152
153 PHP_ME(HttpRequest, addPostData, NULL, ZEND_ACC_PUBLIC)
154
155 PHP_ME(HttpRequest, unsetPostData, NULL, ZEND_ACC_PUBLIC)
156
157
158
159 PHP_ME(HttpRequest, addPostFile, NULL, ZEND_ACC_PUBLIC)
160
161 PHP_ME(HttpRequest, getPostFiles, NULL, ZEND_ACC_PUBLIC)
162
163 PHP_ME(HttpRequest, unsetPostFiles, NULL, ZEND_ACC_PUBLIC)
164
165
166
167 PHP_ME(HttpRequest, send, NULL, ZEND_ACC_PUBLIC)
168
169
170
171 PHP_ME(HttpRequest, getResponseData, NULL, ZEND_ACC_PUBLIC)
172
173 PHP_ME(HttpRequest, getResponseHeader, NULL, ZEND_ACC_PUBLIC)
174
175 PHP_ME(HttpRequest, getResponseCookie, NULL, ZEND_ACC_PUBLIC)
176
177 PHP_ME(HttpRequest, getResponseCode, NULL, ZEND_ACC_PUBLIC)
178
179 PHP_ME(HttpRequest, getResponseBody, NULL, ZEND_ACC_PUBLIC)
180
181 PHP_ME(HttpRequest, getResponseInfo, NULL, ZEND_ACC_PUBLIC)
182
183 PHP_ME(HttpRequest, getResponseMessage, NULL, ZEND_ACC_PUBLIC)
184
185
186
187 {NULL, NULL, NULL}
188
189 };
190
191 static zend_object_handlers http_request_object_handlers;
192
193
194
195 void _http_request_object_init(INIT_FUNC_ARGS)
196
197 {
198
199 HTTP_REGISTER_CLASS_EX(HttpRequest, http_request_object, NULL, 0);
200
201
202
203 /* HTTP/1.1 */
204
205 HTTP_LONG_CONSTANT("HTTP_GET", HTTP_GET);
206
207 HTTP_LONG_CONSTANT("HTTP_HEAD", HTTP_HEAD);
208
209 HTTP_LONG_CONSTANT("HTTP_POST", HTTP_POST);
210
211 HTTP_LONG_CONSTANT("HTTP_PUT", HTTP_PUT);
212
213 HTTP_LONG_CONSTANT("HTTP_DELETE", HTTP_DELETE);
214
215 HTTP_LONG_CONSTANT("HTTP_OPTIONS", HTTP_OPTIONS);
216
217 HTTP_LONG_CONSTANT("HTTP_TRACE", HTTP_TRACE);
218
219 HTTP_LONG_CONSTANT("HTTP_CONNECT", HTTP_CONNECT);
220
221 /* WebDAV - RFC 2518 */
222
223 HTTP_LONG_CONSTANT("HTTP_PROPFIND", HTTP_PROPFIND);
224
225 HTTP_LONG_CONSTANT("HTTP_PROPPATCH", HTTP_PROPPATCH);
226
227 HTTP_LONG_CONSTANT("HTTP_MKCOL", HTTP_MKCOL);
228
229 HTTP_LONG_CONSTANT("HTTP_COPY", HTTP_COPY);
230
231 HTTP_LONG_CONSTANT("HTTP_MOVE", HTTP_MOVE);
232
233 HTTP_LONG_CONSTANT("HTTP_LOCK", HTTP_LOCK);
234
235 HTTP_LONG_CONSTANT("HTTP_UNLOCK", HTTP_UNLOCK);
236
237 /* WebDAV Versioning - RFC 3253 */
238
239 HTTP_LONG_CONSTANT("HTTP_VERSION_CONTROL", HTTP_VERSION_CONTROL);
240
241 HTTP_LONG_CONSTANT("HTTP_REPORT", HTTP_REPORT);
242
243 HTTP_LONG_CONSTANT("HTTP_CHECKOUT", HTTP_CHECKOUT);
244
245 HTTP_LONG_CONSTANT("HTTP_CHECKIN", HTTP_CHECKIN);
246
247 HTTP_LONG_CONSTANT("HTTP_UNCHECKOUT", HTTP_UNCHECKOUT);
248
249 HTTP_LONG_CONSTANT("HTTP_MKWORKSPACE", HTTP_MKWORKSPACE);
250
251 HTTP_LONG_CONSTANT("HTTP_UPDATE", HTTP_UPDATE);
252
253 HTTP_LONG_CONSTANT("HTTP_LABEL", HTTP_LABEL);
254
255 HTTP_LONG_CONSTANT("HTTP_MERGE", HTTP_MERGE);
256
257 HTTP_LONG_CONSTANT("HTTP_BASELINE_CONTROL", HTTP_BASELINE_CONTROL);
258
259 HTTP_LONG_CONSTANT("HTTP_MKACTIVITY", HTTP_MKACTIVITY);
260
261 /* WebDAV Access Control - RFC 3744 */
262
263 HTTP_LONG_CONSTANT("HTTP_ACL", HTTP_ACL);
264
265
266
267
268
269 # if LIBCURL_VERSION_NUM >= 0x070a05
270
271 HTTP_LONG_CONSTANT("HTTP_AUTH_BASIC", CURLAUTH_BASIC);
272
273 HTTP_LONG_CONSTANT("HTTP_AUTH_DIGEST", CURLAUTH_DIGEST);
274
275 HTTP_LONG_CONSTANT("HTTP_AUTH_NTLM", CURLAUTH_NTLM);
276
277 # endif /* LIBCURL_VERSION_NUM */
278
279 }
280
281
282
283 zend_object_value _http_request_object_new(zend_class_entry *ce TSRMLS_DC)
284
285 {
286
287 zend_object_value ov;
288
289 http_request_object *o;
290
291
292
293 o = ecalloc(1, sizeof(http_request_object));
294
295 o->zo.ce = ce;
296
297 o->ch = curl_easy_init();
298
299
300
301 phpstr_init_ex(&o->response, HTTP_CURLBUF_SIZE, 0);
302
303
304
305 ALLOC_HASHTABLE(OBJ_PROP(o));
306
307 zend_hash_init(OBJ_PROP(o), 0, NULL, ZVAL_PTR_DTOR, 0);
308
309 zend_hash_copy(OBJ_PROP(o), &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
310
311
312
313 ov.handle = zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, http_request_object_free, NULL TSRMLS_CC);
314
315 ov.handlers = &http_request_object_handlers;
316
317
318
319 return ov;
320
321 }
322
323
324
325 static inline void _http_request_object_declare_default_properties(TSRMLS_D)
326
327 {
328
329 zend_class_entry *ce = http_request_object_ce;
330
331
332
333 DCL_PROP_N(PROTECTED, options);
334
335 DCL_PROP_N(PROTECTED, responseInfo);
336
337 DCL_PROP_N(PROTECTED, responseData);
338
339 DCL_PROP_N(PROTECTED, responseCode);
340
341 DCL_PROP_N(PROTECTED, responseMessage);
342
343 DCL_PROP_N(PROTECTED, postData);
344
345 DCL_PROP_N(PROTECTED, postFiles);
346
347
348
349 DCL_PROP(PROTECTED, long, method, HTTP_GET);
350
351
352
353 DCL_PROP(PROTECTED, string, url, "");
354
355 DCL_PROP(PROTECTED, string, contentType, "");
356
357 DCL_PROP(PROTECTED, string, queryData, "");
358
359 DCL_PROP(PROTECTED, string, postData, "");
360
361 }
362
363
364
365 void _http_request_object_free(zend_object *object TSRMLS_DC)
366
367 {
368
369 http_request_object *o = (http_request_object *) object;
370
371
372
373 if (OBJ_PROP(o)) {
374
375 zend_hash_destroy(OBJ_PROP(o));
376
377 FREE_HASHTABLE(OBJ_PROP(o));
378
379 }
380
381 if (o->ch) {
382
383 curl_easy_cleanup(o->ch);
384
385 }
386
387 phpstr_dtor(&o->response);
388
389 efree(o);
390
391 }
392
393
394
395 #endif /* HTTP_HAVE_CURL */
396
397 #endif /* ZEND_ENGINE_2 */
398
399
400
401 /*
402
403 * Local variables:
404
405 * tab-width: 4
406
407 * c-basic-offset: 4
408
409 * End:
410
411 * vim600: noet sw=4 ts=4 fdm=marker
412
413 * vim<600: noet sw=4 ts=4
414
415 */
416
417
418