X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=a46d02883b1dc9bc5d2487bc9a54c4ee2a020b06;hp=4b611e037d964ee7122aaa970de514073b5418c9;hb=020d5b055921392c0dfb25043962a40867d8b033;hpb=781c90c0447166dd52ef881ae15751fa466c32fb
diff --git a/http_functions.c b/http_functions.c
index 4b611e0..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])
@@ -416,7 +415,7 @@ PHP_FUNCTION(ob_etaghandler)
* Use with http_send() API.
*
* Example:
- *
+ *
*
- *
+ *
*/
PHP_FUNCTION(http_throttle)
{
@@ -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);
}
/* }}} */
@@ -652,6 +651,7 @@ PHP_FUNCTION(http_parse_headers)
/* {{{ proto array http_get_request_headers(void)
*
+ * Get a list of incoming HTTP headers.
*/
PHP_FUNCTION(http_get_request_headers)
{
@@ -662,6 +662,43 @@ 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.
+ */
+PHP_FUNCTION(http_match_request_header)
+{
+ char *header, *value;
+ int header_len, value_len;
+ zend_bool match_case = 0, result = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", &header, &header_len, &value, &value_len, &match_case)) {
+ RETURN_FALSE;
+ }
+
+ RETURN_BOOL(http_match_request_header_ex(header, value, match_case));
+}
+/* }}} */
+
/* {{{ HAVE_CURL */
#ifdef HTTP_HAVE_CURL
@@ -825,7 +862,6 @@ PHP_FUNCTION(http_post_data)
} else {
RETVAL_FALSE;
}
- http_request_body_dtor(&body);
}
/* }}} */
@@ -868,6 +904,9 @@ PHP_FUNCTION(http_post_fields)
/* {{{ proto string http_put_file(string url, string file[, array options[, array &info]])
*
+ * Performs an HTTP PUT request, uploading file.
+ * Returns the HTTP response as string.
+ * See http_get() for a full list of available options.
*/
PHP_FUNCTION(http_put_file)
{
@@ -912,6 +951,9 @@ PHP_FUNCTION(http_put_file)
/* {{{ proto string http_put_stream(string url, resource stream[, array options[, array &info]])
*
+ * Performs an HTTP PUT request, uploading stream.
+ * Returns the HTTP response as string.
+ * See http_get() for a full list of available options.
*/
PHP_FUNCTION(http_put_stream)
{
@@ -950,12 +992,9 @@ PHP_FUNCTION(http_put_stream)
}
/* }}} */
-/* {{{ proto bool http_request()
- */
-/* }}} */
-
/* {{{ proto long http_request_method_register(string method)
*
+ * Register a custom request method.
*/
PHP_FUNCTION(http_request_method_register)
{
@@ -976,12 +1015,11 @@ PHP_FUNCTION(http_request_method_register)
/* {{{ proto bool http_request_method_unregister(mixed method)
*
+ * Unregister a previously registered custom request method.
*/
PHP_FUNCTION(http_request_method_unregister)
{
zval *method;
- zend_bool numeric;
- unsigned long existing;
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/", &method)) {
RETURN_FALSE;
@@ -1013,6 +1051,7 @@ PHP_FUNCTION(http_request_method_unregister)
/* {{{ proto long http_request_method_exists(mixed method)
*
+ * Check if a request method is registered (or available by default).
*/
PHP_FUNCTION(http_request_method_exists)
{
@@ -1044,6 +1083,7 @@ PHP_FUNCTION(http_request_method_exists)
/* {{{ proto string http_request_method_name(long method)
*
+ * Get the literal string representation of a standard or registered request method.
*/
PHP_FUNCTION(http_request_method_name)
{
@@ -1086,18 +1126,18 @@ PHP_FUNCTION(http_auth_basic)
realm = "Restricted";
}
- if (SUCCESS != http_auth_credentials(&suser, &spass)) {
- http_auth_header("Basic", realm);
+ if (SUCCESS != http_auth_basic_credentials(&suser, &spass)) {
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
if (strcasecmp(suser, user)) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
if (strcmp(spass, pass)) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
@@ -1139,8 +1179,8 @@ PHP_FUNCTION(http_auth_basic_cb)
realm = "Restricted";
}
- if (SUCCESS != http_auth_credentials(&user, &pass)) {
- http_auth_header("Basic", realm);
+ if (SUCCESS != http_auth_basic_credentials(&user, &pass)) {
+ http_auth_basic_header(realm);
RETURN_FALSE;
}
{
@@ -1163,7 +1203,7 @@ PHP_FUNCTION(http_auth_basic_cb)
efree(zparams[1]);
if (!result) {
- http_auth_header("Basic", realm);
+ http_auth_basic_header(realm);
}
RETURN_BOOL(result);