Change in mncc-python[master]: mncc_sock.py: parse and match MNCC_SOCKET_HELLO message

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sun Sep 30 12:30:37 UTC 2018


Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/11153 )

Change subject: mncc_sock.py: parse and match MNCC_SOCKET_HELLO message
......................................................................

mncc_sock.py: parse and match MNCC_SOCKET_HELLO message

Change-Id: If6c3ca37a83db1d4ae75796f7be687601b159136
---
M mncc_sock.py
1 file changed, 44 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved; Verified



diff --git a/mncc_sock.py b/mncc_sock.py
index 22fe034..34ab361 100644
--- a/mncc_sock.py
+++ b/mncc_sock.py
@@ -4,6 +4,7 @@
 # interface
 #
 # (C) 2015 by Harald Welte <laforge at gnumonks.org>
+# (C) 2018 by Vadim Yanitskiy <axilirator at gmail.com>
 #
 # Licensed under GNU General Public License, Version 2 or at your
 # option, any later version.
@@ -25,6 +26,17 @@
     def __unicode__(self):
         return u'mncc_msg(type=0x%04x, callref=%u, fields=0x%04x)' % (self.msg_type, self.callref, self.fields)
 
+class mncc_hello_msg(mncc.gsm_mncc_hello):
+    def send(self):
+        return buffer(self)[:]
+    def receive(self, bytes):
+        fit = min(len(bytes), ctypes.sizeof(self))
+        ctypes.memmove(ctypes.addressof(self), bytes, fit)
+    def __str__(self):
+        return 'mncc_hello_msg(version=0x%04x)' % (self.version)
+    def __unicode__(self):
+        return u'mncc_hello_msg(version=0x%04x)' % (self.version)
+
 class mncc_rtp_msg(mncc.gsm_mncc_rtp):
     def send(self):
         return buffer(self)[:]
@@ -79,6 +91,9 @@
         if ms.msg_type == mncc.MNCC_RTP_CREATE or ms.msg_type == mncc.MNCC_RTP_CONNECT or ms.msg_type == mncc.MNCC_RTP_FREE:
                ms = mncc_rtp_msg()
                ms.receive(data)
+        elif ms.msg_type == mncc.MNCC_SOCKET_HELLO:
+               ms = mncc_hello_msg()
+               ms.receive(data)
         return ms
 
 class MnccSocket(MnccSocketBase):
@@ -92,9 +107,37 @@
             sys.stderr.write("%s\n" % errmsg)
             sys.exit(1)
 
-        # FIXME: parse the HELLO message
+        # Check the HELLO message
+        self.check_hello()
+
+    def check_hello(self):
+        print('Waiting for HELLO message...')
         msg = self.recv()
 
+        # Match expected message type
+        if msg.msg_type != mncc.MNCC_SOCKET_HELLO:
+            sys.stderr.write('Received an unknown (!= MNCC_SOCKET_HELLO) '
+                'message: %s\n' % msg)
+            sys.exit(1)
+
+        # Match expected protocol version
+        if msg.version != mncc.MNCC_SOCK_VERSION:
+            sys.stderr.write('MNCC protocol version mismatch '
+                '(0x%04x vs 0x%04x)\n' % (msg.version, mncc.MNCC_SOCK_VERSION))
+            sys.exit(1)
+
+        # Match expected message sizes / offsets
+        if (msg.mncc_size != ctypes.sizeof(mncc.gsm_mncc) or
+            msg.data_frame_size != ctypes.sizeof(mncc.gsm_data_frame) or
+            msg.called_offset != mncc.gsm_mncc.called.offset or
+            msg.signal_offset != mncc.gsm_mncc.signal.offset or
+            msg.emergency_offset != mncc.gsm_mncc.emergency.offset or
+            msg.lchan_type_offset != mncc.gsm_mncc.lchan_type.offset):
+                sys.stderr.write('MNCC message alignment mismatch\n')
+                sys.exit(1)
+
+        print('Received %s' % msg)
+
 class MnccSocketServer(object):
     def __init__(self, address = '/tmp/bsc_mncc'):
         os.unlink(address)

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

Gerrit-Project: mncc-python
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: If6c3ca37a83db1d4ae75796f7be687601b159136
Gerrit-Change-Number: 11153
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180930/e43bfd53/attachment.htm>


More information about the gerrit-log mailing list