X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=4e67be7aee3fac005c0e2f083d096c94e0986b60;hp=01df1a16231170a01f5b3083c67df62c60832e8a;hb=e47ee304be6758fbbfd238476f8a6bda9090fe12;hpb=dac9fc69ba6208b3a150ad447c0ede3b786a83c5 diff --git a/http_functions.c b/http_functions.c index 01df1a1..4e67be7 100644 --- a/http_functions.c +++ b/http_functions.c @@ -460,7 +460,7 @@ PHP_FUNCTION(http_redirect) size_t query_len = 0; zend_bool session = 0, permanent = 0; zval *params = NULL; - char *query, *url, *URI, + char *query = NULL, *url = NULL, *URI, LOC[HTTP_URI_MAXLEN + sizeof("Location: ")], RED[HTTP_URI_MAXLEN * 2 + sizeof("Redirecting to %s?%s.\n")]; @@ -606,26 +606,26 @@ PHP_FUNCTION(http_chunked_decode) */ PHP_FUNCTION(http_split_response) { - zval *zresponse, *zbody, *zheaders; + char *response, *body; + int response_len; + size_t body_len; + zval *zheaders; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zresponse) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &response, &response_len) != SUCCESS) { RETURN_FALSE; } - convert_to_string(zresponse); - - MAKE_STD_ZVAL(zbody); MAKE_STD_ZVAL(zheaders); array_init(zheaders); - if (SUCCESS != http_split_response(Z_STRVAL_P(zresponse), Z_STRLEN_P(zresponse), Z_ARRVAL_P(zheaders), &Z_STRVAL_P(zbody), &Z_STRLEN_P(zbody))) { + if (SUCCESS != http_split_response(response, response_len, Z_ARRVAL_P(zheaders), &body, &body_len)) { http_error(E_WARNING, HTTP_E_PARSE, "Could not parse HTTP response"); RETURN_FALSE; } array_init(return_value); add_index_zval(return_value, 0, zheaders); - add_index_zval(return_value, 1, zbody); + add_index_stringl(return_value, 1, body, body_len, 0); } /* }}} */ @@ -663,6 +663,25 @@ PHP_FUNCTION(http_get_request_headers) } /* }}} */ +/* {{{ proto string http_get_request_body(void) + * + * Get the raw request body (e.g. POST or PUT data). + */ +PHP_FUNCTION(http_get_request_body) +{ + char *body; + size_t length; + + NO_ARGS; + + if (SUCCESS == http_get_request_body(&body, &length)) { + RETURN_STRING(body, (int) length, 0); + } else { + RETURN_NULL(); + } +} +/* }}} */ + /* {{{ proto bool http_match_request_header(string header, string value[, bool match_case = false]) * * Match an incoming HTTP header.