From 11dae7ee45996dd76dff47e20dd51d7da49f0a43 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 1 Jun 2018 21:49:53 -0400 Subject: tox: Separate transports for handshakes and crypto-packets. --- src/Network/Tox/Crypto/Transport.hs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'src/Network/Tox/Crypto') diff --git a/src/Network/Tox/Crypto/Transport.hs b/src/Network/Tox/Crypto/Transport.hs index 1444ffca..2c998006 100644 --- a/src/Network/Tox/Crypto/Transport.hs +++ b/src/Network/Tox/Crypto/Transport.hs @@ -5,9 +5,10 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TupleSections #-} module Network.Tox.Crypto.Transport - ( parseNetCrypto - , encodeNetCrypto - -- CryptoTransport + ( parseCrypto + , encodeCrypto + , parseHandshakes + , encodeHandshakes , NetCrypto(..) , CryptoData(..) , CryptoMessage(..) @@ -80,6 +81,23 @@ data NetCrypto = NetHandshake (Handshake Encrypted) | NetCrypto (CryptoPacket Encrypted) +parseCrypto :: (ByteString, SockAddr) -> Either (CryptoPacket Encrypted, SockAddr) (ByteString, SockAddr) +parseCrypto ((B.uncons -> Just (0x1b,pkt)),saddr) = either (\_ -> Right (pkt,saddr)) + (\x -> Left (x ,saddr)) + $ runGet get pkt +parseCrypto not_mine = Right not_mine + +encodeCrypto :: (CryptoPacket Encrypted, SockAddr) -> Maybe (ByteString, SockAddr) +encodeCrypto (x,saddr) = Just (B.cons 0x1b (runPut $ put x),saddr) + +parseHandshakes :: ByteString -> SockAddr -> Either String (Handshake Encrypted, SockAddr) +parseHandshakes (B.uncons -> Just (0x1a,pkt)) saddr = left ("parseNetCrypto: "++) $ (,saddr) <$> runGet get pkt +parseHandshakes _ _ = Left "parseHandshakes_: ?" + +encodeHandshakes :: Handshake Encrypted -> SockAddr -> (ByteString, SockAddr) +encodeHandshakes x saddr = (B.cons 0x1a (runPut $ put x),saddr) + + parseNetCrypto :: ByteString -> SockAddr -> Either String (NetCrypto, SockAddr) parseNetCrypto (B.uncons -> Just (0x1a,pkt)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetHandshake <$> runGet get pkt parseNetCrypto (B.uncons -> Just (0x1b,pkt)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetCrypto <$> runGet get pkt -- cgit v1.2.3