Line data Source code
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 : #include "php_http_api.h"
14 :
15 : #include <php_ini.h>
16 : #include <ext/standard/info.h>
17 :
18 : #include <zlib.h>
19 :
20 : #if PHP_HTTP_HAVE_CURL
21 : # include <curl/curl.h>
22 : # if PHP_HTTP_HAVE_EVENT
23 : # if PHP_HTTP_HAVE_EVENT2
24 : # include <event2/event.h>
25 : # include <event2/event_struct.h>
26 : # else
27 : # include <event.h>
28 : # endif
29 : # endif
30 : #endif
31 : #if PHP_HTTP_HAVE_SERF
32 : # include <serf.h>
33 : #endif
34 :
35 : ZEND_DECLARE_MODULE_GLOBALS(php_http);
36 :
37 : #ifdef COMPILE_DL_HTTP
38 : ZEND_GET_MODULE(http)
39 : #endif
40 :
41 : zend_function_entry http_functions[] = {
42 : EMPTY_FUNCTION_ENTRY
43 : };
44 :
45 : PHP_MINIT_FUNCTION(http);
46 : PHP_MSHUTDOWN_FUNCTION(http);
47 : PHP_RINIT_FUNCTION(http);
48 : PHP_RSHUTDOWN_FUNCTION(http);
49 : PHP_MINFO_FUNCTION(http);
50 :
51 : static zend_module_dep http_module_deps[] = {
52 : ZEND_MOD_REQUIRED("raphf")
53 : ZEND_MOD_REQUIRED("propro")
54 : ZEND_MOD_REQUIRED("spl")
55 : #ifdef PHP_HTTP_HAVE_HASH
56 : ZEND_MOD_REQUIRED("hash")
57 : #endif
58 : #ifdef PHP_HTTP_HAVE_ICONV
59 : ZEND_MOD_REQUIRED("iconv")
60 : #endif
61 : #ifdef PHP_HTTP_HAVE_JSON
62 : ZEND_MOD_REQUIRED("json")
63 : #endif
64 : {NULL, NULL, NULL, 0}
65 : };
66 :
67 : zend_module_entry http_module_entry = {
68 : STANDARD_MODULE_HEADER_EX,
69 : NULL,
70 : http_module_deps,
71 : "http",
72 : http_functions,
73 : PHP_MINIT(http),
74 : PHP_MSHUTDOWN(http),
75 : PHP_RINIT(http),
76 : PHP_RSHUTDOWN(http),
77 : PHP_MINFO(http),
78 : PHP_PECL_HTTP_VERSION,
79 : STANDARD_MODULE_PROPERTIES
80 : };
81 :
82 : int http_module_number;
83 :
84 : #if PHP_DEBUG && !HAVE_GCOV
85 : void _dpf(int type, const char *data, size_t length)
86 : {
87 : static const char _sym[] = "><><><";
88 : if (type) {
89 : int nwp = 0;
90 : for (fprintf(stderr, "%c ", _sym[type-1]); length--; data++) {
91 : int ip = PHP_HTTP_IS_CTYPE(print, *data);
92 : if (!ip && *data != '\r' && *data != '\n') nwp = 1;
93 : fprintf(stderr, ip?"%c":"\\x%02x", (int) (*data & 0xff));
94 : if (!nwp && *data == '\n' && length) {
95 : fprintf(stderr, "\n%c ", _sym[type-1]);
96 : }
97 : }
98 : fprintf(stderr, "\n");
99 : } else {
100 : fprintf(stderr, "# %.*s\n", (int) length, data);
101 : }
102 : }
103 : #endif
104 :
105 374 : static void php_http_globals_init_once(zend_php_http_globals *G)
106 : {
107 374 : memset(G, 0, sizeof(*G));
108 374 : }
109 :
110 : #if 0
111 : static inline void php_http_globals_init(zend_php_http_globals *G TSRMLS_DC)
112 : {
113 : }
114 :
115 : static inline void php_http_globals_free(zend_php_http_globals *G TSRMLS_DC)
116 : {
117 : }
118 : #endif
119 :
120 : #if ZTS && PHP_DEBUG && !HAVE_GCOV
121 : zend_php_http_globals *php_http_globals(void)
122 : {
123 : TSRMLS_FETCH();
124 : return PHP_HTTP_G;
125 : }
126 : #endif
127 :
128 : PHP_INI_BEGIN()
129 : STD_PHP_INI_ENTRY("http.etag.mode", "crc32b", PHP_INI_ALL, OnUpdateString, env.etag_mode, zend_php_http_globals, php_http_globals)
130 : PHP_INI_END()
131 :
132 374 : PHP_MINIT_FUNCTION(http)
133 : {
134 374 : http_module_number = module_number;
135 374 : ZEND_INIT_MODULE_GLOBALS(php_http, php_http_globals_init_once, NULL);
136 374 : REGISTER_INI_ENTRIES();
137 :
138 374 : if (0
139 374 : || SUCCESS != PHP_MINIT_CALL(http_exception)
140 374 : || SUCCESS != PHP_MINIT_CALL(http_cookie)
141 374 : || SUCCESS != PHP_MINIT_CALL(http_encoding)
142 374 : || SUCCESS != PHP_MINIT_CALL(http_filter)
143 374 : || SUCCESS != PHP_MINIT_CALL(http_header)
144 374 : || SUCCESS != PHP_MINIT_CALL(http_header_parser)
145 374 : || SUCCESS != PHP_MINIT_CALL(http_message)
146 374 : || SUCCESS != PHP_MINIT_CALL(http_message_parser)
147 374 : || SUCCESS != PHP_MINIT_CALL(http_message_body)
148 374 : || SUCCESS != PHP_MINIT_CALL(http_querystring)
149 374 : || SUCCESS != PHP_MINIT_CALL(http_client)
150 374 : || SUCCESS != PHP_MINIT_CALL(http_client_request)
151 374 : || SUCCESS != PHP_MINIT_CALL(http_client_response)
152 : #if PHP_HTTP_HAVE_CURL
153 374 : || SUCCESS != PHP_MINIT_CALL(http_curl)
154 374 : || SUCCESS != PHP_MINIT_CALL(http_client_curl)
155 : #endif
156 374 : || SUCCESS != PHP_MINIT_CALL(http_url)
157 374 : || SUCCESS != PHP_MINIT_CALL(http_env)
158 374 : || SUCCESS != PHP_MINIT_CALL(http_env_request)
159 374 : || SUCCESS != PHP_MINIT_CALL(http_env_response)
160 374 : || SUCCESS != PHP_MINIT_CALL(http_params)
161 : ) {
162 0 : return FAILURE;
163 : }
164 :
165 374 : return SUCCESS;
166 : }
167 :
168 :
169 :
170 374 : PHP_MSHUTDOWN_FUNCTION(http)
171 : {
172 374 : UNREGISTER_INI_ENTRIES();
173 :
174 374 : if (0
175 374 : || SUCCESS != PHP_MSHUTDOWN_CALL(http_message)
176 : #if PHP_HTTP_HAVE_CURL
177 374 : || SUCCESS != PHP_MSHUTDOWN_CALL(http_client_curl)
178 374 : || SUCCESS != PHP_MSHUTDOWN_CALL(http_curl)
179 : #endif
180 374 : || SUCCESS != PHP_MSHUTDOWN_CALL(http_client)
181 : ) {
182 0 : return FAILURE;
183 : }
184 :
185 374 : return SUCCESS;
186 : }
187 :
188 374 : PHP_RINIT_FUNCTION(http)
189 : {
190 374 : if (0
191 374 : || SUCCESS != PHP_RINIT_CALL(http_env)
192 : ) {
193 0 : return FAILURE;
194 : }
195 :
196 374 : return SUCCESS;
197 : }
198 :
199 374 : PHP_RSHUTDOWN_FUNCTION(http)
200 : {
201 374 : if (0
202 374 : || SUCCESS != PHP_RSHUTDOWN_CALL(http_env)
203 : ) {
204 0 : return FAILURE;
205 : }
206 :
207 374 : return SUCCESS;
208 : }
209 :
210 1 : PHP_MINFO_FUNCTION(http)
211 : {
212 : php_http_buffer_t buf;
213 :
214 1 : php_http_buffer_init(&buf);
215 :
216 1 : php_info_print_table_start();
217 1 : php_info_print_table_header(2, "HTTP Support", "enabled");
218 1 : php_info_print_table_row(2, "Extension Version", PHP_PECL_HTTP_VERSION);
219 1 : php_info_print_table_end();
220 :
221 1 : php_info_print_table_start();
222 1 : php_info_print_table_header(3, "Used Library", "Compiled", "Linked");
223 1 : php_info_print_table_row(3, "libz", ZLIB_VERSION, zlibVersion());
224 : #if PHP_HTTP_HAVE_CURL
225 : {
226 1 : curl_version_info_data *cv = curl_version_info(CURLVERSION_NOW);
227 1 : php_info_print_table_row(3, "libcurl", LIBCURL_VERSION, cv->version);
228 : }
229 : #else
230 : php_info_print_table_row(3, "libcurl", "disabled", "disabled");
231 : #endif
232 :
233 : #if PHP_HTTP_HAVE_EVENT
234 1 : php_info_print_table_row(3, "libevent",
235 : # ifdef LIBEVENT_VERSION
236 : LIBEVENT_VERSION,
237 : # else
238 : PHP_HTTP_EVENT_VERSION,
239 : # endif
240 : event_get_version());
241 : #else
242 : php_info_print_table_row(3, "libevent", "disabled", "disabled");
243 : #endif
244 :
245 1 : php_info_print_table_end();
246 :
247 1 : DISPLAY_INI_ENTRIES();
248 1 : }
249 :
250 :
251 : /*
252 : * Local variables:
253 : * tab-width: 4
254 : * c-basic-offset: 4
255 : * End:
256 : * vim600: noet sw=4 ts=4 fdm=marker
257 : * vim<600: noet sw=4 ts=4
258 : */
259 :
|