1
0

ech_quic.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //go:build with_quic && with_ech
  2. package tls
  3. import (
  4. "context"
  5. "net"
  6. "net/http"
  7. "github.com/sagernet/cloudflare-tls"
  8. "github.com/sagernet/quic-go/ech"
  9. "github.com/sagernet/quic-go/http3_ech"
  10. "github.com/sagernet/sing-quic"
  11. M "github.com/sagernet/sing/common/metadata"
  12. )
  13. var (
  14. _ qtls.Config = (*echClientConfig)(nil)
  15. _ qtls.ServerConfig = (*echServerConfig)(nil)
  16. )
  17. func (c *echClientConfig) Dial(ctx context.Context, conn net.PacketConn, addr net.Addr, config *quic.Config) (quic.Connection, error) {
  18. return quic.Dial(ctx, conn, addr, c.config, config)
  19. }
  20. func (c *echClientConfig) DialEarly(ctx context.Context, conn net.PacketConn, addr net.Addr, config *quic.Config) (quic.EarlyConnection, error) {
  21. return quic.DialEarly(ctx, conn, addr, c.config, config)
  22. }
  23. func (c *echClientConfig) CreateTransport(conn net.PacketConn, quicConnPtr *quic.EarlyConnection, serverAddr M.Socksaddr, quicConfig *quic.Config) http.RoundTripper {
  24. return &http3.Transport{
  25. TLSClientConfig: c.config,
  26. QUICConfig: quicConfig,
  27. Dial: func(ctx context.Context, addr string, tlsCfg *tls.Config, cfg *quic.Config) (quic.EarlyConnection, error) {
  28. quicConn, err := quic.DialEarly(ctx, conn, serverAddr.UDPAddr(), tlsCfg, cfg)
  29. if err != nil {
  30. return nil, err
  31. }
  32. *quicConnPtr = quicConn
  33. return quicConn, nil
  34. },
  35. }
  36. }
  37. func (c *echServerConfig) Listen(conn net.PacketConn, config *quic.Config) (qtls.Listener, error) {
  38. return quic.Listen(conn, c.config, config)
  39. }
  40. func (c *echServerConfig) ListenEarly(conn net.PacketConn, config *quic.Config) (qtls.EarlyListener, error) {
  41. return quic.ListenEarly(conn, c.config, config)
  42. }
  43. func (c *echServerConfig) ConfigureHTTP3() {
  44. http3.ConfigureTLSConfig(c.config)
  45. }