lzo.h
6fbf66fa
 /*
  *  OpenVPN -- An application to securely tunnel IP networks
  *             over a single UDP port, with support for SSL/TLS-based
  *             session authentication and key exchange,
  *             packet encryption, packet authentication, and
  *             packet compression.
  *
564a2109
  *  Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
6fbf66fa
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2
  *  as published by the Free Software Foundation.
  *
  *  This program 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 program (see the file COPYING included with this
  *  distribution); if not, write to the Free Software Foundation, Inc.,
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
537073fd
 #ifndef OPENVPN_LZO_H
 #define OPENVPN_LZO_H
 
6fbf66fa
 #ifdef USE_LZO
 
 #ifdef LZO_HEADER_DIR
 #include "lzo/lzoutil.h"
 #include "lzo/lzo1x.h"
 #else
 #include "lzoutil.h"
 #include "lzo1x.h"
 #endif
 
 #include "buffer.h"
 #include "mtu.h"
 #include "common.h"
 #include "status.h"
 
537073fd
 /* LZO flags */
 #define LZO_SELECTED   (1<<0)
 #define LZO_ON         (1<<1)
 #define LZO_ADAPTIVE   (1<<2)  
 
6fbf66fa
 /*
  * Use LZO compress routine lzo1x_1_15_compress which is described
  * as faster but needs a bit more memory than the standard routine.
  * Use safe decompress (i.e. check for buffer overflows).
  * You may want to use the non-safe version
  * of decompress if speed is essential and if you know
  * that you will always be using a MAC to verify the
  * integrity of incoming packets.
  */
 #define LZO_COMPRESS    lzo1x_1_15_compress
 #define LZO_WORKSPACE	LZO1X_1_15_MEM_COMPRESS
 #define LZO_DECOMPRESS  lzo1x_decompress_safe
 
 #define LZO_EXTRA_BUFFER(len) ((len)/8 + 128 + 3)	/* LZO 2.0 worst case size expansion. */
 
 /*
  * Don't try to compress any packet smaller than this.
  */
 #define COMPRESS_THRESHOLD 100
 
 /*
  * Length of prepended prefix on LZO packets
  */ 
 #define LZO_PREFIX_LEN 1
 
 /*
  * Adaptive compress parameters
  */
 #define AC_SAMP_SEC    2      /* number of seconds in sample period */
 #define AC_MIN_BYTES   1000   /* sample period must have at least n bytes
 				 to be valid for testing */
 #define AC_SAVE_PCT    5      /* turn off compress if we didn't save at
 				 least this % during sample period */
 #define AC_OFF_SEC     60     /* if we turn off compression, don't do sample
 				 retest for n seconds */
 
 struct lzo_adaptive_compress {
   bool compress_state;
   time_t next;
   int n_total;
   int n_comp;
 };
 
 /*
  * Compress and Uncompress routines.
  */
 
 struct lzo_compress_workspace
 {
   lzo_voidp wmem;
   int wmem_size;
   struct lzo_adaptive_compress ac;
537073fd
   unsigned int flags;
   bool defined;
6fbf66fa
 
   /* statistics */
   counter_type pre_decompress;
   counter_type post_decompress;
   counter_type pre_compress;
   counter_type post_compress;
 };
 
 void lzo_adjust_frame_parameters(struct frame *frame);
 
537073fd
 void lzo_compress_init (struct lzo_compress_workspace *lzowork, unsigned int flags);
6fbf66fa
 
 void lzo_compress_uninit (struct lzo_compress_workspace *lzowork);
 
537073fd
 void lzo_modify_flags (struct lzo_compress_workspace *lzowork, unsigned int flags);
 
6fbf66fa
 void lzo_compress (struct buffer *buf, struct buffer work,
 		   struct lzo_compress_workspace *lzowork,
 		   const struct frame* frame);
 
 void lzo_decompress (struct buffer *buf, struct buffer work,
 		     struct lzo_compress_workspace *lzowork,
 		     const struct frame* frame);
 
 void lzo_print_stats (const struct lzo_compress_workspace *lzo_compwork, struct status_output *so);
 
537073fd
 static inline bool
 lzo_defined (const struct lzo_compress_workspace *lzowork)
 {
   return lzowork->defined;
 }
 
 
6fbf66fa
 #endif /* USE_LZO */
537073fd
 #endif