ensure the merged header IS_STRING
[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_request_method.h"
19 #include "php_http_request_pool.h"
20
21 extern PHP_MINIT_FUNCTION(http_request);
22 extern PHP_MSHUTDOWN_FUNCTION(http_request);
23
24 typedef struct php_http_request_progress_state_counter {
25 double now;
26 double total;
27 } php_http_request_progress_state_counter_t;
28
29 typedef struct php_http_request_progress_state {
30 php_http_request_progress_state_counter_t ul;
31 php_http_request_progress_state_counter_t dl;
32 } php_http_request_progress_state_t;
33
34 typedef struct php_http_request {
35 CURL *ch;
36 char *url;
37 php_http_request_method_t meth;
38 php_http_message_body_t *body;
39 struct {
40 php_http_message_parser_t *ctx;
41 php_http_message_t *msg;
42 php_http_buffer_t *buf;
43 } parser;
44
45 struct {
46 php_http_buffer_t cookies;
47 HashTable options;
48 struct curl_slist *headers;
49 } _cache;
50
51 struct {
52 uint count;
53 double delay;
54 } _retry;
55
56 struct {
57 struct {
58 struct {
59 double now;
60 double total;
61 } ul;
62 struct {
63 double now;
64 double total;
65 } dl;
66 } state;
67 zval *callback;
68 unsigned in_cb:1;
69 } _progress;
70
71 #ifdef ZTS
72 void ***ts;
73 #endif
74
75 } php_http_request_t;
76
77 /* CURLOPT_PRIVATE storage living as long as a CURL handle */
78 typedef struct php_http_request_storage {
79 char *url;
80 char *cookiestore;
81 char errorbuffer[CURL_ERROR_SIZE];
82 } php_http_request_storage_t;
83
84
85 static inline php_http_request_storage_t *php_http_request_storage_get(CURL *ch)
86 {
87 php_http_request_storage_t *st = NULL;
88 curl_easy_getinfo(ch, CURLINFO_PRIVATE, &st);
89 return st;
90 }
91
92 PHP_HTTP_API CURL *php_http_curl_init(CURL *ch, php_http_request_t *request TSRMLS_DC);
93 PHP_HTTP_API void php_http_curl_free(CURL **ch TSRMLS_DC);
94 PHP_HTTP_API CURL *php_http_curl_copy(CURL *ch TSRMLS_DC);
95
96 #define PHP_HTTP_CHECK_CURL_INIT(ch, init, action) \
97 if ((!(ch)) && (!((ch) = init))) { \
98 php_http_error(HE_WARNING, PHP_HTTP_E_REQUEST, "Could not initialize curl"); \
99 action; \
100 }
101
102
103 PHP_HTTP_API php_http_request_t *php_http_request_init(php_http_request_t *request, CURL *ch, php_http_request_method_t meth, const char *url TSRMLS_DC);
104 PHP_HTTP_API void php_http_request_dtor(php_http_request_t *request);
105 PHP_HTTP_API void php_http_request_free(php_http_request_t **request);
106 PHP_HTTP_API void php_http_request_reset(php_http_request_t *r);
107 PHP_HTTP_API STATUS php_http_request_enable_cookies(php_http_request_t *request);
108 PHP_HTTP_API STATUS php_http_request_reset_cookies(php_http_request_t *request, int session_only);
109 PHP_HTTP_API STATUS php_http_request_flush_cookies(php_http_request_t *request);
110 PHP_HTTP_API void php_http_request_defaults(php_http_request_t *request);
111 PHP_HTTP_API STATUS php_http_request_prepare(php_http_request_t *request, HashTable *options);
112 PHP_HTTP_API void php_http_request_exec(php_http_request_t *request);
113 PHP_HTTP_API void php_http_request_info(php_http_request_t *request, HashTable *info);
114 PHP_HTTP_API void php_http_request_set_progress_callback(php_http_request_t *request, zval *cb);
115
116
117 typedef struct php_http_request_object {
118 zend_object zo;
119 php_http_request_t *request;
120 php_http_request_pool_t *pool;
121 php_http_request_datashare_t *share;
122 } php_http_request_object_t;
123
124 extern zend_class_entry *php_http_request_class_entry;
125 extern zend_function_entry php_http_request_method_entry[];
126
127 extern zend_object_value php_http_request_object_new(zend_class_entry *ce TSRMLS_DC);
128 extern zend_object_value php_http_request_object_new_ex(zend_class_entry *ce, CURL *ch, php_http_request_object_t **ptr TSRMLS_DC);
129 extern zend_object_value php_http_request_object_clone(zval *zobject TSRMLS_DC);
130 extern void php_http_request_object_free(void *object TSRMLS_DC);
131
132 extern STATUS php_http_request_object_requesthandler(php_http_request_object_t *obj, zval *this_ptr TSRMLS_DC);
133 extern STATUS php_http_request_object_responsehandler(php_http_request_object_t *obj, zval *this_ptr TSRMLS_DC);
134
135 PHP_METHOD(HttpRequest, __construct);
136 PHP_METHOD(HttpRequest, setOptions);
137 PHP_METHOD(HttpRequest, getOptions);
138 PHP_METHOD(HttpRequest, addSslOptions);
139 PHP_METHOD(HttpRequest, setSslOptions);
140 PHP_METHOD(HttpRequest, getSslOptions);
141 PHP_METHOD(HttpRequest, addHeaders);
142 PHP_METHOD(HttpRequest, getHeaders);
143 PHP_METHOD(HttpRequest, setHeaders);
144 PHP_METHOD(HttpRequest, addCookies);
145 PHP_METHOD(HttpRequest, getCookies);
146 PHP_METHOD(HttpRequest, setCookies);
147 PHP_METHOD(HttpRequest, enableCookies);
148 PHP_METHOD(HttpRequest, resetCookies);
149 PHP_METHOD(HttpRequest, flushCookies);
150 PHP_METHOD(HttpRequest, setMethod);
151 PHP_METHOD(HttpRequest, getMethod);
152 PHP_METHOD(HttpRequest, setUrl);
153 PHP_METHOD(HttpRequest, getUrl);
154 PHP_METHOD(HttpRequest, setContentType);
155 PHP_METHOD(HttpRequest, getContentType);
156 PHP_METHOD(HttpRequest, setQueryData);
157 PHP_METHOD(HttpRequest, getQueryData);
158 PHP_METHOD(HttpRequest, addQueryData);
159 PHP_METHOD(HttpRequest, getBody);
160 PHP_METHOD(HttpRequest, setBody);
161 PHP_METHOD(HttpRequest, addBody);
162 PHP_METHOD(HttpRequest, send);
163 PHP_METHOD(HttpRequest, getResponseData);
164 PHP_METHOD(HttpRequest, getResponseHeader);
165 PHP_METHOD(HttpRequest, getResponseCookies);
166 PHP_METHOD(HttpRequest, getResponseCode);
167 PHP_METHOD(HttpRequest, getResponseStatus);
168 PHP_METHOD(HttpRequest, getResponseBody);
169 PHP_METHOD(HttpRequest, getResponseInfo);
170 PHP_METHOD(HttpRequest, getResponseMessage);
171 PHP_METHOD(HttpRequest, getRawResponseMessage);
172 PHP_METHOD(HttpRequest, getRequestMessage);
173 PHP_METHOD(HttpRequest, getRawRequestMessage);
174 PHP_METHOD(HttpRequest, getHistory);
175 PHP_METHOD(HttpRequest, clearHistory);
176 PHP_METHOD(HttpRequest, getMessageClass);
177 PHP_METHOD(HttpRequest, setMessageClass);
178
179 #endif
180
181 /*
182 * Local variables:
183 * tab-width: 4
184 * c-basic-offset: 4
185 * End:
186 * vim600: noet sw=4 ts=4 fdm=marker
187 * vim<600: noet sw=4 ts=4
188 */
189