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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
13 #ifndef PHP_HTTP_CLIENT_H
14 #define PHP_HTTP_CLIENT_H
16 typedef enum php_http_client_setopt_opt
{
17 PHP_HTTP_CLIENT_OPT_ENABLE_PIPELINING
,
18 PHP_HTTP_CLIENT_OPT_USE_EVENTS
,
19 PHP_HTTP_CLIENT_OPT_CONFIGURATION
,
20 } php_http_client_setopt_opt_t
;
22 typedef enum php_http_client_getopt_opt
{
23 PHP_HTTP_CLIENT_OPT_PROGRESS_INFO
, /* php_http_client_enqueue_t*, php_http_client_progress_state_t** */
24 PHP_HTTP_CLIENT_OPT_TRANSFER_INFO
, /* php_http_client_enqueue_t*, HashTable* */
25 PHP_HTTP_CLIENT_OPT_AVAILABLE_OPTIONS
, /* NULL, HashTable* */
26 PHP_HTTP_CLIENT_OPT_AVAILABLE_CONFIGURATION
,/* NULL, HashTable */
27 } php_http_client_getopt_opt_t
;
29 typedef struct php_http_client_enqueue
{
30 php_http_message_t
*request
; /* unique */
32 void (*dtor
)(struct php_http_client_enqueue
*);
36 zend_fcall_info_cache fcc
;
38 php_http_message_object_t
*request_obj
; /* supplemental to request */
39 } php_http_client_enqueue_t
;
41 typedef struct php_http_client
*(*php_http_client_init_func_t
)(struct php_http_client
*p
, void *init_arg
);
42 typedef struct php_http_client
*(*php_http_client_copy_func_t
)(struct php_http_client
*from
, struct php_http_client
*to
);
43 typedef void (*php_http_client_dtor_func_t
)(struct php_http_client
*p
);
44 typedef void (*php_http_client_reset_func_t
)(struct php_http_client
*p
);
45 typedef ZEND_RESULT_CODE (*php_http_client_exec_func_t
)(struct php_http_client
*p
);
46 typedef int (*php_http_client_once_func_t
)(struct php_http_client
*p
);
47 typedef ZEND_RESULT_CODE (*php_http_client_wait_func_t
)(struct php_http_client
*p
, struct timeval
*custom_timeout
);
48 typedef ZEND_RESULT_CODE (*php_http_client_enqueue_func_t
)(struct php_http_client
*p
, php_http_client_enqueue_t
*enqueue
);
49 typedef ZEND_RESULT_CODE (*php_http_client_dequeue_func_t
)(struct php_http_client
*p
, php_http_client_enqueue_t
*enqueue
);
50 typedef ZEND_RESULT_CODE (*php_http_client_requeue_func_t
)(struct php_http_client
*p
, php_http_client_enqueue_t
*enqueue
);
51 typedef ZEND_RESULT_CODE (*php_http_client_setopt_func_t
)(struct php_http_client
*p
, php_http_client_setopt_opt_t opt
, void *arg
);
52 typedef ZEND_RESULT_CODE (*php_http_client_getopt_func_t
)(struct php_http_client
*h
, php_http_client_getopt_opt_t opt
, void *arg
, void **res
);
54 typedef struct php_http_client_ops
{
55 php_resource_factory_ops_t
*rsrc
;
56 php_http_client_init_func_t init
;
57 php_http_client_copy_func_t copy
;
58 php_http_client_dtor_func_t dtor
;
59 php_http_client_reset_func_t reset
;
60 php_http_client_exec_func_t exec
;
61 php_http_client_wait_func_t wait
;
62 php_http_client_once_func_t once
;
63 php_http_client_enqueue_func_t enqueue
;
64 php_http_client_dequeue_func_t dequeue
;
65 php_http_client_requeue_func_t requeue
;
66 php_http_client_setopt_func_t setopt
;
67 php_http_client_getopt_func_t getopt
;
68 } php_http_client_ops_t
;
70 typedef struct php_http_client_driver
{
71 zend_string
*driver_name
;
72 zend_string
*client_name
;
73 zend_string
*request_name
;
74 php_http_client_ops_t
*client_ops
;
75 } php_http_client_driver_t
;
77 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_driver_add(php_http_client_driver_t
*driver
);
78 PHP_HTTP_API php_http_client_driver_t
*php_http_client_driver_get(zend_string
*name
);
80 typedef struct php_http_client_progress_state
{
92 } php_http_client_progress_state_t
;
94 typedef ZEND_RESULT_CODE (*php_http_client_response_callback_t
)(void *arg
, struct php_http_client
*client
, php_http_client_enqueue_t
*e
, php_http_message_t
**response
);
95 typedef void (*php_http_client_progress_callback_t
)(void *arg
, struct php_http_client
*client
, php_http_client_enqueue_t
*e
, php_http_client_progress_state_t
*state
);
96 typedef void (*php_http_client_debug_callback_t
)(void *arg
, struct php_http_client
*client
, php_http_client_enqueue_t
*e
, unsigned type
, const char *data
, size_t size
);
98 #define PHP_HTTP_CLIENT_DEBUG_INFO 0x00
99 #define PHP_HTTP_CLIENT_DEBUG_IN 0x01
100 #define PHP_HTTP_CLIENT_DEBUG_OUT 0x02
101 #define PHP_HTTP_CLIENT_DEBUG_HEADER 0x10
102 #define PHP_HTTP_CLIENT_DEBUG_BODY 0x20
103 #define PHP_HTTP_CLIENT_DEBUG_SSL 0x40
105 typedef struct php_http_client
{
107 php_resource_factory_t
*rf
;
108 php_http_client_ops_t
*ops
;
112 php_http_client_response_callback_t func
;
116 php_http_client_progress_callback_t func
;
120 php_http_client_debug_callback_t func
;
127 zend_llist responses
;
130 PHP_HTTP_API zend_class_entry
*php_http_client_get_class_entry();
132 typedef struct php_http_client_object
{
133 php_http_client_t
*client
;
134 php_http_object_method_t
*update
;
135 php_http_object_method_t notify
;
138 zend_fcall_info_cache fcc
;
143 } php_http_client_object_t
;
145 PHP_HTTP_API php_http_client_t
*php_http_client_init(php_http_client_t
*h
, php_http_client_ops_t
*ops
, php_resource_factory_t
*rf
, void *init_arg
);
146 PHP_HTTP_API php_http_client_t
*php_http_client_copy(php_http_client_t
*from
, php_http_client_t
*to
);
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 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_enqueue(php_http_client_t
*h
, php_http_client_enqueue_t
*enqueue
);
151 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_dequeue(php_http_client_t
*h
, php_http_message_t
*request
);
153 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_wait(php_http_client_t
*h
, struct timeval
*custom_timeout
);
154 PHP_HTTP_API
int php_http_client_once(php_http_client_t
*h
);
156 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_exec(php_http_client_t
*h
);
157 PHP_HTTP_API
void php_http_client_reset(php_http_client_t
*h
);
159 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_setopt(php_http_client_t
*h
, php_http_client_setopt_opt_t opt
, void *arg
);
160 PHP_HTTP_API ZEND_RESULT_CODE
php_http_client_getopt(php_http_client_t
*h
, php_http_client_getopt_opt_t opt
, void *arg
, void *res_ptr
);
162 typedef int (*php_http_client_enqueue_cmp_func_t
)(php_http_client_enqueue_t
*cmp
, void *arg
);
163 /* compare with request message pointer if compare_func is NULL */
164 PHP_HTTP_API php_http_client_enqueue_t
*php_http_client_enqueued(php_http_client_t
*h
, void *compare_arg
, php_http_client_enqueue_cmp_func_t compare_func
);
166 PHP_MINIT_FUNCTION(http_client
);
167 PHP_MSHUTDOWN_FUNCTION(http_client
);
176 * vim600: noet sw=4 ts=4 fdm=marker
177 * vim<600: noet sw=4 ts=4