def unpack_nstr(socket, cfg): if 'nformat' in cfg: nfmt = cfg['nformat'] enc = cfg['encoding'] if 'encoding' in cfg else 'UTF-8' l = sock_unpack(nfmt, socket)[0] return sock_unpack(str(l)+'s', socket)[0].decode(enc) else: raise Exception('<nstr> field must have a configured nformat')
def unpack_nlist(socket, cfg): if 'nformat' in cfg: lcfg = cfg.copy() lcfg['length'] = sock_unpack(cfg['nformat'], socket)[0] return unpack_list(socket, lcfg) else: raise Exception('<nlist> field must have a configured nformat')
def unpack_int(socket, cfg): fmt = 'I' if 'signed' in cfg and cfg['signed'] else 'i' return sock_unpack(fmt, socket)[0]
def unpack_str(socket, cfg): if 'length' in cfg: enc = cfg['encoding'] if 'encoding' in cfg else 'ASCII' return sock_unpack(str(cfg['length'])+'s', socket)[0].decode(enc) else: raise Exception('<bytes> field must have a configured length')
def unpack_bytes(socket, cfg): if 'length' in cfg: return sock_unpack(str(cfg['length'])+'s', socket)[0] else: raise Exception('<bytes> field must have a configured length')
def unpack_long(socket, cfg): fmt = 'Q' if 'signed' in cfg and cfg['signed'] else 'q' return sock_unpack(fmt, socket)[0]
def unpack_ipv4(socket, cfg): return inet_ntoa(sock_unpack('4s', socket)[0])
def unpack_short(socket, cfg): fmt = 'H' if 'signed' in cfg and cfg['signed'] else 'h' return sock_unpack(fmt, socket)[0]