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
+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