summaryrefslogtreecommitdiff
path: root/src/Network/Tox/Onion/Transport.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/Tox/Onion/Transport.hs')
-rw-r--r--src/Network/Tox/Onion/Transport.hs119
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 @@
1module 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
43import Data.ByteString (ByteString)
44import Data.Serialize
45import Network.Socket
46
47import Crypto.Tox hiding (encrypt,decrypt)
48import qualified Data.Tox.Relay as TCP
49import Data.Tox.Onion
50import Network.Tox.NodeId
51
52{-
53encodeOnionAddr :: TransportCrypto
54 -> (NodeInfo -> RouteId -> IO (Maybe OnionRoute))
55 -> (OnionMessage Encrypted,OnionDestination RouteId)
56 -> IO (Maybe (ByteString, SockAddr))
57-}
58encodeOnionAddr :: TransportCrypto
59 -> (NodeInfo -> RouteId -> IO (Maybe OnionRoute))
60 -> (OnionMessage Encrypted, OnionDestination RouteId)
61 -> IO (Maybe
62 (Either (TCP.RelayPacket, TCP.NodeInfo) (ByteString, SockAddr)))
63encodeOnionAddr crypto _ (msg,OnionToOwner ni p) =
64 return $ Just $ Right ( runPut $ putResponse (OnionResponse p msg)
65 , nodeAddr ni )
66encodeOnionAddr 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
70encodeOnionAddr 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)
82wrapForRoute :: TransportCrypto
83 -> OnionMessage Encrypted
84 -> NodeInfo
85 -> OnionRoute
86 -> IO (Either TCP.RelayPacket (OnionRequest N0))
87wrapForRoute 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 }
108wrapForRoute 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