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

View File

@@ -9,6 +9,7 @@ import Simplex.Chat.Core
import Simplex.Chat.Options
import Simplex.Chat.Terminal
import Simplex.Chat.View (serializeChatResponse)
import Simplex.Messaging.Client (NetworkConfig (..))
import System.Directory (getAppUserDataDirectory)
import System.Terminal (withTerminal)
@@ -30,7 +31,7 @@ main = do
threadDelay $ chatCmdDelay opts * 1000000
welcome :: ChatOpts -> IO ()
welcome ChatOpts {dbFilePrefix, socksProxy} =
welcome ChatOpts {dbFilePrefix, networkConfig} =
mapM_
putStrLn
[ "SimpleX Chat v" ++ versionNumber,
@@ -38,6 +39,6 @@ welcome ChatOpts {dbFilePrefix, socksProxy} =
maybe
"direct network connection - use `/network` command or `-x` CLI option to connect via SOCKS5 at :9050"
(("using SOCKS5 proxy " <>) . show)
socksProxy,
(socksProxy networkConfig),
"type \"/help\" or \"/h\" for usage info"
]

View File

@@ -5,7 +5,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package
type: git
location: https://github.com/simplex-chat/simplexmq.git
tag: fcaddb7848543baf64786d531cdd629488a462e4
tag: e9db0a1162a0858b0acb1880a6ef261242adc356
source-repository-package
type: git

View File

@@ -1,5 +1,5 @@
{
"https://github.com/simplex-chat/simplexmq.git"."fcaddb7848543baf64786d531cdd629488a462e4" = "1p3vl87i0jd8qjnak8nykvpbg6h7kby4z3wxx8wdmbjvjkw4x190";
"https://github.com/simplex-chat/simplexmq.git"."e9db0a1162a0858b0acb1880a6ef261242adc356" = "1klakvm93qsgwbg00xbq6s32sqcqww8x4ln4m8bjss0mracgrnki";
"https://github.com/simplex-chat/aeson.git"."3eb66f9a68f103b5f1489382aad89f5712a64db7" = "0kilkx59fl6c3qy3kjczqvm8c3f4n3p0bdk9biyflf51ljnzp4yp";
"https://github.com/simplex-chat/haskell-terminal.git"."f708b00009b54890172068f168bf98508ffcd495" = "0zmq7lmfsk8m340g47g5963yba7i88n4afa6z93sg9px5jv1mijj";
"https://github.com/zw3rk/android-support.git"."3c3a5ab0b8b137a072c98d3d0937cbdc96918ddb" = "1r6jyxbim3dsvrmakqfyxbd6ms6miaghpbwyl0sr6dzwpgaprz97";

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 =

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 = "",

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

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

View File

@@ -49,7 +49,7 @@ extra-deps:
# - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561
# - ../simplexmq
- github: simplex-chat/simplexmq
commit: fcaddb7848543baf64786d531cdd629488a462e4
commit: e9db0a1162a0858b0acb1880a6ef261242adc356
# - terminal-0.2.0.0@sha256:de6770ecaae3197c66ac1f0db5a80cf5a5b1d3b64a66a05b50f442de5ad39570,2977
- github: simplex-chat/aeson
commit: 3eb66f9a68f103b5f1489382aad89f5712a64db7

View File

@@ -27,7 +27,7 @@ import Simplex.Chat.Terminal.Output (newChatTerminal)
import Simplex.Chat.Types (Profile, User (..))
import Simplex.Messaging.Agent.Env.SQLite
import Simplex.Messaging.Agent.RetryInterval
import Simplex.Messaging.Client (ProtocolClientConfig (..))
import Simplex.Messaging.Client (ProtocolClientConfig (..), defaultNetworkConfig)
import Simplex.Messaging.Server (runSMPServerBlocking)
import Simplex.Messaging.Server.Env.STM
import Simplex.Messaging.Transport
@@ -49,8 +49,7 @@ testOpts =
ChatOpts
{ dbFilePrefix = undefined,
smpServers = ["smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=@localhost:5001"],
socksProxy = Nothing,
tcpTimeout = 5000000,
networkConfig = defaultNetworkConfig,
logConnections = False,
logAgent = False,
chatCmd = "",