summaryrefslogtreecommitdiff
path: root/src/Network/DHT
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-07-03 18:46:14 -0400
committerjoe <joe@jerkface.net>2017-07-03 18:46:14 -0400
commit81bcffd68c9997b8e4b5f8c2d4cb1e4db4c62153 (patch)
tree123f6236b1f4d4f70f2d0fc260e5d0b28159741c /src/Network/DHT
parentbe15a1ceba3b87f845d3b56915207457a94394ee (diff)
Moved node-id out of Query/Response. It can be either in the
envelope (Tox) or in the query/response payload (Mainline).
Diffstat (limited to 'src/Network/DHT')
-rw-r--r--src/Network/DHT/Mainline.hs12
-rw-r--r--src/Network/DHT/Types.hs8
2 files changed, 9 insertions, 11 deletions
diff --git a/src/Network/DHT/Mainline.hs b/src/Network/DHT/Mainline.hs
index e5517a3a..d68755a7 100644
--- a/src/Network/DHT/Mainline.hs
+++ b/src/Network/DHT/Mainline.hs
@@ -154,7 +154,7 @@ read_only_key = "ro"
154#ifdef VERSION_bencoding 154#ifdef VERSION_bencoding
155instance BEncode a => BEncode (Query KMessageOf a) where 155instance BEncode a => BEncode (Query KMessageOf a) where
156 toBEncode Query {..} = toDict $ 156 toBEncode Query {..} = toDict $
157 BDict.union ( node_id_key .=! queringNodeId 157 BDict.union ( node_id_key .=! queringNodeId queryExtra
158 .: read_only_key .=? bool Nothing (Just (1 :: Integer)) (queryIsReadOnly queryExtra) 158 .: read_only_key .=? bool Nothing (Just (1 :: Integer)) (queryIsReadOnly queryExtra)
159 .: endDict) 159 .: endDict)
160 (dict (toBEncode queryParams)) 160 (dict (toBEncode queryParams))
@@ -162,9 +162,9 @@ instance BEncode a => BEncode (Query KMessageOf a) where
162 dict (BDict d) = d 162 dict (BDict d) = d
163 dict _ = error "impossible: instance BEncode (Query a)" 163 dict _ = error "impossible: instance BEncode (Query a)"
164 164
165 fromBEncode v = do 165 fromBEncode v =
166 Query <$> fromDict (field (req node_id_key)) v 166 Query <$> (MainlineQuery <$> fromDict (field (req node_id_key)) v
167 <*> fromDict (IsReadOnlyQuery . fromMaybe False <$>? read_only_key) v 167 <*> fromDict (fromMaybe False <$>? read_only_key) v)
168 <*> fromBEncode v 168 <*> fromBEncode v
169#else 169#else
170data Query a = Query a 170data Query a = Query a
@@ -174,11 +174,11 @@ data Query a = Query a
174instance BEncode a => BEncode (Response KMessageOf a) where 174instance BEncode a => BEncode (Response KMessageOf a) where
175 toBEncode = toBEncode . toQuery 175 toBEncode = toBEncode . toQuery
176 where 176 where
177 toQuery (Response nid MainlineResponseData a) = Query nid (IsReadOnlyQuery False) a 177 toQuery (Response (MainlineResponse nid) a) = Query (MainlineQuery nid False) a
178 178
179 fromBEncode b = fromQuery <$> fromBEncode b 179 fromBEncode b = fromQuery <$> fromBEncode b
180 where 180 where
181 fromQuery (Query nid _ a) = Response nid MainlineResponseData a 181 fromQuery (Query (MainlineQuery nid _) a) = Response (MainlineResponse nid) a
182#else 182#else
183data Response KMessageOf a = Response KMessageOf a 183data Response KMessageOf a = Response KMessageOf a
184#endif 184#endif
diff --git a/src/Network/DHT/Types.hs b/src/Network/DHT/Types.hs
index bd2825fb..0102a53f 100644
--- a/src/Network/DHT/Types.hs
+++ b/src/Network/DHT/Types.hs
@@ -26,9 +26,8 @@ data TableParameters msg ip u = TableParameters
26-- | All queries have an \"id\" key and value containing the node ID 26-- | All queries have an \"id\" key and value containing the node ID
27-- of the querying node. 27-- of the querying node.
28data Query dht a = Query 28data Query dht a = Query
29 { queringNodeId :: NodeId dht -- ^ node id of /quering/ node; 29 { queryExtra :: QueryExtra dht -- ^ DHT-specific query headers
30 , queryExtra :: QueryExtra dht -- , queryIsReadOnly :: Bool -- node is read-only as per BEP 43 30 , queryParams :: a -- ^ query parameters.
31 , queryParams :: a -- ^ query parameters.
32 } deriving (Typeable,Generic) 31 } deriving (Typeable,Generic)
33 32
34deriving instance (Eq (NodeId dht), Eq (QueryExtra dht), Eq a ) => Eq (Query dht a) 33deriving instance (Eq (NodeId dht), Eq (QueryExtra dht), Eq a ) => Eq (Query dht a)
@@ -37,8 +36,7 @@ deriving instance (Show (NodeId dht), Show (QueryExtra dht), Show a ) => Show (Q
37-- | All responses have an \"id\" key and value containing the node ID 36-- | All responses have an \"id\" key and value containing the node ID
38-- of the responding node. 37-- of the responding node.
39data Response dht a = Response 38data Response dht a = Response
40 { queredNodeId :: NodeId dht -- ^ node id of /quered/ node; 39 { responseExtra :: ResponseExtra dht
41 , responseExtra :: ResponseExtra dht
42 , responseVals :: a -- ^ query result. 40 , responseVals :: a -- ^ query result.
43 } deriving (Typeable,Generic) 41 } deriving (Typeable,Generic)
44 42