-- 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.2 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.AtText instance GHC.Classes.Ord Data.Radius.Scalar.AtText instance GHC.Classes.Eq Data.Radius.Scalar.AtText 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.AtInteger instance GHC.Classes.Ord Data.Radius.Scalar.AtInteger instance GHC.Classes.Eq Data.Radius.Scalar.AtInteger 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.Bin128 instance GHC.Classes.Ord Data.Radius.Scalar.Bin128 instance GHC.Classes.Eq Data.Radius.Scalar.Bin128 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 GHC.Show.Show Data.Radius.Packet.Code instance GHC.Classes.Ord Data.Radius.Packet.Code instance GHC.Classes.Eq Data.Radius.Packet.Code instance GHC.Show.Show Data.Radius.Packet.Header instance GHC.Classes.Eq Data.Radius.Packet.Header 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) 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 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) 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 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 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) 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_afzp. Ord a_afzp => TypedNumber a_afzp AtText numbersText :: forall a_afzq. Ord a_afzq => TypedNumberSet a_afzq AtText messageAuthenticator :: forall a_afBm. Ord a_afBm => TypedNumber a_afBm AtString state :: forall a_afBl. Ord a_afBl => TypedNumber a_afBl AtString proxyState :: forall a_afBk. Ord a_afBk => TypedNumber a_afBk AtString userName :: forall a_afBj. Ord a_afBj => TypedNumber a_afBj AtString numbersString :: forall a_afBn. Ord a_afBn => TypedNumberSet a_afBn AtString numbersInteger :: forall a_afEe. Ord a_afEe => TypedNumberSet a_afEe AtInteger numbersIpV4 :: forall a_afEX. Ord a_afEX => TypedNumberSet a_afEX 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)