summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Peer
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/Peer')
-rw-r--r--src/Network/BitTorrent/Peer/Addr.hs11
-rw-r--r--src/Network/BitTorrent/Peer/ClientInfo.hs17
-rw-r--r--src/Network/BitTorrent/Peer/ID.hs5
3 files changed, 21 insertions, 12 deletions
diff --git a/src/Network/BitTorrent/Peer/Addr.hs b/src/Network/BitTorrent/Peer/Addr.hs
index 1c2ac2eb..5c05180a 100644
--- a/src/Network/BitTorrent/Peer/Addr.hs
+++ b/src/Network/BitTorrent/Peer/Addr.hs
@@ -6,6 +6,7 @@
6-- Portability : non-portable 6-- Portability : non-portable
7-- 7--
8{-# LANGUAGE OverloadedStrings #-} 8{-# LANGUAGE OverloadedStrings #-}
9{-# LANGUAGE RecordWildCards #-}
9{-# OPTIONS -fno-warn-orphans #-} 10{-# OPTIONS -fno-warn-orphans #-}
10module Network.BitTorrent.Peer.Addr 11module Network.BitTorrent.Peer.Addr
11 ( PeerAddr(..) 12 ( PeerAddr(..)
@@ -17,6 +18,7 @@ import Control.Applicative
17import Data.BEncode 18import Data.BEncode
18import Data.Bits 19import Data.Bits
19import Data.Word 20import Data.Word
21import Text.PrettyPrint
20import Network 22import Network
21import Network.Socket 23import Network.Socket
22 24
@@ -73,6 +75,9 @@ connectToPeer p = do
73 connect sock (peerSockAddr p) 75 connect sock (peerSockAddr p)
74 return sock 76 return sock
75 77
76ppPeer :: PeerAddr -> String 78ppPeer :: PeerAddr -> Doc
77ppPeer p = maybe "" (++ " at ") ((ppClientInfo . clientInfo) <$> peerID p) 79ppPeer p @ PeerAddr {..} = case peerID of
78 ++ show (peerSockAddr p) 80 Just pid -> ppClientInfo (clientInfo pid) <+> "at" <+> paddr
81 Nothing -> paddr
82 where
83 paddr = text (show (peerSockAddr p))
diff --git a/src/Network/BitTorrent/Peer/ClientInfo.hs b/src/Network/BitTorrent/Peer/ClientInfo.hs
index ebbecbd7..bf7fcaab 100644
--- a/src/Network/BitTorrent/Peer/ClientInfo.hs
+++ b/src/Network/BitTorrent/Peer/ClientInfo.hs
@@ -12,6 +12,7 @@
12-- > See http://bittorrent.org/beps/bep_0020.html for more information. 12-- > See http://bittorrent.org/beps/bep_0020.html for more information.
13-- 13--
14{-# LANGUAGE OverloadedStrings #-} 14{-# LANGUAGE OverloadedStrings #-}
15{-# LANGUAGE RecordWildCards #-}
15module Network.BitTorrent.Peer.ClientInfo 16module Network.BitTorrent.Peer.ClientInfo
16 ( -- * Info 17 ( -- * Info
17 ClientInfo(..), clientInfo, ppClientInfo, unknownClient 18 ClientInfo(..), clientInfo, ppClientInfo, unknownClient
@@ -30,6 +31,7 @@ import Control.Applicative
30import Data.ByteString (ByteString) 31import Data.ByteString (ByteString)
31import qualified Data.ByteString.Char8 as BC 32import qualified Data.ByteString.Char8 as BC
32import Data.Serialize.Get 33import Data.Serialize.Get
34import Text.PrettyPrint
33 35
34import Network.BitTorrent.Peer.ID 36import Network.BitTorrent.Peer.ID
35 37
@@ -163,8 +165,8 @@ parseImpl = f . BC.unpack
163 f _ = IUnknown 165 f _ = IUnknown
164 166
165-- | Format client implementation info in human readable form. 167-- | Format client implementation info in human readable form.
166ppClientImpl :: ClientImpl -> String 168ppClientImpl :: ClientImpl -> Doc
167ppClientImpl = tail . show 169ppClientImpl = text . tail . show
168 170
169unknownImpl :: ClientImpl 171unknownImpl :: ClientImpl
170unknownImpl = IUnknown 172unknownImpl = IUnknown
@@ -174,8 +176,8 @@ unknownImpl = IUnknown
174type ClientVersion = ByteString 176type ClientVersion = ByteString
175 177
176-- | Format client implementation version in human readable form. 178-- | Format client implementation version in human readable form.
177ppClientVersion :: ClientVersion -> String 179ppClientVersion :: ClientVersion -> Doc
178ppClientVersion = BC.unpack 180ppClientVersion = text . BC.unpack
179 181
180unknownVersion :: ClientVersion 182unknownVersion :: ClientVersion
181unknownVersion = "0000" 183unknownVersion = "0000"
@@ -189,9 +191,10 @@ data ClientInfo = ClientInfo {
189 } deriving (Show, Eq, Ord) 191 } deriving (Show, Eq, Ord)
190 192
191-- | Format client implementation in human readable form. 193-- | Format client implementation in human readable form.
192ppClientInfo :: ClientInfo -> String 194ppClientInfo :: ClientInfo -> Doc
193ppClientInfo ci = ppClientImpl (ciImpl ci) ++ " version " 195ppClientInfo ClientInfo {..} =
194 ++ ppClientVersion (ciVersion ci) 196 ppClientImpl ciImpl <+> "version" <+> ppClientVersion ciVersion
197
195 198
196-- | Unrecognized client implementation. 199-- | Unrecognized client implementation.
197unknownClient :: ClientInfo 200unknownClient :: ClientInfo
diff --git a/src/Network/BitTorrent/Peer/ID.hs b/src/Network/BitTorrent/Peer/ID.hs
index f93409ed..9bf0ae31 100644
--- a/src/Network/BitTorrent/Peer/ID.hs
+++ b/src/Network/BitTorrent/Peer/ID.hs
@@ -44,6 +44,7 @@ import Data.URLEncoded
44import Data.Version (Version(Version), versionBranch) 44import Data.Version (Version(Version), versionBranch)
45import Data.Time.Clock (getCurrentTime) 45import Data.Time.Clock (getCurrentTime)
46import Data.Time.Format (formatTime) 46import Data.Time.Format (formatTime)
47import Text.PrettyPrint (text, Doc)
47import System.Locale (defaultTimeLocale) 48import System.Locale (defaultTimeLocale)
48 49
49 50
@@ -64,8 +65,8 @@ instance Serialize PeerID where
64instance URLShow PeerID where 65instance URLShow PeerID where
65 urlShow = BC.unpack . getPeerID 66 urlShow = BC.unpack . getPeerID
66 67
67ppPeerID :: PeerID -> String 68ppPeerID :: PeerID -> Doc
68ppPeerID = BC.unpack . getPeerID 69ppPeerID = text . BC.unpack . getPeerID
69 70
70 71
71-- | Azureus-style encoding have the following layout: 72-- | Azureus-style encoding have the following layout: