Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
        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)
Exemplo n.º 4
0
    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)