{-# LANGUAGE DeriveDataTypeable #-}
module Network.RADIUS.Types where
import Data.ByteString.Lazy.Char8 (ByteString)
import Data.Data (Data)
import Data.Word (Word8, Word16, Word32, Word64)
import Data.IP (IPv4, IPv6)
import Data.Int (Int8)
data Header = Header { getPacketType :: PacketType,
getPacketId :: Word8,
getPacketLength :: Word16,
getPacketAuthenticator :: ByteString }
deriving (Show, Eq)
data Packet = Packet { getHeader :: Header,
getPacketAttributes :: [PacketAttribute] }
deriving (Show, Eq)
data PacketType = AccessRequest
| AccessAccept
| AccessReject
| AccountingRequest
| AccountingResponse
| AccessChallenge
| StatusServer
| StatusClient
| UnknownPacketType Int
deriving (Show, Eq)
instance Enum PacketType where
fromEnum AccessRequest = 1
fromEnum AccessAccept = 2
fromEnum AccessReject = 3
fromEnum AccountingRequest = 4
fromEnum AccountingResponse = 5
fromEnum AccessChallenge = 11
fromEnum StatusServer = 12
fromEnum StatusClient = 13
fromEnum (UnknownPacketType x) = x
toEnum 1 = AccessRequest
toEnum 2 = AccessAccept
toEnum 3 = AccessReject
toEnum 4 = AccountingRequest
toEnum 5 = AccountingResponse
toEnum 11 = AccessChallenge
toEnum 12 = StatusServer
toEnum 13 = StatusClient
toEnum x = UnknownPacketType x
data PacketAttribute =
UserNameAttribute { getUserNameAttribute :: ByteString }
| UserPasswordAttribute { getUserPasswordAttribute :: ByteString }
| CHAPPassword { getCHAPIdentity :: Word8,
getCHAPPasswordAttribute :: ByteString }
| NASIPAddress { getNASIPAddress :: IPv4 }
| NASIPv6Address { getNASIPv6Address :: IPv6 }
| NASPortAttribute { getNASPortAttribute :: Word32 }
| ServiceTypeAttribute { getServiceTypeAttribute :: ServiceType }
| FramedProtocolAttribute { getFramedProtocolAttribute :: FramedProtocol }
| FramedIPAddressAttribute { getFramedIPAddressAttribute :: IPv4 }
| FramedIPNetmaskAttribute { getFramedIPNetmaskAttribute :: IPv4 }
| FramedRoutingAttribute { getFramedRoutingAttribute :: FramedRouting }
| FramedInterfaceIdAttribute { getFramedInterfaceIdAttribute :: Word64 }
| FramedIPv6Prefix { getFramedIPv6PrefixLength :: Int8,
getFramedIPv6Prefix :: IPv6 }
| FramedIPv6Route { getFramedIPv6RouteAttribute :: ByteString }
| FramedIPv6Pool { getFramedIPv6PoolAttribute :: ByteString }
| FilterIdAttribute { getFilterIdAttribute :: ByteString }
| FramedMTUAttribute { getFramedMTUAttribute :: Word32 }
| FramedCompressionAttribute { getFramedCompressionAttribute :: FramedCompression }
| LoginIPHostAttribute { getLoginIPHostAttribute :: IPv4 }
| LoginIPv6HostAttribute { getLoginIPv6HostAttribute :: IPv6 }
| LoginServiceAttribute { getLoginServiceAttribute :: LoginService }
| LoginTCPPortAttribute { getLoginTCPPortAttribute :: Word32 }
| ReplyMessageAttribute { getReplyMessageAttribute :: ByteString }
| CallbackNumberAttribute { getCallbackNumberAttribute :: ByteString }
| CallbackIdAttribute { getCallbackIdAttribute :: ByteString }
| FramedRouteAttribute { getFramedRouteAttribute :: ByteString }
| FramedIPXNetworkAttribute { getFramedIPXNetworkAttribute :: Word32 }
| StateAttribute { getStateAttribute :: ByteString }
| ClassAttribute { getClassAttribute :: ByteString }
| VendorSpecificAttribute { getVendorIdAttribute :: Word32,
getVendorSpecificAttribute :: ByteString }
| SessionTimeoutAttribute { getSessionTimeoutAttribute :: Word32 }
| IdleTimeoutAttribute { getIdleTimeoutAttribute :: Word32 }
| TerminationActionAttribute { getTerminationActionAttribute :: TerminationAction }
| CalledStationIdAttribute { getCalledStationIdAttribute :: ByteString }
| CallingStationIdAttribute { getCallingStationIdAttribute :: ByteString }
| NASIdentifierAttribute { getNASIdentifierAttribute :: ByteString }
| ProxyStateAttribute { getProxyStateAttribute :: ByteString }
| LoginLATServiceAttribute { getLoginLATServiceAttribute :: ByteString }
| LoginLATNodeAttribute { getLoginLATNodeAttribute :: ByteString }
| LoginLATGroupAttribute { getLoginLATGroupAttribute :: ByteString }
| FramedAppleTalkLinkAttribute { getFramedAppleTalkLinkAttribute :: Word32 }
| FramedAppleTalkNetworkAttribute { getFramedAppleTalkNetworkAttribute :: Word32 }
| FramedAppleTalkZoneAttribute { getFramedAppleTalkZoneAttribute :: ByteString }
| CHAPChallengeAttribute { getCHAPChallengeAttribute :: ByteString }
| NASPortTypeAttribute { getNASPortTypeAttribute :: NASPortType }
| PortLimitAttribute { getPortLimitAttribute :: Word32 }
| LoginLATPortAttribute { getLoginLATPortAttribute :: ByteString }
| AccountInputGigawordsAttribute { getAccountInputGigawordsAttribute :: Word32 }
| AccountOutputGigawordsAttribute { getAccountOutputGigawordsAttribute :: Word32 }
| EventTimeStampAttribute { getEventTimeStampAttribute :: Word32 }
| ARAPPasswordAttribute { getARAPPasswordAttribute :: ByteString }
| ARAPFeaturesAttribute { getARAPFeaturesAttribute :: ByteString }
| ARAPZoneAccessAttribute { getARAPZoneAccessAttribute :: ARAPZoneAccess }
| ARAPSecurityAttribute { getARAPSecurityAttribute :: Word32 }
| ARAPSecurityDataAttribute { getARAPSecurityDataAttribute :: ByteString }
| PasswordRetryAttribute { getPasswordRetryAttribute :: Word32 }
| PromptAttribute { getPromptAttribute :: Word32 }
| ConnectInfoAttribute { getConnectInfoAttribute :: ByteString }
| ConfigurationTokenAttribute { getConfigurationTokenAttribute :: ByteString }
| EAPMessageAttribute { getEAPMessageAttribute :: ByteString }
| MessageAuthenticatorAttribute { getMessageAuthenticatorAttribute :: ByteString }
| ARAPChallengeResponseAttribute { getARAPChallengeResponseAttribute :: ByteString }
| AcctInterimIntervalAttribute { getAcctInterimIntervalAttribute :: Word32 }
| NASPortIdAttribute { getNASPortIdAttribute :: ByteString }
| FramedPoolAttribute { getFramedPoolAttribute :: ByteString }
| UnknownAttribute { getUnknownType :: Word8,
getUnknownAttribute :: ByteString }
deriving (Show, Eq, Data)
data ServiceType = LoginService
| FramedService
| CallbackLoginService
| CallbackFramedService
| OutboundService
| AdministrativeService
| NASPromptService
| AuthenticateOnlyService
| CallbackNASPrompt
| CallCheckService
| CallbackAdministrativeService
| UnknownServiceType Int
deriving (Show, Eq, Data)
instance Enum ServiceType where
fromEnum LoginService = 1
fromEnum FramedService = 2
fromEnum CallbackLoginService = 3
fromEnum CallbackFramedService = 4
fromEnum OutboundService = 5
fromEnum AdministrativeService = 6
fromEnum NASPromptService = 7
fromEnum AuthenticateOnlyService = 8
fromEnum CallbackNASPrompt = 9
fromEnum CallCheckService = 10
fromEnum CallbackAdministrativeService = 11
fromEnum (UnknownServiceType x) = x
toEnum 1 = LoginService
toEnum 2 = FramedService
toEnum 3 = CallbackLoginService
toEnum 4 = CallbackFramedService
toEnum 5 = OutboundService
toEnum 6 = AdministrativeService
toEnum 7 = NASPromptService
toEnum 8 = AuthenticateOnlyService
toEnum 9 = CallbackNASPrompt
toEnum 10 = CallCheckService
toEnum 11 = CallbackAdministrativeService
toEnum x = UnknownServiceType x
data FramedProtocol = PPPFramedProtocol
| SLIPFramedProtocol
| ARAPFramedProtocol
| GandalfFramedProtocol
| XylogicsFramedProtocol
| X75FramedProtocol
| UnknownFramedProtocol Int
deriving (Show, Eq, Data)
instance Enum FramedProtocol where
fromEnum PPPFramedProtocol = 1
fromEnum SLIPFramedProtocol = 2
fromEnum ARAPFramedProtocol = 3
fromEnum GandalfFramedProtocol = 4
fromEnum XylogicsFramedProtocol = 5
fromEnum X75FramedProtocol = 6
fromEnum (UnknownFramedProtocol x) = x
toEnum 1 = PPPFramedProtocol
toEnum 2 = SLIPFramedProtocol
toEnum 3 = ARAPFramedProtocol
toEnum 4 = GandalfFramedProtocol
toEnum 5 = XylogicsFramedProtocol
toEnum 6 = X75FramedProtocol
toEnum x = UnknownFramedProtocol x
data FramedRouting = NoneFramedRouting
| SendFramedRouting
| ListenFramedRouting
| SendAndListenFramedRouting
| UnknownFramedRouting Int
deriving (Show, Eq, Data)
instance Enum FramedRouting where
fromEnum NoneFramedRouting = 1
fromEnum SendFramedRouting = 2
fromEnum ListenFramedRouting = 3
fromEnum SendAndListenFramedRouting = 4
fromEnum (UnknownFramedRouting x) = x
toEnum 1 = NoneFramedRouting
toEnum 2 = SendFramedRouting
toEnum 3 = ListenFramedRouting
toEnum 4 = SendAndListenFramedRouting
toEnum x = UnknownFramedRouting x
data FramedCompression = NoCompression
| VJTCPIPHeaderCompression
| IPXHeaderCompression
| StacLZSCompression
| UnknownFramedCompression Int
deriving (Show, Eq, Data)
instance Enum FramedCompression where
fromEnum NoCompression = 1
fromEnum VJTCPIPHeaderCompression = 2
fromEnum IPXHeaderCompression = 3
fromEnum StacLZSCompression = 4
fromEnum (UnknownFramedCompression x) = x
toEnum 1 = NoCompression
toEnum 2 = VJTCPIPHeaderCompression
toEnum 3 = IPXHeaderCompression
toEnum 4 = StacLZSCompression
toEnum x = UnknownFramedCompression x
data LoginService = TelnetService
| RloginService
| TCPClearService
| PortMasterService
| LATService
| X25PADService
| X25T3POSService
| UnusedService
| TCPClearQuietService
| UnknownLoginService Int
deriving (Show, Eq, Data)
instance Enum LoginService where
fromEnum TelnetService = 1
fromEnum RloginService = 2
fromEnum TCPClearService = 3
fromEnum PortMasterService = 4
fromEnum LATService = 5
fromEnum X25PADService = 6
fromEnum X25T3POSService = 7
fromEnum UnusedService = 8
fromEnum TCPClearQuietService = 9
fromEnum (UnknownLoginService x) = x
toEnum 1 = TelnetService
toEnum 2 = RloginService
toEnum 3 = TCPClearService
toEnum 4 = PortMasterService
toEnum 5 = LATService
toEnum 6 = X25PADService
toEnum 7 = X25T3POSService
toEnum 8 = UnusedService
toEnum 9 = TCPClearQuietService
toEnum x = UnknownLoginService x
data TerminationAction = DefaultTerminationAction
| RADIUSRequestTerminationAction
| UnknownTerminationAction Int
deriving (Show, Eq, Data)
instance Enum TerminationAction where
fromEnum DefaultTerminationAction = 1
fromEnum RADIUSRequestTerminationAction = 2
fromEnum (UnknownTerminationAction x) = x
toEnum 1 = DefaultTerminationAction
toEnum 2 = RADIUSRequestTerminationAction
toEnum x = UnknownTerminationAction x
data NASPortType = AsyncNASPort
| SyncNASPort
| ISDNSyncPort
| ISDNAsyncV120Port
| ISDNAsyncV110Port
| VirtualNASPort
| PIAFSNASPort
| HDLCClearChannelNASPort
| X25NASPort
| X75NASPort
| G3FaxNASPort
| SDSLNASPort
| ADSLCAPNASPort
| ADSLDMTNASPort
| IDSLNASPort
| EthernetNASPort
| XDSLNASPort
| CableNASPort
| WirelessOtherNASPort
| WirelessIEEE80211NASPort
| UnknownNASPortType Int
deriving (Show, Eq, Data)
instance Enum NASPortType where
fromEnum AsyncNASPort = 1
fromEnum SyncNASPort = 2
fromEnum ISDNSyncPort = 3
fromEnum ISDNAsyncV120Port = 4
fromEnum ISDNAsyncV110Port = 5
fromEnum VirtualNASPort = 6
fromEnum PIAFSNASPort = 7
fromEnum HDLCClearChannelNASPort = 8
fromEnum X25NASPort = 9
fromEnum X75NASPort = 10
fromEnum G3FaxNASPort = 11
fromEnum SDSLNASPort = 12
fromEnum ADSLCAPNASPort = 13
fromEnum ADSLDMTNASPort = 14
fromEnum IDSLNASPort = 15
fromEnum EthernetNASPort = 16
fromEnum XDSLNASPort = 17
fromEnum CableNASPort = 18
fromEnum WirelessOtherNASPort = 19
fromEnum WirelessIEEE80211NASPort = 20
fromEnum (UnknownNASPortType x) = x
toEnum 1 = AsyncNASPort
toEnum 2 = SyncNASPort
toEnum 3 = ISDNSyncPort
toEnum 4 = ISDNAsyncV120Port
toEnum 5 = ISDNAsyncV110Port
toEnum 6 = VirtualNASPort
toEnum 7 = PIAFSNASPort
toEnum 8 = HDLCClearChannelNASPort
toEnum 9 = X25NASPort
toEnum 10 = X75NASPort
toEnum 11 = G3FaxNASPort
toEnum 12 = SDSLNASPort
toEnum 13 = ADSLCAPNASPort
toEnum 14 = ADSLDMTNASPort
toEnum 15 = IDSLNASPort
toEnum 16 = EthernetNASPort
toEnum 17 = XDSLNASPort
toEnum 18 = CableNASPort
toEnum 19 = WirelessOtherNASPort
toEnum 20 = WirelessIEEE80211NASPort
toEnum x = UnknownNASPortType x
data ARAPZoneAccess = DefaultZoneOnlyARAPAccess
| UseZoneFilterInclusivelyARAPAccess
| UseZoneFilterExclusivelyARAPAccess
| UnknownARAPZoneAccess Int
deriving (Show, Eq, Data)
instance Enum ARAPZoneAccess where
toEnum 1 = DefaultZoneOnlyARAPAccess
toEnum 2 = UseZoneFilterInclusivelyARAPAccess
toEnum 4 = UseZoneFilterExclusivelyARAPAccess
toEnum x = UnknownARAPZoneAccess x
fromEnum DefaultZoneOnlyARAPAccess = 1
fromEnum UseZoneFilterInclusivelyARAPAccess = 2
fromEnum UseZoneFilterExclusivelyARAPAccess = 4
fromEnum (UnknownARAPZoneAccess x) = x