X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=php_http_env.c;h=09ee36c96366689378fe9889f61086a2653ad796;hb=c0d96fe2c0d156412bcb22bf5b9f5e9ed0046c9c;hp=2fb6e33915fa1eb453fd1fc791bcc43502e4a187;hpb=7edf623c5ddadb989db89dfd8ebd4d822605b8af;p=m6w6%2Fext-http diff --git a/php_http_env.c b/php_http_env.c index 2fb6e33..09ee36c 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -32,7 +32,6 @@ PHP_RINIT_FUNCTION(http_env) ZEND_INIT_SYMTABLE(¶ms); if (php_http_params_parse(¶ms, &opts TSRMLS_CC)) { - zval **zct; char *key_str; uint key_len; ulong key_num; @@ -605,7 +604,6 @@ PHP_HTTP_API const char *php_http_env_get_response_status_for_code(unsigned code return php_http_strlist_find(php_http_env_response_status, 100, code); } -zend_class_entry *php_http_env_class_entry; #define PHP_HTTP_BEGIN_ARGS(method, req_args) PHP_HTTP_BEGIN_ARGS_EX(HttpEnv, method, 0, req_args) #define PHP_HTTP_EMPTY_ARGS(method) PHP_HTTP_EMPTY_ARGS_EX(HttpEnv, method, 0) @@ -674,7 +672,14 @@ PHP_HTTP_BEGIN_ARGS(cleanPersistentHandles, 0) PHP_HTTP_ARG_VAL(ident, 0) PHP_HTTP_END_ARGS; -zend_function_entry php_http_env_method_entry[] = { +static zend_class_entry *php_http_env_class_entry; + +zend_class_entry *php_http_env_get_class_entry(void) +{ + return php_http_env_class_entry; +} + +static zend_function_entry php_http_env_method_entry[] = { PHP_HTTP_ENV_ME(getRequestHeader) PHP_HTTP_ENV_ME(getRequestBody) @@ -722,14 +727,14 @@ PHP_METHOD(HttpEnv, getRequestHeader) PHP_METHOD(HttpEnv, getRequestBody) { - with_error_handling(EH_THROW, php_http_exception_class_entry) { - zend_class_entry *class_entry = php_http_message_body_class_entry; + with_error_handling(EH_THROW, php_http_exception_get_class_entry()) { + zend_class_entry *class_entry = php_http_message_body_get_class_entry(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &class_entry)) { zend_object_value ov; php_http_message_body_t *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, php_http_message_body_copy(body, NULL, 0), NULL TSRMLS_CC)) { + if (SUCCESS == php_http_new(&ov, class_entry, (php_http_new_t) php_http_message_body_object_new_ex, php_http_message_body_get_class_entry(), php_http_message_body_copy(body, NULL, 0), NULL TSRMLS_CC)) { RETVAL_OBJVAL(ov, 0); } } @@ -912,8 +917,35 @@ PHP_METHOD(HttpEnv, cleanPersistentHandles) } } +#ifdef PHP_HTTP_HAVE_JSON +#include "ext/json/php_json.h" + +static SAPI_POST_HANDLER_FUNC(php_http_json_post_handler) +{ + if (SG(request_info).raw_post_data) { + php_json_decode_ex(arg, SG(request_info).raw_post_data, SG(request_info).raw_post_data_length, PHP_JSON_OBJECT_AS_ARRAY, PG(max_input_nesting_level) TSRMLS_CC); + } +} + +#endif + PHP_MINIT_FUNCTION(http_env) { +#ifdef PHP_HTTP_HAVE_JSON + 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 + PHP_HTTP_REGISTER_CLASS(http, Env, http_env, NULL, 0); return SUCCESS;