Merge branch 'master' into phpng
[m6w6/ext-http] / php_http_client.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-2014, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #ifndef PHP_HTTP_CLIENT_H
14 #define PHP_HTTP_CLIENT_H
15
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_setopt_opt_t;
20
21 typedef enum php_http_client_getopt_opt {
22 PHP_HTTP_CLIENT_OPT_PROGRESS_INFO, /* php_http_client_progress_state_t** */
23 PHP_HTTP_CLIENT_OPT_TRANSFER_INFO, /* HashTable* */
24 } php_http_client_getopt_opt_t;
25
26 typedef struct php_http_client_enqueue {
27 php_http_message_t *request; /* unique */
28 HashTable *options;
29 void (*dtor)(struct php_http_client_enqueue *);
30 void *opaque;
31 struct {
32 zend_fcall_info fci;
33 zend_fcall_info_cache fcc;
34 } closure;
35 } php_http_client_enqueue_t;
36
37 typedef struct php_http_client *(*php_http_client_init_func_t)(struct php_http_client *p, void *init_arg);
38 typedef struct php_http_client *(*php_http_client_copy_func_t)(struct php_http_client *from, struct php_http_client *to);
39 typedef void (*php_http_client_dtor_func_t)(struct php_http_client *p);
40 typedef void (*php_http_client_reset_func_t)(struct php_http_client *p);
41 typedef ZEND_RESULT_CODE (*php_http_client_exec_func_t)(struct php_http_client *p);
42 typedef int (*php_http_client_once_func_t)(struct php_http_client *p);
43 typedef ZEND_RESULT_CODE (*php_http_client_wait_func_t)(struct php_http_client *p, struct timeval *custom_timeout);
44 typedef ZEND_RESULT_CODE (*php_http_client_enqueue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
45 typedef ZEND_RESULT_CODE (*php_http_client_dequeue_func_t)(struct php_http_client *p, php_http_client_enqueue_t *enqueue);
46 typedef ZEND_RESULT_CODE (*php_http_client_setopt_func_t)(struct php_http_client *p, php_http_client_setopt_opt_t opt, void *arg);
47 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);
48
49 typedef struct php_http_client_ops {
50 php_resource_factory_ops_t *rsrc;
51 php_http_client_init_func_t init;
52 php_http_client_copy_func_t copy;
53 php_http_client_dtor_func_t dtor;
54 php_http_client_reset_func_t reset;
55 php_http_client_exec_func_t exec;
56 php_http_client_wait_func_t wait;
57 php_http_client_once_func_t once;
58 php_http_client_enqueue_func_t enqueue;
59 php_http_client_dequeue_func_t dequeue;
60 php_http_client_setopt_func_t setopt;
61 php_http_client_getopt_func_t getopt;
62 } php_http_client_ops_t;
63
64 typedef struct php_http_client_driver {
65 zend_string *driver_name;
66 zend_string *client_name;
67 zend_string *request_name;
68 php_http_client_ops_t *client_ops;
69 } php_http_client_driver_t;
70
71 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_driver_add(php_http_client_driver_t *driver);
72 PHP_HTTP_API php_http_client_driver_t *php_http_client_driver_get(zend_string *name);
73
74 typedef struct php_http_client_progress_state {
75 struct {
76 double now;
77 double total;
78 } ul;
79 struct {
80 double now;
81 double total;
82 } dl;
83 const char *info;
84 unsigned started:1;
85 unsigned finished:1;
86 } php_http_client_progress_state_t;
87
88 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);
89 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);
90
91 typedef struct php_http_client {
92 void *ctx;
93 php_resource_factory_t *rf;
94 php_http_client_ops_t *ops;
95
96 struct {
97 struct {
98 php_http_client_response_callback_t func;
99 void *arg;
100 } response;
101 struct {
102 php_http_client_progress_callback_t func;
103 void *arg;
104 } progress;
105 } callback;
106
107 zend_llist requests;
108 zend_llist responses;
109 } php_http_client_t;
110
111 PHP_HTTP_API zend_class_entry *php_http_client_class_entry;
112
113 typedef struct php_http_client_object {
114 php_http_client_t *client;
115 php_http_object_method_t *update;
116 php_http_object_method_t notify;
117 long iterator;
118 zend_object zo;
119 } php_http_client_object_t;
120
121 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);
122 PHP_HTTP_API php_http_client_t *php_http_client_copy(php_http_client_t *from, php_http_client_t *to);
123 PHP_HTTP_API void php_http_client_dtor(php_http_client_t *h);
124 PHP_HTTP_API void php_http_client_free(php_http_client_t **h);
125
126 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_enqueue(php_http_client_t *h, php_http_client_enqueue_t *enqueue);
127 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_dequeue(php_http_client_t *h, php_http_message_t *request);
128
129 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_wait(php_http_client_t *h, struct timeval *custom_timeout);
130 PHP_HTTP_API int php_http_client_once(php_http_client_t *h);
131
132 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_exec(php_http_client_t *h);
133 PHP_HTTP_API void php_http_client_reset(php_http_client_t *h);
134
135 PHP_HTTP_API ZEND_RESULT_CODE php_http_client_setopt(php_http_client_t *h, php_http_client_setopt_opt_t opt, void *arg);
136 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);
137
138 typedef int (*php_http_client_enqueue_cmp_func_t)(php_http_client_enqueue_t *cmp, void *arg);
139 /* compare with request message pointer if compare_func is NULL */
140 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);
141
142 PHP_MINIT_FUNCTION(http_client);
143 PHP_MSHUTDOWN_FUNCTION(http_client);
144
145 #endif
146
147 /*
148 * Local variables:
149 * tab-width: 4
150 * c-basic-offset: 4
151 * End:
152 * vim600: noet sw=4 ts=4 fdm=marker
153 * vim<600: noet sw=4 ts=4
154 */