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