From: Matt Joiner Date: Tue, 18 Nov 2014 00:03:03 +0000 (-0600) Subject: dht: Move packet processing into a separate function X-Git-Tag: v1.0.0~1523 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=a14f38a21c80e13ebe624c66d6684f2e0e6c17a5;p=btrtrc.git dht: Move packet processing into a separate function --- diff --git a/dht/dht.go b/dht/dht.go index c6d84142..a58bdd0c 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -231,43 +231,43 @@ func (s *Server) init() (err error) { return } +func (s *Server) processPacket(b []byte, addr dHTAddr) { + var d Msg + err := bencode.Unmarshal(b, &d) + if err != nil { + if se, ok := err.(*bencode.SyntaxError); !ok || se.Offset != 0 { + log.Printf("%s: received bad krpc message: %s: %q", s, err, b) + } + return + } + s.mu.Lock() + defer s.mu.Unlock() + if d["y"] == "q" { + s.handleQuery(addr, d) + return + } + t := s.findResponseTransaction(d.T(), addr) + if t == nil { + //log.Printf("unexpected message: %#v", d) + return + } + t.handleResponse(d) + s.removeTransaction(t) + id := "" + if d["y"] == "r" { + id = d["r"].(map[string]interface{})["id"].(string) + } + s.heardFromNode(addr, id) +} + func (s *Server) serve() error { for { var b [0x10000]byte - n, addr_, err := s.socket.ReadFrom(b[:]) + n, addr, err := s.socket.ReadFrom(b[:]) if err != nil { return err } - var d Msg - err = bencode.Unmarshal(b[:n], &d) - if err != nil { - if se, ok := err.(*bencode.SyntaxError); !ok || se.Offset != 0 { - log.Printf("%s: received bad krpc message: %s: %q", s, err, b[:n]) - } - continue - } - // log.Printf("received from %s: %#v", addr_, d) - addr := newDHTAddr(addr_.(*net.UDPAddr)) - s.mu.Lock() - if d["y"] == "q" { - s.handleQuery(addr, d) - s.mu.Unlock() - continue - } - t := s.findResponseTransaction(d.T(), addr) - if t == nil { - //log.Printf("unexpected message: %#v", d) - s.mu.Unlock() - continue - } - t.handleResponse(d) - s.removeTransaction(t) - id := "" - if d["y"] == "r" { - id = d["r"].(map[string]interface{})["id"].(string) - } - s.heardFromNode(addr, id) - s.mu.Unlock() + s.processPacket(b[:n], newDHTAddr(addr.(*net.UDPAddr))) } }