X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=32a0e325fe4d72023cd1edd0bf592ddb39873294;hp=3adbb273e76c523c3ce869aa1ac31ab0293718b8;hb=b23b4edaebd71ff76579b97f3ee353f43e83bd25;hpb=b3afcfc70bf06c062115f4994cc04fc8c6e4aa67 diff --git a/http_message_object.c b/http_message_object.c index 3adbb27..32a0e32 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -32,6 +32,7 @@ #include "php_http_request_method_api.h" #include "php_http_request_api.h" #include "php_http_request_object.h" +#include "php_http_headers_api.h" #if defined(HTTP_HAVE_SPL) && !defined(WONKY) /* SPL doesn't install its headers */ @@ -51,6 +52,11 @@ HTTP_BEGIN_ARGS(factory, 0) HTTP_ARG_VAL(class_name, 0) HTTP_END_ARGS; +HTTP_BEGIN_ARGS(fromEnv, 1) + HTTP_ARG_VAL(type, 0) + HTTP_ARG_VAL(class_name, 0) +HTTP_END_ARGS; + HTTP_EMPTY_ARGS(getBody); HTTP_BEGIN_ARGS(setBody, 1) HTTP_ARG_VAL(body, 0) @@ -185,6 +191,7 @@ zend_function_entry http_message_object_fe[] = { HTTP_MESSAGE_ME(factory, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_MALIAS(HttpMessage, fromString, factory, HTTP_ARGS(HttpMessage, factory), ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + HTTP_MESSAGE_ME(fromEnv, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) HTTP_MESSAGE_ME(detach, ZEND_ACC_PUBLIC) HTTP_MESSAGE_ME(prepend, ZEND_ACC_PUBLIC) @@ -735,6 +742,30 @@ PHP_METHOD(HttpMessage, factory) } /* }}} */ +/* {{{ proto static HttpMessage HttpMessage::fromEnv(int type[, string class_name = "HttpMessage"]) + Create a new HttpMessage object from environment representing either current request or response */ +PHP_METHOD(HttpMessage, fromEnv) +{ + char *cn = NULL; + int cl = 0; + long type; + http_message_object *obj = NULL; + zend_object_value ov; + + RETVAL_NULL(); + SET_EH_THROW_HTTP(); + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|s", &type, &cn, &cl)) { + if (SUCCESS == http_object_new(&ov, cn, cl, _http_message_object_new_ex, http_message_object_ce, http_message_init_env(NULL, type), &obj)) { + RETVAL_OBJVAL(ov, 0); + } + if (obj && !obj->message) { + obj->message = http_message_new(); + } + } + SET_EH_NORMAL(); +} +/* }}} */ + /* {{{ proto string HttpMessage::getBody() Get the body of the parsed HttpMessage. */ PHP_METHOD(HttpMessage, getBody) @@ -886,8 +917,8 @@ PHP_METHOD(HttpMessage, setResponseCode) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &code)) { RETURN_FALSE; } - if (code < 100 || code > 510) { - http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Invalid response code (100-510): %ld", code); + if (code < 100 || code > 599) { + http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Invalid response code (100-599): %ld", code); RETURN_FALSE; } @@ -1278,8 +1309,12 @@ PHP_METHOD(HttpMessage, unserialize) getObject(http_message_object, obj); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &serialized, &length)) { + http_message *msg; + http_message_dtor(obj->message); - if (!http_message_parse_ex(obj->message, serialized, (size_t) length)) { + if ((msg = http_message_parse_ex(obj->message, serialized, (size_t) length))) { + obj->message = msg; + } else { http_error(HE_ERROR, HTTP_E_RUNTIME, "Could not unserialize HttpMessage"); http_message_init(obj->message); }