""" 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"""importosfromctypesimport*__all__=['pack','pack_safe','depack','depack_safe','aP_depack_asm_fast','CB_COMPRESS']ifos.name=='nt':CB_COMPRESS=WINFUNCTYPE(c_uint,c_uint,c_uint,c_uint,c_void_p)try:_aplib=windll.aplibexceptExceptionaserror:printerrorelse:CB_COMPRESS=CFUNCTYPE(c_uint,c_uint,c_uint,c_uint,c_void_p)try:_aplib=CDLL("libaplib.so")exceptExceptionaserror:printerrordefdecompress(data):iflen(data)==0:returnNoneif"AP32"indata[:4]:dstlen=_aplib.aPsafe_get_orig_size(data)dst=create_string_buffer(dstlen)dstlen=_aplib.aPsafe_depack(data,srclen,dst,dstlen)ifdstlen==-1:returnNonereturnbuffer(dst,0,dstlen)else:srclen=len(data)dstlen=50*srclendst=create_string_buffer(dstlen)try:dstlen=_aplib.aP_depack_asm_fast(data,dst)except:returnNoneifdstlen==-1:returnNonereturnbuffer(dst,0,dstlen)defcompress(data,header=True):HEADER_SIZE=24srclen=len(data)ifsrclen==0:returnNonedstlen=_aplib.aP_max_packed_size(srclen)dst=create_string_buffer(dstlen)wrkmem=create_string_buffer(_aplib.aP_workmem_size(srclen))try:dstlen=_aplib.aPsafe_pack(data,dst,srclen,wrkmem,None,0)except:returnNoneifdstlen==-1:returnNonecompressed=buffer(dst,0,dstlen)ifheader:returncompressedelse:returncompressed[HEADER_SIZE:]
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.