From ddbf96e668c3aafd454347601adf485a992f9617 Mon Sep 17 00:00:00 2001 From: erinn Date: Wed, 21 Nov 2018 16:08:47 -0800 Subject: [PATCH] little fixes --- app/app.go | 17 +++++++++++++++++ peer/cwtch_peer.go | 14 +++++++++++--- storage/file_profile_store.go | 1 + 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/app.go b/app/app.go index 381efb0..831ff1a 100644 --- a/app/app.go +++ b/app/app.go @@ -34,6 +34,7 @@ type Application interface { PrimaryIdentity() peer.CwtchPeer GetPeer(onion string) peer.CwtchPeer ListPeers() map[string]string + LaunchPeers() //GetTorStatus() (map[string]string, error) @@ -108,8 +109,10 @@ func (app *application) LoadProfiles(password string) error { log.Printf("Error: profile for onion %v already exists", p.GetProfile().Onion) continue } + p.Init(app.mn) p.Listen() + app.mutex.Lock() app.peers[p.GetProfile().Onion] = p app.storage[p.GetProfile().Onion] = fileStore @@ -121,6 +124,20 @@ func (app *application) LoadProfiles(password string) error { return nil } +func (app *application) LaunchPeers() { + for _, p := range app.peers { + if !p.IsStarted() { + app.startPeer(p) + } + } +} + +func (app *application) startPeer(peer peer.CwtchPeer) { + go func() { + peer.Listen() + }() +} + // ListPeers returns a map of onions to their profile's Name func (app *application) ListPeers() map[string]string { keys := map[string]string{} diff --git a/peer/cwtch_peer.go b/peer/cwtch_peer.go index 7af5f29..783ac44 100644 --- a/peer/cwtch_peer.go +++ b/peer/cwtch_peer.go @@ -32,9 +32,9 @@ type cwtchPeer struct { mutex sync.Mutex connectionsManager *connections.Manager dataHandler func(string, []byte) []byte - //handlers map[string]func(*application.ApplicationInstance) func() channels.Handler - aif application.ApplicationInstanceFactory - shutdown bool + shutdown bool + aif application.ApplicationInstanceFactory + started bool } // CwtchPeer provides us with a way of testing systems built on top of cwtch without having to @@ -71,6 +71,7 @@ type CwtchPeer interface { SetPeerDataHandler(func(string, []byte) []byte) Listen() + IsStarted() bool Shutdown() } @@ -353,7 +354,9 @@ func (cp *cwtchPeer) listenFn() error { ra.Init(cp.mn, cp.Profile.Name, identity.InitializeV3(cp.Profile.Name, &cp.Profile.Ed25519PrivateKey, &cp.Profile.Ed25519PublicKey), af, cp) log.Printf("Running cwtch peer on %v", onionService.AddressFull()) cp.app = ra + cp.started = true ra.Run(onionService) + return nil } @@ -366,6 +369,11 @@ func (cp *cwtchPeer) Shutdown() { } } +// IsStarted returns true if Listen() has successfully been run before on this connection (ever). TODO: we will need to properly unset this flag on error if we want to support resumption in the future +func (cp *cwtchPeer) IsStarted() bool { + return cp.started +} + // CwtchPeerInstance encapsulates incoming peer connections type CwtchPeerInstance struct { rai *application.ApplicationInstance diff --git a/storage/file_profile_store.go b/storage/file_profile_store.go index 10e1433..9dc3d7b 100644 --- a/storage/file_profile_store.go +++ b/storage/file_profile_store.go @@ -103,6 +103,7 @@ func (fps *fileProfileStore) Load() (peer.CwtchPeer, error) { if err == nil { return peer.FromProfile(profile), nil } + return nil, err } return nil, err }