code: def __dispatch_msg(self, message):
          
          msg = self.__validate_decode_msg(message)
          if msg:
              msg, seqnum = msg
          else:
              self.__fire_callback(_CB_DEBUG_BAD, message.body, message.content_type)
              return
  
          if DEBUG_ENABLED:
              logger.debug(decode_rcvd_msg('decode_rcvd_msg', msg, seqnum))
          self.__fire_callback(_CB_DEBUG_RCVD, msg)
  
          # no reference, or set by client (not container)
          if msg[M_TYPE] not in _RSP_CONTAINER_REF:
              # solicitied
              if msg[M_CLIENTREF]:
                  if not self.__handle_known_solicited(msg):
                      logger.debug('Ignoring response for unknown request %s of type %s', msg[M_CLIENTREF], msg[M_TYPE])
              # unsolicitied
              else:
                  self.__perform_unsolicited_callbacks(msg)
  
          # unsolicited but can have reference set by container
          elif msg[M_TYPE] == E_CONTROLREQ:
              self.__handle_controlreq(msg[M_PAYLOAD], msg[M_CLIENTREF])
  
          else:
              logger.error('Unhandled unsolicited message of type %s', msg[M_TYPE])
docs: Verify the signature and update RequestEvents / perform callbacks
  
          Note messages with an invalid wrapper, invalid hash, invalid sequence number or unexpected clientRef
          will be sent to debug_bad callback.