X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=4e67be7aee3fac005c0e2f083d096c94e0986b60;hp=ba2bd56135717d73c50e2ad40693e5179f29e5cd;hb=e47ee304be6758fbbfd238476f8a6bda9090fe12;hpb=4f5d70d375dac27459a80c1e5271697c1f46c675 diff --git a/http_functions.c b/http_functions.c index ba2bd56..4e67be7 100644 --- a/http_functions.c +++ b/http_functions.c @@ -416,7 +416,7 @@ PHP_FUNCTION(ob_etaghandler) * Use with http_send() API. * * Example: - * + *
  * 
- * 
+ * 
*/ PHP_FUNCTION(http_throttle) { @@ -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(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 +652,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 +663,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_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. + */ +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 +863,6 @@ PHP_FUNCTION(http_post_data) } else { RETVAL_FALSE; } - http_request_body_dtor(&body); } /* }}} */ @@ -868,6 +905,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 +952,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 +993,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,6 +1016,7 @@ 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) { @@ -1011,6 +1052,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) { @@ -1042,6 +1084,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) { @@ -1084,18 +1127,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; } @@ -1137,8 +1180,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; } { @@ -1161,7 +1204,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);