def _recvRelayCell(self, cell):
        try:
            cell, origin = crypto.decryptCell(cell, self._crypt_path)
        except Exception as e:
            msg = ("Circuit {} failed to decrypt an incoming cell. Reason: {}"
                   ". Dropping cell.".format(self.circuit_id, e))
            logging.debug(msg)
            return

        if type(cell) not in BACKWARD_RELAY_CELL_TYPES:
            msg = ("Circuit {} received a non-backward {} relay cell. This "
                   "is a violation of the Tor protocol, and the circuit will "
                   "be destroyed.".format(self.circuit_id, type(cell)))
            logging.warning(msg)
            self._sendDestroyCell()
            self._closeCircuit()
        elif isinstance(cell, RelayDataCell):
            self._processRelayDataCell(cell, origin)
        elif isinstance(cell, RelayEndCell):
            self._processRelayEndCell(cell, origin)
        elif isinstance(cell, RelayConnectedCell):
            self._processRelayConnectedCell(cell, origin)
        elif isinstance(cell, RelaySendMeCell):
            self._processRelaySendMeCell(cell, origin)
        elif isinstance(cell, RelayTruncatedCell):
            self._processRelayTruncatedCell(cell, origin)
        elif isinstance(cell, RelayDropCell):
            self._processRelayDropCell(cell, origin)
        elif isinstance(cell, RelayResolvedCell):
            self._processRelayResolvedCell(cell, origin)
        else:
            msg = ("Circuit {} received an unexpected backward cell {} "
                   "from relay in position {}. Dropping cell."
                   .format(self.circuit_id, type(cell), origin))
            logging.debug(msg)
Called when this circuit receives some sort of RelayCell from
dataset/ETHPy150Open nskinkel/oppy/oppy/circuit/circuit.py/Circuit._recvRelayCell