X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_functions.c;h=0b39b72cf36ef5e30715d0ea604edc474f0498a3;hb=3a658eda7fbc2ad5c8d2534ae69c4683266dab95;hp=f1b991d18ce375c0a9200e205102752d28dfd59b;hpb=c00621939ec351c74846b367765ddac4d3955eb9;p=m6w6%2Fext-http diff --git a/http_functions.c b/http_functions.c index f1b991d..0b39b72 100644 --- a/http_functions.c +++ b/http_functions.c @@ -15,29 +15,34 @@ /* $Id$ */ -#define _WINSOCKAPI_ -#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS - #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "php.h" #include "php_ini.h" -#include "snprintf.h" #include "ext/standard/info.h" #include "ext/session/php_session.h" #include "ext/standard/php_string.h" -#include "ext/standard/php_smart_str.h" #include "SAPI.h" +#include "phpstr/phpstr.h" + #include "php_http.h" +#include "php_http_std_defs.h" #include "php_http_api.h" +#include "php_http_auth_api.h" #include "php_http_curl_api.h" -#include "php_http_std_defs.h" +#include "php_http_cache_api.h" +#include "php_http_curl_api.h" +#include "php_http_date_api.h" +#include "php_http_headers_api.h" +#include "php_http_message_api.h" +#include "php_http_send_api.h" +#include "php_http_url_api.h" -ZEND_DECLARE_MODULE_GLOBALS(http) +ZEND_EXTERN_MODULE_GLOBALS(http) /* {{{ proto string http_date([int timestamp]) * @@ -61,7 +66,7 @@ PHP_FUNCTION(http_date) } /* }}} */ -/* {{{ proto string http_absolute_uri(string url[, string proto]) +/* {{{ proto string http_absolute_uri(string url[, string proto[, string host[, int port]]]) * * This function returns an absolute URI constructed from url. * If the url is already abolute but a different proto was supplied, @@ -80,14 +85,15 @@ PHP_FUNCTION(http_date) */ PHP_FUNCTION(http_absolute_uri) { - char *url = NULL, *proto = NULL; - int url_len = 0, proto_len = 0; + char *url = NULL, *proto = NULL, *host = NULL; + int url_len = 0, proto_len = 0, host_len = 0; + long port = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &url, &url_len, &proto, &proto_len) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ssl", &url, &url_len, &proto, &proto_len, &host, &host_len, &port) != SUCCESS) { RETURN_FALSE; } - RETURN_STRING(http_absolute_uri(url, proto), 0); + RETURN_STRING(http_absolute_uri_ex(url, url_len, proto, proto_len, host, host_len, port), 0); } /* }}} */ @@ -375,7 +381,7 @@ PHP_FUNCTION(http_cache_last_modified) */ PHP_FUNCTION(http_cache_etag) { - char *etag; + char *etag = NULL; int etag_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &etag, &etag_len) != SUCCESS) { @@ -467,7 +473,8 @@ PHP_FUNCTION(http_redirect) } } - URI = http_absolute_uri(url, NULL); + URI = http_absolute_uri(url); + if (query_len) { snprintf(LOC, HTTP_URI_MAXLEN + sizeof("Location: "), "Location: %s?%s", URI, query); sprintf(RED, "Redirecting to %s?%s.\n", URI, query, URI, query); @@ -580,7 +587,6 @@ PHP_FUNCTION(http_chunked_decode) * 0 => array( * 'Status' => '200 Ok', * 'Content-Type' => 'text/plain', - * 'Content-Language' => 'en-US' * ), * 1 => "Hello World!" @@ -596,7 +602,7 @@ PHP_FUNCTION(http_split_response) RETURN_FALSE; } - convert_to_string_ex(&zresponse); + convert_to_string(zresponse); MAKE_STD_ZVAL(zbody); MAKE_STD_ZVAL(zheaders); @@ -631,7 +637,7 @@ PHP_FUNCTION(http_parse_headers) header_len = rnrn - header + 2; } if (SUCCESS != http_parse_headers(header, header_len, return_value)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP header"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP headers"); zval_dtor(return_value); RETURN_FALSE; } @@ -643,9 +649,7 @@ PHP_FUNCTION(http_parse_headers) */ PHP_FUNCTION(http_get_request_headers) { - if (ZEND_NUM_ARGS()) { - WRONG_PARAM_COUNT; - } + NO_ARGS; array_init(return_value); http_get_request_headers(return_value); @@ -682,9 +686,9 @@ PHP_FUNCTION(http_get_request_headers) * - cookies: array, list of cookies as associative array * like array("cookie" => "value") * - cookiestore: string, path to a file where cookies are/will be stored - * - resume: int, byte offset to start the download from; + * - resume: int, byte offset to start the download from; * if the server supports ranges - * - maxfilesize: int, maximum file size that should be downloaded; + * - maxfilesize: int, maximum file size that should be downloaded; * has no effect, if the size of the requested entity is not known * - lastmodified: int, timestamp for If-(Un)Modified-Since header * - timeout: int, seconds the request may take @@ -740,7 +744,7 @@ PHP_FUNCTION(http_get) array_init(info); } - if (SUCCESS == http_get(URL, HASH_ORNULL(options), HASH_ORNULL(info), &data, &data_len)) { + if (SUCCESS == http_get(URL, Z_ARRVAL_P(options), Z_ARRVAL_P(info), &data, &data_len)) { RETURN_STRINGL(data, data_len, 0); } else { RETURN_FALSE; @@ -770,7 +774,7 @@ PHP_FUNCTION(http_head) array_init(info); } - if (SUCCESS == http_head(URL, HASH_ORNULL(options), HASH_ORNULL(info), &data, &data_len)) { + if (SUCCESS == http_head(URL, Z_ARRVAL_P(options), Z_ARRVAL_P(info), &data, &data_len)) { RETURN_STRINGL(data, data_len, 0); } else { RETURN_FALSE; @@ -800,7 +804,7 @@ PHP_FUNCTION(http_post_data) array_init(info); } - if (SUCCESS == http_post_data(URL, postdata, (size_t) postdata_len, HASH_ORNULL(options), HASH_ORNULL(info), &data, &data_len)) { + if (SUCCESS == http_post_data(URL, postdata, (size_t) postdata_len, Z_ARRVAL_P(options), Z_ARRVAL_P(info), &data, &data_len)) { RETURN_STRINGL(data, data_len, 0); } else { RETURN_FALSE; @@ -830,7 +834,7 @@ PHP_FUNCTION(http_post_array) array_init(info); } - if (SUCCESS == http_post_array(URL, Z_ARRVAL_P(postdata), HASH_ORNULL(options), HASH_ORNULL(info), &data, &data_len)) { + if (SUCCESS == http_post_array(URL, Z_ARRVAL_P(postdata), Z_ARRVAL_P(options), Z_ARRVAL_P(info), &data, &data_len)) { RETURN_STRINGL(data, data_len, 0); } else { RETURN_FALSE; @@ -899,7 +903,6 @@ PHP_FUNCTION(http_auth_basic) * } * return false; * } - * * if (!http_auth_basic_cb('auth_cb')) { * die('