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>