X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_message.c;h=1c337035cc7cac2c89e4e509c3b1f8f5226c4a2b;hp=80c488e6165ce9572a5bb1ae6e68a243ed3162d5;hb=18750f34ec9a9b16ffd07f54346136ca0f72e9a8;hpb=0b83632b2b0a03eeca090f993259ccd95ab646fb diff --git a/php_http_message.c b/php_http_message.c index 80c488e..1c33703 100644 --- a/php_http_message.c +++ b/php_http_message.c @@ -774,9 +774,12 @@ STATUS php_http_message_object_set_body(php_http_message_object_t *msg_obj, zval if (msg_obj->body) { zend_objects_store_del_ref_by_handle(msg_obj->body->zv.handle TSRMLS_CC); } - php_http_message_body_free(&msg_obj->message->body); - - msg_obj->message->body = php_http_message_body_init(&body_obj->body, NULL TSRMLS_CC); + if (msg_obj->message) { + php_http_message_body_free(&msg_obj->message->body); + msg_obj->message->body = php_http_message_body_init(&body_obj->body, NULL TSRMLS_CC); + } else { + msg_obj->message = php_http_message_init(NULL, 0, php_http_message_body_init(&body_obj->body, NULL TSRMLS_CC) TSRMLS_CC); + } msg_obj->body = body_obj; if (tmp) { @@ -1051,7 +1054,7 @@ static PHP_METHOD(HttpMessage, getBody) } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setBody, 0, 0, 1) - ZEND_ARG_INFO(0, body) + ZEND_ARG_OBJ_INFO(0, body, http\\Message\\Body, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, setBody) { @@ -1067,7 +1070,7 @@ static PHP_METHOD(HttpMessage, setBody) } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_addBody, 0, 0, 1) - ZEND_ARG_INFO(0, body) + ZEND_ARG_OBJ_INFO(0, body, http\\Message\\Body, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, addBody) { @@ -1169,7 +1172,7 @@ static PHP_METHOD(HttpMessage, setHeader) } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setHeaders, 0, 0, 1) - ZEND_ARG_INFO(0, headers) + ZEND_ARG_ARRAY_INFO(0, headers, 1) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, setHeaders) { @@ -1219,7 +1222,7 @@ static PHP_METHOD(HttpMessage, addHeader) } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_addHeaders, 0, 0, 1) - ZEND_ARG_INFO(0, headers) + ZEND_ARG_ARRAY_INFO(0, headers, 0) ZEND_ARG_INFO(0, append) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, addHeaders) @@ -1290,7 +1293,6 @@ static PHP_METHOD(HttpMessage, getInfo) Z_TYPE_P(return_value) = IS_STRING; return; } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setInfo, 0, 0, 1) @@ -1302,14 +1304,17 @@ static PHP_METHOD(HttpMessage, setInfo) int len; php_http_info_t inf; - if ( SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &len) - && php_http_info_parse(&inf, str TSRMLS_CC)) { + if ( SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &len)) { php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); PHP_HTTP_MESSAGE_OBJECT_INIT(obj); - php_http_message_set_info(obj->message, &inf); - php_http_info_dtor(&inf); + if (php_http_info_parse(&inf, str TSRMLS_CC)) { + php_http_message_set_info(obj->message, &inf); + php_http_info_dtor(&inf); + } else { + php_http_error(HE_WARNING, PHP_HTTP_E_MALFORMED_HEADERS, "Could not parse message info '%s'", str); + } } RETVAL_ZVAL(getThis(), 1, 0); } @@ -1328,8 +1333,6 @@ static PHP_METHOD(HttpMessage, getHttpVersion) php_http_version_to_string(&obj->message->http.version, &str, &len, NULL, NULL TSRMLS_CC); RETURN_STRINGL(str, len, 0); } - - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setHttpVersion, 0, 0, 1) @@ -1365,7 +1368,6 @@ static PHP_METHOD(HttpMessage, getResponseCode) PHP_HTTP_MESSAGE_TYPE_CHECK(RESPONSE, obj->message, RETURN_FALSE); RETURN_LONG(obj->message->http.info.response.code); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setResponseCode, 0, 0, 1) @@ -1409,8 +1411,6 @@ static PHP_METHOD(HttpMessage, getResponseStatus) RETURN_EMPTY_STRING(); } } - - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setResponseStatus, 0, 0, 1) @@ -1448,8 +1448,6 @@ static PHP_METHOD(HttpMessage, getRequestMethod) RETURN_EMPTY_STRING(); } } - - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setRequestMethod, 0, 0, 1) @@ -1492,8 +1490,6 @@ static PHP_METHOD(HttpMessage, getRequestUrl) RETURN_EMPTY_STRING(); } } - - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_setRequestUrl, 0, 0, 1) @@ -1604,9 +1600,8 @@ static PHP_METHOD(HttpMessage, toCallback) zend_fcall_info_args_clear(&fcd.fci, 1); zval_ptr_dtor(&fcd.fcz); - RETURN_TRUE; + RETURN_ZVAL(getThis(), 1, 0); } - RETURN_FALSE; } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_serialize, 0, 0, 0) @@ -1668,6 +1663,7 @@ static PHP_METHOD(HttpMessage, detach) ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_prepend, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, message, http\\Message, 0) + ZEND_ARG_INFO(0, top) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, prepend) { @@ -1680,10 +1676,7 @@ static PHP_METHOD(HttpMessage, prepend) php_http_message_object_t *prepend_obj = zend_object_store_get_object(prepend TSRMLS_CC); PHP_HTTP_MESSAGE_OBJECT_INIT(obj); - - if (!prepend_obj->message) { - prepend_obj->message = php_http_message_init(NULL, 0, NULL TSRMLS_CC); - } + PHP_HTTP_MESSAGE_OBJECT_INIT(prepend_obj); /* safety check */ for (msg[0] = obj->message; msg[0]; msg[0] = msg[0]->parent) {