diff --git a/go.mod b/go.mod index 1730ffa36d..fc9c2b8640 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/libp2p/zeroconf/v2 v2.2.0 github.com/lucas-clemente/quic-go v0.31.0 github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd - github.com/marten-seemann/webtransport-go v0.2.0 + github.com/marten-seemann/webtransport-go v0.3.0 github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b github.com/minio/sha256-simd v1.0.0 github.com/mr-tron/base58 v1.2.0 diff --git a/go.sum b/go.sum index ec35b6a159..37a7db8fef 100644 --- a/go.sum +++ b/go.sum @@ -333,8 +333,8 @@ github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sN github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/marten-seemann/webtransport-go v0.2.0 h1:987jPVqcyE3vF+CHNIxDhT0P21O+bI4fVF+0NoRujSo= -github.com/marten-seemann/webtransport-go v0.2.0/go.mod h1:XmnWYsWXaxUF7kjeIIzLWPyS+q0OcBY5vA64NuyK0ps= +github.com/marten-seemann/webtransport-go v0.3.0 h1:TqUSf7/qZN8bJyuGrDMz9nDrfMbgH8p7KqV3TYrkBgo= +github.com/marten-seemann/webtransport-go v0.3.0/go.mod h1:4xcfySgZMLP4aG5GBGj1egP7NlpfwgYJ1WJMvPPiVMU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= diff --git a/p2p/transport/webtransport/conn.go b/p2p/transport/webtransport/conn.go index d8a366a0eb..4886a2c501 100644 --- a/p2p/transport/webtransport/conn.go +++ b/p2p/transport/webtransport/conn.go @@ -69,7 +69,7 @@ func (c *conn) allowWindowIncrease(size uint64) bool { // garbage collection to properly work in this package. func (c *conn) Close() error { c.transport.removeConn(c.session) - return c.session.Close() + return c.session.CloseWithError(0, "") } func (c *conn) IsClosed() bool { return c.session.Context().Err() != nil } diff --git a/p2p/transport/webtransport/listener.go b/p2p/transport/webtransport/listener.go index 9a93d014b1..03ff72f81c 100644 --- a/p2p/transport/webtransport/listener.go +++ b/p2p/transport/webtransport/listener.go @@ -137,7 +137,7 @@ func (l *listener) httpHandler(w http.ResponseWriter, r *http.Request) { if err != nil { cancel() log.Debugw("handshake failed", "error", err) - sess.Close() + sess.CloseWithError(1, "") connScope.Done() return } @@ -145,14 +145,14 @@ func (l *listener) httpHandler(w http.ResponseWriter, r *http.Request) { if l.transport.gater != nil && !l.transport.gater.InterceptSecured(network.DirInbound, sconn.RemotePeer(), sconn) { // TODO: can we close with a specific error here? - sess.Close() + sess.CloseWithError(errorCodeConnectionGating, "") connScope.Done() return } if err := connScope.SetPeer(sconn.RemotePeer()); err != nil { log.Debugw("resource manager blocked incoming connection for peer", "peer", sconn.RemotePeer(), "addr", r.RemoteAddr, "error", err) - sess.Close() + sess.CloseWithError(1, "") connScope.Done() return } @@ -163,7 +163,7 @@ func (l *listener) httpHandler(w http.ResponseWriter, r *http.Request) { case l.queue <- conn: default: log.Debugw("accept queue full, dropping incoming connection", "peer", sconn.RemotePeer(), "addr", r.RemoteAddr, "error", err) - sess.Close() + sess.CloseWithError(1, "") connScope.Done() } } diff --git a/p2p/transport/webtransport/stream.go b/p2p/transport/webtransport/stream.go index ff17b3083f..623fc6036f 100644 --- a/p2p/transport/webtransport/stream.go +++ b/p2p/transport/webtransport/stream.go @@ -10,7 +10,7 @@ import ( ) const ( - reset webtransport.ErrorCode = 0 + reset webtransport.StreamErrorCode = 0 ) type webtransportStream struct { diff --git a/p2p/transport/webtransport/transport.go b/p2p/transport/webtransport/transport.go index bfb8adb3bf..0b133e08fd 100644 --- a/p2p/transport/webtransport/transport.go +++ b/p2p/transport/webtransport/transport.go @@ -34,6 +34,8 @@ var log = logging.Logger("webtransport") const webtransportHTTPEndpoint = "/.well-known/libp2p-webtransport" +const errorCodeConnectionGating = 0x47415445 // GATE in ASCII + const certValidity = 14 * 24 * time.Hour type Option func(*transport) error @@ -153,13 +155,12 @@ func (t *transport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tp } sconn, err := t.upgrade(ctx, sess, p, certHashes) if err != nil { - sess.Close() + sess.CloseWithError(1, "") scope.Done() return nil, err } if t.gater != nil && !t.gater.InterceptSecured(network.DirOutbound, p, sconn) { - // TODO: can we close with a specific error here? - sess.Close() + sess.CloseWithError(errorCodeConnectionGating, "") scope.Done() return nil, fmt.Errorf("secured connection gated") }