X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env_response.c;h=57aee2ee40fc48f6b2668d3758c7edffa2a2932d;hp=c3cf80b891a4bd7a6fd37144e7f04863ad0192b1;hb=7566d9549758b56d37b86473feb16248378744e0;hpb=305ac2f007710b684d96b05f33964b4f6a4e3e4d diff --git a/php_http_env_response.c b/php_http_env_response.c index c3cf80b..57aee2e 100644 --- a/php_http_env_response.c +++ b/php_http_env_response.c @@ -166,7 +166,7 @@ PHP_HTTP_API php_http_cache_status_t php_http_env_is_response_cached_by_last_mod 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; @@ -189,6 +189,9 @@ static size_t output(void *context, char *buf, size_t len TSRMLS_DC) 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); } @@ -389,6 +392,7 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r) php_http_buffer_dtor(&buf); zval_ptr_dtor(&zoption_copy); + zval_ptr_dtor(&zoption); } if (ret != SUCCESS) { @@ -510,7 +514,7 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r) 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) { @@ -523,6 +527,19 @@ static STATUS php_http_env_response_send_body(php_http_env_response_t *r) ) { 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 */ @@ -866,10 +883,8 @@ PHP_METHOD(HttpEnvResponse, setThrottleRate) 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;