case HTTP_PUT:
{
php_stream_statbuf ssb;
- php_stream *stream = php_stream_open_wrapper(Z_STRVAL_P(GET_PROP(putFile)), "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
+ php_stream *stream = php_stream_open_wrapper_ex(Z_STRVAL_P(GET_PROP(putFile)), "rb", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL, HTTP_DEFAULT_STREAM_CONTEXT);
if (stream && !php_stream_stat(stream, &ssb)) {
obj->request->body = http_request_body_init_ex(obj->request->body, HTTP_REQUEST_BODY_UPLOADFILE, stream, ssb.sb.st_size, 1);
zval **ct_header;
/* only override if not already set */
- if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(headers), "Content-Type", sizeof("Content-Type"), (void **) &ct_header)) && (Z_TYPE_PP(ct_header) == IS_STRING)) {
+ if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(headers), "Content-Type", sizeof("Content-Type"), (void **) &ct_header))) {
add_assoc_stringl(*headers, "Content-Type", Z_STRVAL_P(ctype), Z_STRLEN_P(ctype), 1);
}
} else {
zval *headers, *message, *resp;
if (zval_is_true(GET_PROP(recordHistory))) {
- /* we need to act like a zipper, as we'll receive
- * the requests and the responses in separate chains
- * for redirects
- */
- http_message *response = http_message_dup(msg);
+ zval *hist, *history = GET_PROP(history);
+ http_message *response = http_message_parse(PHPSTR_VAL(&obj->request->conv.response), PHPSTR_LEN(&obj->request->conv.response));
http_message *request = http_message_parse(PHPSTR_VAL(&obj->request->conv.request), PHPSTR_LEN(&obj->request->conv.request));
- if (request && response) {
- int num_req, num_resp;
-
- http_message_count(num_req, request);
- http_message_count(num_resp, response);
-
- /*
- stuck request messages in between response messages
-
- response request
- v v
- response request
- v v
- response request
- ==================
- response > request
- ,---'
- response > request
- ,---'
- response > request
- */
- if (num_req == num_resp) {
- int i;
- zval *hist, *history = GET_PROP(history);
- http_message *res_tmp = response, *req_tmp = request, *req_par, *res_par;
-
- for (i = 0; i < num_req; ++i) {
- res_par = res_tmp->parent;
- req_par = req_tmp->parent;
- res_tmp->parent = req_tmp;
- req_tmp->parent = res_par;
- res_tmp = res_par;
- req_tmp = req_par;
- }
-
- MAKE_STD_ZVAL(hist);
- ZVAL_OBJVAL(hist, http_message_object_new_ex(http_message_object_ce, response, NULL), 0);
- if (Z_TYPE_P(history) == IS_OBJECT) {
- http_message_object_prepend(hist, history);
- }
- SET_PROP(history, hist);
- zval_ptr_dtor(&hist);
- }
- /* TODO: error? */
- } else {
- http_message_free(&response);
- http_message_free(&request);
+ MAKE_STD_ZVAL(hist);
+ ZVAL_OBJVAL(hist, http_message_object_new_ex(http_message_object_ce, http_message_interconnect(response, request), NULL), 0);
+ if (Z_TYPE_P(history) == IS_OBJECT) {
+ http_message_object_prepend(hist, history);
}
+ SET_PROP(history, hist);
+ zval_ptr_dtor(&hist);
}
UPD_PROP(long, responseCode, msg->http.info.response.code);