param.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. package sctp
  4. import (
  5. "errors"
  6. "fmt"
  7. )
  8. type param interface {
  9. marshal() ([]byte, error)
  10. length() int
  11. }
  12. // ErrParamTypeUnhandled is returned if unknown parameter type is specified.
  13. var ErrParamTypeUnhandled = errors.New("unhandled ParamType")
  14. func buildParam(t paramType, rawParam []byte) (param, error) {
  15. switch t {
  16. case forwardTSNSupp:
  17. return (&paramForwardTSNSupported{}).unmarshal(rawParam)
  18. case supportedExt:
  19. return (&paramSupportedExtensions{}).unmarshal(rawParam)
  20. case ecnCapable:
  21. return (&paramECNCapable{}).unmarshal(rawParam)
  22. case random:
  23. return (&paramRandom{}).unmarshal(rawParam)
  24. case reqHMACAlgo:
  25. return (&paramRequestedHMACAlgorithm{}).unmarshal(rawParam)
  26. case chunkList:
  27. return (&paramChunkList{}).unmarshal(rawParam)
  28. case stateCookie:
  29. return (&paramStateCookie{}).unmarshal(rawParam)
  30. case heartbeatInfo:
  31. return (&paramHeartbeatInfo{}).unmarshal(rawParam)
  32. case outSSNResetReq:
  33. return (&paramOutgoingResetRequest{}).unmarshal(rawParam)
  34. case reconfigResp:
  35. return (&paramReconfigResponse{}).unmarshal(rawParam)
  36. case zeroChecksumAcceptable:
  37. return (&paramZeroChecksumAcceptable{}).unmarshal(rawParam)
  38. default:
  39. return nil, fmt.Errorf("%w: %v", ErrParamTypeUnhandled, t)
  40. }
  41. }