Bearer capability not provided during MO call using mncc-python, which results in GSM IE error (96) invalid mandatory information sent by Network -> MS (mncc-python)
Verified this error by GSMTAP using mncc-python interface OsmocomBB to network Proposed Changes: In case of MO call (_onmncc_setup_req) caller needs to provide bearer_cap speech version Added mncc.bearer_cap in mncc_sock.py based on codecs = GSM48.AllCodecs Added new field mncc.MNCC_F_BEARER_CAP in mncc.MNCC_SETUP_REQ, when call is initiated (MO) from MS -> network Change-Id: If77851b86111d62d82221a886ed2391179080ccachanges/41/2841/1
parent
ce184f83f0
commit
983231a70d
|
@ -14,7 +14,7 @@ import ctypes
|
|||
import pykka
|
||||
|
||||
from fysom import Fysom
|
||||
from mncc_sock import mncc_msg, mncc_number, mncc_rtp_msg, mncc_bridge_msg
|
||||
from mncc_sock import mncc_msg, mncc_number, mncc_rtp_msg, mncc_bridge_msg, mncc_bearer_cap
|
||||
|
||||
Uint32Array2 = mncc.uint32_t * 2
|
||||
|
||||
|
@ -82,9 +82,10 @@ class GsmCallFsm(pykka.ThreadingActor):
|
|||
|
||||
def _onmncc_setup_req(self, e):
|
||||
msg = mncc_msg(msg_type = mncc.MNCC_SETUP_REQ, callref = self.callref,
|
||||
fields = mncc.MNCC_F_CALLED | mncc.MNCC_F_CALLING,
|
||||
fields = mncc.MNCC_F_CALLED | mncc.MNCC_F_CALLING | mncc.MNCC_F_BEARER_CAP,
|
||||
calling = mncc_number(self.calling),
|
||||
called = mncc_number(self.called))
|
||||
called = mncc_number(self.called),
|
||||
bearer_cap = mncc_bearer_cap(self.codecs_permitted))
|
||||
self.mncc_ref.tell({'type': 'send', 'msg': msg})
|
||||
|
||||
def find_matching_codec(self, ms_codecs):
|
||||
|
|
12
mncc_sock.py
12
mncc_sock.py
|
@ -52,6 +52,18 @@ def mncc_number(number, num_type = 0, num_plan = 0, num_present = 1, num_screen
|
|||
plan = num_plan, present = num_present,
|
||||
screen = num_screen)
|
||||
|
||||
def mncc_bearer_cap(codecs_permitted):
|
||||
speech_ver = ctypes.c_int * 8
|
||||
speech_types = speech_ver()
|
||||
index = 0
|
||||
|
||||
for codec in codecs_permitted:
|
||||
speech_types[index] = codec
|
||||
index = index + 1
|
||||
|
||||
speech_types[index] = -1
|
||||
return mncc.gsm_mncc_bearer_cap(coding = 0, speech_ctm=0, radio = 1, speech_ver = speech_types, transfer = 0, mode = 0)
|
||||
|
||||
class MnccSocketBase(object):
|
||||
def send(self, msg):
|
||||
return self.sock.sendall(msg.send())
|
||||
|
|
Loading…
Reference in New Issue