/* * 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. * * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. * * 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 */ #ifndef OPENVPN_LZO_H #define OPENVPN_LZO_H /** * @file * Data Channel Compression module header file. */ #if defined(ENABLE_LZO) /** * @addtogroup compression * @{ */ #if defined(HAVE_LZO_LZOUTIL_H) #include "lzo/lzoutil.h" #elif defined(HAVE_LZOUTIL_H) #include "lzoutil.h" #endif #if defined(HAVE_LZO_LZO1X_H) #include "lzo/lzo1x.h" #elif defined(HAVE_LZO1X_H) #include "lzo1x.h" #endif #include "buffer.h" #include "mtu.h" #include "common.h" #include "status.h" extern const struct compress_alg lzo_alg; /**************************************************************************/ /** @name LZO library interface defines *//** @{ *//***********************/ #define LZO_COMPRESS lzo1x_1_15_compress /**< LZO library compression function. * * Use \c lzo1x_1_15_compress because it * is described as faster than the * standard routine, although it does * need a bit more memory. */ #define LZO_WORKSPACE LZO1X_1_15_MEM_COMPRESS /**< The size in bytes of the memory * %buffer required by the LZO library * compression algorithm. */ #define LZO_DECOMPRESS lzo1x_decompress_safe /**< LZO library decompression function. * * Use safe decompress because it * includes checks for possible %buffer * overflows. If speed is essential and * you will always be using a MAC to * verify the integrity of incoming * packets, you might want to consider * using the non-safe version. */ /** @} name LZO library interface *//**************************************/ /**************************************************************************/ /** @name Adaptive compression defines *//** @{ *//************************/ #define AC_SAMP_SEC 2 /**< Number of seconds in a sample period. */ #define AC_MIN_BYTES 1000 /**< Minimum number of bytes a sample * period must contain for it to be * evaluated. */ #define AC_SAVE_PCT 5 /**< Minimum size reduction percentage * below which compression will be * turned off. */ #define AC_OFF_SEC 60 /**< Seconds to wait after compression has * been turned off before retesting. */ /** @} name Adaptive compression defines *//*******************************/ /** * Adaptive compression state. */ struct lzo_adaptive_compress { bool compress_state; time_t next; int n_total; int n_comp; }; /** * State for the compression and decompression routines. * * This structure contains compression module state, such as whether * compression is enabled and the status of the adaptive compression * routines. It also contains an allocated working buffer. * * One of these compression workspace structures is maintained for each * VPN tunnel. */ struct lzo_compress_workspace { lzo_voidp wmem; int wmem_size; struct lzo_adaptive_compress ac; }; /** @} addtogroup compression */ #endif /* ENABLE_LZO && USE_COMP */ #endif