diff options
Diffstat (limited to 'dht/src/Network/Tox/ContactInfo.hs')
-rw-r--r-- | dht/src/Network/Tox/ContactInfo.hs | 23 |
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 #-} |
3 | module Network.Tox.ContactInfo where | 3 | module Network.Tox.ContactInfo where |
4 | 4 | ||
5 | import Connection | 5 | import Control.Arrow |
6 | |||
7 | import Data.Time.Clock.POSIX | ||
8 | import Control.Concurrent.STM | 6 | import Control.Concurrent.STM |
9 | import Control.Monad | 7 | import Control.Monad |
10 | import Crypto.PubKey.Curve25519 | 8 | import Crypto.PubKey.Curve25519 |
11 | import qualified Data.HashMap.Strict as HashMap | 9 | import qualified Data.HashMap.Strict as HashMap |
12 | ;import Data.HashMap.Strict (HashMap) | 10 | ;import Data.HashMap.Strict (HashMap) |
11 | import Data.List | ||
13 | import Data.Maybe | 12 | import Data.Maybe |
14 | import Network.Tox.DHT.Transport as DHT | 13 | import Data.Ord |
15 | import Network.Tox.NodeId (id2key) | 14 | import Data.Time.Clock.POSIX |
16 | import Network.Tox.Onion.Transport as Onion | 15 | |
17 | import DPut | 16 | import Connection |
18 | import DebugTag | 17 | import DebugTag |
18 | import DPut | ||
19 | import Network.Tox.DHT.Transport as DHT | ||
20 | import Network.Tox.NodeId (id2key) | ||
21 | import Network.Tox.Onion.Transport as Onion | ||
19 | 22 | ||
20 | newtype ContactInfo extra = ContactInfo | 23 | newtype 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 | ||
49 | contactDHTKey :: Contact -> STM (Maybe PublicKey) | ||
50 | contactDHTKey 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 | |||
46 | newContactInfo :: IO (ContactInfo extra) | 55 | newContactInfo :: IO (ContactInfo extra) |
47 | newContactInfo = atomically $ ContactInfo <$> newTVar HashMap.empty | 56 | newContactInfo = atomically $ ContactInfo <$> newTVar HashMap.empty |
48 | 57 | ||