+static void http_message_toobject_recursive(http_message *msg, zval *obj TSRMLS_DC)
+{
+ zval *headers;
+
+ add_property_long(obj, "type", msg->type);
+ switch (msg->type)
+ {
+ case HTTP_MSG_RESPONSE:
+ add_property_double(obj, "httpVersion", msg->info.response.http_version);
+ add_property_long(obj, "responseCode", msg->info.response.code);
+ break;
+
+ case HTTP_MSG_REQUEST:
+ add_property_double(obj, "httpVersion", msg->info.request.http_version);
+ add_property_string(obj, "requestMethod", msg->info.request.method, 1);
+ add_property_string(obj, "requestUri", msg->info.request.URI, 1);
+ break;
+ }
+
+ MAKE_STD_ZVAL(headers);
+ array_init(headers);
+ zend_hash_copy(Z_ARRVAL_P(headers), &msg->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
+ add_property_zval(obj, "headers", headers);
+ zval_ptr_dtor(&headers);
+
+ add_property_stringl(obj, "body", PHPSTR_VAL(msg), PHPSTR_LEN(msg), 1);
+
+ if (msg->parent) {
+ zval *parent;
+
+ MAKE_STD_ZVAL(parent);
+ object_init(parent);
+ add_property_zval(obj, "parentMessage", parent);
+ http_message_toobject_recursive(msg->parent, parent TSRMLS_CC);
+ zval_ptr_dtor(&parent);
+ } else {
+ add_property_null(obj, "parentMessage");
+ }
+ http_message_dtor(msg);
+ efree(msg);
+}