+length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level)
+{
+ if(level == 10) {
+ lzo_uint lzolen = sizeof(lzo_wrkmem);
+ lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
+ return lzolen;
+ } else if(level < 10) {
+ unsigned long destlen;
+ if(compress2(dest, &destlen, source, len, level) == Z_OK)
+ return destlen;
+ else
+ return -1;
+ } else {
+ lzo_uint lzolen = sizeof(lzo_wrkmem);
+ lzo1x_999_compress(source, len, dest, &lzolen, lzo_wrkmem);
+ return lzolen;
+ }
+
+ return -1;
+}
+
+length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level)
+{
+ if(level > 9) {
+ lzo_uint lzolen = sizeof(lzo_wrkmem);
+ if(lzo1x_decompress_safe(source, len, dest, &lzolen, NULL) == LZO_E_OK)
+ return lzolen;
+ else
+ return -1;
+ } else {
+ unsigned long destlen;
+ if(uncompress(dest, &destlen, source, len) == Z_OK)
+ return destlen;
+ else
+ return -1;
+ }
+
+ return -1;
+}
+