Max has uploaded this change for review. ( https://gerrit.osmocom.org/11929


Change subject: ctrl: add optional TRAP-skipping parameter to split_combined()
......................................................................

ctrl: add optional TRAP-skipping parameter to split_combined()

This allows to easy skip TRAP messages when we do not want to process
them (for example when waiting for REPLY to a single command). Update
documentation accordingly.

Change-Id: I51ce207c19a1ca96c3e2af7d5efd64f79b02fbb4
---
M osmopy/osmo_ipa.py
1 file changed, 13 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/python/osmo-python-tests 
refs/changes/29/11929/1

diff --git a/osmopy/osmo_ipa.py b/osmopy/osmo_ipa.py
index 41865c1..822e166 100755
--- a/osmopy/osmo_ipa.py
+++ b/osmopy/osmo_ipa.py
@@ -2,7 +2,7 @@
 # -*- mode: python-mode; py-indent-tabs-mode: nil -*-
 """
 /*
- * Copyright (C) 2016 sysmocom s.f.m.c. GmbH
+ * Copyright (C) 2016-2018 sysmocom s.f.m.c. GmbH
  *
  * All Rights Reserved
  *
@@ -28,7 +28,7 @@
     """
     Stateless IPA protocol multiplexer: add/remove/parse (extended) header
     """
-    version = "0.0.6"
+    version = "0.0.7"
     TCP_PORT_OML = 3002
     TCP_PORT_RSL = 3003
     # OpenBSC extensions: OSMO, MGCP_OLD
@@ -106,18 +106,25 @@
         Strip IPA protocol header correctly removing extension if present
         Returns data length, IPA protocol, extension (or None if not defined 
for a give protocol) and the data without header
         """
-        if not len(data):
+        if data == None or not len(data):
             return None, None, None, None
         (dlen, proto) = struct.unpack('>HB', data[:3])
         if self.PROTO['OSMO'] == proto or self.PROTO['CCM'] == proto: # 
there's extension which we have to unpack
             return struct.unpack('>HBB', data[:4]) + (data[4:], ) # length, 
protocol, extension, data
         return dlen, proto, None, data[3:] # length, protocol, _, data

-    def split_combined(self, data):
+    def split_combined(self, data, ignore_traps = False):
         """
-        Split the data which contains multiple concatenated IPA messages into 
tuple (first, rest) where rest contains remaining messages, first is the single 
IPA message
+        Split the data which contains multiple concatenated IPA messages into 
tuple (first, rest) where rest contains
+        remaining messages, first is the single IPA message with. Neither have 
headers stripped.
+        If ignore_traps parameter is set, than TRAP messages will be discarded.
         """
-        (length, _, _, _) = self.del_header(data)
+        if data == None or len(data) == 0:
+            return None, None
+        (length, _, _, d) = self.del_header(data)
+        if length and ignore_traps:
+            if d[:(length + 3)].decode('utf-8').startswith(self.CTRL_TRAP):
+                return self.split_combined(data[(length + 3):], ignore_traps)
         return data[:(length + 3)], data[(length + 3):]

     def tag_serial(self, data):

--
To view, visit https://gerrit.osmocom.org/11929
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: python/osmo-python-tests
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I51ce207c19a1ca96c3e2af7d5efd64f79b02fbb4
Gerrit-Change-Number: 11929
Gerrit-PatchSet: 1
Gerrit-Owner: Max <msur...@sysmocom.de>

Reply via email to