module Data.UDP
( UDPPort(..)
, UDPHeader (..)
) where
import Data.Serialize
import Data.Serialize.Get
import Data.Serialize.Put
import Data.CSum
import Data.Header
import Text.PrettyPrint.HughesPJClass
import Data.Data
import Data.Word
newtype UDPPort = UDPPort Word16 deriving (Eq, Ord, Show, Read, Num, Bounded, Data, Typeable)
instance Pretty UDPPort where
pPrint (UDPPort p) = text (show p)
instance Serialize 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, Read, Data, Typeable)
instance Serialize 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