diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/connections/quic_dial.go | 2 | ||||
-rw-r--r-- | lib/connections/quic_listen.go | 2 | ||||
-rw-r--r-- | lib/connections/quic_misc.go | 21 |
3 files changed, 22 insertions, 3 deletions
diff --git a/lib/connections/quic_dial.go b/lib/connections/quic_dial.go index d4b83c649b..ed5dff62f8 100644 --- a/lib/connections/quic_dial.go +++ b/lib/connections/quic_dial.go @@ -80,7 +80,7 @@ func (d *quicDialer) Dial(ctx context.Context, _ protocol.DeviceID, uri *url.URL stream, err := session.OpenStreamSync(ctx) if err != nil { // It's ok to close these, this does not close the underlying packetConn. - _ = session.Close() + _ = session.CloseWithError(1, err.Error()) if createdConn != nil { _ = createdConn.Close() } diff --git a/lib/connections/quic_listen.go b/lib/connections/quic_listen.go index 722d0f494c..ac1b4437e0 100644 --- a/lib/connections/quic_listen.go +++ b/lib/connections/quic_listen.go @@ -145,7 +145,7 @@ func (t *quicListener) serve(ctx context.Context) error { cancel() if err != nil { l.Debugf("failed to accept stream from %s: %v", session.RemoteAddr(), err) - _ = session.Close() + _ = session.CloseWithError(1, err.Error()) continue } diff --git a/lib/connections/quic_misc.go b/lib/connections/quic_misc.go index 37758f2e00..d00fb81582 100644 --- a/lib/connections/quic_misc.go +++ b/lib/connections/quic_misc.go @@ -9,6 +9,7 @@ package connections import ( + "crypto/tls" "net" "github.com/lucas-clemente/quic-go" @@ -30,7 +31,7 @@ type quicTlsConn struct { func (q *quicTlsConn) Close() error { sterr := q.Stream.Close() - seerr := q.Session.Close() + seerr := q.Session.CloseWithError(0, "closing") var pcerr error if q.createdConn != nil { pcerr = q.createdConn.Close() @@ -44,6 +45,24 @@ func (q *quicTlsConn) Close() error { return pcerr } +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, + } +} + // Sort available packet connections by ip address, preferring unspecified local address. func packetConnLess(i interface{}, j interface{}) bool { iIsUnspecified := false |