recipient use public OR local

This commit is contained in:
Zack Scholl 2018-09-22 06:24:26 -07:00
parent cd3a936795
commit 82315ca413
1 changed files with 23 additions and 39 deletions

View File

@ -1,6 +1,7 @@
package croc package croc
import ( import (
"errors"
"fmt" "fmt"
"os" "os"
"os/signal" "os/signal"
@ -68,22 +69,9 @@ func (c *Croc) Send(fname, codephrase string) (err error) {
// Receive the file // Receive the file
func (c *Croc) Receive(codephrase string) (err error) { func (c *Croc) Receive(codephrase string) (err error) {
log.Debug("receiving") log.Debug("receiving")
waitingFor := 2
errChan := make(chan error)
// use public relay // use local relay first
if !c.LocalOnly {
go func() {
// atttempt to connect to public relay
errChan <- c.sendReceive(c.WebsocketAddress, "", codephrase, false)
}()
} else {
waitingFor = 1
}
// use local relay
if !c.NoLocal { if !c.NoLocal {
go func() {
// try to discovery codephrase and server through peer network // try to discovery codephrase and server through peer network
discovered, errDiscover := peerdiscovery.Discover(peerdiscovery.Settings{ discovered, errDiscover := peerdiscovery.Discover(peerdiscovery.Settings{
Limit: 1, Limit: 1,
@ -96,22 +84,18 @@ func (c *Croc) Receive(codephrase string) (err error) {
} }
if len(discovered) > 0 { if len(discovered) > 0 {
log.Debugf("discovered %s:%s", discovered[0].Address, discovered[0].Payload) 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) return c.sendReceive(fmt.Sprintf("ws://%s:%s", discovered[0].Address, discovered[0].Payload), "", codephrase, false)
} else { } else {
log.Debug("discovered no peers") log.Debug("discovered no peers")
waitingFor = 1
} }
}()
} else {
waitingFor = 1
} }
err = <-errChan // use public relay
if err == nil || waitingFor == 1 { if !c.LocalOnly {
return return c.sendReceive(c.WebsocketAddress, "", codephrase, false)
} }
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) { func (c *Croc) sendReceive(websocketAddress, fname, codephrase string, isSender bool) (err error) {