fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38584?usp=email )
Change subject: library/gsup: rework f_gen_{tr,ts}_ss_ies() and SS templates ......................................................................
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(-)
Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved
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) };