refactor: cleaner way of passing a UDPConn around (#421)

* refactor: cleaner way of passing a UDPConn around

Also part of https://github.com/ooni/probe/issues/1505

* Update internal/engine/netx/quicdialer/connectionstate.go
This commit is contained in:
Simone Basso
2021-07-01 21:56:29 +02:00
committed by GitHub
parent ec350cba1a
commit 250a595f89
9 changed files with 33 additions and 27 deletions
@@ -6,7 +6,7 @@ import (
"github.com/lucas-clemente/quic-go"
)
// ConnectionState returns the ConnectionState of a QUIC Session.
func ConnectionState(sess quic.EarlySession) tls.ConnectionState {
// connectionState returns the ConnectionState of a QUIC Session.
func connectionState(sess quic.EarlySession) tls.ConnectionState {
return sess.ConnectionState().TLS.ConnectionState
}
@@ -14,12 +14,6 @@ type ContextDialer interface {
tlsCfg *tls.Config, cfg *quic.Config) (quic.EarlySession, error)
}
// Dialer dials QUIC connections.
type Dialer interface {
// Note: assumes that tlsCfg and cfg are not nil.
Dial(network, addr string, tlsCfg *tls.Config, cfg *quic.Config) (quic.EarlySession, error)
}
// Resolver is the interface we expect from a resolver.
type Resolver interface {
LookupHost(ctx context.Context, hostname string) (addrs []string, err error)
+1 -1
View File
@@ -45,7 +45,7 @@ func (h HandshakeSaver) DialContext(ctx context.Context, network string,
})
return nil, err
}
state := ConnectionState(sess)
state := connectionState(sess)
h.Saver.Write(trace.Event{
Duration: stop.Sub(start),
Name: "quic_handshake_done",
+6 -11
View File
@@ -1,18 +1,18 @@
package quicdialer
import (
"errors"
"net"
"time"
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
"github.com/ooni/probe-cli/v3/internal/errorsx"
"github.com/ooni/probe-cli/v3/internal/quicx"
)
// QUICListener listens for QUIC connections.
type QUICListener interface {
// Listen creates a new listening PacketConn.
Listen(addr *net.UDPAddr) (net.PacketConn, error)
// Listen creates a new listening UDPConn.
Listen(addr *net.UDPAddr) (quicx.UDPConn, error)
}
// QUICListenerSaver is a QUICListener that also implements saving events.
@@ -25,21 +25,16 @@ type QUICListenerSaver struct {
}
// Listen implements QUICListener.Listen.
func (qls *QUICListenerSaver) Listen(addr *net.UDPAddr) (net.PacketConn, error) {
func (qls *QUICListenerSaver) Listen(addr *net.UDPAddr) (quicx.UDPConn, error) {
pconn, err := qls.QUICListener.Listen(addr)
if err != nil {
return nil, err
}
// TODO(bassosimone): refactor to remove this restriction.
udpConn, ok := pconn.(*net.UDPConn)
if !ok {
return nil, errors.New("quicdialer: cannot convert to udpConn")
}
return saverUDPConn{UDPConn: udpConn, saver: qls.Saver}, nil
return saverUDPConn{UDPConn: pconn, saver: qls.Saver}, nil
}
type saverUDPConn struct {
*net.UDPConn
quicx.UDPConn
saver *trace.Saver
}