* add phpstr
[m6w6/ext-http] / http_functions.c
index 010c0a249b2fcdd65042f544825be2e44f774f00..f42fccba9b28c02eadb76488aed0f8607194ab7e 100644 (file)
@@ -15,9 +15,6 @@
 
 /* $Id$ */
 
-#define _WINSOCKAPI_
-#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
-
 #ifdef HAVE_CONFIG_H
 #      include "config.h"
 #endif
@@ -61,7 +58,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 +77,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 +373,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 +465,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 <a href=\"%s?%s\">%s?%s</a>.\n", URI, query, URI, query);
@@ -596,7 +595,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 +630,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 +642,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 +679,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
  * </pre>
  *
  * The optional third parameter will be filled with some additional information
@@ -892,7 +896,6 @@ PHP_FUNCTION(http_auth_basic)
  *     }
  *     return false;
  * }
- *
  * if (!http_auth_basic_cb('auth_cb')) {
  *     die('<h1>Authorization failed</h1>');
  * }