diff options
Diffstat (limited to 'src/Network/Tox/Onion/Transport.hs')
-rw-r--r-- | src/Network/Tox/Onion/Transport.hs | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/src/Network/Tox/Onion/Transport.hs b/src/Network/Tox/Onion/Transport.hs deleted file mode 100644 index e746c414..00000000 --- a/src/Network/Tox/Onion/Transport.hs +++ /dev/null | |||
@@ -1,119 +0,0 @@ | |||
1 | module Network.Tox.Onion.Transport | ||
2 | ( parseOnionAddr | ||
3 | , encodeOnionAddr | ||
4 | , parseDataToRoute | ||
5 | , encodeDataToRoute | ||
6 | , forwardOnions | ||
7 | , AliasSelector(..) | ||
8 | , OnionDestination(..) | ||
9 | , OnionMessage(..) | ||
10 | , Rendezvous(..) | ||
11 | , DataToRoute(..) | ||
12 | , OnionData(..) | ||
13 | , AnnouncedRendezvous(..) | ||
14 | , AnnounceResponse(..) | ||
15 | , AnnounceRequest(..) | ||
16 | , Forwarding(..) | ||
17 | , ReturnPath(..) | ||
18 | , OnionRequest(..) | ||
19 | , OnionResponse(..) | ||
20 | , Addressed(..) | ||
21 | , UDPTransport | ||
22 | , KeyRecord(..) | ||
23 | , encrypt | ||
24 | , decrypt | ||
25 | , peelSymmetric | ||
26 | , OnionRoute(..) | ||
27 | , N0 | ||
28 | , N1 | ||
29 | , N2 | ||
30 | , N3 | ||
31 | , onionKey | ||
32 | , onionAliasSelector | ||
33 | , selectAlias | ||
34 | , RouteId(..) | ||
35 | , routeId | ||
36 | , putRequest | ||
37 | , wrapForRoute | ||
38 | , wrapSymmetric | ||
39 | , wrapOnion | ||
40 | , wrapOnionPure | ||
41 | ) where | ||
42 | |||
43 | import Data.ByteString (ByteString) | ||
44 | import Data.Serialize | ||
45 | import Network.Socket | ||
46 | |||
47 | import Crypto.Tox hiding (encrypt,decrypt) | ||
48 | import qualified Data.Tox.Relay as TCP | ||
49 | import Data.Tox.Onion | ||
50 | import Network.Tox.NodeId | ||
51 | |||
52 | {- | ||
53 | encodeOnionAddr :: TransportCrypto | ||
54 | -> (NodeInfo -> RouteId -> IO (Maybe OnionRoute)) | ||
55 | -> (OnionMessage Encrypted,OnionDestination RouteId) | ||
56 | -> IO (Maybe (ByteString, SockAddr)) | ||
57 | -} | ||
58 | encodeOnionAddr :: TransportCrypto | ||
59 | -> (NodeInfo -> RouteId -> IO (Maybe OnionRoute)) | ||
60 | -> (OnionMessage Encrypted, OnionDestination RouteId) | ||
61 | -> IO (Maybe | ||
62 | (Either (TCP.RelayPacket, TCP.NodeInfo) (ByteString, SockAddr))) | ||
63 | encodeOnionAddr crypto _ (msg,OnionToOwner ni p) = | ||
64 | return $ Just $ Right ( runPut $ putResponse (OnionResponse p msg) | ||
65 | , nodeAddr ni ) | ||
66 | encodeOnionAddr crypto getRoute (msg,OnionDestination x ni Nothing) = do | ||
67 | encodeOnionAddr crypto getRoute (msg,OnionDestination x ni (Just $ routeId $ nodeId ni) ) | ||
68 | -- dput XMisc $ "ONION encode missing routeid" | ||
69 | -- return Nothing | ||
70 | encodeOnionAddr crypto getRoute (msg,OnionDestination _ ni (Just rid)) = do | ||
71 | let go route = do | ||
72 | mreq <- wrapForRoute crypto msg ni route | ||
73 | case mreq of | ||
74 | Right req -> return $ Right ( runPut $ putRequest req , nodeAddr $ routeNodeA route) | ||
75 | Left o | Just port <- routeRelayPort route | ||
76 | -> return $ Left ( o, TCP.NodeInfo (routeNodeA route) port) | ||
77 | m <- {-# SCC "encodeOnionAddr.getRoute" #-} getRoute ni rid | ||
78 | x <- {-# SCC "encodeOnionAddr.wrapForRoute" #-} mapM go m | ||
79 | return x | ||
80 | |||
81 | -- wrapForRoute :: TransportCrypto -> OnionMessage Encrypted -> NodeInfo -> OnionRoute -> IO (OnionRequest N0) | ||
82 | wrapForRoute :: TransportCrypto | ||
83 | -> OnionMessage Encrypted | ||
84 | -> NodeInfo | ||
85 | -> OnionRoute | ||
86 | -> IO (Either TCP.RelayPacket (OnionRequest N0)) | ||
87 | wrapForRoute crypto msg ni r@OnionRoute{routeRelayPort=Nothing} = do | ||
88 | -- We needn't use the same nonce value here, but I think it is safe to do so. | ||
89 | let nonce = msgNonce msg | ||
90 | fwd <- wrapOnion crypto (routeAliasA r) | ||
91 | nonce | ||
92 | (id2key . nodeId $ routeNodeA r) | ||
93 | (nodeAddr $ routeNodeB r) | ||
94 | =<< wrapOnion crypto (routeAliasB r) | ||
95 | nonce | ||
96 | (id2key . nodeId $ routeNodeB r) | ||
97 | (nodeAddr $ routeNodeC r) | ||
98 | =<< wrapOnion crypto (routeAliasC r) | ||
99 | nonce | ||
100 | (id2key . nodeId $ routeNodeC r) | ||
101 | (nodeAddr ni) | ||
102 | (NotForwarded msg) | ||
103 | return $ Right OnionRequest | ||
104 | { onionNonce = nonce | ||
105 | , onionForward = fwd | ||
106 | , pathFromOwner = NoReturnPath | ||
107 | } | ||
108 | wrapForRoute crypto msg ni r@OnionRoute{routeRelayPort = Just tcpport} = do | ||
109 | let nonce = msgNonce msg | ||
110 | fwd <- wrapOnion crypto (routeAliasB r) | ||
111 | nonce | ||
112 | (id2key . nodeId $ routeNodeB r) | ||
113 | (nodeAddr $ routeNodeC r) | ||
114 | =<< wrapOnion crypto (routeAliasC r) | ||
115 | nonce | ||
116 | (id2key . nodeId $ routeNodeC r) | ||
117 | (nodeAddr ni) | ||
118 | (NotForwarded msg) | ||
119 | return $ Left $ TCP.OnionPacket nonce $ Addressed (nodeAddr $ routeNodeB r) fwd | ||