[tor-commits] [snowflake/main] Add verbosity switch to suppress diagnostic output

2022-02-04 Thread shelikhoo
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 := {logPeriod: logPeriod}
+func NewProxyEventLogger(logPeriod time.Duration, output io.Writer) 
event.SnowflakeEventReceiver {
+   logger := log.New(output, "", log.LstdFlags|log.LUTC)
+   el := {logPeriod: logPeriod, logger: logger}
el.task = {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({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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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 := {}
+   el.task = {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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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 := {}
+   el := {logPeriod: logPeriod}
el.task = {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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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 := {pc: pc, dc: dc, pr: pr}
+   conn := {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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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

2022-01-31 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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 := {dialer: NewWebRTCDialer4E(broker, iceServers, 
max, eventsLogger), eventDispatcher: eventsLogger}
+   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

2022-01-25 Thread shelikhoo
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 := {dialer: NewWebRTCDialer4E(broker, iceServers, 
max, config.EventDispatcher)}
+   eventsLogger := event.NewSnowflakeEventDispatcher()
+   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 {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({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

2022-01-25 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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:  ,
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 := {dialer: NewWebRTCDialer(broker, iceServers, 
max)}
+   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

2022-01-25 Thread shelikhoo
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({})
+   
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({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

2022-01-25 Thread shelikhoo
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({})
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({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

2022-01-25 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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 {}
+}
+
+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

2022-01-25 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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

2022-01-25 Thread shelikhoo
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 := {}
+   StubReceiverB := {}
+   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

2022-01-25 Thread shelikhoo
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 {lock: {}}
+}
+
+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

2022-01-25 Thread shelikhoo
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