From 2c008d6589e37e77f01a364ab414d6a95218de36 Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Mon, 14 Feb 2022 14:00:01 -0500 Subject: [PATCH 1/3] Add connection failure events for proxy timeouts This change adds two new connection failure events for snowflake proxies. One fires when the datachannel times out and another fires when the connection to the proxy goes stale. --- client/lib/webrtc.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 282b54d..d5264a9 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -129,6 +129,8 @@ func (c *WebRTCPeer) checkForStaleness(timeout time.Duration) { if time.Since(lastReceive) > timeout { log.Printf("WebRTC: No messages received for %v -- closing stale connection.", timeout) + err := errors.New("no messages received, closing stale connection") + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnSnowflakeConnectionFailed{Error: err}) c.Close() return } @@ -174,7 +176,9 @@ func (c *WebRTCPeer) connect(config *webrtc.Configuration, broker *BrokerChannel case <-c.open: case <-time.After(DataChannelTimeout): c.transport.Close() - return errors.New("timeout waiting for DataChannel.OnOpen") + err = errors.New("timeout waiting for DataChannel.OnOpen") + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnSnowflakeConnectionFailed{Error: err}) + return err } go c.checkForStaleness(SnowflakeTimeout) -- GitLab From 3547b284a9abf219053caaabee3a63f6793d8670 Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Mon, 14 Feb 2022 14:09:16 -0500 Subject: [PATCH 2/3] Make all snowflake events LogSeverityNotice Let's reserve Tor error logs for more severe events that indicate a client-side bug or absolute failure. By default, tor logs at severity level notice (and above). --- client/lib/pt_event_logger.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/lib/pt_event_logger.go b/client/lib/pt_event_logger.go index 46b4e05..25883c4 100644 --- a/client/lib/pt_event_logger.go +++ b/client/lib/pt_event_logger.go @@ -19,7 +19,7 @@ func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { case event.EventOnOfferCreated: e := e.(event.EventOnOfferCreated) if e.Error != nil { - pt.Log(pt.LogSeverityError, fmt.Sprintf("offer creation failure %v", e.Error.Error())) + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer creation failure %v", e.Error.Error())) } else { pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer created")) } @@ -27,7 +27,7 @@ func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { case event.EventOnBrokerRendezvous: e := e.(event.EventOnBrokerRendezvous) if e.Error != nil { - pt.Log(pt.LogSeverityError, fmt.Sprintf("broker failure %v", e.Error.Error())) + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker failure %v", e.Error.Error())) } else { pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker rendezvous peer received")) } @@ -37,7 +37,7 @@ func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { case event.EventOnSnowflakeConnectionFailed: e := e.(event.EventOnSnowflakeConnectionFailed) - pt.Log(pt.LogSeverityError, fmt.Sprintf("connection failed %v", e.Error.Error())) + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("connection failed %v", e.Error.Error())) } } -- GitLab From 01ae5b56e8399d29aa18605dc9add913d84dc553 Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Mon, 14 Feb 2022 15:11:41 -0500 Subject: [PATCH 3/3] Fix client library test Initialize eventsLogger for WebRTCPeer in client library test. --- client/lib/lib_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/lib/lib_test.go b/client/lib/lib_test.go index f741775..45e8fe2 100644 --- a/client/lib/lib_test.go +++ b/client/lib/lib_test.go @@ -171,7 +171,8 @@ func TestSnowflakeClient(t *testing.T) { func TestWebRTCPeer(t *testing.T) { Convey("WebRTCPeer", t, func(c C) { - p := &WebRTCPeer{closed: make(chan struct{})} + eventsLogger := NewPTEventLogger() + p := &WebRTCPeer{closed: make(chan struct{}), eventsLogger: eventsLogger} Convey("checks for staleness", func() { go p.checkForStaleness(time.Second) <-time.After(2 * time.Second) -- GitLab