summaryrefslogtreecommitdiff
path: root/src/Network
diff options
context:
space:
mode:
authorjim@bo <jim@bo>2018-06-20 22:40:37 -0400
committerjim@bo <jim@bo>2018-06-20 22:43:47 -0400
commit825962518c6ad00279fc23e8e1dec746980e483f (patch)
tree68c135bdffd879835c48cce3d397e8edf99b53f4 /src/Network
parent09aa079fbab069f177e08b5239bf684d312eb00a (diff)
More DPut stuff
* verbose/quiet without args shows report * verbose all - sets all tags verbose * quiet all - sets all tags quiet * XMisc defaults to verbose, everything else quiet * new XMan tag for ToxManager related stuff * s/hputStrLn stderr/dput XMisc/ in daemon code
Diffstat (limited to 'src/Network')
-rw-r--r--src/Network/Address.hs3
-rw-r--r--src/Network/BitTorrent/MainlineDHT.hs19
-rw-r--r--src/Network/Kademlia/Bootstrap.hs22
-rw-r--r--src/Network/QueryResponse.hs15
-rw-r--r--src/Network/StreamServer.hs3
-rw-r--r--src/Network/Tox.hs44
-rw-r--r--src/Network/Tox/ContactInfo.hs3
-rw-r--r--src/Network/Tox/DHT/Handlers.hs14
-rw-r--r--src/Network/Tox/Onion/Transport.hs12
-rw-r--r--src/Network/UPNP.hs3
10 files changed, 77 insertions, 61 deletions
diff --git a/src/Network/Address.hs b/src/Network/Address.hs
index 3766d614..367f608b 100644
--- a/src/Network/Address.hs
+++ b/src/Network/Address.hs
@@ -131,6 +131,7 @@ import System.Locale (defaultTimeLocale)
131#endif 131#endif
132import System.Entropy 132import System.Entropy
133import System.IO (stderr) 133import System.IO (stderr)
134import DPut
134 135
135-- import Paths_bittorrent (version) 136-- import Paths_bittorrent (version)
136 137
@@ -1193,7 +1194,7 @@ getBindAddress bindspec enabled6 = do
1193 then SockAddrInet6 (parsePort listenPortString) 0 iN6ADDR_ANY 0 1194 then SockAddrInet6 (parsePort listenPortString) 0 iN6ADDR_ANY 0
1194 else SockAddrInet (parsePort listenPortString) iNADDR_ANY 1195 else SockAddrInet (parsePort listenPortString) iNADDR_ANY
1195 where parsePort s = fromMaybe 0 $ readMaybe s 1196 where parsePort s = fromMaybe 0 $ readMaybe s
1196 hPutStrLn stderr $ BS8.pack $ "Listening on " ++ show listenAddr 1197 dput XMisc $ "Listening on " ++ show listenAddr
1197 return listenAddr 1198 return listenAddr
1198 1199
1199-- | True if the argument is an IPv4-mapped address with prefix ::FFFF:0:0/96 1200-- | True if the argument is an IPv4-mapped address with prefix ::FFFF:0:0/96
diff --git a/src/Network/BitTorrent/MainlineDHT.hs b/src/Network/BitTorrent/MainlineDHT.hs
index 847d820b..626f980f 100644
--- a/src/Network/BitTorrent/MainlineDHT.hs
+++ b/src/Network/BitTorrent/MainlineDHT.hs
@@ -87,6 +87,7 @@ import qualified Data.Aeson as JSON
87import Text.Read 87import Text.Read
88import System.Global6 88import System.Global6
89import Control.TriadCommittee 89import Control.TriadCommittee
90import DPut
90 91
91newtype NodeId = NodeId ByteString 92newtype NodeId = NodeId ByteString
92 deriving (Eq,Ord,ByteArrayAccess, Bits, Hashable) 93 deriving (Eq,Ord,ByteArrayAccess, Bits, Hashable)
@@ -431,10 +432,10 @@ addVerbosity :: Transport err SockAddr ByteString -> Transport err SockAddr Byte
431addVerbosity tr = 432addVerbosity tr =
432 tr { awaitMessage = \kont -> awaitMessage tr $ \m -> do 433 tr { awaitMessage = \kont -> awaitMessage tr $ \m -> do
433 forM_ m $ mapM_ $ \(msg,addr) -> do 434 forM_ m $ mapM_ $ \(msg,addr) -> do
434 hPutStrLn stderr (showPacket id addr " --> " msg) 435 dput XBitTorrent (showPacket id addr " --> " msg)
435 kont m 436 kont m
436 , sendMessage = \addr msg -> do 437 , sendMessage = \addr msg -> do
437 hPutStrLn stderr (showPacket id addr " <-- " msg) 438 dput XBitTorrent (showPacket id addr " <-- " msg)
438 sendMessage tr addr msg 439 sendMessage tr addr msg
439 } 440 }
440 441
@@ -642,18 +643,18 @@ newClient swarms addr = do
642 fork $ fix $ \again -> do 643 fork $ fix $ \again -> do
643 myThreadId >>= flip labelThread "addr4" 644 myThreadId >>= flip labelThread "addr4"
644 (addr, ns) <- atomically $ readTChan addr4 645 (addr, ns) <- atomically $ readTChan addr4
645 hPutStrLn stderr $ "External IPv4: "++show (addr, length ns) 646 dput XBitTorrent $ "External IPv4: "++show (addr, length ns)
646 forM_ ns $ \n -> do 647 forM_ ns $ \n -> do
647 hPutStrLn stderr $ "Change IP, ping: "++show n 648 dput XBitTorrent $ "Change IP, ping: "++show n
648 ping outgoingClient n 649 ping outgoingClient n
649 -- TODO: trigger bootstrap ipv4 650 -- TODO: trigger bootstrap ipv4
650 again 651 again
651 fork $ fix $ \again -> do 652 fork $ fix $ \again -> do
652 myThreadId >>= flip labelThread "addr6" 653 myThreadId >>= flip labelThread "addr6"
653 (addr,ns) <- atomically $ readTChan addr6 654 (addr,ns) <- atomically $ readTChan addr6
654 hPutStrLn stderr $ "External IPv6: "++show (addr, length ns) 655 dput XBitTorrent $ "External IPv6: "++show (addr, length ns)
655 forM_ ns $ \n -> do 656 forM_ ns $ \n -> do
656 hPutStrLn stderr $ "Change IP, ping: "++show n 657 dput XBitTorrent $ "Change IP, ping: "++show n
657 ping outgoingClient n 658 ping outgoingClient n
658 -- TODO: trigger bootstrap ipv6 659 -- TODO: trigger bootstrap ipv6
659 again 660 again
@@ -734,7 +735,7 @@ mainlineKademlia client committee refresher
734 return $ do 735 return $ do
735 io1 >> io2 736 io1 >> io2
736 {- noisy (timestamp updates are currently reported as transitions to Accepted) 737 {- noisy (timestamp updates are currently reported as transitions to Accepted)
737 hPutStrLn stderr $ unwords 738 dput XBitTorrent $ unwords
738 [ show (transitionedTo tr) 739 [ show (transitionedTo tr)
739 , show (transitioningNode tr) 740 , show (transitioningNode tr)
740 ] -} 741 ] -}
@@ -753,7 +754,7 @@ transitionCommittee :: TriadCommittee NodeId SockAddr -> RoutingTransition NodeI
753transitionCommittee committee (RoutingTransition ni Stranger) = do 754transitionCommittee committee (RoutingTransition ni Stranger) = do
754 delVote committee (nodeId ni) 755 delVote committee (nodeId ni)
755 return $ do 756 return $ do
756 hPutStrLn stderr $ "delVote "++show (nodeId ni) 757 dput XBitTorrent $ "delVote "++show (nodeId ni)
757transitionCommittee committee _ = return $ return () 758transitionCommittee committee _ = return $ return ()
758 759
759updateRouting :: MainlineClient -> Routing -> NodeInfo -> Message BValue -> IO () 760updateRouting :: MainlineClient -> Routing -> NodeInfo -> Message BValue -> IO ()
@@ -768,7 +769,7 @@ updateRouting client routing naddr msg = do
768 case msg of 769 case msg of
769 R { rspReflectedIP = Just sockaddr } 770 R { rspReflectedIP = Just sockaddr }
770 -> do 771 -> do
771 -- hPutStrLn stderr $ "External: "++show (nodeId naddr,sockaddr) 772 -- dput XBitTorrent $ "External: "++show (nodeId naddr,sockaddr)
772 atomically $ addVote committee (nodeId naddr) sockaddr 773 atomically $ addVote committee (nodeId naddr) sockaddr
773 _ -> return () 774 _ -> return ()
774 insertNode (mainlineKademlia client committee refresher) naddr 775 insertNode (mainlineKademlia client committee refresher) naddr
diff --git a/src/Network/Kademlia/Bootstrap.hs b/src/Network/Kademlia/Bootstrap.hs
index d77f524c..4197e06e 100644
--- a/src/Network/Kademlia/Bootstrap.hs
+++ b/src/Network/Kademlia/Bootstrap.hs
@@ -143,7 +143,7 @@ forkPollForRefresh r@BucketRefresher{ refreshInterval
143 where 143 where
144 refresh :: Int -> IO Int 144 refresh :: Int -> IO Int
145 refresh n = do 145 refresh n = do
146 -- hPutStrLn stderr $ "Refresh time! "++ show n 146 -- dput XRefresh $ "Refresh time! "++ show n
147 refreshBucket r n 147 refreshBucket r n
148 148
149 go again ( bktnum :-> refresh_time ) = do 149 go again ( bktnum :-> refresh_time ) = do
@@ -162,7 +162,7 @@ forkPollForRefresh r@BucketRefresher{ refreshInterval
162 return () 162 return ()
163 return () 163 return ()
164 picoseconds -> do 164 picoseconds -> do
165 -- hPutStrLn stderr $ show (picoseconds `div` 10^12) ++ " seconds until refresh " ++ show bktnum 165 -- dput XRefresh $ show (picoseconds `div` 10^12) ++ " seconds until refresh " ++ show bktnum
166 threadDelay ( picoseconds `div` 10^6 ) 166 threadDelay ( picoseconds `div` 10^6 )
167 again 167 again
168 168
@@ -202,13 +202,13 @@ onFinishedRefresh BucketRefresher { bootstrapCountdown
202 , refreshQueue 202 , refreshQueue
203 , refreshBuckets } num now = do 203 , refreshBuckets } num now = do
204 bootstrapping <- readTVar bootstrapMode 204 bootstrapping <- readTVar bootstrapMode
205 if not bootstrapping then return $ return () -- hPutStrLn stderr $ "Finished non-boostrapping refresh: "++show num 205 if not bootstrapping then return $ return () -- dput XRefresh $ "Finished non-boostrapping refresh: "++show num
206 else do 206 else do
207 tbl <- readTVar refreshBuckets 207 tbl <- readTVar refreshBuckets
208 action <- 208 action <-
209 if num /= R.bktCount tbl - 1 209 if num /= R.bktCount tbl - 1
210 then do modifyTVar' bootstrapCountdown (fmap pred) 210 then do modifyTVar' bootstrapCountdown (fmap pred)
211 return $ return () -- hPutStrLn stderr $ "BOOTSTRAP decrement" 211 return $ return () -- dput XRefresh $ "BOOTSTRAP decrement"
212 else do 212 else do
213 -- The last bucket finished. 213 -- The last bucket finished.
214 cnt <- readTVar bootstrapCountdown 214 cnt <- readTVar bootstrapCountdown
@@ -225,17 +225,17 @@ onFinishedRefresh BucketRefresher { bootstrapCountdown
225 -- Schedule immediate refresh for unfull buckets (other than this one). 225 -- Schedule immediate refresh for unfull buckets (other than this one).
226 modifyTVar' refreshQueue $ Int.insert n (now - 1) 226 modifyTVar' refreshQueue $ Int.insert n (now - 1)
227 writeTVar bootstrapCountdown $! Just $! length unfull 227 writeTVar bootstrapCountdown $! Just $! length unfull
228 return $ return () -- hPutStrLn stderr $ "BOOTSTRAP scheduling: "++show unfull 228 return $ return () -- dput XRefresh $ "BOOTSTRAP scheduling: "++show unfull
229 Just n -> do writeTVar bootstrapCountdown $! Just $! pred n 229 Just n -> do writeTVar bootstrapCountdown $! Just $! pred n
230 return $ return () -- hPutStrLn stderr "BOOTSTRAP decrement (last bucket)" 230 return $ return () -- dput XRefresh "BOOTSTRAP decrement (last bucket)"
231 cnt <- readTVar bootstrapCountdown 231 cnt <- readTVar bootstrapCountdown
232 if (cnt == Just 0) 232 if (cnt == Just 0)
233 then do 233 then do
234 -- Boostrap finished! 234 -- Boostrap finished!
235 writeTVar bootstrapMode False 235 writeTVar bootstrapMode False
236 writeTVar bootstrapCountdown Nothing 236 writeTVar bootstrapCountdown Nothing
237 return $ do action ; hPutStrLn stderr $ "BOOTSTRAP complete (" ++ show (R.shape tbl) ++ ")." 237 return $ do action ; dput XRefresh $ "BOOTSTRAP complete (" ++ show (R.shape tbl) ++ ")."
238 else return $ do action ; hPutStrLn stderr $ "BOOTSTRAP progress " ++ show (num,R.shape tbl,cnt) 238 else return $ do action ; dput XRefresh $ "BOOTSTRAP progress " ++ show (num,R.shape tbl,cnt)
239 239
240refreshBucket :: (Show nid, Ord ni, Ord nid, Hashable nid, Hashable ni) => 240refreshBucket :: (Show nid, Ord ni, Ord nid, Hashable nid, Hashable ni) =>
241 BucketRefresher nid ni -> Int -> IO Int 241 BucketRefresher nid ni -> Int -> IO Int
@@ -254,7 +254,7 @@ refreshBucket r@BucketRefresher{ refreshSearch = sch
254 fin <- atomically $ newTVar False 254 fin <- atomically $ newTVar False
255 resultCounter <- atomically $ newTVar Set.empty 255 resultCounter <- atomically $ newTVar Set.empty
256 256
257 hPutStrLn stderr $ "Start refresh " ++ show (n,sample) 257 dput XRefresh $ "Start refresh " ++ show (n,sample)
258 258
259 -- Set 15 minute timeout in order to avoid overlapping refreshes. 259 -- Set 15 minute timeout in order to avoid overlapping refreshes.
260 s <- search sch tbl sample $ if n+1 == R.defaultBucketCount 260 s <- search sch tbl sample $ if n+1 == R.defaultBucketCount
@@ -289,9 +289,9 @@ restartBootstrap r@BucketRefresher{ bootstrapMode, bootstrapCountdown } = do
289 writeTVar bootstrapMode True 289 writeTVar bootstrapMode True
290 writeTVar bootstrapCountdown Nothing 290 writeTVar bootstrapCountdown Nothing
291 if not unchanged then return $ do 291 if not unchanged then return $ do
292 hPutStrLn stderr "BOOTSTRAP entered bootstrap mode" 292 dput XRefresh "BOOTSTRAP entered bootstrap mode"
293 refreshLastBucket r 293 refreshLastBucket r
294 else return $ hPutStrLn stderr "BOOTSTRAP already bootstrapping" 294 else return $ dput XRefresh "BOOTSTRAP already bootstrapping"
295 295
296bootstrap :: (Ord ni, Ord nid, Hashable nid, Hashable ni, Foldable t, Foldable t1, Show nid) => 296bootstrap :: (Ord ni, Ord nid, Hashable nid, Hashable ni, Foldable t, Foldable t1, Show nid) =>
297 BucketRefresher nid ni 297 BucketRefresher nid ni
diff --git a/src/Network/QueryResponse.hs b/src/Network/QueryResponse.hs
index 4e697109..3ee6d945 100644
--- a/src/Network/QueryResponse.hs
+++ b/src/Network/QueryResponse.hs
@@ -37,6 +37,7 @@ import System.Endian
37import System.IO 37import System.IO
38import System.IO.Error 38import System.IO.Error
39import System.Timeout 39import System.Timeout
40import DPut
40 41
41-- | Three methods are required to implement a datagram based query\/response protocol. 42-- | Three methods are required to implement a datagram based query\/response protocol.
42data Transport err addr x = Transport 43data Transport err addr x = Transport
@@ -426,6 +427,16 @@ ignoreErrors = ErrorReporter
426 , reportTimeout = \_ _ _ -> return () 427 , reportTimeout = \_ _ _ -> return ()
427 } 428 }
428 429
430logErrors :: ( Show addr
431 , Show meth
432 ) => ErrorReporter addr x meth tid String
433logErrors = ErrorReporter
434 { reportParseError = \err -> dput XMisc err
435 , reportMissingHandler = \meth addr x -> dput XMisc $ show addr ++ " --> Missing handler ("++show meth++")"
436 , reportUnknown = \addr x err -> dput XMisc $ show addr ++ " --> " ++ err
437 , reportTimeout = \meth tid addr -> dput XMisc $ show addr ++ " --> Timeout ("++show meth++")"
438 }
439
429printErrors :: ( Show addr 440printErrors :: ( Show addr
430 , Show meth 441 , Show meth
431 ) => Handle -> ErrorReporter addr x meth tid String 442 ) => Handle -> ErrorReporter addr x meth tid String
@@ -550,9 +561,9 @@ udpTransport' bind_address = do
550 (SockAddrInet6 port 0 (0,0,0x0000ffff,raw4) 0) -> \bs -> do 561 (SockAddrInet6 port 0 (0,0,0x0000ffff,raw4) 0) -> \bs -> do
551 let host4 = toBE32 raw4 562 let host4 = toBE32 raw4
552 -- Change 4mapped6 to ordinary IPv4. 563 -- Change 4mapped6 to ordinary IPv4.
553 -- hPutStrLn stderr $ "4mapped6 -> "++show (SockAddrInet port host4) 564 -- dput XMisc $ "4mapped6 -> "++show (SockAddrInet port host4)
554 saferSendTo sock bs (SockAddrInet port host4) 565 saferSendTo sock bs (SockAddrInet port host4)
555 addr@(SockAddrInet6 {}) -> \bs -> hPutStrLn stderr ("Discarding packet to "++show addr) 566 addr@(SockAddrInet6 {}) -> \bs -> dput XMisc ("Discarding packet to "++show addr)
556 addr4 -> \bs -> saferSendTo sock bs addr4 567 addr4 -> \bs -> saferSendTo sock bs addr4
557 _ -> \addr bs -> saferSendTo sock bs addr 568 _ -> \addr bs -> saferSendTo sock bs addr
558 , closeTransport = close sock 569 , closeTransport = close sock
diff --git a/src/Network/StreamServer.hs b/src/Network/StreamServer.hs
index 6a36ed00..01680b77 100644
--- a/src/Network/StreamServer.hs
+++ b/src/Network/StreamServer.hs
@@ -57,6 +57,7 @@ import System.IO (Handle)
57import Control.Concurrent.MVar (newMVar) 57import Control.Concurrent.MVar (newMVar)
58 58
59import Network.SocketLike 59import Network.SocketLike
60import DPut
60 61
61data ServerHandle = ServerHandle Socket (Weak ThreadId) 62data ServerHandle = ServerHandle Socket (Weak ThreadId)
62 63
@@ -89,7 +90,7 @@ bshow e = show e
89-- | Send a string to stderr. Not exported. Default 'serverWarn' when 90-- | Send a string to stderr. Not exported. Default 'serverWarn' when
90-- 'withSession' is used to configure the server. 91-- 'withSession' is used to configure the server.
91warnStderr :: String -> IO () 92warnStderr :: String -> IO ()
92warnStderr str = hPutStrLn stderr str >> hFlush stderr 93warnStderr str = dput XMisc str >> hFlush stderr
93 94
94data ServerConfig = ServerConfig 95data ServerConfig = ServerConfig
95 { serverWarn :: String -> IO () 96 { serverWarn :: String -> IO ()
diff --git a/src/Network/Tox.hs b/src/Network/Tox.hs
index a13a4f10..efddc2a0 100644
--- a/src/Network/Tox.hs
+++ b/src/Network/Tox.hs
@@ -141,9 +141,9 @@ newCrypto = do
141 noncevar <- atomically $ newTVar $ fst $ withDRG drg drgNew 141 noncevar <- atomically $ newTVar $ fst $ withDRG drg drgNew
142 cookieKeys <- atomically $ newTVar [] 142 cookieKeys <- atomically $ newTVar []
143 cache <- newSecretsCache 143 cache <- newSecretsCache
144 hPutStrLn stderr $ "secret(tox) = " ++ DHT.showHex secret 144 dput XNetCrypto $ "secret(tox) = " ++ DHT.showHex secret
145 hPutStrLn stderr $ "public(tox) = " ++ DHT.showHex pubkey 145 dput XNetCrypto $ "public(tox) = " ++ DHT.showHex pubkey
146 hPutStrLn stderr $ "symmetric(tox) = " ++ DHT.showHex symkey 146 dput XNetCrypto $ "symmetric(tox) = " ++ DHT.showHex symkey
147 return TransportCrypto 147 return TransportCrypto
148 { transportSecret = secret 148 { transportSecret = secret
149 , transportPublic = pubkey 149 , transportPublic = pubkey
@@ -233,7 +233,7 @@ newClient drg net classify selfAddr handlers modifytbl modifynet = do
233 , lookupHandler = handlers -- var 233 , lookupHandler = handlers -- var
234 , tableMethods = modifytbl tbl 234 , tableMethods = modifytbl tbl
235 } 235 }
236 eprinter = printErrors stderr 236 eprinter = logErrors -- printErrors stderr
237 mkclient (tbl,var) handlers = 237 mkclient (tbl,var) handlers =
238 let client = Client 238 let client = Client
239 { clientNet = addHandler (reportParseError eprinter) (handleMessage client) $ modifynet client net 239 { clientNet = addHandler (reportParseError eprinter) (handleMessage client) $ modifynet client net
@@ -277,7 +277,7 @@ netCryptoWithBackoff millisecs tox myseckey theirpubkey = do
277 mbContactsVar <- fmap contacts . HashMap.lookup mykeyAsId <$> atomically (readTVar (accounts (toxContactInfo tox))) 277 mbContactsVar <- fmap contacts . HashMap.lookup mykeyAsId <$> atomically (readTVar (accounts (toxContactInfo tox)))
278 case mbContactsVar of 278 case mbContactsVar of
279 Nothing -> do 279 Nothing -> do
280 hPutStrLn stderr ("netCrypto: (" ++ show mykeyAsId ++") accounts lookup failed.") 280 dput XNetCrypto ("netCrypto: (" ++ show mykeyAsId ++") accounts lookup failed.")
281 return [] 281 return []
282 282
283 Just contactsVar -> do 283 Just contactsVar -> do
@@ -292,13 +292,13 @@ netCryptoWithBackoff millisecs tox myseckey theirpubkey = do
292 return (kp,sa,fr,cp) 292 return (kp,sa,fr,cp)
293 case tup of 293 case tup of
294 (Nothing,Nothing,Nothing,Nothing) -> do 294 (Nothing,Nothing,Nothing,Nothing) -> do
295 hPutStrLn stderr ("netCrypto: (" ++ show mykeyAsId ++") friend not found (" ++ show theirkeyAsId ++ ").") 295 dput XNetCrypto ("netCrypto: (" ++ show mykeyAsId ++") friend not found (" ++ show theirkeyAsId ++ ").")
296 return [] 296 return []
297 (mbKeyPkt,Nothing,mbFR,mbPolicy) -> do 297 (mbKeyPkt,Nothing,mbFR,mbPolicy) -> do
298 hPutStrLn stderr ("netCrypto: (" ++ show mykeyAsId ++") no SockAddr for friend (" ++ show theirkeyAsId ++ "). TODO: search their node?") 298 dput XNetCrypto ("netCrypto: (" ++ show mykeyAsId ++") no SockAddr for friend (" ++ show theirkeyAsId ++ "). TODO: search their node?")
299 return [] 299 return []
300 (Nothing,_,_,_) -> do 300 (Nothing,_,_,_) -> do
301 hPutStrLn stderr ("netCrypto: (" ++ show mykeyAsId ++") no DHT-key for friend (" ++ show theirkeyAsId ++ "). TODO: what?") 301 dput XNetCrypto ("netCrypto: (" ++ show mykeyAsId ++") no DHT-key for friend (" ++ show theirkeyAsId ++ "). TODO: what?")
302 return [] 302 return []
303 (Just (stamp_theirDhtKey,keyPkt),Just (stamp_saddr,saddr),mbFR,mbPolicy) 303 (Just (stamp_theirDhtKey,keyPkt),Just (stamp_saddr,saddr),mbFR,mbPolicy)
304 | theirDhtKey <- DHT.dhtpk keyPkt -> do 304 | theirDhtKey <- DHT.dhtpk keyPkt -> do
@@ -310,7 +310,7 @@ netCryptoWithBackoff millisecs tox myseckey theirpubkey = do
310 Just sessions | matchedSessions <- filter (sessionUsesIdentity (toPublic myseckey)) sessions 310 Just sessions | matchedSessions <- filter (sessionUsesIdentity (toPublic myseckey)) sessions
311 , not (null matchedSessions) 311 , not (null matchedSessions)
312 -> do 312 -> do
313 hPutStrLn stderr ("netCrypto: Already have a session for " ++ show mykeyAsId ++ "<-->" ++ show theirkeyAsId) 313 dput XNetCrypto ("netCrypto: Already have a session for " ++ show mykeyAsId ++ "<-->" ++ show theirkeyAsId)
314 return matchedSessions 314 return matchedSessions
315 -- if not, send handshake, this is separate session 315 -- if not, send handshake, this is separate session
316 _ -> do 316 _ -> do
@@ -319,16 +319,16 @@ netCryptoWithBackoff millisecs tox myseckey theirpubkey = do
319 let crypto = toxCryptoKeys tox 319 let crypto = toxCryptoKeys tox
320 client = toxDHT tox 320 client = toxDHT tox
321 case nodeInfo (key2id theirDhtKey) saddr of 321 case nodeInfo (key2id theirDhtKey) saddr of
322 Left e -> hPutStrLn stderr ("netCrypto: nodeInfo fail... " ++ e) >> return [] 322 Left e -> dput XNetCrypto ("netCrypto: nodeInfo fail... " ++ e) >> return []
323 Right ni -> do 323 Right ni -> do
324 mbCookie <- DHT.cookieRequest crypto client (toPublic myseckey) ni 324 mbCookie <- DHT.cookieRequest crypto client (toPublic myseckey) ni
325 case mbCookie of 325 case mbCookie of
326 Nothing -> do 326 Nothing -> do
327 hPutStrLn stderr ("netCrypto: (" ++ show mykeyAsId ++") <--> (" ++ show theirkeyAsId ++ ").") 327 dput XNetCrypto ("netCrypto: (" ++ show mykeyAsId ++") <--> (" ++ show theirkeyAsId ++ ").")
328 hPutStrLn stderr ("netCrypto: CookieRequest failed. TODO: dhtpkNodes thingy") 328 dput XNetCrypto ("netCrypto: CookieRequest failed. TODO: dhtpkNodes thingy")
329 return [] 329 return []
330 Just cookie -> do 330 Just cookie -> do
331 hPutStrLn stderr "Have cookie, creating handshake packet..." 331 dput XNetCrypto "Have cookie, creating handshake packet..."
332 let hp = HParam { hpOtherCookie = cookie 332 let hp = HParam { hpOtherCookie = cookie
333 , hpMySecretKey = myseckey 333 , hpMySecretKey = myseckey
334 , hpCookieRemotePubkey = theirpubkey 334 , hpCookieRemotePubkey = theirpubkey
@@ -349,12 +349,12 @@ netCryptoWithBackoff millisecs tox myseckey theirpubkey = do
349 delay = (millisecs * 5 `div` 4) 349 delay = (millisecs * 5 `div` 4)
350 if secnum < 20000000 350 if secnum < 20000000
351 then do 351 then do
352 hPutStrLn stderr $ "sent handshake, now delaying " ++ show (secnum * 1.25) ++ " second(s).." 352 dput XNetCrypto $ "sent handshake, now delaying " ++ show (secnum * 1.25) ++ " second(s).."
353 -- threadDelay delay 353 -- threadDelay delay
354 -- Commenting loop for simpler debugging 354 -- Commenting loop for simpler debugging
355 return [] -- netCryptoWithBackoff delay tox myseckey theirpubkey -- hopefully it will find an active session this time. 355 return [] -- netCryptoWithBackoff delay tox myseckey theirpubkey -- hopefully it will find an active session this time.
356 else do 356 else do
357 hPutStrLn stderr "Unable to establish session..." 357 dput XNetCrypto "Unable to establish session..."
358 return [] 358 return []
359 359
360-- | Create a DHTPublicKey packet to send to a remote contact. 360-- | Create a DHTPublicKey packet to send to a remote contact.
@@ -387,12 +387,12 @@ addVerbosity tr =
387 tr { awaitMessage = \kont -> awaitMessage tr $ \m -> do 387 tr { awaitMessage = \kont -> awaitMessage tr $ \m -> do
388 forM_ m $ mapM_ $ \(msg,addr) -> do 388 forM_ m $ mapM_ $ \(msg,addr) -> do
389 when (not (B.null msg || elem (B.head msg) [0,1,2,4,0x81,0x82,0x8c,0x8d])) $ do 389 when (not (B.null msg || elem (B.head msg) [0,1,2,4,0x81,0x82,0x8c,0x8d])) $ do
390 mapM_ (\x -> hPutStrLn stderr ( (show addr) ++ " --> " ++ x)) 390 mapM_ (\x -> dput XMisc ( (show addr) ++ " --> " ++ x))
391 $ xxd 0 msg 391 $ xxd 0 msg
392 kont m 392 kont m
393 , sendMessage = \addr msg -> do 393 , sendMessage = \addr msg -> do
394 when (not (B.null msg || elem (B.head msg) [0,1,2,4,0x81,0x8c,0x8d])) $ do 394 when (not (B.null msg || elem (B.head msg) [0,1,2,4,0x81,0x8c,0x8d])) $ do
395 mapM_ (\x -> hPutStrLn stderr ( (show addr) ++ " <-- " ++ x)) 395 mapM_ (\x -> dput XMisc ( (show addr) ++ " <-- " ++ x))
396 $ xxd 0 msg 396 $ xxd 0 msg
397 sendMessage tr addr msg 397 sendMessage tr addr msg
398 } 398 }
@@ -437,15 +437,15 @@ newTox keydb addr mbSessionsState suppliedDHTKey = do
437 -- patch in newly allocated roster state. 437 -- patch in newly allocated roster state.
438 crypto = crypto1 { userKeys = myKeyPairs roster } 438 crypto = crypto1 { userKeys = myKeyPairs roster }
439 forM_ suppliedDHTKey $ \k -> do 439 forM_ suppliedDHTKey $ \k -> do
440 maybe (hPutStrLn stderr "failed to encode suppliedDHTKey") 440 maybe (dput XMisc "failed to encode suppliedDHTKey")
441 (C8.hPutStrLn stderr . C8.append "Using suppliedDHTKey: ") 441 (dputB XMisc . C8.append "Using suppliedDHTKey: ")
442 $ encodeSecret k 442 $ encodeSecret k
443 443
444 drg <- drgNew 444 drg <- drgNew
445 let lookupClose _ = return Nothing 445 let lookupClose _ = return Nothing
446 446
447 mkrouting <- DHT.newRouting addr crypto updateIP updateIP 447 mkrouting <- DHT.newRouting addr crypto updateIP updateIP
448 let ignoreErrors _ = return () -- Set this to (hPutStrLn stderr) to debug onion route building. 448 let ignoreErrors _ = return () -- Set this to (dput XMisc) to debug onion route building.
449 orouter <- newOnionRouter ignoreErrors 449 orouter <- newOnionRouter ignoreErrors
450 (cryptonet,dhtcrypt,onioncrypt,dtacrypt,handshakes) <- toxTransport crypto orouter lookupClose udp 450 (cryptonet,dhtcrypt,onioncrypt,dtacrypt,handshakes) <- toxTransport crypto orouter lookupClose udp
451 451
@@ -493,8 +493,8 @@ newTox keydb addr mbSessionsState suppliedDHTKey = do
493 { toxDHT = dhtclient 493 { toxDHT = dhtclient
494 , toxOnion = onionclient 494 , toxOnion = onionclient
495 , toxToRoute = onInbound (updateContactInfo roster) dtacrypt 495 , toxToRoute = onInbound (updateContactInfo roster) dtacrypt
496 , toxCrypto = addHandler (hPutStrLn stderr) (sessionPacketH sessionsState) cryptonet 496 , toxCrypto = addHandler (dput XMisc) (sessionPacketH sessionsState) cryptonet
497 , toxHandshakes = addHandler (hPutStrLn stderr) (handshakeH sessionsState) handshakes 497 , toxHandshakes = addHandler (dput XMisc) (handshakeH sessionsState) handshakes
498 , toxCryptoSessions = sessionsState 498 , toxCryptoSessions = sessionsState
499 , toxCryptoKeys = crypto 499 , toxCryptoKeys = crypto
500 , toxRouting = mkrouting dhtclient 500 , toxRouting = mkrouting dhtclient
diff --git a/src/Network/Tox/ContactInfo.hs b/src/Network/Tox/ContactInfo.hs
index 64ea861b..5135813a 100644
--- a/src/Network/Tox/ContactInfo.hs
+++ b/src/Network/Tox/ContactInfo.hs
@@ -18,6 +18,7 @@ import Network.Tox.DHT.Transport as DHT
18import Network.Tox.NodeId (id2key) 18import Network.Tox.NodeId (id2key)
19import Network.Tox.Onion.Transport as Onion 19import Network.Tox.Onion.Transport as Onion
20import System.IO 20import System.IO
21import DPut
21 22
22newtype ContactInfo extra = ContactInfo 23newtype ContactInfo extra = ContactInfo
23 -- | Map our toxid public key to an Account record. 24 -- | Map our toxid public key to an Account record.
@@ -55,7 +56,7 @@ myKeyPairs (ContactInfo accounts) = do
55 56
56updateContactInfo :: ContactInfo extra -> Onion.AnnouncedRendezvous -> (PublicKey,Onion.OnionData) -> IO () 57updateContactInfo :: ContactInfo extra -> Onion.AnnouncedRendezvous -> (PublicKey,Onion.OnionData) -> IO ()
57updateContactInfo roster Onion.AnnouncedRendezvous{remoteUserKey} (localUserKey,omsg) = do 58updateContactInfo roster Onion.AnnouncedRendezvous{remoteUserKey} (localUserKey,omsg) = do
58 hPutStrLn stderr "updateContactInfo!!!" 59 dput XMisc "updateContactInfo!!!"
59 now <- getPOSIXTime 60 now <- getPOSIXTime
60 atomically $ do 61 atomically $ do
61 as <- readTVar (accounts roster) 62 as <- readTVar (accounts roster)
diff --git a/src/Network/Tox/DHT/Handlers.hs b/src/Network/Tox/DHT/Handlers.hs
index 43169fa0..58a29c3e 100644
--- a/src/Network/Tox/DHT/Handlers.hs
+++ b/src/Network/Tox/DHT/Handlers.hs
@@ -404,9 +404,9 @@ unwrapNodes (SendNodes ns) = (ns,ns,Just ())
404 404
405getNodes :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> NodeInfo -> IO (Maybe ([NodeInfo],[NodeInfo],Maybe ())) 405getNodes :: Client -> TVar (HashMap NodeId [NodeInfoCallback]) -> NodeId -> NodeInfo -> IO (Maybe ([NodeInfo],[NodeInfo],Maybe ()))
406getNodes client cbvar nid addr = do 406getNodes client cbvar nid addr = do
407 -- hPutStrLn stderr $ show addr ++ " <-- getnodes " ++ show nid 407 -- dput XMisc $ show addr ++ " <-- getnodes " ++ show nid
408 reply <- QR.sendQuery client (serializer GetNodesType DHTGetNodes unsendNodes) (GetNodes nid) addr 408 reply <- QR.sendQuery client (serializer GetNodesType DHTGetNodes unsendNodes) (GetNodes nid) addr
409 -- hPutStrLn stderr $ show addr ++ " -sendnodes-> " ++ show reply 409 -- dput XMisc $ show addr ++ " -sendnodes-> " ++ show reply
410 forM_ (join reply) $ \(SendNodes ns) -> 410 forM_ (join reply) $ \(SendNodes ns) ->
411 forM_ ns $ \n -> do 411 forM_ ns $ \n -> do
412 now <- getPOSIXTime 412 now <- getPOSIXTime
@@ -430,13 +430,13 @@ updateRouting client routing orouter naddr msg
430 case prefer4or6 naddr Nothing of 430 case prefer4or6 naddr Nothing of
431 Want_IP4 -> updateTable client naddr orouter (committee4 routing) (refresher4 routing) 431 Want_IP4 -> updateTable client naddr orouter (committee4 routing) (refresher4 routing)
432 Want_IP6 -> updateTable client naddr orouter (committee6 routing) (refresher6 routing) 432 Want_IP6 -> updateTable client naddr orouter (committee6 routing) (refresher6 routing)
433 Want_Both -> do hPutStrLn stderr "BUG:unreachable" 433 Want_Both -> do dput XMisc "BUG:unreachable"
434 error $ "BUG:unreachable at " ++ __FILE__ ++ ":" ++ show __LINE__ 434 error $ "BUG:unreachable at " ++ __FILE__ ++ ":" ++ show __LINE__
435 435
436updateTable :: Client -> NodeInfo -> OnionRouter -> TriadCommittee NodeId SockAddr -> BucketRefresher NodeId NodeInfo -> IO () 436updateTable :: Client -> NodeInfo -> OnionRouter -> TriadCommittee NodeId SockAddr -> BucketRefresher NodeId NodeInfo -> IO ()
437updateTable client naddr orouter committee refresher = do 437updateTable client naddr orouter committee refresher = do
438 self <- atomically $ R.thisNode <$> readTVar (refreshBuckets refresher) 438 self <- atomically $ R.thisNode <$> readTVar (refreshBuckets refresher)
439 -- hPutStrLn stderr $ "(tox)updateRouting: " ++ show (nodeIP self, nodeIP naddr) 439 -- dput XMisc $ "(tox)updateRouting: " ++ show (nodeIP self, nodeIP naddr)
440 when (self /= naddr) $ do 440 when (self /= naddr) $ do
441 -- TODO: IP address vote? 441 -- TODO: IP address vote?
442 insertNode (toxKademlia client committee orouter refresher) naddr 442 insertNode (toxKademlia client committee orouter refresher) naddr
@@ -455,7 +455,7 @@ toxKademlia client committee orouter refresher
455 return $ do 455 return $ do
456 io1 >> io2 456 io1 >> io2
457 {- 457 {-
458 hPutStrLn stderr $ unwords 458 dput XMisc $ unwords
459 [ show (transitionedTo tr) 459 [ show (transitionedTo tr)
460 , show (transitioningNode tr) 460 , show (transitioningNode tr)
461 ] 461 ]
@@ -467,7 +467,7 @@ transitionCommittee :: TriadCommittee NodeId SockAddr -> RoutingTransition NodeI
467transitionCommittee committee (RoutingTransition ni Stranger) = do 467transitionCommittee committee (RoutingTransition ni Stranger) = do
468 delVote committee (nodeId ni) 468 delVote committee (nodeId ni)
469 return $ do 469 return $ do
470 -- hPutStrLn stderr $ "delVote "++show (nodeId ni) 470 -- dput XMisc $ "delVote "++show (nodeId ni)
471 return () 471 return ()
472transitionCommittee committee _ = return $ return () 472transitionCommittee committee _ = return $ return ()
473 473
@@ -500,7 +500,7 @@ isDHTRequest _ _ = Left "Bad dht relay request"
500 500
501dhtRequestH :: NodeInfo -> DHTRequest -> IO () 501dhtRequestH :: NodeInfo -> DHTRequest -> IO ()
502dhtRequestH ni req = do 502dhtRequestH ni req = do
503 hPutStrLn stderr $ "Unhandled DHT Request: " ++ show req 503 dput XMisc $ "Unhandled DHT Request: " ++ show req
504 504
505handlers :: TransportCrypto -> Routing -> PacketKind -> Maybe Handler 505handlers :: TransportCrypto -> Routing -> PacketKind -> Maybe Handler
506handlers _ routing PingType = Just $ MethodHandler (isPing snd) mkPong $ pingH 506handlers _ routing PingType = Just $ MethodHandler (isPing snd) mkPong $ pingH
diff --git a/src/Network/Tox/Onion/Transport.hs b/src/Network/Tox/Onion/Transport.hs
index 8a66f2b2..70714465 100644
--- a/src/Network/Tox/Onion/Transport.hs
+++ b/src/Network/Tox/Onion/Transport.hs
@@ -246,7 +246,7 @@ encodeOnionAddr crypto _ (msg,OnionToOwner ni p) =
246 , nodeAddr ni ) 246 , nodeAddr ni )
247encodeOnionAddr crypto getRoute (msg,OnionDestination x ni Nothing) = do 247encodeOnionAddr crypto getRoute (msg,OnionDestination x ni Nothing) = do
248 encodeOnionAddr crypto getRoute (msg,OnionDestination x ni (Just $ routeId $ nodeId ni) ) 248 encodeOnionAddr crypto getRoute (msg,OnionDestination x ni (Just $ routeId $ nodeId ni) )
249 -- hPutStrLn stderr $ "ONION encode missing routeid" 249 -- dput XMisc $ "ONION encode missing routeid"
250 -- return Nothing 250 -- return Nothing
251encodeOnionAddr crypto getRoute (msg,OnionDestination _ ni (Just rid)) = do 251encodeOnionAddr crypto getRoute (msg,OnionDestination _ ni (Just rid)) = do
252 let go route = do 252 let go route = do
@@ -255,8 +255,8 @@ encodeOnionAddr crypto getRoute (msg,OnionDestination _ ni (Just rid)) = do
255 , nodeAddr $ routeNodeA route) 255 , nodeAddr $ routeNodeA route)
256 mapM' f x = do 256 mapM' f x = do
257 let _ = x :: Maybe OnionRoute 257 let _ = x :: Maybe OnionRoute
258 -- hPutStrLn stderr $ "ONION encode sending to " ++ show ni 258 -- dput XMisc $ "ONION encode sending to " ++ show ni
259 -- hPutStrLn stderr $ "ONION encode getRoute -> " ++ show (fmap (\y -> map ($ y) [routeNodeA,routeNodeB,routeNodeC]) x) 259 -- dput XMisc $ "ONION encode getRoute -> " ++ show (fmap (\y -> map ($ y) [routeNodeA,routeNodeB,routeNodeC]) x)
260 mapM f x -- ONION encode getRoute -> Nothing 260 mapM f x -- ONION encode getRoute -> Nothing
261 getRoute ni rid >>= mapM' go 261 getRoute ni rid >>= mapM' go
262 262
@@ -525,7 +525,7 @@ handleOnionResponse proxy crypto saddr udp kont (OnionResponse path msg) = do
525 Left e -> do 525 Left e -> do
526 -- todo report encryption error 526 -- todo report encryption error
527 let n = peanoVal path 527 let n = peanoVal path
528 hPutStrLn stderr $ unwords [ "peelSymmetric:", show n, either show show (either4or6 saddr), e] 528 dput XMisc $ unwords [ "peelSymmetric:", show n, either show show (either4or6 saddr), e]
529 kont 529 kont
530 Right (Addressed dst path') -> do 530 Right (Addressed dst path') -> do
531 sendMessage udp dst (runPut $ putResponse $ OnionResponse path' msg) 531 sendMessage udp dst (runPut $ putResponse $ OnionResponse path' msg)
@@ -897,9 +897,9 @@ parseDataToRoute crypto (OnionToRouteResponse dta, od) = do
897 r = either (const $ Right (OnionToRouteResponse dta,od)) Left e 897 r = either (const $ Right (OnionToRouteResponse dta,od)) Left e
898 -- parseDataToRoute OnionToRouteResponse decipherAndAuth: auth fail 898 -- parseDataToRoute OnionToRouteResponse decipherAndAuth: auth fail
899 case e of 899 case e of
900 Left _ -> hPutStrLn stderr $ "Failed keys: " ++ show (map (key2id . snd) ks) 900 Left _ -> dput XMisc $ "Failed keys: " ++ show (map (key2id . snd) ks)
901 Right _ -> return () 901 Right _ -> return ()
902 hPutStrLn stderr $ unlines 902 dput XMisc $ unlines
903 [ "parseDataToRoute " ++ either id (const "Right") e 903 [ "parseDataToRoute " ++ either id (const "Right") e
904 , " crypto inner.me = " ++ either id (\(pk,_,_) -> show $ key2id pk) eInner 904 , " crypto inner.me = " ++ either id (\(pk,_,_) -> show $ key2id pk) eInner
905 , " inner.them = " ++ either id (show . key2id . dataFromKey) eOuter 905 , " inner.them = " ++ either id (show . key2id . dataFromKey) eOuter
diff --git a/src/Network/UPNP.hs b/src/Network/UPNP.hs
index ed6b4777..f053369f 100644
--- a/src/Network/UPNP.hs
+++ b/src/Network/UPNP.hs
@@ -6,6 +6,7 @@ import Network.Socket
6import System.Directory 6import System.Directory
7import System.IO 7import System.IO
8import System.Process as Process 8import System.Process as Process
9import DPut
9 10
10protocols :: SocketType -> [String] 11protocols :: SocketType -> [String]
11protocols Stream = ["tcp"] 12protocols Stream = ["tcp"]
@@ -35,5 +36,5 @@ requestPorts description binds = do
35 phandle <- spawnProcess upnpc $ "-e": description : "-r" : requests 36 phandle <- spawnProcess upnpc $ "-e": description : "-r" : requests
36 return $ Just phandle 37 return $ Just phandle
37 else do 38 else do
38 hPutStrLn stderr $ "Warning: unable to find miniupnpc client at "++upnpc++"." 39 dput XMisc $ "Warning: unable to find miniupnpc client at "++upnpc++"."
39 bail 40 bail