81
81
#define HTTP_HEADER_CONTENT_LENGTH 16
82
82
#define HTTP_HEADER_TYPE 32
83
83
84
- php_stream * php_stream_url_wrap_http_ex (php_stream_wrapper * wrapper , char * path , char * mode , int options , char * * opened_path , php_stream_context * context , int redirect_max , int header_init STREAMS_DC TSRMLS_DC )
84
+ #define HTTP_WRAPPER_HEADER_INIT 1
85
+ #define HTTP_WRAPPER_REDIRECTED 2
86
+
87
+ php_stream * php_stream_url_wrap_http_ex (php_stream_wrapper * wrapper , char * path , char * mode , int options , char * * opened_path , php_stream_context * context , int redirect_max , int flags STREAMS_DC TSRMLS_DC )
85
88
{
86
89
php_stream * stream = NULL ;
87
90
php_url * resource = NULL ;
@@ -106,6 +109,8 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
106
109
int protocol_version_len = 3 ; /* Default: "1.0" */
107
110
struct timeval timeout ;
108
111
char * user_headers = NULL ;
112
+ int header_init = ((flags & HTTP_WRAPPER_HEADER_INIT ) != 0 );
113
+ int redirected = ((flags & HTTP_WRAPPER_REDIRECTED ) != 0 );
109
114
110
115
tmp_line [0 ] = '\0' ;
111
116
@@ -254,7 +259,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
254
259
if (Z_TYPE_PP (tmpzval ) == IS_STRING && Z_STRLEN_PP (tmpzval ) > 0 ) {
255
260
/* As per the RFC, automatically redirected requests MUST NOT use other methods than
256
261
* GET and HEAD unless it can be confirmed by the user */
257
- if (redirect_max == PHP_URL_REDIRECT_MAX
262
+ if (! redirected
258
263
|| (Z_STRLEN_PP (tmpzval ) == 3 && memcmp ("GET" , Z_STRVAL_PP (tmpzval ), 3 ) == 0 )
259
264
|| (Z_STRLEN_PP (tmpzval ) == 4 && memcmp ("HEAD" ,Z_STRVAL_PP (tmpzval ), 4 ) == 0 )
260
265
) {
@@ -696,7 +701,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
696
701
CHECK_FOR_CNTRL_CHARS (resource -> pass )
697
702
CHECK_FOR_CNTRL_CHARS (resource -> path )
698
703
}
699
- stream = php_stream_url_wrap_http_ex (wrapper , new_path , mode , options , opened_path , context , -- redirect_max , 0 STREAMS_CC TSRMLS_CC );
704
+ stream = php_stream_url_wrap_http_ex (wrapper , new_path , mode , options , opened_path , context , -- redirect_max , HTTP_WRAPPER_REDIRECTED STREAMS_CC TSRMLS_CC );
700
705
} else {
701
706
php_stream_wrapper_log_error (wrapper , options TSRMLS_CC , "HTTP request failed! %s" , tmp_line );
702
707
}
@@ -742,7 +747,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path,
742
747
743
748
php_stream * php_stream_url_wrap_http (php_stream_wrapper * wrapper , char * path , char * mode , int options , char * * opened_path , php_stream_context * context STREAMS_DC TSRMLS_DC )
744
749
{
745
- return php_stream_url_wrap_http_ex (wrapper , path , mode , options , opened_path , context , PHP_URL_REDIRECT_MAX , 1 STREAMS_CC TSRMLS_CC );
750
+ return php_stream_url_wrap_http_ex (wrapper , path , mode , options , opened_path , context , PHP_URL_REDIRECT_MAX , HTTP_WRAPPER_HEADER_INIT STREAMS_CC TSRMLS_CC );
746
751
}
747
752
748
753
static int php_stream_http_stream_stat (php_stream_wrapper * wrapper ,
0 commit comments