// Handshake3Update updates local knowledge with the information in the // handshake3 msg we received from remote client. func Handshake3Update(lpeer, rpeer peer.Peer, msg *pb.Handshake3) (*Handshake3Result, error) { res := &Handshake3Result{} // our observed address observedAddr, err := ma.NewMultiaddrBytes(msg.GetObservedAddr()) if err != nil { return res, err } if lpeer.AddAddress(observedAddr) { log.Infof("(nat) added new local, remote-observed address: %s", observedAddr) } res.LocalObservedAddress = observedAddr // remote's reported addresses for _, a := range msg.GetListenAddrs() { addr, err := ma.NewMultiaddrBytes(a) if err != nil { err = fmt.Errorf("remote peer address not a multiaddr: %s", err) log.Errorf("Handshake3 error %s", err) return res, err } rpeer.AddAddress(addr) res.RemoteListenAddresses = append(res.RemoteListenAddresses, addr) } return res, nil }
func (dht *IpfsDHT) handleAddProvider(p peer.Peer, pmes *pb.Message) (*pb.Message, error) { key := u.Key(pmes.GetKey()) log.Debugf("%s adding %s as a provider for '%s'\n", dht.self, p, peer.ID(key)) // add provider should use the address given in the message for _, pb := range pmes.GetProviderPeers() { pid := peer.ID(pb.GetId()) if pid.Equal(p.ID()) { addr, err := pb.Address() if err != nil { log.Errorf("provider %s error with address %s", p, *pb.Addr) continue } log.Infof("received provider %s %s for %s", p, addr, key) p.AddAddress(addr) dht.providers.AddProvider(key, p) } else { log.Errorf("handleAddProvider received provider %s from %s", pid, p) } } return pmes, nil // send back same msg as confirmation. }