def METHOD_NAME(self, raw: bytes) -> None:
    """Parse and process KNXIP frame. Callback for having received data over TCP."""
    if self._buffer:
        raw = self._buffer + raw
        self._buffer = b""
    if not raw:
        return
    try:
        knxipframe, next_frame_part = KNXIPFrame.from_knx(raw)
    except IncompleteKNXIPFrame:
        self._buffer = raw
        raw_socket_logger.debug(
            "Incomplete KNX/IP frame. Waiting for rest: %s", raw.hex()
        )
        return
    except CouldNotParseKNXIP as couldnotparseknxip:
        knx_logger.debug(
            "Unsupported KNXIPFrame from %s: %s in %s",
            self.remote_hpai,
            couldnotparseknxip.description,
            raw.hex(),
        )
    else:
        knx_logger.debug(
            "Received from %s: %s",
            self.remote_hpai,
            knxipframe,
        )
        self.handle_knxipframe(knxipframe, self.remote_hpai)
    # parse data after current KNX/IP frame
    if next_frame_part:
        self.METHOD_NAME(next_frame_part)