From: Matt Joiner Date: Tue, 13 Dec 2016 03:45:40 +0000 (+1100) Subject: dht: Reply with Method Unknown error to unknown query methods received X-Git-Tag: v1.0.0~510 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e80846998ce8b420068177f27ed917869232e1c4;p=btrtrc.git dht: Reply with Method Unknown error to unknown query methods received --- diff --git a/dht/krpc/error.go b/dht/krpc/error.go index fddd0f48..d4b248a7 100644 --- a/dht/krpc/error.go +++ b/dht/krpc/error.go @@ -6,6 +6,11 @@ import ( "github.com/anacrolix/torrent/bencode" ) +var ErrorMethodUnknown = KRPCError{ + Code: 204, + Msg: "Method Unknown", +} + // Represented as a string or list in bencode. type KRPCError struct { Code int diff --git a/dht/server.go b/dht/server.go index 7e910979..14042c6e 100644 --- a/dht/server.go +++ b/dht/server.go @@ -333,11 +333,24 @@ func (s *Server) handleQuery(source Addr, m krpc.Msg) { } go h(ih, p) } - case "vote": - // TODO(anacrolix): Or reject, I don't think I want this. default: - log.Printf("%s: not handling received query: q=%s", s, m.Q) - return + s.sendError(source, m.T, krpc.ErrorMethodUnknown) + } +} + +func (s *Server) sendError(addr Addr, t string, e krpc.KRPCError) { + m := krpc.Msg{ + T: t, + Y: "e", + E: &e, + } + b, err := bencode.Marshal(m) + if err != nil { + panic(err) + } + err = s.writeToNode(b, addr) + if err != nil { + log.Printf("error replying to %s: %s", addr, err) } }