summaryrefslogtreecommitdiff
path: root/src/Network/Torrent/Tracker.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/Torrent/Tracker.hs')
-rw-r--r--src/Network/Torrent/Tracker.hs9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/Network/Torrent/Tracker.hs b/src/Network/Torrent/Tracker.hs
index 72fbcb44..796db66a 100644
--- a/src/Network/Torrent/Tracker.hs
+++ b/src/Network/Torrent/Tracker.hs
@@ -22,6 +22,7 @@ import Data.ByteString.Char8 as BC
22import Data.Text as T 22import Data.Text as T
23import Data.Serialize.Get hiding (Result) 23import Data.Serialize.Get hiding (Result)
24import Data.URLEncoded as URL 24import Data.URLEncoded as URL
25import Data.Torrent
25 26
26import Network 27import Network
27import Network.Socket 28import Network.Socket
@@ -31,8 +32,6 @@ import Network.Torrent.PeerID
31 32
32import Numeric 33import Numeric
33 34
34type Hash = ByteString
35
36data Peer = Peer { 35data Peer = Peer {
37 peerID :: Maybe PeerID 36 peerID :: Maybe PeerID
38 , peerIP :: HostAddress 37 , peerIP :: HostAddress
@@ -46,7 +45,7 @@ data Event = Started -- ^ For first request.
46 45
47data TRequest = TRequest { -- TODO peer here -- TODO detach announce 46data TRequest = TRequest { -- TODO peer here -- TODO detach announce
48 reqAnnounce :: URI -- ^ Announce url of the torrent. 47 reqAnnounce :: URI -- ^ Announce url of the torrent.
49 , reqInfoHash :: Hash -- ^ Hash of info part of the torrent. 48 , reqInfoHash :: InfoHash -- ^ Hash of info part of the torrent.
50 , reqPeerID :: PeerID -- ^ Id of the peer doing request. () 49 , reqPeerID :: PeerID -- ^ Id of the peer doing request. ()
51 , reqPort :: PortNumber -- ^ Port to listen to for connection from other peers. 50 , reqPort :: PortNumber -- ^ Port to listen to for connection from other peers.
52 , reqUploaded :: Int -- ^ # of bytes that the peer has uploaded in the swarm. 51 , reqUploaded :: Int -- ^ # of bytes that the peer has uploaded in the swarm.
@@ -155,7 +154,7 @@ instance URLEncode TRequest where
155 154
156encodeRequest :: TRequest -> URI 155encodeRequest :: TRequest -> URI
157encodeRequest req = URL.urlEncode req `addToURI` reqAnnounce req 156encodeRequest req = URL.urlEncode req `addToURI` reqAnnounce req
158 `addHash` BC.unpack (reqInfoHash req) 157 `addHash` BC.unpack (getInfoHash (reqInfoHash req))
159 where 158 where
160 addHash :: URI -> String -> URI 159 addHash :: URI -> String -> URI
161 addHash uri s = uri { uriQuery = uriQuery uri ++ "&info_hash=" ++ rfc1738Encode s } 160 addHash uri s = uri { uriQuery = uriQuery uri ++ "&info_hash=" ++ rfc1738Encode s }
@@ -176,7 +175,7 @@ encodeRequest req = URL.urlEncode req `addToURI` reqAnnounce req
176defaultPorts :: [PortNumber] 175defaultPorts :: [PortNumber]
177defaultPorts = [6881..6889] 176defaultPorts = [6881..6889]
178 177
179defaultRequest :: URI -> Hash -> PeerID -> TRequest 178defaultRequest :: URI -> InfoHash -> PeerID -> TRequest
180defaultRequest announce hash pid = 179defaultRequest announce hash pid =
181 TRequest { 180 TRequest {
182 reqAnnounce = announce 181 reqAnnounce = announce