X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_env.c;h=f73be2053eb8815331df6dcbffff6f5c931cf5e2;hb=287edcbfb698ff402588f7057dae0bc994d6e8e4;hp=f1ebf1c30e124668d8d05b37304942ae95ede547;hpb=8b0d2cdc1c3c1b8c54f9d1f18038468b1b87c126;p=m6w6%2Fext-http diff --git a/php_http_env.c b/php_http_env.c index f1ebf1c..f73be20 100644 --- a/php_http_env.c +++ b/php_http_env.c @@ -553,6 +553,7 @@ PHP_HTTP_API STATUS php_http_env_set_response_header_value(long http_code, const static PHP_HTTP_STRLIST(php_http_env_response_status) = PHP_HTTP_STRLIST_ITEM("Continue") PHP_HTTP_STRLIST_ITEM("Switching Protocols") + PHP_HTTP_STRLIST_ITEM("Processing") PHP_HTTP_STRLIST_NEXT PHP_HTTP_STRLIST_ITEM("OK") PHP_HTTP_STRLIST_ITEM("Created") @@ -561,6 +562,26 @@ static PHP_HTTP_STRLIST(php_http_env_response_status) = PHP_HTTP_STRLIST_ITEM("No Content") PHP_HTTP_STRLIST_ITEM("Reset Content") PHP_HTTP_STRLIST_ITEM("Partial Content") + PHP_HTTP_STRLIST_ITEM("Multi-Status") + PHP_HTTP_STRLIST_ITEM("Already Reported") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("IM Used") PHP_HTTP_STRLIST_NEXT PHP_HTTP_STRLIST_ITEM("Multiple Choices") PHP_HTTP_STRLIST_ITEM("Moved Permanently") @@ -570,6 +591,7 @@ static PHP_HTTP_STRLIST(php_http_env_response_status) = PHP_HTTP_STRLIST_ITEM("Use Proxy") PHP_HTTP_STRLIST_ITEM("(Unused)") PHP_HTTP_STRLIST_ITEM("Temporary Redirect") + PHP_HTTP_STRLIST_ITEM("Permanent Redirect") PHP_HTTP_STRLIST_NEXT PHP_HTTP_STRLIST_ITEM("Bad Request") PHP_HTTP_STRLIST_ITEM("Unauthorized") @@ -589,6 +611,20 @@ static PHP_HTTP_STRLIST(php_http_env_response_status) = PHP_HTTP_STRLIST_ITEM("Unsupported Media Type") PHP_HTTP_STRLIST_ITEM("Requested Range Not Satisfiable") PHP_HTTP_STRLIST_ITEM("Expectation Failed") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("Unprocessible Entity") + PHP_HTTP_STRLIST_ITEM("Locked") + PHP_HTTP_STRLIST_ITEM("Failed Dependency") + PHP_HTTP_STRLIST_ITEM("(Reserved)") + PHP_HTTP_STRLIST_ITEM("Upgrade Required") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("Precondition Required") + PHP_HTTP_STRLIST_ITEM("Too Many Requests") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("Request Header Fields Too Large") PHP_HTTP_STRLIST_NEXT PHP_HTTP_STRLIST_ITEM("Internal Server Error") PHP_HTTP_STRLIST_ITEM("Not Implemented") @@ -596,6 +632,12 @@ static PHP_HTTP_STRLIST(php_http_env_response_status) = PHP_HTTP_STRLIST_ITEM("Service Unavailable") PHP_HTTP_STRLIST_ITEM("Gateway Timeout") PHP_HTTP_STRLIST_ITEM("HTTP Version Not Supported") + PHP_HTTP_STRLIST_ITEM("Variant Also Negotiates") + PHP_HTTP_STRLIST_ITEM("Insufficient Storage") + PHP_HTTP_STRLIST_ITEM("Loop Detected") + PHP_HTTP_STRLIST_ITEM("(Unused)") + PHP_HTTP_STRLIST_ITEM("Not Extended") + PHP_HTTP_STRLIST_ITEM("Network Authentication Required") PHP_HTTP_STRLIST_STOP ; @@ -604,7 +646,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) @@ -673,7 +714,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) @@ -721,14 +769,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); } } @@ -911,8 +959,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;