[tor-commits] [snowflake/main] Add verbosity switch to suppress diagnostic output
commit 00e8415d8eafb7fc4d75b6786706ef861b253849 Author: Shelikhoo Date: Wed Feb 2 11:35:12 2022 + Add verbosity switch to suppress diagnostic output --- proxy/lib/pt_event_logger.go | 9 ++--- proxy/main.go| 18 -- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go index b0dbf60..7990a44 100644 --- a/proxy/lib/pt_event_logger.go +++ b/proxy/lib/pt_event_logger.go @@ -2,14 +2,16 @@ package snowflake_proxy import ( "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" + "io" "log" "time" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" ) -func NewProxyEventLogger(logPeriod time.Duration) event.SnowflakeEventReceiver { - el := &logEventLogger{logPeriod: logPeriod} +func NewProxyEventLogger(logPeriod time.Duration, output io.Writer) event.SnowflakeEventReceiver { + logger := log.New(output, "", log.LstdFlags|log.LUTC) + el := &logEventLogger{logPeriod: logPeriod, logger: logger} el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick} el.task.Start() return el @@ -21,6 +23,7 @@ type logEventLogger struct { connectionCount int logPeriod time.Duration task*task.Periodic + logger *log.Logger } func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { @@ -36,7 +39,7 @@ func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { func (p *logEventLogger) logTick() error { inbound, inboundUnit := formatTraffic(p.inboundSum) outbound, outboundUnit := formatTraffic(p.inboundSum) - log.Printf("In the last %v, there are %v connections. Traffic Relayed â %v %v, â %v %v.\n", + p.logger.Printf("In the last %v, there are %v connections. Traffic Relayed â %v %v, â %v %v.\n", p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) p.outboundSum = 0 p.inboundSum = 0 diff --git a/proxy/main.go b/proxy/main.go index de31913..7d025ea 100644 --- a/proxy/main.go +++ b/proxy/main.go @@ -4,6 +4,7 @@ import ( "flag" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "io" + "io/ioutil" "log" "os" "time" @@ -24,15 +25,12 @@ func main() { "the time interval in second before NAT type is retested, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") SummaryInterval := flag.Duration("summary-interval", time.Hour, "the time interval to output summary, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") + verboseLogging := flag.Bool("verbose", false, "increase log verbosity") flag.Parse() - periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval) - eventLogger := event.NewSnowflakeEventDispatcher() - eventLogger.AddSnowflakeEventListener(periodicEventLogger) - proxy := sf.SnowflakeProxy{ Capacity: uint(*capacity), STUNURL:*stunURL, @@ -45,16 +43,21 @@ func main() { } var logOutput io.Writer = os.Stderr + var eventlogOutput io.Writer = os.Stderr log.SetFlags(log.LstdFlags | log.LUTC) - log.SetFlags(log.LstdFlags | log.LUTC) + if !*verboseLogging { + logOutput = ioutil.Discard + } + if *logFilename != "" { f, err := os.OpenFile(*logFilename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) if err != nil { log.Fatal(err) } defer f.Close() - logOutput = io.MultiWriter(os.Stderr, f) + logOutput = io.MultiWriter(logOutput, f) + eventlogOutput = io.MultiWriter(eventlogOutput, f) } if *unsafeLogging { log.SetOutput(logOutput) @@ -62,6 +65,9 @@ func main() { log.SetOutput(&safelog.LogScrubber{Output: logOutput}) } + periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval, eventlogOutput) + eventLogger.AddSnowflakeEventListener(periodicEventLogger) + err := proxy.Start() if err != nil { log.Fatal(err) ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Use log instead of fmt in proxy event logger
commit e828b0607662c7325f4d1bbf4c5072ce81f38fb9 Author: Shelikhoo Date: Fri Jan 28 14:46:45 2022 + Use log instead of fmt in proxy event logger See also: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/72#note_2772839 --- proxy/lib/pt_event_logger.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go index f6552c8..b0dbf60 100644 --- a/proxy/lib/pt_event_logger.go +++ b/proxy/lib/pt_event_logger.go @@ -1,8 +1,8 @@ package snowflake_proxy import ( - "fmt" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" + "log" "time" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" @@ -36,7 +36,7 @@ func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { func (p *logEventLogger) logTick() error { inbound, inboundUnit := formatTraffic(p.inboundSum) outbound, outboundUnit := formatTraffic(p.inboundSum) - fmt.Printf("In the last %v, there are %v connections. Traffic Relayed â %v %v, â %v %v.\n", + log.Printf("In the last %v, there are %v connections. Traffic Relayed â %v %v, â %v %v.\n", p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) p.outboundSum = 0 p.inboundSum = 0 ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Fix ProxyEventLogger output
commit eb229d512b3b1015e28dfcb744000b66a66e648a Author: Shelikhoo Date: Mon Dec 20 16:27:12 2021 + Fix ProxyEventLogger output --- proxy/lib/pt_event_logger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go index 6c4f4e9..f6552c8 100644 --- a/proxy/lib/pt_event_logger.go +++ b/proxy/lib/pt_event_logger.go @@ -36,7 +36,7 @@ func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { func (p *logEventLogger) logTick() error { inbound, inboundUnit := formatTraffic(p.inboundSum) outbound, outboundUnit := formatTraffic(p.inboundSum) - fmt.Printf("In the last %v, there are %v connections. Traffic Relaied â %v %v, â %v %v.\n", + fmt.Printf("In the last %v, there are %v connections. Traffic Relayed â %v %v, â %v %v.\n", p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) p.outboundSum = 0 p.inboundSum = 0 ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Proxy Event Logger
commit 1116bc81c86580316e13b07ecd8d7f0a3ac5ffd5 Author: Shelikhoo Date: Mon Dec 20 15:42:16 2021 + Add Proxy Event Logger --- proxy/lib/pt_event_logger.go | 49 proxy/main.go| 10 + 2 files changed, 59 insertions(+) diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go new file mode 100644 index 000..5804614 --- /dev/null +++ b/proxy/lib/pt_event_logger.go @@ -0,0 +1,49 @@ +package snowflake_proxy + +import ( + "fmt" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" + "time" + + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" +) + +func NewProxyEventLogger(logPeriod time.Duration) event.SnowflakeEventReceiver { + el := &logEventLogger{} + el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick} + el.task.Start() + return el +} + +type logEventLogger struct { + inboundSum int + outboundSum int + connectionCount int + logPeriod time.Duration + task*task.Periodic +} + +func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { + switch e.(type) { + case event.EventOnProxyConnectionOver: + e := e.(event.EventOnProxyConnectionOver) + p.inboundSum += e.InboundTraffic + p.outboundSum += e.OutboundTraffic + p.connectionCount += 1 + } +} + +func (p *logEventLogger) logTick() error { + inbound, inboundUnit := formatTraffic(p.inboundSum) + outbound, outboundUnit := formatTraffic(p.inboundSum) + fmt.Printf("In the last %v, there are %v connections. Traffic Relaied â %v %v, â %v %v.", + p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) + p.outboundSum = 0 + p.inboundSum = 0 + p.connectionCount = 0 + return nil +} + +func (p *logEventLogger) Close() error { + return p.task.Close() +} diff --git a/proxy/main.go b/proxy/main.go index b85dde0..de31913 100644 --- a/proxy/main.go +++ b/proxy/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "io" "log" "os" @@ -21,9 +22,17 @@ func main() { relayURL := flag.String("relay", sf.DefaultRelayURL, "websocket relay URL") NATTypeMeasurementInterval := flag.Duration("nat-retest-interval", time.Hour*24, "the time interval in second before NAT type is retested, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") + SummaryInterval := flag.Duration("summary-interval", time.Hour, + "the time interval to output summary, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") flag.Parse() + periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval) + + eventLogger := event.NewSnowflakeEventDispatcher() + + eventLogger.AddSnowflakeEventListener(periodicEventLogger) + proxy := sf.SnowflakeProxy{ Capacity: uint(*capacity), STUNURL:*stunURL, @@ -32,6 +41,7 @@ func main() { RelayURL: *relayURL, NATTypeMeasurementInterval: *NATTypeMeasurementInterval, + EventDispatcher:eventLogger, } var logOutput io.Writer = os.Stderr ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Fix build break in Go 1.16 for missing import
commit bf3bd635f71fd5faae1ebaa05d5987cfa464b30b Author: Shelikhoo Date: Wed Jan 26 13:39:12 2022 + Fix build break in Go 1.16 for missing import See also: https://gitlab.torproject.org/shelikhoo/snowflake/-/jobs/86751 --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index e8038f1..03541eb 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/prometheus/client_golang v1.10.0 github.com/prometheus/client_model v0.2.0 github.com/smartystreets/goconvey v1.6.4 + github.com/stretchr/testify v1.7.0 // indirect github.com/xtaci/kcp-go/v5 v5.6.1 github.com/xtaci/smux v1.5.15 gitlab.torproject.org/tpo/anti-censorship/geoip v0.0.0-20210928150955-7ce4b3d98d01 ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Fix ProxyEventLogger output
commit 88af9da4a25c26169cadaee9256ce7539db17b19 Author: Shelikhoo Date: Mon Dec 20 16:22:55 2021 + Fix ProxyEventLogger output --- proxy/lib/pt_event_logger.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proxy/lib/pt_event_logger.go b/proxy/lib/pt_event_logger.go index 5804614..6c4f4e9 100644 --- a/proxy/lib/pt_event_logger.go +++ b/proxy/lib/pt_event_logger.go @@ -9,7 +9,7 @@ import ( ) func NewProxyEventLogger(logPeriod time.Duration) event.SnowflakeEventReceiver { - el := &logEventLogger{} + el := &logEventLogger{logPeriod: logPeriod} el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick} el.task.Start() return el @@ -36,7 +36,7 @@ func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { func (p *logEventLogger) logTick() error { inbound, inboundUnit := formatTraffic(p.inboundSum) outbound, outboundUnit := formatTraffic(p.inboundSum) - fmt.Printf("In the last %v, there are %v connections. Traffic Relaied â %v %v, â %v %v.", + fmt.Printf("In the last %v, there are %v connections. Traffic Relaied â %v %v, â %v %v.\n", p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) p.outboundSum = 0 p.inboundSum = 0 ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Extract traffic formatter
commit 9208364475bddb186cb9d6fba6508a420ba1734d Author: Shelikhoo Date: Mon Dec 20 14:46:18 2021 + Extract traffic formatter --- proxy/lib/util.go | 34 +- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/proxy/lib/util.go b/proxy/lib/util.go index a9ac8aa..c7b3684 100644 --- a/proxy/lib/util.go +++ b/proxy/lib/util.go @@ -72,28 +72,28 @@ func (b *bytesSyncLogger) AddInbound(amount int) { // ThroughputSummary view a formatted summary of the throughput totals func (b *bytesSyncLogger) ThroughputSummary() string { - var inUnit, outUnit string - units := []string{"B", "KB", "MB", "GB"} - inbound := b.inbound outbound := b.outbound - for i, u := range units { - inUnit = u - if (inbound < 1000) || (i == len(units)-1) { - break - } - inbound = inbound / 1000 - } - for i, u := range units { - outUnit = u - if (outbound < 1000) || (i == len(units)-1) { - break - } - outbound = outbound / 1000 - } + inbound, inUnit := formatTraffic(inbound) + outbound, outUnit := formatTraffic(outbound) + t := time.Now() return fmt.Sprintf("Traffic throughput (up|down): %d %s|%d %s -- (%d OnMessages, %d Sends, over %d seconds)", inbound, inUnit, outbound, outUnit, b.outEvents, b.inEvents, int(t.Sub(b.start).Seconds())) } func (b *bytesSyncLogger) GetStat() (in int, out int) { return b.inbound, b.outbound } + +func formatTraffic(amount int) (value int, unit string) { + value = amount + units := []string{"B", "KB", "MB", "GB"} + for i, u := range units { + unit = u + if (value < 1000) || (i == len(units)-1) { + break + } + value = value / 1000 + } + return + +} ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add proxy event logger state propagate
commit f12cfe6a9f682c479314440ac9d53389cb38a54f Author: Shelikhoo Date: Mon Dec 20 13:45:53 2021 + Add proxy event logger state propagate --- proxy/lib/snowflake.go | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go index cef5644..8747f66 100644 --- a/proxy/lib/snowflake.go +++ b/proxy/lib/snowflake.go @@ -115,6 +115,7 @@ type SnowflakeProxy struct { NATProbeURL string // NATTypeMeasurementInterval is time before NAT type is retested NATTypeMeasurementInterval time.Duration + EventDispatcherevent.SnowflakeEventDispatcher shutdown chan struct{} } @@ -340,7 +341,7 @@ func (sf *SnowflakeProxy) makePeerConnectionFromOffer(sdp *webrtc.SessionDescrip close(dataChan) pr, pw := io.Pipe() - conn := &webRTCConn{pc: pc, dc: dc, pr: pr} + conn := &webRTCConn{pc: pc, dc: dc, pr: pr, eventLogger: sf.EventDispatcher} conn.bytesLogger = newBytesSyncLogger() dc.OnOpen(func() { @@ -524,6 +525,9 @@ func (sf *SnowflakeProxy) Start() error { if sf.NATProbeURL == "" { sf.NATProbeURL = DefaultNATProbeURL } + if sf.EventDispatcher == nil { + sf.EventDispatcher = event.NewSnowflakeEventDispatcher() + } broker, err = newSignalingServer(sf.BrokerURL, sf.KeepLocalAddresses) if err != nil { ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add EventOnProxyConnectionOver Event
commit d64af3139496481436f8870f4f43f43dca0d4552 Author: Shelikhoo Date: Mon Dec 20 13:23:33 2021 + Add EventOnProxyConnectionOver Event --- common/event/interface.go | 6 ++ 1 file changed, 6 insertions(+) diff --git a/common/event/interface.go b/common/event/interface.go index 697f2b7..b41d7c3 100644 --- a/common/event/interface.go +++ b/common/event/interface.go @@ -28,6 +28,12 @@ type EventOnSnowflakeConnectionFailed struct { Error error } +type EventOnProxyConnectionOver struct { + SnowflakeEvent + InboundTraffic int + OutboundTraffic int +} + type SnowflakeEventReceiver interface { // OnNewSnowflakeEvent notify receiver about a new event // This method MUST not block ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add EventOnProxyConnectionOver Reporting
commit e4305a4d2b01f248f70546f745f64b3373f84a2e Author: Shelikhoo Date: Mon Dec 20 13:36:22 2021 + Add EventOnProxyConnectionOver Reporting --- proxy/lib/snowflake.go | 6 ++ proxy/lib/webrtcconn.go | 2 ++ 2 files changed, 8 insertions(+) diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go index a9ac399..cef5644 100644 --- a/proxy/lib/snowflake.go +++ b/proxy/lib/snowflake.go @@ -40,6 +40,7 @@ import ( "sync" "time" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/messages" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/util" @@ -350,6 +351,11 @@ func (sf *SnowflakeProxy) makePeerConnectionFromOffer(sdp *webrtc.SessionDescrip defer conn.lock.Unlock() log.Println("OnClose channel") log.Println(conn.bytesLogger.ThroughputSummary()) + in, out := conn.bytesLogger.GetStat() + conn.eventLogger.OnNewSnowflakeEvent(event.EventOnProxyConnectionOver{ + InboundTraffic: in, + OutboundTraffic: out, + }) conn.dc = nil dc.Close() pw.Close() diff --git a/proxy/lib/webrtcconn.go b/proxy/lib/webrtcconn.go index 6e16bec..919a679 100644 --- a/proxy/lib/webrtcconn.go +++ b/proxy/lib/webrtcconn.go @@ -9,6 +9,7 @@ import ( "sync" "time" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "github.com/pion/ice/v2" "github.com/pion/sdp/v3" "github.com/pion/webrtc/v3" @@ -30,6 +31,7 @@ type webRTCConn struct { once sync.Once // Synchronization for PeerConnection destruction bytesLogger bytesLogger + eventLogger event.SnowflakeEventReceiver } func (c *webRTCConn) Read(b []byte) (int, error) { ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Raw Data Output for bytesLogger
commit 91379a42f3c9c36a09c8cfd0769bffed626ffe46 Author: Shelikhoo Date: Mon Dec 20 12:29:23 2021 + Add Raw Data Output for bytesLogger --- proxy/lib/util.go | 5 + 1 file changed, 5 insertions(+) diff --git a/proxy/lib/util.go b/proxy/lib/util.go index 5055187..a9ac8aa 100644 --- a/proxy/lib/util.go +++ b/proxy/lib/util.go @@ -11,6 +11,7 @@ type bytesLogger interface { AddOutbound(int) AddInbound(int) ThroughputSummary() string + GetStat() (in int, out int) } // bytesNullLogger Default bytesLogger does nothing. @@ -25,6 +26,8 @@ func (b bytesNullLogger) AddInbound(amount int) {} // ThroughputSummary in bytesNullLogger does nothing func (b bytesNullLogger) ThroughputSummary() string { return "" } +func (b bytesNullLogger) GetStat() (in int, out int) { return -1, -1 } + // bytesSyncLogger uses channels to safely log from multiple sources with output // occuring at reasonable intervals. type bytesSyncLogger struct { @@ -92,3 +95,5 @@ func (b *bytesSyncLogger) ThroughputSummary() string { t := time.Now() return fmt.Sprintf("Traffic throughput (up|down): %d %s|%d %s -- (%d OnMessages, %d Sends, over %d seconds)", inbound, inUnit, outbound, outUnit, b.outEvents, b.inEvents, int(t.Sub(b.start).Seconds())) } + +func (b *bytesSyncLogger) GetStat() (in int, out int) { return b.inbound, b.outbound } ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Refactor WebRTC Peer, Dialer's name to be readable
commit 6cb82618a0f82a15dda617957af8bf08780a482b Author: Shelikhoo Date: Mon Jan 24 11:51:49 2022 + Refactor WebRTC Peer,Dialer's name to be readable See also: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/67#note_2771666 --- client/lib/rendezvous.go | 8 client/lib/snowflake.go | 2 +- client/lib/webrtc.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/lib/rendezvous.go b/client/lib/rendezvous.go index 4c2b240..98cd4d6 100644 --- a/client/lib/rendezvous.go +++ b/client/lib/rendezvous.go @@ -147,11 +147,11 @@ type WebRTCDialer struct { } func NewWebRTCDialer(broker *BrokerChannel, iceServers []webrtc.ICEServer, max int) *WebRTCDialer { - return NewWebRTCDialer4E(broker, iceServers, max, nil) + return NewWebRTCDialerWithEvents(broker, iceServers, max, nil) } -// NewWebRTCDialer4E constructs a new WebRTCDialer. -func NewWebRTCDialer4E(broker *BrokerChannel, iceServers []webrtc.ICEServer, max int, eventLogger event.SnowflakeEventReceiver) *WebRTCDialer { +// NewWebRTCDialerWithEvents constructs a new WebRTCDialer. +func NewWebRTCDialerWithEvents(broker *BrokerChannel, iceServers []webrtc.ICEServer, max int, eventLogger event.SnowflakeEventReceiver) *WebRTCDialer { config := webrtc.Configuration{ ICEServers: iceServers, } @@ -169,7 +169,7 @@ func NewWebRTCDialer4E(broker *BrokerChannel, iceServers []webrtc.ICEServer, max func (w WebRTCDialer) Catch() (*WebRTCPeer, error) { // TODO: [#25591] Fetch ICE server information from Broker. // TODO: [#25596] Consider TURN servers here too. - return NewWebRTCPeer3E(w.webrtcConfig, w.BrokerChannel, w.eventLogger) + return NewWebRTCPeerWithEvents(w.webrtcConfig, w.BrokerChannel, w.eventLogger) } // GetMax returns the maximum number of snowflakes to collect. diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index 0f637f2..594c62c 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -137,7 +137,7 @@ func NewSnowflakeClient(config ClientConfig) (*Transport, error) { max = config.Max } eventsLogger := event.NewSnowflakeEventDispatcher() - transport := &Transport{dialer: NewWebRTCDialer4E(broker, iceServers, max, eventsLogger), eventDispatcher: eventsLogger} + transport := &Transport{dialer: NewWebRTCDialerWithEvents(broker, iceServers, max, eventsLogger), eventDispatcher: eventsLogger} return transport, nil } diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 328c3a9..282b54d 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -38,15 +38,15 @@ type WebRTCPeer struct { func NewWebRTCPeer(config *webrtc.Configuration, broker *BrokerChannel) (*WebRTCPeer, error) { - return NewWebRTCPeer3E(config, broker, nil) + return NewWebRTCPeerWithEvents(config, broker, nil) } -// NewWebRTCPeer3E constructs a WebRTC PeerConnection to a snowflake proxy. +// NewWebRTCPeerWithEvents constructs a WebRTC PeerConnection to a snowflake proxy. // // The creation of the peer handles the signaling to the Snowflake broker, including // the exchange of SDP information, the creation of a PeerConnection, and the establishment // of a DataChannel to the Snowflake proxy. -func NewWebRTCPeer3E(config *webrtc.Configuration, +func NewWebRTCPeerWithEvents(config *webrtc.Configuration, broker *BrokerChannel, eventsLogger event.SnowflakeEventReceiver) (*WebRTCPeer, error) { if eventsLogger == nil { eventsLogger = event.NewSnowflakeEventDispatcher() ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Refactor event logger setting into function call
commit 657aaa6ba8b5baadc0d34d9bd0df0914cbc813e3 Author: Shelikhoo Date: Thu Jan 20 13:17:34 2022 + Refactor event logger setting into function call See also: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/67#note_2770482 --- client/lib/snowflake.go | 17 + client/snowflake.go | 7 +-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index 4f9e663..0f637f2 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -71,6 +71,10 @@ func (addr dummyAddr) String() string { return "dummy" } // https://github.com/Pluggable-Transports/Pluggable-Transports-spec/blob/master/releases/PTSpecV2.1/Pluggable%20Transport%20Specification%20v2.1%20-%20Go%20Transport%20API.pdf type Transport struct { dialer *WebRTCDialer + + // EventDispatcher is the event bus for snowflake events. + // When an important event happens, it will be distributed here. + eventDispatcher event.SnowflakeEventDispatcher } // ClientConfig defines how the SnowflakeClient will connect to the broker and Snowflake proxies. @@ -93,9 +97,6 @@ type ClientConfig struct { // Max is the maximum number of snowflake proxy peers that the client should attempt to // connect to. Defaults to 1. Max int - // EventDispatcher is the event bus for snowflake events. - // When an important event happens, it will be distributed here. - EventDispatcher event.SnowflakeEventDispatcher } // NewSnowflakeClient creates a new Snowflake transport client that can spawn multiple @@ -135,7 +136,8 @@ func NewSnowflakeClient(config ClientConfig) (*Transport, error) { if config.Max > max { max = config.Max } - transport := &Transport{dialer: NewWebRTCDialer4E(broker, iceServers, max, config.EventDispatcher)} + eventsLogger := event.NewSnowflakeEventDispatcher() + transport := &Transport{dialer: NewWebRTCDialer4E(broker, iceServers, max, eventsLogger), eventDispatcher: eventsLogger} return transport, nil } @@ -191,6 +193,13 @@ func (t *Transport) Dial() (net.Conn, error) { cleanup = nil return &SnowflakeConn{Stream: stream, sess: sess, pconn: pconn, snowflakes: snowflakes}, nil } +func (t *Transport) AddSnowflakeEventListener(receiver event.SnowflakeEventReceiver) { + t.eventDispatcher.AddSnowflakeEventListener(receiver) +} + +func (t *Transport) RemoveSnowflakeEventListener(receiver event.SnowflakeEventReceiver) { + t.eventDispatcher.RemoveSnowflakeEventListener(receiver) +} // SetRendezvousMethod sets the rendezvous method to the Snowflake broker. func (t *Transport) SetRendezvousMethod(r RendezvousMethod) { diff --git a/client/snowflake.go b/client/snowflake.go index 0ab71a7..5a00206 100644 --- a/client/snowflake.go +++ b/client/snowflake.go @@ -17,7 +17,6 @@ import ( pt "git.torproject.org/pluggable-transports/goptlib.git" sf "git.torproject.org/pluggable-transports/snowflake.git/v2/client/lib" - "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" ) @@ -91,6 +90,7 @@ func socksAcceptLoop(ln *pt.SocksListener, config sf.ClientConfig, shutdown chan log.Println("Failed to start snowflake transport: ", err) return } + transport.AddSnowflakeEventListener(sf.NewPTEventLogger()) err = conn.Grant(&net.TCPAddr{IP: net.IPv4zero, Port: 0}) if err != nil { log.Printf("conn.Grant error: %s", err) @@ -171,10 +171,6 @@ func main() { iceAddresses := strings.Split(strings.TrimSpace(*iceServersCommas), ",") - eventLogger := event.NewSnowflakeEventDispatcher() - - eventLogger.AddSnowflakeEventListener(sf.NewPTEventLogger()) - config := sf.ClientConfig{ BrokerURL: *brokerURL, AmpCacheURL:*ampCacheURL, @@ -182,7 +178,6 @@ func main() { ICEAddresses: iceAddresses, KeepLocalAddresses: *keepLocalAddresses || *oldKeepLocalAddresses, Max:*max, - EventDispatcher:eventLogger, } // Begin goptlib client process. ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Reduce PT Event Logger Verbosity
commit 55bf117d1ae5b362e4d4fc7dc3ff9a1788b84830 Author: Shelikhoo Date: Mon Dec 13 16:47:23 2021 + Reduce PT Event Logger Verbosity --- client/lib/pt_event_logger.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/lib/pt_event_logger.go b/client/lib/pt_event_logger.go index b183005..46b4e05 100644 --- a/client/lib/pt_event_logger.go +++ b/client/lib/pt_event_logger.go @@ -21,7 +21,7 @@ func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { if e.Error != nil { pt.Log(pt.LogSeverityError, fmt.Sprintf("offer creation failure %v", e.Error.Error())) } else { - pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer created %v", e.WebRTCLocalDescription)) + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer created")) } case event.EventOnBrokerRendezvous: @@ -29,7 +29,7 @@ func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { if e.Error != nil { pt.Log(pt.LogSeverityError, fmt.Sprintf("broker failure %v", e.Error.Error())) } else { - pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker rendezvous peer %v", e.WebRTCRemoteDescription)) + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker rendezvous peer received")) } case event.EventOnSnowflakeConnected: ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Propagate EventLogger Setting
commit 7536dd6fb75697bdc85c10e0be6ed0829a338155 Author: Shelikhoo Date: Mon Dec 13 16:29:10 2021 + Add Propagate EventLogger Setting --- client/lib/rendezvous.go | 13 +++-- client/lib/snowflake.go | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/client/lib/rendezvous.go b/client/lib/rendezvous.go index c3f0d7a..4c2b240 100644 --- a/client/lib/rendezvous.go +++ b/client/lib/rendezvous.go @@ -10,6 +10,7 @@ import ( "sync" "time" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/messages" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/nat" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/util" @@ -141,10 +142,16 @@ type WebRTCDialer struct { *BrokerChannel webrtcConfig *webrtc.Configuration max int + + eventLogger event.SnowflakeEventReceiver } -// NewWebRTCDialer constructs a new WebRTCDialer. func NewWebRTCDialer(broker *BrokerChannel, iceServers []webrtc.ICEServer, max int) *WebRTCDialer { + return NewWebRTCDialer4E(broker, iceServers, max, nil) +} + +// NewWebRTCDialer4E constructs a new WebRTCDialer. +func NewWebRTCDialer4E(broker *BrokerChannel, iceServers []webrtc.ICEServer, max int, eventLogger event.SnowflakeEventReceiver) *WebRTCDialer { config := webrtc.Configuration{ ICEServers: iceServers, } @@ -153,6 +160,8 @@ func NewWebRTCDialer(broker *BrokerChannel, iceServers []webrtc.ICEServer, max i BrokerChannel: broker, webrtcConfig: &config, max: max, + + eventLogger: eventLogger, } } @@ -160,7 +169,7 @@ func NewWebRTCDialer(broker *BrokerChannel, iceServers []webrtc.ICEServer, max i func (w WebRTCDialer) Catch() (*WebRTCPeer, error) { // TODO: [#25591] Fetch ICE server information from Broker. // TODO: [#25596] Consider TURN servers here too. - return NewWebRTCPeer(w.webrtcConfig, w.BrokerChannel) + return NewWebRTCPeer3E(w.webrtcConfig, w.BrokerChannel, w.eventLogger) } // GetMax returns the maximum number of snowflakes to collect. diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index fdcb457..4f9e663 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -135,7 +135,7 @@ func NewSnowflakeClient(config ClientConfig) (*Transport, error) { if config.Max > max { max = config.Max } - transport := &Transport{dialer: NewWebRTCDialer(broker, iceServers, max)} + transport := &Transport{dialer: NewWebRTCDialer4E(broker, iceServers, max, config.EventDispatcher)} return transport, nil } ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Emit non-pointer type event
commit 8d2f662c8c04b1e7e6abc626ac9bd3677055d1f8 Author: Shelikhoo Date: Mon Dec 13 16:28:09 2021 + Emit non-pointer type event --- client/lib/webrtc.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 01b85f5..328c3a9 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -202,7 +202,7 @@ func (c *WebRTCPeer) preparePeerConnection(config *webrtc.Configuration) error { return err } dc.OnOpen(func() { - c.eventsLogger.OnNewSnowflakeEvent(&event.EventOnSnowflakeConnected{}) + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnSnowflakeConnected{}) log.Println("WebRTC: DataChannel.OnOpen") close(c.open) }) @@ -211,7 +211,7 @@ func (c *WebRTCPeer) preparePeerConnection(config *webrtc.Configuration) error { c.Close() }) dc.OnError(func(err error) { - c.eventsLogger.OnNewSnowflakeEvent(&event.EventOnSnowflakeConnectionFailed{Error: err}) + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnSnowflakeConnectionFailed{Error: err}) }) dc.OnMessage(func(msg webrtc.DataChannelMessage) { if len(msg.Data) <= 0 { ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Snowflake Event Reporter for Peer Communication
commit 9a7fcdec03b3bda87a4f1269558816513ce79f66 Author: Shelikhoo Date: Mon Dec 13 14:25:41 2021 + Add Snowflake Event Reporter for Peer Communication --- client/lib/webrtc.go | 4 1 file changed, 4 insertions(+) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 3b496d0..4068eb8 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -191,6 +191,7 @@ func (c *WebRTCPeer) preparePeerConnection(config *webrtc.Configuration) error { return err } dc.OnOpen(func() { + c.eventsLogger.OnNewSnowflakeEvent(&event.EventOnSnowflakeConnected{}) log.Println("WebRTC: DataChannel.OnOpen") close(c.open) }) @@ -198,6 +199,9 @@ func (c *WebRTCPeer) preparePeerConnection(config *webrtc.Configuration) error { log.Println("WebRTC: DataChannel.OnClose") c.Close() }) + dc.OnError(func(err error) { + c.eventsLogger.OnNewSnowflakeEvent(&event.EventOnSnowflakeConnectionFailed{Error: err}) + }) dc.OnMessage(func(msg webrtc.DataChannelMessage) { if len(msg.Data) <= 0 { log.Println("0 length message---") ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Enable PT Event Logger
commit 128936c82514f4c5511e3861a220e57b11a90cc6 Author: Shelikhoo Date: Mon Dec 13 15:45:04 2021 + Enable PT Event Logger --- client/snowflake.go | 6 ++ 1 file changed, 6 insertions(+) diff --git a/client/snowflake.go b/client/snowflake.go index d76efbf..0ab71a7 100644 --- a/client/snowflake.go +++ b/client/snowflake.go @@ -17,6 +17,7 @@ import ( pt "git.torproject.org/pluggable-transports/goptlib.git" sf "git.torproject.org/pluggable-transports/snowflake.git/v2/client/lib" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" ) @@ -170,6 +171,10 @@ func main() { iceAddresses := strings.Split(strings.TrimSpace(*iceServersCommas), ",") + eventLogger := event.NewSnowflakeEventDispatcher() + + eventLogger.AddSnowflakeEventListener(sf.NewPTEventLogger()) + config := sf.ClientConfig{ BrokerURL: *brokerURL, AmpCacheURL:*ampCacheURL, @@ -177,6 +182,7 @@ func main() { ICEAddresses: iceAddresses, KeepLocalAddresses: *keepLocalAddresses || *oldKeepLocalAddresses, Max:*max, + EventDispatcher:eventLogger, } // Begin goptlib client process. ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add PT Event Logger
commit ac64d17705a48cb6ace310503e14b62c629655d6 Author: Shelikhoo Date: Mon Dec 13 15:39:59 2021 + Add PT Event Logger --- client/lib/pt_event_logger.go | 43 +++ 1 file changed, 43 insertions(+) diff --git a/client/lib/pt_event_logger.go b/client/lib/pt_event_logger.go new file mode 100644 index 000..b183005 --- /dev/null +++ b/client/lib/pt_event_logger.go @@ -0,0 +1,43 @@ +package snowflake_client + +import ( + "fmt" + + pt "git.torproject.org/pluggable-transports/goptlib.git" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" +) + +func NewPTEventLogger() event.SnowflakeEventReceiver { + return &ptEventLogger{} +} + +type ptEventLogger struct { +} + +func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { + switch e.(type) { + case event.EventOnOfferCreated: + e := e.(event.EventOnOfferCreated) + if e.Error != nil { + pt.Log(pt.LogSeverityError, fmt.Sprintf("offer creation failure %v", e.Error.Error())) + } else { + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer created %v", e.WebRTCLocalDescription)) + } + + case event.EventOnBrokerRendezvous: + e := e.(event.EventOnBrokerRendezvous) + if e.Error != nil { + pt.Log(pt.LogSeverityError, fmt.Sprintf("broker failure %v", e.Error.Error())) + } else { + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker rendezvous peer %v", e.WebRTCRemoteDescription)) + } + + case event.EventOnSnowflakeConnected: + pt.Log(pt.LogSeverityNotice, fmt.Sprintf("connected")) + + case event.EventOnSnowflakeConnectionFailed: + e := e.(event.EventOnSnowflakeConnectionFailed) + pt.Log(pt.LogSeverityError, fmt.Sprintf("connection failed %v", e.Error.Error())) + } + +} ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add NewWebRTCPeer3E Initializer
commit 36ca610d6bf399a1cf6e6d35cec8e57e6eddf6b4 Author: Shelikhoo Date: Mon Dec 13 15:05:38 2021 + Add NewWebRTCPeer3E Initializer This name includes [E]vent to reduce merge conflict with forward proxy change set. --- client/lib/webrtc.go | 17 ++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index 4068eb8..01b85f5 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -36,13 +36,22 @@ type WebRTCPeer struct { eventsLogger event.SnowflakeEventReceiver } -// NewWebRTCPeer constructs a WebRTC PeerConnection to a snowflake proxy. +func NewWebRTCPeer(config *webrtc.Configuration, + broker *BrokerChannel) (*WebRTCPeer, error) { + return NewWebRTCPeer3E(config, broker, nil) +} + +// NewWebRTCPeer3E constructs a WebRTC PeerConnection to a snowflake proxy. // // The creation of the peer handles the signaling to the Snowflake broker, including // the exchange of SDP information, the creation of a PeerConnection, and the establishment // of a DataChannel to the Snowflake proxy. -func NewWebRTCPeer(config *webrtc.Configuration, - broker *BrokerChannel) (*WebRTCPeer, error) { +func NewWebRTCPeer3E(config *webrtc.Configuration, + broker *BrokerChannel, eventsLogger event.SnowflakeEventReceiver) (*WebRTCPeer, error) { + if eventsLogger == nil { + eventsLogger = event.NewSnowflakeEventDispatcher() + } + connection := new(WebRTCPeer) { var buf [8]byte @@ -59,6 +68,8 @@ func NewWebRTCPeer(config *webrtc.Configuration, // Pipes remain the same even when DataChannel gets switched. connection.recvPipe, connection.writePipe = io.Pipe() + connection.eventsLogger = eventsLogger + err := connection.connect(config, broker) if err != nil { connection.Close() ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add snowflake event handler to client config
commit cd6d837d85bb915d77bf122a82bb161c9d68cf20 Author: Shelikhoo Date: Mon Nov 29 12:46:51 2021 + Add snowflake event handler to client config --- client/lib/snowflake.go | 4 1 file changed, 4 insertions(+) diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index 56dd312..fdcb457 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -35,6 +35,7 @@ import ( "strings" "time" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/nat" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/turbotunnel" "github.com/pion/webrtc/v3" @@ -92,6 +93,9 @@ type ClientConfig struct { // Max is the maximum number of snowflake proxy peers that the client should attempt to // connect to. Defaults to 1. Max int + // EventDispatcher is the event bus for snowflake events. + // When an important event happens, it will be distributed here. + EventDispatcher event.SnowflakeEventDispatcher } // NewSnowflakeClient creates a new Snowflake transport client that can spawn multiple ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Snowflake Event Reporter for Broker Communication
commit c3f09994daa5a512a6d6cea026aeb15162d5d866 Author: Shelikhoo Date: Mon Dec 13 14:10:06 2021 + Add Snowflake Event Reporter for Broker Communication --- client/lib/webrtc.go | 19 --- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index f4b775c..3b496d0 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -9,6 +9,7 @@ import ( "sync" "time" + "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "github.com/pion/webrtc/v3" ) @@ -31,7 +32,8 @@ type WebRTCPeer struct { once sync.Once // Synchronization for PeerConnection destruction - bytesLogger bytesLogger + bytesLogger bytesLogger + eventsLogger event.SnowflakeEventReceiver } // NewWebRTCPeer constructs a WebRTC PeerConnection to a snowflake proxy. @@ -131,10 +133,21 @@ func (c *WebRTCPeer) connect(config *webrtc.Configuration, broker *BrokerChannel log.Println(c.id, " connecting...") // TODO: When go-webrtc is more stable, it's possible that a new // PeerConnection won't need to be re-prepared each time. - if err := c.preparePeerConnection(config); err != nil { + err := c.preparePeerConnection(config) + localDescription := c.pc.LocalDescription() + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnOfferCreated{ + WebRTCLocalDescription: localDescription, + Error: err, + }) + if err != nil { return err } - answer, err := broker.Negotiate(c.pc.LocalDescription()) + + answer, err := broker.Negotiate(localDescription) + c.eventsLogger.OnNewSnowflakeEvent(event.EventOnBrokerRendezvous{ + WebRTCRemoteDescription: answer, + Error: err, + }) if err != nil { return err } ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Event Bus Test
commit b5ef18803f08364db15ba66b0189371d5e79d821 Author: Shelikhoo Date: Fri Nov 26 16:24:21 2021 + Add Event Bus Test --- common/event/bus_test.go | 32 1 file changed, 32 insertions(+) diff --git a/common/event/bus_test.go b/common/event/bus_test.go new file mode 100644 index 000..df40d3d --- /dev/null +++ b/common/event/bus_test.go @@ -0,0 +1,32 @@ +package event + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +type stubReceiver struct { + counter int +} + +func (s *stubReceiver) OnNewSnowflakeEvent(event SnowflakeEvent) { + s.counter++ +} + +func TestBusDispatch(t *testing.T) { + EventBus := NewSnowflakeEventDispatcher() + StubReceiverA := &stubReceiver{} + StubReceiverB := &stubReceiver{} + EventBus.AddSnowflakeEventListener(StubReceiverA) + EventBus.AddSnowflakeEventListener(StubReceiverB) + assert.Equal(t, 0, StubReceiverA.counter) + assert.Equal(t, 0, StubReceiverB.counter) + EventBus.OnNewSnowflakeEvent(EventOnSnowflakeConnected{}) + assert.Equal(t, 1, StubReceiverA.counter) + assert.Equal(t, 1, StubReceiverB.counter) + EventBus.RemoveSnowflakeEventListener(StubReceiverB) + EventBus.OnNewSnowflakeEvent(EventOnSnowflakeConnected{}) + assert.Equal(t, 2, StubReceiverA.counter) + assert.Equal(t, 1, StubReceiverB.counter) + +} ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Event Bus Implementation
commit 5f03f88d730c4b1c298c4c3eeceeba8023f056ff Author: Shelikhoo Date: Fri Nov 26 16:00:30 2021 + Add Event Bus Implementation This event bus implementation favours simplicity over efficiency and is not suitable for frequent addition and removal of listeners. --- common/event/bus.go | 39 +++ 1 file changed, 39 insertions(+) diff --git a/common/event/bus.go b/common/event/bus.go new file mode 100644 index 000..7e45779 --- /dev/null +++ b/common/event/bus.go @@ -0,0 +1,39 @@ +package event + +import "sync" + +func NewSnowflakeEventDispatcher() SnowflakeEventDispatcher { + return &eventBus{lock: &sync.Mutex{}} +} + +type eventBus struct { + lock *sync.Mutex + listeners []SnowflakeEventReceiver +} + +func (e *eventBus) OnNewSnowflakeEvent(event SnowflakeEvent) { + e.lock.Lock() + defer e.lock.Unlock() + for _, v := range e.listeners { + v.OnNewSnowflakeEvent(event) + } +} + +func (e *eventBus) AddSnowflakeEventListener(receiver SnowflakeEventReceiver) { + e.lock.Lock() + defer e.lock.Unlock() + e.listeners = append(e.listeners, receiver) +} + +func (e *eventBus) RemoveSnowflakeEventListener(receiver SnowflakeEventReceiver) { + e.lock.Lock() + defer e.lock.Unlock() + var newListeners []SnowflakeEventReceiver + for _, v := range e.listeners { + if v != receiver { + newListeners = append(newListeners, v) + } + } + e.listeners = newListeners + return +} ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits
[tor-commits] [snowflake/main] Add Snowflake Event API interface
commit 75f770150d6c9943231cb6b8bde0b867137ea26f Author: Shelikhoo Date: Fri Nov 26 15:12:46 2021 + Add Snowflake Event API interface --- common/event/interface.go | 45 + 1 file changed, 45 insertions(+) diff --git a/common/event/interface.go b/common/event/interface.go new file mode 100644 index 000..697f2b7 --- /dev/null +++ b/common/event/interface.go @@ -0,0 +1,45 @@ +package event + +import "github.com/pion/webrtc/v3" + +type SnowflakeEvent interface { + IsSnowflakeEvent() + String() string +} + +type EventOnOfferCreated struct { + SnowflakeEvent + WebRTCLocalDescription *webrtc.SessionDescription + Error error +} + +type EventOnBrokerRendezvous struct { + SnowflakeEvent + WebRTCRemoteDescription *webrtc.SessionDescription + Error error +} + +type EventOnSnowflakeConnected struct { + SnowflakeEvent +} + +type EventOnSnowflakeConnectionFailed struct { + SnowflakeEvent + Error error +} + +type SnowflakeEventReceiver interface { + // OnNewSnowflakeEvent notify receiver about a new event + // This method MUST not block + OnNewSnowflakeEvent(event SnowflakeEvent) +} + +type SnowflakeEventDispatcher interface { + SnowflakeEventReceiver + // AddSnowflakeEventListener allow receiver(s) to receive event notification + // when OnNewSnowflakeEvent is called on the dispatcher. + // Every event listener added will be called when an event is received by the dispatcher. + // The order each listener is called is undefined. + AddSnowflakeEventListener(receiver SnowflakeEventReceiver) + RemoveSnowflakeEventListener(receiver SnowflakeEventReceiver) +} ___ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits