@cryptotaxi247 / kubo / commits / 8542380e8

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