summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Exchange/Message/Extended.hs
blob: 5d26b582f0552345ae2967b9abdee2e2be44839c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
-- |
--   Copyright   :  (c) Sam Truzjan 2013
--   License     :  BSD3
--   Maintainer  :  pxqr.sta@gmail.com
--   Stability   :  experimental
--   Portability :  portable
--
--   For more info see <http://www.bittorrent.org/beps/bep_0010.html>
--
{-# LANGUAGE DeriveDataTypeable #-}
module Network.BitTorrent.Exchange.Message.Extended
       (
       ) where

import Data.BEncode
import Data.IntMap as IM
import Data.Text
import Data.Typeable
import Network
import Network.Socket

import Network.BitTorrent.Core.PeerAddr


type Extension = ()

type ExtMap = IntMap Extension

data ExtendedHandshake = H
  { extMap  :: ExtMap
  , port    :: Maybe PortNumber
  , version :: Maybe Text -- TODO ClientInfo
  , yourip  :: Maybe SockAddr
--  , ipv6 , ipv4

    -- | The number of outstanding 'Request' messages this
    -- client supports without dropping any.
  , requestQueueLength :: Maybe Int
  } deriving (Show, Typeable)

instance BEncode ExtendedHandshake where
  toBEncode H {..} = toDict $
       "p" .=? port
    .: endDict

  fromBEncode = fromDict $ do
    undefined

data ExtendedMessage
  = ExtendedHandshake
    deriving (Show, Eq)