X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_inflatestream_object.c;h=acd1257e03332db22fda5dd71e296f12cbbdc960;hp=131d7189685bff857b45697b55375c90d166f16e;hb=f3fefe49c3c19564bddacaebd5fecb6de231b988;hpb=5ecd200ee2e3d887f0393948aec1914867e64293 diff --git a/http_inflatestream_object.c b/http_inflatestream_object.c index 131d718..acd1257 100644 --- a/http_inflatestream_object.c +++ b/http_inflatestream_object.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2006, Michael Wallner | + | Copyright (c) 2004-2007, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -30,6 +30,11 @@ HTTP_BEGIN_ARGS(__construct, 0) HTTP_ARG_VAL(flags, 0) HTTP_END_ARGS; +HTTP_BEGIN_ARGS(factory, 0) + HTTP_ARG_VAL(flags, 0) + HTTP_ARG_VAL(class_name, 0) +HTTP_END_ARGS; + HTTP_BEGIN_ARGS(update, 1) HTTP_ARG_VAL(data, 0) HTTP_END_ARGS; @@ -42,7 +47,7 @@ HTTP_BEGIN_ARGS(finish, 0) HTTP_ARG_VAL(data, 0) HTTP_END_ARGS; -#define OBJ_PROP_CE http_inflatestream_object_ce +#define THIS_CE http_inflatestream_object_ce zend_class_entry *http_inflatestream_object_ce; zend_function_entry http_inflatestream_object_fe[] = { HTTP_INFLATE_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) @@ -50,6 +55,8 @@ zend_function_entry http_inflatestream_object_fe[] = { HTTP_INFLATE_ME(flush, ZEND_ACC_PUBLIC) HTTP_INFLATE_ME(finish, ZEND_ACC_PUBLIC) + HTTP_INFLATE_ME(factory, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + EMPTY_FUNCTION_ENTRY }; static zend_object_handlers http_inflatestream_object_handlers; @@ -60,9 +67,9 @@ PHP_MINIT_FUNCTION(http_inflatestream_object) http_inflatestream_object_handlers.clone_obj = _http_inflatestream_object_clone_obj; #ifndef WONKY - DCL_CONST(long, "FLUSH_NONE", HTTP_ENCODING_STREAM_FLUSH_NONE); - DCL_CONST(long, "FLUSH_SYNC", HTTP_ENCODING_STREAM_FLUSH_SYNC); - DCL_CONST(long, "FLUSH_FULL", HTTP_ENCODING_STREAM_FLUSH_FULL); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("FLUSH_NONE")-1, HTTP_ENCODING_STREAM_FLUSH_NONE TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("FLUSH_SYNC")-1, HTTP_ENCODING_STREAM_FLUSH_SYNC TSRMLS_CC); + zend_declare_class_constant_long(THIS_CE, ZEND_STRS("FLUSH_FULL")-1, HTTP_ENCODING_STREAM_FLUSH_FULL TSRMLS_CC); #endif return SUCCESS; @@ -128,11 +135,7 @@ void _http_inflatestream_object_free(zend_object *object TSRMLS_DC) } /* {{{ proto void HttpInflateStream::__construct([int flags = 0]) - * - * Creates a new HttpInflateStream object instance. - * - * Accepts an optional int parameter specifying how to initialize the inflate stream. - */ + Creates a new HttpInflateStream object instance. */ PHP_METHOD(HttpInflateStream, __construct) { long flags = 0; @@ -151,14 +154,29 @@ PHP_METHOD(HttpInflateStream, __construct) } /* }}} */ +/* {{{ proto HttpInflateStream HttpInflateStream::factory([int flags[, string class = "HttpInflateStream"]]) + Creates a new HttpInflateStream object instance. */ +PHP_METHOD(HttpInflateStream, factory) +{ + long flags = 0; + char *cn = NULL; + int cl = 0; + + SET_EH_THROW_HTTP(); + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &flags, &cn, &cl)) { + zend_object_value ov; + http_encoding_stream *s = http_encoding_inflate_stream_init(NULL, flags & 0x0fffffff); + + if (SUCCESS == http_object_new(&ov, cn, cl, _http_inflatestream_object_new_ex, http_inflatestream_object_ce, s, NULL)) { + RETVAL_OBJVAL(ov, 0); + } + } + SET_EH_NORMAL(); +} +/* }}} */ + /* {{{ proto string HttpInflateStream::update(string data) - * - * Passes more data through the inflate stream. - * - * Expects a string parameter containing (a part of) the data to inflate. - * - * Returns inflated data on success or FALSE on failure. - */ + Passes more data through the inflate stream. */ PHP_METHOD(HttpInflateStream, update) { int data_len; @@ -187,11 +205,7 @@ PHP_METHOD(HttpInflateStream, update) /* }}} */ /* {{{ proto string HttpInflateStream::flush([string data]) - * - * Flush the inflate stream. - * - * Returns some inflated data as string on success or FALSE on failure. - */ + Flush the inflate stream. */ PHP_METHOD(HttpInflateStream, flush) { int data_len = 0; @@ -219,11 +233,7 @@ PHP_METHOD(HttpInflateStream, flush) /* }}} */ /* {{{ proto string HttpInflateStream::finish([string data]) - * - * Finalizes the inflate stream. The inflate stream can be reused after finalizing. - * - * Returns the final part of inflated data. - */ + Finalizes the inflate stream. The inflate stream can be reused after finalizing. */ PHP_METHOD(HttpInflateStream, finish) { int data_len = 0; @@ -267,7 +277,6 @@ PHP_METHOD(HttpInflateStream, finish) } /* }}} */ - #endif /* ZEND_ENGINE_2 && HTTP_HAVE_ZLIB*/ /*