2 +--------------------------------------------------------------------+
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 +--------------------------------------------------------------------+
13 /* $Id: php_http_request_api.h 292841 2009-12-31 08:48:57Z mike $ */
15 #ifndef PHP_HTTP_REQUEST_H
16 #define PHP_HTTP_REQUEST_H
18 #include "php_http_message_body.h"
19 #include "php_http_message_parser.h"
20 #include "php_http_request_method.h"
22 typedef struct php_http_request_progress_state
{
34 } php_http_request_progress_state_t
;
36 #define PHP_HTTP_REQUEST_PROGRESS_CALLBACK_USER 0
37 #define PHP_HTTP_REQUEST_PROGRESS_CALLBACK_INTERN 1
38 typedef struct php_http_request_progress_callback
{
41 void (*intern
)(php_http_request_progress_state_t
* TSRMLS_DC
);
44 unsigned pass_state
:1;
45 } php_http_request_progress_callback_t
;
47 typedef struct php_http_request_progress
{
48 php_http_request_progress_state_t state
;
49 php_http_request_progress_callback_t
*callback
;
51 } php_http_request_progress_t
;
53 static inline void php_http_request_progress_dtor(php_http_request_progress_t
*progress TSRMLS_DC
)
55 if (progress
->callback
) {
56 if (progress
->callback
->type
== PHP_HTTP_REQUEST_PROGRESS_CALLBACK_USER
) {
57 zval_ptr_dtor(&progress
->callback
->func
.user
);
59 efree(progress
->callback
);
61 memset(progress
, 0, sizeof(*progress
));
64 static inline void php_http_request_progress_notify(php_http_request_progress_t
*progress TSRMLS_DC
)
66 if (progress
->callback
) {
72 with_error_handling(EH_NORMAL
, NULL
) {
73 switch (progress
->callback
->type
) {
74 case PHP_HTTP_REQUEST_PROGRESS_CALLBACK_USER
:
75 if (progress
->callback
->pass_state
) {
80 add_assoc_bool(param
, "started", progress
->state
.started
);
81 add_assoc_bool(param
, "finished", progress
->state
.finished
);
82 add_assoc_string(param
, "info", estrdup(progress
->state
.info
), 0);
83 add_assoc_double(param
, "dltotal", progress
->state
.dl
.total
);
84 add_assoc_double(param
, "dlnow", progress
->state
.dl
.now
);
85 add_assoc_double(param
, "ultotal", progress
->state
.ul
.total
);
86 add_assoc_double(param
, "ulnow", progress
->state
.ul
.now
);
89 call_user_function(EG(function_table
), NULL
, progress
->callback
->func
.user
, &retval
, 1, ¶m TSRMLS_CC
);
92 zval_ptr_dtor(¶m
);
95 call_user_function(EG(function_table
), NULL
, progress
->callback
->func
.user
, &retval
, 0, NULL TSRMLS_CC
);
99 case PHP_HTTP_REQUEST_PROGRESS_CALLBACK_INTERN
:
100 progress
->callback
->func
.intern(progress
->callback
->pass_state
? &progress
->state
: NULL TSRMLS_CC
);
105 } end_error_handling();
111 typedef enum php_http_request_setopt_opt
{
112 PHP_HTTP_REQUEST_OPT_SETTINGS
, /* HashTable* */
113 PHP_HTTP_REQUEST_OPT_PROGRESS_CALLBACK
, /* php_http_request_progress_callback_t* */
114 PHP_HTTP_REQUEST_OPT_COOKIES_ENABLE
, /* - */
115 PHP_HTTP_REQUEST_OPT_COOKIES_RESET
, /* - */
116 PHP_HTTP_REQUEST_OPT_COOKIES_RESET_SESSION
, /* - */
117 PHP_HTTP_REQUEST_OPT_COOKIES_FLUSH
, /* - */
118 } php_http_request_setopt_opt_t
;
120 typedef enum php_http_request_getopt_opt
{
121 PHP_HTTP_REQUEST_OPT_PROGRESS_INFO
, /* php_http_request_progress_t** */
122 PHP_HTTP_REQUEST_OPT_TRANSFER_INFO
, /* HashTable* */
123 } php_http_request_getopt_opt_t
;
125 typedef struct php_http_request php_http_request_t
;
127 typedef php_http_request_t
*(*php_http_request_init_func_t
)(php_http_request_t
*h
, void *arg
);
128 typedef php_http_request_t
*(*php_http_request_copy_func_t
)(php_http_request_t
*from
, php_http_request_t
*to
);
129 typedef void (*php_http_request_dtor_func_t
)(php_http_request_t
*h
);
130 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
);
131 typedef STATUS (*php_http_request_reset_func_t
)(php_http_request_t
*h
);
132 typedef STATUS (*php_http_request_setopt_func_t
)(php_http_request_t
*h
, php_http_request_setopt_opt_t opt
, void *arg
);
133 typedef STATUS (*php_http_request_getopt_func_t
)(php_http_request_t
*h
, php_http_request_getopt_opt_t opt
, void *arg
);
135 typedef struct php_http_request_ops
{
136 php_http_resource_factory_ops_t
*rsrc
;
137 php_http_request_init_func_t init
;
138 php_http_request_copy_func_t copy
;
139 php_http_request_dtor_func_t dtor
;
140 php_http_request_reset_func_t reset
;
141 php_http_request_exec_func_t exec
;
142 php_http_request_setopt_func_t setopt
;
143 php_http_request_getopt_func_t getopt
;
144 } php_http_request_ops_t
;
146 PHP_HTTP_API php_http_request_ops_t
*php_http_request_get_default_ops(TSRMLS_D
);
148 struct php_http_request
{
150 php_http_resource_factory_t
*rf
;
151 php_http_request_ops_t
*ops
;
152 php_http_message_parser_t
*parser
;
153 php_http_message_t
*message
;
154 php_http_buffer_t
*buffer
;
155 zval
*persistent_handle_id
;
161 PHP_HTTP_API php_http_request_t
*php_http_request_init(php_http_request_t
*h
, php_http_request_ops_t
*ops
, php_http_resource_factory_t
*rf
, void *init_arg TSRMLS_DC
);
162 PHP_HTTP_API php_http_request_t
*php_http_request_copy(php_http_request_t
*from
, php_http_request_t
*to
);
163 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
);
164 PHP_HTTP_API STATUS
php_http_request_reset(php_http_request_t
*h
);
165 PHP_HTTP_API STATUS
php_http_request_setopt(php_http_request_t
*h
, php_http_request_setopt_opt_t opt
, void *arg
);
166 PHP_HTTP_API STATUS
php_http_request_getopt(php_http_request_t
*h
, php_http_request_getopt_opt_t opt
, void *arg
);
167 PHP_HTTP_API
void php_http_request_dtor(php_http_request_t
*h
);
168 PHP_HTTP_API
void php_http_request_free(php_http_request_t
**h
);
170 typedef struct php_http_request_object
{
172 php_http_request_t
*request
;
173 } php_http_request_object_t
;
175 extern zend_class_entry
*php_http_request_class_entry
;
176 extern zend_function_entry php_http_request_method_entry
[];
178 extern zend_object_value
php_http_request_object_new(zend_class_entry
*ce TSRMLS_DC
);
179 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
);
180 extern zend_object_value
php_http_request_object_clone(zval
*zobject TSRMLS_DC
);
181 extern void php_http_request_object_free(void *object TSRMLS_DC
);
183 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
);
184 extern STATUS
php_http_request_object_responsehandler(php_http_request_object_t
*obj
, zval
*this_ptr TSRMLS_DC
);
186 PHP_METHOD(HttpRequest
, __construct
);
187 PHP_METHOD(HttpRequest
, getObservers
);
188 PHP_METHOD(HttpRequest
, notify
);
189 PHP_METHOD(HttpRequest
, attach
);
190 PHP_METHOD(HttpRequest
, detach
);
191 PHP_METHOD(HttpRequest
, getProgress
);
192 PHP_METHOD(HttpRequest
, getTransferInfo
);
193 PHP_METHOD(HttpRequest
, setOptions
);
194 PHP_METHOD(HttpRequest
, getOptions
);
195 PHP_METHOD(HttpRequest
, addSslOptions
);
196 PHP_METHOD(HttpRequest
, setSslOptions
);
197 PHP_METHOD(HttpRequest
, getSslOptions
);
198 PHP_METHOD(HttpRequest
, addHeaders
);
199 PHP_METHOD(HttpRequest
, getHeaders
);
200 PHP_METHOD(HttpRequest
, setHeaders
);
201 PHP_METHOD(HttpRequest
, addCookies
);
202 PHP_METHOD(HttpRequest
, getCookies
);
203 PHP_METHOD(HttpRequest
, setCookies
);
204 PHP_METHOD(HttpRequest
, enableCookies
);
205 PHP_METHOD(HttpRequest
, resetCookies
);
206 PHP_METHOD(HttpRequest
, flushCookies
);
207 PHP_METHOD(HttpRequest
, setMethod
);
208 PHP_METHOD(HttpRequest
, getMethod
);
209 PHP_METHOD(HttpRequest
, setUrl
);
210 PHP_METHOD(HttpRequest
, getUrl
);
211 PHP_METHOD(HttpRequest
, setContentType
);
212 PHP_METHOD(HttpRequest
, getContentType
);
213 PHP_METHOD(HttpRequest
, setQueryData
);
214 PHP_METHOD(HttpRequest
, getQueryData
);
215 PHP_METHOD(HttpRequest
, addQueryData
);
216 PHP_METHOD(HttpRequest
, getBody
);
217 PHP_METHOD(HttpRequest
, setBody
);
218 PHP_METHOD(HttpRequest
, addBody
);
219 PHP_METHOD(HttpRequest
, send
);
220 PHP_METHOD(HttpRequest
, getResponseData
);
221 PHP_METHOD(HttpRequest
, getResponseHeader
);
222 PHP_METHOD(HttpRequest
, getResponseCookies
);
223 PHP_METHOD(HttpRequest
, getResponseCode
);
224 PHP_METHOD(HttpRequest
, getResponseStatus
);
225 PHP_METHOD(HttpRequest
, getResponseBody
);
226 PHP_METHOD(HttpRequest
, getResponseMessage
);
227 PHP_METHOD(HttpRequest
, getRawResponseMessage
);
228 PHP_METHOD(HttpRequest
, getRequestMessage
);
229 PHP_METHOD(HttpRequest
, getRawRequestMessage
);
230 PHP_METHOD(HttpRequest
, getHistory
);
231 PHP_METHOD(HttpRequest
, clearHistory
);
232 PHP_METHOD(HttpRequest
, getMessageClass
);
233 PHP_METHOD(HttpRequest
, setMessageClass
);
235 extern PHP_MINIT_FUNCTION(http_request
);
244 * vim600: noet sw=4 ts=4 fdm=marker
245 * vim<600: noet sw=4 ts=4