ipfs, libp2p, How to identify the external IP address of myself

dialPeer -> go	h.ids.IdentifyConn(c) -> c.NewStream("/ipfs/id/1.0.0")
SelectProtoOrFail --> ProtocolID + ID
responseHandler.readMsg -> ids.consumeMessage -> consumeObservedAddress -> ids.observedAddrs.Add( EXTERNAL ADDRESS)

peer.ID.Addr will call h.AllAddrs() -> observed := h.ids.ObservedAddrsFor(listen) …

func (oas *ObservedAddrSet) AddrsFor(addr ma.Multiaddr) (addrs []ma.Multiaddr) {
	oas.RLock()
	defer oas.RUnlock()

	if len(oas.addrs) == 0 {
		return nil
	}

	key := string(addr.Bytes())
	observedAddrs, ok := oas.addrs[key]
	if !ok {
		return
	}

	now := time.Now()
	for _, a := range observedAddrs {
		if now.Sub(a.LastSeen) <= oas.ttl && a.activated(oas.ttl) {
			addrs = append(addrs, a.Addr)
		}
	}

	return addrs
}

发布了11 篇原创文章 · 获赞 4 · 访问量 563

猜你喜欢

转载自blog.csdn.net/m0_37889044/article/details/104397567