static void message_headers(php_http_message_t *msg, php_http_buffer_t *str)
{
char *tmp = NULL;
+ size_t len = 0;
- switch (msg->type) {
- case PHP_HTTP_REQUEST:
- php_http_buffer_appendf(str, PHP_HTTP_INFO_REQUEST_FMT_ARGS(&msg->http, tmp, PHP_HTTP_CRLF));
- PTR_FREE(tmp);
- break;
-
- case PHP_HTTP_RESPONSE:
- php_http_buffer_appendf(str, PHP_HTTP_INFO_RESPONSE_FMT_ARGS(&msg->http, tmp, PHP_HTTP_CRLF));
- PTR_FREE(tmp);
- break;
-
- default:
- break;
- }
-
+ php_http_info_to_string((php_http_info_t *) msg, &tmp, &len, PHP_HTTP_CRLF TSRMLS_CC);
php_http_message_update_headers(msg);
+
+ php_http_buffer_append(str, tmp, len);
php_http_header_to_string(str, &msg->hdrs);
+ PTR_FREE(tmp);
}
void php_http_message_to_callback(php_http_message_t *msg, php_http_pass_callback_t cb, void *cb_arg)
if (c > 1) {
php_http_message_t *tmp = msg, **arr;
- arr = ecalloc(c, sizeof(**arr));
+ arr = ecalloc(c, sizeof(*arr));
for (i = 0; i < c; ++i) {
arr[i] = tmp;
tmp = tmp->parent;
array_copy(&obj->message->hdrs, Z_ARRVAL_P(return_value));
}
static void php_http_message_object_prophandler_set_headers(php_http_message_object_t *obj, zval *value) {
- HashTable *headers;
- zval *orig_value = value;
+ int converted = 0;
if (Z_TYPE_P(value) != IS_ARRAY && Z_TYPE_P(value) != IS_OBJECT) {
- convert_to_array_ex(value);
+ converted = 1;
+ SEPARATE_ZVAL(value);
+ convert_to_array(value);
}
- headers = HASH_OF(value);
zend_hash_clean(&obj->message->hdrs);
- array_copy(headers, &obj->message->hdrs);
+ array_copy(HASH_OF(value), &obj->message->hdrs);
- if (orig_value != value) {
+ if (converted) {
zval_ptr_dtor(value);
}
}
php_http_message_object_t **objects;
int last;
- objects = ecalloc(i, sizeof(**objects));
+ objects = ecalloc(i, sizeof(*objects));
/* we are the first message */
objects[0] = obj;
if (!body_obj->body) {
body_obj->body = php_http_message_body_init(NULL, NULL);
+ php_stream_to_zval(php_http_message_body_stream(body_obj->body), body_obj->gc);
}
if (msg_obj->body) {
zend_object_release(&msg_obj->body->zo);
if (handler) {
php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, object);
+ zval tmp2;
PHP_HTTP_MESSAGE_OBJECT_INIT(obj);
- handler->read(obj, tmp);
+ handler->read(obj, &tmp2);
zval_ptr_dtor(return_value);
- ZVAL_COPY_VALUE(return_value, tmp);
+ ZVAL_COPY_VALUE(return_value, &tmp2);
}
zend_string_release(member_name);
return return_value;
if (!obj->body) {
php_http_message_object_init_body_object(obj);
-
}
if (obj->body) {
RETVAL_OBJECT(&obj->body->zo, 1);
static PHP_METHOD(HttpMessage, getInfo)
{
if (SUCCESS == zend_parse_parameters_none()) {
- char *str, *tmp = NULL;
- size_t len;
+ char *str = NULL;
+ size_t len = 0;
php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, getThis());
PHP_HTTP_MESSAGE_OBJECT_INIT(obj);
-
- switch (obj->message->type) {
- case PHP_HTTP_REQUEST:
- len = spprintf(&str, 0, PHP_HTTP_INFO_REQUEST_FMT_ARGS(&obj->message->http, tmp, ""));
- PTR_FREE(tmp);
- break;
- case PHP_HTTP_RESPONSE:
- len = spprintf(&str, 0, PHP_HTTP_INFO_RESPONSE_FMT_ARGS(&obj->message->http, tmp, ""));
- PTR_FREE(tmp);
- break;
- default:
- RETURN_NULL();
- break;
- }
+ php_http_info_to_string((php_http_info_t *) obj->message, &str, &len, "");
RETVAL_STR(php_http_cs2zs(str, len));
}