|
|
|
@ -237,9 +237,11 @@ int make_http_soap_request(zval *this_ptr, |
|
|
|
int http_1_1; |
|
|
|
int http_status; |
|
|
|
int content_type_xml = 0; |
|
|
|
long redirect_max = 20; |
|
|
|
char *content_encoding; |
|
|
|
char *http_msg = NULL; |
|
|
|
zend_bool old_allow_url_fopen; |
|
|
|
php_stream_context *context = NULL; |
|
|
|
|
|
|
|
if (this_ptr == NULL || Z_TYPE_P(this_ptr) != IS_OBJECT) { |
|
|
|
return FALSE; |
|
|
|
@ -307,6 +309,19 @@ int make_http_soap_request(zval *this_ptr, |
|
|
|
phpurl = php_url_parse(location); |
|
|
|
} |
|
|
|
|
|
|
|
if (SUCCESS == zend_hash_find(Z_OBJPROP_P(this_ptr), |
|
|
|
"_stream_context", sizeof("_stream_context"), (void**)&tmp)) { |
|
|
|
context = php_stream_context_from_zval(*tmp, 0); |
|
|
|
} |
|
|
|
|
|
|
|
if (context && |
|
|
|
php_stream_context_get_option(context, "http", "max_redirects", &tmp) == SUCCESS) { |
|
|
|
if (Z_TYPE_PP(tmp) != IS_STRING || !is_numeric_string(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &redirect_max, NULL, 1)) { |
|
|
|
if (Z_TYPE_PP(tmp) == IS_LONG) |
|
|
|
redirect_max = Z_LVAL_PP(tmp); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
try_again: |
|
|
|
if (phpurl == NULL || phpurl->host == NULL) { |
|
|
|
if (phpurl != NULL) {php_url_free(phpurl);} |
|
|
|
@ -953,6 +968,12 @@ try_again: |
|
|
|
} |
|
|
|
phpurl = new_url; |
|
|
|
|
|
|
|
if (--redirect_max < 1) { |
|
|
|
smart_str_free(&soap_headers_z); |
|
|
|
add_soap_fault(this_ptr, "HTTP", "Redirection limit reached, aborting", NULL, NULL TSRMLS_CC); |
|
|
|
return FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
goto try_again; |
|
|
|
} |
|
|
|
} |
|
|
|
|