From e97a00f1536b1cccc4f20ab43831c53761deaaac Mon Sep 17 00:00:00 2001 From: nzimm Date: Tue, 5 Nov 2019 15:37:00 -0700 Subject: [PATCH 1/3] merge conjure.go into stats-reporting --- tapdance/assets.go | 4 ++++ tapdance/conjure.go | 10 +++++++--- tapdance/logger.go | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/tapdance/assets.go b/tapdance/assets.go index 05136df6..b3d5a224 100644 --- a/tapdance/assets.go +++ b/tapdance/assets.go @@ -351,3 +351,7 @@ func (a *assets) saveClientConf() error { func (a *assets) SetStatsSocksAddr(addr string) { a.socksAddr = addr } + +func (a *assets) GetStatsSocksAddr() string { + return a.socksAddr +} diff --git a/tapdance/conjure.go b/tapdance/conjure.go index b09727de..5e0a8701 100644 --- a/tapdance/conjure.go +++ b/tapdance/conjure.go @@ -59,9 +59,13 @@ func DialConjure(ctx context.Context, cjSession *ConjureSession) (net.Conn, erro Logger().Debugf("%v Successfully sent registrations, sleeping for: %v ms", cjSession.IDString(), toSleep) time.Sleep(toSleep) - Logger().Debugf("%v Woke from sleep, attempting to Connect ...", cjSession.IDString()) - return registration.Connect(ctx) - // return Connect(cjSession) + Logger().Tracef("%v Woke from sleep, attempting to Connect ...", cjSession.IDString()) + + conn, err := registration.Connect(ctx) + if conn != nil && err == nil { + statsReporting(cjSession.stats) + } + return conn, err } // Register - Send registrations equal to the width specified in the Conjure Session diff --git a/tapdance/logger.go b/tapdance/logger.go index bbbd358b..7996be44 100644 --- a/tapdance/logger.go +++ b/tapdance/logger.go @@ -1,9 +1,14 @@ package tapdance import ( + "bytes" "fmt" + "net/http" + "net/url" "sync" + "github.com/golang/protobuf/proto" + pb "github.com/refraction-networking/gotapdance/protobuf" "github.com/sirupsen/logrus" ) @@ -35,3 +40,33 @@ func Logger() *logrus.Logger { }) return logrusLogger } + +func statsReporting(stats *pb.SessionStats) { + socks_url, err := url.Parse("socks5://" + Assets().GetStatsSocksAddr()) + if err != nil { + // TODO this should be logged, not printed + fmt.Println("Could not parse socks addr %v", Assets().GetStatsSocksAddr()) + return + } + client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(socks_url)}} + + data, err := proto.Marshal(stats) + if err != nil { + // TODO this should be logged, not printed + fmt.Println("Could not marshal stats protobuf") + return + } + + // TODO send stats protobuf to some refraction.network endpoint + client.Post("https://nzimm.net", "stats", bytes.NewReader(data)) + return + + /* + resp, _ := client.Post("https://nzimm.net", "stats", bytes.NewReader(data)) + if err != nil { + // TODO this should be logged, not printed + fmt.Println("Could not parse socks addr %v", Assets().GetStatsSocksAddr()) + return + } + */ +} From 6c4761b554f5bfede375498efcdee5ac41f37bd7 Mon Sep 17 00:00:00 2001 From: nzimm Date: Tue, 5 Nov 2019 17:48:25 -0700 Subject: [PATCH 2/3] add stats-reporting over socks5 --- tapdance/conjure.go | 2 +- tapdance/logger.go | 7 +++++-- tapdance/logger_test.go | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 tapdance/logger_test.go diff --git a/tapdance/conjure.go b/tapdance/conjure.go index 5e0a8701..4d78970b 100644 --- a/tapdance/conjure.go +++ b/tapdance/conjure.go @@ -63,7 +63,7 @@ func DialConjure(ctx context.Context, cjSession *ConjureSession) (net.Conn, erro conn, err := registration.Connect(ctx) if conn != nil && err == nil { - statsReporting(cjSession.stats) + StatsReporting(cjSession.stats) } return conn, err } diff --git a/tapdance/logger.go b/tapdance/logger.go index 7996be44..1f6f8344 100644 --- a/tapdance/logger.go +++ b/tapdance/logger.go @@ -41,11 +41,14 @@ func Logger() *logrus.Logger { return logrusLogger } -func statsReporting(stats *pb.SessionStats) { +func StatsReporting(stats *pb.SessionStats) { socks_url, err := url.Parse("socks5://" + Assets().GetStatsSocksAddr()) + // Test socks5 proxy + //socks_url, err := url.Parse("socks5://localhost:8080") + fmt.Printf("Got %v as socks5 proxy\n", socks_url) if err != nil { // TODO this should be logged, not printed - fmt.Println("Could not parse socks addr %v", Assets().GetStatsSocksAddr()) + fmt.Printf("Could not parse socks addr %v\n", Assets().GetStatsSocksAddr()) return } client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(socks_url)}} diff --git a/tapdance/logger_test.go b/tapdance/logger_test.go new file mode 100644 index 00000000..f8882b30 --- /dev/null +++ b/tapdance/logger_test.go @@ -0,0 +1,17 @@ +package tapdance + +import ( + "testing" + + pb "github.com/refraction-networking/gotapdance/protobuf" +) + +func TestStatsReporting(t *testing.T) { + reg := ConjureReg{} + testRTT := uint32(1000) + reg.stats = &pb.SessionStats{ + TotalTimeToConnect: &testRTT, + TcpToDecoy: &testRTT, + } + StatsReporting(reg.stats) +} From f0441dabc7a2accd67d23fb2b80dc40adc9da8ce Mon Sep 17 00:00:00 2001 From: nzimm Date: Wed, 6 Nov 2019 22:48:39 -0700 Subject: [PATCH 3/3] finish todo's --- tapdance/conjure.go | 2 +- tapdance/logger.go | 19 ++++--------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/tapdance/conjure.go b/tapdance/conjure.go index 4d78970b..cac2260a 100644 --- a/tapdance/conjure.go +++ b/tapdance/conjure.go @@ -63,7 +63,7 @@ func DialConjure(ctx context.Context, cjSession *ConjureSession) (net.Conn, erro conn, err := registration.Connect(ctx) if conn != nil && err == nil { - StatsReporting(cjSession.stats) + go StatsReporting(cjSession.stats) } return conn, err } diff --git a/tapdance/logger.go b/tapdance/logger.go index 1f6f8344..9ee2be18 100644 --- a/tapdance/logger.go +++ b/tapdance/logger.go @@ -47,29 +47,18 @@ func StatsReporting(stats *pb.SessionStats) { //socks_url, err := url.Parse("socks5://localhost:8080") fmt.Printf("Got %v as socks5 proxy\n", socks_url) if err != nil { - // TODO this should be logged, not printed - fmt.Printf("Could not parse socks addr %v\n", Assets().GetStatsSocksAddr()) + Logger().Debugf("Could not parse socks addr %v: %v\n", Assets().GetStatsSocksAddr(), err) return } client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(socks_url)}} data, err := proto.Marshal(stats) if err != nil { - // TODO this should be logged, not printed - fmt.Println("Could not marshal stats protobuf") + Logger().Debugf("Could not marshal stats protobuf: %v", err) return } - // TODO send stats protobuf to some refraction.network endpoint - client.Post("https://nzimm.net", "stats", bytes.NewReader(data)) + // TODO setup stats endpoint + client.Post("https://stats.refraction.network", "stats", bytes.NewReader(data)) return - - /* - resp, _ := client.Post("https://nzimm.net", "stats", bytes.NewReader(data)) - if err != nil { - // TODO this should be logged, not printed - fmt.Println("Could not parse socks addr %v", Assets().GetStatsSocksAddr()) - return - } - */ }