diff options
Diffstat (limited to 'dht/src/Data/Tox/Relay.hs')
-rw-r--r-- | dht/src/Data/Tox/Relay.hs | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/dht/src/Data/Tox/Relay.hs b/dht/src/Data/Tox/Relay.hs index f28a1685..64c90806 100644 --- a/dht/src/Data/Tox/Relay.hs +++ b/dht/src/Data/Tox/Relay.hs | |||
@@ -7,7 +7,10 @@ | |||
7 | {-# LANGUAGE PatternSynonyms #-} | 7 | {-# LANGUAGE PatternSynonyms #-} |
8 | {-# LANGUAGE StandaloneDeriving #-} | 8 | {-# LANGUAGE StandaloneDeriving #-} |
9 | {-# LANGUAGE UndecidableInstances #-} | 9 | {-# LANGUAGE UndecidableInstances #-} |
10 | module Data.Tox.Relay where | 10 | module Data.Tox.Relay |
11 | ( module Network.Tox.TCP.NodeId | ||
12 | , module Data.Tox.Relay | ||
13 | ) where | ||
11 | 14 | ||
12 | import Data.Aeson (ToJSON(..),FromJSON(..)) | 15 | import Data.Aeson (ToJSON(..),FromJSON(..)) |
13 | import qualified Data.Aeson as JSON | 16 | import qualified Data.Aeson as JSON |
@@ -27,8 +30,10 @@ import qualified Rank2 | |||
27 | import qualified Text.ParserCombinators.ReadP as RP | 30 | import qualified Text.ParserCombinators.ReadP as RP |
28 | 31 | ||
29 | import Crypto.Tox | 32 | import Crypto.Tox |
33 | import Network.Tox.TCP.NodeId | ||
30 | import Data.Tox.Onion | 34 | import Data.Tox.Onion |
31 | import qualified Network.Tox.NodeId as UDP | 35 | import qualified Network.Tox.NodeId as UDP |
36 | import Network.Tox.TCP.NodeId as TCP | ||
32 | 37 | ||
33 | newtype ConId = ConId Word8 | 38 | newtype ConId = ConId Word8 |
34 | deriving (Eq,Show,Ord,Data,Serialize) | 39 | deriving (Eq,Show,Ord,Data,Serialize) |
@@ -196,28 +201,6 @@ instance Serialize (Welcome Encrypted) where | |||
196 | get = Welcome <$> get <*> get | 201 | get = Welcome <$> get <*> get |
197 | put (Welcome n dta) = put n >> put dta | 202 | put (Welcome n dta) = put n >> put dta |
198 | 203 | ||
199 | data NodeInfo = NodeInfo | ||
200 | { udpNodeInfo :: UDP.NodeInfo | ||
201 | , tcpPort :: PortNumber | ||
202 | } | ||
203 | deriving (Eq,Ord) | ||
204 | |||
205 | instance Read NodeInfo where | ||
206 | readsPrec _ = RP.readP_to_S $ do | ||
207 | udp <- RP.readS_to_P reads | ||
208 | port <- RP.between (RP.char '{') (RP.char '}') $ do | ||
209 | mapM_ RP.char ("tcp:" :: String) | ||
210 | w16 <- RP.readS_to_P reads | ||
211 | return $ fromIntegral (w16 :: Word16) | ||
212 | return $ NodeInfo udp port | ||
213 | |||
214 | instance ToJSON NodeInfo where | ||
215 | toJSON (NodeInfo udp port) = case (toJSON udp) of | ||
216 | JSON.Object tbl -> JSON.Object $ HashMap.insert "tcp_ports" | ||
217 | (JSON.Array $ Vector.fromList | ||
218 | [JSON.Number (fromIntegral port)]) | ||
219 | tbl | ||
220 | x -> x -- Shouldn't happen. | ||
221 | 204 | ||
222 | tcpPortScore :: Word16 -> Word16 | 205 | tcpPortScore :: Word16 -> Word16 |
223 | tcpPortScore 443 = 0 | 206 | tcpPortScore 443 = 0 |