Update quic to 0.22.0 to support RFC9000, enable batch reads (#7862)
* Update quic to 0.22.0 to support RFC9000, enable batch reads * Remove wrappers that are not needed anymore
This commit is contained in:
@@ -15,7 +15,6 @@ import (
|
||||
"net/url"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/lucas-clemente/quic-go"
|
||||
@@ -98,25 +97,12 @@ func (t *quicListener) serve(ctx context.Context) error {
|
||||
svc, conn := stun.New(t.cfg, t, udpConn)
|
||||
defer conn.Close()
|
||||
|
||||
quicWrapper := quicWrapper{
|
||||
PacketConn: conn,
|
||||
underlying: udpConn,
|
||||
}
|
||||
var wrapped net.PacketConn = &quicWrapper
|
||||
|
||||
if oobConn, ok := conn.(oobConn); ok {
|
||||
l.Debugf("wrapping in oob conn")
|
||||
wrapped = &oobConnWrapper{
|
||||
quicWrapper, oobConn,
|
||||
}
|
||||
}
|
||||
|
||||
go svc.Serve(ctx)
|
||||
|
||||
registry.Register(t.uri.Scheme, wrapped)
|
||||
defer registry.Unregister(t.uri.Scheme, wrapped)
|
||||
registry.Register(t.uri.Scheme, conn)
|
||||
defer registry.Unregister(t.uri.Scheme, conn)
|
||||
|
||||
listener, err := quic.Listen(wrapped, t.tlsCfg, quicConfig)
|
||||
listener, err := quic.Listen(conn, t.tlsCfg, quicConfig)
|
||||
if err != nil {
|
||||
l.Infoln("Listen (BEP/quic):", err)
|
||||
return err
|
||||
@@ -246,33 +232,3 @@ func (f *quicListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.
|
||||
func (quicListenerFactory) Enabled(cfg config.Configuration) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// quicWrapper provides methods used by quic
|
||||
// https://github.com/lucas-clemente/quic-go/blob/master/packet_handler_map.go#L85
|
||||
type quicWrapper struct {
|
||||
net.PacketConn
|
||||
underlying *net.UDPConn
|
||||
}
|
||||
|
||||
// SetReadBuffer is required by QUIC
|
||||
func (s *quicWrapper) SetReadBuffer(size int) error {
|
||||
return s.underlying.SetReadBuffer(size)
|
||||
}
|
||||
|
||||
// SyscallConn is required by QUIC
|
||||
func (s *quicWrapper) SyscallConn() (syscall.RawConn, error) {
|
||||
return s.underlying.SyscallConn()
|
||||
}
|
||||
|
||||
// oobConn is used to assert that stun package returned a net.PacketConn that implements this interface.
|
||||
// If it does, we then wrap quicWrapper in oobConnWrapper, to expose those methods to QUIC package.
|
||||
type oobConn interface {
|
||||
ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *net.UDPAddr, err error)
|
||||
WriteMsgUDP(b, oob []byte, addr *net.UDPAddr) (n, oobn int, err error)
|
||||
}
|
||||
|
||||
// See: https://pkg.go.dev/github.com/lucas-clemente/quic-go#OOBCapablePacketConn
|
||||
type oobConnWrapper struct {
|
||||
quicWrapper
|
||||
oobConn
|
||||
}
|
||||
|
||||
@@ -59,21 +59,7 @@ func (q *quicTlsConn) Close() error {
|
||||
}
|
||||
|
||||
func (q *quicTlsConn) ConnectionState() tls.ConnectionState {
|
||||
qcs := q.Session.ConnectionState()
|
||||
return tls.ConnectionState{
|
||||
Version: qcs.Version,
|
||||
HandshakeComplete: qcs.HandshakeComplete,
|
||||
DidResume: qcs.DidResume,
|
||||
CipherSuite: qcs.CipherSuite,
|
||||
NegotiatedProtocol: qcs.NegotiatedProtocol,
|
||||
NegotiatedProtocolIsMutual: qcs.NegotiatedProtocolIsMutual,
|
||||
ServerName: qcs.ServerName,
|
||||
PeerCertificates: qcs.PeerCertificates,
|
||||
VerifiedChains: qcs.VerifiedChains,
|
||||
SignedCertificateTimestamps: qcs.SignedCertificateTimestamps,
|
||||
OCSPResponse: qcs.OCSPResponse,
|
||||
TLSUnique: qcs.TLSUnique,
|
||||
}
|
||||
return q.Session.ConnectionState().TLS.ConnectionState
|
||||
}
|
||||
|
||||
// Sort available packet connections by ip address, preferring unspecified local address.
|
||||
|
||||
Reference in New Issue
Block a user