not quite working yet, but closer
Jeromy committed
Aug 12, 2014 at 22:10 UTC
8542380e8d65f54e056edbda3863df7d6f04e2ff
3 files changed
+26
-3
routing/dht/dht.go
+3
-2
@@ -158,8 +158,8 @@ func (dht *IpfsDHT) handleMessages() {
158
}
159
//
160
161
- u.DOut("[peer: %s]", dht.self.ID.Pretty())
162
- u.DOut("Got message type: '%s' [id = %x, from = %s]",
161
+ u.DOut("[peer: %s]\nGot message type: '%s' [id = %x, from = %s]",
162
+ dht.self.ID.Pretty(),
163
PBDHTMessage_MessageType_name[int32(pmes.GetType())],
164
pmes.GetId(), mes.Peer.ID.Pretty())
165
switch pmes.GetType() {
@@ -235,6 +235,7 @@ func (dht *IpfsDHT) putValueToNetwork(p *peer.Peer, key string, value []byte) er
235
}
236
237
func (dht *IpfsDHT) handleGetValue(p *peer.Peer, pmes *PBDHTMessage) {
238
+ u.DOut("handleGetValue for key: %s", pmes.GetKey())
239
dskey := ds.NewKey(pmes.GetKey())
240
resp := &DHTMessage{
241
Response: true,
routing/dht/routing.go
+19
-1
@@ -62,11 +62,22 @@ func (s *IpfsDHT) PutValue(key u.Key, value []byte) {
62
func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) {
63
route_level := 0
64
65
+ // If we have it local, dont bother doing an RPC!
66
+ // NOTE: this might not be what we want to do...
67
+ val,err := s.GetLocal(key)
68
+ if err != nil {
69
+ return val, nil
70
+ }
71
+
72
p := s.routes[route_level].NearestPeer(kb.ConvertKey(key))
73
if p == nil {
74
return nil, kb.ErrLookupFailure
75
}
76
77
+ if kb.Closer(s.self.ID, p.ID, key) {
78
+ return nil, u.ErrNotFound
79
+ }
80
+
81
for route_level < len(s.routes) && p != nil {
82
pmes, err := s.getValueSingle(p, key, timeout, route_level)
83
if err != nil {
@@ -84,17 +95,21 @@ func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) {
95
// We were given a closer node
96
closers := pmes.GetPeers()
97
if len(closers) > 0 {
98
+ if peer.ID(closers[0].GetId()).Equal(s.self.ID) {
99
+ return nil, u.ErrNotFound
100
+ }
101
maddr, err := ma.NewMultiaddr(closers[0].GetAddr())
102
if err != nil {
103
// ??? Move up route level???
104
panic("not yet implemented")
105
}
106
93
- p, err = s.network.GetConnection(peer.ID(closers[0].GetId()), maddr)
107
+ np, err := s.network.GetConnection(peer.ID(closers[0].GetId()), maddr)
108
if err != nil {
109
u.PErr("[%s] Failed to connect to: %s", s.self.ID.Pretty(), closers[0].GetAddr())
110
route_level++
111
}
112
+ p = np
113
} else {
114
route_level++
115
}
@@ -159,6 +174,9 @@ func (s *IpfsDHT) FindProviders(key u.Key, timeout time.Duration) ([]*peer.Peer,
174
175
var prov_arr []*peer.Peer
176
for _, prov := range pmes_out.GetPeers() {
177
+ if peer.ID(prov.GetId()).Equal(s.self.ID) {
178
+ continue
179
+ }
180
p := s.network.Find(u.Key(prov.GetId()))
181
if p == nil {
182
u.DOut("given provider %s was not in our network already.", peer.ID(prov.GetId()).Pretty())
swarm/swarm.go
+4
@@ -316,6 +316,10 @@ func (s *Swarm) GetConnection(id peer.ID, addr *ma.Multiaddr) (*peer.Peer, error
316
Addresses: []*ma.Multiaddr{addr},
317
}
318
319
+ if id.Equal(s.local.ID) {
320
+ panic("Attempted connection to self!")
321
+ }
322
+
323
conn, err, reused := s.Dial(p)
324
if err != nil {
325
return nil, err