From 82315ca413b13216060558d5ce28ac752cf39cd9 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Sat, 22 Sep 2018 06:24:26 -0700 Subject: [PATCH] recipient use public OR local --- src/croc/sending.go | 62 +++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 39 deletions(-) diff --git a/src/croc/sending.go b/src/croc/sending.go index 61adc6b..2323ea2 100644 --- a/src/croc/sending.go +++ b/src/croc/sending.go @@ -1,6 +1,7 @@ package croc import ( + "errors" "fmt" "os" "os/signal" @@ -68,50 +69,33 @@ func (c *Croc) Send(fname, codephrase string) (err error) { // Receive the file func (c *Croc) Receive(codephrase string) (err error) { log.Debug("receiving") - waitingFor := 2 - errChan := make(chan error) + + // use local relay first + if !c.NoLocal { + // try to discovery codephrase and server through peer network + discovered, errDiscover := peerdiscovery.Discover(peerdiscovery.Settings{ + Limit: 1, + TimeLimit: 300 * time.Millisecond, + Delay: 50 * time.Millisecond, + Payload: []byte("checking"), + }) + if errDiscover != nil { + log.Debug(errDiscover) + } + if len(discovered) > 0 { + log.Debugf("discovered %s:%s", discovered[0].Address, discovered[0].Payload) + return c.sendReceive(fmt.Sprintf("ws://%s:%s", discovered[0].Address, discovered[0].Payload), "", codephrase, false) + } else { + log.Debug("discovered no peers") + } + } // use public relay if !c.LocalOnly { - go func() { - // atttempt to connect to public relay - errChan <- c.sendReceive(c.WebsocketAddress, "", codephrase, false) - }() - } else { - waitingFor = 1 + return c.sendReceive(c.WebsocketAddress, "", codephrase, false) } - // use local relay - if !c.NoLocal { - go func() { - // try to discovery codephrase and server through peer network - discovered, errDiscover := peerdiscovery.Discover(peerdiscovery.Settings{ - Limit: 1, - TimeLimit: 300 * time.Millisecond, - Delay: 50 * time.Millisecond, - Payload: []byte("checking"), - }) - if errDiscover != nil { - log.Debug(errDiscover) - } - if len(discovered) > 0 { - log.Debugf("discovered %s:%s", discovered[0].Address, discovered[0].Payload) - errChan <- c.sendReceive(fmt.Sprintf("ws://%s:%s", discovered[0].Address, discovered[0].Payload), "", codephrase, false) - } else { - log.Debug("discovered no peers") - waitingFor = 1 - } - }() - } else { - waitingFor = 1 - } - - err = <-errChan - if err == nil || waitingFor == 1 { - return - } - log.Debug(err) - return <-errChan + return errors.New("must use local or public relay") } func (c *Croc) sendReceive(websocketAddress, fname, codephrase string, isSender bool) (err error) {