RANAP_Templates: add sending of RAB_FailedList to tx_RANAP_RabAssResp

The templates ts_RANAP_RabAssResp and tr_RANAP_RabAssResp miss the
option to send a RAB_FailedList. This is needed to simulate a RAB
assignment that fails at the HNB

Change-Id: I95c7c51587981d9f478b9d31fcde139f228fa87f
Related: OS#5152
diff --git a/library/ranap/RANAP_Templates.ttcn b/library/ranap/RANAP_Templates.ttcn
index 0aa1fad..6b4699e 100644
--- a/library/ranap/RANAP_Templates.ttcn
+++ b/library/ranap/RANAP_Templates.ttcn
@@ -1331,6 +1331,36 @@
 	}
 } }
 
+template (value) RAB_FailedList ts_RAB_FL(template (value) RAB_ID rab_id,
+					  template (value) Cause cause) := { {
+	{
+		id := id_RAB_FailedItem,
+		criticality := ignore,
+		value_ := {
+			rAB_FailedItem := {
+				rAB_ID := rab_id,
+				cause := cause,
+				iE_Extensions := omit
+			}
+		}
+	}
+} }
+
+template RAB_FailedList tr_RAB_FL(template RAB_ID rab_id,
+				  template Cause cause) := { {
+	{
+		id := id_RAB_FailedItem,
+		criticality := ignore,
+		value_ := {
+			rAB_FailedItem := {
+				rAB_ID := rab_id,
+				cause := cause,
+				iE_Extensions := *
+			}
+		}
+	}
+} }
+
 template (value) RANAP_PDU
 ts_RANAP_RabAssReq(template (value) RAB_SetupOrModifyList rab_sml,
 		   template (omit) RAB_AssignmentRequest.protocolExtensions exts := omit) := {
@@ -1376,58 +1406,130 @@
 	}
 }
 
+function
+ts_RANAP_RabAssResp(template (omit) RAB_SetupOrModifiedList rab_sml := omit,
+		    template (omit) RAB_FailedList rab_fl := omit,
+		    template (omit) RAB_AssignmentResponse.protocolExtensions exts := omit) return template RANAP_PDU {
+	var template RANAP_PDU ret;
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs := {};
+	var integer ie_pos := 0;
 
-template (value) RANAP_PDU
-ts_RANAP_RabAssResp(template (value) RAB_SetupOrModifiedList rab_sml,
-		    template (omit) RAB_AssignmentResponse.protocolExtensions exts := omit) := {
-	outcome := {
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_sml;
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_fl;
+
+	/* RAB-SetupOrModifiedList */
+	if (istemplatekind(rab_sml, "value")) {
+		protocolIEs_rab_sml := {
+			{
+				id := id_RAB_SetupOrModifiedList,
+				criticality := ignore,
+				value_ := {
+					rAB_SetupOrModifiedList := rab_sml
+				}
+			}
+		}
+
+		protocolIEs[ie_pos] := protocolIEs_rab_sml[0];
+		ie_pos := ie_pos + 1;
+	}
+
+	/* TODO: RAB-ReleasedList */
+	/* TODO: RAB-QueuedList */
+
+	/* RAB-FailedList */
+	if (istemplatekind(rab_fl, "value")) {
+		protocolIEs_rab_fl := {
+			{
+				id := id_RAB_FailedList,
+				criticality := ignore,
+				value_ := {
+					rAB_FailedList := rab_fl
+				}
+			}
+		}
+
+		protocolIEs[ie_pos] := protocolIEs_rab_fl[0];
+		ie_pos := ie_pos + 1;
+	}
+
+	/* TODO: RAB-ReleaseFailedList */
+
+	ret.outcome := {
 		procedureCode := id_RAB_Assignment,
 		criticality := reject,
 		value_ := {
 			rAB_AssignmentResponse := {
-				protocolIEs := {
-					{
-						id := id_RAB_SetupOrModifiedList,
-						criticality := ignore,
-						value_ := {
-							rAB_SetupOrModifiedList := rab_sml
-						}
-					}
-					/* RAB-ReleasedList */
-					/* RAB-QueuedList */
-					/* RAB-FailedList */
-					/* RAB-ReleaseFailedList */
-				},
+				protocolIEs := protocolIEs,
 				protocolExtensions := exts
 			}
 		}
 	}
+
+	return ret;
 }
-template RANAP_PDU
-tr_RANAP_RabAssResp(template RAB_SetupOrModifiedList rab_sml,
-		    template RAB_AssignmentResponse.protocolExtensions exts := *) := {
-	outcome := {
+
+function
+tr_RANAP_RabAssResp(template RAB_SetupOrModifiedList rab_sml := omit,
+		    template RAB_FailedList rab_fl := omit,
+		    template RAB_AssignmentResponse.protocolExtensions exts := *) return template RANAP_PDU {
+	var template RANAP_PDU ret;
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs := {};
+	var integer ie_pos := 0;
+
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_sml;
+	var template RAB_AssignmentResponse.protocolIEs protocolIEs_rab_fl;
+
+	/* RAB-SetupOrModifiedList */
+	if (not istemplatekind(rab_sml, "omit")) {
+		protocolIEs_rab_sml := {
+			{
+				id := id_RAB_SetupOrModifiedList,
+				criticality := ignore,
+				value_ := {
+					rAB_SetupOrModifiedList := rab_sml
+				}
+			}
+		}
+
+		protocolIEs[ie_pos] := protocolIEs_rab_sml[0];
+		ie_pos := ie_pos + 1;
+	}
+
+	/* TODO: RAB-ReleasedList */
+	/* TODO: RAB-QueuedList */
+
+	/* RAB-FailedList */
+	if (not istemplatekind(rab_fl, "omit")) {
+		protocolIEs_rab_fl := {
+			{
+				id := id_RAB_FailedList,
+				criticality := ignore,
+				value_ := {
+					rAB_FailedList := rab_fl
+				}
+			}
+		}
+
+		protocolIEs[ie_pos] := protocolIEs_rab_fl[0];
+		ie_pos := ie_pos + 1;
+	}
+
+	/* TODO: RAB-ReleaseFailedList */
+
+	protocolIEs[ie_pos] := *;
+
+	ret.outcome := {
 		procedureCode := id_RAB_Assignment,
 		criticality := reject,
 		value_ := {
 			rAB_AssignmentResponse := {
-				protocolIEs := {
-					{
-						id := id_RAB_SetupOrModifiedList,
-						criticality := ignore,
-						value_ := {
-							rAB_SetupOrModifiedList := rab_sml
-						}
-					}, *
-					/* RAB-ReleasedList */
-					/* RAB-QueuedList */
-					/* RAB-FailedList */
-					/* RAB-ReleaseFailedList */
-				},
+				protocolIEs := protocolIEs,
 				protocolExtensions := exts
 			}
 		}
 	}
+
+	return ret;
 }
 
 template (value) RAB_ReleaseList ts_RAB_RL(template (value) RAB_ID rab_id,
@@ -1506,7 +1608,6 @@
 	}
 }
 
-
 /*****************************************************************************************************
  *
  *****************************************************************************************************/