Exemple #1
0
    def from_bytes(data):
        length = len(data)
        if length == 0:
            return KeepAliveMessage()

        offset, type = Network.read_byte_as_int(data, 0)
        if type == PeerMessageType.Piece: return PieceMessage.from_bytes(data)
        if type == PeerMessageType.Choke: return ChokeMessage.from_bytes(data)
        if type == PeerMessageType.Unchoke:
            return UnchokeMessage.from_bytes(data)
        if type == PeerMessageType.Interested:
            return InterestedMessage.from_bytes(data)
        if type == PeerMessageType.Uninterested:
            return UninterestedMessage.from_bytes(data)
        if type == PeerMessageType.Have: return HaveMessage.from_bytes(data)
        if type == PeerMessageType.Bitfield:
            return BitfieldMessage.from_bytes(data)
        if type == PeerMessageType.Request:
            return RequestMessage.from_bytes(data)
        if type == PeerMessageType.Port: return PortMessage.from_bytes(data)
        if type == PeerMessageType.Cancel:
            return CancelMessage.from_bytes(data)
        if type == PeerMessageType.HaveAll:
            return HaveAllMessage.from_bytes(data)
        if type == PeerMessageType.HaveNone:
            return HaveNoneMessage.from_bytes(data)
        if type == PeerMessageType.AllowedFast:
            return AllowedFastMessage.from_bytes(data)
        if type == PeerMessageType.SuggestPiece:
            return SuggestPieceMessage.from_bytes(data)
        if type == PeerMessageType.RejectRequest:
            return RejectRequestMessage.from_bytes(data)

        if type == PeerMessageType.ExtensionMessage:
            offset, extension_message_type = Network.read_byte_as_int(
                data, offset)
            if extension_message_type == 0:
                return ExtensionHandshakeMessage.from_bytes(data)
            if extension_message_type == ExtensionProtocolMessageType.PeerExchange:
                return PeerExchangeMessage.from_bytes(data)
            if extension_message_type == ExtensionProtocolMessageType.Metadata:
                return MetadataMessage.from_bytes(data)

        Logger().write(LogVerbosity.Info,
                       "Unknown message! type = " + str(type))
Exemple #2
0
    def from_bytes(cls, data):
        if not check_bytes_length(data, 68):
            return None

        offset = 0
        offset, length = Network.read_byte_as_int(data, offset)
        offset, protocol = Network.read_bytes(data, 19, offset)
        offset, reserved = Network.read_bytes(data, 8, offset)
        offset, info_hash = Network.read_bytes(data, 20, offset)
        offset, peer_id = Network.read_bytes(data, 20, offset)

        result = cls(info_hash)
        result.length = length
        result.protocol = protocol
        result.reserved = reserved
        result.peer_id = peer_id

        return result