diff --git a/mncc.h b/mncc.h index ee8b1d7..1cc38e8 100644 --- a/mncc.h +++ b/mncc.h @@ -280,6 +280,15 @@ enum gsm_mncc_bcap { #define MNCC_F_CCCAP 0x0800 #define MNCC_F_KEYPAD 0x1000 #define MNCC_F_SIGNAL 0x2000 +#define MNCC_F_GCR 0x4000 +#define MNCC_F_HIGHL_COMPAT 0x8000 +#define MNCC_F_LOWL_COMPAT 0x10000 + +/* UPDATEME when adding new MNCC_F_* entries above */ +#define MNCC_F_ALL 0x1ffff + +#define GSM_MAX_LOWL_COMPAT 16 /* (18 with TLV) */ +#define GSM_MAX_HIGHL_COMPAT 3 /* (5 with TLV) */ struct gsm_mncc { /* context based information */ @@ -319,6 +328,20 @@ struct gsm_mncc { struct osmo_gcr_parsed gcr; char sdp[1024]; + + /* Additional information that extends current socket interface version. */ + + /* The content requals of Low Layer compatibility IE, described in 3GPP TS 24.008 §10.5.4.18. */ + struct gsm_mncc_lowl_compat { + uint8_t len; + uint8_t compat[GSM_MAX_LOWL_COMPAT]; + } llc; + + /* The content requals of High Layer compatibility IE, described in 3GPP TS 24.008 §10.5.4.16. */ + struct gsm_mncc_highl_compat { + uint8_t len; + uint8_t compat[GSM_MAX_HIGHL_COMPAT]; + } hlc; }; struct gsm_data_frame { diff --git a/mncc.py b/mncc.py index 9f95a71..f55b6c1 100644 --- a/mncc.py +++ b/mncc.py @@ -188,6 +188,12 @@ 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' @@ -502,6 +508,24 @@ 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_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), +] + class struct_gsm_mncc_clir(Structure): pass @@ -538,6 +562,9 @@ struct_gsm_mncc._fields_ = [ ('lchan_mode', ctypes.c_ubyte), ('gcr', struct_osmo_gcr_parsed), ('sdp', ctypes.c_char * 1024), + ('llc', struct_gsm_mncc_lowl_compat), + ('hlc', struct_gsm_mncc_highl_compat), + ('PADDING_0', ctypes.c_ubyte * 3), ] class struct_gsm_data_frame(Structure): @@ -625,6 +652,7 @@ __all__ = \ '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', @@ -633,10 +661,11 @@ __all__ = \ '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_BEARER_CAP', 'MNCC_F_CALLED', - 'MNCC_F_CALLING', 'MNCC_F_CAUSE', 'MNCC_F_CCCAP', + '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_KEYPAD', 'MNCC_F_PROGRESS', 'MNCC_F_REDIRECTING', + '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', @@ -660,7 +689,8 @@ __all__ = \ '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_number', + '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_osmo_gcr_parsed', 'struct_sockaddr_storage']