aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-09-29 22:32:57 +0700
committerVadim Yanitskiy <axilirator@gmail.com>2018-09-29 22:33:20 +0700
commitc43f321e6e586a371e547ec23e77ddf0cdb8f3d2 (patch)
tree10fd6280f84bdf25ef3fb91ac9c925a2104d7363
parent8a8b422dcfebbafbfab1ddedf29b56f7da826369 (diff)
mncc_sock.py: distinguish traffic frames
-rw-r--r--mncc_sock.py29
-rwxr-xr-xmncc_test.py4
2 files changed, 33 insertions, 0 deletions
diff --git a/mncc_sock.py b/mncc_sock.py
index 1c4f6be..e71a39a 100644
--- a/mncc_sock.py
+++ b/mncc_sock.py
@@ -26,6 +26,10 @@ class mncc_msg_common:
def is_rtp(self):
return self.msg_type in (mncc.MNCC_RTP_CREATE,
mncc.MNCC_RTP_CONNECT, mncc.MNCC_RTP_FREE)
+ def is_frame(self):
+ return self.msg_type in (mncc.GSM_TCHF_FRAME,
+ mncc.GSM_TCHH_FRAME, mncc.GSM_TCHF_FRAME_EFR,
+ mncc.GSM_TCH_FRAME_AMR, mncc.GSM_BAD_FRAME)
class mncc_msg(mncc.gsm_mncc, mncc_msg_common):
def __str__(self):
@@ -39,6 +43,28 @@ class mncc_hello_msg(mncc.gsm_mncc_hello, mncc_msg_common):
def __unicode__(self):
return u'mncc_hello_msg(version=0x%04x)' % (self.version)
+class mncc_data_frame_msg(mncc.gsm_data_frame, mncc_msg_common):
+ def __str__(self):
+ return 'mncc_data_frame(type=0x%04x, codec=%s, callref=%u)' \
+ % (self.msg_type, self.codec_str(), self.callref)
+ def __unicode__(self):
+ return u'mncc_data_frame(type=0x%04x, codec=%s, callref=%u)' \
+ % (self.msg_type, self.codec_str(), self.callref)
+
+ def codec_str(self):
+ if self.msg_type == mncc.GSM_TCHF_FRAME:
+ return "FR"
+ elif self.msg_type == mncc.GSM_TCHH_FRAME:
+ return "HR"
+ elif self.msg_type == mncc.GSM_TCHF_FRAME_EFR:
+ return "EFR"
+ elif self.msg_type == mncc.GSM_TCH_FRAME_AMR:
+ return "AMR"
+ elif self.msg_type == mncc.GSM_BAD_FRAME:
+ return "(BFI)"
+ else:
+ return "(???)"
+
class mncc_rtp_msg(mncc.gsm_mncc_rtp, mncc_msg_common):
def __str__(self):
return 'mncc_rtp_msg(type=0x%04x, callref=%u, ip=%x, port=%u)' % (self.msg_type, self.callref, self.ip, self.port)
@@ -83,6 +109,9 @@ class MnccSocketBase(object):
if ms.is_rtp():
ms = mncc_rtp_msg()
ms.receive(data)
+ elif ms.is_frame():
+ ms = mncc_data_frame_msg()
+ ms.receive(data)
elif ms.msg_type == mncc.MNCC_SOCKET_HELLO:
ms = mncc_hello_msg()
ms.receive(data)
diff --git a/mncc_test.py b/mncc_test.py
index de35fe6..df66efb 100755
--- a/mncc_test.py
+++ b/mncc_test.py
@@ -35,6 +35,10 @@ class MnccActor(pykka.ThreadingActor):
def mncc_rx_thread(mncc_sock):
while 1:
msg = mncc_sock.recv()
+ if msg.is_frame():
+ print("Dropping traffic frame: %s" % msg)
+ continue
+
print "MnccActor RxMNCC %s, broadcasting to Call FSMs" % msg
# we simply broadcast to all calls
pykka.ActorRegistry.broadcast({'type': 'mncc', 'msg': msg}, GsmCallFsm)