summaryrefslogtreecommitdiff
path: root/ToxMessage.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-08-11 05:50:23 -0400
committerjoe <joe@jerkface.net>2017-08-11 05:50:23 -0400
commit1d4651428baf4a0c45e35fc909407e2d64d7da0b (patch)
treed8d38c1e1fead3f48683a8911364405986b1fdca /ToxMessage.hs
parentd5e16955b8264642aae093b345ba356974a60c5f (diff)
Unverified: data to route response packet sending.
Diffstat (limited to 'ToxMessage.hs')
-rw-r--r--ToxMessage.hs32
1 files changed, 20 insertions, 12 deletions
diff --git a/ToxMessage.hs b/ToxMessage.hs
index 56758e48..c77f1ad7 100644
--- a/ToxMessage.hs
+++ b/ToxMessage.hs
@@ -220,14 +220,6 @@ data Packet where
220 220
221 OnionRequest3 :: ByteString -> Symmetric -> Packet -- 0x82 221 OnionRequest3 :: ByteString -> Symmetric -> Packet -- 0x82
222 222
223 -- TODO:
224 -- Announce has a return path appended to it.
225 -- We'll need a type-level natural to indicate how may bytes to
226 -- get in the ImplicitAssymetric data. (Or we could force the size
227 -- of the return path).
228 --
229 -- If the return path is non empty, we should respond with OnionResponse3
230 -- rather than AnnounceResponse directly.
231 Announce :: Aliased Assymetric -> ReturnPath 3 -> Packet --0x83 223 Announce :: Aliased Assymetric -> ReturnPath 3 -> Packet --0x83
232 AnnounceResponse :: Nonce8 -> UnclaimedAssymetric -> Packet -- 0x84 224 AnnounceResponse :: Nonce8 -> UnclaimedAssymetric -> Packet -- 0x84
233 225
@@ -256,8 +248,9 @@ pattern OnionRequest1Type = PacketKind 129 -- 0x81 Onion Request 1
256pattern OnionRequest2Type = PacketKind 130 -- 0x82 Onion Request 2 248pattern OnionRequest2Type = PacketKind 130 -- 0x82 Onion Request 2
257pattern AnnounceType = PacketKind 131 -- 0x83 Announce Request 249pattern AnnounceType = PacketKind 131 -- 0x83 Announce Request
258pattern AnnounceResponseType = PacketKind 132 -- 0x84 Announce Response 250pattern AnnounceResponseType = PacketKind 132 -- 0x84 Announce Response
259-- 0x85 Onion Data Request (data to route request packet) 251
260-- 0x86 Onion Data Response (data to route response packet) 252pattern DataRequestType = PacketKind 133 -- 0x85 Onion Data Request (data to route request packet)
253pattern DataResponseType = PacketKind 134 -- 0x86 Onion Data Response (data to route response packet)
261-- 0x8c Onion Response 3 254-- 0x8c Onion Response 3
262-- 0x8d Onion Response 2 255-- 0x8d Onion Response 2
263pattern OnionResponse3Type = PacketKind 140 -- 0x8c Onion Response 3 256pattern OnionResponse3Type = PacketKind 140 -- 0x8c Onion Response 3
@@ -291,7 +284,10 @@ instance Show PacketKind where
291 showsPrec d OnionRequest0Type = mappend "OnionRequest0" 284 showsPrec d OnionRequest0Type = mappend "OnionRequest0"
292 showsPrec d OnionResponse1Type = mappend "OnionResponse1" 285 showsPrec d OnionResponse1Type = mappend "OnionResponse1"
293 showsPrec d OnionResponse3Type = mappend "OnionResponse3" 286 showsPrec d OnionResponse3Type = mappend "OnionResponse3"
294 showsPrec d AnnounceType = mappend "AnnounceType" 287 showsPrec d AnnounceType = mappend "Announce"
288 showsPrec d AnnounceResponseType = mappend "AnnounceResponse"
289 showsPrec d DataRequestType = mappend "DataRequestType"
290 showsPrec d DataResponseType = mappend "DataResponseType"
295 showsPrec d (PacketKind x) = mappend "PacketKind " . showsPrec (d+1) x 291 showsPrec d (PacketKind x) = mappend "PacketKind " . showsPrec (d+1) x
296 292
297pktKind :: Packet -> PacketKind 293pktKind :: Packet -> PacketKind
@@ -356,6 +352,7 @@ pktKind OnionResponse3 {} = PacketKind 0x8c
356data PacketClass = 352data PacketClass =
357 AssymetricClass (Assymetric -> Packet) (Packet -> Assymetric) 353 AssymetricClass (Assymetric -> Packet) (Packet -> Assymetric)
358 | forall n. OnionPacket n => AliasedClass ((Aliased Assymetric,ReturnPath n) -> Packet) (Packet -> (Aliased Assymetric,ReturnPath n)) 354 | forall n. OnionPacket n => AliasedClass ((Aliased Assymetric,ReturnPath n) -> Packet) (Packet -> (Aliased Assymetric,ReturnPath n))
355 | forall n. OnionPacket n => ToRouteClass ((PubKey,(Aliased Assymetric,ReturnPath n)) -> Packet) (Packet -> (PubKey,(Aliased Assymetric,ReturnPath n)))
359 | forall n. OnionPacket n => OnionClass ((Packet,ReturnPath n) -> Packet) (Packet -> (Packet,ReturnPath n)) 356 | forall n. OnionPacket n => OnionClass ((Packet,ReturnPath n) -> Packet) (Packet -> (Packet,ReturnPath n))
360 | NoncedUnclaimedClass (Nonce8 -> UnclaimedAssymetric -> Packet) 357 | NoncedUnclaimedClass (Nonce8 -> UnclaimedAssymetric -> Packet)
361 (Packet -> (Nonce8, UnclaimedAssymetric)) 358 (Packet -> (Nonce8, UnclaimedAssymetric))
@@ -383,13 +380,16 @@ pktClass (PacketKind 4) = AssymetricClass SendNodes (\(SendNodes a) -> a)
383 380
384pktClass (PacketKind 0x18) = AssymetricClass CookieRequest (\(CookieRequest a) -> a) 381pktClass (PacketKind 0x18) = AssymetricClass CookieRequest (\(CookieRequest a) -> a)
385pktClass (PacketKind 0x80) = AssymetricClass OnionRequest0 (\(OnionRequest0 a) -> a) 382pktClass (PacketKind 0x80) = AssymetricClass OnionRequest0 (\(OnionRequest0 a) -> a)
386-- pktClass (PacketKind 0x86) = AssymetricClass (DataToRouteResponse . Aliased) (\(DataToRouteResponse (Aliased a)) -> a) 383pktClass (PacketKind 0x86) = AssymetricClass (DataToRouteResponse . Aliased) (\(DataToRouteResponse (Aliased a)) -> a)
387 384
388pktClass (PacketKind 0x83) = AliasedClass (uncurry Announce) (\(Announce a r)-> (a,r)) 385pktClass (PacketKind 0x83) = AliasedClass (uncurry Announce) (\(Announce a r)-> (a,r))
389pktClass (PacketKind 0x84) = NoncedUnclaimedClass AnnounceResponse (\(AnnounceResponse n8 uncl)-> (n8,uncl)) 386pktClass (PacketKind 0x84) = NoncedUnclaimedClass AnnounceResponse (\(AnnounceResponse n8 uncl)-> (n8,uncl))
390 387
391pktClass (PacketKind 0x8c) = OnionClass (uncurry OnionResponse3 . swap) (\(OnionResponse3 r a)-> (a,r)) 388pktClass (PacketKind 0x8c) = OnionClass (uncurry OnionResponse3 . swap) (\(OnionResponse3 r a)-> (a,r))
392 389
390pktClass DataRequestType = ToRouteClass (\(k,(a,r))-> DataToRoute k a r)
391 (\(DataToRoute k a r) -> (k,(a,r)))
392
393pktClass _ = Unclassified 393pktClass _ = Unclassified
394 394
395 395
@@ -408,6 +408,13 @@ getPacket = do
408 r <- get 408 r <- get
409 trace ("PARSED "++show typ) $ return () 409 trace ("PARSED "++show typ) $ return ()
410 return $ toPacket (a,r) 410 return $ toPacket (a,r)
411 ToRouteClass toPacket _ -> do
412 trace ("R-PARSE "++show typ) $ return ()
413 cnt <- remaining
414 (pub,a) <- isolate (cnt - 59*3) get
415 r <- get
416 trace ("R-PARSED "++show typ) $ return ()
417 return $ toPacket (pub,(a,r))
411 OnionClass toPacket _ -> do 418 OnionClass toPacket _ -> do
412 trace ("ONION-PARSE "++show typ) $ return () 419 trace ("ONION-PARSE "++show typ) $ return ()
413 p <- get 420 p <- get
@@ -421,6 +428,7 @@ putPacket p = do
421 case pktClass (pktKind p) of 428 case pktClass (pktKind p) of
422 AssymetricClass _ fromPacket -> put $ fromPacket p 429 AssymetricClass _ fromPacket -> put $ fromPacket p
423 AliasedClass _ fromPacket -> put $ fromPacket p 430 AliasedClass _ fromPacket -> put $ fromPacket p
431 ToRouteClass _ fromPacket -> put $ fromPacket p
424 OnionClass _ fromPacket -> put $ swap $ fromPacket p 432 OnionClass _ fromPacket -> put $ swap $ fromPacket p
425 NoncedUnclaimedClass _ fromPacket -> put $ fromPacket p -- putting a pair. 433 NoncedUnclaimedClass _ fromPacket -> put $ fromPacket p -- putting a pair.
426 Unclassified -> fail $ "todo: serialize packet "++show (pktKind p) 434 Unclassified -> fail $ "todo: serialize packet "++show (pktKind p)