- introduce a force flag for no_cache
authorMichael Wallner <mike@php.net>
Thu, 1 Sep 2005 07:06:28 +0000 (07:06 +0000)
committerMichael Wallner <mike@php.net>
Thu, 1 Sep 2005 07:06:28 +0000 (07:06 +0000)
http_send_api.c
php_http_send_api.h

index ba6122bd08fdbe00556aed541a35cf4439baf1e0..e74d20d9564d515f9dab4547bbb39f4bb6106aa6 100644 (file)
@@ -337,7 +337,7 @@ PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_
 /* }}} */
 
 /* {{{ STATUS http_send(void *, size_t, http_send_mode) */
-PHP_HTTP_API STATUS _http_send(const void *data_ptr, size_t data_size, http_send_mode data_mode TSRMLS_DC)
+PHP_HTTP_API STATUS _http_send_ex(const void *data_ptr, size_t data_size, http_send_mode data_mode, zend_bool no_cache TSRMLS_DC)
 {
        HashTable ranges;
        http_range_status range_status;
@@ -381,7 +381,7 @@ PHP_HTTP_API STATUS _http_send(const void *data_ptr, size_t data_size, http_send
        zend_hash_destroy(&ranges);
 
        /* send 304 Not Modified if etag matches - DON'T return on ETag generation failure */
-       if (cache_etag) {
+       if (!no_cache && cache_etag) {
                char *etag = NULL;
 
                if (!(etag = http_etag(data_ptr, data_size, data_mode))) {
@@ -400,7 +400,7 @@ PHP_HTTP_API STATUS _http_send(const void *data_ptr, size_t data_size, http_send
        }
 
        /* send 304 Not Modified if last modified matches */
-       if (http_match_last_modified("HTTP_IF_MODIFIED_SINCE", HTTP_G(send).last_modified)) {
+       if (!no_cache && http_match_last_modified("HTTP_IF_MODIFIED_SINCE", HTTP_G(send).last_modified)) {
                char *sent_header = NULL;
                http_send_last_modified_ex(HTTP_G(send).last_modified, &sent_header);
                return http_exit_ex(304, sent_header, NULL, 0);
@@ -419,7 +419,7 @@ PHP_HTTP_API STATUS _http_send(const void *data_ptr, size_t data_size, http_send
 /* }}} */
 
 /* {{{ STATUS http_send_stream(php_stream *) */
-PHP_HTTP_API STATUS _http_send_stream_ex(php_stream *file, zend_bool close_stream TSRMLS_DC)
+PHP_HTTP_API STATUS _http_send_stream_ex(php_stream *file, zend_bool close_stream, zend_bool no_cache TSRMLS_DC)
 {
        STATUS status;
        php_stream_statbuf ssb;
@@ -428,7 +428,7 @@ PHP_HTTP_API STATUS _http_send_stream_ex(php_stream *file, zend_bool close_strea
                return FAILURE;
        }
 
-       status = http_send(file, ssb.sb.st_size, SEND_RSRC);
+       status = http_send_ex(file, ssb.sb.st_size, SEND_RSRC, no_cache);
 
        if (close_stream) {
                php_stream_close(file);
index 84a08588d2373c09672541fbd1400538cb38911e..8845afd9b5843e2067b748259cadb1cbc74ef863 100644 (file)
@@ -57,13 +57,16 @@ PHP_HTTP_API STATUS _http_send_content_disposition(const char *filename, size_t
 PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_t size, http_send_mode mode TSRMLS_DC);
 
 #define http_send_data(d, l) http_send((d), (l), SEND_DATA)
-#define http_send(d, s, m) _http_send((d), (s), (m) TSRMLS_CC)
-PHP_HTTP_API STATUS _http_send(const void *data, size_t data_size, http_send_mode mode TSRMLS_DC);
-
-#define http_send_file(f) http_send_stream_ex(php_stream_open_wrapper(f, "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL), 1)
-#define http_send_stream(s) http_send_stream_ex((s), 0)
-#define http_send_stream_ex(s, c) _http_send_stream_ex((s), (c) TSRMLS_CC)
-PHP_HTTP_API STATUS _http_send_stream_ex(php_stream *s, zend_bool close_stream TSRMLS_DC);
+#define http_send_data_ex(d, l, nc) http_send_ex((d), (l), SEND_DATA, (nc))
+#define http_send(d, s, m) _http_send_ex((d), (s), (m), 0 TSRMLS_CC)
+#define http_send_ex(d, s, m, nc) _http_send_ex((d), (s), (m), (nc) TSRMLS_CC)
+PHP_HTTP_API STATUS _http_send_ex(const void *data, size_t data_size, http_send_mode mode, zend_bool no_cache TSRMLS_DC);
+
+#define http_send_file(f) http_send_stream_ex(php_stream_open_wrapper(f, "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL), 1, 0)
+#define http_send_file_ex(f, nc) http_send_stream_ex(php_stream_open_wrapper(f, "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL), 1, (nc))
+#define http_send_stream(s) http_send_stream_ex((s), 0, 0)
+#define http_send_stream_ex(s, c, nc) _http_send_stream_ex((s), (c), (nc) TSRMLS_CC)
+PHP_HTTP_API STATUS _http_send_stream_ex(php_stream *s, zend_bool close_stream, zend_bool no_cache TSRMLS_DC);
 
 #endif