don't crash if user extends abstract classes
[m6w6/ext-http] / php_http_message.c
index b25f69741126b67d85ab6f167f63558432b8ba64..685aba146c5935a19b324264a780cbc458e64a25 100644 (file)
@@ -542,6 +542,10 @@ PHP_HTTP_BEGIN_ARGS(setBody, 1)
        PHP_HTTP_ARG_VAL(body, 0)
 PHP_HTTP_END_ARGS;
 
+PHP_HTTP_BEGIN_ARGS(addBody, 1)
+       PHP_HTTP_ARG_VAL(body, 0)
+PHP_HTTP_END_ARGS;
+
 PHP_HTTP_BEGIN_ARGS(getHeader, 1)
        PHP_HTTP_ARG_VAL(header, 0)
 PHP_HTTP_END_ARGS;
@@ -610,7 +614,7 @@ PHP_HTTP_BEGIN_ARGS(toCallback, 1)
        PHP_HTTP_ARG_VAL(callback, 0)
 PHP_HTTP_END_ARGS;
 PHP_HTTP_BEGIN_ARGS(toStream, 1)
-       HTTP_ARG_VAL(stream, 0)
+       PHP_HTTP_ARG_VAL(stream, 0)
 PHP_HTTP_END_ARGS;
 
 PHP_HTTP_EMPTY_ARGS(count);
@@ -647,6 +651,7 @@ zend_function_entry php_http_message_method_entry[] = {
        PHP_HTTP_MESSAGE_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
        PHP_HTTP_MESSAGE_ME(getBody, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_ME(setBody, ZEND_ACC_PUBLIC)
+       PHP_HTTP_MESSAGE_ME(addBody, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_ME(getHeader, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_ME(setHeader, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_ME(addHeader, ZEND_ACC_PUBLIC)
@@ -1258,6 +1263,20 @@ PHP_METHOD(HttpMessage, setBody)
        RETVAL_ZVAL(getThis(), 1, 0);
 }
 
+PHP_METHOD(HttpMessage, addBody)
+{
+       zval *new_body;
+
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &new_body, php_http_message_body_class_entry)) {
+               php_http_message_body_object_t *old_obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+               php_http_message_body_object_t *new_obj = zend_object_store_get_object(new_body TSRMLS_CC);
+
+               php_http_message_body_to_callback(old_obj->body, (php_http_pass_callback_t) php_http_message_body_append, new_obj->body, 0, 0);
+       }
+       RETVAL_ZVAL(getThis(), 1, 0);
+}
+
+
 PHP_METHOD(HttpMessage, getHeader)
 {
        char *header_str;
@@ -1720,9 +1739,7 @@ PHP_METHOD(HttpMessage, toStream)
 
 PHP_METHOD(HttpMessage, toCallback)
 {
-       zend_bool include_parent = 0;
        php_http_pass_fcall_arg_t fcd;
-       long offset = 0, forlen = 0;
 
        if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fcd.fci, &fcd.fcc)) {
                php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);