summaryrefslogtreecommitdiff
path: root/dht/src/Data/Tox/Relay.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/src/Data/Tox/Relay.hs')
-rw-r--r--dht/src/Data/Tox/Relay.hs29
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 #-}
10module Data.Tox.Relay where 10module Data.Tox.Relay
11 ( module Network.Tox.TCP.NodeId
12 , module Data.Tox.Relay
13 ) where
11 14
12import Data.Aeson (ToJSON(..),FromJSON(..)) 15import Data.Aeson (ToJSON(..),FromJSON(..))
13import qualified Data.Aeson as JSON 16import qualified Data.Aeson as JSON
@@ -27,8 +30,10 @@ import qualified Rank2
27import qualified Text.ParserCombinators.ReadP as RP 30import qualified Text.ParserCombinators.ReadP as RP
28 31
29import Crypto.Tox 32import Crypto.Tox
33import Network.Tox.TCP.NodeId
30import Data.Tox.Onion 34import Data.Tox.Onion
31import qualified Network.Tox.NodeId as UDP 35import qualified Network.Tox.NodeId as UDP
36import Network.Tox.TCP.NodeId as TCP
32 37
33newtype ConId = ConId Word8 38newtype 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
199data NodeInfo = NodeInfo
200 { udpNodeInfo :: UDP.NodeInfo
201 , tcpPort :: PortNumber
202 }
203 deriving (Eq,Ord)
204
205instance 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
214instance 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
222tcpPortScore :: Word16 -> Word16 205tcpPortScore :: Word16 -> Word16
223tcpPortScore 443 = 0 206tcpPortScore 443 = 0