AC_DEFUN([tinc_ZLIB],
[
- AC_ARG_WITH(zlib,
- AS_HELP_STRING([--with-zlib=DIR], [zlib base directory, or:]),
- [zlib="$withval"
- CPPFLAGS="$CPPFLAGS -I$withval/include"
- LDFLAGS="$LDFLAGS -L$withval/lib"]
- )
+ AC_ARG_ENABLE([zlib],
+ AS_HELP_STRING([--disable-zlib], [disable zlib compression support]))
+ AS_IF([test "x$enable_zlib" != "xno"], [
+ AC_DEFINE(HAVE_ZLIB, 1, [have zlib compression support])
+ AC_ARG_WITH(zlib,
+ AS_HELP_STRING([--with-zlib=DIR], [zlib base directory, or:]),
+ [zlib="$withval"
+ CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LDFLAGS="$LDFLAGS -L$withval/lib"]
+ )
- AC_ARG_WITH(zlib-include,
- AS_HELP_STRING([--with-zlib-include=DIR], [zlib headers directory]),
- [zlib_include="$withval"
- CPPFLAGS="$CPPFLAGS -I$withval"]
- )
+ AC_ARG_WITH(zlib-include,
+ AS_HELP_STRING([--with-zlib-include=DIR], [zlib headers directory]),
+ [zlib_include="$withval"
+ CPPFLAGS="$CPPFLAGS -I$withval"]
+ )
- AC_ARG_WITH(zlib-lib,
- AS_HELP_STRING([--with-zlib-lib=DIR], [zlib library directory]),
- [zlib_lib="$withval"
- LDFLAGS="$LDFLAGS -L$withval"]
- )
+ AC_ARG_WITH(zlib-lib,
+ AS_HELP_STRING([--with-zlib-lib=DIR], [zlib library directory]),
+ [zlib_lib="$withval"
+ LDFLAGS="$LDFLAGS -L$withval"]
+ )
- AC_CHECK_HEADERS(zlib.h,
- [],
- [AC_MSG_ERROR("zlib header files not found."); break]
- )
+ AC_CHECK_HEADERS(zlib.h,
+ [],
+ [AC_MSG_ERROR("zlib header files not found."); break]
+ )
- AC_CHECK_LIB(z, compress2,
- [LIBS="$LIBS -lz"],
- [AC_MSG_ERROR("zlib libraries not found.")]
- )
+ AC_CHECK_LIB(z, compress2,
+ [LIBS="$LIBS -lz"],
+ [AC_MSG_ERROR("zlib libraries not found.")]
+ )
+ ])
])
#include <openssl/pem.h>
#include <openssl/hmac.h>
+#ifdef HAVE_ZLIB
#include <zlib.h>
+#endif
#ifdef HAVE_LZO
#include LZO1X_H
}
static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
- if(level == 10) {
+ if(level == 0) {
+ memcpy(dest, source, len);
+ return len;
+ } else if(level == 10) {
#ifdef HAVE_LZO
lzo_uint lzolen = MAXSIZE;
lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
return -1;
#endif
} else if(level < 10) {
+#ifdef HAVE_ZLIB
unsigned long destlen = MAXSIZE;
if(compress2(dest, &destlen, source, len, level) == Z_OK)
return destlen;
else
+#endif
return -1;
} else {
#ifdef HAVE_LZO
}
static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
- if(level > 9) {
+ if(level == 0) {
+ memcpy(dest, source, len);
+ return len;
+ } else if(level > 9) {
#ifdef HAVE_LZO
lzo_uint lzolen = MAXSIZE;
if(lzo1x_decompress_safe(source, len, dest, &lzolen, NULL) == LZO_E_OK)
else
#endif
return -1;
- } else {
+ }
+#ifdef HAVE_ZLIB
+ else {
unsigned long destlen = MAXSIZE;
if(uncompress(dest, &destlen, source, len) == Z_OK)
return destlen;
else
return -1;
}
-
+#endif
+
return -1;
}