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-2011, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
13 #ifndef PHP_HTTP_CLIENT_H
14 #define PHP_HTTP_CLIENT_H
16 #include "php_http_message_body.h"
17 #include "php_http_message_parser.h"
19 typedef struct php_http_client_progress_state
{
31 } php_http_client_progress_state_t
;
33 #define PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER 0
34 #define PHP_HTTP_CLIENT_PROGRESS_CALLBACK_INTERN 1
35 typedef struct php_http_client_progress_callback
{
38 void (*intern
)(php_http_client_progress_state_t
* TSRMLS_DC
);
41 } php_http_client_progress_callback_t
;
43 typedef struct php_http_client_progress
{
44 php_http_client_progress_state_t state
;
45 php_http_client_progress_callback_t
*callback
;
47 } php_http_client_progress_t
;
49 static inline void php_http_client_progress_dtor(php_http_client_progress_t
*progress TSRMLS_DC
)
51 if (progress
->callback
) {
52 if (progress
->callback
->type
== PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER
) {
53 zval_ptr_dtor(&progress
->callback
->func
.user
);
55 efree(progress
->callback
);
57 memset(progress
, 0, sizeof(*progress
));
60 static inline void php_http_client_progress_notify(php_http_client_progress_t
*progress TSRMLS_DC
)
62 if (progress
->callback
) {
68 with_error_handling(EH_NORMAL
, NULL
) {
69 switch (progress
->callback
->type
) {
70 case PHP_HTTP_CLIENT_PROGRESS_CALLBACK_USER
:
72 call_user_function(EG(function_table
), NULL
, progress
->callback
->func
.user
, &retval
, 0, NULL TSRMLS_CC
);
75 case PHP_HTTP_CLIENT_PROGRESS_CALLBACK_INTERN
:
76 progress
->callback
->func
.intern(&progress
->state TSRMLS_CC
);
81 } end_error_handling();
87 typedef enum php_http_client_setopt_opt
{
88 PHP_HTTP_CLIENT_OPT_SETTINGS
, /* HashTable* */
89 PHP_HTTP_CLIENT_OPT_PROGRESS_CALLBACK
, /* php_http_client_progress_callback_t* */
90 PHP_HTTP_CLIENT_OPT_COOKIES_ENABLE
, /* - */
91 PHP_HTTP_CLIENT_OPT_COOKIES_RESET
, /* - */
92 PHP_HTTP_CLIENT_OPT_COOKIES_RESET_SESSION
, /* - */
93 PHP_HTTP_CLIENT_OPT_COOKIES_FLUSH
, /* - */
94 } php_http_client_setopt_opt_t
;
96 typedef enum php_http_client_getopt_opt
{
97 PHP_HTTP_CLIENT_OPT_PROGRESS_INFO
, /* php_http_client_progress_t** */
98 PHP_HTTP_CLIENT_OPT_TRANSFER_INFO
, /* HashTable* */
99 } php_http_client_getopt_opt_t
;
101 typedef struct php_http_client
*(*php_http_client_init_func_t
)(struct php_http_client
*h
, void *arg
);
102 typedef struct php_http_client
*(*php_http_client_copy_func_t
)(struct php_http_client
*from
, struct php_http_client
*to
);
103 typedef void (*php_http_client_dtor_func_t
)(struct php_http_client
*h
);
104 typedef STATUS (*php_http_client_exec_func_t
)(struct php_http_client
*h
, php_http_message_t
*msg
);
105 typedef STATUS (*php_http_client_reset_func_t
)(struct php_http_client
*h
);
106 typedef STATUS (*php_http_client_setopt_func_t
)(struct php_http_client
*h
, php_http_client_setopt_opt_t opt
, void *arg
);
107 typedef STATUS (*php_http_client_getopt_func_t
)(struct php_http_client
*h
, php_http_client_getopt_opt_t opt
, void *arg
);
109 typedef struct php_http_client_ops
{
110 php_http_resource_factory_ops_t
*rsrc
;
111 php_http_client_init_func_t init
;
112 php_http_client_copy_func_t copy
;
113 php_http_client_dtor_func_t dtor
;
114 php_http_client_reset_func_t reset
;
115 php_http_client_exec_func_t exec
;
116 php_http_client_setopt_func_t setopt
;
117 php_http_client_getopt_func_t getopt
;
118 php_http_new_t create_object
;
119 zend_class_entry
*(*class_entry
)(void);
120 } php_http_client_ops_t
;
122 typedef struct php_http_client
{
124 php_http_resource_factory_t
*rf
;
125 php_http_client_ops_t
*ops
;
127 php_http_message_parser_t
*parser
;
128 php_http_message_t
*message
;
129 php_http_buffer_t
*buffer
;
132 php_http_message_parser_t
*parser
;
133 php_http_message_t
*message
;
134 php_http_buffer_t
*buffer
;
141 PHP_HTTP_API php_http_client_t
*php_http_client_init(php_http_client_t
*h
, php_http_client_ops_t
*ops
, php_http_resource_factory_t
*rf
, void *init_arg TSRMLS_DC
);
142 PHP_HTTP_API php_http_client_t
*php_http_client_copy(php_http_client_t
*from
, php_http_client_t
*to
);
143 PHP_HTTP_API STATUS
php_http_client_exec(php_http_client_t
*h
, php_http_message_t
*msg
);
144 PHP_HTTP_API STATUS
php_http_client_reset(php_http_client_t
*h
);
145 PHP_HTTP_API STATUS
php_http_client_setopt(php_http_client_t
*h
, php_http_client_setopt_opt_t opt
, void *arg
);
146 PHP_HTTP_API STATUS
php_http_client_getopt(php_http_client_t
*h
, php_http_client_getopt_opt_t opt
, void *arg
);
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
);
150 typedef struct php_http_client_object
{
152 php_http_client_t
*client
;
153 } php_http_client_object_t
;
155 zend_object_value
php_http_client_object_new(zend_class_entry
*ce TSRMLS_DC
);
156 zend_object_value
php_http_client_object_new_ex(zend_class_entry
*ce
, php_http_client_t
*r
, php_http_client_object_t
**ptr TSRMLS_DC
);
157 zend_object_value
php_http_client_object_clone(zval
*zobject TSRMLS_DC
);
158 void php_http_client_object_free(void *object TSRMLS_DC
);
160 zend_class_entry
*php_http_client_get_class_entry(void);
161 zend_object_handlers
*php_http_client_get_object_handlers(void);
163 STATUS
php_http_client_object_handle_request(zval
*zclient
, zval
**zreq TSRMLS_DC
);
164 STATUS
php_http_client_object_handle_response(zval
*zclient TSRMLS_DC
);
166 void php_http_client_options_set(zval
*this_ptr
, zval
*opts TSRMLS_DC
);
167 void php_http_client_options_set_subr(zval
*this_ptr
, char *key
, size_t len
, zval
*opts
, int overwrite TSRMLS_DC
);
168 void php_http_client_options_get_subr(zval
*this_ptr
, char *key
, size_t len
, zval
*return_value TSRMLS_DC
);
170 PHP_METHOD(HttpClient
, __construct
);
171 PHP_METHOD(HttpClient
, getObservers
);
172 PHP_METHOD(HttpClient
, notify
);
173 PHP_METHOD(HttpClient
, attach
);
174 PHP_METHOD(HttpClient
, detach
);
175 PHP_METHOD(HttpClient
, getProgress
);
176 PHP_METHOD(HttpClient
, getTransferInfo
);
177 PHP_METHOD(HttpClient
, setOptions
);
178 PHP_METHOD(HttpClient
, getOptions
);
179 PHP_METHOD(HttpClient
, addSslOptions
);
180 PHP_METHOD(HttpClient
, setSslOptions
);
181 PHP_METHOD(HttpClient
, getSslOptions
);
182 PHP_METHOD(HttpClient
, addCookies
);
183 PHP_METHOD(HttpClient
, getCookies
);
184 PHP_METHOD(HttpClient
, setCookies
);
185 PHP_METHOD(HttpClient
, enableCookies
);
186 PHP_METHOD(HttpClient
, resetCookies
);
187 PHP_METHOD(HttpClient
, flushCookies
);
188 PHP_METHOD(HttpClient
, setRequest
);
189 PHP_METHOD(HttpClient
, getRequest
);
190 PHP_METHOD(HttpClient
, send
);
191 PHP_METHOD(HttpClient
, request
);
192 PHP_METHOD(HttpClient
, getResponseMessage
);
193 PHP_METHOD(HttpClient
, getRequestMessage
);
194 PHP_METHOD(HttpClient
, getHistory
);
195 PHP_METHOD(HttpClient
, clearHistory
);
196 PHP_METHOD(HttpClient
, getResponseMessageClass
);
197 PHP_METHOD(HttpClient
, setResponseMessageClass
);
199 PHP_MINIT_FUNCTION(http_client
);
208 * vim600: noet sw=4 ts=4 fdm=marker
209 * vim<600: noet sw=4 ts=4