sterling                Sat Sep  7 11:45:29 2002 EDT

  Modified files:              
    /php4/ext/standard  basic_functions.h file.c http_fopen_wrapper.c 
  Log:
  @ Made the User-Agent that php's fopen wrappers send, configurable via 
  @ php.ini or via a stream context. (Sterling)
  
  The stream context is untested, but it should/could work :)  Either way it
  doesn't make the rest of the code bad. Wez -- please take a looksie for me
  :)
  
  
Index: php4/ext/standard/basic_functions.h
diff -u php4/ext/standard/basic_functions.h:1.105 
php4/ext/standard/basic_functions.h:1.106
--- php4/ext/standard/basic_functions.h:1.105   Sat Mar 23 18:03:04 2002
+++ php4/ext/standard/basic_functions.h Sat Sep  7 11:45:29 2002
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: basic_functions.h,v 1.105 2002/03/23 23:03:04 derick Exp $ */
+/* $Id: basic_functions.h,v 1.106 2002/09/07 15:45:29 sterling Exp $ */
 
 #ifndef BASIC_FUNCTIONS_H
 #define BASIC_FUNCTIONS_H
@@ -141,7 +141,10 @@
 
        HashTable sm_protected_env_vars;
        char *sm_allowed_env_vars;
- 
+
+       /* file.c */
+       char *user_agent;
+       
        /* pageinfo.c */
        long page_uid;
        long page_gid;
Index: php4/ext/standard/file.c
diff -u php4/ext/standard/file.c:1.251 php4/ext/standard/file.c:1.252
--- php4/ext/standard/file.c:1.251      Thu Sep  5 10:21:55 2002
+++ php4/ext/standard/file.c    Sat Sep  7 11:45:29 2002
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: file.c,v 1.251 2002/09/05 14:21:55 hyanantha Exp $ */
+/* $Id: file.c,v 1.252 2002/09/07 15:45:29 sterling Exp $ */
 
 /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
 
@@ -34,6 +34,7 @@
 #include "ext/standard/php_filestat.h"
 #include "php_open_temporary_file.h"
 #include "ext/standard/basic_functions.h"
+#include "php_ini.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -155,6 +156,10 @@
 }
 
 
+PHP_INI_BEGIN()
+       STD_PHP_INI_ENTRY("user_agent", NULL, PHP_INI_ALL, OnUpdateString, user_agent, 
+php_basic_globals, basic_globals)
+PHP_INI_END()
+
 PHP_MINIT_FUNCTION(file)
 {
        le_stream = zend_register_list_destructors_ex(_file_stream_dtor, NULL, 
"stream", module_number);
@@ -166,6 +171,8 @@
        file_globals_ctor(&file_globals TSRMLS_CC);
 #endif
 
+       REGISTER_INI_ENTRIES();
+       
        REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT);
Index: php4/ext/standard/http_fopen_wrapper.c
diff -u php4/ext/standard/http_fopen_wrapper.c:1.42 
php4/ext/standard/http_fopen_wrapper.c:1.43
--- php4/ext/standard/http_fopen_wrapper.c:1.42 Sat Sep  7 03:13:43 2002
+++ php4/ext/standard/http_fopen_wrapper.c      Sat Sep  7 11:45:29 2002
@@ -18,7 +18,7 @@
    |          Wez Furlong <[EMAIL PROTECTED]>                          |
    +----------------------------------------------------------------------+
  */
-/* $Id: http_fopen_wrapper.c,v 1.42 2002/09/07 07:13:43 iliaa Exp $ */
+/* $Id: http_fopen_wrapper.c,v 1.43 2002/09/07 15:45:29 sterling Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -88,6 +88,8 @@
        int use_ssl;
        char *scratch = NULL;
        char *tmp = NULL;
+       char *ua_str = NULL;
+       zval **ua_zval;
        int scratch_len = 0;
        int body = 0;
        char location[HTTP_HEADER_BLOCK_SIZE];
@@ -196,7 +198,34 @@
        else if (snprintf(scratch, scratch_len, "Host: %s\r\n", resource->host) > 0)
                php_stream_write(stream, scratch, strlen(scratch));
 
-       php_stream_write_string(stream, "User-Agent: PHP/" PHP_VERSION "\r\n\r\n");
+       if (context && 
+               php_stream_context_get_option(context, "http", "user_agent", (zval **) 
+&ua_zval) == FAILURE &&
+               php_stream_context_get_option(context, "https", "user_agent", (zval 
+**) &ua_zval) == FAILURE) {
+               ua_str = Z_STRVAL_PP(ua_zval);
+       } else if (BG(user_agent)) {
+               ua_str = BG(user_agent);
+       }
+
+       if (ua_str) {
+#define _UA_HEADER "User-Agent: %s\r\n"
+               char *ua;
+               size_t ua_len;
+
+               ua_len = sizeof(_UA_HEADER) + strlen(ua_str);
+               ua = emalloc(ua_len + 1);
+               if ((ua_len = snprintf(ua, ua_len, _UA_HEADER, ua_str)) > 0) {
+                       ua[ua_len] = 0;
+                       php_stream_write(stream, ua, ua_len);
+               } else {
+                       php_error(E_WARNING, "Cannot construct User-agent header");
+               }
+
+               if (ua) {
+                       efree(ua);
+               }
+       }
+
+       php_stream_write_string(stream, "\r\n");
 
        location[0] = '\0';
 
@@ -241,66 +270,64 @@
                }
        }
        
-       if( reqok ) {
-               /* read past HTTP headers */
+       /* read past HTTP headers */
        
-               http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE);
+       http_header_line = emalloc(HTTP_HEADER_BLOCK_SIZE);
 
-               while (!body && !php_stream_eof(stream))        {
+       while (!body && !php_stream_eof(stream))        {
                
-                       if (php_stream_gets(stream, http_header_line, 
HTTP_HEADER_BLOCK_SIZE-1) != NULL)        {
-                               char *p;
-                               int found_eol = 0;
-                               int http_header_line_length;
+               if (php_stream_gets(stream, http_header_line, 
+HTTP_HEADER_BLOCK_SIZE-1) != NULL)        {
+                       char *p;
+                       int found_eol = 0;
+                       int http_header_line_length;
                        
-                               http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0';
-                               p = http_header_line;
-                               while(*p)       {
-                                       while(*p == '\n' || *p == '\r') {
-                                               *p = '\0';
-                                               p--;
-                                               found_eol = 1;
-                                       }
-                                       if (found_eol)
-                                               break;
-                                       p++;
+                       http_header_line[HTTP_HEADER_BLOCK_SIZE-1] = '\0';
+                       p = http_header_line;
+                       while(*p)       {
+                               while(*p == '\n' || *p == '\r') {
+                                       *p = '\0';
+                                       p--;
+                                       found_eol = 1;
                                }
-                               http_header_line_length = p-http_header_line+1;
+                               if (found_eol)
+                                       break;
+                               p++;
+                       }
+                       http_header_line_length = p-http_header_line+1;
                
-                               if (!strncasecmp(http_header_line, "Location: ", 10)) {
-                                       strlcpy(location, http_header_line + 10, 
sizeof(location));
-                               } else if (!strncasecmp(http_header_line, 
"Content-Type: ", 14)) {
-                                       php_stream_notify_info(context, 
PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0);
-                               } else if (!strncasecmp(http_header_line, 
"Content-Length: ", 16)) {
-                                       file_size = atoi(http_header_line + 16);
-                                       php_stream_notify_file_size(context, 
file_size, http_header_line, 0);
-                               }
+                       if (!strncasecmp(http_header_line, "Location: ", 10)) {
+                               strlcpy(location, http_header_line + 10, 
+sizeof(location));
+                       } else if (!strncasecmp(http_header_line, "Content-Type: ", 
+14)) {
+                               php_stream_notify_info(context, 
+PHP_STREAM_NOTIFY_MIME_TYPE_IS, http_header_line + 14, 0);
+                       } else if (!strncasecmp(http_header_line, "Content-Length: ", 
+16)) {
+                               file_size = atoi(http_header_line + 16);
+                               php_stream_notify_file_size(context, file_size, 
+http_header_line, 0);
+                       }
        
-                               if (http_header_line[0] == '\0')
-                                       body = 1;
-                               else    {
-                                       zval *http_header;
 
-                                       MAKE_STD_ZVAL(http_header);
+                       if (http_header_line[0] == '\0')
+                               body = 1;
+                       else    {
+                               zval *http_header;
 
-                                       ZVAL_STRINGL(http_header, http_header_line, 
http_header_line_length, 1);
+                               MAKE_STD_ZVAL(http_header);
+
+                               ZVAL_STRINGL(http_header, http_header_line, 
+http_header_line_length, 1);
                                
-                                       
zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header, sizeof(zval *), 
NULL);
-                               }
+                               
+zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header, sizeof(zval 
+*), NULL);
                        }
-                       else
-                               break;
                }
-       } 
-       
-       if (!reqok)     {               
+               else
+                       break;
+       }
+
+       if (!reqok)     {
+                       
                if (location[0] != '\0')
                        php_stream_notify_info(context, PHP_STREAM_NOTIFY_REDIRECTED, 
location, 0);
 
                php_stream_close(stream);
                stream = NULL;
-               zval_dtor(response_header);
-               FREE_ZVAL(response_header);
 
                if (location[0] != '\0')        {
 



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

Reply via email to