diff options
Diffstat (limited to 'library/GSUP_Types.ttcn')
-rw-r--r-- | library/GSUP_Types.ttcn | 79 |
1 files changed, 51 insertions, 28 deletions
diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn index 359e272a..60445652 100644 --- a/library/GSUP_Types.ttcn +++ b/library/GSUP_Types.ttcn @@ -581,62 +581,85 @@ template GSUP_IE tr_GSUP_IE_SSInfo(template octetstring ss) := { } } -template (value) GSUP_PDU ts_GSUP_PROC_SS_REQ( +private function f_gen_ts_ss_ies( hexstring imsi, OCT4 sid, GSUP_SessionState state, - octetstring ss -) := ts_GSUP( - OSMO_GSUP_MSGT_PROC_SS_REQUEST, - { + template (omit) octetstring ss +) return GSUP_IEs { + /* Mandatory IEs */ + var GSUP_IEs ies := { valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_SessionId(sid)), - valueof(ts_GSUP_IE_SessionState(state)), - valueof(ts_GSUP_IE_SSInfo(ss)) + valueof(ts_GSUP_IE_SessionState(state)) + }; + + /* Optional SS payload */ + if (isvalue(ss)) { + ies[3] := valueof(ts_GSUP_IE_SSInfo(valueof(ss))); } -); -template GSUP_PDU tr_GSUP_PROC_SS_REQ( + + return ies; +} +private function f_gen_tr_ss_ies( template hexstring imsi, template OCT4 sid := ?, template GSUP_SessionState state := ?, template octetstring ss := ? -) := tr_GSUP( - OSMO_GSUP_MSGT_PROC_SS_REQUEST, - { +) return template GSUP_IEs { + /* Mandatory IEs */ + var template GSUP_IEs ies := { tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_SessionId(sid), - tr_GSUP_IE_SessionState(state), - tr_GSUP_IE_SSInfo(ss) + tr_GSUP_IE_SessionState(state) + }; + + /* Optional SS payload */ + if (istemplatekind(ss, "*")) { + ies[3] := *; + } else if (not istemplatekind(ss, "omit")) { + ies[3] := tr_GSUP_IE_SSInfo(ss); } + + return ies; +} + +template (value) GSUP_PDU ts_GSUP_PROC_SS_REQ( + hexstring imsi, + OCT4 sid, + GSUP_SessionState state, + template (omit) octetstring ss := omit +) := ts_GSUP( + OSMO_GSUP_MSGT_PROC_SS_REQUEST, + f_gen_ts_ss_ies(imsi, sid, state, ss) +); +template GSUP_PDU tr_GSUP_PROC_SS_REQ( + template hexstring imsi, + template OCT4 sid := ?, + template GSUP_SessionState state := ?, + template octetstring ss := * +) := tr_GSUP( + OSMO_GSUP_MSGT_PROC_SS_REQUEST, + f_gen_tr_ss_ies(imsi, sid, state, ss) ); template (value) GSUP_PDU ts_GSUP_PROC_SS_RES( hexstring imsi, OCT4 sid, GSUP_SessionState state, - octetstring ss + template (omit) octetstring ss := omit ) := ts_GSUP( OSMO_GSUP_MSGT_PROC_SS_RESULT, - { - valueof(ts_GSUP_IE_IMSI(imsi)), - valueof(ts_GSUP_IE_SessionId(sid)), - valueof(ts_GSUP_IE_SessionState(state)), - valueof(ts_GSUP_IE_SSInfo(ss)) - } + f_gen_ts_ss_ies(imsi, sid, state, ss) ); template GSUP_PDU tr_GSUP_PROC_SS_RES( template hexstring imsi, template OCT4 sid := ?, template GSUP_SessionState state := ?, - template octetstring ss := ? + template octetstring ss := * ) := tr_GSUP( OSMO_GSUP_MSGT_PROC_SS_RESULT, - { - tr_GSUP_IE_IMSI(imsi), - tr_GSUP_IE_SessionId(sid), - tr_GSUP_IE_SessionState(state), - tr_GSUP_IE_SSInfo(ss) - } + f_gen_tr_ss_ies(imsi, sid, state, ss) ); template (value) GSUP_PDU ts_GSUP_PROC_SS_ERR( |