diff --git a/src/pyrad3/tools.py b/src/pyrad3/tools.py index 80245e2..9af8465 100644 --- a/src/pyrad3/tools.py +++ b/src/pyrad3/tools.py @@ -224,22 +224,22 @@ def decode_date(num: bytes) -> int: # TODO: type ENCODE_MAP: Dict[Datatype, Callable[[Any], bytes]] = { - Datatype.string: encode_string, - Datatype.octets: encode_octets, - Datatype.ipaddr: encode_ipv4_address, - Datatype.ipv4prefix: encode_ipv4_prefix, - Datatype.ipv6addr: encode_ipv6_address, - Datatype.ipv6prefix: encode_ipv6_prefix, - Datatype.comboip: encode_combo_ip, + Datatype.STRING: encode_string, + Datatype.OCTETS: encode_octets, + Datatype.IPADDR: encode_ipv4_address, + Datatype.IPV4PREFIX: encode_ipv4_prefix, + Datatype.IPV6ADDR: encode_ipv6_address, + Datatype.IPV6PREFIX: encode_ipv6_prefix, + Datatype.COMBOIP: encode_combo_ip, # TODO: length check (8) - Datatype.ifid: encode_octets, - Datatype.abinary: encode_ascend_binary, - Datatype.byte: lambda value: encode_integer(value, "!B"), - Datatype.short: lambda value: encode_integer(value, "!H"), - Datatype.signed: lambda value: encode_integer(value, "!i"), - Datatype.integer: encode_integer, - Datatype.integer64: lambda value: encode_integer(value, "!Q"), - Datatype.date: encode_date, + Datatype.IFID: encode_octets, + Datatype.ABINARY: encode_ascend_binary, + Datatype.BYTE: lambda value: encode_integer(value, "!B"), + Datatype.SHORT: lambda value: encode_integer(value, "!H"), + Datatype.SIGNED: lambda value: encode_integer(value, "!i"), + Datatype.INTEGER: encode_integer, + Datatype.INTEGER64: lambda value: encode_integer(value, "!Q"), + Datatype.DATE: encode_date, } @@ -252,22 +252,22 @@ def encode_attr(datatype: Datatype, value: bytes) -> bytes: DECODE_MAP: Dict[Datatype, Callable[[bytes], Any]] = { - Datatype.string: decode_string, - Datatype.octets: decode_octets, - Datatype.ipaddr: decode_ipv4_address, - Datatype.ipv4prefix: decode_ipv4_prefix, - Datatype.ipv6addr: decode_ipv6_address, - Datatype.ipv6prefix: decode_ipv6_prefix, - Datatype.comboip: decode_combo_ip, + Datatype.STRING: decode_string, + Datatype.OCTETS: decode_octets, + Datatype.IPADDR: decode_ipv4_address, + Datatype.IPV4PREFIX: decode_ipv4_prefix, + Datatype.IPV6ADDR: decode_ipv6_address, + Datatype.IPV6PREFIX: decode_ipv6_prefix, + Datatype.COMBOIP: decode_combo_ip, # TODO: length check (8) - Datatype.ifid: decode_octets, - Datatype.abinary: decode_ascend_binary, - Datatype.byte: decode_integer, - Datatype.short: decode_integer, - Datatype.signed: lambda num: decode_integer(num, True), - Datatype.integer: decode_integer, - Datatype.integer64: decode_integer, - Datatype.date: decode_date, + Datatype.IFID: decode_octets, + Datatype.ABINARY: decode_ascend_binary, + Datatype.BYTE: decode_integer, + Datatype.SHORT: decode_integer, + Datatype.SIGNED: lambda num: decode_integer(num, True), + Datatype.INTEGER: decode_integer, + Datatype.INTEGER64: decode_integer, + Datatype.DATE: decode_date, } diff --git a/src/pyrad3/types.py b/src/pyrad3/types.py index 052ca57..176e62c 100644 --- a/src/pyrad3/types.py +++ b/src/pyrad3/types.py @@ -40,28 +40,28 @@ class Code(IntEnum): class Datatype(Enum): """Possible Datatypes for ATTRIBUTES""" - string = auto() - octets = auto() - date = auto() - abinary = auto() - byte = auto() - short = auto() - integer = auto() - signed = auto() - integer64 = auto() - ipaddr = auto() - ipv4prefix = auto() - ipv6addr = auto() - ipv6prefix = auto() - comboip = auto() - ifid = auto() - ether = auto() - concat = auto() - tlv = auto() - extended = auto() - longextended = auto() - evs = auto() - vsa = auto() + STRING = auto() + OCTETS = auto() + DATE = auto() + ABINARY = auto() + BYTE = auto() + SHORT = auto() + INTEGER = auto() + SIGNED = auto() + INTEGER64 = auto() + IPADDR = auto() + IPV4PREFIX = auto() + IPV6ADDR = auto() + IPV6PREFIX = auto() + COMBOIP = auto() + IFID = auto() + ETHER = auto() + CONCAT = auto() + TLV = auto() + EXTENDED = auto() + LONGEXTENDED = auto() + EVS = auto() + VSA = auto() class Encrypt(IntEnum): diff --git a/src/pyrad3/utils.py b/src/pyrad3/utils.py index 80e7e3f..5588a76 100644 --- a/src/pyrad3/utils.py +++ b/src/pyrad3/utils.py @@ -74,7 +74,7 @@ def decode_attributes(rad_dict: Dictionary, raw_packet: bytes) -> List[Attribute tag = 0 if attr_def is None: name = "Unknown-Attribute" - datatype = Datatype.octets + datatype = Datatype.OCTETS else: name = attr_def.name datatype = attr_def.datatype @@ -119,14 +119,14 @@ def pre_decode_attributes( # pylint: disable=too-many-branches value = packet_body[2:length] try: attr_def = rad_dict.attrindex[key] - if attr_def.datatype == Datatype.vsa: + if attr_def.datatype == Datatype.VSA: tmp_attributes = decode_vsa(rad_dict, key, value, offset) else: - if attr_def.datatype == Datatype.extended: + if attr_def.datatype == Datatype.EXTENDED: key, value, modifier = decode_extended(key, value) - elif attr_def.datatype == Datatype.longextended: + elif attr_def.datatype == Datatype.LONGEXTENDED: key, value, modifier = decode_longextended(key, value) - elif attr_def.datatype == Datatype.concat: + elif attr_def.datatype == Datatype.CONCAT: key, value, modifier = decode_concat(key, value, offset) else: modifier = 2 @@ -140,11 +140,9 @@ def pre_decode_attributes( # pylint: disable=too-many-branches for key, value, offset in tmp_attributes: try: adef = rad_dict.attrindex[key] - if adef.datatype == Datatype.tlv: + if adef.datatype == Datatype.TLV: # TODO: deal with tagged tlvs attributes.extend(decode_tlv(rad_dict, list(key), value, offset)) - elif adef.datatype == Datatype.evs: - attributes.append(decode_evs(key, value, offset)) else: raise ValueError except (ValueError, KeyError): @@ -259,7 +257,7 @@ def decode_tlv( while value: (key, length) = struct.unpack("!BB", value[0:2]) attr_def = rad_dict.attrindex[tuple(key_stack)] - if attr_def.datatype == Datatype.tlv: + if attr_def.datatype == Datatype.TLV: key_stack.append(key) value = value[:length] ret.extend(decode_tlv(rad_dict, key_stack, value[2:], offset + 2))