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

11
src/ATrade/QuoteSource/Client.hs

@ -25,6 +25,7 @@ import Data.Text.Encoding @@ -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 @@ -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 @@ -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

11
src/ATrade/QuoteSource/Server.hs

@ -89,13 +89,18 @@ serverThread state = do @@ -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

1
src/ATrade/Types.hs

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

Loading…
Cancel
Save