]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Avoid code duplication
authorDimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
Wed, 22 Sep 2021 20:27:50 +0000 (22:27 +0200)
committerDimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
Sat, 26 Feb 2022 15:51:06 +0000 (16:51 +0100)
This fixes a CodeClimate alert.

Signed-off-by: Dimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
trojans/tncc-emulate.py

index d80abe54b665ed49ba27d88ceff0036a9bf0fa63..dd443e0d006cb70232605dd60130c5a56576a53d 100755 (executable)
@@ -94,9 +94,7 @@ MSG_FUNK_PLATFORM = 0x58301
 MSG_FUNK = 0xa4c01
 
 
-# 0013 - Message
-def decode_0013(buf, indent):
-    logging.debug('%scmd 0013 (Message) %d bytes', indent, len(buf))
+def _decode_helper(buf, indent):
     ret = collections.defaultdict(list)
     while (len(buf) >= 12):
         length, cmd, out = decode_packet(buf, indent + "  ")
@@ -104,6 +102,11 @@ def decode_0013(buf, indent):
         ret[cmd].append(out)
     return ret
 
+# 0013 - Message
+def decode_0013(buf, indent):
+    logging.debug('%scmd 0013 (Message) %d bytes', indent, len(buf))
+    return _decode_helper(buf, indent)
+
 
 # 0012 - u32
 def decode_0012(buf, indent):
@@ -116,23 +119,13 @@ def decode_0016(buf, indent):
     logging.debug('%scmd 0016 (compressed message) %d bytes', indent, len(buf))
     _, compressed = struct.unpack(">I" + str(len(buf) - 4) + "s", buf)
     buf = zlib.decompress(compressed)
-    ret = collections.defaultdict(list)
-    while (len(buf) >= 12):
-        length, cmd, out = decode_packet(buf, indent + "  ")
-        buf = buf[length:]
-        ret[cmd].append(out)
-    return ret
+    return _decode_helper(buf, indent)
 
 
 # 0ce4 - encapsulation
 def decode_0ce4(buf, indent):
     logging.debug('%scmd 0ce4 (encapsulation) %d bytes', indent, len(buf))
-    ret = collections.defaultdict(list)
-    while (len(buf) >= 12):
-        length, cmd, out = decode_packet(buf, indent + "  ")
-        buf = buf[length:]
-        ret[cmd].append(out)
-    return ret
+    return _decode_helper(buf, indent)
 
 
 # 0ce5 - string without hex prefixer
@@ -193,24 +186,20 @@ def decode_packet(buf, indent=""):
     if length % 4:
         length += 4 - (length % 4)
 
-    if cmd == 0x0013:
-        data = decode_0013(data, indent)
-    elif cmd == 0x0012:
-        data = decode_0012(data, indent)
-    elif cmd == 0x0016:
-        data = decode_0016(data, indent)
-    elif cmd == 0x0ce4:
-        data = decode_0ce4(data, indent)
-    elif cmd == 0x0ce5:
-        data = decode_0ce5(data, indent)
-    elif cmd == 0x0ce7:
-        data = decode_0ce7(data, indent)
-    elif cmd == 0x0cf0:
-        data = decode_0cf0(data, indent)
-    elif cmd == 0x0cf1:
-        data = decode_0cf1(data, indent)
-    elif cmd == 0x0cf3:
-        data = decode_0cf3(data, indent)
+    decode_function = {
+        0x0012: decode_0012,
+        0x0013: decode_0013,
+        0x0016: decode_0016,
+        0x0ce4: decode_0ce4,
+        0x0ce5: decode_0ce5,
+        0x0ce7: decode_0ce7,
+        0x0cf0: decode_0cf0,
+        0x0cf1: decode_0cf1,
+        0x0cf3: decode_0cf3,
+    }
+
+    if cmd in decode_function:
+        data = decode_function[cmd](data, indent)
     else:
         logging.debug('%scmd %04x(%02x:%02x) is unknown, length %d', indent, cmd, _1, _2, length)
         data = None