fixeria submitted this change.
library/gsup: rework f_gen_{tr,ts}_ss_ies() and SS templates
* Add missing param restrictions to SS related templates.
* f_gen_{tr,ts}_ss_ies(): proper template param restrictions.
* f_gen_ts_ss_ies(): return a template, not a value.
* f_gen_ts_ss_ies(): append IEs using list index.
* f_gen_ts_ss_ies(): isvalue() -> istemplatekind()
to allow passing template lists.
* f_gen_tr_ss_ies(): istemplatekind() -> ispresent()
to allow passing template lists.
* f_gen_tr_ss_ies(): 'omit' -> '*' for optional params.
Change-Id: Ia611ffa3845d48c5553c70f10981aa029d00d873
---
M library/GSUP_Templates.ttcn
1 file changed, 67 insertions(+), 62 deletions(-)
diff --git a/library/GSUP_Templates.ttcn b/library/GSUP_Templates.ttcn
index 00c1e17..e439bc6 100644
--- a/library/GSUP_Templates.ttcn
+++ b/library/GSUP_Templates.ttcn
@@ -1337,75 +1337,80 @@
return ies;
}
-private function f_gen_ts_ss_ies(hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
+private function f_gen_ts_ss_ies(template (value) hexstring imsi,
+ template (value) OCT4 sid,
+ template (value) GSUP_SessionState state,
+ /* 'ss' and 'cause' are mutually exclusive */
template (omit) octetstring ss := omit,
template (omit) integer cause := omit,
- template octetstring source_name := omit)
-return GSUP_IEs {
+ template (omit) octetstring source_name := omit)
+return template (value) GSUP_IEs {
/* Mandatory IEs */
- var GSUP_IEs ies := {
- valueof(ts_GSUP_IE_IMSI(imsi))
+ var template (value) GSUP_IEs ies := {
+ ts_GSUP_IE_IMSI(imsi)
};
- /* Cause IE is needed for PROC_SS_ERR */
- if (isvalue(cause)) {
- ies := ies & { valueof(ts_GSUP_IE_Cause(valueof(cause))) };
+ /* OSMO_GSUP_CAUSE_IE (needed for PROC_SS_ERR) */
+ if (not istemplatekind(cause, "omit")) {
+ ies[lengthof(ies)] := ts_GSUP_IE_Cause(cause);
}
- /* Mandatory session IEs */
- ies := ies & { valueof(ts_GSUP_IE_SessionId(sid)) };
- ies := ies & { valueof(ts_GSUP_IE_SessionState(state)) };
+ /* OSMO_GSUP_SESSION_{ID,STATE}_IE */
+ ies[lengthof(ies)] := ts_GSUP_IE_SessionId(sid);
+ ies[lengthof(ies)] := ts_GSUP_IE_SessionState(state);
- /* Optional SS payload */
- if (isvalue(ss)) {
- ies := ies & { valueof(ts_GSUP_IE_SSInfo(valueof(ss))) };
+ /* OSMO_GSUP_SS_INFO_IE */
+ if (not istemplatekind(ss, "omit")) {
+ ies[lengthof(ies)] := ts_GSUP_IE_SSInfo(ss);
}
- if (isvalue(source_name)) {
- ies := ies & { valueof(ts_GSUP_IE_Source_Name(valueof(source_name))) };
+ /* OSMO_GSUP_SOURCE_NAME_IE */
+ if (not istemplatekind(source_name, "omit")) {
+ ies[lengthof(ies)] := ts_GSUP_IE_Source_Name(source_name);
}
return ies;
}
-private function f_gen_tr_ss_ies(template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
+private function f_gen_tr_ss_ies(template (present) hexstring imsi,
+ template (present) OCT4 sid := ?,
+ template (present) GSUP_SessionState state := ?,
+ /* 'ss' and 'cause' are mutually exclusive */
template octetstring ss := omit,
template integer cause := omit,
- template octetstring destination_name := omit)
+ template octetstring destination_name := *)
return template GSUP_IEs {
/* Mandatory IEs */
var template GSUP_IEs ies := {
tr_GSUP_IE_IMSI(imsi)
};
- var integer idx := 1;
+ var integer idx := lengthof(ies);
- /* Cause IE is needed for PROC_SS_ERR */
- if (istemplatekind(cause, "*")) {
- ies[idx] := *;
- idx := idx + 1;
- } else if (not istemplatekind(cause, "omit")) {
+ /* OSMO_GSUP_CAUSE_IE (needed for PROC_SS_ERR) */
+ if (ispresent(cause)) {
ies[idx] := tr_GSUP_IE_Cause(cause);
idx := idx + 1;
- }
-
- /* Mandatory session IEs */
- ies[idx] := tr_GSUP_IE_SessionId(sid);
- ies[idx + 1] := tr_GSUP_IE_SessionState(state);
- idx := idx + 2;
-
- /* Optional SS payload */
- if (istemplatekind(ss, "*")) {
+ } else if (istemplatekind(cause, "*")) {
ies[idx] := *;
idx := idx + 1;
- } else if (not istemplatekind(ss, "omit")) {
+ }
+
+ /* OSMO_GSUP_SESSION_{ID,STATE}_IE */
+ ies[idx] := tr_GSUP_IE_SessionId(sid);
+ idx := idx + 1;
+ ies[idx] := tr_GSUP_IE_SessionState(state);
+ idx := idx + 1;
+
+ /* OSMO_GSUP_SS_INFO_IE */
+ if (ispresent(ss)) {
ies[idx] := tr_GSUP_IE_SSInfo(ss);
idx := idx + 1;
+ } else if (istemplatekind(ss, "*")) {
+ ies[idx] := *;
+ idx := idx + 1;
}
- if (isvalue(destination_name)) {
+ /* OSMO_GSUP_DESTINATION_NAME_IE */
+ if (ispresent(destination_name)) {
ies[idx] := tr_GSUP_IE_Destination_Name(destination_name);
idx := idx + 1;
}
@@ -1419,35 +1424,35 @@
}
template (value) GSUP_PDU
-ts_GSUP_PROC_SS_REQ(hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
+ts_GSUP_PROC_SS_REQ(template (value) hexstring imsi,
+ template (value) OCT4 sid,
+ template (value) GSUP_SessionState state,
template (omit) octetstring ss := omit,
template (omit) octetstring source_name := omit) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_REQUEST,
ies := f_gen_ts_ss_ies(imsi, sid, state, ss, source_name := source_name)
};
-template GSUP_PDU
-tr_GSUP_PROC_SS_REQ(template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
+template (present) GSUP_PDU
+tr_GSUP_PROC_SS_REQ(template (present) hexstring imsi,
+ template (present) OCT4 sid := ?,
+ template (present) GSUP_SessionState state := ?,
template octetstring ss := *) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_REQUEST,
ies := 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,
+ts_GSUP_PROC_SS_RES(template (value) hexstring imsi,
+ template (value) OCT4 sid,
+ template (value) GSUP_SessionState state,
template (omit) octetstring ss := omit) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_RESULT,
ies := 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 (present) GSUP_PDU
+tr_GSUP_PROC_SS_RES(template (present) hexstring imsi,
+ template (present) OCT4 sid := ?,
+ template (present) GSUP_SessionState state := ?,
template octetstring ss := *,
template octetstring destination_name := omit) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_RESULT,
@@ -1455,18 +1460,18 @@
};
template (value) GSUP_PDU
-ts_GSUP_PROC_SS_ERR(hexstring imsi,
- OCT4 sid,
- GSUP_SessionState state,
- integer cause) := {
+ts_GSUP_PROC_SS_ERR(template (value) hexstring imsi,
+ template (value) OCT4 sid,
+ template (value) GSUP_SessionState state,
+ template (value) integer cause) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_ERROR,
ies := f_gen_ts_ss_ies(imsi, sid, state, cause := cause)
};
-template GSUP_PDU
-tr_GSUP_PROC_SS_ERR(template hexstring imsi,
- template OCT4 sid := ?,
- template GSUP_SessionState state := ?,
- template integer cause := ?) := {
+template (present) GSUP_PDU
+tr_GSUP_PROC_SS_ERR(template (present) hexstring imsi,
+ template (present) OCT4 sid := ?,
+ template (present) GSUP_SessionState state := ?,
+ template (present) integer cause := ?) := {
msg_type := OSMO_GSUP_MSGT_PROC_SS_ERROR,
ies := f_gen_tr_ss_ies(imsi, sid, state, cause := cause)
};
To view, visit change 38584. To unsubscribe, or for help writing mail filters, visit settings.