iliaa           Fri Jan 19 00:02:13 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/ext/standard       http_fopen_wrapper.c 
  Log:
  
  Added read-timeout context option "timeout" for HTTP streams.
  
  # A patch mostly by Hannes
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.500&r2=1.2027.2.547.2.501&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.500 php-src/NEWS:1.2027.2.547.2.501
--- php-src/NEWS:1.2027.2.547.2.500     Thu Jan 18 23:29:34 2007
+++ php-src/NEWS        Fri Jan 19 00:02:12 2007
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Jan 2007, PHP 5.2.1RC3
+- Added read-timeout context option "timeout" for HTTP streams. (Hannes,
+  Ilia). 
 - Added CURLOPT_TCP_NODELAY constant to Curl extension. (Sara)
 - Improved proc_open(). Now on Windows it can run external commands not through
   CMD.EXE. (Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/http_fopen_wrapper.c?r1=1.99.2.12.2.5&r2=1.99.2.12.2.6&diff_format=u
Index: php-src/ext/standard/http_fopen_wrapper.c
diff -u php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.5 
php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.6
--- php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.5     Sun Jan 14 
14:22:40 2007
+++ php-src/ext/standard/http_fopen_wrapper.c   Fri Jan 19 00:02:13 2007
@@ -19,7 +19,7 @@
    |          Sara Golemon <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
  */
-/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.5 2007/01/14 14:22:40 bjori Exp $ 
*/ 
+/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.6 2007/01/19 00:02:13 iliaa Exp $ 
*/ 
 
 #include "php.h"
 #include "php_globals.h"
@@ -104,11 +104,12 @@
        int transport_len, have_header = 0, request_fulluri = 0;
        char *protocol_version = NULL;
        int protocol_version_len = 3; /* Default: "1.0" */
+       struct timeval timeout;
 
        tmp_line[0] = '\0';
 
        if (redirect_max < 1) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Redirection limit 
reached, aborting.");
+               php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, 
"Redirection limit reached, aborting");
                return NULL;
        }
 
@@ -159,9 +160,23 @@
                }
        }
 
+       if (context && php_stream_context_get_option(context, 
wrapper->wops->label, "timeout", &tmpzval) == SUCCESS) {
+               SEPARATE_ZVAL(tmpzval);
+               convert_to_double_ex(tmpzval);
+               timeout.tv_sec = (time_t) Z_DVAL_PP(tmpzval);
+               timeout.tv_usec = (suseconds_t) ((Z_DVAL_PP(tmpzval) - 
timeout.tv_sec) * 1000000);
+       } else {
+               timeout.tv_sec = FG(default_socket_timeout);
+               timeout.tv_usec = 0;
+       }
+
        stream = php_stream_xport_create(transport_string, transport_len, 
options,
                        STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
-                       NULL, NULL, context, &errstr, NULL);
+                       NULL, &timeout, context, &errstr, NULL);
+    
+       if (stream) {
+               php_stream_set_option(stream, PHP_STREAM_OPTION_READ_TIMEOUT, 
0, &timeout);
+       }
                        
        if (errstr) {
                php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "%s", 
errstr);
@@ -232,8 +247,7 @@
                redirect_max = Z_LVAL_PP(tmpzval);
        }
 
-       if (header_init && context &&
-               php_stream_context_get_option(context, "http", "method", 
&tmpzval) == SUCCESS) {
+       if (context && php_stream_context_get_option(context, "http", "method", 
&tmpzval) == SUCCESS) {
                if (Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval) > 
0) {
                        scratch_len = strlen(path) + 29 + Z_STRLEN_PP(tmpzval);
                        scratch = emalloc(scratch_len);
@@ -241,9 +255,8 @@
                        strcat(scratch, " ");
                }
        }
-
-       if (context &&
-               php_stream_context_get_option(context, "http", 
"protocol_version", &tmpzval) == SUCCESS) {
+ 
+       if (context && php_stream_context_get_option(context, "http", 
"protocol_version", &tmpzval) == SUCCESS) {
                SEPARATE_ZVAL(tmpzval);
                convert_to_double_ex(tmpzval);
                protocol_version_len = spprintf(&protocol_version, 0, "%.1F", 
Z_DVAL_PP(tmpzval));
@@ -564,7 +577,11 @@
                }
        }
        
-       if (!reqok || location[0] != '\0')      {               
+       if (!reqok || location[0] != '\0') {
+               if (options & STREAM_ONLY_GET_HEADERS && redirect_max <= 1) {
+                       goto out;
+               }
+
                if (location[0] != '\0')
                        php_stream_notify_info(context, 
PHP_STREAM_NOTIFY_REDIRECTED, location, 0);
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to