} else if (ops->rsrc) {
h->rf = php_http_resource_factory_init(NULL, h->ops->rsrc, h, NULL);
}
- h->buffer = php_http_buffer_init(NULL);
- h->parser = php_http_message_parser_init(NULL TSRMLS_CC);
- h->message = php_http_message_init(NULL, 0 TSRMLS_CC);
+ h->request.buffer = php_http_buffer_init(NULL);
+ h->request.parser = php_http_message_parser_init(NULL TSRMLS_CC);
+ h->request.message = php_http_message_init(NULL, 0 TSRMLS_CC);
+
+ h->response.buffer = php_http_buffer_init(NULL);
+ h->response.parser = php_http_message_parser_init(NULL TSRMLS_CC);
+ h->response.message = php_http_message_init(NULL, 0 TSRMLS_CC);
TSRMLS_SET_CTX(h->ts);
php_http_resource_factory_free(&h->rf);
- php_http_message_parser_free(&h->parser);
- php_http_message_free(&h->message);
- php_http_buffer_free(&h->buffer);
+ php_http_message_parser_free(&h->request.parser);
+ php_http_message_free(&h->request.message);
+ php_http_buffer_free(&h->request.buffer);
+
+ php_http_message_parser_free(&h->response.parser);
+ php_http_message_free(&h->response.message);
+ php_http_buffer_free(&h->response.buffer);
}
PHP_HTTP_API void php_http_client_free(php_http_client_t **h)
} else if (to->ops->rsrc){
to->rf = php_http_resource_factory_init(NULL, to->ops->rsrc, to, NULL);
}
- to->buffer = php_http_buffer_init(NULL);
- to->parser = php_http_message_parser_init(NULL TSRMLS_CC);
- to->message = php_http_message_init(NULL, 0 TSRMLS_CC);
+
+ to->request.buffer = php_http_buffer_init(NULL);
+ to->request.parser = php_http_message_parser_init(NULL TSRMLS_CC);
+ to->request.message = php_http_message_init(NULL, 0 TSRMLS_CC);
+
+ to->response.buffer = php_http_buffer_init(NULL);
+ to->response.parser = php_http_message_parser_init(NULL TSRMLS_CC);
+ to->response.message = php_http_message_init(NULL, 0 TSRMLS_CC);
TSRMLS_SET_CTX(to->ts);
o = ecalloc(1, sizeof(*o));
zend_object_std_init((zend_object *) o, ce TSRMLS_CC);
+#if PHP_VERSION_ID < 50339
+ zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*));
+#else
object_properties_init((zend_object *) o, ce);
-
+#endif
ov.handle = zend_objects_store_put(o, NULL, php_http_client_object_free, NULL TSRMLS_CC);
ov.handlers = &php_http_client_object_handlers;
php_http_client_reset(obj->client);
/* reset transfer info */
- zend_update_property_null(php_http_client_class_entry, zclient, ZEND_STRL("info") TSRMLS_CC);
+ zend_update_property_null(php_http_client_class_entry, zclient, ZEND_STRL("transferInfo") TSRMLS_CC);
/* set client options */
zoptions = zend_read_property(php_http_client_class_entry, zclient, ZEND_STRL("options"), 0 TSRMLS_CC);
zend_update_property(php_http_client_class_entry, zclient, ZEND_STRL("transferInfo"), info TSRMLS_CC);
zval_ptr_dtor(&info);
- if ((msg = obj->client->message)) {
- /* update history */
+ if ((msg = obj->client->response.message)) {
if (i_zend_is_true(zend_read_property(php_http_client_class_entry, zclient, ZEND_STRL("recordHistory"), 0 TSRMLS_CC))) {
zval *new_hist, *old_hist = zend_read_property(php_http_client_class_entry, zclient, ZEND_STRL("history"), 0 TSRMLS_CC);
- zend_object_value ov = php_http_client_object_message(zclient, php_http_message_copy(msg, NULL) TSRMLS_CC);
+ php_http_message_t *zipped = php_http_message_zip(obj->client->response.message, obj->client->request.message);
+ zend_object_value ov = php_http_client_object_message(zclient, zipped TSRMLS_CC);
MAKE_STD_ZVAL(new_hist);
ZVAL_OBJVAL(new_hist, ov, 0);
zend_update_property(php_http_client_class_entry, zclient, ZEND_STRL("responseMessage"), message TSRMLS_CC);
zval_ptr_dtor(&message);
- obj->client->message = php_http_message_init(NULL, 0 TSRMLS_CC);
- msg = msg->parent;
+ obj->client->response.message = php_http_message_init(NULL, 0 TSRMLS_CC);
} else {
zend_update_property_null(php_http_client_class_entry, zclient, ZEND_STRL("responseMessage") TSRMLS_CC);
}
zend_update_property_null(php_http_client_class_entry, zclient, ZEND_STRL("responseMessage") TSRMLS_CC);
}
- /* there might be a 100-Continue response in between */
- while (msg && !PHP_HTTP_MESSAGE_TYPE(REQUEST, msg)) {
- msg = msg->parent;
- }
-
- if (PHP_HTTP_MESSAGE_TYPE(REQUEST, msg)) {
- zval *message;
+ if ((msg = obj->client->request.message)) {
+ if (PHP_HTTP_MESSAGE_TYPE(REQUEST, msg)) {
+ zval *message;
- /* update the actual request message */
- MAKE_STD_ZVAL(message);
- ZVAL_OBJVAL(message, php_http_message_object_new_ex(php_http_message_get_class_entry(), php_http_message_copy_ex(msg, NULL, 0), NULL TSRMLS_CC), 0);
- zend_update_property(php_http_client_class_entry, zclient, ZEND_STRL("requestMessage"), message TSRMLS_CC);
- zval_ptr_dtor(&message);
+ /* update the actual request message */
+ MAKE_STD_ZVAL(message);
+ ZVAL_OBJVAL(message, php_http_message_object_new_ex(php_http_message_get_class_entry(), msg, NULL TSRMLS_CC), 0);
+ zend_update_property(php_http_client_class_entry, zclient, ZEND_STRL("requestMessage"), message TSRMLS_CC);
+ zval_ptr_dtor(&message);
+ obj->client->request.message = php_http_message_init(NULL, 0 TSRMLS_CC);
+ }
}
if (SUCCESS == php_http_client_getopt(obj->client, PHP_HTTP_CLIENT_OPT_PROGRESS_INFO, &progress)) {
RETVAL_FALSE;
with_error_handling(EH_THROW, php_http_exception_get_class_entry()) {
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!", &zreq, php_http_client_request_get_class_entry())) {
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O!", &zreq, php_http_client_request_get_class_entry())) {
if (SUCCESS == php_http_client_object_handle_request(getThis(), &zreq TSRMLS_CC)) {
php_http_client_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
php_http_message_object_t *req = zend_object_store_get_object(zreq TSRMLS_CC);