aboutsummaryrefslogtreecommitdiffstats
path: root/library/GSUP_Types.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/GSUP_Types.ttcn')
-rw-r--r--library/GSUP_Types.ttcn79
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(