Win32-dhcp-server-0.3.1: src/System/Win32/DHCP/Types.hs
module System.Win32.DHCP.Types
( ClientType (..)
, DATE_TIME (..)
, FORCE_FLAG (..)
, RESUME_HANDLE
) where
import Import
-- | Microsoft's DHCP server supports DHCP and BOOTP. Both protocols server
-- similar purposes, but DHCP is more widely used. Lease and reservation
-- records contain a flag field indicating which protocol the record is valid
-- for. In most cases this flag will be `Both`, because that is the default
-- behavior.
data ClientType = Unspecified | Dhcp | Bootp | Both | ReservationFlag | None
deriving (Eq)
instance Enum ClientType where
toEnum 0x00 = Unspecified
toEnum 0x01 = Dhcp
toEnum 0x02 = Bootp
toEnum 0x03 = Both
toEnum 0x04 = ReservationFlag
toEnum 0x64 = None
toEnum x = error $ "invalid ClientType: " ++ show x
fromEnum Unspecified = 0x00
fromEnum Dhcp = 0x01
fromEnum Bootp = 0x02
fromEnum Both = 0x03
fromEnum ReservationFlag = 0x04
fromEnum None = 0x64
instance Storable ClientType where
sizeOf _ = sizeOf (undefined :: BYTE)
alignment _ = alignment (undefined :: BYTE)
peek ptr = toEnum . fromIntegral <$> peek (pbyte ptr)
poke ptr ct = poke (pbyte ptr) . fromIntegral . fromEnum $ ct
pbyte :: Ptr ClientType -> Ptr BYTE
pbyte = castPtr
-- | The number of ticks (100-nanosecond increments) since 12:00 midnight,
-- January 1, 1 C.E. in the Gregorian calendar.
--
-- Microsoft does not provide any functions I know of for converting this
-- value into something more convenient to work with.
--
-- > typedef struct _DATE_TIME {
-- > DWORD dwLowDateTime;
-- > DWORD dwHighDateTime;
-- > } DATE_TIME,*PDATE_TIME, *LPDATE_TIME;
data DATE_TIME = DATE_TIME !DWORD !DWORD
instance Storable DATE_TIME where
sizeOf _ = 8
alignment _ = 4
peek ptr = DATE_TIME <$> peekElemOff (pdword ptr) 0
<*> peekElemOff (pdword ptr) 1
poke ptr (DATE_TIME l h) = do
pokeElemOff (pdword ptr) 0 l
pokeElemOff (pdword ptr) 1 h
pdword :: Ptr DATE_TIME -> Ptr DWORD
pdword ptr = castPtr ptr
-- typedef enum _DHCP_FORCE_FLAG {
-- DhcpFullForce,
-- DhcpNoForce
-- } DHCP_FORCE_FLAG, *LPDHCP_FORCE_FLAG;
data FORCE_FLAG = FullForce | NoForce
deriving (Enum)
type RESUME_HANDLE = DWORD