X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=inline;f=http_functions.c;h=9b57b64204d8254bcf2ae0a34834b5ac4c227734;hb=e006146f6dc8601b2123d10e87311d06325231e7;hp=010c0a249b2fcdd65042f544825be2e44f774f00;hpb=ea31ba145c26e01b14c8aaf49ee487a118a456a8;p=m6w6%2Fext-http diff --git a/http_functions.c b/http_functions.c index 010c0a2..9b57b64 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,6 +686,13 @@ 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; + * if the server supports ranges + * - 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 + * - connecttimeout: int, seconds the connect may take * * * The optional third parameter will be filled with some additional information @@ -733,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; @@ -763,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; @@ -793,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; @@ -823,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; @@ -892,7 +903,6 @@ PHP_FUNCTION(http_auth_basic) * } * return false; * } - * * if (!http_auth_basic_cb('auth_cb')) { * die('