]> Sergey Matveev's repositories - btrtrc.git/commitdiff
dht: Reply with Method Unknown error to unknown query methods received
authorMatt Joiner <anacrolix@gmail.com>
Tue, 13 Dec 2016 03:45:40 +0000 (14:45 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 13 Dec 2016 03:45:40 +0000 (14:45 +1100)
dht/krpc/error.go
dht/server.go

index fddd0f48b45290ca35b25b34976ab59adb471717..d4b248a7b98adefea2c379f1aba6d5289ce2d26b 100644 (file)
@@ -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
index 7e9109791091b7b7843df3fe2f00aedb9f47bf45..14042c6e3da87c7341c3e7733d28b46557208515 100644 (file)
@@ -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)
        }
 }