packages feed

network-data 0.1.0 → 0.2.0

raw patch · 7 files changed

+81/−62 lines, 7 filesdep +cerealdep −binaryPVP ok

version bump matches the API change (PVP)

Dependencies added: cereal

Dependencies removed: binary

API changes (from Hackage documentation)

- Data.CSum: instance Binary CSum
- Data.IP: instance Binary IPv4
- Data.IP: instance Binary IPv4Header
- Data.IPv6: instance Binary IPv6
- Data.IPv6: instance Binary IPv6Ext
- Data.IPv6: instance Binary IPv6Header
- Data.TCP: instance Binary AckNumber
- Data.TCP: instance Binary SeqNumber
- Data.TCP: instance Binary TCPHeader
- Data.TCP: instance Binary TCPPort
- Data.UDP: instance Binary UDPHeader
- Data.UDP: instance Binary UDPPort
+ Data.CSum: instance Data CSum
+ Data.CSum: instance Read CSum
+ Data.CSum: instance Serialize CSum
+ Data.CSum: instance Typeable CSum
+ Data.IP: instance Data IPv4
+ Data.IP: instance Data IPv4Flag
+ Data.IP: instance Data IPv4Header
+ Data.IP: instance Read IPv4Header
+ Data.IP: instance Serialize IPv4
+ Data.IP: instance Serialize IPv4Header
+ Data.IP: instance Typeable IPv4
+ Data.IP: instance Typeable IPv4Flag
+ Data.IP: instance Typeable IPv4Header
+ Data.IP: type IP = Either IPv4 IPv6
+ Data.IP: type IPHeader = Either IPv4Header IPv6Header
+ Data.IPv6: data IPv6Header
+ Data.IPv6: instance Data IPv6
+ Data.IPv6: instance Data IPv6Ext
+ Data.IPv6: instance Data IPv6Header
+ Data.IPv6: instance Read IPv6Ext
+ Data.IPv6: instance Read IPv6Header
+ Data.IPv6: instance Serialize IPv6
+ Data.IPv6: instance Serialize IPv6Ext
+ Data.IPv6: instance Serialize IPv6Header
+ Data.IPv6: instance Typeable IPv6
+ Data.IPv6: instance Typeable IPv6Ext
+ Data.IPv6: instance Typeable IPv6Header
+ Data.TCP: instance Data AckNumber
+ Data.TCP: instance Data SeqNumber
+ Data.TCP: instance Data TCPFlag
+ Data.TCP: instance Data TCPHeader
+ Data.TCP: instance Data TCPPort
+ Data.TCP: instance Read TCPFlag
+ Data.TCP: instance Read TCPHeader
+ Data.TCP: instance Serialize AckNumber
+ Data.TCP: instance Serialize SeqNumber
+ Data.TCP: instance Serialize TCPHeader
+ Data.TCP: instance Serialize TCPPort
+ Data.TCP: instance Typeable AckNumber
+ Data.TCP: instance Typeable SeqNumber
+ Data.TCP: instance Typeable TCPFlag
+ Data.TCP: instance Typeable TCPHeader
+ Data.TCP: instance Typeable TCPPort
+ Data.UDP: instance Data UDPHeader
+ Data.UDP: instance Data UDPPort
+ Data.UDP: instance Pretty UDPPort
+ Data.UDP: instance Read UDPHeader
+ Data.UDP: instance Serialize UDPHeader
+ Data.UDP: instance Serialize UDPPort
+ Data.UDP: instance Typeable UDPHeader
+ Data.UDP: instance Typeable UDPPort
- Data.Header: class (Binary a) => L3Address a h | a -> h, h -> a
+ Data.Header: class Serialize a => L3Address a h | a -> h, h -> a
- Data.Header: class (Num c, Binary h) => L3Header h a c | h -> a, a -> h, h -> c
+ Data.Header: class (Num c, Serialize h) => L3Header h a c | h -> a, a -> h, h -> c
- Data.Header: computeChecksum :: (L3Header h a c) => h -> c
+ Data.Header: computeChecksum :: L3Header h a c => h -> c
- Data.Header: dst :: (L3Header h a c) => h -> a
+ Data.Header: dst :: L3Header h a c => h -> a
- Data.Header: fillChecksum :: (L3Header h a c) => h -> h
+ Data.Header: fillChecksum :: L3Header h a c => h -> h
- Data.Header: getChecksum :: (L3Header h a c) => h -> c
+ Data.Header: getChecksum :: L3Header h a c => h -> c
- Data.Header: globalBroadcast :: (L3Address a h) => a
+ Data.Header: globalBroadcast :: L3Address a h => a
- Data.Header: localBroadcast :: (L3Address a h) => a -> a
+ Data.Header: localBroadcast :: L3Address a h => a -> a
- Data.Header: pseudoHeader :: (L3Header h a c) => h -> ByteString
+ Data.Header: pseudoHeader :: L3Header h a c => h -> ByteString
- Data.Header: setChecksum :: (L3Header h a c) => h -> c -> h
+ Data.Header: setChecksum :: L3Header h a c => h -> c -> h
- Data.Header: src :: (L3Header h a c) => h -> a
+ Data.Header: src :: L3Header h a c => h -> a
- Data.Header: valid :: (L3Header h a c) => h -> Bool
+ Data.Header: valid :: L3Header h a c => h -> Bool
- Data.Header: zeroChecksum :: (L3Header h a c) => h -> h
+ Data.Header: zeroChecksum :: L3Header h a c => h -> h

Files

Data/CSum.hs view
@@ -1,28 +1,30 @@-{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving, DeriveDataTypeable #-} module Data.CSum 	( csum16 	, CSum 	, zeroCSum 	) where -import qualified Data.ByteString.Lazy as B+import qualified Data.ByteString as B import Data.List (foldl') import Control.Monad (sequence)-import Data.Binary-import Data.Binary.Get-import Data.Binary.Put+import Data.Serialize+import Data.Serialize.Get+import Data.Serialize.Put import Data.Bits+import Data.Data+import Data.Word -newtype CSum = CSum Word16 deriving (Eq, Ord, Show, Bounded, Num)+newtype CSum = CSum Word16 deriving (Eq, Ord, Show, Read, Bounded, Num, Data, Typeable)  csum16 :: B.ByteString -> CSum csum16 b = CSum $ foldl' ( (+) . complement) 0 words   where   words :: [Word16]-  words = runGet (sequence $ replicate (fromIntegral $ B.length b `div` 4) getWord16be) b+  (Right words) = runGet (sequence $ replicate (fromIntegral $ B.length b `div` 4) getWord16be) b {-# INLINE csum16 #-} -instance Binary CSum where+instance Serialize CSum where 	put (CSum w) = putWord16be w 	get = getWord16be >>= return . CSum 
Data/Header.hs view
@@ -4,11 +4,11 @@ 	, L3Address (..) 	) where -import Data.Binary (encode, Binary)-import qualified Data.ByteString.Lazy as B+import Data.Serialize (encode, Serialize)+import qualified Data.ByteString as B  -- |A class of network headers that assumes a checksum is present.-class (Num c,Binary h) => L3Header h a c | h -> a, a -> h, h -> c where+class (Num c,Serialize h) => L3Header h a c | h -> a, a -> h, h -> c where 	-- |Returns the checksum from the header 	getChecksum :: h -> c @@ -41,11 +41,11 @@ 	valid h = computeChecksum h == getChecksum h  -- |A class of network addresses that assumes there is a 'broadcast' concept.-class (Binary a) => L3Address a h | a -> h, h -> a where+class (Serialize a) => L3Address a h | a -> h, h -> a where 	localBroadcast :: a -> a 	globalBroadcast :: a -class (Binary h, Binary p) => L4Header h p | h -> p where+class (Serialize h, Serialize p) => L4Header h p | h -> p where 	fixChecksum :: (L3Header l3 a c) => h -> l3 -> h 	srcPort	:: h -> p 	dstPort :: h -> p
Data/IP.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DisambiguateRecordFields, FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE DisambiguateRecordFields, FlexibleInstances, MultiParamTypeClasses, DeriveDataTypeable #-} {- |The Data.IP library exports IPv4 address and header structures.     FIXME:@@ -8,17 +8,20 @@ 	( IPv4(..) 	, IPv4Header(..) 	, IPv4Flag(..)+	, IP+	, IPHeader 	, dummyIPv4Header 	, module Data.IPv6 	, ipv4 	) where -import Control.Monad (sequence, when)-import qualified Data.ByteString.Lazy as B-import Data.Binary-import Data.Binary.Put-import Data.Binary.Get+import Control.Monad (sequence, when, liftM)+import qualified Data.ByteString as B+import Data.Serialize+import Data.Serialize.Put+import Data.Serialize.Get import Data.CSum+import Data.Data import Data.List import Data.IPv6 import Data.Header@@ -28,16 +31,20 @@ import qualified Text.ParserCombinators.Parsec as P import Text.ParserCombinators.Parsec.Prim +type IP = Either IPv4 IPv6++type IPHeader = Either IPv4Header IPv6Header+ -- |For IPv4 addresses.  The internal representation is a bytestring so -- use the pretty print 'ipv4' function as needed (instead of 'show').-data IPv4 = IPv4 B.ByteString deriving (Eq, Ord, Show, Read)+data IPv4 = IPv4 B.ByteString deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary IPv4 where-	put (IPv4 b) = putLazyByteString b-	get = getLazyByteString 4 >>= return . IPv4+instance Serialize IPv4 where+	put (IPv4 b) = putByteString b+	get = liftM IPv4 (getByteString 4)  -- |Don't fragment, more fragment and reserved flags-data IPv4Flag = DF | MF | Res deriving (Eq, Ord, Show, Read)+data IPv4Flag = DF | MF | Res deriving (Eq, Ord, Show, Read, Data, Typeable)  instance Enum [IPv4Flag] where 	fromEnum xs = foldl' (.|.) 0 $ map fromEnum1 xs@@ -64,14 +71,14 @@ 		, checksum		:: CSum 		, source		:: IPv4 		, destination		:: IPv4-	} deriving (Eq, Ord, Show)+	} deriving (Eq, Ord, Show, Read, Data, Typeable)  -- |A dummy header with zeroed fields except version, header length and TTL (255). dummyIPv4Header = IPv4Hdr 5 4 0 0 0 [] 0 255 0 0 ipv4zero ipv4zero  ipv4zero = IPv4 (B.pack [0,0,0,0]) -instance Binary IPv4Header where+instance Serialize IPv4Header where   put (IPv4Hdr ihl ver tos len id flags off ttl prot csum src dst) = do 	pW8 $ (ihl .&. 0xF) .|. (ver `shiftL` 4 .&. 0xF0) 	pW8 tos
Data/IPv6.hs view
@@ -1,16 +1,18 @@-{-# LANGUAGE DisambiguateRecordFields #-}+{-# LANGUAGE DisambiguateRecordFields, DeriveDataTypeable #-}  module Data.IPv6 	( IPv6 (..)+	, IPv6Header 	, ipv6 	) where  import Control.Monad (sequence, when)-import qualified Data.ByteString.Lazy as B-import Data.Binary-import Data.Binary.Put-import Data.Binary.Get+import qualified Data.ByteString as B+import Data.Serialize+import Data.Serialize.Put+import Data.Serialize.Get import Data.Bits+import Data.Data import Data.List (group) import Numeric (showHex, readHex) import Text.PrettyPrint@@ -24,11 +26,11 @@ pW16 = putWord16be . fromIntegral pW32 = putWord32be . fromIntegral -data IPv6 = IPv6 B.ByteString deriving (Eq, Ord, Show, Read)+data IPv6 = IPv6 B.ByteString deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary IPv6 where-	put (IPv6 b) = putLazyByteString b-	get = getLazyByteString 16 >>= return . IPv6+instance Serialize IPv6 where+	put (IPv6 b) = putByteString b+	get = getByteString 16 >>= return . IPv6  data IPv6Header = 	IPv6Hdr { version		:: Int@@ -39,9 +41,9 @@ 		, hopLimit		:: Int 		, source		:: IPv6 		, destination		:: IPv6-	} deriving (Eq, Ord, Show)+	} deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary IPv6Header where+instance Serialize IPv6Header where   put (IPv6Hdr ver tc fl len nh hop src dst) = do 	let verTCFlow = (ver .&. 0xF `shiftL` 28) .|. (tc .&. 0xFF `shiftL` 20) .|. (fl .&. 0xFFFFF) 	pW32 verTCFlow@@ -63,9 +65,9 @@ 	dst <- get 	return $ IPv6Hdr ver tc fl len nh hop src dst -data IPv6Ext = E deriving (Eq, Ord, Show)+data IPv6Ext = E deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary IPv6Ext where+instance Serialize IPv6Ext where 	get = return E 	put _ = return () 
Data/TCP.hs view
@@ -1,34 +1,36 @@-{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, DeriveDataTypeable #-} module Data.TCP 	( TCPPort 	, TCPHeader (..) 	) where -import Data.Binary-import Data.Binary.Get-import Data.Binary.Put+import Data.Serialize+import Data.Serialize.Get+import Data.Serialize.Put import Data.CSum import Data.Bits import Data.List+import Data.Data+import Data.Word -newtype TCPPort = TCPPort Word16 deriving (Eq, Ord, Show, Read, Num, Bounded)+newtype TCPPort = TCPPort Word16 deriving (Eq, Ord, Show, Read, Num, Bounded, Data, Typeable) -instance Binary TCPPort where+instance Serialize TCPPort where 	put (TCPPort p) = putWord16be p 	get = getWord16be >>= return . TCPPort -newtype SeqNumber = SN Word32 deriving (Eq, Ord, Show, Read, Num, Bounded)-newtype AckNumber = AN Word32 deriving (Eq, Ord, Show, Read, Num, Bounded)+newtype SeqNumber = SN Word32 deriving (Eq, Ord, Show, Read, Num, Bounded, Data, Typeable)+newtype AckNumber = AN Word32 deriving (Eq, Ord, Show, Read, Num, Bounded, Data, Typeable) -instance Binary SeqNumber where+instance Serialize SeqNumber where 	put (SN n) = putWord32be n 	get = getWord32be >>= return . SN -instance Binary AckNumber where+instance Serialize AckNumber where 	put (AN n) = putWord32be n 	get = getWord32be >>= return . AN -data TCPFlag = FIN | SYN | RST | PSH | ACK | URG | ECE | CWR deriving (Eq, Ord, Show, Enum)+data TCPFlag = FIN | SYN | RST | PSH | ACK | URG | ECE | CWR deriving (Eq, Ord, Show, Read, Enum, Data, Typeable)  instance Enum [TCPFlag] where 	fromEnum fs = foldl' (+) 0 $ map (bit . fromEnum) fs@@ -45,9 +47,9 @@ 		, windowSize	:: Int 		, checksum	:: CSum 		, urgentPtr	:: Int-	} deriving (Eq, Ord, Show)+	} deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary TCPHeader where+instance Serialize TCPHeader where 	put (TCPHdr s d seq ack dat res fs w c u) = do 		put s 		put d
Data/UDP.hs view
@@ -1,18 +1,24 @@-{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses, DeriveDataTypeable #-} module Data.UDP 	( UDPPort(..) 	, UDPHeader (..) 	) where -import Data.Binary-import Data.Binary.Get-import Data.Binary.Put+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)+newtype UDPPort = UDPPort Word16 deriving (Eq, Ord, Show, Read, Num, Bounded, Data, Typeable) -instance Binary UDPPort where+instance Pretty UDPPort where+	pPrint (UDPPort p) = text (show p)++instance Serialize UDPPort where 	put (UDPPort p) = putWord16be p 	get = getWord16be >>= return . UDPPort @@ -21,9 +27,9 @@ 		, dstPort	:: UDPPort 		, payloadLength :: Int 		, checksum	:: CSum-	} deriving (Eq, Ord, Show)+	} deriving (Eq, Ord, Show, Read, Data, Typeable) -instance Binary UDPHeader where+instance Serialize UDPHeader where 	put (UDPHdr s d l c) = do 		put s 		put d
network-data.cabal view
@@ -1,5 +1,5 @@ name:		network-data-version:	0.1.0+version:	0.2.0 license:	BSD3 license-file:	LICENSE author:		Thomas DuBuisson <thomas.dubuisson@gmail.com>@@ -22,7 +22,7 @@ Library   Build-Depends: base >= 3 && < 5,                    bytestring >= 0.9 && < 1.0,-                   binary >= 0.5.0 && < 0.6.0,+                   cereal >= 0.2 && < 0.4,                    prettyclass >= 1.0.0.0 && < 1.1,                    pretty >= 1.0.0 && < 1.1.0,                    parsec >= 3 && < 4