174 lines
7.0 KiB
Erlang
174 lines
7.0 KiB
Erlang
% This Source Code Form is subject to the terms of the Mozilla Public
|
|
% License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
% file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
% (C) 2019 Andrey Velikiy <agreat22@gmail.com>
|
|
% (C) 2019 Fairwaves (edited)
|
|
|
|
-ifndef(GSUP_PROTOCOL).
|
|
-define(GSUP_PROTOCOL, true).
|
|
|
|
-type 'GSUPMessageType'() :: location_upd_req
|
|
| location_upd_err
|
|
| location_upd_res
|
|
| send_auth_info_req
|
|
| send_auth_info_err
|
|
| send_auth_info_res
|
|
| auth_failure_report
|
|
| purge_ms_req
|
|
| purge_ms_err
|
|
| purge_ms_res
|
|
| insert_sub_data_req
|
|
| insert_sub_data_err
|
|
| insert_sub_data_res
|
|
| delete_sub_data_req
|
|
| delete_sub_data_err
|
|
| delete_sub_data_res
|
|
| location_cancellation_req
|
|
| location_cancellation_err
|
|
| location_cancellation_res
|
|
| ss_req
|
|
| ss_err
|
|
| ss_res
|
|
| mo_forward_req
|
|
| mo_forward_err
|
|
| mo_forward_res
|
|
| mt_forward_req
|
|
| mt_forward_err
|
|
| mt_forward_res
|
|
| ready_for_sm_req
|
|
| ready_for_sm_err
|
|
| ready_for_sm_res
|
|
| check_imei_req
|
|
| check_imei_err
|
|
| check_imei_res.
|
|
|
|
-type 'GSUPMessage'() :: #{
|
|
message_type := 'GSUPMessageType'(),
|
|
imsi := binary(),
|
|
cause => integer(),
|
|
auth_tuples => [#{
|
|
rand := binary(),
|
|
sres := binary(),
|
|
kc := binary(),
|
|
ik => binary(),
|
|
ck => binary(),
|
|
autn => binary(),
|
|
res => binary()
|
|
}] | [],
|
|
pdp_info_complete => true,
|
|
pdp_info_list => [#{
|
|
pdp_context_id => integer(),
|
|
pdp_type => integer(),
|
|
access_point_name => binary(),
|
|
quality_of_service => binary(),
|
|
pdp_charging => integer()
|
|
}],
|
|
cancellation_type => integer(),
|
|
freeze_p_tmsi => true,
|
|
msisdn => binary(),
|
|
hlr_number => binary(),
|
|
pdp_context_id => [integer()],
|
|
pdp_charging => integer(),
|
|
rand => binary(),
|
|
auts => binary(),
|
|
cn_domain => integer(),
|
|
session_id => integer(),
|
|
session_state => integer(),
|
|
ss_info => binary(),
|
|
sm_rp_mr => integer(),
|
|
sm_rp_da => binary(),
|
|
sm_rp_oa => binary(),
|
|
sm_rp_ui => binary(),
|
|
sm_rp_cause => integer(),
|
|
sm_rp_mms => integer(),
|
|
sm_alert_reason => integer(),
|
|
imei => binary(),
|
|
imei_check_result => integer()
|
|
}.
|
|
|
|
-define(SESSION_STATE_BEGIN, 1).
|
|
-define(SESSION_STATE_CONTINUE, 2).
|
|
-define(SESSION_STATE_END, 3).
|
|
|
|
-define(IMSI, 16#01).
|
|
-define(CAUSE, 16#02).
|
|
-define(AUTH_TUPLE, 16#03).
|
|
-define(PDP_INFO_COMPLETE, 16#04).
|
|
-define(PDP_INFO, 16#05).
|
|
-define(CANCELLATION_TYPE, 16#06).
|
|
-define(FREEZE_P_TMSI, 16#07).
|
|
-define(MSISDN, 16#08).
|
|
-define(HLR_NUMBER, 16#09).
|
|
-define(PDP_CONTEXT_ID, 16#10).
|
|
-define(PDP_TYPE, 16#11).
|
|
-define(ACCESS_POINT_NAME, 16#12).
|
|
-define(QUALITY_OF_SERVICE, 16#13).
|
|
-define(PDP_CHARGING, 16#14).
|
|
-define(RAND, 16#20).
|
|
-define(SRES, 16#21).
|
|
-define(KC, 16#22).
|
|
-define(IK, 16#23).
|
|
-define(CK, 16#24).
|
|
-define(AUTN, 16#25).
|
|
-define(AUTS, 16#26).
|
|
-define(RES, 16#27).
|
|
-define(CN_DOMAIN, 16#28).
|
|
-define(SESSION_ID, 16#30).
|
|
-define(SESSION_STATE, 16#31).
|
|
-define(SS_INFO, 16#35).
|
|
-define(SM_RP_MR, 16#40).
|
|
-define(SM_RP_DA, 16#41).
|
|
-define(SM_RP_OA, 16#42).
|
|
-define(SM_RP_UI, 16#43).
|
|
-define(SM_RP_CAUSE, 16#44).
|
|
-define(SM_RP_MMS, 16#45).
|
|
-define(SM_ALERT_REASON, 16#46).
|
|
-define(IMEI, 16#50).
|
|
-define(IMEI_CHECK_RESULT, 16#51).
|
|
|
|
-define(MANDATORY_DEFAULT, [imsi, message_type]).
|
|
|
|
-define (GSUP_MESSAGES(), #{
|
|
16#04 => #{message_type => location_upd_req, mandatory => [], optional => [cn_domain]},
|
|
16#05 => #{message_type => location_upd_err, mandatory => [cause]},
|
|
16#06 => #{message_type => location_upd_res, mandatory => [], optional => [msisdn, hlr_number, pdp_info_complete, pdp_info_list]},
|
|
16#08 => #{message_type => send_auth_info_req, mandatory => [], optional => [cn_domain, auts, rand]},
|
|
16#09 => #{message_type => send_auth_info_err, mandatory => [cause]},
|
|
16#0a => #{message_type => send_auth_info_res, mandatory => [], optional => [auth_tuples]},
|
|
16#0b => #{message_type => auth_failure_report, mandatory => [], optional => [cn_domain]},
|
|
16#0c => #{message_type => purge_ms_req, mandatory => [hlr_number], optional => [cn_domain]},
|
|
16#0d => #{message_type => purge_ms_err, mandatory => [cause]},
|
|
16#0e => #{message_type => purge_ms_res, mandatory => [freeze_p_tmsi]},
|
|
16#10 => #{message_type => insert_sub_data_req, mandatory => [pdp_info_complete], optional => [cn_domain, msisdn, hlr_number, pdp_info_list, pdp_charging]},
|
|
16#11 => #{message_type => insert_sub_data_err, mandatory => [cause]},
|
|
16#12 => #{message_type => insert_sub_data_res, mandatory => []},
|
|
16#14 => #{message_type => delete_sub_data_req, mandatory => [], optional => [cn_domain, pdp_context_id]},
|
|
16#15 => #{message_type => delete_sub_data_err, mandatory => [cause]},
|
|
16#16 => #{message_type => delete_sub_data_res, mandatory => []},
|
|
16#1c => #{message_type => location_cancellation_req, mandatory => [], optional => [cn_domain, cancellation_type]},
|
|
16#1d => #{message_type => location_cancellation_err, mandatory => [cause]},
|
|
16#1e => #{message_type => location_cancellation_res, mandatory => [], optional => [cn_domain]},
|
|
16#20 => #{message_type => ss_req, mandatory => [session_id, session_state], optional => [ss_info]},
|
|
16#21 => #{message_type => ss_err, mandatory => [session_id, session_state, cause]},
|
|
16#22 => #{message_type => ss_res, mandatory => [session_id, session_state], optional => [ss_info]},
|
|
16#24 => #{message_type => mo_forward_req, mandatory => [sm_rp_mr, sm_rp_da, sm_rp_oa, sm_rp_ui]},
|
|
16#25 => #{message_type => mo_forward_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
|
|
16#26 => #{message_type => mo_forward_res, mandatory => [sm_rp_mr]},
|
|
16#28 => #{message_type => mt_forward_req, mandatory => [sm_rp_mr, sm_rp_da, sm_rp_oa, sm_rp_ui], optional => [sm_rp_mms]},
|
|
16#29 => #{message_type => mt_forward_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
|
|
16#2a => #{message_type => mt_forward_res, mandatory => [sm_rp_mr]},
|
|
16#2c => #{message_type => ready_for_sm_req, mandatory => [sm_rp_mr, sm_alert_reason]},
|
|
16#2d => #{message_type => ready_for_sm_err, mandatory => [sm_rp_mr, sm_sm_rp_cause], optional => [sm_rp_ui]},
|
|
16#2e => #{message_type => ready_for_sm_res, mandatory => [sm_rp_mr]},
|
|
16#30 => #{message_type => check_imei_req, mandatory => [imei]},
|
|
16#31 => #{message_type => check_imei_err, mandatory => [cause]},
|
|
16#32 => #{message_type => check_imei_res, mandatory => [imei_check_result]}
|
|
}).
|
|
|
|
-define(AUTH_TUPLE_MANDATORY, [rand, sres, kc]).
|
|
-define(AUTH_TUPLE_OPTIONAL, [ik, ck, autn, res]).
|
|
-define(PDP_INFO_MANDATORY, []).
|
|
-define(PDP_INFO_OPTIONAL, [pdp_context_id, pdp_type, access_point_name, quality_of_service, pdp_charging]).
|
|
|
|
-endif.
|