/*

compress.h

Author: Tatu Ylonen <ylo@cs.hut.fi>

Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
                   All rights reserved

Created: Wed Oct 25 22:12:46 1995 ylo

Interface to packet compression for ssh.

*/

/* RCSID("$Id: compress.h,v 1.1 1999/10/27 03:42:44 damien Exp $"); */

#ifndef COMPRESS_H
#define COMPRESS_H

/* Initializes compression; level is compression level from 1 to 9 (as in
   gzip). */
void buffer_compress_init(int level);

/* Frees any data structures allocated by buffer_compress_init. */
void buffer_compress_uninit();

/* Compresses the contents of input_buffer into output_buffer.  All
   packets compressed using this function will form a single
   compressed data stream; however, data will be flushed at the end of
   every call so that each output_buffer can be decompressed
   independently (but in the appropriate order since they together
   form a single compression stream) by the receiver.  This appends
   the compressed data to the output buffer. */
void buffer_compress(Buffer *input_buffer, Buffer *output_buffer);

/* Uncompresses the contents of input_buffer into output_buffer.  All
   packets uncompressed using this function will form a single
   compressed data stream; however, data will be flushed at the end of
   every call so that each output_buffer.  This must be called for the
   same size units that the buffer_compress was called, and in the
   same order that buffers compressed with that.  This appends the
   uncompressed data to the output buffer. */
void buffer_uncompress(Buffer *input_buffer, Buffer *output_buffer);

#endif /* COMPRESS_H */
