chunk_cookie_echo.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package sctp
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. /*
  7. CookieEcho represents an SCTP Chunk of type CookieEcho
  8. 0 1 2 3
  9. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11. | Type = 10 |Chunk Flags | Length |
  12. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  13. | Cookie |
  14. | |
  15. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  16. */
  17. type chunkCookieEcho struct {
  18. chunkHeader
  19. cookie []byte
  20. }
  21. var errChunkTypeNotCookieEcho = errors.New("ChunkType is not of type COOKIEECHO")
  22. func (c *chunkCookieEcho) unmarshal(raw []byte) error {
  23. if err := c.chunkHeader.unmarshal(raw); err != nil {
  24. return err
  25. }
  26. if c.typ != ctCookieEcho {
  27. return fmt.Errorf("%w: actually is %s", errChunkTypeNotCookieEcho, c.typ.String())
  28. }
  29. c.cookie = c.raw
  30. return nil
  31. }
  32. func (c *chunkCookieEcho) marshal() ([]byte, error) {
  33. c.chunkHeader.typ = ctCookieEcho
  34. c.chunkHeader.raw = c.cookie
  35. return c.chunkHeader.marshal()
  36. }
  37. func (c *chunkCookieEcho) check() (abort bool, err error) {
  38. return false, nil
  39. }