core: support passing all network configuration to the agent (#868)

* core: support passing all network configuration to the agent

* update simplexmq
This commit is contained in:
Evgeny Poberezkin
2022-08-02 15:36:12 +01:00
committed by GitHub
parent a36c367b81
commit 4ad1abcbfa
9 changed files with 40 additions and 22 deletions
+7 -7
View File
@@ -50,14 +50,15 @@ import Simplex.Chat.Call
import Simplex.Chat.Controller
import Simplex.Chat.Markdown
import Simplex.Chat.Messages
import Simplex.Chat.Options (ChatOpts (..), smpServersP)
import Simplex.Chat.Options
import Simplex.Chat.Protocol
import Simplex.Chat.Store
import Simplex.Chat.Types
import Simplex.Chat.Util (safeDecodeUtf8, uncurry3)
import Simplex.Messaging.Agent as Agent
import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), NetworkConfig (..), defaultAgentConfig)
import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), defaultAgentConfig)
import Simplex.Messaging.Agent.Protocol
import Simplex.Messaging.Client (defaultNetworkConfig)
import qualified Simplex.Messaging.Crypto as C
import Simplex.Messaging.Encoding
import Simplex.Messaging.Encoding.String
@@ -92,7 +93,7 @@ defaultChatConfig =
InitialAgentServers
{ smp = _defaultSMPServers,
ntf = _defaultNtfServers,
netCfg = NetworkConfig {socksProxy = Nothing, tcpTimeout = 5000000}
netCfg = defaultNetworkConfig
},
tbqSize = 64,
fileChunkSize = 15780,
@@ -122,7 +123,7 @@ logCfg :: LogConfig
logCfg = LogConfig {lc_file = Nothing, lc_stderr = True}
newChatController :: SQLiteStore -> Maybe User -> ChatConfig -> ChatOpts -> Maybe (Notification -> IO ()) -> IO ChatController
newChatController chatStore user cfg@ChatConfig {agentConfig = aCfg, tbqSize, defaultServers} ChatOpts {dbFilePrefix, smpServers, socksProxy, tcpTimeout, logConnections} sendToast = do
newChatController chatStore user cfg@ChatConfig {agentConfig = aCfg, tbqSize, defaultServers} ChatOpts {dbFilePrefix, smpServers, networkConfig, logConnections} sendToast = do
let f = chatStoreFile dbFilePrefix
config = cfg {subscriptionEvents = logConnections}
sendNotification = fromMaybe (const $ pure ()) sendToast
@@ -130,8 +131,7 @@ newChatController chatStore user cfg@ChatConfig {agentConfig = aCfg, tbqSize, de
firstTime <- not <$> doesFileExist f
currentUser <- newTVarIO user
servers <- resolveServers defaultServers
let netCfg = NetworkConfig {socksProxy, tcpTimeout}
smpAgent <- getSMPAgentClient aCfg {dbFile = dbFilePrefix <> "_agent.db"} servers {netCfg}
smpAgent <- getSMPAgentClient aCfg {dbFile = dbFilePrefix <> "_agent.db"} servers {netCfg = networkConfig}
agentAsync <- newTVarIO Nothing
idsDrg <- newTVarIO =<< drgNew
inputQ <- newTBQueueIO tbqSize
@@ -2590,7 +2590,7 @@ chatCommandP =
socksProxy <- "socks=" *> ("off" $> Nothing <|> "on" $> Just defaultSocksProxy <|> Just <$> strP)
t_ <- optional $ " timeout=" *> A.decimal
let tcpTimeout = 1000000 * fromMaybe (maybe 5 (const 10) socksProxy) t_
pure $ NetworkConfig {socksProxy, tcpTimeout}
pure $ fullNetworkConfig socksProxy tcpTimeout
adminContactReq :: ConnReqContact
adminContactReq =
+2 -2
View File
@@ -25,6 +25,7 @@ import Simplex.Chat.Store
import Simplex.Chat.Types
import Simplex.Chat.Util (safeDecodeUtf8)
import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (yesToMigrations))
import Simplex.Messaging.Client (defaultNetworkConfig)
import Simplex.Messaging.Protocol (CorrId (..))
import System.Timeout (timeout)
@@ -67,8 +68,7 @@ mobileChatOpts =
ChatOpts
{ dbFilePrefix = undefined,
smpServers = [],
socksProxy = Nothing,
tcpTimeout = 5000000,
networkConfig = defaultNetworkConfig,
logConnections = False,
logAgent = False,
chatCmd = "",
+20 -3
View File
@@ -8,6 +8,7 @@ module Simplex.Chat.Options
( ChatOpts (..),
getChatOpts,
smpServersP,
fullNetworkConfig,
)
where
@@ -16,6 +17,7 @@ import qualified Data.ByteString.Char8 as B
import Options.Applicative
import Simplex.Chat.Controller (updateStr, versionStr)
import Simplex.Messaging.Agent.Protocol (SMPServer)
import Simplex.Messaging.Client (NetworkConfig (..), defaultNetworkConfig)
import Simplex.Messaging.Encoding.String
import Simplex.Messaging.Parsers (parseAll)
import Simplex.Messaging.Transport.Client (SocksProxy, defaultSocksProxy)
@@ -24,8 +26,7 @@ import System.FilePath (combine)
data ChatOpts = ChatOpts
{ dbFilePrefix :: String,
smpServers :: [SMPServer],
socksProxy :: Maybe SocksProxy,
tcpTimeout :: Int,
networkConfig :: NetworkConfig,
logConnections :: Bool,
logAgent :: Bool,
chatCmd :: String,
@@ -116,11 +117,27 @@ chatOpts appDir defaultDbFileName = do
<> short 'm'
<> help "Run in maintenance mode (/_start to start chat)"
)
pure ChatOpts {dbFilePrefix, smpServers, socksProxy, tcpTimeout = useTcpTimeout socksProxy t, logConnections, logAgent, chatCmd, chatCmdDelay, chatServerPort, maintenance}
pure
ChatOpts
{ dbFilePrefix,
smpServers,
networkConfig = fullNetworkConfig socksProxy $ useTcpTimeout socksProxy t,
logConnections,
logAgent,
chatCmd,
chatCmdDelay,
chatServerPort,
maintenance
}
where
useTcpTimeout p t = 1000000 * if t > 0 then t else maybe 5 (const 10) p
defaultDbFilePath = combine appDir defaultDbFileName
fullNetworkConfig :: Maybe SocksProxy -> Int -> NetworkConfig
fullNetworkConfig socksProxy tcpTimeout =
let tcpConnectTimeout = (tcpTimeout * 3) `div` 2
in defaultNetworkConfig {socksProxy, tcpTimeout, tcpConnectTimeout}
parseSMPServers :: ReadM [SMPServer]
parseSMPServers = eitherReader $ parseAll smpServersP . B.pack
+3 -2
View File
@@ -15,7 +15,8 @@ import Simplex.Chat.Options
import Simplex.Chat.Terminal.Input
import Simplex.Chat.Terminal.Notification
import Simplex.Chat.Terminal.Output
import Simplex.Messaging.Agent.Env.SQLite (InitialAgentServers (..), NetworkConfig (..))
import Simplex.Messaging.Agent.Env.SQLite (InitialAgentServers (..))
import Simplex.Messaging.Client (defaultNetworkConfig)
import Simplex.Messaging.Util (raceAny_)
terminalChatConfig :: ChatConfig
@@ -30,7 +31,7 @@ terminalChatConfig =
"smp://PQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo=@smp6.simplex.im"
],
ntf = ["ntf://FB-Uop7RTaZZEG0ZLD2CIaTjsPh-Fw0zFAnb7QyA8Ks=@ntf2.simplex.im"],
netCfg = NetworkConfig {socksProxy = Nothing, tcpTimeout = 5000000}
netCfg = defaultNetworkConfig
}
}