Răsfoiți Sursa

Provide discovery hint from the outside (ref #192)

Jakob Borg 11 ani în urmă
părinte
comite
dd1197236d
2 a modificat fișierele cu 18 adăugiri și 0 ștergeri
  1. 10 0
      cmd/syncthing/gui.go
  2. 8 0
      discover/discover.go

+ 10 - 0
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() {

+ 8 - 0
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 {