Exemplo n.º 1
0
    def send(self, message):
        data = message.SerializeToString()
        if self.chacha:
            data = self.chacha.encrypt(data)

        length = variant.write_variant(len(data))
        self.transport.write(length + data)
Exemplo n.º 2
0
    def send_raw(self, data):
        """Send message to device."""
        log_binary(_LOGGER, '>> Send raw', Data=data)
        if self._chacha:
            data = self._chacha.encrypt(data)
            log_binary(_LOGGER, '>> Send raw', Encrypted=data)

        data = write_variant(len(data)) + data
        self._transport.write(data)
Exemplo n.º 3
0
    def _send(self, message):
        data = message.SerializeToString()
        _LOGGER.info('<<(DECRYPTED): %s', message)
        if self.chacha:
            data = self.chacha.encrypt(data)
            log_binary(_LOGGER, '<<(ENCRYPTED)', Message=message)

        length = variant.write_variant(len(data))
        self.transport.write(length + data)
Exemplo n.º 4
0
    def send(self, message):
        """Send protobuf message to client."""
        data = message.SerializeToString()
        _LOGGER.info("<<(DECRYPTED): %s", message)
        if self.chacha:
            data = self.chacha.encrypt(data)
            log_binary(_LOGGER, "<<(ENCRYPTED)", Message=message)

        length = variant.write_variant(len(data))
        self.transport.write(length + data)
Exemplo n.º 5
0
    def send(self, message):
        if not self.transport:
            return

        data = message.SerializeToString()
        if self.chacha:
            data = self.chacha.encrypt(data)

        length = variant.write_variant(len(data))
        self.transport.write(length + data)
        log_protobuf(_LOGGER, ">> Send: Protobuf", message)
Exemplo n.º 6
0
    def send(self, message):
        """Send message to device."""
        serialized = message.SerializeToString()

        log_binary(_LOGGER, '>> Send', Data=serialized)
        if self._chacha:
            serialized = self._chacha.encrypt(serialized)
            log_binary(_LOGGER, '>> Send', Encrypted=serialized)

        data = write_variant(len(serialized)) + serialized
        self._transport.write(data)
        log_protobuf(_LOGGER, '>> Send: Protobuf', message)
Exemplo n.º 7
0
def decode_and_print_message(args):
    """Decode and print protobuf messages."""
    buf = binascii.unhexlify(args.message)
    if not args.stream:
        buf = variant.write_variant(len(buf)) + buf

    while buf:
        length, raw = variant.read_variant(buf)
        data = raw[:length]
        buf = raw[length:]
        _print_single_message(data, args.unknown_fields)

    return 0
Exemplo n.º 8
0
    def _send_raw(self, raw):
        parsed = protobuf.ProtocolMessage()
        parsed.ParseFromString(raw)

        log_binary(_LOGGER, 'ATV->APP', Raw=raw)
        _LOGGER.info('ATV->APP Parsed: %s', parsed)
        if self.chacha:
            raw = self.chacha.encrypt(raw)
            log_binary(_LOGGER, 'ATV->APP', Encrypted=raw)

        length = variant.write_variant(len(raw))
        try:
            self.transport.write(length + raw)
        except Exception:  # pylint: disable=broad-except
            _LOGGER.exception('Failed to send to app')
Exemplo n.º 9
0
    def send_raw(self, raw):
        """Send raw data to client."""
        parsed = protobuf.ProtocolMessage()
        parsed.ParseFromString(raw)

        log_binary(_LOGGER, "ATV->APP", Raw=raw)
        _LOGGER.info("ATV->APP Parsed: %s", parsed)
        if self.chacha:
            raw = self.chacha.encrypt(raw)
            log_binary(_LOGGER, "ATV->APP", Encrypted=raw)

        length = variant.write_variant(len(raw))
        try:
            self.transport.write(length + raw)
        except Exception:  # pylint: disable=broad-except
            _LOGGER.exception("Failed to send to app")
Exemplo n.º 10
0
def decode_and_print_message(args):
    """Decode and print protobuf messages."""
    # Import here to allow other parts of script, e.g. message generation to run
    # without having pyatv installed
    from pyatv.mrp import variant  # pylint: disable=import-outside-toplevel

    buf = binascii.unhexlify(args.message)
    if not args.stream:
        buf = variant.write_variant(len(buf)) + buf

    while buf:
        length, raw = variant.read_variant(buf)
        data = raw[:length]
        buf = raw[length:]
        _print_single_message(data, args.unknown_fields)

    return 0
Exemplo n.º 11
0
 def test_write_multiple_bytes(self):
     self.assertEqual(write_variant(8757), b"\xb5\x44")
     self.assertEqual(write_variant(18757), b"\xc5\x92\x01")
Exemplo n.º 12
0
 def test_write_single_byte(self):
     self.assertEqual(write_variant(0x00), b"\x00")
     self.assertEqual(write_variant(0x35), b"\x35")
Exemplo n.º 13
0
 def _send(self, message):
     data = message.SerializeToString()
     length = variant.write_variant(len(data))
     self.transport.write(length + data)
Exemplo n.º 14
0
def test_write_multiple_bytes():
    assert write_variant(8757) == b"\xb5\x44"
    assert write_variant(18757) == b"\xc5\x92\x01"
Exemplo n.º 15
0
def test_write_single_byte():
    assert write_variant(0x00) == b"\x00"
    assert write_variant(0x35) == b"\x35"