X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=a46d02883b1dc9bc5d2487bc9a54c4ee2a020b06;hp=9f76881a8359beadf1224df9c4c0ab034f58e5a6;hb=64b8eb68455c36e7e153014deaf52a6f9d2de39c;hpb=e32f6fed32939bba9839c0e4f7cdaec02d8828dd diff --git a/http_functions.c b/http_functions.c index 9f76881..a46d028 100644 --- a/http_functions.c +++ b/http_functions.c @@ -18,17 +18,14 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif - #include "php.h" + +#include "SAPI.h" #include "php_ini.h" #include "ext/standard/info.h" #include "ext/session/php_session.h" #include "ext/standard/php_string.h" -#include "SAPI.h" - -#include "phpstr/phpstr.h" - #include "php_http.h" #include "php_http_std_defs.h" #include "php_http_api.h" @@ -42,6 +39,8 @@ #include "php_http_send_api.h" #include "php_http_url_api.h" +#include "phpstr/phpstr.h" + ZEND_EXTERN_MODULE_GLOBALS(http) /* {{{ proto string http_date([int timestamp]) @@ -460,7 +459,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 +605,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(zresponse, zheaders, 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 +662,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_STRINGL(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.