diff options
Diffstat (limited to 'src/Network/BitTorrent/Exchange/Message/Extended.hs')
-rw-r--r-- | src/Network/BitTorrent/Exchange/Message/Extended.hs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/Network/BitTorrent/Exchange/Message/Extended.hs b/src/Network/BitTorrent/Exchange/Message/Extended.hs new file mode 100644 index 00000000..5d26b582 --- /dev/null +++ b/src/Network/BitTorrent/Exchange/Message/Extended.hs | |||
@@ -0,0 +1,51 @@ | |||
1 | -- | | ||
2 | -- Copyright : (c) Sam Truzjan 2013 | ||
3 | -- License : BSD3 | ||
4 | -- Maintainer : pxqr.sta@gmail.com | ||
5 | -- Stability : experimental | ||
6 | -- Portability : portable | ||
7 | -- | ||
8 | -- For more info see <http://www.bittorrent.org/beps/bep_0010.html> | ||
9 | -- | ||
10 | {-# LANGUAGE DeriveDataTypeable #-} | ||
11 | module Network.BitTorrent.Exchange.Message.Extended | ||
12 | ( | ||
13 | ) where | ||
14 | |||
15 | import Data.BEncode | ||
16 | import Data.IntMap as IM | ||
17 | import Data.Text | ||
18 | import Data.Typeable | ||
19 | import Network | ||
20 | import Network.Socket | ||
21 | |||
22 | import Network.BitTorrent.Core.PeerAddr | ||
23 | |||
24 | |||
25 | type Extension = () | ||
26 | |||
27 | type ExtMap = IntMap Extension | ||
28 | |||
29 | data ExtendedHandshake = H | ||
30 | { extMap :: ExtMap | ||
31 | , port :: Maybe PortNumber | ||
32 | , version :: Maybe Text -- TODO ClientInfo | ||
33 | , yourip :: Maybe SockAddr | ||
34 | -- , ipv6 , ipv4 | ||
35 | |||
36 | -- | The number of outstanding 'Request' messages this | ||
37 | -- client supports without dropping any. | ||
38 | , requestQueueLength :: Maybe Int | ||
39 | } deriving (Show, Typeable) | ||
40 | |||
41 | instance BEncode ExtendedHandshake where | ||
42 | toBEncode H {..} = toDict $ | ||
43 | "p" .=? port | ||
44 | .: endDict | ||
45 | |||
46 | fromBEncode = fromDict $ do | ||
47 | undefined | ||
48 | |||
49 | data ExtendedMessage | ||
50 | = ExtendedHandshake | ||
51 | deriving (Show, Eq) | ||