From 9fc6d2cfdd2b681fb1e7efd048cfd9117b9571c5 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Thu, 25 Feb 2021 21:34:15 +0000 Subject: [PATCH] Add a wait loop to wait for rekeying when we run out of keys --- interfaces/params/E2E.go | 9 ++++++--- network/message/handler.go | 4 ++-- network/message/sendE2E.go | 17 ++++++++++++++--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/interfaces/params/E2E.go b/interfaces/params/E2E.go index 5eda69cda..3e0aa95f8 100644 --- a/interfaces/params/E2E.go +++ b/interfaces/params/E2E.go @@ -14,13 +14,16 @@ import ( ) type E2E struct { - Type SendType + Type SendType + RetryCount int CMIX } func GetDefaultE2E() E2E { - return E2E{Type: Standard, - CMIX: GetDefaultCMIX(), + return E2E{ + Type: Standard, + CMIX: GetDefaultCMIX(), + RetryCount: 10, } } func (e E2E) Marshal() ([]byte, error) { diff --git a/network/message/handler.go b/network/message/handler.go index c47f9aea2..b181c0596 100644 --- a/network/message/handler.go +++ b/network/message/handler.go @@ -50,7 +50,7 @@ func (m *Manager) handleMessage(ecrMsg format.Message, identity reception.Identi forMe, err := fingerprint2.CheckIdentityFP(ecrMsg.GetIdentityFP(), ecrMsg.GetContents(), identity.Source) if err != nil { - jww.FATAL.Panicf("Could not check IdentityFIngerprint: %+v", err) + jww.FATAL.Panicf("Could not check IdentityFingerprint: %+v", err) } if !forMe { return @@ -104,7 +104,7 @@ func (m *Manager) handleMessage(ecrMsg format.Message, identity reception.Identi return } - jww.INFO.Printf("Received message of type %s from %s," + + jww.INFO.Printf("Received message of type %s from %s,"+ " msgDigest: %s", encTy, sender, ecrMsg.Digest()) // Process the decrypted/unencrypted message partition, to see if diff --git a/network/message/sendE2E.go b/network/message/sendE2E.go index 15be25b22..4c4f2eab9 100644 --- a/network/message/sendE2E.go +++ b/network/message/sendE2E.go @@ -9,6 +9,7 @@ package message import ( "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces/message" "gitlab.com/elixxir/client/interfaces/params" "gitlab.com/elixxir/client/keyExchange" @@ -17,7 +18,6 @@ import ( "gitlab.com/xx_network/primitives/id" "sync" "time" - jww "github.com/spf13/jwalterweatherman" ) func (m *Manager) SendE2E(msg message.Send, param params.E2E) ([]id.Round, e2e.MessageID, error) { @@ -51,7 +51,6 @@ func (m *Manager) SendE2E(msg message.Send, param params.E2E) ([]id.Round, e2e.M jww.INFO.Printf("E2E sending %d messages to %s", len(partitions), msg.Recipient) - for i, p := range partitions { //create the cmix message msgCmix := format.NewMessage(m.Session.Cmix().GetGroup().GetP().ByteLen()) @@ -59,6 +58,18 @@ func (m *Manager) SendE2E(msg message.Send, param params.E2E) ([]id.Round, e2e.M //get a key to end to end encrypt key, err := partner.GetKeyForSending(param.Type) + keyTries := 0 + for err != nil && keyTries < param.RetryCount { + jww.WARN.Printf("Out of sending keys for %s "+ + "(msgDigest: %s, partition: %d), this can "+ + "happen when sending messages faster than "+ + "the client can negotiate keys. Please "+ + "adjust your e2e key parameters", + msg.Recipient, msgCmix.Digest(), i) + keyTries++ + time.Sleep(param.RetryDelay) + key, err = partner.GetKeyForSending(param.Type) + } if err != nil { return nil, e2e.MessageID{}, errors.WithMessagef(err, "Failed to get key "+ "for end to end encryption") @@ -96,7 +107,7 @@ func (m *Manager) SendE2E(msg message.Send, param params.E2E) ([]id.Round, e2e.M numFail, len(partitions), msg.Recipient) return nil, e2e.MessageID{}, errors.Errorf("Failed to E2E send %v/%v sub payloads:"+ " %s", numFail, len(partitions), errRtn) - }else{ + } else { jww.INFO.Printf("Sucesfully E2E sent %d/%d to %s", numFail, len(partitions), msg.Recipient) } -- GitLab