- don't use environment for constructing request urls and
[m6w6/ext-http] / http_functions.c
index fe19c24376d7b3de49eeed7d6f2d4f619794b4ac..1f94df95a317757f252acb79f417cfe69acdced2 100644 (file)
@@ -6,7 +6,7 @@
     | modification, are permitted provided that the conditions mentioned |
     | in the accompanying LICENSE file are met.                          |
     +--------------------------------------------------------------------+
-    | Copyright (c) 2004-2006, Michael Wallner <mike@php.net>            |
+    | Copyright (c) 2004-2007, Michael Wallner <mike@php.net>            |
     +--------------------------------------------------------------------+
 */
 
@@ -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) \
        { \