dtls.go 656 B

1234567891011121314151617181920212223242526272829303132
  1. package sniff
  2. import (
  3. "context"
  4. "os"
  5. "github.com/sagernet/sing-box/adapter"
  6. C "github.com/sagernet/sing-box/constant"
  7. )
  8. func DTLSRecord(ctx context.Context, metadata *adapter.InboundContext, packet []byte) error {
  9. const fixedHeaderSize = 13
  10. if len(packet) < fixedHeaderSize {
  11. return os.ErrInvalid
  12. }
  13. contentType := packet[0]
  14. switch contentType {
  15. case 20, 21, 22, 23, 25:
  16. default:
  17. return os.ErrInvalid
  18. }
  19. versionMajor := packet[1]
  20. if versionMajor != 0xfe {
  21. return os.ErrInvalid
  22. }
  23. versionMinor := packet[2]
  24. if versionMinor != 0xff && versionMinor != 0xfd {
  25. return os.ErrInvalid
  26. }
  27. metadata.Protocol = C.ProtocolDTLS
  28. return nil
  29. }