Example #1
0
def decode_packet(buf, offset):
    """
    Decodes a packet payload
    :param buf: The source buffer
    :type buf: bytes
    :param offset: Buffer offset
    :type offset: int
    :return: 2-tuple (new offset, (packet_id, packet_payload))
    :rtype tuple
    """
    #print(buf, offset)
    offset, length = DataTypes.read_varint(buf, offset)
    #print(length)
    payload = buf[offset:offset + length]
    #if len(payload) < 16:
    #    print(payload)
    offset += length
    payload_offset, packet_id = DataTypes.read_varint(payload, 0)
    data = payload[payload_offset:]
    return offset, (packet_id, data)
    def _receive_packet(self):
        # TODO: clean up, the issue here is because we don't receive the full frame first
        length = -1
        offset = 0

        data = b""
        # while length == 0:
        #    data  += self._sock.recv(1024)
        #    offset, length = DataTypes.read_varint(data, 0)

        while True:
            if (len(data) < length - offset) or length == -1:
                data += self._sock.recv(1024)
            else:
                break

            if length == -1:
                offset, length = DataTypes.read_varint(data, 0)
                print(length)

        return data