> 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
>   :)
>   
>

grr.... Some other ws fixes got mixed in...

I'll revert and then recommit, just look at the top part of the patch..

-Sterling

> 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
> 

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

Reply via email to