Browse Source

Ensure QUICTransporter dial errors are emitted

Rod Hynes 6 years ago
parent
commit
f7488a5b5c
2 changed files with 13 additions and 1 deletions
  1. 10 1
      psiphon/common/quic/quic.go
  2. 3 0
      psiphon/meekConn.go

+ 10 - 1
psiphon/common/quic/quic.go

@@ -503,6 +503,7 @@ func (conn *loggingPacketConn) ReadFrom(p []byte) (int, net.Addr, error) {
 // CloseIdleConnections.
 type QUICTransporter struct {
 	*h2quic.RoundTripper
+	noticeEmitter        func(string)
 	udpDialer            func(ctx context.Context) (net.PacketConn, *net.UDPAddr, error)
 	quicSNIAddress       string
 	negotiateQUICVersion string
@@ -515,11 +516,13 @@ type QUICTransporter struct {
 // NewQUICTransporter creates a new QUICTransporter.
 func NewQUICTransporter(
 	ctx context.Context,
+	noticeEmitter func(string),
 	udpDialer func(ctx context.Context) (net.PacketConn, *net.UDPAddr, error),
 	quicSNIAddress string,
 	negotiateQUICVersion string) *QUICTransporter {
 
 	t := &QUICTransporter{
+		noticeEmitter:        noticeEmitter,
 		udpDialer:            udpDialer,
 		quicSNIAddress:       quicSNIAddress,
 		negotiateQUICVersion: negotiateQUICVersion,
@@ -555,7 +558,13 @@ func (t *QUICTransporter) closePacketConn() {
 }
 
 func (t *QUICTransporter) dialQUIC(
-	_, _ string, _ *tls.Config, _ *gquic.Config) (gquic.Session, error) {
+	_, _ string, _ *tls.Config, _ *gquic.Config) (retSession gquic.Session, retErr error) {
+
+	defer func() {
+		if retErr != nil && t.noticeEmitter != nil {
+			t.noticeEmitter(fmt.Sprintf("dialQUIC failed: %s", retErr))
+		}
+	}()
 
 	var versions []gquic.VersionNumber
 

+ 3 - 0
psiphon/meekConn.go

@@ -259,6 +259,9 @@ func DialMeek(
 
 		transport = quic.NewQUICTransporter(
 			ctx,
+			func(message string) {
+				NoticeInfo(message)
+			},
 			udpDialer,
 			quicDialSNIAddress,
 			meekConfig.QUICVersion)