@cryptotaxi247 / kubo / commits / 0117fb118

dht handleAddProviders adds addr in msg

Otherwise don't have the peer's target address.

Juan Batiz-Benet committed Oct 11, 2014 at 06:33 UTC 0117fb118d0d83bb59448b14a43e552872b50939
3 files changed +28
routing/dht/Message.go
+11
@@ -1,7 +1,10 @@
1 package dht
2
3 import (
4 + "errors"
5 +
6 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
7 + ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
8 peer "github.com/jbenet/go-ipfs/peer"
9 )
10
@@ -35,6 +38,14 @@ func peersToPBPeers(peers []*peer.Peer) []*Message_Peer {
38 return pbpeers
39 }
40
41 +// Address returns a multiaddr associated with the Message_Peer entry
42 +func (m *Message_Peer) Address() (ma.Multiaddr, error) {
43 + if m == nil {
44 + return nil, errors.New("MessagePeer is nil")
45 + }
46 + return ma.NewMultiaddr(*m.Addr)
47 +}
48 +
49 // GetClusterLevel gets and adjusts the cluster level on the message.
50 // a +/- 1 adjustment is needed to distinguish a valid first level (1) and
51 // default "no value" protobuf behavior (0)
routing/dht/dht.go
+4
@@ -216,6 +216,10 @@ func (dht *IpfsDHT) putValueToNetwork(ctx context.Context, p *peer.Peer,
216 func (dht *IpfsDHT) putProvider(ctx context.Context, p *peer.Peer, key string) error {
217
218 pmes := newMessage(Message_ADD_PROVIDER, string(key), 0)
219 +
220 + // add self as the provider
221 + pmes.ProviderPeers = peersToPBPeers([]*peer.Peer{dht.self})
222 +
223 rpmes, err := dht.sendRequest(ctx, p, pmes)
224 if err != nil {
225 return err
routing/dht/handlers.go
+13
@@ -175,6 +175,19 @@ func (dht *IpfsDHT) handleAddProvider(p *peer.Peer, pmes *Message) (*Message, er
175
176 log.Debug("%s adding %s as a provider for '%s'\n", dht.self, p, peer.ID(key))
177
178 + // add provider should use the address given in the message
179 + for _, pb := range pmes.GetCloserPeers() {
180 + if peer.ID(pb.GetId()).Equal(p.ID) {
181 +
182 + addr, err := pb.Address()
183 + if err != nil {
184 + log.Error("provider %s error with address %s", p, *pb.Addr)
185 + continue
186 + }
187 + p.AddAddress(addr)
188 + }
189 + }
190 +
191 dht.providers.AddProvider(key, p)
192 return pmes, nil // send back same msg as confirmation.
193 }