X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_env.c;h=c60d4c0b41d42787a682854a70e168700ed62e3f;hp=6de5ecb90a5ad419b8f098bb16dc31e1287a341c;hb=refs%2Fheads%2Fv2.4.x;hpb=a31ea1ffd4235e28db9ae43cc244aa164c016a2a diff --git a/php_http_env.c b/php_http_env.c index 6de5ecb..c60d4c0 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -13,68 +13,6 @@ #include "php_http_api.h" #include "php_variables.h" -PHP_RINIT_FUNCTION(http_env) -{ - /* 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); - char *ct_str = estrndup(SG(request_info).content_type, ct_len); - php_http_params_opts_t opts; - HashTable params; - - php_http_params_opts_default_get(&opts); - opts.input.str = ct_str; - opts.input.len = ct_len; - - SG(request_info).content_type_dup = ct_str; - - ZEND_INIT_SYMTABLE(¶ms); - if (php_http_params_parse(¶ms, &opts TSRMLS_CC)) { - char *key_str; - uint key_len; - ulong key_num; - - if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(¶ms, &key_str, &key_len, &key_num, 0, NULL)) { - sapi_post_entry *post_entry = NULL; - - if (SUCCESS == zend_hash_find(&SG(known_post_content_types), key_str, key_len, (void *) &post_entry)) { - zval *files = PG(http_globals)[TRACK_VARS_FILES]; - - if (post_entry) { - SG(request_info).post_entry = post_entry; - - if (post_entry->post_reader) { - post_entry->post_reader(TSRMLS_C); - } - } - - if (sapi_module.default_post_reader) { - sapi_module.default_post_reader(TSRMLS_C); - } - - sapi_handle_post(PG(http_globals)[TRACK_VARS_POST] TSRMLS_CC); - - /* - * the rfc1867 handler is an awkward buddy - */ - if (files != PG(http_globals)[TRACK_VARS_FILES] && PG(http_globals)[TRACK_VARS_FILES]) { - Z_ADDREF_P(PG(http_globals)[TRACK_VARS_FILES]); - zend_hash_update(&EG(symbol_table), "_FILES", sizeof("_FILES"), &PG(http_globals)[TRACK_VARS_FILES], sizeof(zval *), NULL); - if (files) { - zval_ptr_dtor(&files); - } - } - } - } - zend_hash_destroy(¶ms); - } - } - - PTR_SET(SG(request_info).content_type_dup, NULL); - - return SUCCESS; -} - PHP_RSHUTDOWN_FUNCTION(http_env) { if (PHP_HTTP_G->env.request.headers) { @@ -430,9 +368,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); @@ -475,15 +413,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); @@ -492,22 +430,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); @@ -521,9 +459,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); @@ -533,7 +471,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}; @@ -562,7 +500,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; @@ -858,58 +796,6 @@ static zend_function_entry php_http_env_methods[] = { EMPTY_FUNCTION_ENTRY }; -#ifdef PHP_HTTP_HAVE_JSON -#include "ext/json/php_json.h" - -static SAPI_POST_HANDLER_FUNC(php_http_json_post_handler) -{ - zval *zarg = arg; - char *json_str = NULL; - size_t json_len = 0; - -#if PHP_VERSION_ID >= 50600 - if (SG(request_info).request_body) { - /* FG(stream_wrappers) not initialized yet, so we cannot use php://input */ - php_stream_rewind(SG(request_info).request_body); - json_len = php_stream_copy_to_mem(SG(request_info).request_body, &json_str, PHP_STREAM_COPY_ALL, 0); - } -#else - json_str = SG(request_info).raw_post_data; - json_len = SG(request_info).raw_post_data_length; -#endif - - if (json_len) { - 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 - PTR_FREE(json_str); -#endif -} - -static void php_http_env_register_json_handler(TSRMLS_D) -{ - sapi_post_entry entry = {NULL, 0, NULL, NULL}; - - entry.post_reader = sapi_read_standard_form_data; - entry.post_handler = php_http_json_post_handler; - - entry.content_type = "text/json"; - entry.content_type_len = lenof("text/json"); - sapi_register_post_entry(&entry TSRMLS_CC); - - entry.content_type = "application/json"; - entry.content_type_len = lenof("application/json"); - sapi_register_post_entry(&entry TSRMLS_CC); -} -#endif - zend_class_entry *php_http_env_class_entry; PHP_MINIT_FUNCTION(http_env) @@ -919,10 +805,6 @@ PHP_MINIT_FUNCTION(http_env) INIT_NS_CLASS_ENTRY(ce, "http", "Env", php_http_env_methods); php_http_env_class_entry = zend_register_internal_class(&ce TSRMLS_CC); -#ifdef PHP_HTTP_HAVE_JSON - php_http_env_register_json_handler(TSRMLS_C); -#endif - return SUCCESS; }