- typo
[m6w6/ext-http] / http_functions.c
index 9f76881a8359beadf1224df9c4c0ab034f58e5a6..a46d02883b1dc9bc5d2487bc9a54c4ee2a020b06 100644 (file)
 #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 <a href=\"%s?%s\">%s?%s</a>.\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.