Skip to content
Snippets Groups Projects
Commit 6039dc23 authored by Benjamin Wenger's avatar Benjamin Wenger
Browse files

implemented lookup

parent 93882e4d
No related branches found
No related tags found
No related merge requests found
...@@ -20,20 +20,20 @@ build: ...@@ -20,20 +20,20 @@ build:
go mod tidy go mod tidy
update_release: update_release:
GOFLAGS="" go get -u gitlab.com/elixxir/primitives@peppa/newClient GOFLAGS="" go get gitlab.com/elixxir/primitives@release
GOFLAGS="" go get -u gitlab.com/elixxir/crypto@peppa/newClient GOFLAGS="" go get gitlab.com/elixxir/crypto@release
GOFLAGS="" go get -u gitlab.com/xx_network/crypto@release GOFLAGS="" go get gitlab.com/xx_network/crypto@release
GOFLAGS="" go get -u gitlab.com/elixxir/comms@hotfix/TestingFunction GOFLAGS="" go get gitlab.com/elixxir/comms@release
GOFLAGS="" go get -u gitlab.com/xx_network/comms@release GOFLAGS="" go get gitlab.com/xx_network/comms@release
GOFLAGS="" go get -u gitlab.com/xx_network/primitives@release GOFLAGS="" go get gitlab.com/xx_network/primitives@release
update_master: update_master:
GOFLAGS="" go get -u gitlab.com/elixxir/primitives@master GOFLAGS="" go get gitlab.com/elixxir/primitives@master
GOFLAGS="" go get -u gitlab.com/elixxir/crypto@master GOFLAGS="" go get gitlab.com/elixxir/crypto@master
GOFLAGS="" go get -u gitlab.com/xx_network/crypto@master GOFLAGS="" go get gitlab.com/xx_network/crypto@master
GOFLAGS="" go get -u gitlab.com/elixxir/comms@master GOFLAGS="" go get gitlab.com/elixxir/comms@master
GOFLAGS="" go get -u gitlab.com/xx_network/comms@master GOFLAGS="" go get gitlab.com/xx_network/comms@master
GOFLAGS="" go get -u gitlab.com/xx_network/primitives@master GOFLAGS="" go get gitlab.com/xx_network/primitives@master
master: clean update_master build version master: clean update_master build version
......
...@@ -17,11 +17,11 @@ require ( ...@@ -17,11 +17,11 @@ require (
github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/jwalterweatherman v1.1.0
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.7.1 github.com/spf13/viper v1.7.1
gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 gitlab.com/elixxir/comms v0.0.4-0.20201111205457-b073b28c367a
gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e gitlab.com/elixxir/crypto v0.0.5-0.20201110193609-6b5e881867b4
gitlab.com/elixxir/ekv v0.1.3 gitlab.com/elixxir/ekv v0.1.3
gitlab.com/elixxir/primitives v0.0.2 gitlab.com/elixxir/primitives v0.0.3-0.20201116174806-97f190989704
gitlab.com/xx_network/comms v0.0.3 gitlab.com/xx_network/comms v0.0.4-0.20201110022115-4a6171cad07d
gitlab.com/xx_network/crypto v0.0.4 gitlab.com/xx_network/crypto v0.0.4
gitlab.com/xx_network/primitives v0.0.2 gitlab.com/xx_network/primitives v0.0.2
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
......
...@@ -252,6 +252,10 @@ github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0= ...@@ -252,6 +252,10 @@ github.com/zeebo/pcg v1.0.0 h1:dt+dx+HvX8g7Un32rY9XWoYnd0NmKmrIzpHF7qiTDj0=
github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 h1:9q+xVbu5m7XDvT1CVz8s1S/SOVpasWJOx7V/3rAY/pE= gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30 h1:9q+xVbu5m7XDvT1CVz8s1S/SOVpasWJOx7V/3rAY/pE=
gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU= gitlab.com/elixxir/comms v0.0.4-0.20201103220934-c476c9282f30/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU=
gitlab.com/elixxir/comms v0.0.4-0.20201111205457-b073b28c367a h1:GnZLdgn5ZSDtPFsiCUPgqQk2D+e7LmzVOZ9Rq/B8hCY=
gitlab.com/elixxir/comms v0.0.4-0.20201111205457-b073b28c367a/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU=
gitlab.com/elixxir/comms v0.0.4-0.20201112000135-4147e270e129 h1:d4s9JGimUVmqdKlK4NhICayzWBUSM2XmKta821ZJTF0=
gitlab.com/elixxir/comms v0.0.4-0.20201112000135-4147e270e129/go.mod h1:5p7oz4yFrK037rPap6ooaWrloJrzuVZ4jnzOdvgyqnU=
gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4 h1:28ftZDeYEko7xptCZzeFWS1Iam95dj46TWFVVlKmw6A=
gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c= gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw= gitlab.com/elixxir/crypto v0.0.3 h1:znCt/x2bL4y8czTPaaFkwzdgSgW3BJc/1+dxyf1jqVw=
...@@ -260,6 +264,8 @@ gitlab.com/elixxir/crypto v0.0.4 h1:8eWjvUepCU2PiqZM2NFYo6rFg1w8KWO1hMDwMNFEqoI= ...@@ -260,6 +264,8 @@ gitlab.com/elixxir/crypto v0.0.4 h1:8eWjvUepCU2PiqZM2NFYo6rFg1w8KWO1hMDwMNFEqoI=
gitlab.com/elixxir/crypto v0.0.4/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.4/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e h1:rkT8Pzjgo9oF3uS8ExHGNUQoJX/22qK3lU+vU8QsOCY= gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e h1:rkT8Pzjgo9oF3uS8ExHGNUQoJX/22qK3lU+vU8QsOCY=
gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA= gitlab.com/elixxir/crypto v0.0.5-0.20201109203841-ba162a25be6e/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
gitlab.com/elixxir/crypto v0.0.5-0.20201110193609-6b5e881867b4 h1:1a1zZDuqZ56qU1EPgpc+Sqny1YFl0kAKJgQbsVc0WJQ=
gitlab.com/elixxir/crypto v0.0.5-0.20201110193609-6b5e881867b4/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
gitlab.com/elixxir/ekv v0.1.3 h1:OE+LBMIhjGUMwc6hHJzYvEPNJQV7t1vMnJyIgxUMUo8= gitlab.com/elixxir/ekv v0.1.3 h1:OE+LBMIhjGUMwc6hHJzYvEPNJQV7t1vMnJyIgxUMUo8=
gitlab.com/elixxir/ekv v0.1.3/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= gitlab.com/elixxir/ekv v0.1.3/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4=
gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg=
...@@ -269,9 +275,13 @@ gitlab.com/elixxir/primitives v0.0.1 h1:q61anawANlNAExfkeQEE1NCsNih6vNV1FFLoUQX6 ...@@ -269,9 +275,13 @@ gitlab.com/elixxir/primitives v0.0.1 h1:q61anawANlNAExfkeQEE1NCsNih6vNV1FFLoUQX6
gitlab.com/elixxir/primitives v0.0.1/go.mod h1:kNp47yPqja2lHSiS4DddTvFpB/4D9dB2YKnw5c+LJCE= gitlab.com/elixxir/primitives v0.0.1/go.mod h1:kNp47yPqja2lHSiS4DddTvFpB/4D9dB2YKnw5c+LJCE=
gitlab.com/elixxir/primitives v0.0.2 h1:PvyOOp/A6tCtmU7YnGhCCPRdmEogEzCi0Li/WfiVjGo= gitlab.com/elixxir/primitives v0.0.2 h1:PvyOOp/A6tCtmU7YnGhCCPRdmEogEzCi0Li/WfiVjGo=
gitlab.com/elixxir/primitives v0.0.2/go.mod h1:3fxFHSlQhkV4vs+S0dZEz3Om3m+40WX8L806yvSnNFc= gitlab.com/elixxir/primitives v0.0.2/go.mod h1:3fxFHSlQhkV4vs+S0dZEz3Om3m+40WX8L806yvSnNFc=
gitlab.com/elixxir/primitives v0.0.3-0.20201116174806-97f190989704 h1:JkFREumz8skDqkCjjzZnlf5tg+PBiMB9kfVn9z0VEfE=
gitlab.com/elixxir/primitives v0.0.3-0.20201116174806-97f190989704/go.mod h1:3fxFHSlQhkV4vs+S0dZEz3Om3m+40WX8L806yvSnNFc=
gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023/go.mod h1:owEcxTRl7gsoM8c3RQ5KAm5GstxrJp5tn+6JfQ4z5Hw= gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023/go.mod h1:owEcxTRl7gsoM8c3RQ5KAm5GstxrJp5tn+6JfQ4z5Hw=
gitlab.com/xx_network/comms v0.0.3 h1:ch1eJI4WXUE/Kz0Kp9uDWX16B+hfVFmdHY+EOai4Wzc= gitlab.com/xx_network/comms v0.0.3 h1:ch1eJI4WXUE/Kz0Kp9uDWX16B+hfVFmdHY+EOai4Wzc=
gitlab.com/xx_network/comms v0.0.3/go.mod h1:YViGbRj7FjJYoaO4NpALGEd9dK/l8uUT000FEBbUTL8= gitlab.com/xx_network/comms v0.0.3/go.mod h1:YViGbRj7FjJYoaO4NpALGEd9dK/l8uUT000FEBbUTL8=
gitlab.com/xx_network/comms v0.0.4-0.20201110022115-4a6171cad07d h1:wPsoqWNusbFJxvPB1Rvzu+TLZxth3G+ay8qkNrpAuzM=
gitlab.com/xx_network/comms v0.0.4-0.20201110022115-4a6171cad07d/go.mod h1:YViGbRj7FjJYoaO4NpALGEd9dK/l8uUT000FEBbUTL8=
gitlab.com/xx_network/crypto v0.0.3/go.mod h1:DF2HYvvCw9wkBybXcXAgQMzX+MiGbFPjwt3t17VRqRE= gitlab.com/xx_network/crypto v0.0.3/go.mod h1:DF2HYvvCw9wkBybXcXAgQMzX+MiGbFPjwt3t17VRqRE=
gitlab.com/xx_network/crypto v0.0.4 h1:lpKOL5mTJ2awWMfgBy30oD/UvJVrWZzUimSHlOdZZxo= gitlab.com/xx_network/crypto v0.0.4 h1:lpKOL5mTJ2awWMfgBy30oD/UvJVrWZzUimSHlOdZZxo=
gitlab.com/xx_network/crypto v0.0.4/go.mod h1:+lcQEy+Th4eswFgQDwT0EXKp4AXrlubxalwQFH5O0Mk= gitlab.com/xx_network/crypto v0.0.4/go.mod h1:+lcQEy+Th4eswFgQDwT0EXKp4AXrlubxalwQFH5O0Mk=
......
...@@ -7,23 +7,71 @@ import ( ...@@ -7,23 +7,71 @@ import (
"gitlab.com/elixxir/client/interfaces/message" "gitlab.com/elixxir/client/interfaces/message"
"gitlab.com/elixxir/client/interfaces/params" "gitlab.com/elixxir/client/interfaces/params"
"gitlab.com/elixxir/client/interfaces/utility" "gitlab.com/elixxir/client/interfaces/utility"
"gitlab.com/elixxir/comms/network/dataStructures"
"gitlab.com/elixxir/primitives/states"
"gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id"
"google.golang.org/protobuf/runtime/protoimpl" "google.golang.org/protobuf/runtime/protoimpl"
"time" "time"
jww "github.com/spf13/jwalterweatherman"
) )
type lookupCallback func([]contact.Contact, error) type lookupCallback func(contact.Contact, error)
func (m *Manager)lookupProcess(c chan message.Receive, quitCh <-chan struct{}){
for true {
select {
case <-quitCh:
return
case response := <-c:
// edge check the encryption
if response.Encryption!=message.E2E{
jww.WARN.Printf("Dropped a lookup response from user " +
"discovery due to incorrect encryption")
}
// unmarshal the message
lookupResponse := &LookupResponse{}
if err :=proto.Unmarshal(response.Payload, lookupResponse); err!=nil{
jww.WARN.Printf("Dropped a lookup response from user " +
"discovery due to failed unmarshal: %s", err)
}
// get the appropriate channel from the lookup
m.inProgressMux.RLock()
ch, ok := m.inProgressLookup[lookupResponse.CommID]
m.inProgressMux.RUnlock()
if !ok{
jww.WARN.Printf("Dropped a lookup response from user " +
"discovery due to unknown comm ID: %d",
lookupResponse.CommID)
}
// send the response on the correct channel
// drop if the send cannot be completed
select{
case ch<-lookupResponse:
default:
jww.WARN.Printf("Dropped a lookup response from user " +
"discovery due failure to transmit to handling thread: " +
"commID: %d", lookupResponse.CommID)
}
}
}
}
// returns the public key of the passed id as known by the user discovery system // returns the public key of the passed id as known by the user discovery system
// or returns by the timeout // or returns by the timeout
func (m *Manager)Lookup(id *id.ID, callback lookupCallback, timeout time.Duration)error{ func (m *Manager)Lookup(id *id.ID, callback lookupCallback, timeout time.Duration)error{
//get the id of this comm so it can be connected to its responce
commID, err := m.getCommID() commID, err := m.getCommID()
if err!=nil{ if err!=nil{
return errors.WithMessage(err, "Random generation failed") return errors.WithMessage(err, "Random generation failed")
} }
//build the request
request := &LookupSend{ request := &LookupSend{
UserID: id.Marshal(), UserID: id.Marshal(),
CommID: commID, CommID: commID,
...@@ -40,20 +88,68 @@ func (m *Manager)Lookup(id *id.ID, callback lookupCallback, timeout time.Duratio ...@@ -40,20 +88,68 @@ func (m *Manager)Lookup(id *id.ID, callback lookupCallback, timeout time.Duratio
MessageType: message.UdLookup, MessageType: message.UdLookup,
} }
rounds, mid, err := m.net.SendE2E(msg, params.GetDefaultE2E()) //register the request in the responce map so it can be procesed on return
responseChan := make(chan *LookupResponse, 1)
m.inProgressMux.Lock()
m.inProgressLookup[commID] = responseChan
m.inProgressMux.Unlock()
//send the request
rounds, _, err := m.net.SendE2E(msg, params.GetDefaultE2E())
if err!=nil{ if err!=nil{
return errors.WithMessage(err, "Failed to send the lookup " + return errors.WithMessage(err, "Failed to send the lookup " +
"request") "request")
} }
//register the round event to capture if the round fails
roundFailChan := make(chan dataStructures.EventReturn, len(rounds))
for _, round := range rounds{
//subtract a millisecond to ensure this timeout will trigger before
// the one below
m.net.GetInstance().GetRoundEvents().AddRoundEventChan(round,
roundFailChan, timeout-1*time.Millisecond, states.FAILED)
}
//start the go routine which will trigger the callback
go func(){ go func(){
results := timer := time.NewTimer(timeout)
utility.TrackResults()
var err error
var c contact.Contact
select{
//return an error if the round fails
case <-roundFailChan:
err= errors.New("One or more rounds failed to " +
"resolve, lookup not delivered")
//return an error if the timeout is reached
case <-timer.C:
err= errors.New("Response from User Discovery" +
" did not come before timeout")
//return the contact if one is returned
case response := <-responseChan:
if response.Error!=""{
err = errors.Errorf("User Discovery returned an " +
"error on Lookup: %s", response.Error)
}else{
pubkey := m.grp.NewIntFromBytes(response.PubKey)
c = contact.Contact{
ID: id,
DhPubKey: pubkey,
OwnershipProof: nil,
Facts: nil,
} }
}
}
//delete the response channel from the map
m.inProgressMux.Lock()
delete(m.inProgressLookup, commID)
m.inProgressMux.Unlock()
//call the callback last in case it is blocking
callback(c, err)
}()
return nil
} }
\ No newline at end of file
...@@ -3,7 +3,10 @@ package ud ...@@ -3,7 +3,10 @@ package ud
import ( import (
"encoding/binary" "encoding/binary"
"gitlab.com/elixxir/client/interfaces" "gitlab.com/elixxir/client/interfaces"
"gitlab.com/elixxir/client/interfaces/message"
"gitlab.com/elixxir/client/stoppable"
"gitlab.com/elixxir/comms/client" "gitlab.com/elixxir/comms/client"
"gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/xx_network/comms/connect" "gitlab.com/xx_network/comms/connect"
"gitlab.com/xx_network/crypto/signature/rsa" "gitlab.com/xx_network/crypto/signature/rsa"
...@@ -16,17 +19,20 @@ type Manager struct { ...@@ -16,17 +19,20 @@ type Manager struct {
host *connect.Host host *connect.Host
privKey *rsa.PrivateKey privKey *rsa.PrivateKey
rng *fastRNG.StreamGenerator rng *fastRNG.StreamGenerator
grp *cyclic.Group
sw interfaces.Switchboard
udID *id.ID udID *id.ID
inProgressLookup map[int64]chan *LookupResponse inProgressLookup map[uint64]chan *LookupResponse
inProgressMux sync.RWMutex inProgressMux sync.RWMutex
net interfaces.NetworkManager net interfaces.NetworkManager
} }
func (m *Manager)getCommID()(uint64, error){ func (m *Manager)getCommID()(uint64, error){
//fixme: this should use incremenetation
stream := m.rng.GetStream() stream := m.rng.GetStream()
idBytes := make([]byte, 8) idBytes := make([]byte, 8)
...@@ -36,3 +42,16 @@ func (m *Manager)getCommID()(uint64, error){ ...@@ -36,3 +42,16 @@ func (m *Manager)getCommID()(uint64, error){
return binary.BigEndian.Uint64(idBytes), nil return binary.BigEndian.Uint64(idBytes), nil
} }
func (m *Manager)StartProcessies()stoppable.Stoppable{
lookupStop := stoppable.NewSingle("UDLookup")
lookupChan := make(chan message.Receive, 100)
m.sw.RegisterChannel("UDLookupResponse", m.udID, message.UdLookupResponse, lookupChan)
go m.lookupProcess(lookupChan, lookupStop.Quit())
udMulti := stoppable.NewMulti("UD")
udMulti.Add(lookupStop)
return lookupStop
}
\ No newline at end of file
package ud
import (
"gitlab.com/xx_network/comms/messages"
"gitlab.com/xx_network/primitives/id"
)
func (m *Manager)Register(myID *id.ID, username string)error{
msg := &messages.AuthenticatedMessage{
ID: myID.Bytes(),
Signature: nil,
Token: nil,
Client: nil,
Message: nil,
XXX_NoUnkeyedLiteral: struct{}{},
XXX_unrecognized: nil,
XXX_sizecache: 0,
}
m.comms.SendRegisterUser(m.host)
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment