summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/connections/quic_dial.go2
-rw-r--r--lib/connections/quic_listen.go2
-rw-r--r--lib/connections/quic_misc.go21
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