AddrReqHandle handles the neighbor address request from peer
(data *msgTypes.MsgPayload, p2p p2p.P2P, pid *evtActor.PID, args ...interface{})
| 52 | |
| 53 | // AddrReqHandle handles the neighbor address request from peer |
| 54 | func AddrReqHandle(data *msgTypes.MsgPayload, p2p p2p.P2P, pid *evtActor.PID, args ...interface{}) { |
| 55 | log.Trace("[p2p]receive addr request message", data.Addr, data.Id) |
| 56 | remotePeer := p2p.GetPeer(data.Id) |
| 57 | if remotePeer == nil { |
| 58 | log.Debug("[p2p]remotePeer invalid in AddrReqHandle") |
| 59 | return |
| 60 | } |
| 61 | |
| 62 | addrStr := p2p.GetNeighborAddrs() |
| 63 | //check mask peers |
| 64 | mskPeers := config.DefConfig.P2PNode.ReservedCfg.MaskPeers |
| 65 | if config.DefConfig.P2PNode.ReservedPeersOnly && len(mskPeers) > 0 { |
| 66 | mskPeerMap := make(map[string]bool) |
| 67 | for _, mskAddr := range mskPeers { |
| 68 | mskPeerMap[mskAddr] = true |
| 69 | } |
| 70 | |
| 71 | // get remote peer IP |
| 72 | // if get remotePeerAddr failed, do masking anyway |
| 73 | remoteAddr, _ := remotePeer.GetAddr16() |
| 74 | var remoteIp net.IP = remoteAddr[:] |
| 75 | |
| 76 | // remove msk peers from neigh-addr-list |
| 77 | // if remotePeer is in msk-list, skip masking |
| 78 | if _, isMskPeer := mskPeerMap[remoteIp.String()]; !isMskPeer { |
| 79 | mskAddrList := make([]msgCommon.PeerAddr, 0) |
| 80 | for _, addr := range addrStr { |
| 81 | var ip net.IP |
| 82 | ip = addr.IpAddr[:] |
| 83 | address := ip.To16().String() |
| 84 | if _, present := mskPeerMap[address]; !present { |
| 85 | mskAddrList = append(mskAddrList, addr) |
| 86 | } |
| 87 | } |
| 88 | // replace with mskAddrList |
| 89 | addrStr = mskAddrList |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | msg := msgpack.NewAddrs(addrStr) |
| 94 | err := p2p.Send(remotePeer, msg) |
| 95 | if err != nil { |
| 96 | log.Warn(err) |
| 97 | return |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | // HeaderReqHandle handles the header sync req from peer |
| 102 | func HeadersReqHandle(data *msgTypes.MsgPayload, p2p p2p.P2P, pid *evtActor.PID, args ...interface{}) { |