code: func (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error) {
  	chdr, err := utils.ChannelHeader(msg)
  	if err != nil {
  		return nil, false, nil, fmt.Errorf("could not determine channel ID: %s", err)
  	}
  
  	cs := r.GetChain(chdr.ChannelId)
  	// New channel creation
  	if cs == nil {
  		// Prevent channel creation during consensus-type migration
  		if r.ConsensusMigrationPending() {
  			return chdr, true, nil, errors.New("cannot create channel because consensus-type migration is pending")
  		}
  		cs = r.systemChannel
  	}
  
  	isConfig := false
  	switch cs.ClassifyMsg(chdr) {
  	case msgprocessor.ConfigUpdateMsg:
  		isConfig = true
  	case msgprocessor.ConfigMsg:
  		return chdr, false, nil, errors.New("message is of type that cannot be processed directly")
  	default:
  	}
  
  	return chdr, isConfig, cs, nil
  }
docs: // BroadcastChannelSupport returns the message channel header, whether the message is a config update
  // and the channel resources for a message or an error if the message is not a message which can
  // be processed directly (like CONFIG and ORDERER_TRANSACTION messages)