flighthandler.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package dtls
  2. import (
  3. "context"
  4. "github.com/pion/dtls/v2/pkg/protocol/alert"
  5. )
  6. // Parse received handshakes and return next flightVal
  7. type flightParser func(context.Context, flightConn, *State, *handshakeCache, *handshakeConfig) (flightVal, *alert.Alert, error)
  8. // Generate flights
  9. type flightGenerator func(flightConn, *State, *handshakeCache, *handshakeConfig) ([]*packet, *alert.Alert, error)
  10. func (f flightVal) getFlightParser() (flightParser, error) {
  11. switch f {
  12. case flight0:
  13. return flight0Parse, nil
  14. case flight1:
  15. return flight1Parse, nil
  16. case flight2:
  17. return flight2Parse, nil
  18. case flight3:
  19. return flight3Parse, nil
  20. case flight4:
  21. return flight4Parse, nil
  22. case flight4b:
  23. return flight4bParse, nil
  24. case flight5:
  25. return flight5Parse, nil
  26. case flight5b:
  27. return flight5bParse, nil
  28. case flight6:
  29. return flight6Parse, nil
  30. default:
  31. return nil, errInvalidFlight
  32. }
  33. }
  34. func (f flightVal) getFlightGenerator() (gen flightGenerator, retransmit bool, err error) {
  35. switch f {
  36. case flight0:
  37. return flight0Generate, true, nil
  38. case flight1:
  39. return flight1Generate, true, nil
  40. case flight2:
  41. // https://tools.ietf.org/html/rfc6347#section-3.2.1
  42. // HelloVerifyRequests must not be retransmitted.
  43. return flight2Generate, false, nil
  44. case flight3:
  45. return flight3Generate, true, nil
  46. case flight4:
  47. return flight4Generate, true, nil
  48. case flight4b:
  49. return flight4bGenerate, true, nil
  50. case flight5:
  51. return flight5Generate, true, nil
  52. case flight5b:
  53. return flight5bGenerate, true, nil
  54. case flight6:
  55. return flight6Generate, true, nil
  56. default:
  57. return nil, false, errInvalidFlight
  58. }
  59. }