summaryrefslogtreecommitdiff
path: root/src/Network/Tox/Crypto/Transport.hs
diff options
context:
space:
mode:
authorJames Crayne <jim.crayne@gmail.com>2017-11-19 22:52:07 +0000
committerJames Crayne <jim.crayne@gmail.com>2017-11-19 23:40:18 +0000
commit8d9abc1df036a8184bc2fd88ddf6f1d621e7e4c1 (patch)
tree920d4c424e1d1358df0f066e4b5e6a256cd96da2 /src/Network/Tox/Crypto/Transport.hs
parent5c34b3bffc286b6cc5010a30c1016355c86359a5 (diff)
Outgoing queue and related
Diffstat (limited to 'src/Network/Tox/Crypto/Transport.hs')
-rw-r--r--src/Network/Tox/Crypto/Transport.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/Network/Tox/Crypto/Transport.hs b/src/Network/Tox/Crypto/Transport.hs
index 386c2766..b89bde46 100644
--- a/src/Network/Tox/Crypto/Transport.hs
+++ b/src/Network/Tox/Crypto/Transport.hs
@@ -23,6 +23,7 @@ module Network.Tox.Crypto.Transport
23 , MessageType(..) 23 , MessageType(..)
24 , KnownLossyness(..) 24 , KnownLossyness(..)
25 , AsWord16(..) 25 , AsWord16(..)
26 , AsWord64(..)
26 -- feild name classes 27 -- feild name classes
27 , HasGroupChatID(..) 28 , HasGroupChatID(..)
28 , HasGroupNumber(..) 29 , HasGroupNumber(..)
@@ -420,6 +421,11 @@ class AsWord16 a where
420 toWord16 :: a -> Word16 421 toWord16 :: a -> Word16
421 fromWord16 :: Word16 -> a 422 fromWord16 :: Word16 -> a
422 423
424class AsWord64 a where
425 toWord64 :: a -> Word64
426 fromWord64 :: Word64 -> a
427
428
423toEnum8 :: (Enum a, Integral word8) => word8 -> a 429toEnum8 :: (Enum a, Integral word8) => word8 -> a
424toEnum8 = toEnum . fromIntegral 430toEnum8 = toEnum . fromIntegral
425fromEnum8 :: Enum a => a -> Word8 431fromEnum8 :: Enum a => a -> Word8
@@ -428,6 +434,9 @@ fromEnum8 = fromIntegral . fromEnum
428fromEnum16 :: Enum a => a -> Word16 434fromEnum16 :: Enum a => a -> Word16
429fromEnum16 = fromIntegral . fromEnum 435fromEnum16 = fromIntegral . fromEnum
430 436
437fromEnum64 :: Enum a => a -> Word64
438fromEnum64 = fromIntegral . fromEnum
439
431 440
432-- MessageType, for our client keep it inside 16 bits 441-- MessageType, for our client keep it inside 16 bits
433-- but we should extend it to 32 or even 64 on the wire. 442-- but we should extend it to 32 or even 64 on the wire.
@@ -440,6 +449,13 @@ instance AsWord16 MessageType where
440 fromWord16 x | x < 1024, x .|. 0x0200 == 0x0200 = GrpMsg (toEnum8 ((x - 512) `div` 256)) (toEnum8 x) 449 fromWord16 x | x < 1024, x .|. 0x0200 == 0x0200 = GrpMsg (toEnum8 ((x - 512) `div` 256)) (toEnum8 x)
441 fromWord16 x = error "Not clear how to convert Word16 to MessageType" 450 fromWord16 x = error "Not clear how to convert Word16 to MessageType"
442 451
452instance AsWord64 MessageType where
453 toWord64 (Msg msgID) = fromIntegral (fromIntegral (fromEnum16 msgID) :: Word8)
454 toWord64 (GrpMsg lsy msgName) = 512 + 256 * (fromEnum64 lsy) + fromIntegral (fromEnum8 msgName)
455 fromWord64 x | x < 256 = Msg (toEnum $ fromIntegral x)
456 fromWord64 x | x < 1024, x .|. 0x0200 == 0x0200 = GrpMsg (toEnum8 ((x - 512) `div` 256)) (toEnum8 x)
457 fromWord64 x = error "Not clear how to convert Word64 to MessageType"
458
443word16 :: (Functor f, AsWord16 x) => (Word16 -> f Word16) -> (x -> f x) 459word16 :: (Functor f, AsWord16 x) => (Word16 -> f Word16) -> (x -> f x)
444word16 = lens toWord16 (\_ x -> fromWord16 x) 460word16 = lens toWord16 (\_ x -> fromWord16 x)
445 461