diff options
author | James Crayne <jim.crayne@gmail.com> | 2017-11-19 22:52:07 +0000 |
---|---|---|
committer | James Crayne <jim.crayne@gmail.com> | 2017-11-19 23:40:18 +0000 |
commit | 8d9abc1df036a8184bc2fd88ddf6f1d621e7e4c1 (patch) | |
tree | 920d4c424e1d1358df0f066e4b5e6a256cd96da2 /src/Network/Tox/Crypto/Transport.hs | |
parent | 5c34b3bffc286b6cc5010a30c1016355c86359a5 (diff) |
Outgoing queue and related
Diffstat (limited to 'src/Network/Tox/Crypto/Transport.hs')
-rw-r--r-- | src/Network/Tox/Crypto/Transport.hs | 16 |
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 | ||
424 | class AsWord64 a where | ||
425 | toWord64 :: a -> Word64 | ||
426 | fromWord64 :: Word64 -> a | ||
427 | |||
428 | |||
423 | toEnum8 :: (Enum a, Integral word8) => word8 -> a | 429 | toEnum8 :: (Enum a, Integral word8) => word8 -> a |
424 | toEnum8 = toEnum . fromIntegral | 430 | toEnum8 = toEnum . fromIntegral |
425 | fromEnum8 :: Enum a => a -> Word8 | 431 | fromEnum8 :: Enum a => a -> Word8 |
@@ -428,6 +434,9 @@ fromEnum8 = fromIntegral . fromEnum | |||
428 | fromEnum16 :: Enum a => a -> Word16 | 434 | fromEnum16 :: Enum a => a -> Word16 |
429 | fromEnum16 = fromIntegral . fromEnum | 435 | fromEnum16 = fromIntegral . fromEnum |
430 | 436 | ||
437 | fromEnum64 :: Enum a => a -> Word64 | ||
438 | fromEnum64 = 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 | ||
452 | instance 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 | |||
443 | word16 :: (Functor f, AsWord16 x) => (Word16 -> f Word16) -> (x -> f x) | 459 | word16 :: (Functor f, AsWord16 x) => (Word16 -> f Word16) -> (x -> f x) |
444 | word16 = lens toWord16 (\_ x -> fromWord16 x) | 460 | word16 = lens toWord16 (\_ x -> fromWord16 x) |
445 | 461 | ||