mncc-python/mncc.py

685 lines
21 KiB
Python

# -*- coding: utf-8 -*-
#
# TARGET arch is: []
# WORD_SIZE is: 8
# POINTER_SIZE is: 8
# LONGDOUBLE_SIZE is: 16
#
import ctypes
class AsDictMixin:
@classmethod
def as_dict(cls, self):
result = {}
if not isinstance(self, AsDictMixin):
# not a structure, assume it's already a python object
return self
if not hasattr(cls, "_fields_"):
return result
# sys.version_info >= (3, 5)
# for (field, *_) in cls._fields_: # noqa
for field_tuple in cls._fields_: # noqa
field = field_tuple[0]
if field.startswith('PADDING_'):
continue
value = getattr(self, field)
type_ = type(value)
if hasattr(value, "_length_") and hasattr(value, "_type_"):
# array
if not hasattr(type_, "as_dict"):
value = [v for v in value]
else:
type_ = type_._type_
value = [type_.as_dict(v) for v in value]
elif hasattr(value, "contents") and hasattr(value, "_type_"):
# pointer
try:
if not hasattr(type_, "as_dict"):
value = value.contents
else:
type_ = type_._type_
value = type_.as_dict(value.contents)
except ValueError:
# nullptr
value = None
elif isinstance(value, AsDictMixin):
# other structure
value = type_.as_dict(value)
result[field] = value
return result
class Structure(ctypes.Structure, AsDictMixin):
def __init__(self, *args, **kwds):
# We don't want to use positional arguments fill PADDING_* fields
args = dict(zip(self.__class__._field_names_(), args))
args.update(kwds)
super(Structure, self).__init__(**args)
@classmethod
def _field_names_(cls):
if hasattr(cls, '_fields_'):
return (f[0] for f in cls._fields_ if not f[0].startswith('PADDING'))
else:
return ()
@classmethod
def get_type(cls, field):
for f in cls._fields_:
if f[0] == field:
return f[1]
return None
@classmethod
def bind(cls, bound_fields):
fields = {}
for name, type_ in cls._fields_:
if hasattr(type_, "restype"):
if name in bound_fields:
if bound_fields[name] is None:
fields[name] = type_()
else:
# use a closure to capture the callback from the loop scope
fields[name] = (
type_((lambda callback: lambda *args: callback(*args))(
bound_fields[name]))
)
del bound_fields[name]
else:
# default callback implementation (does nothing)
try:
default_ = type_(0).restype().value
except TypeError:
default_ = None
fields[name] = type_((
lambda default_: lambda *args: default_)(default_))
else:
# not a callback function, use default initialization
if name in bound_fields:
fields[name] = bound_fields[name]
del bound_fields[name]
else:
fields[name] = type_()
if len(bound_fields) != 0:
raise ValueError(
"Cannot bind the following unknown callback(s) {}.{}".format(
cls.__name__, bound_fields.keys()
))
return cls(**fields)
class Union(ctypes.Union, AsDictMixin):
pass
GSM_MAX_FACILITY = 128 # macro
GSM_MAX_SSVERSION = 128 # macro
GSM_MAX_USERUSER = 128 # macro
MNCC_SETUP_REQ = 0x0101 # macro
MNCC_SETUP_IND = 0x0102 # macro
MNCC_SETUP_RSP = 0x0103 # macro
MNCC_SETUP_CNF = 0x0104 # macro
MNCC_SETUP_COMPL_REQ = 0x0105 # macro
MNCC_SETUP_COMPL_IND = 0x0106 # macro
MNCC_CALL_CONF_IND = 0x0107 # macro
MNCC_CALL_PROC_REQ = 0x0108 # macro
MNCC_PROGRESS_REQ = 0x0109 # macro
MNCC_ALERT_REQ = 0x010a # macro
MNCC_ALERT_IND = 0x010b # macro
MNCC_NOTIFY_REQ = 0x010c # macro
MNCC_NOTIFY_IND = 0x010d # macro
MNCC_DISC_REQ = 0x010e # macro
MNCC_DISC_IND = 0x010f # macro
MNCC_REL_REQ = 0x0110 # macro
MNCC_REL_IND = 0x0111 # macro
MNCC_REL_CNF = 0x0112 # macro
MNCC_FACILITY_REQ = 0x0113 # macro
MNCC_FACILITY_IND = 0x0114 # macro
MNCC_START_DTMF_IND = 0x0115 # macro
MNCC_START_DTMF_RSP = 0x0116 # macro
MNCC_START_DTMF_REJ = 0x0117 # macro
MNCC_STOP_DTMF_IND = 0x0118 # macro
MNCC_STOP_DTMF_RSP = 0x0119 # macro
MNCC_MODIFY_REQ = 0x011a # macro
MNCC_MODIFY_IND = 0x011b # macro
MNCC_MODIFY_RSP = 0x011c # macro
MNCC_MODIFY_CNF = 0x011d # macro
MNCC_MODIFY_REJ = 0x011e # macro
MNCC_HOLD_IND = 0x011f # macro
MNCC_HOLD_CNF = 0x0120 # macro
MNCC_HOLD_REJ = 0x0121 # macro
MNCC_RETRIEVE_IND = 0x0122 # macro
MNCC_RETRIEVE_CNF = 0x0123 # macro
MNCC_RETRIEVE_REJ = 0x0124 # macro
MNCC_USERINFO_REQ = 0x0125 # macro
MNCC_USERINFO_IND = 0x0126 # macro
MNCC_REJ_REQ = 0x0127 # macro
MNCC_REJ_IND = 0x0128 # macro
MNCC_BRIDGE = 0x0200 # macro
MNCC_FRAME_RECV = 0x0201 # macro
MNCC_FRAME_DROP = 0x0202 # macro
MNCC_LCHAN_MODIFY = 0x0203 # macro
MNCC_RTP_CREATE = 0x0204 # macro
MNCC_RTP_CONNECT = 0x0205 # macro
MNCC_RTP_FREE = 0x0206 # macro
GSM_TCHF_FRAME = 0x0300 # macro
GSM_TCHF_FRAME_EFR = 0x0301 # macro
GSM_TCHH_FRAME = 0x0302 # macro
GSM_TCH_FRAME_AMR = 0x0303 # macro
GSM_BAD_FRAME = 0x03ff # macro
MNCC_SOCKET_HELLO = 0x0400 # macro
MNCC_F_BEARER_CAP = 0x0001 # macro
MNCC_F_CALLED = 0x0002 # macro
MNCC_F_CALLING = 0x0004 # macro
MNCC_F_REDIRECTING = 0x0008 # macro
MNCC_F_CONNECTED = 0x0010 # macro
MNCC_F_CAUSE = 0x0020 # macro
MNCC_F_USERUSER = 0x0040 # macro
MNCC_F_PROGRESS = 0x0080 # macro
MNCC_F_EMERGENCY = 0x0100 # macro
MNCC_F_FACILITY = 0x0200 # macro
MNCC_F_SSVERSION = 0x0400 # macro
MNCC_F_CCCAP = 0x0800 # macro
MNCC_F_KEYPAD = 0x1000 # macro
MNCC_F_SIGNAL = 0x2000 # macro
MNCC_F_GCR = 0x4000 # macro
MNCC_F_HIGHL_COMPAT = 0x8000 # macro
MNCC_F_LOWL_COMPAT = 0x10000 # macro
MNCC_F_ALL = 0x1ffff # macro
GSM_MAX_LOWL_COMPAT = 16 # macro
GSM_MAX_HIGHL_COMPAT = 3 # macro
MNCC_SOCK_VERSION = 8 # macro
# values for enumeration 'gsm48_bcap_itcap'
gsm48_bcap_itcap__enumvalues = {
0: 'GSM48_BCAP_ITCAP_SPEECH',
1: 'GSM48_BCAP_ITCAP_UNR_DIG_INF',
2: 'GSM48_BCAP_ITCAP_3k1_AUDIO',
3: 'GSM48_BCAP_ITCAP_FAX_G3',
5: 'GSM48_BCAP_ITCAP_OTHER',
7: 'GSM48_BCAP_ITCAP_RESERVED',
}
GSM48_BCAP_ITCAP_SPEECH = 0
GSM48_BCAP_ITCAP_UNR_DIG_INF = 1
GSM48_BCAP_ITCAP_3k1_AUDIO = 2
GSM48_BCAP_ITCAP_FAX_G3 = 3
GSM48_BCAP_ITCAP_OTHER = 5
GSM48_BCAP_ITCAP_RESERVED = 7
gsm48_bcap_itcap = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_tmod'
gsm48_bcap_tmod__enumvalues = {
0: 'GSM48_BCAP_TMOD_CIRCUIT',
1: 'GSM48_BCAP_TMOD_PACKET',
}
GSM48_BCAP_TMOD_CIRCUIT = 0
GSM48_BCAP_TMOD_PACKET = 1
gsm48_bcap_tmod = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_coding'
gsm48_bcap_coding__enumvalues = {
0: 'GSM48_BCAP_CODING_GSM_STD',
}
GSM48_BCAP_CODING_GSM_STD = 0
gsm48_bcap_coding = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_rrq'
gsm48_bcap_rrq__enumvalues = {
1: 'GSM48_BCAP_RRQ_FR_ONLY',
2: 'GSM48_BCAP_RRQ_DUAL_HR',
3: 'GSM48_BCAP_RRQ_DUAL_FR',
}
GSM48_BCAP_RRQ_FR_ONLY = 1
GSM48_BCAP_RRQ_DUAL_HR = 2
GSM48_BCAP_RRQ_DUAL_FR = 3
gsm48_bcap_rrq = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_ra'
gsm48_bcap_ra__enumvalues = {
0: 'GSM48_BCAP_RA_NONE',
1: 'GSM48_BCAP_RA_V110_X30',
2: 'GSM48_BCAP_RA_X31',
3: 'GSM48_BCAP_RA_OTHER',
}
GSM48_BCAP_RA_NONE = 0
GSM48_BCAP_RA_V110_X30 = 1
GSM48_BCAP_RA_X31 = 2
GSM48_BCAP_RA_OTHER = 3
gsm48_bcap_ra = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_sig_access'
gsm48_bcap_sig_access__enumvalues = {
1: 'GSM48_BCAP_SA_I440_I450',
2: 'GSM48_BCAP_SA_X21',
3: 'GSM48_BCAP_SA_X28_DP_IN',
4: 'GSM48_BCAP_SA_X28_DP_UN',
5: 'GSM48_BCAP_SA_X28_NDP',
6: 'GSM48_BCAP_SA_X32',
}
GSM48_BCAP_SA_I440_I450 = 1
GSM48_BCAP_SA_X21 = 2
GSM48_BCAP_SA_X28_DP_IN = 3
GSM48_BCAP_SA_X28_DP_UN = 4
GSM48_BCAP_SA_X28_NDP = 5
GSM48_BCAP_SA_X32 = 6
gsm48_bcap_sig_access = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_user_rate'
gsm48_bcap_user_rate__enumvalues = {
1: 'GSM48_BCAP_UR_300',
2: 'GSM48_BCAP_UR_1200',
3: 'GSM48_BCAP_UR_2400',
4: 'GSM48_BCAP_UR_4800',
5: 'GSM48_BCAP_UR_9600',
6: 'GSM48_BCAP_UR_12000',
7: 'GSM48_BCAP_UR_1200_75',
}
GSM48_BCAP_UR_300 = 1
GSM48_BCAP_UR_1200 = 2
GSM48_BCAP_UR_2400 = 3
GSM48_BCAP_UR_4800 = 4
GSM48_BCAP_UR_9600 = 5
GSM48_BCAP_UR_12000 = 6
GSM48_BCAP_UR_1200_75 = 7
gsm48_bcap_user_rate = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_parity'
gsm48_bcap_parity__enumvalues = {
0: 'GSM48_BCAP_PAR_ODD',
2: 'GSM48_BCAP_PAR_EVEN',
3: 'GSM48_BCAP_PAR_NONE',
4: 'GSM48_BCAP_PAR_ZERO',
5: 'GSM48_BCAP_PAR_ONE',
}
GSM48_BCAP_PAR_ODD = 0
GSM48_BCAP_PAR_EVEN = 2
GSM48_BCAP_PAR_NONE = 3
GSM48_BCAP_PAR_ZERO = 4
GSM48_BCAP_PAR_ONE = 5
gsm48_bcap_parity = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_interm_rate'
gsm48_bcap_interm_rate__enumvalues = {
2: 'GSM48_BCAP_IR_8k',
3: 'GSM48_BCAP_IR_16k',
}
GSM48_BCAP_IR_8k = 2
GSM48_BCAP_IR_16k = 3
gsm48_bcap_interm_rate = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_transp'
gsm48_bcap_transp__enumvalues = {
0: 'GSM48_BCAP_TR_TRANSP',
1: 'GSM48_BCAP_TR_RLP',
2: 'GSM48_BCAP_TR_TR_PREF',
3: 'GSM48_BCAP_TR_RLP_PREF',
}
GSM48_BCAP_TR_TRANSP = 0
GSM48_BCAP_TR_RLP = 1
GSM48_BCAP_TR_TR_PREF = 2
GSM48_BCAP_TR_RLP_PREF = 3
gsm48_bcap_transp = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_modem_type'
gsm48_bcap_modem_type__enumvalues = {
0: 'GSM48_BCAP_MT_NONE',
1: 'GSM48_BCAP_MT_V21',
2: 'GSM48_BCAP_MT_V22',
3: 'GSM48_BCAP_MT_V22bis',
4: 'GSM48_BCAP_MT_V23',
5: 'GSM48_BCAP_MT_V26ter',
6: 'GSM48_BCAP_MT_V32',
7: 'GSM48_BCAP_MT_UNDEF',
8: 'GSM48_BCAP_MT_AUTO_1',
}
GSM48_BCAP_MT_NONE = 0
GSM48_BCAP_MT_V21 = 1
GSM48_BCAP_MT_V22 = 2
GSM48_BCAP_MT_V22bis = 3
GSM48_BCAP_MT_V23 = 4
GSM48_BCAP_MT_V26ter = 5
GSM48_BCAP_MT_V32 = 6
GSM48_BCAP_MT_UNDEF = 7
GSM48_BCAP_MT_AUTO_1 = 8
gsm48_bcap_modem_type = ctypes.c_uint32 # enum
# values for enumeration 'gsm48_bcap_speech_ver'
gsm48_bcap_speech_ver__enumvalues = {
0: 'GSM48_BCAP_SV_FR',
1: 'GSM48_BCAP_SV_HR',
2: 'GSM48_BCAP_SV_EFR',
4: 'GSM48_BCAP_SV_AMR_F',
5: 'GSM48_BCAP_SV_AMR_H',
6: 'GSM48_BCAP_SV_AMR_OFW',
7: 'GSM48_BCAP_SV_AMR_OHW',
8: 'GSM48_BCAP_SV_AMR_FW',
11: 'GSM48_BCAP_SV_AMR_OH',
}
GSM48_BCAP_SV_FR = 0
GSM48_BCAP_SV_HR = 1
GSM48_BCAP_SV_EFR = 2
GSM48_BCAP_SV_AMR_F = 4
GSM48_BCAP_SV_AMR_H = 5
GSM48_BCAP_SV_AMR_OFW = 6
GSM48_BCAP_SV_AMR_OHW = 7
GSM48_BCAP_SV_AMR_FW = 8
GSM48_BCAP_SV_AMR_OH = 11
gsm48_bcap_speech_ver = ctypes.c_uint32 # enum
class struct_gsm_mncc_bearer_cap(Structure):
pass
class struct_gsm_mncc_bearer_cap_data(Structure):
pass
struct_gsm_mncc_bearer_cap_data._pack_ = 1 # source:False
struct_gsm_mncc_bearer_cap_data._fields_ = [
('rate_adaption', gsm48_bcap_ra),
('sig_access', gsm48_bcap_sig_access),
('async', ctypes.c_int32),
('nr_stop_bits', ctypes.c_int32),
('nr_data_bits', ctypes.c_int32),
('user_rate', gsm48_bcap_user_rate),
('parity', gsm48_bcap_parity),
('interm_rate', gsm48_bcap_interm_rate),
('transp', gsm48_bcap_transp),
('modem_type', gsm48_bcap_modem_type),
]
struct_gsm_mncc_bearer_cap._pack_ = 1 # source:False
struct_gsm_mncc_bearer_cap._fields_ = [
('transfer', ctypes.c_int32),
('mode', ctypes.c_int32),
('coding', ctypes.c_int32),
('radio', ctypes.c_int32),
('speech_ctm', ctypes.c_int32),
('speech_ver', ctypes.c_int32 * 8),
('data', struct_gsm_mncc_bearer_cap_data),
]
class struct_gsm_mncc_number(Structure):
pass
struct_gsm_mncc_number._pack_ = 1 # source:False
struct_gsm_mncc_number._fields_ = [
('type', ctypes.c_int32),
('plan', ctypes.c_int32),
('present', ctypes.c_int32),
('screen', ctypes.c_int32),
('number', ctypes.c_char * 33),
('PADDING_0', ctypes.c_ubyte * 3),
]
class struct_gsm_mncc_cause(Structure):
pass
struct_gsm_mncc_cause._pack_ = 1 # source:False
struct_gsm_mncc_cause._fields_ = [
('location', ctypes.c_int32),
('coding', ctypes.c_int32),
('rec', ctypes.c_int32),
('rec_val', ctypes.c_int32),
('value', ctypes.c_int32),
('diag_len', ctypes.c_int32),
('diag', ctypes.c_char * 32),
]
class struct_gsm_mncc_useruser(Structure):
pass
struct_gsm_mncc_useruser._pack_ = 1 # source:False
struct_gsm_mncc_useruser._fields_ = [
('proto', ctypes.c_int32),
('info', ctypes.c_char * 129),
('PADDING_0', ctypes.c_ubyte * 3),
]
class struct_gsm_mncc_progress(Structure):
pass
struct_gsm_mncc_progress._pack_ = 1 # source:False
struct_gsm_mncc_progress._fields_ = [
('coding', ctypes.c_int32),
('location', ctypes.c_int32),
('descr', ctypes.c_int32),
]
class struct_gsm_mncc_facility(Structure):
pass
struct_gsm_mncc_facility._pack_ = 1 # source:False
struct_gsm_mncc_facility._fields_ = [
('len', ctypes.c_int32),
('info', ctypes.c_char * 128),
]
class struct_gsm_mncc_ssversion(Structure):
pass
struct_gsm_mncc_ssversion._pack_ = 1 # source:False
struct_gsm_mncc_ssversion._fields_ = [
('len', ctypes.c_int32),
('info', ctypes.c_char * 128),
]
class struct_gsm_mncc_cccap(Structure):
pass
struct_gsm_mncc_cccap._pack_ = 1 # source:False
struct_gsm_mncc_cccap._fields_ = [
('dtmf', ctypes.c_int32),
('pcp', ctypes.c_int32),
]
# values for enumeration 'gsm_mncc_bcap'
gsm_mncc_bcap__enumvalues = {
0: 'GSM_MNCC_BCAP_SPEECH',
1: 'GSM_MNCC_BCAP_UNR_DIG',
2: 'GSM_MNCC_BCAP_AUDIO',
3: 'GSM_MNCC_BCAP_FAX_G3',
5: 'GSM_MNCC_BCAP_OTHER_ITC',
7: 'GSM_MNCC_BCAP_RESERVED',
}
GSM_MNCC_BCAP_SPEECH = 0
GSM_MNCC_BCAP_UNR_DIG = 1
GSM_MNCC_BCAP_AUDIO = 2
GSM_MNCC_BCAP_FAX_G3 = 3
GSM_MNCC_BCAP_OTHER_ITC = 5
GSM_MNCC_BCAP_RESERVED = 7
gsm_mncc_bcap = ctypes.c_uint32 # enum
class struct_gsm_mncc(Structure):
pass
class struct_gsm_mncc_lowl_compat(Structure):
pass
struct_gsm_mncc_lowl_compat._pack_ = 1 # source:False
struct_gsm_mncc_lowl_compat._fields_ = [
('len', ctypes.c_ubyte),
('compat', ctypes.c_ubyte * 16),
]
class struct_gsm_mncc_clir(Structure):
pass
struct_gsm_mncc_clir._pack_ = 1 # source:False
struct_gsm_mncc_clir._fields_ = [
('sup', ctypes.c_int32),
('inv', ctypes.c_int32),
]
class struct_gsm_mncc_highl_compat(Structure):
pass
struct_gsm_mncc_highl_compat._pack_ = 1 # source:False
struct_gsm_mncc_highl_compat._fields_ = [
('len', ctypes.c_ubyte),
('compat', ctypes.c_ubyte * 3),
]
struct_gsm_mncc._pack_ = 1 # source:False
struct_gsm_mncc._fields_ = [
('msg_type', ctypes.c_uint32),
('callref', ctypes.c_uint32),
('fields', ctypes.c_uint32),
('bearer_cap', struct_gsm_mncc_bearer_cap),
('called', struct_gsm_mncc_number),
('calling', struct_gsm_mncc_number),
('redirecting', struct_gsm_mncc_number),
('connected', struct_gsm_mncc_number),
('cause', struct_gsm_mncc_cause),
('progress', struct_gsm_mncc_progress),
('useruser', struct_gsm_mncc_useruser),
('facility', struct_gsm_mncc_facility),
('cccap', struct_gsm_mncc_cccap),
('ssversion', struct_gsm_mncc_ssversion),
('clir', struct_gsm_mncc_clir),
('signal', ctypes.c_int32),
('keypad', ctypes.c_int32),
('more', ctypes.c_int32),
('notify', ctypes.c_int32),
('emergency', ctypes.c_int32),
('imsi', ctypes.c_char * 16),
('lchan_type', ctypes.c_ubyte),
('lchan_mode', ctypes.c_ubyte),
('gcr', ctypes.c_ubyte * 16),
('sdp', ctypes.c_char * 1024),
('llc', struct_gsm_mncc_lowl_compat),
('hlc', struct_gsm_mncc_highl_compat),
('PADDING_0', ctypes.c_ubyte),
]
class struct_gsm_data_frame(Structure):
pass
struct_gsm_data_frame._pack_ = 1 # source:False
struct_gsm_data_frame._fields_ = [
('msg_type', ctypes.c_uint32),
('callref', ctypes.c_uint32),
('data', ctypes.c_ubyte * 0),
]
class struct_gsm_mncc_hello(Structure):
pass
struct_gsm_mncc_hello._pack_ = 1 # source:False
struct_gsm_mncc_hello._fields_ = [
('msg_type', ctypes.c_uint32),
('version', ctypes.c_uint32),
('mncc_size', ctypes.c_uint32),
('data_frame_size', ctypes.c_uint32),
('called_offset', ctypes.c_uint32),
('signal_offset', ctypes.c_uint32),
('emergency_offset', ctypes.c_uint32),
('lchan_type_offset', ctypes.c_uint32),
]
class struct_gsm_mncc_rtp(Structure):
pass
class struct_sockaddr_storage(Structure):
pass
struct_sockaddr_storage._pack_ = 1 # source:False
struct_sockaddr_storage._fields_ = [
('ss_family', ctypes.c_uint16),
('ss_padding', ctypes.c_char * 118),
('__ss_align', ctypes.c_uint64),
]
struct_gsm_mncc_rtp._pack_ = 1 # source:False
struct_gsm_mncc_rtp._fields_ = [
('msg_type', ctypes.c_uint32),
('callref', ctypes.c_uint32),
('addr', struct_sockaddr_storage),
('payload_type', ctypes.c_uint32),
('payload_msg_type', ctypes.c_uint32),
('sdp', ctypes.c_char * 1024),
]
class struct_gsm_mncc_bridge(Structure):
pass
struct_gsm_mncc_bridge._pack_ = 1 # source:False
struct_gsm_mncc_bridge._fields_ = [
('msg_type', ctypes.c_uint32),
('callref', ctypes.c_uint32 * 2),
]
__all__ = \
['GSM48_BCAP_CODING_GSM_STD', 'GSM48_BCAP_IR_16k',
'GSM48_BCAP_IR_8k', 'GSM48_BCAP_ITCAP_3k1_AUDIO',
'GSM48_BCAP_ITCAP_FAX_G3', 'GSM48_BCAP_ITCAP_OTHER',
'GSM48_BCAP_ITCAP_RESERVED', 'GSM48_BCAP_ITCAP_SPEECH',
'GSM48_BCAP_ITCAP_UNR_DIG_INF', 'GSM48_BCAP_MT_AUTO_1',
'GSM48_BCAP_MT_NONE', 'GSM48_BCAP_MT_UNDEF', 'GSM48_BCAP_MT_V21',
'GSM48_BCAP_MT_V22', 'GSM48_BCAP_MT_V22bis', 'GSM48_BCAP_MT_V23',
'GSM48_BCAP_MT_V26ter', 'GSM48_BCAP_MT_V32',
'GSM48_BCAP_PAR_EVEN', 'GSM48_BCAP_PAR_NONE',
'GSM48_BCAP_PAR_ODD', 'GSM48_BCAP_PAR_ONE', 'GSM48_BCAP_PAR_ZERO',
'GSM48_BCAP_RA_NONE', 'GSM48_BCAP_RA_OTHER',
'GSM48_BCAP_RA_V110_X30', 'GSM48_BCAP_RA_X31',
'GSM48_BCAP_RRQ_DUAL_FR', 'GSM48_BCAP_RRQ_DUAL_HR',
'GSM48_BCAP_RRQ_FR_ONLY', 'GSM48_BCAP_SA_I440_I450',
'GSM48_BCAP_SA_X21', 'GSM48_BCAP_SA_X28_DP_IN',
'GSM48_BCAP_SA_X28_DP_UN', 'GSM48_BCAP_SA_X28_NDP',
'GSM48_BCAP_SA_X32', 'GSM48_BCAP_SV_AMR_F',
'GSM48_BCAP_SV_AMR_FW', 'GSM48_BCAP_SV_AMR_H',
'GSM48_BCAP_SV_AMR_OFW', 'GSM48_BCAP_SV_AMR_OH',
'GSM48_BCAP_SV_AMR_OHW', 'GSM48_BCAP_SV_EFR', 'GSM48_BCAP_SV_FR',
'GSM48_BCAP_SV_HR', 'GSM48_BCAP_TMOD_CIRCUIT',
'GSM48_BCAP_TMOD_PACKET', 'GSM48_BCAP_TR_RLP',
'GSM48_BCAP_TR_RLP_PREF', 'GSM48_BCAP_TR_TRANSP',
'GSM48_BCAP_TR_TR_PREF', 'GSM48_BCAP_UR_1200',
'GSM48_BCAP_UR_12000', 'GSM48_BCAP_UR_1200_75',
'GSM48_BCAP_UR_2400', 'GSM48_BCAP_UR_300', 'GSM48_BCAP_UR_4800',
'GSM48_BCAP_UR_9600', 'GSM_BAD_FRAME', 'GSM_MAX_FACILITY',
'GSM_MAX_HIGHL_COMPAT', 'GSM_MAX_LOWL_COMPAT',
'GSM_MAX_SSVERSION', 'GSM_MAX_USERUSER', 'GSM_MNCC_BCAP_AUDIO',
'GSM_MNCC_BCAP_FAX_G3', 'GSM_MNCC_BCAP_OTHER_ITC',
'GSM_MNCC_BCAP_RESERVED', 'GSM_MNCC_BCAP_SPEECH',
'GSM_MNCC_BCAP_UNR_DIG', 'GSM_TCHF_FRAME', 'GSM_TCHF_FRAME_EFR',
'GSM_TCHH_FRAME', 'GSM_TCH_FRAME_AMR', 'MNCC_ALERT_IND',
'MNCC_ALERT_REQ', 'MNCC_BRIDGE', 'MNCC_CALL_CONF_IND',
'MNCC_CALL_PROC_REQ', 'MNCC_DISC_IND', 'MNCC_DISC_REQ',
'MNCC_FACILITY_IND', 'MNCC_FACILITY_REQ', 'MNCC_FRAME_DROP',
'MNCC_FRAME_RECV', 'MNCC_F_ALL', 'MNCC_F_BEARER_CAP',
'MNCC_F_CALLED', 'MNCC_F_CALLING', 'MNCC_F_CAUSE', 'MNCC_F_CCCAP',
'MNCC_F_CONNECTED', 'MNCC_F_EMERGENCY', 'MNCC_F_FACILITY',
'MNCC_F_GCR', 'MNCC_F_HIGHL_COMPAT', 'MNCC_F_KEYPAD',
'MNCC_F_LOWL_COMPAT', 'MNCC_F_PROGRESS', 'MNCC_F_REDIRECTING',
'MNCC_F_SIGNAL', 'MNCC_F_SSVERSION', 'MNCC_F_USERUSER',
'MNCC_HOLD_CNF', 'MNCC_HOLD_IND', 'MNCC_HOLD_REJ',
'MNCC_LCHAN_MODIFY', 'MNCC_MODIFY_CNF', 'MNCC_MODIFY_IND',
'MNCC_MODIFY_REJ', 'MNCC_MODIFY_REQ', 'MNCC_MODIFY_RSP',
'MNCC_NOTIFY_IND', 'MNCC_NOTIFY_REQ', 'MNCC_PROGRESS_REQ',
'MNCC_REJ_IND', 'MNCC_REJ_REQ', 'MNCC_REL_CNF', 'MNCC_REL_IND',
'MNCC_REL_REQ', 'MNCC_RETRIEVE_CNF', 'MNCC_RETRIEVE_IND',
'MNCC_RETRIEVE_REJ', 'MNCC_RTP_CONNECT', 'MNCC_RTP_CREATE',
'MNCC_RTP_FREE', 'MNCC_SETUP_CNF', 'MNCC_SETUP_COMPL_IND',
'MNCC_SETUP_COMPL_REQ', 'MNCC_SETUP_IND', 'MNCC_SETUP_REQ',
'MNCC_SETUP_RSP', 'MNCC_SOCKET_HELLO', 'MNCC_SOCK_VERSION',
'MNCC_START_DTMF_IND', 'MNCC_START_DTMF_REJ',
'MNCC_START_DTMF_RSP', 'MNCC_STOP_DTMF_IND', 'MNCC_STOP_DTMF_RSP',
'MNCC_USERINFO_IND', 'MNCC_USERINFO_REQ', 'gsm48_bcap_coding',
'gsm48_bcap_interm_rate', 'gsm48_bcap_itcap',
'gsm48_bcap_modem_type', 'gsm48_bcap_parity', 'gsm48_bcap_ra',
'gsm48_bcap_rrq', 'gsm48_bcap_sig_access',
'gsm48_bcap_speech_ver', 'gsm48_bcap_tmod', 'gsm48_bcap_transp',
'gsm48_bcap_user_rate', 'gsm_mncc_bcap', 'struct_gsm_data_frame',
'struct_gsm_mncc', 'struct_gsm_mncc_bearer_cap',
'struct_gsm_mncc_bearer_cap_data', 'struct_gsm_mncc_bridge',
'struct_gsm_mncc_cause', 'struct_gsm_mncc_cccap',
'struct_gsm_mncc_clir', 'struct_gsm_mncc_facility',
'struct_gsm_mncc_hello', 'struct_gsm_mncc_highl_compat',
'struct_gsm_mncc_lowl_compat', 'struct_gsm_mncc_number',
'struct_gsm_mncc_progress', 'struct_gsm_mncc_rtp',
'struct_gsm_mncc_ssversion', 'struct_gsm_mncc_useruser',
'struct_sockaddr_storage']