param.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. default:
  37. return nil, fmt.Errorf("%w: %v", ErrParamTypeUnhandled, t)
  38. }
  39. }