diff --git a/src/core/api.go b/src/core/api.go index ec03df8d..adfec61a 100644 --- a/src/core/api.go +++ b/src/core/api.go @@ -3,9 +3,10 @@ package core import ( "crypto/ed25519" //"encoding/hex" - "errors" + //"errors" //"fmt" "net" + "net/url" //"sort" //"time" @@ -150,6 +151,7 @@ func (c *Core) SetLogger(log *log.Logger) { // socks://a.b.c.d:e/f.g.h.i:j // This adds the peer to the peer list, so that they will be called again if the // connection drops. +/* func (c *Core) AddPeer(addr string, sintf string) error { if err := c.CallPeer(addr, sintf); err != nil { // TODO: We maybe want this to write the peer to the persistent @@ -184,6 +186,7 @@ func (c *Core) AddPeer(addr string, sintf string) error { } return nil } +*/ /* func (c *Core) RemovePeer(addr string, sintf string) error { @@ -224,5 +227,9 @@ func (c *Core) RemovePeer(addr string, sintf string) error { // This does not add the peer to the peer list, so if the connection drops, the // peer will not be called again automatically. func (c *Core) CallPeer(addr string, sintf string) error { - return c.links.call(addr, sintf) + u, err := url.Parse(addr) + if err != nil { + return err + } + return c.links.call(u, sintf) } diff --git a/src/core/core.go b/src/core/core.go index 0adc51b7..a30b2556 100644 --- a/src/core/core.go +++ b/src/core/core.go @@ -68,7 +68,7 @@ func (c *Core) _addPeerLoop() { // Add peers from the Peers section for _, peer := range current.Peers { - go func(peer, intf string) { + go func(peer string, intf string) { if err := c.CallPeer(peer, intf); err != nil { c.log.Errorln("Failed to add peer:", err) } @@ -78,7 +78,7 @@ func (c *Core) _addPeerLoop() { // Add peers from the InterfacePeers section for intf, intfpeers := range current.InterfacePeers { for _, peer := range intfpeers { - go func(peer, intf string) { + go func(peer string, intf string) { if err := c.CallPeer(peer, intf); err != nil { c.log.Errorln("Failed to add peer:", err) } diff --git a/src/core/link.go b/src/core/link.go index d7de9435..aac5d1a6 100644 --- a/src/core/link.go +++ b/src/core/link.go @@ -73,11 +73,11 @@ func (l *links) reconfigure() { l.tcp.reconfigure() } -func (l *links) call(uri string, sintf string) error { - u, err := url.Parse(uri) - if err != nil { - return fmt.Errorf("peer %s is not correctly formatted (%s)", uri, err) - } +func (l *links) call(u *url.URL, sintf string) error { + //u, err := url.Parse(uri) + //if err != nil { + // return fmt.Errorf("peer %s is not correctly formatted (%s)", uri, err) + //} pathtokens := strings.Split(strings.Trim(u.Path, "/"), "/") tcpOpts := tcpOptions{} if pubkeys, ok := u.Query()["ed25519"]; ok && len(pubkeys) > 0 { diff --git a/src/core/tcp.go b/src/core/tcp.go index 9031256a..3500364f 100644 --- a/src/core/tcp.go +++ b/src/core/tcp.go @@ -19,6 +19,7 @@ import ( "fmt" "math/rand" "net" + "net/url" "strings" "sync" "time" @@ -26,7 +27,7 @@ import ( "golang.org/x/net/proxy" "github.com/yggdrasil-network/yggdrasil-go/src/address" - "github.com/yggdrasil-network/yggdrasil-go/src/util" + //"github.com/yggdrasil-network/yggdrasil-go/src/util" ) const default_timeout = 6 * time.Second @@ -107,17 +108,21 @@ func (t *tcp) init(l *links) error { t.links.core.config.Mutex.RLock() defer t.links.core.config.Mutex.RUnlock() for _, listenaddr := range t.links.core.config.Current.Listen { - switch listenaddr[:6] { - case "tcp://": - if _, err := t.listen(listenaddr[6:], nil); err != nil { + u, err := url.Parse(listenaddr) + if err != nil { + t.links.core.log.Errorln("Failed to parse listener: listener", listenaddr, "is not correctly formatted, ignoring") + } + switch u.Scheme { + case "tcp": + if _, err := t.listen(u.Host, nil); err != nil { return err } - case "tls://": - if _, err := t.listen(listenaddr[6:], t.tls.forListener); err != nil { + case "tls": + if _, err := t.listen(u.Host, t.tls.forListener); err != nil { return err } default: - t.links.core.log.Errorln("Failed to add listener: listener", listenaddr, "is not correctly formatted, ignoring") + t.links.core.log.Errorln("Failed to add listener: listener", u.String(), "is not correctly formatted, ignoring") } } @@ -135,40 +140,43 @@ func (t *tcp) stop() error { } func (t *tcp) reconfigure() { - t.links.core.config.Mutex.RLock() - added := util.Difference(t.links.core.config.Current.Listen, t.links.core.config.Previous.Listen) - deleted := util.Difference(t.links.core.config.Previous.Listen, t.links.core.config.Current.Listen) - t.links.core.config.Mutex.RUnlock() - if len(added) > 0 || len(deleted) > 0 { - for _, a := range added { - switch a[:6] { - case "tcp://": - if _, err := t.listen(a[6:], nil); err != nil { - t.links.core.log.Errorln("Error adding TCP", a[6:], "listener:", err) + panic("TODO cleanup obsolete reconfigure() stuff") + /* + t.links.core.config.Mutex.RLock() + added := util.Difference(t.links.core.config.Current.Listen, t.links.core.config.Previous.Listen) + deleted := util.Difference(t.links.core.config.Previous.Listen, t.links.core.config.Current.Listen) + t.links.core.config.Mutex.RUnlock() + if len(added) > 0 || len(deleted) > 0 { + for _, a := range added { + switch a[:6] { + case "tcp://": + if _, err := t.listen(a[6:], nil); err != nil { + t.links.core.log.Errorln("Error adding TCP", a[6:], "listener:", err) + } + case "tls://": + if _, err := t.listen(a[6:], t.tls.forListener); err != nil { + t.links.core.log.Errorln("Error adding TLS", a[6:], "listener:", err) + } + default: + t.links.core.log.Errorln("Failed to add listener: listener", a, "is not correctly formatted, ignoring") } - case "tls://": - if _, err := t.listen(a[6:], t.tls.forListener); err != nil { - t.links.core.log.Errorln("Error adding TLS", a[6:], "listener:", err) + } + for _, d := range deleted { + if d[:6] != "tcp://" && d[:6] != "tls://" { + t.links.core.log.Errorln("Failed to delete listener: listener", d, "is not correctly formatted, ignoring") + continue + } + t.mutex.Lock() + if listener, ok := t.listeners[d[6:]]; ok { + t.mutex.Unlock() + listener.Stop() + t.links.core.log.Infoln("Stopped TCP listener:", d[6:]) + } else { + t.mutex.Unlock() } - default: - t.links.core.log.Errorln("Failed to add listener: listener", a, "is not correctly formatted, ignoring") } } - for _, d := range deleted { - if d[:6] != "tcp://" && d[:6] != "tls://" { - t.links.core.log.Errorln("Failed to delete listener: listener", d, "is not correctly formatted, ignoring") - continue - } - t.mutex.Lock() - if listener, ok := t.listeners[d[6:]]; ok { - t.mutex.Unlock() - listener.Stop() - t.links.core.log.Infoln("Stopped TCP listener:", d[6:]) - } else { - t.mutex.Unlock() - } - } - } + */ } func (t *tcp) listen(listenaddr string, upgrade *TcpUpgrade) (*TcpListener, error) {