diff options
author | markmc <markmc> | 2003-09-11 16:08:19 +0000 |
---|---|---|
committer | markmc <markmc> | 2003-09-11 16:08:19 +0000 |
commit | 9edf7e56bbe5d396abbd47d4ed9fc1a14c64531c (patch) | |
tree | 04476b12c5715ad5698281a5bf710160369e7dad /rdr/ZlibOutStream.cxx | |
parent | 937b906f0d8cd1b70521ea1ac8f20b457a22c3bb (diff) | |
download | libtdevnc-9edf7e56bbe5d396abbd47d4ed9fc1a14c64531c.tar.gz libtdevnc-9edf7e56bbe5d396abbd47d4ed9fc1a14c64531c.zip |
2003-09-11 Mark McLoughlin <mark@skynet.ie>
* rdr/Exception.h, rdr/FdInStream.cxx, rdr/FdInStream.h,
rdr/FdOutStream.cxx, rdr/FdOutStream.h, rdr/FixedMemOutStream.h,
rdr/InStream.cxx, rdr/InStream.h, rdr/MemInStream.h,
rdr/MemOutStream.h, rdr/NullOutStream.cxx, rdr/NullOutStream.h,
rdr/OutStream.h, rdr/ZlibInStream.cxx, rdr/ZlibInStream.h,
rdr/ZlibOutStream.cxx, rdr/ZlibOutStream.h, rdr/types.h,
zrle.cxx, zrleDecode.h, zrleEncode.h: remove original
C++ ZRLE implementation. Its been ported to C.
* NEWS: copy the existing ChangeLog to here and make
this a more detailed ChangeLog.
Diffstat (limited to 'rdr/ZlibOutStream.cxx')
-rw-r--r-- | rdr/ZlibOutStream.cxx | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/rdr/ZlibOutStream.cxx b/rdr/ZlibOutStream.cxx deleted file mode 100644 index e324998..0000000 --- a/rdr/ZlibOutStream.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// -// Copyright (C) 2002 RealVNC Ltd. All Rights Reserved. -// -// This is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This software is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this software; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -#include <rdr/ZlibOutStream.h> -#include <rdr/Exception.h> -#include <zlib.h> - -extern "C" { - extern void rfbLog(const char *format, ...); -} - -using namespace rdr; - -enum { DEFAULT_BUF_SIZE = 16384 }; - -ZlibOutStream::ZlibOutStream(OutStream* os, int bufSize_) - : underlying(os), bufSize(bufSize_ ? bufSize_ : DEFAULT_BUF_SIZE), offset(0) -{ - zs = new z_stream; - zs->zalloc = Z_NULL; - zs->zfree = Z_NULL; - zs->opaque = Z_NULL; - if (deflateInit(zs, Z_DEFAULT_COMPRESSION) != Z_OK) { - delete zs; - throw Exception("ZlibOutStream: deflateInit failed"); - } - ptr = start = new U8[bufSize]; - end = start + bufSize; -} - -ZlibOutStream::~ZlibOutStream() -{ - try { - flush(); - } catch (Exception&) { - } - delete [] start; - deflateEnd(zs); - delete zs; -} - -void ZlibOutStream::setUnderlying(OutStream* os) -{ - underlying = os; -} - -int ZlibOutStream::length() -{ - return offset + ptr - start; -} - -void ZlibOutStream::flush() -{ - zs->next_in = start; - zs->avail_in = ptr - start; - -// rfbLog("zos flush: avail_in %d\n",zs->avail_in); - - while (zs->avail_in != 0) { - - do { - underlying->check(1); - zs->next_out = underlying->getptr(); - zs->avail_out = underlying->getend() - underlying->getptr(); - -// rfbLog("zos flush: calling deflate, avail_in %d, avail_out %d\n", -// zs->avail_in,zs->avail_out); - int rc = deflate(zs, Z_SYNC_FLUSH); - if (rc != Z_OK) throw Exception("ZlibOutStream: deflate failed"); - -// rfbLog("zos flush: after deflate: %d bytes\n", -// zs->next_out-underlying->getptr()); - - underlying->setptr(zs->next_out); - } while (zs->avail_out == 0); - } - - offset += ptr - start; - ptr = start; -} - -int ZlibOutStream::overrun(int itemSize, int nItems) -{ -// rfbLog("ZlibOutStream overrun\n"); - - if (itemSize > bufSize) - throw Exception("ZlibOutStream overrun: max itemSize exceeded"); - - while (end - ptr < itemSize) { - zs->next_in = start; - zs->avail_in = ptr - start; - - do { - underlying->check(1); - zs->next_out = underlying->getptr(); - zs->avail_out = underlying->getend() - underlying->getptr(); - -// rfbLog("zos overrun: calling deflate, avail_in %d, avail_out %d\n", -// zs->avail_in,zs->avail_out); - - int rc = deflate(zs, 0); - if (rc != Z_OK) throw Exception("ZlibOutStream: deflate failed"); - -// rfbLog("zos overrun: after deflate: %d bytes\n", -// zs->next_out-underlying->getptr()); - - underlying->setptr(zs->next_out); - } while (zs->avail_out == 0); - - // output buffer not full - - if (zs->avail_in == 0) { - offset += ptr - start; - ptr = start; - } else { - // but didn't consume all the data? try shifting what's left to the - // start of the buffer. - rfbLog("z out buf not full, but in data not consumed\n"); - memmove(start, zs->next_in, ptr - zs->next_in); - offset += zs->next_in - start; - ptr -= zs->next_in - start; - } - } - - if (itemSize * nItems > end - ptr) - nItems = (end - ptr) / itemSize; - - return nItems; -} |