- /* 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;
- HashTable ranges;
- zend_hash_init(&ranges, 0, NULL, ZVAL_PTR_DTOR, 0);
-
- switch (http_get_request_ranges(&ranges, data_size))
- {
- case RANGE_NO:
- zend_hash_destroy(&ranges);
- /* go ahead and send all */
- break;
-
- case RANGE_OK:
- result = http_send_ranges(&ranges, data_ptr, data_size, data_mode);
- zend_hash_destroy(&ranges);
- return result;
- break;
-
- case RANGE_ERR:
- zend_hash_destroy(&ranges);
- http_send_status(416);
- return FAILURE;
- break;