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
commit 250a595f89
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 33 additions and 27 deletions

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
}