module Data.UDP
( UDPPort(..)
, UDPHeader (..)
) where
import Data.Binary
import Data.Binary.Get
import Data.Binary.Put
import Data.CSum
import Data.Header
newtype UDPPort = UDPPort Word16 deriving (Eq, Ord, Show, Read, Num, Bounded)
instance Binary UDPPort where
put (UDPPort p) = putWord16be p
get = getWord16be >>= return . UDPPort
data UDPHeader =
UDPHdr { srcPort :: UDPPort
, dstPort :: UDPPort
, payloadLength :: Int
, checksum :: CSum
} deriving (Eq, Ord, Show)
instance Binary UDPHeader where
put (UDPHdr s d l c) = do
put s
put d
putWord16be $ fromIntegral l
put c
get = do
s <- get
d <- get
l <- getWord16be >>= return . fromIntegral
c <- get
return $ UDPHdr s d l c