diff --git a/interfaces/params/E2E.go b/interfaces/params/E2E.go index 5eda69cda9cddfb5ce2581bb552fc679a7bd006a..3e0aa95f80803aa138849101d6ae06b4559c20e8 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 c47f9aea2ab6044df252d3eae488460b7f7b4ce2..b181c0596043f370157540a3c3bdae44d8927287 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 15be25b2288d0bf16f77f59b15173c3b351e732b..4c4f2eab94f54b453c75f8ce6af936cd23d5a24f 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) }