MCPcopy Create free account
hub / github.com/DNAProject/DNA / VersionHandle

Function VersionHandle

p2pserver/message/utils/msg_handler.go:240–361  ·  view source on GitHub ↗

VersionHandle handles version handshake protocol from peer

(data *msgTypes.MsgPayload, p2p p2p.P2P, pid *evtActor.PID, args ...interface{})

Source from the content-addressed store, hash-verified

238
239// VersionHandle handles version handshake protocol from peer
240func VersionHandle(data *msgTypes.MsgPayload, p2p p2p.P2P, pid *evtActor.PID, args ...interface{}) {
241 log.Trace("[p2p]receive version message", data.Addr, data.Id)
242
243 version := data.Payload.(*msgTypes.Version)
244
245 remotePeer := p2p.GetPeerFromAddr(data.Addr)
246 if remotePeer == nil {
247 log.Debug("[p2p]peer is not exist", data.Addr)
248 //peer not exist,just remove list and return
249 p2p.RemoveFromConnectingList(data.Addr)
250 return
251 }
252 addrIp, err := msgCommon.ParseIPAddr(data.Addr)
253 if err != nil {
254 log.Warn(err)
255 return
256 }
257 nodeAddr := addrIp + ":" +
258 strconv.Itoa(int(version.P.SyncPort))
259 if config.DefConfig.P2PNode.ReservedPeersOnly && len(config.DefConfig.P2PNode.ReservedCfg.ReservedPeers) > 0 {
260 found := false
261 for _, addr := range config.DefConfig.P2PNode.ReservedCfg.ReservedPeers {
262 if strings.HasPrefix(data.Addr, addr) {
263 log.Debug("[p2p]peer in reserved list", data.Addr)
264 found = true
265 break
266 }
267 }
268 if !found {
269 remotePeer.Close()
270 log.Debug("[p2p]peer not in reserved list,close", data.Addr)
271 return
272 }
273
274 }
275
276 if version.P.Nonce == p2p.GetID() {
277 p2p.RemoveFromInConnRecord(remotePeer.GetAddr())
278 p2p.RemoveFromOutConnRecord(remotePeer.GetAddr())
279 log.Warn("[p2p]the node handshake with itself", remotePeer.GetAddr())
280 p2p.SetOwnAddress(nodeAddr)
281 remotePeer.Close()
282 return
283 }
284
285 s := remotePeer.GetState()
286 if s != msgCommon.INIT && s != msgCommon.HAND {
287 log.Warnf("[p2p]unknown status to received version,%d,%s\n", s, remotePeer.GetAddr())
288 remotePeer.Close()
289 return
290 }
291
292 // Obsolete node
293 p := p2p.GetPeer(version.P.Nonce)
294 if p != nil {
295 ipOld, err := msgCommon.ParseIPAddr(p.GetAddr())
296 if err != nil {
297 log.Warn("[p2p]exist peer %d ip format is wrong %s", version.P.Nonce, p.GetAddr())

Callers 1

TestVersionHandleFunction · 0.85

Calls 15

TraceFunction · 0.92
DebugFunction · 0.92
WarnFunction · 0.92
WarnfFunction · 0.92
InfofFunction · 0.92
SetHttpInfoStateMethod · 0.80
UpdateInfoMethod · 0.80
SetStateMethod · 0.80
GetPeerFromAddrMethod · 0.65
CloseMethod · 0.65
GetIDMethod · 0.65

Tested by 1

TestVersionHandleFunction · 0.68