X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=1f94df95a317757f252acb79f417cfe69acdced2;hp=791aa1e6d0d6d9fe68ea3dbce2792576f84a5da6;hb=51669004bbd20bcb4cd9d509799ff65e3998ea47;hpb=aca5a5a21e4514707a71cfa69cc19ae50a78f5d3 diff --git a/http_functions.c b/http_functions.c index 791aa1e..1f94df9 100644 --- a/http_functions.c +++ b/http_functions.c @@ -56,13 +56,13 @@ PHP_FUNCTION(http_date) } /* }}} */ -/* {{{ proto string http_build_url([mixed url[, mixed parts[, int flags = HTTP_URL_REPLACE[, array &new_url]]]]) +/* {{{ proto string http_build_url([mixed url[, mixed parts[, int flags = HTTP_URL_REPLACE|HTTP_URL_FROM_ENV[, array &new_url]]]]) Build an URL. */ PHP_FUNCTION(http_build_url) { char *url_str = NULL; size_t url_len = 0; - long flags = HTTP_URL_REPLACE; + long flags = HTTP_URL_REPLACE|HTTP_URL_FROM_ENV; zval *z_old_url = NULL, *z_new_url = NULL, *z_composed_url = NULL; php_url *old_url = NULL, *new_url = NULL, *composed_url = NULL; @@ -148,6 +148,17 @@ PHP_FUNCTION(http_build_str) } /* }}} */ +#define HTTP_DO_NEGOTIATE_DEFAULT(supported) \ + { \ + zval **value; \ + \ + zend_hash_internal_pointer_reset(Z_ARRVAL_P(supported)); \ + if (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(supported), (void *) &value)) { \ + RETVAL_ZVAL(*value, 1, 0); \ + } else { \ + RETVAL_NULL(); \ + } \ + } #define HTTP_DO_NEGOTIATE(type, supported, rs_array) \ { \ HashTable *result; \ @@ -156,10 +167,10 @@ PHP_FUNCTION(http_build_str) uint key_len; \ ulong idx; \ \ - if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(result, &key, &key_len, &idx, 1, NULL)) { \ + if (zend_hash_num_elements(result) && HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(result, &key, &key_len, &idx, 1, NULL)) { \ RETVAL_STRINGL(key, key_len-1, 0); \ } else { \ - RETVAL_NULL(); \ + HTTP_DO_NEGOTIATE_DEFAULT(supported); \ } \ \ if (rs_array) { \ @@ -170,14 +181,7 @@ PHP_FUNCTION(http_build_str) FREE_HASHTABLE(result); \ \ } else { \ - zval **value; \ - \ - zend_hash_internal_pointer_reset(Z_ARRVAL_P(supported)); \ - if (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(supported), (void *) &value)) { \ - RETVAL_ZVAL(*value, 1, 0); \ - } else { \ - RETVAL_NULL(); \ - } \ + HTTP_DO_NEGOTIATE_DEFAULT(supported); \ \ if (rs_array) { \ HashPosition pos; \ @@ -229,7 +233,7 @@ PHP_FUNCTION(http_negotiate_charset) } /* }}} */ -/* {{{ proto string http_negotiate_ctype(array supported[, array &result]) +/* {{{ proto string http_negotiate_content_type(array supported[, array &result]) Negotiate the clients preferred content type. */ PHP_FUNCTION(http_negotiate_content_type) { @@ -488,7 +492,7 @@ PHP_FUNCTION(http_redirect) } } - URI = http_absolute_url(url); + URI = http_absolute_url_ex(url, HTTP_URL_FROM_ENV); if (query_len) { spprintf(&LOC, 0, "Location: %s?%s", URI, query); @@ -802,10 +806,6 @@ PHP_FUNCTION(http_match_request_header) } /* }}} */ -/* {{{ HAVE_CURL */ -#ifdef HTTP_HAVE_CURL -#ifdef HTTP_HAVE_PERSISTENT_HANDLES - /* {{{ proto object http_persistent_handles_count() */ PHP_FUNCTION(http_persistent_handles_count) { @@ -830,7 +830,7 @@ PHP_FUNCTION(http_persistent_handles_clean) } /* }}} */ -/* {{{ proto string http_persistent_handles_ident(string ident) */ +/* {{{ proto string http_persistent_handles_ident([string ident]) */ PHP_FUNCTION(http_persistent_handles_ident) { char *ident_str = NULL; @@ -845,7 +845,8 @@ PHP_FUNCTION(http_persistent_handles_ident) } /* }}} */ -#endif /* HTTP_HAVE_PERSISTENT_HANDLES */ +/* {{{ HAVE_CURL */ +#ifdef HTTP_HAVE_CURL #define RETVAL_RESPONSE_OR_BODY(request) \ { \