-/* {{{ proto array http_split_response(string http_response)
- *
- * This function splits an HTTP response into an array with headers and the
- * content body. The returned array may look simliar to the following example:
- *
- * <pre>
- * <?php
- * array(
- * 0 => array(
- * 'Response Status' => '200 Ok',
- * 'Content-Type' => 'text/plain',
- * 'Content-Language' => 'en-US'
- * ),
- * 1 => "Hello World!"
- * );
- * ?>
- * </pre>
- */
-PHP_FUNCTION(http_split_response)
-{
- char *response, *body;
- int response_len;
- size_t body_len;
- zval *zheaders;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &response, &response_len) != SUCCESS) {
- RETURN_FALSE;
- }
-
- MAKE_STD_ZVAL(zheaders);
- array_init(zheaders);
-
- if (SUCCESS != http_split_response(response, response_len, Z_ARRVAL_P(zheaders), &body, &body_len)) {
- RETURN_FALSE;
- }
-
- array_init(return_value);
- add_index_zval(return_value, 0, zheaders);
- add_index_stringl(return_value, 1, body, body_len, 0);
-}
-/* }}} */
-
-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);
-}
-