summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox/ContactInfo.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/src/Network/Tox/ContactInfo.hs')
-rw-r--r--dht/src/Network/Tox/ContactInfo.hs23
1 files changed, 16 insertions, 7 deletions
diff --git a/dht/src/Network/Tox/ContactInfo.hs b/dht/src/Network/Tox/ContactInfo.hs
index d5640ce8..3cf5bb2b 100644
--- a/dht/src/Network/Tox/ContactInfo.hs
+++ b/dht/src/Network/Tox/ContactInfo.hs
@@ -2,20 +2,23 @@
2{-# LANGUAGE LambdaCase #-} 2{-# LANGUAGE LambdaCase #-}
3module Network.Tox.ContactInfo where 3module Network.Tox.ContactInfo where
4 4
5import Connection 5import Control.Arrow
6
7import Data.Time.Clock.POSIX
8import Control.Concurrent.STM 6import Control.Concurrent.STM
9import Control.Monad 7import Control.Monad
10import Crypto.PubKey.Curve25519 8import Crypto.PubKey.Curve25519
11import qualified Data.HashMap.Strict as HashMap 9import qualified Data.HashMap.Strict as HashMap
12 ;import Data.HashMap.Strict (HashMap) 10 ;import Data.HashMap.Strict (HashMap)
11import Data.List
13import Data.Maybe 12import Data.Maybe
14import Network.Tox.DHT.Transport as DHT 13import Data.Ord
15import Network.Tox.NodeId (id2key) 14import Data.Time.Clock.POSIX
16import Network.Tox.Onion.Transport as Onion 15
17import DPut 16import Connection
18import DebugTag 17import DebugTag
18import DPut
19import Network.Tox.DHT.Transport as DHT
20import Network.Tox.NodeId (id2key)
21import Network.Tox.Onion.Transport as Onion
19 22
20newtype ContactInfo extra = ContactInfo 23newtype ContactInfo extra = ContactInfo
21 { 24 {
@@ -43,6 +46,12 @@ data Contact = Contact
43 , contactPolicy :: TVar (Maybe Connection.Policy) 46 , contactPolicy :: TVar (Maybe Connection.Policy)
44 } 47 }
45 48
49contactDHTKey :: Contact -> STM (Maybe PublicKey)
50contactDHTKey c = do
51 mkeypkt <- fmap (second dhtpk) <$> readTVar (contactKeyPacket c)
52 mseen <- fmap (second $ id2key . nodeId) <$> readTVar (contactLastSeenAddr c)
53 return $ fmap snd $ listToMaybe $ sortOn (Down . fst) $ catMaybes [mkeypkt,mseen]
54
46newContactInfo :: IO (ContactInfo extra) 55newContactInfo :: IO (ContactInfo extra)
47newContactInfo = atomically $ ContactInfo <$> newTVar HashMap.empty 56newContactInfo = atomically $ ContactInfo <$> newTVar HashMap.empty
48 57