X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=470c47b4ca19128f2b5603d82d3666e3abfb1499;hp=3ed49b22f6e8b8261a9737cba6c3d80793e31055;hb=107576b154825ebac44f2cc08d97565a5349eca8;hpb=f6e558f7886fff36d239ae2fae69d955ac6925ee diff --git a/http_functions.c b/http_functions.c index 3ed49b2..470c47b 100644 --- a/http_functions.c +++ b/http_functions.c @@ -15,9 +15,6 @@ /* $Id$ */ -#define _WINSOCKAPI_ -#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS - #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -28,7 +25,6 @@ #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" @@ -37,6 +33,8 @@ #include "php_http_curl_api.h" #include "php_http_std_defs.h" +#include "phpstr/phpstr.h" + ZEND_DECLARE_MODULE_GLOBALS(http) /* {{{ proto string http_date([int timestamp]) @@ -376,7 +374,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) { @@ -469,7 +467,7 @@ PHP_FUNCTION(http_redirect) } 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); @@ -598,7 +596,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); @@ -632,8 +630,8 @@ PHP_FUNCTION(http_parse_headers) if (rnrn = strstr(header, HTTP_CRLF HTTP_CRLF)) { header_len = rnrn - header + 2; } - if (SUCCESS != http_parse_headers(header, header_len, Z_ARRVAL_P(return_value))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP header"); + if (SUCCESS != http_parse_headers(header, header_len, return_value)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP headers"); zval_dtor(return_value); RETURN_FALSE; } @@ -954,16 +952,16 @@ PHP_FUNCTION(http_auth_basic_cb) /* {{{ Sara Golemons http_build_query() */ #ifndef ZEND_ENGINE_2 -/* {{{ proto string http_build_query(mixed formdata [, string prefix]) +/* {{{ proto string http_build_query(mixed formdata [, string prefix[, string arg_separator]]) Generates a form-encoded query string from an associative array or object. */ PHP_FUNCTION(http_build_query) { zval *formdata; - char *prefix = NULL; - int prefix_len = 0; - smart_str formstr = {0}; + char *prefix = NULL, *arg_sep = INI_STR("arg_separator.output"); + int prefix_len = 0, arg_sep_len = strlen(arg_sep); + phpstr *formstr = phpstr_new(); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &formdata, &prefix, &prefix_len) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|ss", &formdata, &prefix, &prefix_len, &arg_sep, &arg_sep_len) != SUCCESS) { RETURN_FALSE; } @@ -972,25 +970,31 @@ PHP_FUNCTION(http_build_query) RETURN_FALSE; } - if (php_url_encode_hash_ex(HASH_OF(formdata), &formstr, prefix, prefix_len, NULL, 0, NULL, 0, (Z_TYPE_P(formdata) == IS_OBJECT ? formdata : NULL) TSRMLS_CC) == FAILURE) { - if (formstr.c) { - efree(formstr.c); - } + if (!arg_sep_len) { + arg_sep = HTTP_URL_ARGSEP_DEFAULT; + } + + if (SUCCESS != http_urlencode_hash_implementation_ex(HASH_OF(formdata), formstr, arg_sep, prefix, prefix_len, NULL, 0, NULL, 0, (Z_TYPE_P(formdata) == IS_OBJECT ? formdata : NULL) TSRMLS_CC)) { + phpstr_free(formstr); RETURN_FALSE; } - if (!formstr.c) { + if (!formstr->used) { + phpstr_free(formstr); RETURN_NULL(); } - smart_str_0(&formstr); - - RETURN_STRINGL(formstr.c, formstr.len, 0); + RETURN_PHPSTR_PTR(formstr); } /* }}} */ #endif /* !ZEND_ENGINE_2 */ /* }}} */ +PHP_FUNCTION(http_test) +{ + RETURN_TRUE; +} + /* * Local variables: * tab-width: 4