})
case "find_node":
targetID := args["target"].(string)
+ if len(targetID) != 20 {
+ log.Printf("bad DHT query: %v", m)
+ return
+ }
var rNodes []NodeInfo
if node := s.nodeByID(targetID); node != nil {
rNodes = append(rNodes, node.NodeInfo())
func (s *Server) heardFromNode(addr *net.UDPAddr, id string) {
n := s.getNode(addr)
- n.id = id
+ if len(id) == 20 {
+ n.id = id
+ }
n.lastHeardFrom = time.Now()
}
func (s *Server) getNode(addr *net.UDPAddr) (n *Node) {
+ if addr.Port == 0 {
+ panic(addr)
+ }
n = s.nodes[addr.String()]
if n == nil {
n = &Node{
// log.Print(err)
} else {
for _, cni := range r.Nodes {
+ if cni.Addr.Port == 0 {
+ // TODO: Why would people even do this?
+ continue
+ }
n := s.getNode(cni.Addr)
n.id = string(cni.ID[:])
}