- gzip responses
[m6w6/ext-http] / http_request_api.c
index c7bdcb316705b1c24e7273ae09682f6c28a5358f..b2da719eae325f4d87975739530a02a805b5b6ae 100644 (file)
@@ -56,7 +56,7 @@ static inline zend_bool http_ssl_init(void);
 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;
@@ -76,12 +76,13 @@ STATUS _http_request_global_init(INIT_FUNC_ARGS)
        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
@@ -541,8 +542,16 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, char
 
        /* 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 */
@@ -943,6 +952,7 @@ static inline void _http_curl_defaults(CURL *ch)
        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);