summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent.hs')
-rw-r--r--src/Network/BitTorrent.hs43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/Network/BitTorrent.hs b/src/Network/BitTorrent.hs
index c37129cb..8f0f42ce 100644
--- a/src/Network/BitTorrent.hs
+++ b/src/Network/BitTorrent.hs
@@ -7,35 +7,50 @@
7-- 7--
8{-# LANGUAGE RecordWildCards #-} 8{-# LANGUAGE RecordWildCards #-}
9module Network.BitTorrent 9module Network.BitTorrent
10 ( module BT 10 (
11 , module Data.Torrent 11 module Data.Torrent
12 12
13 -- * Tracker 13 -- * Session
14 , ClientSession
15 , newClient
14 16
15 -- * P2P 17 , SwarmSession
16 , ClientSession, newClient 18 , newLeacher, newSeeder
17 , SwarmSession, newLeacher, newSeeder 19
18 , PeerSession 20 -- * Discovery
19 , discover 21 , discover
22
23 -- * Peer to Peer
24 , P2P, PeerSession
25 ( connectedPeerAddr, enabledExtensions
26 , peerBitfield, peerSessionStatus
27 )
28
29 , awaitEvent, signalEvent
20 ) where 30 ) where
21 31
32import Control.Monad
22import Data.IORef 33import Data.IORef
23 34
24import Data.Torrent 35import Data.Torrent
25import Network.BitTorrent.Internal 36import Network.BitTorrent.Internal
26import Network.BitTorrent.Extension as BT 37import Network.BitTorrent.Exchange
27import Network.BitTorrent.Peer as BT 38import Network.BitTorrent.Tracker
28import Network.BitTorrent.Exchange as BT 39
29import Network.BitTorrent.Tracker as BT 40
30 41
31-- discover should hide tracker and DHT communication under the hood 42-- discover should hide tracker and DHT communication under the hood
32-- thus we can obtain unified interface 43-- thus we can obtain unified interface
33 44
34discover :: SwarmSession -> (TSession -> IO a) -> IO a 45discover :: SwarmSession -> P2P () -> IO ()
35discover SwarmSession {..} action = do 46discover swarm @ SwarmSession {..} action = do
36 let conn = TConnection (tAnnounce torrentMeta) (tInfoHash torrentMeta) 47 let conn = TConnection (tAnnounce torrentMeta) (tInfoHash torrentMeta)
37 (clientPeerID clientSession) port 48 (clientPeerID clientSession) port
38 progress <- readIORef (currentProgress clientSession) 49 progress <- readIORef (currentProgress clientSession)
39 withTracker progress conn action 50 withTracker progress conn $ \tses -> do
51 forever $ do
52 addr <- getPeerAddr tses
53 withPeer swarm addr action
54
40 55
41port = 10000 56port = 10000