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/.
Vadim Yanitskiy gerrit-no-reply at lists.osmocom.orgVadim Yanitskiy has uploaded this change for review. ( 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(-)
git pull ssh://gerrit.osmocom.org:29418/mncc-python refs/changes/53/11153/1
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: newchange
Gerrit-Change-Id: If6c3ca37a83db1d4ae75796f7be687601b159136
Gerrit-Change-Number: 11153
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180929/7bc4f79e/attachment.htm>