param.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package sctp
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. type param interface {
  7. marshal() ([]byte, error)
  8. length() int
  9. }
  10. var errParamTypeUnhandled = errors.New("unhandled ParamType")
  11. func buildParam(t paramType, rawParam []byte) (param, error) {
  12. switch t {
  13. case forwardTSNSupp:
  14. return (&paramForwardTSNSupported{}).unmarshal(rawParam)
  15. case supportedExt:
  16. return (&paramSupportedExtensions{}).unmarshal(rawParam)
  17. case ecnCapable:
  18. return (&paramECNCapable{}).unmarshal(rawParam)
  19. case random:
  20. return (&paramRandom{}).unmarshal(rawParam)
  21. case reqHMACAlgo:
  22. return (&paramRequestedHMACAlgorithm{}).unmarshal(rawParam)
  23. case chunkList:
  24. return (&paramChunkList{}).unmarshal(rawParam)
  25. case stateCookie:
  26. return (&paramStateCookie{}).unmarshal(rawParam)
  27. case heartbeatInfo:
  28. return (&paramHeartbeatInfo{}).unmarshal(rawParam)
  29. case outSSNResetReq:
  30. return (&paramOutgoingResetRequest{}).unmarshal(rawParam)
  31. case reconfigResp:
  32. return (&paramReconfigResponse{}).unmarshal(rawParam)
  33. default:
  34. return nil, fmt.Errorf("%w: %v", errParamTypeUnhandled, t)
  35. }
  36. }