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.orgHarald 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>