diff options
Diffstat (limited to 'dht/src/Network/Tox/DHT/Transport.hs')
-rw-r--r-- | dht/src/Network/Tox/DHT/Transport.hs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/dht/src/Network/Tox/DHT/Transport.hs b/dht/src/Network/Tox/DHT/Transport.hs index ed755880..5de92916 100644 --- a/dht/src/Network/Tox/DHT/Transport.hs +++ b/dht/src/Network/Tox/DHT/Transport.hs | |||
@@ -59,6 +59,8 @@ import Data.Tuple | |||
59 | import Data.Word | 59 | import Data.Word |
60 | import GHC.Generics | 60 | import GHC.Generics |
61 | import Network.Socket | 61 | import Network.Socket |
62 | import DPut | ||
63 | import DebugTag | ||
62 | 64 | ||
63 | type DHTTransport ni = Transport String ni (DHTMessage Encrypted8) | 65 | type DHTTransport ni = Transport String ni (DHTMessage Encrypted8) |
64 | type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a | 66 | type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a |
@@ -97,8 +99,8 @@ mapMessage f (DHTLanDiscovery nid) = Nothing | |||
97 | instance Sized Ping where size = ConstSize 1 | 99 | instance Sized Ping where size = ConstSize 1 |
98 | instance Sized Pong where size = ConstSize 1 | 100 | instance Sized Pong where size = ConstSize 1 |
99 | 101 | ||
100 | parseDHTAddr :: Eq saddr => | 102 | parseDHTAddr :: (Eq saddr, Show ni) => |
101 | STM [(saddr, (Int, PublicKey))] | 103 | (saddr -> STM (Maybe ni)) |
102 | -> (NodeId -> saddr -> Either String ni) | 104 | -> (NodeId -> saddr -> Either String ni) |
103 | -> (ByteString, saddr) | 105 | -> (ByteString, saddr) |
104 | -> IO (Either (DHTMessage Encrypted8,ni) (ByteString,saddr)) | 106 | -> IO (Either (DHTMessage Encrypted8,ni) (ByteString,saddr)) |
@@ -113,10 +115,9 @@ parseDHTAddr pendingCookies nodeInfo (msg,saddr) | |||
113 | 0x04 -> left $ direct nodeInfo bs saddr DHTSendNodes | 115 | 0x04 -> left $ direct nodeInfo bs saddr DHTSendNodes |
114 | 0x18 -> left $ direct nodeInfo bs saddr DHTCookieRequest | 116 | 0x18 -> left $ direct nodeInfo bs saddr DHTCookieRequest |
115 | 0x19 -> do | 117 | 0x19 -> do |
116 | cs <- atomically pendingCookies | 118 | mni <- atomically $ pendingCookies saddr |
117 | let ni = fromMaybe (noReplyAddr nodeInfo saddr) $ do | 119 | let ni = fromMaybe (noReplyAddr nodeInfo saddr) mni |
118 | (cnt,key) <- lookup saddr cs <|> listToMaybe (map snd cs) | 120 | dput XMan $ "Got encrypted cookie! mni="++show mni |
119 | either (const Nothing) Just $ nodeInfo (key2id key) saddr | ||
120 | left $ fanGet bs getCookie (uncurry DHTCookie) (const $ ni) | 121 | left $ fanGet bs getCookie (uncurry DHTCookie) (const $ ni) |
121 | 0x20 -> left $ fanGet bs getDHTReqest (uncurry DHTDHTRequest) (asymNodeInfo nodeInfo saddr . snd) | 122 | 0x20 -> left $ fanGet bs getDHTReqest (uncurry DHTDHTRequest) (asymNodeInfo nodeInfo saddr . snd) |
122 | 0x21 -> left $ do | 123 | 0x21 -> left $ do |