- add crc etag test
authorMichael Wallner <mike@php.net>
Fri, 7 Oct 2005 16:32:44 +0000 (16:32 +0000)
committerMichael Wallner <mike@php.net>
Fri, 7 Oct 2005 16:32:44 +0000 (16:32 +0000)
- update etag and last-modified even if we had one, to reflect changes;
  the user must set custom ones after supplying the data then...

http_response_object.c
tests/etag_mode_001.phpt
tests/etag_mode_011.phpt
tests/etag_mode_crc.phpt [new file with mode: 0644]

index 8be3efd7e988f1dc9308576d7b00df8e5bc2255c..72289b65f291fc71025eb04262abb32fdd03695c 100644 (file)
@@ -839,6 +839,7 @@ PHP_METHOD(HttpResponse, getBufferSize)
  */
 PHP_METHOD(HttpResponse, setData)
 {
+       char *etag;
        zval *the_data;
 
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
@@ -853,15 +854,10 @@ PHP_METHOD(HttpResponse, setData)
                RETURN_FALSE;
        }
        
-       if (!(Z_LVAL_P(convert_to_type_ex(IS_LONG, GET_STATIC_PROP(lastModified))) > 0)) {
-               UPD_STATIC_PROP(long, lastModified, http_last_modified(the_data, SEND_DATA));
-       }
-       if (!Z_STRLEN_P(convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag)))) {
-               char *etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA);
-               if (etag) {
-                       UPD_STATIC_PROP(string, eTag, etag);
-                       efree(etag);
-               }
+       UPD_STATIC_PROP(long, lastModified, http_last_modified(the_data, SEND_DATA));
+       if (etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA)) {
+               UPD_STATIC_PROP(string, eTag, etag);
+               efree(etag);
        }
 
        RETURN_TRUE;
@@ -897,6 +893,7 @@ PHP_METHOD(HttpResponse, getData)
  */
 PHP_METHOD(HttpResponse, setStream)
 {
+       char *etag;
        zval *the_stream;
        php_stream *the_real_stream;
        php_stream_statbuf ssb;
@@ -916,15 +913,10 @@ PHP_METHOD(HttpResponse, setStream)
        }
        zend_list_addref(Z_LVAL_P(the_stream));
        
-       if (!(Z_LVAL_P(convert_to_type_ex(IS_LONG, GET_STATIC_PROP(lastModified))) > 0)) {
-               UPD_STATIC_PROP(long, lastModified, http_last_modified(the_real_stream, SEND_RSRC));
-       }
-       if (!Z_STRLEN_P(convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag)))) {
-               char *etag = http_etag(the_real_stream, 0, SEND_RSRC);
-               if (etag) {
-                       UPD_STATIC_PROP(string, eTag, etag);
-                       efree(etag);
-               }
+       UPD_STATIC_PROP(long, lastModified, http_last_modified(the_real_stream, SEND_RSRC));
+       if (etag = http_etag(the_real_stream, 0, SEND_RSRC)) {
+               UPD_STATIC_PROP(string, eTag, etag);
+               efree(etag);
        }
 
        RETURN_TRUE;
@@ -957,7 +949,7 @@ PHP_METHOD(HttpResponse, getStream)
  */
 PHP_METHOD(HttpResponse, setFile)
 {
-       char *the_file;
+       char *the_file, *etag;
        int file_len;
        php_stream_statbuf ssb;
 
@@ -974,15 +966,10 @@ PHP_METHOD(HttpResponse, setFile)
                RETURN_FALSE;
        }
 
-       if (!(Z_LVAL_P(convert_to_type_ex(IS_LONG, GET_STATIC_PROP(lastModified))) > 0)) {
-               UPD_STATIC_PROP(long, lastModified, http_last_modified(the_file, -1));
-       }
-       if (!Z_STRLEN_P(convert_to_type_ex(IS_STRING, GET_STATIC_PROP(eTag)))) {
-               char *etag = http_etag(the_file, 0, -1);
-               if (etag) {
-                       UPD_STATIC_PROP(string, eTag, etag);
-                       efree(etag);
-               }
+       UPD_STATIC_PROP(long, lastModified, http_last_modified(the_file, -1));
+       if (etag = http_etag(the_file, 0, -1)) {
+               UPD_STATIC_PROP(string, eTag, etag);
+               efree(etag);
        }
 
        RETURN_TRUE;
index 19223a44dbf0a8b77d056c69951df646f726368b..d8cf59458ebf99f03f52c8aba059696bef6caa6b 100644 (file)
@@ -16,7 +16,7 @@ Content-type: %s
 X-Powered-By: PHP/%s
 Cache-Control: private, must-revalidate, max-age=0
 Accept-Ranges: bytes
-ETag: "28ad514e"
+ETag: "4e818847"
 Content-Length: 4
 
 abc
index 75505aa5a3df5be98dd498883b0a5aa486d1a330..06b35e10666decb8167f8159312a455e13e8894b 100644 (file)
@@ -15,6 +15,6 @@ print("abc\n");
 Content-type: %s
 X-Powered-By: PHP/%s
 Cache-Control: private, must-revalidate, max-age=0
-ETag: "28ad514e"
+ETag: "4e818847"
 
 abc
diff --git a/tests/etag_mode_crc.phpt b/tests/etag_mode_crc.phpt
new file mode 100644 (file)
index 0000000..2e83a9b
--- /dev/null
@@ -0,0 +1,37 @@
+--TEST--
+sane crc etags
+--SKIPIF--
+<?php
+include 'skip.inc';
+chkver(5.1);
+?>
+--FILE--
+<?php
+echo "-TEST\n";
+
+ini_set('http.etag_mode', HTTP_ETAG_CRC32);
+HttpResponse::setData("abc");
+$php = HttpResponse::getEtag();
+
+ini_set('http.etag_mode', HTTP_ETAG_MHASH_CRC32);
+HttpResponse::setData("abc");
+$crc = HttpResponse::getEtag();
+
+ini_set('http.etag_mode', HTTP_ETAG_MHASH_CRC32B);
+HttpResponse::setData("abc");
+$equ = HttpResponse::getEtag();
+
+echo $php,"\n", $equ,"\n", $crc,"\n";
+
+var_dump($equ === $php);
+var_dump($equ !== $crc);
+
+echo "Done\n";
+--EXPECTF--
+%sTEST
+c2412435
+c2412435
+73bb8c64
+bool(true)
+bool(true)
+Done