diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index c5aa4b31cd2..83b2fe32c8c 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 bb777f39296..01c2da0253d 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 {