From cbdd8a268119b0a5d503828373573f564ae38fe8 Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Sat, 13 Jul 2019 13:41:03 +0700 Subject: [PATCH] QuoteSource: use CURVE --- libatrade.cabal | 2 +- src/ATrade/QuoteSource/Client.hs | 11 +++++++++-- src/ATrade/QuoteSource/Server.hs | 11 ++++++++--- src/ATrade/Types.hs | 1 - 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/libatrade.cabal b/libatrade.cabal index 0c0551d..13077be 100644 --- a/libatrade.cabal +++ b/libatrade.cabal @@ -1,5 +1,5 @@ name: libatrade -version: 0.8.0.1 +version: 0.9.0.0 synopsis: ATrade infrastructure core library description: Please see README.md homepage: https://github.com/asakul/libatrade.git diff --git a/src/ATrade/QuoteSource/Client.hs b/src/ATrade/QuoteSource/Client.hs index 8a50d94..0d33227 100644 --- a/src/ATrade/QuoteSource/Client.hs +++ b/src/ATrade/QuoteSource/Client.hs @@ -25,6 +25,7 @@ import Data.Text.Encoding import Data.Time.Clock import System.Log.Logger import System.ZMQ4 +import System.ZMQ4.ZAP import Safe @@ -46,8 +47,8 @@ deserializeTicks (secname:raw:_) = deserializeWithName (decodeUtf8 . BL.toStrict deserializeTicks _ = [] -startQuoteSourceClient :: BoundedChan QuoteData -> [T.Text] -> Context -> T.Text -> IO QuoteSourceClientHandle -startQuoteSourceClient chan tickers ctx endpoint = do +startQuoteSourceClient :: BoundedChan QuoteData -> [T.Text] -> Context -> T.Text -> ClientSecurityParams -> IO QuoteSourceClientHandle +startQuoteSourceClient chan tickers ctx endpoint csp = do compMv <- newEmptyMVar killMv <- newEmptyMVar now <- getCurrentTime @@ -57,6 +58,12 @@ startQuoteSourceClient chan tickers ctx endpoint = do where clientThread lastHeartbeat killMv = whileM_ (isNothing <$> tryReadMVar killMv) $ withSocket ctx Sub (\sock -> do setLinger (restrict 0) sock + debugM "QuoteSource.Client" $ "Client security parameters: " ++ show csp + case (cspCertificate csp, cspServerCertificate csp) of + (Just cert, Just serverCert) -> do + zapApplyCertificate cert sock + zapSetServerCertificate serverCert sock + _ -> return () connect sock $ T.unpack endpoint debugM "QuoteSource.Client" $ "Tickers: " ++ show tickers mapM_ (subscribe sock . encodeUtf8) tickers diff --git a/src/ATrade/QuoteSource/Server.hs b/src/ATrade/QuoteSource/Server.hs index 5b04093..f667b37 100644 --- a/src/ATrade/QuoteSource/Server.hs +++ b/src/ATrade/QuoteSource/Server.hs @@ -89,13 +89,18 @@ serverThread state = do header = BL.fromStrict . E.encodeUtf8 $ secName body = BL.concat $ map serializeTickBody ticklist -startQuoteSourceServer :: BoundedChan QuoteSourceServerData -> Context -> T.Text -> Maybe DomainId -> IO QuoteSourceServer -startQuoteSourceServer chan c ep socketDomainIdMb = do +startQuoteSourceServer :: BoundedChan QuoteSourceServerData -> Context -> T.Text -> ServerSecurityParams -> IO QuoteSourceServer +startQuoteSourceServer chan c ep ssp = do sock <- socket c Pub setLinger (restrict 0) sock - case socketDomainIdMb of + case sspDomain ssp of Just socketDomainId -> setZapDomain (restrict $ E.encodeUtf8 socketDomainId) sock _ -> return () + case sspCertificate ssp of + Just cert -> do + setCurveServer True sock + zapApplyCertificate cert sock + _ -> return () bind sock $ T.unpack ep tid <- myThreadId hbTid <- forkIO $ forever $ do diff --git a/src/ATrade/Types.hs b/src/ATrade/Types.hs index 52e8436..eb5017e 100644 --- a/src/ATrade/Types.hs +++ b/src/ATrade/Types.hs @@ -441,7 +441,6 @@ defaultServerSecurityParams = ServerSecurityParams { } data ClientSecurityParams = ClientSecurityParams { - cspDomain :: Maybe T.Text, cspCertificate :: Maybe CurveCertificate, cspServerCertificate :: Maybe CurveCertificate } deriving (Show, Eq)