From 926b08c197679ebed9cc1c73fa1693bec38c17a8 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 30 Jun 2014 01:42:03 +0200 Subject: [PATCH] Refactor node ID handling, use check digits (fixes #269) New node ID:s contain four Luhn check digits and are grouped differently. Code uses NodeID type instead of string, so it's formatted homogenously everywhere. --- cmd/discosrv/main.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/cmd/discosrv/main.go b/cmd/discosrv/main.go index 344b5959c..56cb6faa0 100644 --- a/cmd/discosrv/main.go +++ b/cmd/discosrv/main.go @@ -17,6 +17,7 @@ import ( "time" "github.com/calmh/syncthing/discover" + "github.com/calmh/syncthing/protocol" "github.com/golang/groupcache/lru" "github.com/juju/ratelimit" ) @@ -32,7 +33,7 @@ type address struct { } var ( - nodes = make(map[string]node) + nodes = make(map[protocol.NodeID]node) lock sync.Mutex queries = 0 announces = 0 @@ -182,8 +183,16 @@ func handleAnnounceV2(addr *net.UDPAddr, buf []byte) { updated: time.Now(), } + var id protocol.NodeID + if len(pkt.This.ID) == 32 { + // Raw node ID + copy(id[:], pkt.This.ID) + } else { + id.UnmarshalText(pkt.This.ID) + } + lock.Lock() - nodes[pkt.This.ID] = node + nodes[id] = node lock.Unlock() } @@ -199,8 +208,16 @@ func handleQueryV2(conn *net.UDPConn, addr *net.UDPAddr, buf []byte) { log.Printf("<- %v %#v", addr, pkt) } + var id protocol.NodeID + if len(pkt.NodeID) == 32 { + // Raw node ID + copy(id[:], pkt.NodeID) + } else { + id.UnmarshalText(pkt.NodeID) + } + lock.Lock() - node, ok := nodes[pkt.NodeID] + node, ok := nodes[id] queries++ lock.Unlock()