<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11929">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ctrl: add optional TRAP-skipping parameter to split_combined()<br><br>This allows to easy skip TRAP messages when we do not want to process<br>them (for example when waiting for REPLY to a single command). Update<br>documentation accordingly.<br><br>Change-Id: I51ce207c19a1ca96c3e2af7d5efd64f79b02fbb4<br>---<br>M osmopy/osmo_ipa.py<br>1 file changed, 13 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/python/osmo-python-tests refs/changes/29/11929/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/osmopy/osmo_ipa.py b/osmopy/osmo_ipa.py</span><br><span>index 41865c1..822e166 100755</span><br><span>--- a/osmopy/osmo_ipa.py</span><br><span>+++ b/osmopy/osmo_ipa.py</span><br><span>@@ -2,7 +2,7 @@</span><br><span> # -*- mode: python-mode; py-indent-tabs-mode: nil -*-</span><br><span> """</span><br><span> /*</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 2016 sysmocom s.f.m.c. GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2016-2018 sysmocom s.f.m.c. GmbH</span><br><span>  *</span><br><span>  * All Rights Reserved</span><br><span>  *</span><br><span>@@ -28,7 +28,7 @@</span><br><span>     """</span><br><span>     Stateless IPA protocol multiplexer: add/remove/parse (extended) header</span><br><span>     """</span><br><span style="color: hsl(0, 100%, 40%);">-    version = "0.0.6"</span><br><span style="color: hsl(120, 100%, 40%);">+    version = "0.0.7"</span><br><span>     TCP_PORT_OML = 3002</span><br><span>     TCP_PORT_RSL = 3003</span><br><span>     # OpenBSC extensions: OSMO, MGCP_OLD</span><br><span>@@ -106,18 +106,25 @@</span><br><span>         Strip IPA protocol header correctly removing extension if present</span><br><span>         Returns data length, IPA protocol, extension (or None if not defined for a give protocol) and the data without header</span><br><span>         """</span><br><span style="color: hsl(0, 100%, 40%);">-        if not len(data):</span><br><span style="color: hsl(120, 100%, 40%);">+        if data == None or not len(data):</span><br><span>             return None, None, None, None</span><br><span>         (dlen, proto) = struct.unpack('>HB', data[:3])</span><br><span>         if self.PROTO['OSMO'] == proto or self.PROTO['CCM'] == proto: # there's extension which we have to unpack</span><br><span>             return struct.unpack('>HBB', data[:4]) + (data[4:], ) # length, protocol, extension, data</span><br><span>         return dlen, proto, None, data[3:] # length, protocol, _, data</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def split_combined(self, data):</span><br><span style="color: hsl(120, 100%, 40%);">+    def split_combined(self, data, ignore_traps = False):</span><br><span>         """</span><br><span style="color: hsl(0, 100%, 40%);">-        Split the data which contains multiple concatenated IPA messages into tuple (first, rest) where rest contains remaining messages, first is the single IPA message</span><br><span style="color: hsl(120, 100%, 40%);">+        Split the data which contains multiple concatenated IPA messages into tuple (first, rest) where rest contains</span><br><span style="color: hsl(120, 100%, 40%);">+        remaining messages, first is the single IPA message with. Neither have headers stripped.</span><br><span style="color: hsl(120, 100%, 40%);">+        If ignore_traps parameter is set, than TRAP messages will be discarded.</span><br><span>         """</span><br><span style="color: hsl(0, 100%, 40%);">-        (length, _, _, _) = self.del_header(data)</span><br><span style="color: hsl(120, 100%, 40%);">+        if data == None or len(data) == 0:</span><br><span style="color: hsl(120, 100%, 40%);">+            return None, None</span><br><span style="color: hsl(120, 100%, 40%);">+        (length, _, _, d) = self.del_header(data)</span><br><span style="color: hsl(120, 100%, 40%);">+        if length and ignore_traps:</span><br><span style="color: hsl(120, 100%, 40%);">+            if d[:(length + 3)].decode('utf-8').startswith(self.CTRL_TRAP):</span><br><span style="color: hsl(120, 100%, 40%);">+                return self.split_combined(data[(length + 3):], ignore_traps)</span><br><span>         return data[:(length + 3)], data[(length + 3):]</span><br><span> </span><br><span>     def tag_serial(self, data):</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11929">change 11929</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11929"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: python/osmo-python-tests </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I51ce207c19a1ca96c3e2af7d5efd64f79b02fbb4 </div>
<div style="display:none"> Gerrit-Change-Number: 11929 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>