X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env_response.c;h=b64aefd1e74d05ee6709d7f1b923e409b4eed8d5;hp=57aee2ee40fc48f6b2668d3758c7edffa2a2932d;hb=25f0c16244fc5f8b2c9d9bfddab8a541d2521789;hpb=b9b940d68c0569107bf1afefeca2a1e5f1efab04 diff --git a/php_http_env_response.c b/php_http_env_response.c index 57aee2e..b64aefd 100644 --- a/php_http_env_response.c +++ b/php_http_env_response.c @@ -351,16 +351,15 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r) if (zend_hash_num_elements(&r->range.values) == 1) { zval **range, **begin, **end; - if (SUCCESS != zend_hash_index_find(&r->range.values, 0, (void *) &range) - || SUCCESS != zend_hash_index_find(Z_ARRVAL_PP(range), 0, (void *) &begin) - || SUCCESS != zend_hash_index_find(Z_ARRVAL_PP(range), 1, (void *) &end) + if ( 1 == php_http_array_list(&r->range.values TSRMLS_CC, 1, &range) + && 2 == php_http_array_list(Z_ARRVAL_PP(range) TSRMLS_CC, 2, &begin, &end) ) { + ret = php_http_env_set_response_header_format(206, 1 TSRMLS_CC, "Content-Range: bytes %ld-%ld/%zu", Z_LVAL_PP(begin), Z_LVAL_PP(end), r->content.length); + } else { /* this should never happen */ zend_hash_destroy(&r->range.values); php_http_env_set_response_code(500 TSRMLS_CC); ret = FAILURE; - } else { - ret = php_http_env_set_response_header_format(206, 1 TSRMLS_CC, "Content-Range: bytes %ld-%ld/%zu", Z_LVAL_PP(begin), Z_LVAL_PP(end), r->content.length); } } else { php_http_boundary(r->range.boundary, sizeof(r->range.boundary) TSRMLS_CC); @@ -387,7 +386,7 @@ static STATUS php_http_env_response_send_head(php_http_env_response_t *r) php_http_buffer_init(&buf); 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)); + ret = php_http_env_set_response_header_format(0, 1 TSRMLS_CC, "Content-Disposition: %s", buf.data); } php_http_buffer_dtor(&buf); @@ -545,21 +544,22 @@ static STATUS php_http_env_response_send_body(php_http_env_response_t *r) /* single range */ zval **range, **begin, **end; - if (SUCCESS != zend_hash_index_find(&r->range.values, 0, (void *) &range) - || SUCCESS != zend_hash_index_find(Z_ARRVAL_PP(range), 0, (void *) &begin) - || SUCCESS != zend_hash_index_find(Z_ARRVAL_PP(range), 1, (void *) &end) + if ( 1 == php_http_array_list(&r->range.values TSRMLS_CC, 1, &range) + && 2 == php_http_array_list(Z_ARRVAL_PP(range) TSRMLS_CC, 2, &begin, &end) ) { - /* this should never happen */ - zend_hash_destroy(&r->range.values); - php_http_env_set_response_code(500 TSRMLS_CC); - ret = FAILURE; - } else { /* send chunk */ php_http_message_body_to_callback(obj->body, (php_http_pass_callback_t) php_http_env_response_send_data, r, Z_LVAL_PP(begin), Z_LVAL_PP(end) - Z_LVAL_PP(begin) + 1); php_http_env_response_send_done(r); zend_hash_destroy(&r->range.values); ret = SUCCESS; + } else { + fprintf(stderr, "wut?"); + /* this should never happen */ + zend_hash_destroy(&r->range.values); + php_http_env_set_response_code(500 TSRMLS_CC); + ret = FAILURE; } + } else { /* send multipart/byte-ranges message */ HashPosition pos; @@ -568,12 +568,7 @@ static STATUS php_http_env_response_send_body(php_http_env_response_t *r) FOREACH_HASH_VAL(pos, &r->range.values, chunk) { zval **begin, **end; - if (IS_ARRAY == Z_TYPE_PP(chunk) - && SUCCESS == zend_hash_index_find(Z_ARRVAL_PP(chunk), 0, (void *) &begin) - && IS_LONG == Z_TYPE_PP(begin) - && SUCCESS == zend_hash_index_find(Z_ARRVAL_PP(chunk), 1, (void *) &end) - && IS_LONG == Z_TYPE_PP(end) - ) { + if (2 == php_http_array_list(Z_ARRVAL_PP(chunk) TSRMLS_CC, 2, &begin, &end)) { php_http_buffer_appendf(r->buffer, PHP_HTTP_CRLF "--%s" PHP_HTTP_CRLF