ums = php_parse_date(header, NULL);
efree(header);
- if (ums > 0 && ums <= lm) {
+ if (ums > 0 && ums >= lm) {
return PHP_HTTP_CACHE_HIT;
} else {
return PHP_HTTP_CACHE_MISS;
/* we really only need to flush when throttling is enabled,
because we push the data as fast as possible anyway if not */
if (r->throttle.delay >= PHP_HTTP_DIFFSEC) {
+#if PHP_VERSION_ID >= 50400
if (php_output_get_level(TSRMLS_C)) {
php_output_flush_all(TSRMLS_C);
}
if (!(php_output_get_status(TSRMLS_C) & PHP_OUTPUT_IMPLICITFLUSH)) {
sapi_flush(TSRMLS_C);
}
+#else
+ php_end_ob_buffer(1, 1 TSRMLS_CC);
+ sapi_flush(TSRMLS_C);
+#endif
php_http_sleep(r->throttle.delay);
}
return len;
#define php_http_env_response_send_done(r) php_http_env_response_send_data((r), NULL, 0)
static STATUS php_http_env_response_send_data(php_http_env_response_t *r, const char *buf, size_t len)
{
- TSRMLS_FETCH_FROM_CTX(r->ts);
size_t chunk = r->throttle.chunk ? r->throttle.chunk : PHP_HTTP_SENDBUF_SIZE;
+ TSRMLS_FETCH_FROM_CTX(r->ts);
if (r->content.encoder) {
char *enc_str = NULL;
php_http_buffer_t buf;
php_http_buffer_init(&buf);
- if (php_http_params_to_string(&buf, Z_ARRVAL_P(zoption_copy), ZEND_STRL(","), ZEND_STRL(";"), ZEND_STRL("=") TSRMLS_CC)) {
+ if (php_http_params_to_string(&buf, Z_ARRVAL_P(zoption_copy), ZEND_STRL(","), ZEND_STRL(";"), ZEND_STRL("="), PHP_HTTP_PARAMS_DEFAULT TSRMLS_CC)) {
ret = php_http_env_set_response_header_format(0, 1 TSRMLS_CC, "Content-Disposition: %s", PHP_HTTP_BUFFER_VAL(&buf));
}
php_http_buffer_dtor(&buf);
zval_ptr_dtor(&zoption_copy);
+ zval_ptr_dtor(&zoption);
}
if (ret != SUCCESS) {
static STATUS php_http_env_response_send_body(php_http_env_response_t *r)
{
STATUS ret = SUCCESS;
- zval *zbody;
+ zval *zbody, *zoption;
TSRMLS_FETCH_FROM_CTX(r->ts);
if (r->done) {
) {
php_http_message_body_object_t *obj = zend_object_store_get_object(zbody TSRMLS_CC);
+ if ((zoption = get_option(r->options, ZEND_STRL("throttleDelay") TSRMLS_CC))) {
+ if (Z_TYPE_P(zoption) == IS_DOUBLE) {
+ r->throttle.delay = Z_DVAL_P(zoption);
+ }
+ zval_ptr_dtor(&zoption);
+ }
+ if ((zoption = get_option(r->options, ZEND_STRL("throttleChunk") TSRMLS_CC))) {
+ if (Z_TYPE_P(zoption) == IS_LONG) {
+ r->throttle.chunk = Z_LVAL_P(zoption);
+ }
+ zval_ptr_dtor(&zoption);
+ }
+
if (r->range.status == PHP_HTTP_RANGE_OK) {
if (zend_hash_num_elements(&r->range.values) == 1) {
/* single range */
double delay = 1;
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|d", &chunk_size, &delay)) {
- long chunk_size_long = (long) chunk_size;
-
set_option(getThis(), ZEND_STRL("throttleDelay"), IS_DOUBLE, &delay, 0 TSRMLS_CC);
- set_option(getThis(), ZEND_STRL("throttleChunk"), IS_LONG, &chunk_size_long, 0 TSRMLS_CC);
+ set_option(getThis(), ZEND_STRL("throttleChunk"), IS_LONG, &chunk_size, 0 TSRMLS_CC);
RETURN_TRUE;
}
RETURN_FALSE;