summaryrefslogtreecommitdiff
path: root/src/Network
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network')
-rw-r--r--src/Network/Tox/Transport.hs71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/Network/Tox/Transport.hs b/src/Network/Tox/Transport.hs
new file mode 100644
index 00000000..24bd60b7
--- /dev/null
+++ b/src/Network/Tox/Transport.hs
@@ -0,0 +1,71 @@
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE GADTs #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4{-# LANGUAGE KindSignatures #-}
5{-# LANGUAGE LambdaCase #-}
6{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE TupleSections #-}
8{-# LANGUAGE TypeOperators #-}
9module Network.Tox.Transport (toxTransport) where
10
11import Network.QueryResponse
12import Crypto.Tox
13import Network.Tox.DHT.Transport
14import Network.Tox.Onion.Transport
15import Network.Tox.Crypto.Transport
16
17import Network.Socket
18
19toxTransport ::
20 TransportCrypto
21 -> (PublicKey -> IO (Maybe NodeInfo))
22 -> UDPTransport
23 -> IO ( Transport String NodeInfo (DHTMessage Encrypted8)
24 , Transport String OnionToOwner (OnionMessage Encrypted)
25 , Transport String SockAddr NetCrypto )
26toxTransport crypto closeLookup udp = do
27 (dht,udp1) <- partitionTransport parseDHTAddr encodeDHTAddr id $ forwardOnions crypto udp
28 (onion,udp2) <- partitionTransport parseOnionAddr encodeOnionAddr id udp1
29 let netcrypto = layerTransport parseNetCrypto encodeNetCrypto udp2
30 return ( forwardDHTRequests crypto closeLookup dht
31 , onion
32 , netcrypto
33 )
34
35
36-- instance (Sized a, Sized b) => Sized (a,b) where size = _todo
37
38
39-- Byte value Packet Kind Return address
40-- :----------- :--------------------
41-- `0x00` Ping Request DHTNode
42-- `0x01` Ping Response -
43-- `0x02` Nodes Request DHTNode
44-- `0x04` Nodes Response -
45-- `0x18` Cookie Request DHTNode, but without sending pubkey in response
46-- `0x19` Cookie Response - (no pubkey)
47--
48-- `0x21` LAN Discovery DHTNode (No reply, port 33445, trigger Nodes Request/Response)
49--
50-- `0x20` DHT Request DHTNode/-forward
51--
52-- `0x1a` Crypto Handshake CookieAddress
53--
54-- `0x1b` Crypto Data SessionAddress
55--
56-- `0x83` Announce Request OnionToOwner
57-- `0x84` Announce Response -
58-- `0x85` Onion Data Request OnionToOwner
59-- `0x86` Onion Data Response -
60--
61-- `0xf0` Bootstrap Info SockAddr?
62--
63-- `0x80` Onion Request 0 -forward
64-- `0x81` Onion Request 1 -forward
65-- `0x82` Onion Request 2 -forward
66-- `0x8c` Onion Response 3 -return
67-- `0x8d` Onion Response 2 -return
68-- `0x8e` Onion Response 1 -return
69
70
71