{"record":{"id":"38323e7ff73adef9","repo":"hyperledger/fabric","slug":"message-is-of-type-that-cannot-be-processed-direct","errorCode":null,"errorMessage":"message is of type that cannot be processed directly","messagePattern":"message is of type that cannot be processed directly","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/multichannel/registrar.go","lineNumber":326,"sourceCode":"func (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error) {\n\tchdr, err := protoutil.ChannelHeader(msg)\n\tif err != nil {\n\t\treturn nil, false, nil, errors.WithMessage(err, \"could not determine channel ID\")\n\t}\n\n\tcs := r.GetChain(chdr.ChannelId)\n\t// Used to be new channel creation with the system channel, but now channels are created with the channel\n\t// participation API only, so it is just a wrong channel name.\n\tif cs == nil {\n\t\treturn chdr, false, nil, types.ErrChannelNotExist\n\t}\n\n\tisConfig := false\n\tswitch cs.ClassifyMsg(chdr) {\n\tcase msgprocessor.ConfigUpdateMsg:\n\t\tisConfig = true\n\tcase msgprocessor.ConfigMsg:\n\t\treturn chdr, false, nil, errors.New(\"message is of type that cannot be processed directly\")\n\tcase msgprocessor.UnsupportedMsg:\n\t\treturn chdr, false, nil, errors.New(\"message is of type that is no longer supported\")\n\tdefault:\n\t}\n\n\treturn chdr, isConfig, cs, nil\n}\n\n// GetConsensusChain retrieves the consensus.Chain of the channel, if it exists.\nfunc (r *Registrar) GetConsensusChain(chainID string) consensus.Chain {\n\tr.lock.RLock()\n\tdefer r.lock.RUnlock()\n\n\tcs, exists := r.chains[chainID]\n\tif !exists {\n\t\treturn nil\n\t}\n","sourceCodeStart":308,"sourceCodeEnd":344,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/multichannel/registrar.go#L308-L344","documentation":"BroadcastChannelSupport guard: ClassifyMsg returned an unknown/unhandled message classification for the envelope's channel header type. The submitted message type cannot be routed by the broadcast handler on this channel.","triggerScenarios":"Thrown at orderer/common/multichannel/registrar.go:326 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Submit only CONFIG_UPDATE or ENDORSER_TRANSACTION messages via Broadcast","Upgrade client SDKs that may emit legacy header types"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}