X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env.c;h=e1ff585d72482ecea7d36faa673243b81d899e7b;hp=30ee32d7c68b3341aeaeb24c909b102537caccdf;hb=03f11ce599fa5a89148d588caf6ccec7f939e9d4;hpb=8ec2c825719482e62222163a300b0e18319591d0 diff --git a/php_http_env.c b/php_http_env.c index 30ee32d..e1ff585 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -15,8 +15,6 @@ PHP_RINIT_FUNCTION(http_env) { - PHP_HTTP_G->env.request.time = sapi_get_request_time(TSRMLS_C); - /* populate form data on non-POST requests */ if (SG(request_info).request_method && strcasecmp(SG(request_info).request_method, "POST") && SG(request_info).content_type && *SG(request_info).content_type) { uint ct_len = strlen(SG(request_info).content_type); @@ -72,7 +70,7 @@ PHP_RINIT_FUNCTION(http_env) } } - STR_SET(SG(request_info).content_type_dup, NULL); + PTR_SET(SG(request_info).content_type_dup, NULL); return SUCCESS; } @@ -289,7 +287,7 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ return PHP_HTTP_RANGE_NO; } if (strncmp(range, "bytes=", lenof("bytes="))) { - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_NO; } @@ -345,7 +343,7 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ switch (end) { /* "0-" */ case -1: - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_NO; /* "0-0" */ @@ -366,7 +364,7 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ case -1: /* "-", "-0" */ if (end == -1 || end == -10) { - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_ERR; } begin = length - end; @@ -376,13 +374,13 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ /* "12345-(NNN)" */ default: if (length <= (size_t) begin) { - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_ERR; } switch (end) { /* "12345-0" */ case -10: - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_ERR; /* "12345-" */ @@ -395,7 +393,7 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ if (length <= (size_t) end) { end = length - 1; } else if (end < begin) { - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_ERR; } break; @@ -417,12 +415,12 @@ php_http_range_status_t php_http_env_get_request_ranges(HashTable *ranges, size_ break; default: - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_NO; } } while (c != 0); - STR_FREE(range); + PTR_FREE(range); return PHP_HTTP_RANGE_OK; } @@ -432,9 +430,9 @@ static void grab_headers(void *data, void *arg TSRMLS_DC) php_http_buffer_appends(PHP_HTTP_BUFFER(arg), PHP_HTTP_CRLF); } -STATUS php_http_env_get_response_headers(HashTable *headers_ht TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_get_response_headers(HashTable *headers_ht TSRMLS_DC) { - STATUS status; + ZEND_RESULT_CODE status; php_http_buffer_t headers; php_http_buffer_init(&headers); @@ -477,15 +475,15 @@ long php_http_env_get_response_code(TSRMLS_D) return code ? code : 200; } -STATUS php_http_env_set_response_code(long http_code TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_code(long http_code TSRMLS_DC) { return sapi_header_op(SAPI_HEADER_SET_STATUS, (void *) http_code TSRMLS_CC); } -STATUS php_http_env_set_response_status_line(long code, php_http_version_t *v TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_status_line(long code, php_http_version_t *v TSRMLS_DC) { sapi_header_line h = {NULL, 0, 0}; - STATUS ret; + ZEND_RESULT_CODE ret; h.line_len = spprintf(&h.line, 0, "HTTP/%u.%u %ld %s", v->major, v->minor, code, php_http_env_get_response_status_for_code(code)); ret = sapi_header_op(SAPI_HEADER_REPLACE, (void *) &h TSRMLS_CC); @@ -494,22 +492,22 @@ STATUS php_http_env_set_response_status_line(long code, php_http_version_t *v TS return ret; } -STATUS php_http_env_set_response_protocol_version(php_http_version_t *v TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_protocol_version(php_http_version_t *v TSRMLS_DC) { return php_http_env_set_response_status_line(php_http_env_get_response_code(TSRMLS_C), v TSRMLS_CC); } -STATUS php_http_env_set_response_header(long http_code, const char *header_str, size_t header_len, zend_bool replace TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_header(long http_code, const char *header_str, size_t header_len, zend_bool replace TSRMLS_DC) { sapi_header_line h = {estrndup(header_str, header_len), header_len, http_code}; - STATUS ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, (void *) &h TSRMLS_CC); + ZEND_RESULT_CODE ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, (void *) &h TSRMLS_CC); efree(h.line); return ret; } -STATUS php_http_env_set_response_header_va(long http_code, zend_bool replace, const char *fmt, va_list argv TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_header_va(long http_code, zend_bool replace, const char *fmt, va_list argv TSRMLS_DC) { - STATUS ret = FAILURE; + ZEND_RESULT_CODE ret = FAILURE; sapi_header_line h = {NULL, 0, http_code}; h.line_len = vspprintf(&h.line, 0, fmt, argv); @@ -523,9 +521,9 @@ STATUS php_http_env_set_response_header_va(long http_code, zend_bool replace, co return ret; } -STATUS php_http_env_set_response_header_format(long http_code, zend_bool replace TSRMLS_DC, const char *fmt, ...) +ZEND_RESULT_CODE php_http_env_set_response_header_format(long http_code, zend_bool replace TSRMLS_DC, const char *fmt, ...) { - STATUS ret; + ZEND_RESULT_CODE ret; va_list args; va_start(args, fmt); @@ -535,7 +533,7 @@ STATUS php_http_env_set_response_header_format(long http_code, zend_bool replace return ret; } -STATUS php_http_env_set_response_header_value(long http_code, const char *name_str, size_t name_len, zval *value, zend_bool replace TSRMLS_DC) +ZEND_RESULT_CODE php_http_env_set_response_header_value(long http_code, const char *name_str, size_t name_len, zval *value, zend_bool replace TSRMLS_DC) { if (!value) { sapi_header_line h = {(char *) name_str, name_len, http_code}; @@ -564,7 +562,7 @@ STATUS php_http_env_set_response_header_value(long http_code, const char *name_s return php_http_env_set_response_header_value(http_code, name_str, name_len, NULL, replace TSRMLS_CC); } else { sapi_header_line h; - STATUS ret; + ZEND_RESULT_CODE ret; if (name_len > INT_MAX) { name_len = INT_MAX; @@ -575,7 +573,7 @@ STATUS php_http_env_set_response_header_value(long http_code, const char *name_s ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, (void *) &h TSRMLS_CC); zval_ptr_dtor(&data); - STR_FREE(h.line); + PTR_FREE(h.line); return ret; } @@ -715,6 +713,7 @@ static PHP_METHOD(HttpEnv, getRequestBody) body = php_http_env_get_request_body(TSRMLS_C); if (SUCCESS == php_http_new(&ov, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_message_body_class_entry, body, NULL TSRMLS_CC)) { + php_http_message_body_addref(body); RETVAL_OBJVAL(ov, 0); } } @@ -968,18 +967,18 @@ static SAPI_POST_HANDLER_FUNC(php_http_json_post_handler) #endif if (json_len) { - zval_dtor(zarg); - ZVAL_NULL(zarg); - php_json_decode(zarg, json_str, json_len, 1, PG(max_input_nesting_level) TSRMLS_CC); + zval zjson; + + INIT_ZVAL(zjson); + php_json_decode(&zjson, json_str, json_len, 1, PG(max_input_nesting_level) TSRMLS_CC); + if (Z_TYPE(zjson) != IS_NULL) { + zval_dtor(zarg); + ZVAL_COPY_VALUE(zarg, (&zjson)); + } } #if PHP_VERSION_ID >= 50600 - STR_FREE(json_str); + PTR_FREE(json_str); #endif - - /* always let $_POST be array() */ - if (Z_TYPE_P(zarg) == IS_NULL) { - array_init(zarg); - } } static void php_http_env_register_json_handler(TSRMLS_D)