X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_message.c;h=8ba4f498eea952f632ade56b85eb4fd78eb63404;hp=176a27b56a2f489b288a4733725f700ae42b5841;hb=6cc24086f57aa1e8f4d6a2c12361635e7c24f60f;hpb=907d2e474a9ee60e99aa8385a353746b5e9c388a diff --git a/php_http_message.c b/php_http_message.c index 176a27b..8ba4f49 100644 --- a/php_http_message.c +++ b/php_http_message.c @@ -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; @@ -606,6 +610,12 @@ PHP_HTTP_EMPTY_ARGS(__toString); PHP_HTTP_BEGIN_ARGS(toString, 0) PHP_HTTP_ARG_VAL(include_parent, 0) PHP_HTTP_END_ARGS; +PHP_HTTP_BEGIN_ARGS(toCallback, 1) + PHP_HTTP_ARG_VAL(callback, 0) +PHP_HTTP_END_ARGS; +PHP_HTTP_BEGIN_ARGS(toStream, 1) + PHP_HTTP_ARG_VAL(stream, 0) +PHP_HTTP_END_ARGS; PHP_HTTP_EMPTY_ARGS(count); @@ -641,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) @@ -663,6 +674,8 @@ zend_function_entry php_http_message_method_entry[] = { PHP_HTTP_MESSAGE_ME(setHttpVersion, ZEND_ACC_PUBLIC) PHP_HTTP_MESSAGE_ME(getParentMessage, ZEND_ACC_PUBLIC) PHP_HTTP_MESSAGE_ME(toString, ZEND_ACC_PUBLIC) + PHP_HTTP_MESSAGE_ME(toCallback, ZEND_ACC_PUBLIC) + PHP_HTTP_MESSAGE_ME(toStream, ZEND_ACC_PUBLIC) /* implements Countable */ PHP_HTTP_MESSAGE_ME(count, ZEND_ACC_PUBLIC) @@ -1250,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; @@ -1692,6 +1719,46 @@ PHP_METHOD(HttpMessage, toString) RETURN_EMPTY_STRING(); } +PHP_METHOD(HttpMessage, toStream) +{ + zval *zstream; + + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream)) { + php_http_message_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_stream *s; + + php_stream_from_zval(s, &zstream); + + if (!obj->message) { + obj->message = php_http_message_init(NULL, 0 TSRMLS_CC); + } + + php_http_message_to_callback(obj->message, (php_http_pass_callback_t) _php_stream_write, s); + } +} + +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); + + fcd.fcz = getThis(); + Z_ADDREF_P(fcd.fcz); + TSRMLS_SET_CTX(fcd.ts); + + php_http_message_to_callback(obj->message, php_http_pass_fcall_callback, &fcd); + zend_fcall_info_args_clear(&fcd.fci, 1); + + zval_ptr_dtor(&fcd.fcz); + RETURN_TRUE; + } + RETURN_FALSE; +} + PHP_METHOD(HttpMessage, serialize) { if (SUCCESS == zend_parse_parameters_none()) {