+
+ /* send 304 Not Modified if last-modified matches*/
+ if ((!is_range_request) && http_modified_match("HTTP_IF_MODIFIED_SINCE", HTTP_G(lmod))) {
+ return http_send_status(304);
+ }
+
+ if (is_range_request) {
+
+ /* only send ranges if entity hasn't changed */
+ if (
+ ((!zend_hash_exists(HTTP_SERVER_VARS, "HTTP_IF_MATCH", 13)) ||
+ http_etag_match("HTTP_IF_MATCH", HTTP_G(etag)))
+ &&
+ ((!zend_hash_exists(HTTP_SERVER_VARS, "HTTP_IF_UNMODIFIED_SINCE", 25)) ||
+ http_modified_match("HTTP_IF_UNMODIFIED_SINCE", HTTP_G(lmod)))
+ ) {
+
+ STATUS result = FAILURE;
+ zval *zranges = NULL;
+ MAKE_STD_ZVAL(zranges);
+ array_init(zranges);
+
+ switch (http_get_request_ranges(zranges, data_size))
+ {
+ case RANGE_NO:
+ zval_dtor(zranges);
+ efree(zranges);
+ /* go ahead and send all */
+ break;