Commit 59143696 authored by Jeromy's avatar Jeromy

not quite working yet, but closer

parent b0f6618d
...@@ -158,8 +158,8 @@ func (dht *IpfsDHT) handleMessages() { ...@@ -158,8 +158,8 @@ func (dht *IpfsDHT) handleMessages() {
} }
// //
u.DOut("[peer: %s]", dht.self.ID.Pretty()) u.DOut("[peer: %s]\nGot message type: '%s' [id = %x, from = %s]",
u.DOut("Got message type: '%s' [id = %x, from = %s]", dht.self.ID.Pretty(),
PBDHTMessage_MessageType_name[int32(pmes.GetType())], PBDHTMessage_MessageType_name[int32(pmes.GetType())],
pmes.GetId(), mes.Peer.ID.Pretty()) pmes.GetId(), mes.Peer.ID.Pretty())
switch pmes.GetType() { switch pmes.GetType() {
...@@ -235,6 +235,7 @@ func (dht *IpfsDHT) putValueToNetwork(p *peer.Peer, key string, value []byte) er ...@@ -235,6 +235,7 @@ func (dht *IpfsDHT) putValueToNetwork(p *peer.Peer, key string, value []byte) er
} }
func (dht *IpfsDHT) handleGetValue(p *peer.Peer, pmes *PBDHTMessage) { func (dht *IpfsDHT) handleGetValue(p *peer.Peer, pmes *PBDHTMessage) {
u.DOut("handleGetValue for key: %s", pmes.GetKey())
dskey := ds.NewKey(pmes.GetKey()) dskey := ds.NewKey(pmes.GetKey())
resp := &DHTMessage{ resp := &DHTMessage{
Response: true, Response: true,
......
...@@ -62,11 +62,22 @@ func (s *IpfsDHT) PutValue(key u.Key, value []byte) { ...@@ -62,11 +62,22 @@ func (s *IpfsDHT) PutValue(key u.Key, value []byte) {
func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) { func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) {
route_level := 0 route_level := 0
// If we have it local, dont bother doing an RPC!
// NOTE: this might not be what we want to do...
val,err := s.GetLocal(key)
if err != nil {
return val, nil
}
p := s.routes[route_level].NearestPeer(kb.ConvertKey(key)) p := s.routes[route_level].NearestPeer(kb.ConvertKey(key))
if p == nil { if p == nil {
return nil, kb.ErrLookupFailure return nil, kb.ErrLookupFailure
} }
if kb.Closer(s.self.ID, p.ID, key) {
return nil, u.ErrNotFound
}
for route_level < len(s.routes) && p != nil { for route_level < len(s.routes) && p != nil {
pmes, err := s.getValueSingle(p, key, timeout, route_level) pmes, err := s.getValueSingle(p, key, timeout, route_level)
if err != nil { if err != nil {
...@@ -84,17 +95,21 @@ func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) { ...@@ -84,17 +95,21 @@ func (s *IpfsDHT) GetValue(key u.Key, timeout time.Duration) ([]byte, error) {
// We were given a closer node // We were given a closer node
closers := pmes.GetPeers() closers := pmes.GetPeers()
if len(closers) > 0 { if len(closers) > 0 {
if peer.ID(closers[0].GetId()).Equal(s.self.ID) {
return nil, u.ErrNotFound
}
maddr, err := ma.NewMultiaddr(closers[0].GetAddr()) maddr, err := ma.NewMultiaddr(closers[0].GetAddr())
if err != nil { if err != nil {
// ??? Move up route level??? // ??? Move up route level???
panic("not yet implemented") panic("not yet implemented")
} }
p, err = s.network.GetConnection(peer.ID(closers[0].GetId()), maddr) np, err := s.network.GetConnection(peer.ID(closers[0].GetId()), maddr)
if err != nil { if err != nil {
u.PErr("[%s] Failed to connect to: %s", s.self.ID.Pretty(), closers[0].GetAddr()) u.PErr("[%s] Failed to connect to: %s", s.self.ID.Pretty(), closers[0].GetAddr())
route_level++ route_level++
} }
p = np
} else { } else {
route_level++ route_level++
} }
...@@ -159,6 +174,9 @@ func (s *IpfsDHT) FindProviders(key u.Key, timeout time.Duration) ([]*peer.Peer, ...@@ -159,6 +174,9 @@ func (s *IpfsDHT) FindProviders(key u.Key, timeout time.Duration) ([]*peer.Peer,
var prov_arr []*peer.Peer var prov_arr []*peer.Peer
for _, prov := range pmes_out.GetPeers() { for _, prov := range pmes_out.GetPeers() {
if peer.ID(prov.GetId()).Equal(s.self.ID) {
continue
}
p := s.network.Find(u.Key(prov.GetId())) p := s.network.Find(u.Key(prov.GetId()))
if p == nil { if p == nil {
u.DOut("given provider %s was not in our network already.", peer.ID(prov.GetId()).Pretty()) u.DOut("given provider %s was not in our network already.", peer.ID(prov.GetId()).Pretty())
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment