-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Library for network data structures (ex: ip/udp/tcp headers and helper functions) -- -- This library includes definiations for common headers such as IPv4, -- IPv6, UDP, TCP, etc. Data type/functions for full packets, better -- typeclass setup, and a more agreeable interface with a berkeley -- sockets like API should be coming soon. Also, test cases - this code -- is untested as of yet. @package network-data @version 0.2.0 module Data.Header -- | A class of network headers that assumes a checksum is present. class (Num c, Serialize h) => L3Header h a c | h -> a, a -> h, h -> c getChecksum :: L3Header h a c => h -> c setChecksum :: L3Header h a c => h -> c -> h src :: L3Header h a c => h -> a dst :: L3Header h a c => h -> a zeroChecksum :: L3Header h a c => h -> h computeChecksum :: L3Header h a c => h -> c fillChecksum :: L3Header h a c => h -> h pseudoHeader :: L3Header h a c => h -> ByteString valid :: L3Header h a c => h -> Bool -- | A class of network addresses that assumes there is a -- broadcast concept. class Serialize a => L3Address a h | a -> h, h -> a localBroadcast :: L3Address a h => a -> a globalBroadcast :: L3Address a h => a module Data.CSum csum16 :: ByteString -> CSum data CSum zeroCSum :: CSum instance Typeable CSum instance Eq CSum instance Ord CSum instance Show CSum instance Read CSum instance Bounded CSum instance Num CSum instance Data CSum instance Serialize CSum module Data.TCP data TCPPort data TCPHeader TCPHdr :: TCPPort -> TCPPort -> SeqNumber -> AckNumber -> Int -> Int -> [TCPFlag] -> Int -> CSum -> Int -> TCPHeader srcPort :: TCPHeader -> TCPPort dstPort :: TCPHeader -> TCPPort seqNumber :: TCPHeader -> SeqNumber ackNumber :: TCPHeader -> AckNumber dataOffset :: TCPHeader -> Int res :: TCPHeader -> Int flags :: TCPHeader -> [TCPFlag] windowSize :: TCPHeader -> Int checksum :: TCPHeader -> CSum urgentPtr :: TCPHeader -> Int instance Typeable TCPHeader instance Typeable TCPFlag instance Typeable AckNumber instance Typeable SeqNumber instance Typeable TCPPort instance Eq TCPHeader instance Ord TCPHeader instance Show TCPHeader instance Read TCPHeader instance Data TCPHeader instance Eq TCPFlag instance Ord TCPFlag instance Show TCPFlag instance Read TCPFlag instance Enum TCPFlag instance Data TCPFlag instance Eq AckNumber instance Ord AckNumber instance Show AckNumber instance Read AckNumber instance Num AckNumber instance Bounded AckNumber instance Data AckNumber instance Eq SeqNumber instance Ord SeqNumber instance Show SeqNumber instance Read SeqNumber instance Num SeqNumber instance Bounded SeqNumber instance Data SeqNumber instance Eq TCPPort instance Ord TCPPort instance Show TCPPort instance Read TCPPort instance Num TCPPort instance Bounded TCPPort instance Data TCPPort instance Serialize TCPHeader instance Enum [TCPFlag] instance Serialize AckNumber instance Serialize SeqNumber instance Serialize TCPPort module Data.UDP newtype UDPPort UDPPort :: Word16 -> UDPPort data UDPHeader UDPHdr :: UDPPort -> UDPPort -> Int -> CSum -> UDPHeader srcPort :: UDPHeader -> UDPPort dstPort :: UDPHeader -> UDPPort payloadLength :: UDPHeader -> Int checksum :: UDPHeader -> CSum instance Typeable UDPHeader instance Typeable UDPPort instance Eq UDPHeader instance Ord UDPHeader instance Show UDPHeader instance Read UDPHeader instance Data UDPHeader instance Eq UDPPort instance Ord UDPPort instance Show UDPPort instance Read UDPPort instance Num UDPPort instance Bounded UDPPort instance Data UDPPort instance Serialize UDPHeader instance Serialize UDPPort instance Pretty UDPPort module Data.IPv6 data IPv6 IPv6 :: ByteString -> IPv6 data IPv6Header ipv6 :: GenParser Char st IPv6 instance Typeable IPv6Ext instance Typeable IPv6Header instance Typeable IPv6 instance Eq IPv6Ext instance Ord IPv6Ext instance Show IPv6Ext instance Read IPv6Ext instance Data IPv6Ext instance Eq IPv6Header instance Ord IPv6Header instance Show IPv6Header instance Read IPv6Header instance Data IPv6Header instance Eq IPv6 instance Ord IPv6 instance Show IPv6 instance Read IPv6 instance Data IPv6 instance Pretty IPv6 instance Serialize IPv6Ext instance Serialize IPv6Header instance Serialize IPv6 -- | The Data.IP library exports IPv4 address and header structures. -- -- FIXME: There is currently no support for options fields of the IP -- header. module Data.IP -- | For IPv4 addresses. The internal representation is a bytestring so use -- the pretty print ipv4 function as needed (instead of -- show). data IPv4 IPv4 :: ByteString -> IPv4 -- | This IPv4 header structure lacks support for options. Ints are used -- for most integral data types and the binary instance hands the bit -- packing. -- -- No warning is provided if a value is trunkated when packed! data IPv4Header IPv4Hdr :: Int -> Int -> Int -> Int -> Int -> [IPv4Flag] -> Int -> Int -> Int -> CSum -> IPv4 -> IPv4 -> IPv4Header hdrLength :: IPv4Header -> Int version :: IPv4Header -> Int tos :: IPv4Header -> Int totalLength :: IPv4Header -> Int ipID :: IPv4Header -> Int flags :: IPv4Header -> [IPv4Flag] fragmentOffset :: IPv4Header -> Int ttl :: IPv4Header -> Int protocol :: IPv4Header -> Int checksum :: IPv4Header -> CSum source :: IPv4Header -> IPv4 destination :: IPv4Header -> IPv4 -- | Don't fragment, more fragment and reserved flags data IPv4Flag DF :: IPv4Flag MF :: IPv4Flag Res :: IPv4Flag type IP = Either IPv4 IPv6 type IPHeader = Either IPv4Header IPv6Header dummyIPv4Header :: IPv4Header -- | Parsec parser for IPv4 strings (ex: 33.44.255.17) ipv4 :: GenParser Char st IPv4 instance Typeable IPv4Header instance Typeable IPv4Flag instance Typeable IPv4 instance Eq IPv4Header instance Ord IPv4Header instance Show IPv4Header instance Read IPv4Header instance Data IPv4Header instance Eq IPv4Flag instance Ord IPv4Flag instance Show IPv4Flag instance Read IPv4Flag instance Data IPv4Flag instance Eq IPv4 instance Ord IPv4 instance Show IPv4 instance Read IPv4 instance Data IPv4 instance Pretty IPv4 instance L3Address IPv4 IPv4Header instance L3Header IPv4Header IPv4 CSum instance Serialize IPv4Header instance Enum [IPv4Flag] instance Serialize IPv4