def fill(self, byte): """ fill: byte -> None Adds the given byte to this LinkFrame. If this byte is an escape byte, the next byte in a call to fill() will be unescaped. """ if self._unescape_next_byte: byte = intToByte(byteToInt(byte) ^ 0x20) self._unescape_next_byte = False elif byte == LinkFrame.ESCAPE_BYTE: self._unescape_next_byte = True return self.raw_data += intToByte(byteToInt(byte))
def escape(data): """ escape: byte string -> byte string When the 'special' byte is found in the data string, it must be preceded by an escape byte and XOR'd with 0x20 """ escaped_data = b"" for byte in data: if intToByte(byteToInt(byte)) in LinkFrame.ESCAPE_BYTES: escaped_data += LinkFrame.ESCAPE_BYTE escaped_data += intToByte(0x20 ^ byteToInt(byte)) else: escaped_data += intToByte(byteToInt(byte)) return escaped_data