From 002cc0050c61a85aa6f1dc3abf3aeb5a0268ec97 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Tue, 30 Apr 2019 13:07:30 -0600 Subject: [PATCH] can switch between local and nonlocal --- src/croc/croc.go | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/croc/croc.go b/src/croc/croc.go index 93bd33e..23700bd 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -156,6 +156,16 @@ func (c *Client) Send(options TransferOptions) (err error) { // connect to the relay for messaging errchan := make(chan error, 1) + // setup the relay locally + for _, port := range c.Options.RelayPorts { + go func(portStr string) { + err = tcp.Run("debug", portStr) + if err != nil { + panic(err) + } + }(port) + } + // look for peers first go func() { discoveries, err := peerdiscovery.Discover(peerdiscovery.Settings{ @@ -172,14 +182,42 @@ func (c *Client) Send(options TransferOptions) (err error) { }() go func() { + time.Sleep(500 * time.Millisecond) log.Debug("establishing connection") - c.conn[0], err = tcp.ConnectToTCPServer(c.Options.RelayAddress+":"+c.Options.RelayPorts[0], c.Options.SharedSecret) + conn, err := tcp.ConnectToTCPServer("localhost:"+c.Options.RelayPorts[0], c.Options.SharedSecret) if err != nil { err = errors.Wrap(err, fmt.Sprintf("could not connect to %s", c.Options.RelayAddress)) return } - log.Debugf("connection established: %+v", c.conn[0]) - log.Debug(c.conn[0].Receive()) + log.Debugf("connection established: %+v", conn) + for { + data, _ := conn.Receive() + if bytes.Equal(data, []byte("handshake")) { + break + } + } + c.conn[0] = conn + log.Debug("exchanged header message") + c.Options.RelayAddress = "localhost" + errchan <- c.transfer(options) + }() + + go func() { + log.Debug("establishing connection") + conn, err := tcp.ConnectToTCPServer(c.Options.RelayAddress+":"+c.Options.RelayPorts[0], c.Options.SharedSecret) + if err != nil { + err = errors.Wrap(err, fmt.Sprintf("could not connect to %s", c.Options.RelayAddress)) + return + } + log.Debugf("connection established: %+v", conn) + for { + data, _ := conn.Receive() + if bytes.Equal(data, []byte("handshake")) { + break + } + } + + c.conn[0] = conn log.Debug("exchanged header message") errchan <- c.transfer(options) }()