--- /dev/null
+{-# LANGUAGE OverloadedStrings #-}
+module FuncTorrent.Tracker.Types
+ ( TrackerProtocol(..)
+ , TrackerResponse(..)
+ , TrackerEventState(..)
+ , TState(..)
+ , IP
+ , Port
+ ) where
+
+import Control.Concurrent.MVar (MVar)
+
+import FuncTorrent.Peer (Peer(..))
+
+type IP = String
+type Port = Integer
+
+data TrackerProtocol = Http
+ | Udp
+ | UnknownProtocol
+ deriving (Show)
+
+data TrackerEventState = None
+ | Started
+ | Stopped
+ | Completed
+ deriving (Show, Eq)
+
+data TState = TState {
+ uploaded :: MVar Integer
+ , downloaded :: MVar Integer
+ , left :: Integer
+ , currentState :: TrackerEventState
+ , connectedPeers :: MVar [Peer]
+ }
+
+-- | Tracker response
+data TrackerResponse = TrackerResponse {
+ interval :: Integer
+ , peers :: [Peer]
+ , complete :: Maybe Integer
+ , incomplete :: Maybe Integer
+ } deriving (Show, Eq)