// SPDX-FileCopyrightText: 2023 The Pion community // SPDX-License-Identifier: MIT package sctp import ( "errors" "fmt" ) type param interface { marshal() ([]byte, error) length() int } // ErrParamTypeUnhandled is returned if unknown parameter type is specified. var ErrParamTypeUnhandled = errors.New("unhandled ParamType") func buildParam(t paramType, rawParam []byte) (param, error) { switch t { case forwardTSNSupp: return (¶mForwardTSNSupported{}).unmarshal(rawParam) case supportedExt: return (¶mSupportedExtensions{}).unmarshal(rawParam) case ecnCapable: return (¶mECNCapable{}).unmarshal(rawParam) case random: return (¶mRandom{}).unmarshal(rawParam) case reqHMACAlgo: return (¶mRequestedHMACAlgorithm{}).unmarshal(rawParam) case chunkList: return (¶mChunkList{}).unmarshal(rawParam) case stateCookie: return (¶mStateCookie{}).unmarshal(rawParam) case heartbeatInfo: return (¶mHeartbeatInfo{}).unmarshal(rawParam) case outSSNResetReq: return (¶mOutgoingResetRequest{}).unmarshal(rawParam) case reconfigResp: return (¶mReconfigResponse{}).unmarshal(rawParam) case zeroChecksumAcceptable: return (¶mZeroChecksumAcceptable{}).unmarshal(rawParam) default: return nil, fmt.Errorf("%w: %v", ErrParamTypeUnhandled, t) } }