Snippets

Alexander Hanel Script for decompressing & compressing data using aPlib libraries

Updated by Alexander Hanel

File aplib.py Modified

  • Ignore whitespace
  • Hide word diff
     dstlen = _aplib.aP_max_packed_size(srclen)
     dst = create_string_buffer(dstlen)
     wrkmem = create_string_buffer(_aplib.aP_workmem_size(srclen))
-    dstlen = _aplib.aPsafe_pack(data, dst, srclen, wrkmem, None, 0)
+    try:
+        dstlen = _aplib.aPsafe_pack(data, dst, srclen, wrkmem, None, 0)
+    except:
+        return None
     if dstlen == -1:
         return None 
     compressed = buffer(dst, 0, dstlen)
Created by Alexander Hanel

File aplib.py Added

  • Ignore whitespace
  • Hide word diff
+"""
+    Author: Alexander Hanel
+    Date: 2016/10/04
+    Notes: Python Script for compressing and decompressing data using aPLib. Requires
+    dll or shared libary depending on your os. Libraries can be downloaded from Ibsen
+    software - http://www.ibsensoftware.com/products_aPLib.html
+    
+"""
+import os
+from ctypes import *
+
+__all__ = [ 'pack', 'pack_safe', 'depack', 'depack_safe', 'aP_depack_asm_fast', 'CB_COMPRESS']
+
+
+if os.name == 'nt':
+    CB_COMPRESS = WINFUNCTYPE(c_uint, c_uint, c_uint, c_uint, c_void_p)
+    try:
+        _aplib = windll.aplib
+    except Exception as error:
+        print error 
+else:
+    CB_COMPRESS = CFUNCTYPE(c_uint, c_uint, c_uint, c_uint, c_void_p)
+    try:
+        _aplib = CDLL("libaplib.so")    
+    except Exception as error:
+        print error 
+
+def decompress(data):
+    if len(data) == 0:
+        return None 
+    if "AP32" in data[:4]:
+        dstlen = _aplib.aPsafe_get_orig_size(data)
+        dst = create_string_buffer(dstlen)
+        dstlen = _aplib.aPsafe_depack(data, srclen, dst, dstlen)
+        if dstlen == -1:
+            return None 
+        return buffer(dst, 0, dstlen)
+    else:
+        srclen = len(data)
+        dstlen = 50 * srclen   
+        dst = create_string_buffer(dstlen)
+        try:
+            dstlen = _aplib.aP_depack_asm_fast(data, dst)
+        except:
+            return None 
+        if dstlen == -1:
+            return None 
+        return buffer(dst, 0, dstlen)
+
+def compress(data, header=True):
+    HEADER_SIZE = 24
+    srclen = len(data)
+    if srclen == 0:
+        return None 
+    dstlen = _aplib.aP_max_packed_size(srclen)
+    dst = create_string_buffer(dstlen)
+    wrkmem = create_string_buffer(_aplib.aP_workmem_size(srclen))
+    dstlen = _aplib.aPsafe_pack(data, dst, srclen, wrkmem, None, 0)
+    if dstlen == -1:
+        return None 
+    compressed = buffer(dst, 0, dstlen)
+    if header:
+        return compressed
+    else:
+        return compressed[HEADER_SIZE:]
+
+
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.