-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | parser and printer for radius protocol packet
--
-- This package provides parser and printer for radius protocol packet.
@package protocol-radius
@version 0.0.1.1
module Data.Radius.Attribute.Number
data Number
UserName :: Number
ProxyState :: Number
State :: Number
MessageAuthenticator :: Number
ReplyMessage :: Number
VendorSpecific :: Number
Other :: !Word8 -> Number
toWord :: Number -> Word8
fromWord :: Word8 -> Number
instance GHC.Read.Read Data.Radius.Attribute.Number.Number
instance GHC.Show.Show Data.Radius.Attribute.Number.Number
instance GHC.Classes.Ord Data.Radius.Attribute.Number.Number
instance GHC.Classes.Eq Data.Radius.Attribute.Number.Number
module Data.Radius.Scalar
newtype AtText
AtText :: String -> AtText
[unAtText] :: AtText -> String
newtype AtString
AtString :: ByteString -> AtString
[unAtString] :: AtString -> ByteString
newtype AtInteger
AtInteger :: Word32 -> AtInteger
[unAtInteger] :: AtInteger -> Word32
newtype AtIpV4
AtIpV4 :: Word32 -> AtIpV4
[unAtIpV4] :: AtIpV4 -> Word32
data Bin128
fromBin128 :: Bin128 -> ByteString
mayBin128 :: ByteString -> Maybe Bin128
word64Bin128 :: Word64 -> Word64 -> Bin128
bin128Zero :: Bin128
instance GHC.Show.Show Data.Radius.Scalar.Bin128
instance GHC.Classes.Ord Data.Radius.Scalar.Bin128
instance GHC.Classes.Eq Data.Radius.Scalar.Bin128
instance GHC.Show.Show Data.Radius.Scalar.AtIpV4
instance GHC.Classes.Ord Data.Radius.Scalar.AtIpV4
instance GHC.Classes.Eq Data.Radius.Scalar.AtIpV4
instance GHC.Show.Show Data.Radius.Scalar.AtInteger
instance GHC.Classes.Ord Data.Radius.Scalar.AtInteger
instance GHC.Classes.Eq Data.Radius.Scalar.AtInteger
instance GHC.Show.Show Data.Radius.Scalar.AtString
instance GHC.Classes.Ord Data.Radius.Scalar.AtString
instance GHC.Classes.Eq Data.Radius.Scalar.AtString
instance GHC.Show.Show Data.Radius.Scalar.AtText
instance GHC.Classes.Ord Data.Radius.Scalar.AtText
instance GHC.Classes.Eq Data.Radius.Scalar.AtText
module Data.Radius.Packet
codeToWord :: Code -> Word8
codeFromWord :: Word8 -> Code
data Code
AccessRequest :: Code
AccessAccept :: Code
AccessReject :: Code
AccessChallenge :: Code
Other :: Word8 -> Code
data Header
Header :: !Code -> !Word8 -> !Word16 -> !Bin128 -> Header
[code] :: Header -> !Code
[pktId] :: Header -> !Word8
[pktLength] :: Header -> !Word16
[authenticator] :: Header -> !Bin128
data Packet a
Packet :: !Header -> !a -> Packet a
[header] :: Packet a -> !Header
[attributes] :: Packet a -> !a
instance Data.Traversable.Traversable Data.Radius.Packet.Packet
instance Data.Foldable.Foldable Data.Radius.Packet.Packet
instance GHC.Base.Functor Data.Radius.Packet.Packet
instance GHC.Show.Show a => GHC.Show.Show (Data.Radius.Packet.Packet a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Radius.Packet.Packet a)
instance GHC.Show.Show Data.Radius.Packet.Header
instance GHC.Classes.Eq Data.Radius.Packet.Header
instance GHC.Show.Show Data.Radius.Packet.Code
instance GHC.Classes.Ord Data.Radius.Packet.Code
instance GHC.Classes.Eq Data.Radius.Packet.Code
module Data.Radius.Attribute.Pair
data NumberAbstract a
Standard :: Number -> NumberAbstract a
Vendors :: a -> NumberAbstract a
data TypedNumber v a
unsafeTypedNumber :: NumberAbstract v -> TypedNumber v a
untypeNumber :: TypedNumber v a -> NumberAbstract v
data Attribute' v
Attribute' :: !(NumberAbstract v) -> !ByteString -> Attribute' v
data Attribute v a
Attribute :: !(TypedNumber v a) -> !a -> Attribute v a
value :: Attribute v a -> a
type TypedNumberSet v a = Set (TypedNumber v a)
-- | Retryable error context with anthor attirbute value type MaybeT
-- m, and parse error context m.
typed :: (Monad m, Functor m, Ord v) => TypedNumberSet v a -> (ByteString -> m b) -> Attribute' v -> MaybeT m (Attribute v b)
class TypedNumberSets v
attributeNumbersText :: TypedNumberSets v => TypedNumberSet v AtText
attributeNumbersString :: TypedNumberSets v => TypedNumberSet v AtString
attributeNumbersInteger :: TypedNumberSets v => TypedNumberSet v AtInteger
attributeNumbersIpV4 :: TypedNumberSets v => TypedNumberSet v AtIpV4
instance (GHC.Show.Show v, GHC.Show.Show a) => GHC.Show.Show (Data.Radius.Attribute.Pair.Attribute v a)
instance (GHC.Classes.Ord v, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.Radius.Attribute.Pair.Attribute v a)
instance (GHC.Classes.Eq v, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.Radius.Attribute.Pair.Attribute v a)
instance GHC.Show.Show v => GHC.Show.Show (Data.Radius.Attribute.Pair.Attribute' v)
instance GHC.Classes.Ord v => GHC.Classes.Ord (Data.Radius.Attribute.Pair.Attribute' v)
instance GHC.Classes.Eq v => GHC.Classes.Eq (Data.Radius.Attribute.Pair.Attribute' v)
instance GHC.Show.Show v => GHC.Show.Show (Data.Radius.Attribute.Pair.TypedNumber v a)
instance GHC.Classes.Ord v => GHC.Classes.Ord (Data.Radius.Attribute.Pair.TypedNumber v a)
instance GHC.Classes.Eq v => GHC.Classes.Eq (Data.Radius.Attribute.Pair.TypedNumber v a)
instance GHC.Show.Show a => GHC.Show.Show (Data.Radius.Attribute.Pair.NumberAbstract a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Radius.Attribute.Pair.NumberAbstract a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Radius.Attribute.Pair.NumberAbstract a)
module Data.Radius.Attribute.TH
unsafeTypedNumberSetTemplate :: String -> Maybe (Q Type) -> Q Type -> [(Q Exp, [Name])] -> Q [Dec]
module Data.Radius.Attribute.Instances
replyMessage :: forall a_ajLS. Ord a_ajLS => TypedNumber a_ajLS AtText
numbersText :: forall a_ajLT. Ord a_ajLT => TypedNumberSet a_ajLT AtText
messageAuthenticator :: forall a_ajZY. Ord a_ajZY => TypedNumber a_ajZY AtString
state :: forall a_ajZX. Ord a_ajZX => TypedNumber a_ajZX AtString
proxyState :: forall a_ajZW. Ord a_ajZW => TypedNumber a_ajZW AtString
userName :: forall a_ajZV. Ord a_ajZV => TypedNumber a_ajZV AtString
numbersString :: forall a_ajZZ. Ord a_ajZZ => TypedNumberSet a_ajZZ AtString
numbersInteger :: forall a_ak23. Ord a_ak23 => TypedNumberSet a_ak23 AtInteger
numbersIpV4 :: forall a_ak2z. Ord a_ak2z => TypedNumberSet a_ak2z AtIpV4
module Data.Radius.Attribute
module Data.Radius.StreamGet.Base
upacket :: Get (Attribute' v) -> Get (Packet [Attribute' v])
packet :: Get a -> Get (Packet a)
header :: Get Header
attribute' :: Get (Attribute' v) -> Get (Attribute' v)
vendorID :: Get Word32
simpleVendorAttribute :: Get (Word8, ByteString)
code :: Get Code
bin128 :: Get Bin128
atText :: Int -> Get AtText
atString :: Int -> Get AtString
atInteger :: Get AtInteger
atIpV4 :: Get AtIpV4
eof :: Get ()
module Data.Radius.StreamGet.Monadic
-- | Type class to generalize typed attribute param
class TypedAttributes a
-- | Get typed attribute from attribute set.
takeTyped' :: (MonadPlus m, TypedAttributes a, Eq v) => Attributes v -> TypedNumber v a -> m (Attribute v a)
-- | Get typed attribute value from attribute set.
takeTyped :: (MonadPlus m, TypedAttributes a, Eq v) => Attributes v -> TypedNumber v a -> m a
-- | Type to express typed attribute set
data Attributes v
-- | Extract typed attributes. For example, use like this:
-- extractAttributes . mapM tellT
extractAttributes :: Monad m => AttributeGetWT v m a -> m (Attributes v)
-- | Decode untyped attribute into monadic context. When typed-value decode
-- error found, either typed context makes sense.
tellT :: (TypedNumberSets v, Ord v) => Attribute' v -> AttributeGetWT v (Either String) ()
type AttributeGetWT v m = AttributeGetWT' v (WriterT (DList (Attribute' v)) m)
attributeGetWT :: m (((((a, AtList v AtIpV4), AtList v AtText), AtList v AtInteger), AtList v AtString), DList (Attribute' v)) -> AttributeGetWT v m a
runAttributeGetWT :: AttributeGetWT v m a -> m (((((a, AtList v AtIpV4), AtList v AtText), AtList v AtInteger), AtList v AtString), DList (Attribute' v))
decodeAsText :: (TypedNumberSets v, Ord v) => Attribute' v -> MaybeT (Either String) (Attribute v AtText)
decodeAsString :: (TypedNumberSets v, Ord v) => Attribute' v -> MaybeT (Either String) (Attribute v AtString)
decodeAsInteger :: (TypedNumberSets v, Ord v) => Attribute' v -> MaybeT (Either String) (Attribute v AtInteger)
decodeAsIpV4 :: (TypedNumberSets v, Ord v) => Attribute' v -> MaybeT (Either String) (Attribute v AtIpV4)
instance Data.Radius.StreamGet.Monadic.TypedAttributes Data.Radius.Scalar.AtText
instance Data.Radius.StreamGet.Monadic.TypedAttributes Data.Radius.Scalar.AtString
instance Data.Radius.StreamGet.Monadic.TypedAttributes Data.Radius.Scalar.AtInteger
instance Data.Radius.StreamGet.Monadic.TypedAttributes Data.Radius.Scalar.AtIpV4
module Data.Radius.StreamGet
module Data.Radius.StreamPut.Base
upacket :: (a -> ByteString -> Put) -> Packet [Attribute' a] -> Put
packet :: (a -> Put) -> Packet a -> Put
header :: Header -> Put
attribute' :: (a -> ByteString -> Put) -> (Attribute' a) -> Put
vendorID :: Word32 -> Put
simpleVendorAttribute :: Word8 -> ByteString -> Put
code :: Code -> Put
bin128 :: Bin128 -> Put
atText :: AtText -> Put
atString :: AtString -> Put
atInteger :: AtInteger -> Put
atIpV4 :: AtIpV4 -> Put
module Data.Radius.StreamPut.Monadic
-- | Context monad type to build attribute list of packet
type AttributePutM v = Writer (DList (Attribute' v))
-- | Extract attribute list from context
extractAttributes :: AttributePutM v a -> [Attribute' v]
-- | Add attribute key and value into monadic context
tellA :: AtValueEncode a => TypedNumber v a -> a -> AttributePutM v ()
class AtValueEncode a
exAttribute :: (a -> Put) -> Attribute v a -> AttributePutM v ()
attribute :: AtValueEncode a => Attribute v a -> AttributePutM v ()
instance Data.Radius.StreamPut.Monadic.AtValueEncode Data.Radius.Scalar.AtText
instance Data.Radius.StreamPut.Monadic.AtValueEncode Data.Radius.Scalar.AtString
instance Data.Radius.StreamPut.Monadic.AtValueEncode Data.Radius.Scalar.AtInteger
instance Data.Radius.StreamPut.Monadic.AtValueEncode Data.Radius.Scalar.AtIpV4
module Data.Radius.StreamPut
module Data.Radius.Implements
-- | Make signatures for response packet. When you don't want to use
-- message authenticator attribute, pass a function to make attributes
-- which doesn't use message authenticator argument.
signPacket :: (a -> ByteString -> Put) -> ByteString -> Bin128 -> (Word16 -> Bin128 -> Header) -> (Bin128 -> [Attribute' a]) -> (Word16, Bin128, Bin128)
signedPacket :: (a -> ByteString -> Put) -> ByteString -> Bin128 -> (Word16 -> Bin128 -> Header) -> (Bin128 -> [Attribute' a]) -> Packet [Attribute' a]
data AuthenticatorError v
-- | No Message-Authenticator attribute
NoMessageAuthenticator :: (Attributes v) -> AuthenticatorError v
-- | Message-Authenticator attribute is not matched
BadMessageAuthenticator :: AuthenticatorError v
-- | More than one Message-Authenticator attribute pairs found
MoreThanOneMessageAuthenticator :: AuthenticatorError v
-- | Radius packet authenticator is not matched
BadAuthenticator :: AuthenticatorError v
-- | Fail to decode attributes, attribute type error etc.
AttributesDecodeError :: String -> AuthenticatorError v
-- | Not request packet is passed to function to check request packet
NotRequestPacket :: Code -> AuthenticatorError v
-- | Not response packet is passed to function to check response packet
NotResponsePacket :: Code -> AuthenticatorError v
checkSignedRequest :: (TypedNumberSets a, Ord a) => (a -> ByteString -> Put) -> ByteString -> Packet [Attribute' a] -> Either (AuthenticatorError a) (Attributes a)
checkSignedResponse :: (TypedNumberSets a, Ord a) => (a -> ByteString -> Put) -> ByteString -> Bin128 -> Packet [Attribute' a] -> Either (AuthenticatorError a) (Attributes a)
instance GHC.Show.Show (Data.Radius.Implements.AuthenticatorError v)