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
}