@@ -19,7 +19,9 @@ package route
1919import (
2020 "fmt"
2121
22+ "gitlab.com/thunderdb/ThunderDB/conf"
2223 "gitlab.com/thunderdb/ThunderDB/consistent"
24+ "gitlab.com/thunderdb/ThunderDB/crypto/kms"
2325 "gitlab.com/thunderdb/ThunderDB/proto"
2426 "gitlab.com/thunderdb/ThunderDB/utils/log"
2527)
@@ -51,14 +53,13 @@ func NewDHTService(DHTStorePath string, persistImpl consistent.Persistence, init
5153func (DHT * DHTService ) FindNode (req * proto.FindNodeReq , resp * proto.FindNodeResp ) (err error ) {
5254 if ! IsPermitted (& req .Envelope , DHTFindNode ) {
5355 err = fmt .Errorf ("calling from node %s is not permitted" , req .NodeID )
54- resp .Msg = fmt .Sprint (err )
5556 log .Error (err )
5657 return
5758 }
5859 node , err := DHT .Consistent .GetNode (string (req .NodeID ))
5960 if err != nil {
60- log .Errorf ("get node %s from DHT failed: %s" , req .NodeID , err )
61- resp . Msg = fmt . Sprint (err )
61+ err = fmt .Errorf ("get node %s from DHT failed: %s" , req .NodeID , err )
62+ log . Error (err )
6263 return
6364 }
6465 resp .Node = node
@@ -69,15 +70,14 @@ func (DHT *DHTService) FindNode(req *proto.FindNodeReq, resp *proto.FindNodeResp
6970func (DHT * DHTService ) FindNeighbor (req * proto.FindNeighborReq , resp * proto.FindNeighborResp ) (err error ) {
7071 if ! IsPermitted (& req .Envelope , DHTFindNeighbor ) {
7172 err = fmt .Errorf ("calling from node %s is not permitted" , req .NodeID )
72- resp .Msg = fmt .Sprint (err )
7373 log .Error (err )
7474 return
7575 }
7676
7777 nodes , err := DHT .Consistent .GetNeighbors (string (req .NodeID ), req .Count )
7878 if err != nil {
79- log .Errorf ("get nodes from DHT failed: %s" , err )
80- resp . Msg = fmt . Sprint (err )
79+ err = fmt .Errorf ("get nodes from DHT failed: %s" , err )
80+ log . Error (err )
8181 return
8282 }
8383 resp .Nodes = nodes
@@ -88,17 +88,28 @@ func (DHT *DHTService) FindNeighbor(req *proto.FindNeighborReq, resp *proto.Find
8888func (DHT * DHTService ) Ping (req * proto.PingReq , resp * proto.PingResp ) (err error ) {
8989 log .Debugf ("got req: %#v" , req )
9090 if ! IsPermitted (& req .Envelope , DHTPing ) {
91- err = fmt .Errorf ("calling from node %s is not permitted" , req .NodeID )
92- resp .Msg = fmt .Sprint (err )
91+ err = fmt .Errorf ("calling Ping from node %s is not permitted" , req .NodeID )
92+ log .Error (err )
93+ return
94+ }
95+
96+ // Checking if ID Nonce Pubkey matched
97+ if ! kms .IsIDPubNonceValid (req .Node .ID .ToRawNodeID (), & req .Node .Nonce , req .Node .PublicKey ) {
98+ err = fmt .Errorf ("node: %s nonce public key not match" , req .Node .ID )
99+ log .Error (err )
100+ return
101+ }
102+
103+ // Checking MinNodeIDDifficulty
104+ if req .Node .ID .Difficulty () < conf .GConf .MinNodeIDDifficulty {
105+ err = fmt .Errorf ("node: %s difficulty too low" , req .Node .ID )
93106 log .Error (err )
94107 return
95108 }
96109
97- //TODO(auxten) nonce verification here is very necessary
98110 err = DHT .Consistent .Add (req .Node )
99111 if err != nil {
100- log .Errorf ("DHT.Consistent.Add %v failed: %s" , req .Node , err )
101- resp .Msg = err .Error ()
112+ err = fmt .Errorf ("DHT.Consistent.Add %v failed: %s" , req .Node , err )
102113 } else {
103114 resp .Msg = "Pong"
104115 }
0 commit comments