diff --git a/migrations/20210101_initial.sql b/migrations/20210101_initial.sql index 050d4b4d1..75716865a 100644 --- a/migrations/20210101_initial.sql +++ b/migrations/20210101_initial.sql @@ -67,7 +67,7 @@ CREATE TABLE IF NOT EXISTS messages( internal_ts TEXT NOT NULL, internal_rcv_id INTEGER, internal_snd_id INTEGER, - body TEXT NOT NULL, + body TEXT NOT NULL, -- deprecated PRIMARY KEY (conn_alias, internal_id), FOREIGN KEY (conn_alias) REFERENCES connections (conn_alias) diff --git a/src/Simplex/Messaging/Agent.hs b/src/Simplex/Messaging/Agent.hs index cf875b09f..77fd5f622 100644 --- a/src/Simplex/Messaging/Agent.hs +++ b/src/Simplex/Messaging/Agent.hs @@ -9,6 +9,7 @@ {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} +{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} @@ -357,7 +358,8 @@ sendMessage' c connId msg = previousMsgHash, agentMessage = A_MSG msg } - msgData = SndMsgData {internalId, internalSndId, internalTs, msgBody, internalHash = C.sha256Hash msgBody, previousMsgHash} + internalHash = C.sha256Hash msgBody + msgData = SndMsgData {..} createSndMsg st connId msgData pure internalId @@ -555,7 +557,7 @@ processSMPTransmission c@AgentClient {subQ} (srv, rId, cmd) = do let integrity = checkMsgIntegrity prevExtSndId (fst sender) prevRcvMsgHash externalPrevSndHash recipient = (unId internalId, internalTs) msgMeta = MsgMeta {integrity, recipient, sender, broker} - rcvMsg = RcvMsgData {msgMeta, msgBody, internalRcvId, internalHash, externalPrevSndHash} + rcvMsg = RcvMsgData {..} withStore $ \st -> createRcvMsg st connId rcvMsg notify $ MSG msgMeta msgBody diff --git a/src/Simplex/Messaging/Agent/Protocol.hs b/src/Simplex/Messaging/Agent/Protocol.hs index e24a91aa3..684a7e828 100644 --- a/src/Simplex/Messaging/Agent/Protocol.hs +++ b/src/Simplex/Messaging/Agent/Protocol.hs @@ -32,6 +32,7 @@ module Simplex.Messaging.Agent.Protocol ACommand (..), AParty (..), SAParty (..), + MsgHash, MsgMeta (..), SMPMessage (..), AMessage (..), @@ -182,6 +183,8 @@ deriving instance Eq (ACommand p) deriving instance Show (ACommand p) +type MsgHash = ByteString + -- | Agent message metadata sent to the client data MsgMeta = MsgMeta { integrity :: MsgIntegrity, @@ -209,7 +212,7 @@ data SMPMessage -- | timestamp from the sending agent senderTimestamp :: SenderTimestamp, -- | digest of the previous message - previousMsgHash :: ByteString, + previousMsgHash :: MsgHash, -- | messages sent between agents once queue is secured agentMessage :: AMessage } diff --git a/src/Simplex/Messaging/Agent/Store.hs b/src/Simplex/Messaging/Agent/Store.hs index c41110c32..bf5e6921f 100644 --- a/src/Simplex/Messaging/Agent/Store.hs +++ b/src/Simplex/Messaging/Agent/Store.hs @@ -162,8 +162,6 @@ data AcceptedConfirmation = AcceptedConfirmation -- * Message integrity validation types -type MsgHash = ByteString - -- | Corresponds to `last_external_snd_msg_id` in `connections` table type PrevExternalSndId = Int64 diff --git a/src/Simplex/Messaging/Agent/Store/SQLite.hs b/src/Simplex/Messaging/Agent/Store/SQLite.hs index 9e0e5702c..f74c705b1 100644 --- a/src/Simplex/Messaging/Agent/Store/SQLite.hs +++ b/src/Simplex/Messaging/Agent/Store/SQLite.hs @@ -722,7 +722,7 @@ insertRcvMsgBase_ dbConn connId RcvMsgData {msgMeta, msgBody, internalRcvId} = d INSERT INTO messages ( conn_alias, internal_id, internal_ts, internal_rcv_id, internal_snd_id, body, msg_body) VALUES - (:conn_alias,:internal_id,:internal_ts,:internal_rcv_id, NULL, '', :msg_body); + (:conn_alias,:internal_id,:internal_ts,:internal_rcv_id, NULL, '',:msg_body); |] [ ":conn_alias" := connId, ":internal_id" := internalId,