diff --git a/src/Simplex/Messaging/Agent.hs b/src/Simplex/Messaging/Agent.hs index c466795bf..909176eca 100644 --- a/src/Simplex/Messaging/Agent.hs +++ b/src/Simplex/Messaging/Agent.hs @@ -59,6 +59,7 @@ module Simplex.Messaging.Agent deleteConnectionAsync, deleteConnectionsAsync, createConnection, + createConnectionOnServer, prepareConnectionLink, createConnectionForLink, setConnShortLink, @@ -398,9 +399,16 @@ deleteConnectionsAsync c waitDelivery = withAgentEnv c . deleteConnectionsAsync' -- | Create SMP agent connection (NEW command) createConnection :: ConnectionModeI c => AgentClient -> NetworkRequestMode -> UserId -> Bool -> Bool -> SConnectionMode c -> Maybe (UserConnLinkData c) -> Maybe CRClientData -> CR.InitialKeys -> SubscriptionMode -> AE (ConnId, (CreatedConnLink c, Maybe ClientServiceId)) -createConnection c nm userId enableNtfs checkNotices = withAgentEnv c .::. newConn c nm userId enableNtfs checkNotices +createConnection c nm userId enableNtfs checkNotices cMode linkData_ clientData pqInitKeys subMode = + withAgentEnv c $ newConn c nm userId enableNtfs checkNotices cMode linkData_ clientData Nothing pqInitKeys subMode {-# INLINE createConnection #-} +-- | Create SMP agent connection on a specific SMP server. +createConnectionOnServer :: ConnectionModeI c => AgentClient -> NetworkRequestMode -> UserId -> Bool -> Bool -> SConnectionMode c -> Maybe (UserConnLinkData c) -> Maybe CRClientData -> Maybe SMPServerWithAuth -> CR.InitialKeys -> SubscriptionMode -> AE (ConnId, (CreatedConnLink c, Maybe ClientServiceId)) +createConnectionOnServer c nm userId enableNtfs checkNotices cMode linkData_ clientData srv_ pqInitKeys subMode = + withAgentEnv c $ newConn c nm userId enableNtfs checkNotices cMode linkData_ clientData srv_ pqInitKeys subMode +{-# INLINE createConnectionOnServer #-} + -- | Prepare connection link for contact mode (no network call). -- Caller provides root signing key pair and link entity ID. -- Returns the created link and internal params. @@ -914,9 +922,9 @@ switchConnectionAsync' c corrId connId = connectionStats c $ DuplexConnection cData rqs' sqs _ -> throwE $ CMD PROHIBITED "switchConnectionAsync: not duplex" -newConn :: ConnectionModeI c => AgentClient -> NetworkRequestMode -> UserId -> Bool -> Bool -> SConnectionMode c -> Maybe (UserConnLinkData c) -> Maybe CRClientData -> CR.InitialKeys -> SubscriptionMode -> AM (ConnId, (CreatedConnLink c, Maybe ClientServiceId)) -newConn c nm userId enableNtfs checkNotices cMode linkData_ clientData pqInitKeys subMode = do - srv <- getSMPServer c userId +newConn :: ConnectionModeI c => AgentClient -> NetworkRequestMode -> UserId -> Bool -> Bool -> SConnectionMode c -> Maybe (UserConnLinkData c) -> Maybe CRClientData -> Maybe SMPServerWithAuth -> CR.InitialKeys -> SubscriptionMode -> AM (ConnId, (CreatedConnLink c, Maybe ClientServiceId)) +newConn c nm userId enableNtfs checkNotices cMode linkData_ clientData srv_ pqInitKeys subMode = do + srv <- maybe (getSMPServer c userId) pure srv_ when (checkNotices && connMode cMode == CMContact) $ checkClientNotices c srv connId <- newConnNoQueues c userId enableNtfs cMode (CR.connPQEncryption pqInitKeys) (connId,)