diff --git a/main.go b/main.go index cb60b34..a35bd64 100644 --- a/main.go +++ b/main.go @@ -117,6 +117,5 @@ func relay(c *cli.Context) error { cr.TcpPorts = strings.Split(c.GlobalString("tcp"), ",") cr.ServerPort = c.GlobalString("port") cr.CurveType = c.GlobalString("curve") - fmt.Println("relay") - return nil + return cr.Relay() } diff --git a/src/api.go b/src/api.go index 65ba348..0b9e21c 100644 --- a/src/api.go +++ b/src/api.go @@ -67,7 +67,7 @@ func (c *Croc) Send(fname string, codePhrase string) (err error) { } // start relay for listening - runClientError := make(chan error) + runClientError := make(chan error, 2) go func() { d := Init() d.ServerPort = "8140" @@ -94,7 +94,12 @@ func (c *Croc) Send(fname string, codePhrase string) (err error) { go func() { runClientError <- c.client(0, channel) }() - return <-runClientError + err = <-runClientError + if err != nil { + return + } + err = <-runClientError + return } // Receive will receive something through the croc relay diff --git a/src/client.go b/src/client.go index b8f60db..e0db03a 100644 --- a/src/client.go +++ b/src/client.go @@ -22,7 +22,7 @@ import ( var isPrinted bool -func (c *Croc) client(role int, channel string, address ...string) (err error) { +func (c *Croc) client(role int, channel string) (err error) { defer log.Flush() defer c.cleanup() // initialize the channel data for this client @@ -31,16 +31,19 @@ func (c *Croc) client(role int, channel string, address ...string) (err error) { signal.Notify(interrupt, os.Interrupt) // connect to the websocket - var u url.URL - if len(address) != 0 { - u = url.URL{Scheme: strings.Split(address[0], "://")[0], Host: strings.Split(address[0], "://")[1], Path: "/"} - } else { - u = url.URL{Scheme: strings.Split(c.WebsocketAddress, "://")[0], Host: strings.Split(c.WebsocketAddress, "://")[1], Path: "/"} - } + u := url.URL{Scheme: strings.Split(c.WebsocketAddress, "://")[0], Host: strings.Split(c.WebsocketAddress, "://")[1], Path: "/"} log.Debugf("connecting to %s", u.String()) ws, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { - log.Error("dial:", err) + // don't return error if sender can't connect, so + // that croc can be used locally without + // an internet connection + if role == 0 { + log.Debugf("dial %s error: %s", c.WebsocketAddress, err.Error()) + err = nil + } else { + log.Error("dial:", err) + } return } defer ws.Close()