Browse Source

QuoteSource: use CURVE

master
Denis Tereshkin 6 years ago
parent
commit
cbdd8a2681
  1. 2
      libatrade.cabal
  2. 11
      src/ATrade/QuoteSource/Client.hs
  3. 11
      src/ATrade/QuoteSource/Server.hs
  4. 1
      src/ATrade/Types.hs

2
libatrade.cabal

@ -1,5 +1,5 @@
name: libatrade name: libatrade
version: 0.8.0.1 version: 0.9.0.0
synopsis: ATrade infrastructure core library synopsis: ATrade infrastructure core library
description: Please see README.md description: Please see README.md
homepage: https://github.com/asakul/libatrade.git homepage: https://github.com/asakul/libatrade.git

11
src/ATrade/QuoteSource/Client.hs

@ -25,6 +25,7 @@ import Data.Text.Encoding
import Data.Time.Clock import Data.Time.Clock
import System.Log.Logger import System.Log.Logger
import System.ZMQ4 import System.ZMQ4
import System.ZMQ4.ZAP
import Safe import Safe
@ -46,8 +47,8 @@ deserializeTicks (secname:raw:_) = deserializeWithName (decodeUtf8 . BL.toStrict
deserializeTicks _ = [] deserializeTicks _ = []
startQuoteSourceClient :: BoundedChan QuoteData -> [T.Text] -> Context -> T.Text -> IO QuoteSourceClientHandle startQuoteSourceClient :: BoundedChan QuoteData -> [T.Text] -> Context -> T.Text -> ClientSecurityParams -> IO QuoteSourceClientHandle
startQuoteSourceClient chan tickers ctx endpoint = do startQuoteSourceClient chan tickers ctx endpoint csp = do
compMv <- newEmptyMVar compMv <- newEmptyMVar
killMv <- newEmptyMVar killMv <- newEmptyMVar
now <- getCurrentTime now <- getCurrentTime
@ -57,6 +58,12 @@ startQuoteSourceClient chan tickers ctx endpoint = do
where where
clientThread lastHeartbeat killMv = whileM_ (isNothing <$> tryReadMVar killMv) $ withSocket ctx Sub (\sock -> do clientThread lastHeartbeat killMv = whileM_ (isNothing <$> tryReadMVar killMv) $ withSocket ctx Sub (\sock -> do
setLinger (restrict 0) sock 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 connect sock $ T.unpack endpoint
debugM "QuoteSource.Client" $ "Tickers: " ++ show tickers debugM "QuoteSource.Client" $ "Tickers: " ++ show tickers
mapM_ (subscribe sock . encodeUtf8) tickers mapM_ (subscribe sock . encodeUtf8) tickers

11
src/ATrade/QuoteSource/Server.hs

@ -89,13 +89,18 @@ serverThread state = do
header = BL.fromStrict . E.encodeUtf8 $ secName header = BL.fromStrict . E.encodeUtf8 $ secName
body = BL.concat $ map serializeTickBody ticklist body = BL.concat $ map serializeTickBody ticklist
startQuoteSourceServer :: BoundedChan QuoteSourceServerData -> Context -> T.Text -> Maybe DomainId -> IO QuoteSourceServer startQuoteSourceServer :: BoundedChan QuoteSourceServerData -> Context -> T.Text -> ServerSecurityParams -> IO QuoteSourceServer
startQuoteSourceServer chan c ep socketDomainIdMb = do startQuoteSourceServer chan c ep ssp = do
sock <- socket c Pub sock <- socket c Pub
setLinger (restrict 0) sock setLinger (restrict 0) sock
case socketDomainIdMb of case sspDomain ssp of
Just socketDomainId -> setZapDomain (restrict $ E.encodeUtf8 socketDomainId) sock Just socketDomainId -> setZapDomain (restrict $ E.encodeUtf8 socketDomainId) sock
_ -> return () _ -> return ()
case sspCertificate ssp of
Just cert -> do
setCurveServer True sock
zapApplyCertificate cert sock
_ -> return ()
bind sock $ T.unpack ep bind sock $ T.unpack ep
tid <- myThreadId tid <- myThreadId
hbTid <- forkIO $ forever $ do hbTid <- forkIO $ forever $ do

1
src/ATrade/Types.hs

@ -441,7 +441,6 @@ defaultServerSecurityParams = ServerSecurityParams {
} }
data ClientSecurityParams = ClientSecurityParams { data ClientSecurityParams = ClientSecurityParams {
cspDomain :: Maybe T.Text,
cspCertificate :: Maybe CurveCertificate, cspCertificate :: Maybe CurveCertificate,
cspServerCertificate :: Maybe CurveCertificate cspServerCertificate :: Maybe CurveCertificate
} deriving (Show, Eq) } deriving (Show, Eq)

Loading…
Cancel
Save