+/* {{{ proto string HttpDeflateStream::flush([string data])
+ *
+ * Flushes the deflate stream.
+ *
+ * Returns some deflated data as string on success or FALSE on failure.
+ */
+PHP_METHOD(HttpDeflateStream, flush)
+{
+ int data_len = 0;
+ size_t updated_len = 0, encoded_len = 0;
+ char *updated = NULL, *encoded = NULL, *data = NULL;
+ getObject(http_deflatestream_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &data, &data_len)) {
+ RETURN_FALSE;
+ }
+
+ if (!obj->stream && !(obj->stream = http_encoding_deflate_stream_init(NULL, 0))) {
+ RETURN_FALSE;
+ }
+
+ if (data_len) {
+ if (SUCCESS != http_encoding_deflate_stream_update(obj->stream, data, data_len, &updated, &updated_len)) {
+ RETURN_FALSE;
+ }
+ }
+
+ if (SUCCESS == http_encoding_deflate_stream_flush(obj->stream, &encoded, &encoded_len)) {
+ if (updated_len) {
+ updated = erealloc(updated, updated_len + encoded_len + 1);
+ updated[updated_len + encoded_len] = '\0';
+ memcpy(updated + updated_len, encoded, encoded_len);
+ STR_FREE(encoded);
+ updated_len += encoded_len;
+ RETURN_STRINGL(updated, updated_len, 0);
+ } else {
+ RETVAL_STRINGL(encoded, encoded_len, 0);
+ }
+ } else {
+ RETVAL_FALSE;
+ }
+ STR_FREE(updated);
+}
+/* }}} */
+
+/* {{{ proto string HttpDeflateStream::finish([string data])