From 7e289424b784b377210e14672da0f8d0c362bac4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Feb 2023 09:54:28 +0100 Subject: [PATCH] parse octet string fix. enum value not found fix --- asyncsnmplib/mib/utils.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/asyncsnmplib/mib/utils.py b/asyncsnmplib/mib/utils.py index 53b0f83..dfca65a 100644 --- a/asyncsnmplib/mib/utils.py +++ b/asyncsnmplib/mib/utils.py @@ -3,11 +3,21 @@ from .syntax_funs import SYNTAX_FUNS -ENUM_UNKNOWN = 'unknown' +ENUM_UNKNOWN = None FLAGS_SEPERATOR = ',' +def on_octet_string(value: bytes) -> str: + """ + used as a fallback for OCTET STRING when no formatter is found/defined + """ + try: + return value.decode('utf-8') + except Exception: + return + + def on_oid_map(oid: Tuple[int]) -> str: if not isinstance(oid, tuple): # some devices don't follow mib's syntax @@ -23,7 +33,7 @@ def on_value_map(value: int, map_: dict) -> str: return map_.get(value, ENUM_UNKNOWN) -def on_value_map_b(value: str, map_: dict) -> str: +def on_value_map_b(value: bytes, map_: dict) -> str: return FLAGS_SEPERATOR.join( v for k, v in map_.items() if value[k // 8] & (1 << k % 8)) @@ -32,7 +42,7 @@ def on_syntax(syntax: dict, value: Union[int, str]): if syntax['tp'] == 'CUSTOM': return SYNTAX_FUNS[syntax['func']](value) elif syntax['tp'] == 'OCTET STRING': - return value.decode('ascii', 'ignore') + return on_octet_string(value) elif syntax['tp'] == 'OBJECT IDENTIFIER': return on_oid_map(value) elif syntax['tp'] == 'BITS':