From 2ab1835bd6cdea69871e1c76410e8d7254ee8f2f Mon Sep 17 00:00:00 2001 From: Jake Taylor <jake@elixxir.io> Date: Wed, 18 May 2022 12:30:44 -0500 Subject: [PATCH] improve hnadling for group messages --- groupChat/receive.go | 16 +++++++++++++--- network/follow.go | 2 ++ network/message/garbled.go | 4 ++-- network/rounds/check.go | 4 ++-- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/groupChat/receive.go b/groupChat/receive.go index 93a149c4e..d02dc57b9 100644 --- a/groupChat/receive.go +++ b/groupChat/receive.go @@ -42,11 +42,18 @@ func (m Manager) receive(rawMsgs chan message.Receive, stop *stoppable.Single) { stop.ToStopped() return case receiveMsg := <-rawMsgs: - jww.TRACE.Print("Group message reception received cMix message.") + jww.DEBUG.Printf("Group message reception received cMix message on round %d (%d) sent by %s at %d.", + receiveMsg.RoundId, receiveMsg.RoundTimestamp.Unix(), + receiveMsg.Sender.String(), receiveMsg.Timestamp.Unix()) + + // If given zero time, try to guesstimate roundTimestamp as right now + if receiveMsg.RoundTimestamp.Equal(time.Unix(0, 0)) { + jww.ERROR.Printf("getCryptKey missing roundTimestamp") + receiveMsg.RoundTimestamp = time.Now() + } // Attempt to read the message - g, msgID, timestamp, senderID, msg, noFpMatch, err := - m.readMessage(receiveMsg) + g, msgID, timestamp, senderID, msg, noFpMatch, err := m.readMessage(receiveMsg) if err != nil { if noFpMatch { jww.TRACE.Printf("Received message not for group chat: %+v", @@ -145,6 +152,9 @@ func (m *Manager) decryptMessage(g gs.Group, cMixMsg format.Message, messageID := group.NewMessageID(g.ID, intlMsg.Marshal()) + // Remove from garbled message on success to prevent reprocessing + m.store.GetGarbledMessages().Remove(cMixMsg) + return messageID, intlMsg.GetTimestamp(), senderID, intlMsg.GetPayload(), nil } diff --git a/network/follow.go b/network/follow.go index 817ba0eff..e8df942d8 100644 --- a/network/follow.go +++ b/network/follow.go @@ -374,6 +374,7 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, if !m.param.RealtimeOnly { roundsWithMessages2 = identity.UR.Iterate(func(rid id.Round) bool { + // TODO add set unchecked if gwRoundsState.Checked(rid) { return rounds.Checker(rid, filterList, identity.CR) } @@ -384,6 +385,7 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, for _, rid := range roundsWithMessages { //denote that the round has been looked at in the tracking store if identity.CR.Check(rid) { + // TODO: Err m.round.GetMessagesFromRound(rid, identity) } } diff --git a/network/message/garbled.go b/network/message/garbled.go index b2449ca9f..8d0950f3d 100644 --- a/network/message/garbled.go +++ b/network/message/garbled.go @@ -109,11 +109,11 @@ func (m *Manager) handleGarbledMessages() { MessageType: message.Raw, Sender: &id.ID{}, EphemeralID: ephemeral.Id{}, - Timestamp: time.Time{}, + Timestamp: time.Unix(0, 0), Encryption: message.None, RecipientID: &id.ID{}, RoundId: 0, - RoundTimestamp: time.Time{}, + RoundTimestamp: time.Unix(0, 0), } im := fmt.Sprintf("[GARBLE] RAW Message reprocessed: keyFP: %v, "+ "msgDigest: %s", grbldMsg.GetKeyFP(), grbldMsg.Digest()) diff --git a/network/rounds/check.go b/network/rounds/check.go index afcd20f1d..39068df86 100644 --- a/network/rounds/check.go +++ b/network/rounds/check.go @@ -63,7 +63,7 @@ func (m *Manager) GetMessagesFromRound(roundID id.Round, identity reception.Iden jww.INFO.Printf("Messages found in round %d for %d (%s), looking "+ "up messages via historical lookup", roundID, identity.EphId.Int64(), identity.Source) - //store the round as an unretreived round + //store the round as an unreceived round err = m.Session.UncheckedRounds().AddRound(roundID, nil, identity.Source, identity.EphId) if err != nil { @@ -79,7 +79,7 @@ func (m *Manager) GetMessagesFromRound(roundID id.Round, identity reception.Iden jww.INFO.Printf("Messages found in round %d for %d (%s), looking "+ "up messages via in ram lookup", roundID, identity.EphId.Int64(), identity.Source) - //store the round as an unretreived round + //store the round as an unreceived round if !m.params.RealtimeOnly { err = m.Session.UncheckedRounds().AddRound(roundID, ri, identity.Source, identity.EphId) -- GitLab