From: Matt Joiner Date: Mon, 17 Aug 2015 16:11:09 +0000 (+1000) Subject: dht: Improve on on Msg methods X-Git-Tag: v1.0.0~1063 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=3204e276f2f4127f619e6eb5d078987935695af8;p=btrtrc.git dht: Improve on on Msg methods --- diff --git a/dht/announce.go b/dht/announce.go index 84b3c7bc..a7c55868 100644 --- a/dht/announce.go +++ b/dht/announce.go @@ -178,7 +178,7 @@ func (me *Announce) getPeers(addr dHTAddr) error { nodeInfo := NodeInfo{ Addr: t.remoteAddr, } - copy(nodeInfo.ID[:], m.ID()) + copy(nodeInfo.ID[:], m.SenderID()) select { case me.values <- PeersValues{ Peers: vs, diff --git a/dht/dht.go b/dht/dht.go index ed45395c..bca1c778 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -289,11 +289,24 @@ func (m Msg) T() (t string) { return } -func (m Msg) ID() string { +func (m Msg) Args() map[string]interface{} { defer func() { recover() }() - return m[m["y"].(string)].(map[string]interface{})["id"].(string) + return m["a"].(map[string]interface{}) +} + +func (m Msg) SenderID() string { + defer func() { + recover() + }() + switch m["y"].(string) { + case "q": + return m.Args()["id"].(string) + case "r": + return m["r"].(map[string]interface{})["id"].(string) + } + return "" } // Suggested nodes in a response. @@ -647,7 +660,7 @@ func (s *Server) processPacket(b []byte, addr dHTAddr) { //log.Printf("unexpected message: %#v", d) return } - node := s.getNode(addr, d.ID()) + node := s.getNode(addr, d.SenderID()) node.lastGotResponse = time.Now() // TODO: Update node ID as this is an authoritative packet. go t.handleResponse(d) @@ -1090,7 +1103,7 @@ func (s *Server) getPeers(addr dHTAddr, infoHash string) (t *Transaction, err er s.liftNodes(m) at, ok := m.AnnounceToken() if ok { - s.getNode(addr, m.ID()).announceToken = at + s.getNode(addr, m.SenderID()).announceToken = at } }) return diff --git a/dht/dht_test.go b/dht/dht_test.go index 6636ad6f..f84ccb68 100644 --- a/dht/dht_test.go +++ b/dht/dht_test.go @@ -145,7 +145,7 @@ func TestPing(t *testing.T) { defer tn.Close() ok := make(chan bool) tn.SetResponseHandler(func(msg Msg) { - ok <- msg.ID() == srv0.ID() + ok <- msg.SenderID() == srv0.ID() }) if !<-ok { t.FailNow()