X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_methods.c;h=e06f34078521155fc777944afde0c4dfb135d176;hp=1440b13230259685aeb00ebe345635ee3234ba2b;hb=c2b4f0332ead5425b183d2487ab5f25663f1009f;hpb=456dd6f5e057a0fc4ff3dbaf006d71cf5c247f19 diff --git a/http_methods.c b/http_methods.c index 1440b13..e06f340 100644 --- a/http_methods.c +++ b/http_methods.c @@ -547,6 +547,30 @@ PHP_METHOD(HttpMessage, fromString) } /* }}} */ +/* {{{ proto void HttpMessage::__construct([string message]) + * + * Instantiate a new HttpMessage object. + */ +PHP_METHOD(HttpMessage, __construct) +{ + char *message = NULL; + int length = 0; + getObject(http_message_object, obj); + + SET_EH_THROW_HTTP(); + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &message, &length) && message && length) { + if (obj->message = http_message_parse(message, length)) { + if (obj->message->parent) { + obj->parent = http_message_object_from_msg(obj->message->parent); + } + } + } else if (!obj->message) { + obj->message = http_message_new(); + } + SET_EH_NORMAL(); +} +/* }}} */ + /* {{{ proto string HttpMessage::getBody() * * Get the body of the parsed Message. @@ -647,21 +671,7 @@ PHP_METHOD(HttpMessage, setType) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &type)) { return; } - if (type != obj->message->type) { - if (obj->message->type == HTTP_MSG_REQUEST) { - if (obj->message->info.request.method) { - efree(obj->message->info.request.method); - } - if (obj->message->info.request.URI) { - efree(obj->message->info.request.URI); - } - } - obj->message->type = type; - if (obj->message->type == HTTP_MSG_REQUEST) { - obj->message->info.request.method = NULL; - obj->message->info.request.URI = NULL; - } - } + http_message_set_type(obj->message, type); } /* }}} */ @@ -675,7 +685,7 @@ PHP_METHOD(HttpMessage, getResponseCode) NO_ARGS; - if (obj->message->type != HTTP_MSG_RESPONSE) { + if (!HTTP_MSG_TYPE(RESPONSE, obj->message)) { http_error(E_NOTICE, HTTP_E_MSG, "HttpMessage is not of type HTTP_MSG_RESPONSE"); RETURN_NULL(); } @@ -828,7 +838,7 @@ PHP_METHOD(HttpMessage, setRequestUri) PHP_METHOD(HttpMessage, getHttpVersion) { char ver[4] = {0}; - float *version; + float version; getObject(http_message_object, obj); NO_ARGS; @@ -836,16 +846,18 @@ PHP_METHOD(HttpMessage, getHttpVersion) switch (obj->message->type) { case HTTP_MSG_RESPONSE: - version = &obj->message->info.response.http_version; + version = obj->message->info.response.http_version; break; + case HTTP_MSG_REQUEST: - version = &obj->message->info.request.http_version; + version = obj->message->info.request.http_version; break; + case HTTP_MSG_NONE: default: RETURN_NULL(); } - sprintf(ver, "1.1f", version); + sprintf(ver, "%1.1f", version); RETURN_STRINGL(ver, 3, 1); } /* }}} */ @@ -886,28 +898,39 @@ PHP_METHOD(HttpMessage, setHttpVersion) } /* }}} */ -/* {{{ proto HttpMessage HttpMessage::getNestedMessage() +/* {{{ proto HttpMessage HttpMessage::getParentMessage() * - * Get nested Message. + * Get parent Message. */ -PHP_METHOD(HttpMessage, getNestedMessage) +PHP_METHOD(HttpMessage, getParentMessage) { getObject(http_message_object, obj); NO_ARGS; - if (obj->message->nested) { - Z_TYPE_P(return_value) = IS_OBJECT; - return_value->value.obj = obj->nested; - return_value->is_ref = 1; - zend_objects_store_add_ref(return_value TSRMLS_CC); + if (obj->message->parent) { + RETVAL_OBJVAL(obj->parent); } else { RETVAL_NULL(); } } /* }}} */ -/* {{{ proto string HttpMessage::toString() +/* {{{ proto bool HttpMessage::send() + * + * Send the Message according to its type as Response or Request. + */ +PHP_METHOD(HttpMessage, send) +{ + getObject(http_message_object, obj); + + NO_ARGS; + + RETURN_SUCCESS(http_message_send(obj->message)); +} +/* }}} */ + +/* {{{ proto string HttpMessage::toString([bool include_parent = true]) * * Get the string representation of the Message. */ @@ -915,11 +938,18 @@ PHP_METHOD(HttpMessage, toString) { char *string; size_t length; + zend_bool include_parent = 1; getObject(http_message_object, obj); - NO_ARGS; + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &include_parent)) { + RETURN_FALSE; + } - http_message_tostring(obj->message, &string, &length); + if (include_parent) { + http_message_serialize(obj->message, &string, &length); + } else { + http_message_tostring(obj->message, &string, &length); + } RETURN_STRINGL(string, length, 0); } /* }}} */