From dd1197236d3942232ec17bc4c3c0c4815603f387 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 12 May 2014 21:50:54 -0300 Subject: [PATCH] Provide discovery hint from the outside (ref #192) --- cmd/syncthing/gui.go | 10 ++++++++++ discover/discover.go | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index c5aa4b31c..83b2fe32c 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -56,6 +56,7 @@ func startGUI(cfg GUIConfiguration, m *Model) error { router.Post("/rest/shutdown", restPostShutdown) router.Post("/rest/error", restPostError) router.Post("/rest/error/clear", restClearErrors) + router.Post("/rest/discovery/hint", restPostDiscoveryHint) mr := martini.New() if len(cfg.User) > 0 && len(cfg.Password) > 0 { @@ -233,6 +234,15 @@ func showGuiError(err string) { guiErrorsMut.Unlock() } +func restPostDiscoveryHint(r *http.Request) { + var qs = r.URL.Query() + var node = qs.Get("node") + var addr = qs.Get("addr") + if len(node) != 0 && len(addr) != 0 && discoverer != nil { + discoverer.Hint(node, []string{addr}) + } +} + func basic(username string, passhash string) http.HandlerFunc { return func(res http.ResponseWriter, req *http.Request) { error := func() { diff --git a/discover/discover.go b/discover/discover.go index bb777f392..01c2da025 100644 --- a/discover/discover.go +++ b/discover/discover.go @@ -90,6 +90,14 @@ func (d *Discoverer) Lookup(node string) []string { return nil } +func (d *Discoverer) Hint(node string, addrs []string) { + resAddrs := resolveAddrs(addrs) + d.registerNode(nil, Node{ + ID: node, + Addresses: resAddrs, + }) +} + func (d *Discoverer) announcementPkt() []byte { var addrs []Address for _, astr := range d.listenAddrs {