diff --git a/nameserver/entry.go b/nameserver/entry.go index dd11f5b5..312bcd4e 100644 --- a/nameserver/entry.go +++ b/nameserver/entry.go @@ -241,6 +241,15 @@ func (g *GossipData) Merge(o router.GossipData) { } } +func (g *GossipData) Decode(msg []byte) error { + if err := gob.NewDecoder(bytes.NewReader(msg)).Decode(g); err != nil { + return err + } + + sort.Sort(CaseInsensitive(g.Entries)) + return nil +} + func (g *GossipData) Encode() [][]byte { // Make a copy so we can sort: all outgoing data is sent in case-sensitive order g2 := GossipData{Timestamp: g.Timestamp, Entries: make(Entries, len(g.Entries))} diff --git a/nameserver/nameserver.go b/nameserver/nameserver.go index a2e9f238..f85e5482 100644 --- a/nameserver/nameserver.go +++ b/nameserver/nameserver.go @@ -1,10 +1,7 @@ package nameserver import ( - "bytes" - "encoding/gob" "fmt" - "sort" "sync" "time" @@ -205,16 +202,13 @@ func (n *Nameserver) OnGossipUnicast(sender router.PeerName, msg []byte) error { func (n *Nameserver) receiveGossip(msg []byte) (router.GossipData, router.GossipData, error) { var gossip GossipData - if err := gob.NewDecoder(bytes.NewReader(msg)).Decode(&gossip); err != nil { + if err := gossip.Decode(msg); err != nil { return nil, nil, err } - if delta := gossip.Timestamp - now(); delta > gossipWindow || delta < -gossipWindow { return nil, nil, fmt.Errorf("clock skew of %d detected", delta) } - sort.Sort(CaseInsensitive(gossip.Entries)) - n.Lock() defer n.Unlock()