static inline void http_ssl_cleanup(void);
#endif
-STATUS _http_request_global_init(INIT_FUNC_ARGS)
+PHP_MINIT_FUNCTION(http_request)
{
if (CURLE_OK != curl_global_init(CURL_GLOBAL_ALL)) {
return FAILURE;
return SUCCESS;
}
-void _http_request_global_cleanup(TSRMLS_D)
+PHP_MSHUTDOWN_FUNCTION(http_request)
{
curl_global_cleanup();
#ifdef HTTP_NEED_SSL
http_ssl_cleanup();
#endif
+ return SUCCESS;
}
#ifndef HAVE_CURL_EASY_STRERROR
/* file data */
FOREACH_HASH_VAL(files, data) {
- CURLcode err;
zval **file, **type, **name;
- if ( SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "name", sizeof("name"), (void **) &name) &&
- SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &type) &&
- SUCCESS == zend_hash_find(Z_ARRVAL_PP(data), "file", sizeof("file"), (void **) &file)) {
- err = curl_formadd(&http_post_data[0], &http_post_data[1],
+
+ if ( SUCCESS != zend_hash_find(Z_ARRVAL_PP(data), "name", sizeof("name"), (void **) &name) ||
+ SUCCESS != zend_hash_find(Z_ARRVAL_PP(data), "type", sizeof("type"), (void **) &type) ||
+ SUCCESS != zend_hash_find(Z_ARRVAL_PP(data), "file", sizeof("file"), (void **) &file)) {
+ http_error(HE_NOTICE, HTTP_E_INVALID_PARAM, "Post file array entry misses either 'name', 'type' or 'file' entry");
+ } else {
+ CURLcode err = curl_formadd(&http_post_data[0], &http_post_data[1],
CURLFORM_COPYNAME, Z_STRVAL_PP(name),
CURLFORM_FILE, Z_STRVAL_PP(file),
CURLFORM_CONTENTTYPE, Z_STRVAL_PP(type),
curl_formfree(http_post_data[0]);
return FAILURE;
}
- } else {
- http_error(HE_NOTICE, HTTP_E_INVALID_PARAM, "Post file array entry misses either 'name', 'type' or 'file' entry");
}
}
}
#endif
- /* compress, empty string enables deflate and gzip */
+ /* compress, empty string enables all supported if libcurl was build with zlib support */
if ((zoption = http_curl_getopt(options, "compress", IS_BOOL)) && Z_LVAL_P(zoption)) {
+#ifdef HTTP_HAVE_ZLIB
+ HTTP_CURL_OPT(ENCODING, "gzip;q=1.0, deflate;q=0.5, *;q=0");
+#else
HTTP_CURL_OPT(ENCODING, "");
+#endif
}
/* redirects, defaults to 0 */
/* lastmodified */
if (zoption = http_curl_getopt(options, "lastmodified", IS_LONG)) {
- HTTP_CURL_OPT(TIMECONDITION, range_req ? CURL_TIMECOND_IFUNMODSINCE : CURL_TIMECOND_IFMODSINCE);
- HTTP_CURL_OPT(TIMEVALUE, Z_LVAL_P(zoption));
+ if (Z_LVAL_P(zoption)) {
+ if (Z_LVAL_P(zoption) > 0) {
+ HTTP_CURL_OPT(TIMEVALUE, Z_LVAL_P(zoption));
+ } else {
+ HTTP_CURL_OPT(TIMEVALUE, time(NULL) + Z_LVAL_P(zoption));
+ }
+ HTTP_CURL_OPT(TIMECONDITION, range_req ? CURL_TIMECOND_IFUNMODSINCE : CURL_TIMECOND_IFMODSINCE);
+ } else {
+ HTTP_CURL_OPT(TIMECONDITION, CURL_TIMECOND_NONE);
+ }
}
/* timeout, defaults to 0 */
PHP_HTTP_API void _http_request_info(CURL *ch, HashTable *info TSRMLS_DC)
{
zval array;
- Z_ARRVAL(array) = info;
+ INIT_ZARR(array, info);
HTTP_CURL_INFO(EFFECTIVE_URL);
#if LIBCURL_VERSION_NUM >= 0x070a07
PHP_HTTP_API STATUS _http_request_ex(CURL *ch, http_request_method meth, char *url, http_request_body *body, HashTable *options, HashTable *info, phpstr *response TSRMLS_DC)
{
STATUS status;
- zend_bool clean_curl;
+ zend_bool clean_curl = !ch;
- if ((clean_curl = (!ch))) {
- if (!(ch = curl_easy_init())) {
- http_error(HE_WARNING, HTTP_E_REQUEST, "Could not initialize curl.");
- return FAILURE;
- }
- }
+ HTTP_CHECK_CURL_INIT(ch, curl_easy_init(), return FAILURE);
status = ((SUCCESS == http_request_init(ch, meth, url, body, options)) &&
(SUCCESS == http_request_exec(ch, info, response, NULL))) ? SUCCESS : FAILURE;
HTTP_CURL_OPT(COOKIEJAR, NULL);
HTTP_CURL_OPT(RESUME_FROM, 0);
HTTP_CURL_OPT(MAXFILESIZE, 0);
+ HTTP_CURL_OPT(TIMECONDITION, 0);
HTTP_CURL_OPT(TIMEVALUE, 0);
HTTP_CURL_OPT(TIMEOUT, 0);
HTTP_CURL_OPT(CONNECTTIMEOUT, 3);
#endif /* HTTP_HAVE_CURL */
+zend_bool _http_request_supports_ssl(void)
+{
+#ifdef HTTP_NEED_SSL
+ return (zend_bool) 1;
+#else
+ return (zend_bool) 0;
+#endif
+}
+
/*
* Local variables:
* tab-width: 4