diff --git a/groupChat/receive.go b/groupChat/receive.go index 93a149c4e0e480d4d56b98123ce1627cf5962d55..d02dc57b95a0ed7f854f36beb47a9e0b28de289b 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 817ba0effc0c01e744cd430effa7ecc874d746fb..e8df942d8c303b2c91f7917cfe89283ab846fc6a 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 b2449ca9f0d79c8d1b5cdd7a8e9cd9db1ae2863f..8d0950f3d2a781e3f5836cb7ffa225f10e01c294 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 afcd20f1d52a0f1b089adb82b28606f576ebf1ec..39068df86502617f96edd55b07f6614f40db1860 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)