'Process a PDU received in a federation /send/ transaction.
Args:
origin (str): server which sent the pdu
pdu (FrozenEvent): received pdu
Returns (Deferred): completes with None
Raises: FederationError if the signatures / hash do not match'

@defer.inlineCallbacks
def _handle_received_pdu(self, origin, pdu):

    try:
        pdu = (yield self._check_sigs_and_hash(pdu))
    except SynapseError as e:
        raise FederationError('ERROR', e.code, e.msg, affected=pdu.event_id)
    (yield self.handler.on_receive_pdu(origin, pdu, get_missing=True))
