if cmd == 'BufferSocket': while True: b = BufferSocket(pkt_count=8192) elif cmd.split('.')[1] == 'callback': b = BufferSocket(pkt_count=8192) def callback(pkt): pass b.set_callback(callback) b.start(53000) tx = S.TransportUDPtx('localhost', 53000) while True: tx.write(pkt) elif cmd.startswith('pack'): d = [[0]] * 1024*1024 while True: s = pack('u\x00\x00\x20', d) elif cmd.startswith('unpack'): s = '\x00' * 1024 while True: d = unpack('u\x00\x00\x20', s, cnt=-1) elif cmd.startswith('ItemGroup'): ig1, ig2 = S.ItemGroup(), S.ItemGroup() ig1.add_item('var1', fmt='f\x00\x00\x40', shape=-1) while True: ig1['var1'] = [[0]] * 1024 s = ''.join([p for p in S.iter_genpackets(ig1.get_frame())]) tport = S.TransportString(s) for f in S.iterframes(tport): ig2.update(f) elif cmd.startswith('iter_genpackets'): ig1 = S.ItemGroup() ig1.add_item('var1', fmt='f\x00\x00\x40', shape=-1) ig1['var1'] = [[0]] * 1024 f = ig1.get_frame() while True: s = ''.join([p for p in S.iter_genpackets(f)]) else: ValueError(cmd)
def test_iter_genpackets(self): heap = {0x1234: (S.DIRECTADDR, "abcdefgh"), S.HEAP_CNT_ID: (S.IMMEDIATEADDR, S.ADDRNULL)} pkts = [p for p in S.iter_genpackets(heap)] self.assertEqual(len(pkts), 1) pkt = pkts[0] self.assertEqual(list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 5]) for i in range(1, 5): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8 * i : 8 * i + 8])[0] mode, id = rv[:2] raw_val = "".join(rv[2:]) if id == 0x1234: self.assertEqual(mode, S.DIRECTADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) elif id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, "\x00\x00\x00\x00\x08") elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 8) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) else: self.assertTrue(False) self.assertEqual(pkt[48:], "abcdefgh") heap[0x1234] = (S.DIRECTADDR, "abcdefgh" * 4000) pkts = [p for p in S.iter_genpackets(heap)] self.assertEqual(len(pkts), 4) payloads = [] for cnt, pkt in enumerate(pkts): if cnt == 0: self.assertEqual( list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 5] ) for i in range(1, 5): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8 * i : 8 * i + 8])[0] mode, id = rv[:2] raw_val = "".join(rv[2:]) if id == 0x1234: self.assertEqual(mode, S.DIRECTADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) elif id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, "\x00\x00\x00\x7d\x00") elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], S.MAX_PACKET_LEN - S.ITEMLEN * 6) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) else: self.assertTrue(False) payloads.append(pkt[6 * S.ITEMLEN :]) else: self.assertEqual( list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 4] ) for i in range(1, 4): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8 * i : 8 * i + 8])[0] mode, id = rv[:2] raw_val = "".join(rv[2:]) if id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, "\x00\x00\x00\x7d\x00") elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) if cnt < 3: self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], S.MAX_PACKET_LEN - S.ITEMLEN * 5) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual( S.unpack(S.DEFAULT_FMT, raw_val)[0][0], (S.MAX_PACKET_LEN - S.ITEMLEN * 5) + (cnt - 1) * (S.MAX_PACKET_LEN - S.ITEMLEN * 4), ) else: self.assertTrue(False) payloads.append(pkt[5 * S.ITEMLEN :]) heap = "".join(payloads) self.assertEqual(len(heap), len("abcdefgh" * 4000)) self.assertEqual(heap, "abcdefgh" * 4000)
b.start(53000) tx = S.TransportUDPtx('localhost', 53000) while True: tx.write(pkt) elif cmd.startswith('pack'): d = [[0]] * 1024 * 1024 while True: s = pack('u\x00\x00\x20', d) elif cmd.startswith('unpack'): s = '\x00' * 1024 while True: d = unpack('u\x00\x00\x20', s, cnt=-1) elif cmd.startswith('ItemGroup'): ig1, ig2 = S.ItemGroup(), S.ItemGroup() ig1.add_item('var1', fmt='f\x00\x00\x40', shape=-1) while True: ig1['var1'] = [[0]] * 1024 s = ''.join([p for p in S.iter_genpackets(ig1.get_frame())]) tport = S.TransportString(s) for f in S.iterframes(tport): ig2.update(f) elif cmd.startswith('iter_genpackets'): ig1 = S.ItemGroup() ig1.add_item('var1', fmt='f\x00\x00\x40', shape=-1) ig1['var1'] = [[0]] * 1024 f = ig1.get_frame() while True: s = ''.join([p for p in S.iter_genpackets(f)]) else: ValueError(cmd)
def test_iter_genpackets(self): heap = {0x1234: (S.DIRECTADDR,'abcdefgh'), S.HEAP_CNT_ID: (S.IMMEDIATEADDR, S.ADDRNULL)} pkts = [p for p in S.iter_genpackets(heap)] self.assertEqual(len(pkts), 1) pkt = pkts[0] self.assertEqual(list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 5]) for i in range(1,5): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8*i:8*i+8])[0] mode, id = rv[:2] raw_val = ''.join(rv[2:]) if id == 0x1234: self.assertEqual(mode, S.DIRECTADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) elif id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, '\x00\x00\x00\x00\x08') elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 8) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) else: self.assertTrue(False) self.assertEqual(pkt[48:], 'abcdefgh') heap[0x1234] = (S.DIRECTADDR, 'abcdefgh' * 4000) pkts = [p for p in S.iter_genpackets(heap)] self.assertEqual(len(pkts), 4) payloads = [] for cnt, pkt in enumerate(pkts): if cnt == 0: self.assertEqual(list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 5]) for i in range(1,5): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8*i:8*i+8])[0] mode, id = rv[:2] raw_val = ''.join(rv[2:]) if id == 0x1234: self.assertEqual(mode, S.DIRECTADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) elif id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, '\x00\x00\x00\x7d\x00') elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], S.MAX_PACKET_LEN - S.ITEMLEN*6) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], 0) else: self.assertTrue(False) payloads.append(pkt[6*S.ITEMLEN:]) else: self.assertEqual(list(S.unpack(S.HDR_FMT, pkt[:8])[0]), [S.MAGIC, S.VERSION, S.ITEMSIZE, S.ADDRSIZE, 0, 4]) for i in range(1,4): rv = S.unpack(S.RAW_ITEM_FMT, pkt[8*i:8*i+8])[0] mode, id = rv[:2] raw_val = ''.join(rv[2:]) if id == S.HEAP_CNT_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, S.ADDRNULL) elif id == S.HEAP_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(raw_val, '\x00\x00\x00\x7d\x00') elif id == S.PAYLOAD_LEN_ID: self.assertEqual(mode, S.IMMEDIATEADDR) if cnt < 3: self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], S.MAX_PACKET_LEN - S.ITEMLEN*5) elif id == S.PAYLOAD_OFF_ID: self.assertEqual(mode, S.IMMEDIATEADDR) self.assertEqual(S.unpack(S.DEFAULT_FMT, raw_val)[0][0], (S.MAX_PACKET_LEN-S.ITEMLEN*5)+(cnt-1)*(S.MAX_PACKET_LEN-S.ITEMLEN*4)) else: self.assertTrue(False) payloads.append(pkt[5*S.ITEMLEN:]) heap = ''.join(payloads) self.assertEqual(len(heap), len('abcdefgh' * 4000)) self.assertEqual(heap, 'abcdefgh'*4000)