diff options
Diffstat (limited to 'OnionRouter.hs')
-rw-r--r-- | OnionRouter.hs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/OnionRouter.hs b/OnionRouter.hs index 7125fa10..9467f626 100644 --- a/OnionRouter.hs +++ b/OnionRouter.hs | |||
@@ -50,20 +50,39 @@ data OnionRouter = OnionRouter | |||
50 | -- currently stored here. It is inferred from the lookup key. Instead, | 50 | -- currently stored here. It is inferred from the lookup key. Instead, |
51 | -- a 'Nothing' is stored. | 51 | -- a 'Nothing' is stored. |
52 | pendingQueries :: TVar (Word64Map (OnionDestination RouteId)) | 52 | pendingQueries :: TVar (Word64Map (OnionDestination RouteId)) |
53 | -- | The current 12 routes that may be assigned to outgoing packets. | ||
53 | , routeMap :: TVar (IntMap RouteRecord) | 54 | , routeMap :: TVar (IntMap RouteRecord) |
55 | -- | A set of nodes used to query for random route nodes. These aren't | ||
56 | -- used directly in onion routes, they are queried for route nodes that | ||
57 | -- are nearby randomly selected ids. | ||
58 | -- | ||
59 | -- These nodes are chosen from the kademlia buckets and when one of them | ||
60 | -- is evicted from a bucket, it is no longer used as a trampoline node. | ||
61 | -- | ||
62 | -- Also, currently our own address is (unnecessarily) stored here at | ||
63 | -- index (-1). | ||
54 | , trampolineNodes :: TVar (IntMap NodeInfo) | 64 | , trampolineNodes :: TVar (IntMap NodeInfo) |
65 | -- | This map associates 'NodeId' values with the corresponding | ||
66 | -- 'trampolineNodes' index. | ||
55 | , trampolineIds :: TVar (HashMap NodeId Int) | 67 | , trampolineIds :: TVar (HashMap NodeId Int) |
68 | -- | Indicates the current size of 'trampolineNodes'. | ||
56 | , trampolineCount :: TVar Int | 69 | , trampolineCount :: TVar Int |
70 | -- | The pseudo-random generator used to select onion routes. | ||
57 | , onionDRG :: TVar ChaChaDRG | 71 | , onionDRG :: TVar ChaChaDRG |
72 | -- | Building onion routes happens in a dedicated thread. See 'forkRouteBuilder'. | ||
58 | , routeThread :: ThreadId | 73 | , routeThread :: ThreadId |
74 | -- | Each of the 12 routes has a flag here that is set True when the | ||
75 | -- route should be discarded and replaced with a fresh one. | ||
59 | , pendingRoutes :: IntMap (TVar Bool) | 76 | , pendingRoutes :: IntMap (TVar Bool) |
77 | -- | Debug prints are written to this channel which is then flushed to | ||
78 | -- stderr from within the 'routeThread'. | ||
60 | , routeLog :: TChan String | 79 | , routeLog :: TChan String |
61 | } | 80 | } |
62 | 81 | ||
63 | data RouteRecord = RouteRecord | 82 | data RouteRecord = RouteRecord |
64 | { storedRoute :: OnionRoute | 83 | { storedRoute :: OnionRoute |
65 | , responseCount :: !Int | 84 | , responseCount :: !Int |
66 | , timeoutCount :: !Int | 85 | , timeoutCount :: !Int |
67 | } | 86 | } |
68 | 87 | ||
69 | -- Onion paths have different timeouts depending on whether the path is | 88 | -- Onion paths have different timeouts depending on whether the path is |