flighthandler.go 1.8 KB

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