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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值