diff --git a/AtsCommon/SipIsup_PICS.ttcn b/AtsCommon/SipIsup_PICS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..019d9c4adbdd0f97f61d411421cb660e2c2b5372 --- /dev/null +++ b/AtsCommon/SipIsup_PICS.ttcn @@ -0,0 +1,987 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module contains the module parameters given in + * "SIP-ISUP Interworking between the IP Multimedia (IM) Core Network (CN) subsystem and Circuit Switched (CS) networks; PICS" + * ETSI ES 186 009-1 V0.0.3 + */ + +module SipIsup_PICS { +group PICS_Module_Parameters +{ + modulepar { +// Roles Table 1 + /* @desc Does the SUT implement Profile A? + ** @remark PICS Reference: Table 1, Item 1 + */ + boolean PC_IMPL_PROF_A; + + /* @desc Does the SUT implement Profile B? + ** @remark PICS Reference: Table 1, Item 2 + */ + boolean PC_IMPL_PROF_B; + + /* @desc Is the SUT connected to a BICC Network? + ** @remark PICS Reference: Table 1, Item 4 + */ + boolean PC_CONN_BICC; + + /* @desc Is the SUT connected to an ISUP Network? + ** @remark PICS Reference: Table 1, Item 5 + */ + boolean PC_CONN_ISUP; + + /* @desc Is the SUT connected with a �-law network? + ** @remark PICS Reference: Table 1, Item 6 + */ + boolean PC_CONN_MULAW; + + /* @desc Is the SUT connected with an outgoing international exchange? + ** @remark PICS Reference: Table 1, Item 7 + */ + boolean PC_CONN_OUT_INTERNAT; + + /* @desc Is the SUT connected with an incoming international exchange? + ** @remark PICS Reference: Table 1, Item 8 + */ + boolean PC_CONN_INC_INTERNAT; + + /* @desc Is the SUT an implementation according ETSI EN 383 001? + ** @remark PICS Reference: Table 1, Item 9 + */ + boolean PC_IMPL_383_001; + +// ForwardAddressSignalling Table 3 + /* @desc Does the SIP implementation use the en bloc operation in the forward address signalling (sending)? + ** @remark PICS Reference: Table 3, Item 1 + */ + boolean PC_USE_SIP_TX_ENBLOCK; + + /* @desc Does the SIP implementation use the overlap operation in the forward address signalling (sending)? + ** @remark PICS Reference: Table 3, Item 2 + */ + boolean PC_USE_SIP_TX_OVERLAP; + + /* @desc Does the SIP implementation support the overlap operation in the forward address signalling (receiving)? + ** @remark PICS Reference: Table 3, Item 4 + */ + boolean PC_SUPP_SIP_RX_OVERLAP; + + /* @desc Does the ISUP implementation support the overlap operation in the forward address signalling (receiving)? + ** @remark PICS Reference: Table 3, Item 8 + */ + boolean PC_SUPP_ISUP_RX_OVERLAP; + + +// RoleIndependentCapabilities Table 4 + /* @desc Does the SUT use the Continuity check procedures during call setup? + ** @remark PICS Reference: Table 4, Item 1 + */ + boolean PC_USE_CONT_CHK; + + /* @desc Does the SUT support the Continuity check procedures during call setup? + ** @remark PICS Reference: Table 4, Item 2 + */ + boolean PC_SUPP_CONT_CHK; + + /* @desc Does the SUT support internal resource reservations (preconditons used)? + ** @remark PICS Reference: Table 4, Item 4 + */ + boolean PC_SUPP_INT_RESOURCE; + + /* @desc Is the SUT able to support the reliability of provisional responses? + ** @remark PICS Reference: Table 4, Item 5 + */ + boolean PC_SUPP_RELY_PROV; + + /* @desc Does the SUT perform the automatic repeat attempt? + ** @remark PICS Reference: Table 4, Item 6 + */ + boolean PC_PERF_AUT_REPEAT; + + /* @desc Does the SUT send an ACM message after determination of end of address signalling? + ** @remark PICS Reference: Table 4, Item 9 + */ + boolean PC_SEND_ACM_EOA; + + /* @desc Does the SUT map the REL cause value into the reason header field of a SIP message (BYE, CANCEL or SIP final response)? + ** @remark PICS Reference: Table 4, Item 10 + */ + boolean PC_MAP_REL_CAUSE; + + /* @desc Does the SUT map a received reason header field included in a SIP message (BYE, CANCEL or SIP final response) to the ISUP cause value in the sent REL? + ** @remark PICS Reference: Table 4, Item 11 + */ + boolean PC_MAP_REASON_REL; + + /* @desc Does the SUT interwork the SIP Failure response to ISUP? + ** @remark PICS Reference: Table 4, Item 12 + */ + boolean PC_INTERW_SIP_FAIL; + + /* @desc Does the SUT derive the Display-name in the "From header field" from the "additional calling party number" or "calling party number"? + ** @remark PICS Reference: Table 4, Item 13 + */ + boolean PC_DERIV_DISPL_FROM; + + /* @desc Does the SUT control the exchange for the Suspend procedure? + ** @remark PICS Reference: Table 4, Item 14 + */ + boolean PC_CTRL_SUSP; + + /* @desc Does the SUT use internal resource reservations (preconditons used)? + ** @remark PICS Reference: Table 4, Item 15 + */ + boolean PC_USE_INT_RESOURCE; + + /* @desc Does the SUT satisfy the call using a new address provided in a Contact header field received in a 3xx response? + ** @remark PICS Reference: Table 4, Item 17 + */ + boolean PC_USE_NEW_ADDR_CONTACT; + + /* @desc Does the SUT refuse an offer with a 415 Unsupported media type response if more than one media typs are received in a SDP? + ** @remark PICS Reference: Table 4, Item 19 + */ + boolean PC_REFUSE_415_OFFER; + + /* @desc Does the SUT derive the Display-name in the "P-Asserted-Identity header field" from the "calling party number" or "additional calling party number"? + ** @remark PICS Reference: Table 4, Item 20 + */ + boolean PC_DERIV_DISP_P_ASS; + + /* @desc Does the SUT redirect to a new destination according the BICC/ISUP requirements if a REL is received with cause 23? + ** @remark PICS Reference: Table 4, Item 21 + */ + boolean PC_REDIR_CAUSE_23; + + /* @desc What is the value of PICS item 23 in table 4? + ** @remark PICS Reference: Table 4, Item 23 + */ + boolean PC_TABLE4_23; + + /* @desc What is the value of PICS item 23 in table 4? + ** @remark PICS Reference: Table 4, Item 24 + */ + boolean PC_TABLE4_24; + +// SupplementaryServiceMajorCapabilities Table 5 + /* @desc Does the SUT support the service Call Hold (HOLD)? + ** @remark PICS Reference: Table 5, Item 5 + */ + boolean PC_SUPP_HOLD; + + /* @desc Does the SUT support the service Terminal Portability (TP)? + ** @remark PICS Reference: Table 5, Item 6 + */ + boolean PC_SUPP_TP; + + /* @desc Does the SUT support the service Conference Call, add-on (CONF)? + ** @remark PICS Reference: Table 5, Item 10 + */ + boolean PC_SUPP_CONF; + + /* @desc Does the SUT support the Three-Party (3PTY) service? + ** @remark PICS Reference: Table 5, Item 18 + */ + boolean PC_SUPP_3PTY; + +// CLI Table 6 + /* @desc Does the SUT include a network provided E.164 calling party number if the P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN; address signal: network provided? + ** @remark PICS Reference: Table 6, Item 1 + */ + boolean PC_INCL_E164_P_ASS_NTWK; + + /* @desc Does the SUT include an addtional calling party number if a From header field has been received in the format "+"CC+NDC+SN; address signal: derived from the From header field? + ** @remark PICS Reference: Table 6, Item 3 + */ + boolean PC_INCL_ADD_CLD_FROM; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "presentation allowed" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 9 + */ + boolean PC_SEND_CLI_ALLOWED_NO_P; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "address not available" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 11 + */ + boolean PC_SEND_CLI_NOT_AVAIL_NO_P; + + /* @desc Does the SUT send a Calling Party Number with an Number Presentation restriction Indicator set to "resentation restricted by the network" if no P-Asserted -Identity header field has not been received or not in the format "+"CC+NDC+SN? + ** @remark PICS Reference: Table 6, Item 12 + */ + boolean PC_SEND_CLI_RESTR_NTWK_NO_P; + +// HOLD Table 8 + /* @desc Does the SUT support that a party can put the other party on hold after alerting has commenced? + ** @remark PICS Reference: Table 8, Item 1 + */ + boolean PC_SUPP_HOLD_AFTER_ALERT; + + /* @desc Does the SUT support that a party can put the other party on hold after the calling user has provided all of the information necessary for processing the call? + ** @remark PICS Reference: Table 8, Item 2 + */ + boolean PC_SUPP_HOLD_NEC_INFO; + +// MCID Table 9 + /* @desc Does the SUT return an IRS with bit A of the MCID response indicator set to 0 "MCID not included", if the network does not support the MCID service? + ** @remark PICS Reference: Table 9, Item 1 + */ + boolean PC_RET_IRS_MCID_NOT; + +// UUS Table 11 + /* @desc Does the SUT understand an explicit user-to-user request? + ** @remark PICS Reference: Table 11, Item 1 + */ + boolean PC_IMPL_EXPL_USER_USER; + + /* @desc Does the SUT support the rejection procedure of an explicit service request or discarding of user-to-user information as described in 1.1.5.x.5.2/Q.737? + ** @remark PICS Reference: Table 11, Item 2 + */ + boolean PC_SUPP_REJ_UUI_Q737; + + /* @desc Does the SUT reject a user-to-user request service 3 not essential after call set-up using the FRJ message? + ** @remark PICS Reference: Table 11, Item 3 + */ + boolean PC_REJ_UUS3ESSENTIAL_FRJ; + +// ECT Table 12 + /* @desc Does the SUT return a LOP (response) message with the indication "insufficient information"? + ** @remark PICS Reference: Table 12, Item 1 + */ + boolean PC_RET_LOP_INSUFF; + } +} // endgroup PICS_Module_Parameters + + +group testCaseSelectionFunctions +{ + /* dummy selection function always returning 'true' */ + function f_selection_true() return boolean + { + return true + }// end function f_selection_true() + + /* Mnemonic selection reference: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + function f_selection_001() return boolean + { + return((not PC_SUPP_RELY_PROV) and PC_CONN_MULAW) + }// end function f_selection_001() + + /* Mnemonic selection reference: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + function f_selection_002() return boolean + { + return((not PC_USE_INT_RESOURCE) and PC_CONN_BICC) + }// end function f_selection_002() + + /* Mnemonic selection reference: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + function f_selection_003() return boolean + { + return((not PC_USE_INT_RESOURCE) and PC_CONN_ISUP) + }// end function f_selection_003() + + /* Mnemonic selection reference: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + function f_selection_004() return boolean + { + return((not PC_SUPP_INT_RESOURCE) and PC_CONN_MULAW) + }// end function f_selection_004() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( PICS 1/9 ) and ( PICS 4/23 ) */ + function f_selection_005() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_TABLE4_23) + }// end function f_selection_005() + + /* Mnemonic selection reference: not PICS 5/18 */ + function f_selection_006() return boolean + { + return(not PC_SUPP_3PTY) + }// end function f_selection_006() + + /* Mnemonic selection reference: ( not PICS 1/9 ) */ + function f_selection_007() return boolean + { + return(not PC_IMPL_383_001) + }// end function f_selection_007() + + /* Mnemonic selection reference: ( not PICS 11/2 ) */ + function f_selection_008() return boolean + { + return(not PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_008() + + /* Mnemonic selection reference: ( not PICS 3/4 ) */ + function f_selection_009() return boolean + { + return(not PC_SUPP_SIP_RX_OVERLAP) + }// end function f_selection_009() + + /* Mnemonic selection reference: ( not PICS 4/10 ) */ + function f_selection_010() return boolean + { + return(not PC_MAP_REL_CAUSE) + }// end function f_selection_010() + + /* Mnemonic selection reference: ( not PICS 4/15 ) and PICS 4/21 */ + function f_selection_011() return boolean + { + return((not PC_MAP_REL_CAUSE) and PC_REDIR_CAUSE_23) + }// end function f_selection_011() + + /* Mnemonic selection reference: ( not PICS 4/12 ) */ + function f_selection_012() return boolean + { + return(not PC_MAP_REASON_REL) + }// end function f_selection_012() + + /* Mnemonic selection reference: ( not PICS 4/12 ) */ + function f_selection_013() return boolean + { + return(not PC_INTERW_SIP_FAIL) + }// end function f_selection_013() + + /* Mnemonic selection reference: ( not PICS 4/13 ) */ + function f_selection_014() return boolean + { + return(not PC_DERIV_DISPL_FROM) + }// end function f_selection_014() + + /* Mnemonic selection reference: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + function f_selection_015() return boolean + { + return((not PC_DERIV_DISPL_FROM) and (not PC_DERIV_DISP_P_ASS)) + }// end function f_selection_015() + + /* Mnemonic selection reference: ( not PICS 4/13 ) and PICS 4/20 */ + function f_selection_016() return boolean + { + return((not PC_DERIV_DISPL_FROM) and PC_DERIV_DISP_P_ASS) + }// end function f_selection_016() + + /* Mnemonic selection reference: ( not PICS 4/150 ) */ + function f_selection_017() return boolean + { + return(not PC_USE_INT_RESOURCE) + }// end function f_selection_017() + + /* Mnemonic selection reference: ( not PICS 4/17 ) */ + function f_selection_018() return boolean + { + return(not PC_USE_NEW_ADDR_CONTACT) + }// end function f_selection_018() + + /* Mnemonic selection reference: ( not PICS 4/5 ) */ + function f_selection_019() return boolean + { + return(not PC_SUPP_RELY_PROV) + }// end function f_selection_019() + + /* Mnemonic selection reference: ( not PICS 9/1 ) */ + function f_selection_020() return boolean + { + return(not PC_RET_IRS_MCID_NOT) + }// end function f_selection_020() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + function f_selection_021() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_021() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + function f_selection_022() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_022() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_023() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_023() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + function f_selection_024() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_024() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 ) */ + function f_selection_025() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24)) + }// end function f_selection_025() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_026() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_026() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_027() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and (not PC_SEND_ACM_EOA)) + }// end function f_selection_027() + + /* Mnemonic selection reference: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + function f_selection_028() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and PC_SEND_ACM_EOA) + }// end function f_selection_028() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( ( not PICS 1/9 ) ) */ + function f_selection_029() return boolean + { + return(PC_IMPL_PROF_B and (not PC_IMPL_383_001)) + }// end function f_selection_029() + + /* Mnemonic selection reference: ( PICS 1/2 ) and ( PICS 1/9 ) and ( ( not PICS 4/23 ) ) */ + function f_selection_030() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and (not PC_TABLE4_23)) + }// end function f_selection_030() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/1 ) and ( PICS 4/9 ) */ + function f_selection_031() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_USE_SIP_TX_ENBLOCK and PC_SEND_ACM_EOA) + }// end function f_selection_031() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + function f_selection_032() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_032() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + function f_selection_033() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SEND_ACM_EOA) + }// end function f_selection_033() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 1/9 ) ) and ( PICS 4/9 ) */ + function f_selection_034() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_IMPL_383_001) and PC_SEND_ACM_EOA) + }// end function f_selection_034() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_035() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_035() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + function f_selection_036() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK and PC_SEND_ACM_EOA) + }// end function f_selection_036() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + function f_selection_037() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_037() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_038() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_038() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + function f_selection_039() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_039() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + function f_selection_040() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and (not PC_TABLE4_24) and PC_SUPP_CONT_CHK and PC_SEND_ACM_EOA) + }// end function f_selection_040() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 3/8) ) and ( PICS 4/2 ) */ + function f_selection_041() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_SUPP_ISUP_RX_OVERLAP and PC_SUPP_CONT_CHK) + }// end function f_selection_041() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + function f_selection_042() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_042() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( ( not PICS 1/7 ) ) */ + function f_selection_043() return boolean + { + return(PC_IMPL_383_001 and (not PC_CONN_OUT_INTERNAT)) + }// end function f_selection_043() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + function f_selection_044() return boolean + { + return(PC_IMPL_383_001 and (not PC_CONN_INC_INTERNAT)) + }// end function f_selection_044() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( PICS 1/7 ) */ + function f_selection_045() return boolean + { + return(PC_IMPL_383_001 and PC_CONN_OUT_INTERNAT) + }// end function f_selection_045() + + /* Mnemonic selection reference: ( PICS 1/9 ) and ( PICS 1/8 ) */ + function f_selection_046() return boolean + { + return(PC_IMPL_383_001 and PC_CONN_INC_INTERNAT) + }// end function f_selection_046() + + /* Mnemonic selection reference: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + function f_selection_047() return boolean + { + return(PC_USE_SIP_TX_ENBLOCK and (not PC_SEND_ACM_EOA)) + }// end function f_selection_047() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 3/8 ) */ + function f_selection_048() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_ISUP_RX_OVERLAP) + }// end function f_selection_048() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 1/4 ) */ + function f_selection_049() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_CONN_BICC) + }// end function f_selection_049() + + /* Mnemonic selection reference: ( PICS 3/2 ) and ( PICS 1/5 ) */ + function f_selection_050() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_CONN_ISUP) + }// end function f_selection_050() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_051() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_051() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) ) */ + function f_selection_052() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_052() + + /* Mnemonic selection reference: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + function f_selection_053() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and (not PC_USE_INT_RESOURCE) and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_053() + + /* Mnemonic selection reference: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_054() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_054() + + /* Mnemonic selection reference: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + function f_selection_055() return boolean + { + return(PC_USE_SIP_TX_OVERLAP and PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_055() + + /* Mnemonic selection reference: ( PICS 3/4 ) and ( PICS 3/8 ) */ + function f_selection_056() return boolean + { + return(PC_SUPP_SIP_RX_OVERLAP and PC_SUPP_ISUP_RX_OVERLAP) + }// end function f_selection_056() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and ( not PICS 4/1 ) ) */ + function f_selection_057() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and (not PC_CONN_MULAW) and (not PC_USE_CONT_CHK)) + }// end function f_selection_057() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and PICS 4/1 ) */ + function f_selection_058() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_058() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + function f_selection_059() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_059() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + function f_selection_060() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_060() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + function f_selection_061() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_BICC and PC_USE_CONT_CHK) + }// end function f_selection_061() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + function f_selection_062() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and (not PC_CONN_MULAW) and PC_USE_CONT_CHK) + }// end function f_selection_062() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + function f_selection_063() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_063() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 4/1 ) */ + function f_selection_064() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_ISUP and PC_USE_CONT_CHK) + }// end function f_selection_064() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and ( not PICS 4/1 ) ) */ + function f_selection_065() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_MULAW and (not PC_USE_CONT_CHK)) + }// end function f_selection_065() + + /* Mnemonic selection reference: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and PICS 4/1 ) */ + function f_selection_066() return boolean + { + return(PC_SUPP_INT_RESOURCE and PC_SUPP_RELY_PROV and PC_CONN_MULAW and PC_USE_CONT_CHK) + }// end function f_selection_066() + + /* Mnemonic selection reference: ( PICS 4/5 ) and ( PICS 1/6 ) */ + function f_selection_067() return boolean + { + return(PC_SUPP_RELY_PROV and PC_CONN_MULAW) + }// end function f_selection_067() + + /* Mnemonic selection reference: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + function f_selection_068() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_BICC and PC_SUPP_CONT_CHK) + }// end function f_selection_068() + + /* Mnemonic selection reference: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + function f_selection_069() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_CONN_ISUP and PC_SUPP_CONT_CHK) + }// end function f_selection_069() + + /* Mnemonic selection reference: ( PICS 5/6 ) and ( PICS 4/14 ) */ + function f_selection_070() return boolean + { + return(PC_SUPP_TP and PC_CTRL_SUSP) + }// end function f_selection_070() + + /* Mnemonic selection reference: ( PICS 8/1 ) and ( PICS 5/10 ) */ + function f_selection_071() return boolean + { + return(PC_SUPP_HOLD_AFTER_ALERT and PC_SUPP_CONF) + }// end function f_selection_071() + + /* Mnemonic selection reference: ( PICS 8/2 ) and ( PICS 5/10 ) */ + function f_selection_072() return boolean + { + return(PC_SUPP_HOLD_NEC_INFO and PC_SUPP_CONF) + }// end function f_selection_072() + + /* Mnemonic selection reference: not PICS 11/2 */ + function f_selection_073() return boolean + { + return(not PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_073() + + /* Mnemonic selection reference: NOT PICS 12/1 */ + function f_selection_074() return boolean + { + return(not PC_RET_LOP_INSUFF) + }// end function f_selection_074() + + /* Mnemonic selection reference: not PICS 5/10 */ + function f_selection_075() return boolean + { + return(not PC_SUPP_CONF) + }// end function f_selection_075() + + /* Mnemonic selection reference: ( PICS 1/1 ) and ( ( not PICS 4/24 ) ) */ + function f_selection_076() return boolean + { + return(PC_IMPL_PROF_A and (not PC_TABLE4_24)) + }// end function f_selection_076() + + /* Mnemonic selection reference: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + function f_selection_077() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_TABLE4_24)) + }// end function f_selection_077() + + /* Mnemonic selection reference: PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) */ + function f_selection_078() return boolean + { + return(PC_IMPL_PROF_A and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and (not PC_TABLE4_24)) + }// end function f_selection_078() + + /* Mnemonic selection reference: PICS 1/2 */ + function f_selection_079() return boolean + { + return(PC_IMPL_PROF_B) + }// end function f_selection_079() + + /* Mnemonic selection reference: PICS 1/2 and PICS 3/1 */ + function f_selection_080() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK) + }// end function f_selection_080() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 ) */ + function f_selection_081() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and (not PC_USE_INT_RESOURCE) and PC_SUPP_CONT_CHK) + }// end function f_selection_081() + + /* Mnemonic selection reference: PICS 1/2 and PICS 3/2 */ + function f_selection_082() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_OVERLAP) + }// end function f_selection_082() + + /* Mnemonic selection reference: PICS 1/9 */ + function f_selection_083() return boolean + { + return(PC_IMPL_383_001) + }// end function f_selection_083() + + /* Mnemonic selection reference: PICS 1/9 and ( not PICS 4/19 ) */ + function f_selection_084() return boolean + { + return(PC_IMPL_383_001 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_084() + + /* Mnemonic selection reference: PICS 1/9 and PICS 4/19 */ + function f_selection_085() return boolean + { + return(PC_IMPL_383_001 and PC_REFUSE_415_OFFER) + }// end function f_selection_085() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/1 and PICS 6/12 */ + function f_selection_086() return boolean + { + return(PC_IMPL_383_001 and PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_086() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/1 and PICS 6/3 and PICS 6/12 */ + function f_selection_087() return boolean + { + return(PC_IMPL_383_001 and PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_087() + + /* Mnemonic selection reference: PICS 1/9 and PICS 6/12 */ + function f_selection_088() return boolean + { + return(PC_IMPL_383_001 and PC_SEND_CLI_RESTR_NTWK_NO_P) + }// end function f_selection_088() + + /* Mnemonic selection reference: PICS 11/1 and PICS 11/2 */ + function f_selection_089() return boolean + { + return(PC_IMPL_EXPL_USER_USER and PC_SUPP_REJ_UUI_Q737) + }// end function f_selection_089() + + /* Mnemonic selection reference: PICS 12/1 */ + function f_selection_090() return boolean + { + return(PC_RET_LOP_INSUFF) + }// end function f_selection_090() + + /* Mnemonic selection reference: PICS 3/1 */ + function f_selection_091() return boolean + { + return(PC_USE_SIP_TX_ENBLOCK) + }// end function f_selection_091() + + /* Mnemonic selection reference: PICS 3/2 */ + function f_selection_092() return boolean + { + return(PC_USE_SIP_TX_OVERLAP) + }// end function f_selection_092() + + /* Mnemonic selection reference: PICS 3/4 */ + function f_selection_093() return boolean + { + return(PC_SUPP_SIP_RX_OVERLAP) + }// end function f_selection_093() + + /* Mnemonic selection reference: PICS 4/10 */ + function f_selection_094() return boolean + { + return(PC_MAP_REL_CAUSE) + }// end function f_selection_094() + + /* Mnemonic selection reference: PICS 4/11 */ + function f_selection_095() return boolean + { + return(PC_MAP_REASON_REL) + }// end function f_selection_095() + + /* Mnemonic selection reference: PICS 4/12 */ + function f_selection_096() return boolean + { + return(PC_INTERW_SIP_FAIL) + }// end function f_selection_096() + + /* Mnemonic selection reference: PICS 4/13 */ + function f_selection_097() return boolean + { + return(PC_DERIV_DISPL_FROM) + }// end function f_selection_097() + + /* Mnemonic selection reference: PICS 4/13 and ( not PICS 4/20 ) */ + function f_selection_098() return boolean + { + return(PC_DERIV_DISPL_FROM and (not PC_DERIV_DISP_P_ASS)) + }// end function f_selection_098() + + /* Mnemonic selection reference: PICS 4/13 and PICS 4/20 */ + function f_selection_099() return boolean + { + return(PC_DERIV_DISPL_FROM and PC_DERIV_DISP_P_ASS) + }// end function f_selection_099() + + /* Mnemonic selection reference: PICS 4/14 */ + function f_selection_100() return boolean + { + return(PC_CTRL_SUSP) + }// end function f_selection_100() + + /* Mnemonic selection reference: PICS 4/17 */ + function f_selection_101() return boolean + { + return(PC_USE_NEW_ADDR_CONTACT) + }// end function f_selection_101() + + /* Mnemonic selection reference: PICS 4/5 and ( not PICS 4/4 ) */ + function f_selection_102() return boolean + { + return(PC_SUPP_INT_RESOURCE and (not PC_SUPP_RELY_PROV)) + }// end function f_selection_102() + + /* Mnemonic selection reference: PICS 4/5 */ + function f_selection_103() return boolean + { + return(PC_SUPP_RELY_PROV) + }// end function f_selection_103() + + /* Mnemonic selection reference: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + function f_selection_104() return boolean + { + return(PC_SUPP_RELY_PROV and PC_USE_INT_RESOURCE and PC_SUPP_CONT_CHK) + }// end function f_selection_104() + + /* Mnemonic selection reference: PICS 4/6 */ + function f_selection_105() return boolean + { + return(PC_PERF_AUT_REPEAT) + }// end function f_selection_105() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/2 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_106() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_USE_SIP_TX_ENBLOCK and PC_USE_SIP_TX_OVERLAP and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_106() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 1/9 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_107() return boolean + { + return(PC_IMPL_PROF_B and PC_IMPL_383_001 and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_107() + + /* Mnemonic selection reference: ( PICS 1/2 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + function f_selection_108() return boolean + { + return(PC_IMPL_PROF_B and PC_USE_SIP_TX_ENBLOCK and PC_TABLE4_24 and (not PC_REFUSE_415_OFFER)) + }// end function f_selection_108() + + /* Mnemonic selection reference: PICS 5/6 */ + function f_selection_109() return boolean + { + return(PC_SUPP_TP) + }// end function f_selection_109() + + /* Mnemonic selection reference: PICS 6/1 */ + function f_selection_110() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK) + }// end function f_selection_110() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/11 */ + function f_selection_111() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_NOT_AVAIL_NO_P) + }// end function f_selection_111() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/3 */ + function f_selection_112() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM) + }// end function f_selection_112() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/3 and PICS 6/9 */ + function f_selection_113() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_INCL_ADD_CLD_FROM and PC_SEND_CLI_ALLOWED_NO_P) + }// end function f_selection_113() + + /* Mnemonic selection reference: PICS 6/1 and PICS 6/9 */ + function f_selection_114() return boolean + { + return(PC_INCL_E164_P_ASS_NTWK and PC_SEND_CLI_ALLOWED_NO_P) + }// end function f_selection_114() + + /* Mnemonic selection reference: PICS 6/3 */ + function f_selection_115() return boolean + { + return(PC_INCL_ADD_CLD_FROM) + }// end function f_selection_115() + + /* Mnemonic selection reference: ( not PICS 4/11 ) */ + function f_selection_116() return boolean + { + return(not PC_MAP_REASON_REL) + }// end function f_selection_116() + + /* Mnemonic selection reference: PICS 8/1 PICS 5/5 and PICS 5/18 */ + function f_selection_117() return boolean + { + return(PC_SUPP_HOLD_AFTER_ALERT and PC_SUPP_HOLD and PC_SUPP_3PTY) + }// end function f_selection_117() + + /* Mnemonic selection reference: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + function f_selection_118() return boolean + { + return(PC_SUPP_HOLD_NEC_INFO and PC_SUPP_HOLD and PC_SUPP_3PTY) + }// end function f_selection_118() + + /* Mnemonic selection reference: ( ( not PICS 11/1 )or ( not PICS 11/3 ) ) */ + function f_selection_119() return boolean + { + return((not PC_REJ_UUS3ESSENTIAL_FRJ) or (not PC_IMPL_EXPL_USER_USER)) + }// end function f_selection_119() + + /* Mnemonic selection reference: PICS 9/1 */ + function f_selection_120() return boolean + { + return(PC_RET_IRS_MCID_NOT) + }// end function f_selection_120() + +} + + +}// end module SipIsup_PICS diff --git a/AtsCommon/SipIsup_PIXITS.ttcn b/AtsCommon/SipIsup_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1c75bd823475409b56d63d193b52fe03c4a0cc38 --- /dev/null +++ b/AtsCommon/SipIsup_PIXITS.ttcn @@ -0,0 +1,121 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module contains the PIXIT parameters + */ + +module SipIsup_PIXITS { + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + import from LibSip_SIPTypesAndValues all; + + /* + ** @remark Reference: XXX + ** @desc What is the local receive policy for SIP? + * Value of PX_LOCAL_POLICY + * 1: receive no cause due to local policy, 2: receive cause #31 due to local policy + */ + modulepar { + + /** @desc integer for testcase variant according to table entry in table to test purpose description, if present + */ + integer PX_TC_VA:=1; + + /** @desc Bitstring[5] for Bearer Capability Information Transfer Capability used for mapping between + * ISUP: Bearer Capability information element within USI parameter and + * SIP: SDP offer or PSTN XML BearerCapability + * Used in TC_301_014, TC_301_015 and TC_301_023 + */ + Bit5 PX_BearerCapabilityInformationTransferCapability:='00000'B; + + /** @desc Bitstring[5] for Bearer Capability Information Transfer Capability used for mapping between + * ISUP: Bearer Capability information element within ATP parameter and + * SIP: PSTN XML BearerCapability + * Used in TC_ + */ + Bit5 PX_BearerCapabilityInformationTransferCapability2:='00000'B; + + /** @desc Bitstring[7] for High layer characteristics identification used for mapping between + * ISUP: High layer compatibility information element within ATP or UTSI parameter and + * SIP: PSTN XML HighLayerCompatibility + * Used in TC_105_012, TC_105_013, TC_106_006, TC_106_007, TC_107_008, TC_107_009, + * TC_301_031, TC_301_032 and TC_301_033 + */ + Bit7 PX_HighLayerCharacteristicsIdentification:='0000001'B; + + /** @desc Bitstring[7] for 2nd High layer characteristics identification used for mapping between + * ISUP: High layer compatibility information element within ATP parameter and + * SIP: PSTN XML HighLayerCompatibility + * Used in TC104_015, TC_104_016 and TC_301_033 + */ + Bit7 PX_HighLayerCharacteristicsIdentification2:='0000001'B; + + /** @desc Bitstring[5] for Low layer Information Transfer Capability used for mapping between + * ISUP: Low layer compatibility information element within ATP parameter and + * SIP: PSTN XML LowLayerCompatibility + * Used in TC_104_018, TC_104_019, TC_106_008, TC_107_010 and TC_301_030 + */ + Bit5 PX_LowLayerInformationTransferCapability:='00000'B; + + /** @desc Bitstring[7] for Progress description used for mapping between + * ISUP: Progress indicator information element within ATP parameter and + * SIP: PSTN XML ProgressIndicator + * Used in TC_104_008, TC_104_020, TC_105_006, TC_107_004 and TC_301_029 + */ + + Bit7 PX_ProgressIndicator:='0000001'B; + + /** @desc Integer for Cause value used for mapping between + * ISUP: Cause value within CAUI parameter and + * SIP: Q.850 cause value in Reason header + * Used in TC_110_001 and TC_110_002 + */ + + integer PX_CauseValue:=16; + + /** @desc float default value for Ti/w1 (500 ms) + */ + float PX_SIP_Tiw1 := 0.5; + + /** @desc float default value for Ti/w2 (500 ms) + */ + float PX_SIP_Tiw2 := 0.5; + + /** @desc NameAddr default value for From field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_From := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := {host := "ims.net", portField :=omit}, + urlParameters := omit, + headers := omit} + } + /** @desc NameAddr default value for PAsserted(with sip scheme) field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_PAsserted := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := {host := "ims.net", portField :=omit}, + urlParameters := omit, + headers := omit} + } + /** @desc NameAddr default value for PAsserted2(with tel scheme) field + * used in groupe 501 + */ + NameAddr PX_SIP_NameAddr_PAsserted2 := {displayName := omit, // optional charstring + addrSpec := { + scheme := c_telScheme, // contains "tel" + userInfo := {userOrTelephoneSubscriber:= "+491234567", password:=omit}, + hostPort := omit, + urlParameters := omit, + headers := omit} + } + } + +}// end module SipIsup_PIXITS \ No newline at end of file diff --git a/AtsCommon/SipIsup_SS_TCFunctions.ttcn b/AtsCommon/SipIsup_SS_TCFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b442b33065fd0bb94e45a7af8733f185204e48b2 --- /dev/null +++ b/AtsCommon/SipIsup_SS_TCFunctions.ttcn @@ -0,0 +1,46 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module provides the TC functions used by the test component + * for SIP side of the SUT. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + */ +module SipIsup_SS_TCFunctions { + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + //LibIms + import from LibIms_Templates all; + import from LibIms_Steps all; + import from LibIms_SIPTypesAndValues all; + import from LibIms_Interface all; + //IsupAts + import from SipIsup_ISUP_ModuleParams all; // for timer values e.g. PX: T7, T9 + import from SipIsup_PIXITS all; + import from SipIsup_ISUP_Constants all; + + //Type to adress the IUT to send it message + //type Address address; + type record address + { + //HostPort + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + }with { encode "SIPCodec" } + + +} // end module SipIsup_SIP_TCFunctions diff --git a/AtsCommon/SipIsup_TestConfiguration.ttcn b/AtsCommon/SipIsup_TestConfiguration.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..32e089eedb2014a8619803faca9e9d7407094c59 --- /dev/null +++ b/AtsCommon/SipIsup_TestConfiguration.ttcn @@ -0,0 +1,206 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module contains functions which implement the + * configuration of the SUT adapter and mapping of test + * components for establishing and tearing down different + * test configurations. + * + */ + module SipIsup_TestConfiguration { + + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all; + //AtsSipIsup + import from SipIsup_TestSystem all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Interface all; + //LibIms + import from LibIms_SIPTypesAndValues all; + import from LibIms_Interface all; + + group auxSipFunction { + + /* + ** @desc f_IncCSeq returns an input parameter incremented by 1000 + ** reason is to run the next testcase with a higher CSeq value + */ + function f_IncCSeq(inout CSeq p_cSeq) + runs on ServerSyncComp + { p_cSeq.seqNumber := p_cSeq.seqNumber + 1000; + return + }; + // end f_IncCSeq + + }//end group auxSipFunction + + group syncCommands { + const charstring c_syncSip_Isup := "syncSipIsup"; + }//end group syncCommands + + group cfUp { + + /** + * + * @desc Creates test configuration of Ims and Isup component + * @param p_imsComponen ims component + * @param p_isupBiccComponent isup component + */ + function f_cf_imsIsupUp( out ImsComponent p_imsComponent, + out IsupBiccComponent p_isupBiccComponent) + runs on ServerSyncComp { + //Variables + var FncRetCode v_ret := e_success; + //Create + p_imsComponent := ImsComponent.create ; + p_isupBiccComponent := IsupBiccComponent.create ; + //Connect + connect(p_imsComponent:syncPort, self:syncPort) ; + map(p_imsComponent:SIPP, system:IMSCN1); // Init test Configuration + // TODO check if opPort will be used + //if (PX_SIP_CheckConversation) + // {map(p_imsComponent:opPort, system:opPortS);} // Init test Configuration + connect(p_isupBiccComponent:syncPort, self:syncPort) ; + //Map + if (PX_IsupBicc_CheckConversation or PX_IsupBicc_CheckRinging) + {map(p_isupBiccComponent:opPort_IsupBicc, system:opPortS_IsupBicc);} // Init test Configuration +// note-axr: workaround to avoid enumerated PIXIT parameter +// if (PX_ISUP_IsupOrBicc == selectIsup) { + if (PX_ISUP_Isup) { + map(p_isupBiccComponent:IsupBiccP, system:atm); + } + else { + map(p_isupBiccComponent:IsupBiccP, system:atm); + } + //map(p_sipComponent:SIPP, system:UDP1); + + f_setVerdict(v_ret); + }//end f_cf_imsIsupUp + + }//end group cfUp + + group cfDown { + + /** + * + * @desc Deletes test configuration of Ims and Isup component + * @param p_imsComponen ims component + * @param p_isupBiccComponent isup component + */ + function f_cf_imsIsupDown( in ImsComponent p_imsComponent, + in IsupBiccComponent p_isupBiccComponent) + runs on ServerSyncComp { + var FncRetCode v_ret; + f_serverWaitForAllClientsToStop(); + //Variables + v_ret := e_success; + //Disconnect + disconnect(p_imsComponent:syncPort, self:syncPort) ; + disconnect(p_isupBiccComponent:syncPort, self:syncPort) ; + //Unmap +// note-axr: workaround to avoid enumerated PIXIT parameter +// if (PX_ISUP_IsupOrBicc == selectIsup) { + if (PX_ISUP_Isup) { + unmap(p_isupBiccComponent:IsupBiccP, system:atm ); // IsupP + } + else { + unmap(p_isupBiccComponent:IsupBiccP, system:atm); // BiccP + } + unmap(p_imsComponent:SIPP, system:IMSCN1); + // TODO check if opPort will be used + //if (PX_SIP_CheckConversation) + // {unmap(p_imsComponent:opPort, system:opPortS);} + if (PX_IsupBicc_CheckConversation or PX_IsupBicc_CheckRinging) + {unmap(p_isupBiccComponent:opPort_IsupBicc, system:opPortS_IsupBicc);} // Init test Configuration + + }//end f_cf_imsIsupDown + + group syncNoStop // Same functions as in LibCommon but without call of f_serverWaitForAllClientsToStop() + { + /* @desc Implements synchronization of client from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to client. + * Waits for PX_TSYNC_TIME_LIMIT to let client + * finish executing behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync1Client( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(1,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync2Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 3 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync3Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(3,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + + /* @desc Implements synchronization of 4 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync4Clients( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(4,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + } + } //end group syncNoStop + + } //end group cfDown + + + +} // end module SipIsup_TestConfiguration \ No newline at end of file diff --git a/AtsCommon/SipIsup_TestExecution.ttcn b/AtsCommon/SipIsup_TestExecution.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0882afe4e2cd558414f7035882f528398f64d436 --- /dev/null +++ b/AtsCommon/SipIsup_TestExecution.ttcn @@ -0,0 +1,1627 @@ +module SipIsup_TestExecution { + + //LobCommon + import from LibCommon_BasicTypesAndValues all; + //AtsCommon + import from SipIsup_PIXITS all; + import from SipIsup_Testcases all; + //SipAts + import from LibSip_SIPTypesAndValues all; + import from SipIsup_PICS all; + + control { + + //Variables + var UInt8 i, j := 0; + //var UInt8 j := 0; + var CSeq v_CSeq_s := { + fieldName := CSEQ_E, + seqNumber := 0, + method := "INVITE" + }; + + /* Mnemonic selection condition: PICS 4/5 and ( not PICS 4/4 ) */ + if (f_selection_102()) { + execute(TC_101_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_059()) { + execute(TC_101_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + if (f_selection_062()) { + execute(TC_101_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and ( not PICS 4/1 ) ) */ + if (f_selection_057()) { + execute(TC_101_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 ) and ( PICS 1/6 ) */ + if (f_selection_067()) { + execute(TC_101_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_060()) { + execute(TC_101_006(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_063()) { + execute(TC_101_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and ( not PICS 4/1 ) ) */ + if (f_selection_065()) { + execute(TC_101_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + if (f_selection_004()) { + execute(TC_101_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_059()) { + execute(TC_101_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_062()) { + execute(TC_101_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( ( not PICS 1/6 ) and PICS 4/1 ) */ + if (f_selection_058()) { + execute(TC_101_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/5 ) ) and ( PICS 1/6 ) */ + if (f_selection_001()) { + execute(TC_101_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_060()) { + execute(TC_101_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/5 and PICS 1/6 and PICS 4/1 ) */ + if (f_selection_063()) { + execute(TC_101_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/6 and PICS 4/1 ) */ + if (f_selection_066()) { + execute(TC_101_016(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( ( not PICS 1/9 ) ) */ + if (f_selection_029()) { + execute(TC_101_017(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( PICS 1/9 ) and ( ( not PICS 4/23 ) ) */ + if (f_selection_030()) { + execute(TC_101_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 ) and ( ( not PICS 4/24 ) ) */ + if (f_selection_076()) { + execute(TC_101_019(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=8; i:=i+1) { + execute(TC_101_020(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=8; i:=i+1) { + execute(TC_101_021(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_101_022(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_101_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/7 ) ) */ + if (f_selection_043()) { + execute(TC_101_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_007()) { + execute(TC_101_026(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_028(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/7 ) */ + if (f_selection_045()) { + execute(TC_101_029(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and PICS 4/19 */ + if (f_selection_085()) { + execute(TC_101_030(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and ( not PICS 4/19 ) */ + if (f_selection_084()) { + execute(TC_101_031(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 ) and ( PICS 1/9 ) and ( PICS 4/23 ) */ + if (f_selection_005()) { + execute(TC_101_032(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/4 and PICS 4/5 ) and ( PICS 1/4 and PICS 4/1 ) */ + if (f_selection_061()) { + execute(TC_103_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_104_001(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_104_002(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_105_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_105_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_105_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_106_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/5 */ + if (f_selection_103()) { + execute(TC_106_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/5 ) */ + if (f_selection_019()) { + execute(TC_106_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_107_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/5 */ + if (f_selection_103()) { + execute(TC_107_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/5 ) */ + if (f_selection_019()) { + execute(TC_107_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=38; i:=i+1) { + execute(TC_108_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_005(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=38; i:=i+1) { + execute(TC_108_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=11; i:=i+1) { + execute(TC_108_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_011(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_108_012(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/15 ) and PICS 4/21 */ + if (f_selection_011()) { + execute(TC_108_013(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/6 */ + if (f_selection_105()) { + execute(TC_108_101(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_108_102(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_010()) { + execute(TC_108_103(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/4 */ + if (f_selection_093()) { + execute(TC_108_104(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/4 */ + if (f_selection_093()) { + execute(TC_108_105(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_106(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_107(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_108(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_109(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_110(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_108_111(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_012()) { + execute(TC_109_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_012()) { + execute(TC_109_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_095()) { + execute(TC_109_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_095()) { + execute(TC_109_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_006(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_007(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_008(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_009(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_010(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_110_011(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_111_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/14 */ + if (f_selection_100()) { + execute(TC_111_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_112_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_006(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/150 ) */ + if (f_selection_017()) { + execute(TC_301_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/5 ) */ + if (f_selection_003()) { + execute(TC_301_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_016(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_020(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_028(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + execute(TC_301_031(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_032(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_037(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_038(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_039(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_040(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_041(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_042(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_043(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 4/15 ) ) and ( PICS 1/4 ) */ + if (f_selection_002()) { + execute(TC_301_044(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_045(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_068()) { + execute(TC_301_046(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_048(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_069()) { + execute(TC_301_049(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_069()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_301_051(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=9; i:=i+1) { + execute(TC_301_053(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_301_054(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/1 */ + if (f_selection_076()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_301_055(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_056(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_057(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_058(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 1/9 ) */ + if (f_selection_true()) { + execute(TC_301_059(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_301_060(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/8 ) */ + if (f_selection_046()) { + execute(TC_301_061(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + if (f_selection_044()) { + execute(TC_301_062(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( PICS 1/8 ) */ + if (f_selection_046()) { + execute(TC_301_063(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/9 ) and ( ( not PICS 1/8 ) ) */ + if (f_selection_044()) { + execute(TC_301_064(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_302_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 1/5 ) */ + if (f_selection_050()) { + execute(TC_302_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_053()) { + execute(TC_302_007(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_055()) { + execute(TC_302_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/7 and PICS 4/15 ) and ( PICS 1/5 and PICS 4/2 ) */ + if (f_selection_055()) { + execute(TC_302_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) ) */ + if (f_selection_052()) { + execute(TC_302_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_051()) { + execute(TC_302_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_016(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_017(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 1/4 and PICS 4/2 ) */ + if (f_selection_054()) { + execute(TC_302_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 1/4 ) */ + if (f_selection_049()) { + execute(TC_302_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/2 ) and ( PICS 3/8 ) */ + if (f_selection_048()) { + execute(TC_302_020(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 1/9 ) ) and ( PICS 4/9 ) */ + if (f_selection_034()) { + execute(TC_303_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_033()) { + execute(TC_303_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( PICS 4/9 ) */ + if (f_selection_022()) { + execute(TC_303_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_033()) { + execute(TC_303_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + if (f_selection_077()) { + execute(TC_303_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/1 */ + if (f_selection_080()) { + execute(TC_303_008(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/2 */ + if (f_selection_082()) { + execute(TC_303_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_021()) { + execute(TC_303_015(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_032()) { + execute(TC_303_016(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and not ( PICS 4/24 ) */ + if (f_selection_077()) { + execute(TC_303_017(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 and PICS 3/1 */ + if (f_selection_080()) { + execute(TC_303_018(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_019(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_020(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_021(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 3/1 ) and ( ( not PICS 4/9 ) ) */ + if (f_selection_047()) { + execute(TC_303_022(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_026(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_028()) { + execute(TC_303_027(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/14 ) */ + if (f_selection_040()) { + execute(TC_303_028(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 ) */ + if (f_selection_025()) { + execute(TC_303_029(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + if (f_selection_037()) { + execute(TC_303_030(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/2 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 ) */ + if (f_selection_042()) { + execute(TC_303_032(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_026()) { + execute(TC_303_033(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_038()) { + execute(TC_303_034(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_027()) { + execute(TC_303_035(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_039()) { + execute(TC_303_036(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and PICS 4/5 and PICS 4/15 and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_027()) { + execute(TC_303_037(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_039()) { + execute(TC_303_038(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_039(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_040(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_041(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_042(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_024()) { + execute(TC_303_043(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and PICS 4/9 ) */ + if (f_selection_036()) { + execute(TC_303_044(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) */ + if (f_selection_078()) { + execute(TC_303_045(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 ) */ + if (f_selection_081()) { + execute(TC_303_046(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/2 and ( not PICS 4/15 ) ) and ( PICS 3/8) ) and ( PICS 4/2 ) */ + if (f_selection_041()) { + execute(TC_303_047(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_048(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_049(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_050(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_051(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/1 and PICS 3/1 and ( not PICS 4/15 ) and not ( PICS 4/24 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_023()) { + execute(TC_303_052(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and ( not PICS 4/15 ) ) and ( PICS 4/2 and ( not PICS 4/9 ) ) */ + if (f_selection_035()) { + execute(TC_303_053(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/1 ) and ( PICS 4/9 ) */ + if (f_selection_031()) { + execute(TC_303_054(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/2 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_106()) { + execute(TC_303_055(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 1/9 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_107()) { + execute(TC_303_056(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 1/2 and PICS 3/1 and PICS 4/24 ) and ( not PICS 4/9 ) */ + if (f_selection_108()) { + execute(TC_303_057(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_304_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/1 */ + if (f_selection_091()) { + execute(TC_304_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_305_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/1 */ + if (f_selection_076()) { + execute(TC_306_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/2 */ + if (f_selection_079()) { + execute(TC_306_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_307_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_003(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_307_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + execute(TC_307_005(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/10 ) */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_307_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=6; j:=j+1) { + execute(TC_307_009(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=6; i:=i+1) { + execute(TC_307_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=6; j:=j+1) { + execute(TC_307_011(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/11 */ + if (f_selection_095()) { + execute(TC_308_004(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=25; i:=i+1) { + execute(TC_308_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/12 */ + if (f_selection_096()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_308_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/12 ) */ + if (f_selection_013()) { + for (i:=1; i<=13; i:=i+1) { + execute(TC_308_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + execute(TC_308_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=25; j:=j+1) { + execute(TC_308_013(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/11 ) */ + if (f_selection_116()) { + for (i:=1; i<=4; i:=i+1) { + execute(TC_308_014(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 4/10 */ + if (f_selection_010()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=25; j:=j+1) { + execute(TC_308_017(v_CSeq_s, i, j)); + } + } + } + /* Mnemonic selection condition: ( not PICS 4/17 ) */ + if (f_selection_018()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_308_018(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/17 */ + if (f_selection_101()) { + for (i:=1; i<=5; i:=i+1) { + execute(TC_308_019(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + execute(TC_308_020(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/10 */ + if (f_selection_094()) { + execute(TC_308_021(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 3/2 */ + if (f_selection_092()) { + execute(TC_308_022(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 3/4 ) */ + if (f_selection_009()) { + execute(TC_308_023(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_024(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_025(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 4/5 and PICS 4/15 ) and ( PICS 4/2 )*/ + if (f_selection_104()) { + execute(TC_308_026(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_309_001(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_002(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_003(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_005(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_006(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_007(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_008(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_009(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_011(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_012(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_013(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_309_014(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=5; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_015(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_016(v_CSeq_s)); + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_309_017(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=4; i:=i+1) { + for (j:=1; j<=2; j:=j+1) { + execute(TC_309_018(v_CSeq_s, i, j)); + } + } + } + if (f_selection_true()) { + execute(TC_309_019(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/9 */ + if (f_selection_114()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_004(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 */ + if (f_selection_110()) { + execute(TC_501_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 and PICS 6/9 */ + if (f_selection_113()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/3 */ + if (f_selection_112()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_010(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_011(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_012(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_501_013(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_501_014(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_501_015(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_016(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_017(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_018(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_019(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/3 */ + if (f_selection_115()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_020(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 6/1 and PICS 6/11 */ + if (f_selection_111()) { + execute(TC_501_021(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 */ + if (f_selection_083()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_022(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/1 and PICS 6/12 */ + if (f_selection_086()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_023(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/1 and PICS 6/3 and PICS 6/12 */ + if (f_selection_087()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_501_024(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_001(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_002(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_502_003(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_502_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_006(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_502_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_503_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 5/6 ) and ( PICS 4/14 ) */ + if (f_selection_070()) { + execute(TC_503_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_504_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: NOT PICS 5/10 */ + if (f_selection_075()) { + execute(TC_504_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_505_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_505_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/18 */ + if (f_selection_006()) { + execute(TC_505_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_506_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 9/1 */ + if (f_selection_120()) { + execute(TC_507_001(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 9/1 ) */ + if (f_selection_020()) { + execute(TC_507_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_508_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_509_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_510_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_510_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_511_001(v_CSeq_s)); + } + /* Mnemonic selection condition: not PICS 11/2 */ + if (f_selection_073()) { + execute(TC_511_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 12/1 */ + if (f_selection_090()) { + execute(TC_512_001(v_CSeq_s)); + } + /* Mnemonic selection condition: NOT PICS 12/1 */ + if (f_selection_074()) { + execute(TC_512_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_513_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_514_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 */ + if (f_selection_083()) { + execute(TC_515_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 1/9 and PICS 6/12 */ + if (f_selection_088()) { + execute(TC_515_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_601_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 4/13 */ + if (f_selection_097()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) */ + if (f_selection_014()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_005(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_006(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_007(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and ( not PICS 4/20 ) */ + if (f_selection_098()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_008(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + if (f_selection_015()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_009(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and ( not PICS 4/20 ) */ + if (f_selection_098()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_010(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and ( not PICS 4/20 ) */ + if (f_selection_015()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_011(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_012(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 4/13 and PICS 4/20 */ + if (f_selection_099()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_013(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_014(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( not PICS 4/13 ) and PICS 4/20 */ + if (f_selection_016()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_601_015(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_602_001(v_CSeq_s, i)); + } + } + if (f_selection_true()) { + execute(TC_602_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_004(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_005(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_602_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_603_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 5/6 */ + if (f_selection_109()) { + execute(TC_603_002(v_CSeq_s)); + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/2 ) and ( PICS 5/10 ) */ + if (f_selection_072()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_003(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: ( PICS 8/1 ) and ( PICS 5/10 ) */ + if (f_selection_071()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_604_004(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/10 */ + if (f_selection_075()) { + execute(TC_604_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 8/2 and PICS 5/5 and PICS 5/18 */ + if (f_selection_118()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_605_001(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: PICS 8/1 PICS 5/5 and PICS 5/18 */ + if (f_selection_117()) { + for (i:=1; i<=2; i:=i+1) { + execute(TC_605_002(v_CSeq_s, i)); + } + } + /* Mnemonic selection condition: not PICS 5/10 */ + if (f_selection_006()) { + execute(TC_605_003(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_606_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_607_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_608_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_608_002(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_609_001(v_CSeq_s)); + } + if (f_selection_true()) { + execute(TC_610_001(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_002(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_003(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_004(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_005(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_006(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_007(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 11/1 and PICS 11/2 */ + if (f_selection_089()) { + execute(TC_610_008(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_009(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_010(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_011(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_012(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_013(v_CSeq_s)); + } + /* Mnemonic selection condition: ( not PICS 11/2 ) */ + if (f_selection_008()) { + execute(TC_610_014(v_CSeq_s)); + } + /* Mnemonic selection condition: ( ( not PICS 11/1 )or ( not PICS 11/3 ) ) */ + if (f_selection_119()) { + execute(TC_610_015(v_CSeq_s)); + } + /* Mnemonic selection condition: PICS 12/1 */ + if (f_selection_090()) { + execute(TC_611_001(v_CSeq_s)); + } + /* Mnemonic selection condition: NOT PICS 12/1 */ + if (f_selection_074()) { + execute(TC_611_002(v_CSeq_s)); + } + + + + }//end control + +} // end module SipIsup_TestExecution \ No newline at end of file diff --git a/AtsCommon/SipIsup_TestSystem.ttcn b/AtsCommon/SipIsup_TestSystem.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bc988b98009a071c3f90e3d29f5195b492c7a858 --- /dev/null +++ b/AtsCommon/SipIsup_TestSystem.ttcn @@ -0,0 +1,164 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc Specifies component types used by the IPv6 ATS. + * Definitions are based on component type definitions + * from IPv6, SCOP and common synchronization libraries. + * + */ + module SipIsup_TestSystem { + + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + //LibSip + import from LibSip_Interface all; + + //AtsIsup + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + + /* + ** @desc The test system interface + */ + type component TestAdapter { + port IsupBiccPort atm; + port SipPort IMSCN1, IMSCN2; + port operatorPort_IsupBicc opPortS_IsupBicc; + } + + + //type component SipComponent is defined in SipIsup_SIP_TypesAndConf + + group CMTypes + { + type charstring CM_Message; + } // end group CMTypes + + + group SystemConfiguration + { + group TestComponents + { + group TestSystemInterfaces + { + type component IsupBiccInterfaces + { + port IsupBiccPort IsupP; // Port on the test system used when ISUP signalling is used. + port IsupBiccPort BiccP; // Port on the test system used when BICC signalling is used. + } + } // end Group TestSystemInterfaces + + group TestAbstractComponents + { + + type component IsupBiccComponent + { + // general variables + // current address to send TCP/UDP messages + // var address sent_label := {host := PX_IUT_IPADDR, portField := PX_IUT_PORT}; + + // current address to send UDP multicast messages + + // general timers + timer TWait := PX_ISUP_TWAIT; + timer TAck := PX_ISUP_TAC; + timer TNoAc := PX_ISUP_TNOAC; + timer TSync := PX_ISUP_TSYNC; + + // Timers for delaying messages to be transmitted, to simulate realistic response times to the SUT + timer TDelay_ACM := PX_TDelay_ACM; + timer TDelay_ANM := PX_TDelay_ANM; + timer TDelay_APM := PX_TDelay_APM; + timer TDelay_CGB := PX_TDelay_CGB; + timer TDelay_CON := PX_TDelay_CON; + timer TDelay_COT := PX_TDelay_COT; + timer TDelay_CPG := PX_TDelay_CPG; + timer TDelay_FAC := PX_TDelay_FAC; + timer TDelay_FAR := PX_TDelay_FAR; + timer TDelay_GRS := PX_TDelay_GRS; + timer TDelay_IDR := PX_TDelay_IDR; + timer TDelay_INF := PX_TDelay_INF; + timer TDelay_LOP := PX_TDelay_LOP; + timer TDelay_REL := PX_TDelay_REL; + timer TDelay_RES := PX_TDelay_RES; + timer TDelay_RLC := PX_TDelay_RLC; + timer TDelay_RSC := PX_TDelay_RSC; + timer TDelay_SAM := PX_TDelay_SAM; + timer TDelay_SUS := PX_TDelay_SUS; + timer TDelay_UNKNOWN := PX_TDelay_UNKNOWN; + timer ProtocolTimer; + + port IsupBiccPort IsupBiccP; + port Coordination cpA; + port Coordination cpB; + + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack:= c_initStringStack; + var Bit12 v_CircuitIdentityCode1; + var CallInstanceCode v_CallInstanceCode1; + var Bit12 v_CircuitIdentityCode2; + var CallInstanceCode v_CallInstanceCode2; + var Bit12 v_CircuitIdentityCodeDef; + var CallInstanceCode v_CallInstanceCodeDef; + var Bit4 v_SLS; + var Bit4 v_SLS2; + + //bearer states associated with cic1 and cic2: 0: not setup; 1: setup reuested; + //2: release requested; 3: setup + var integer v_ISUP_BearerState1; //state associated with cic1 + var integer v_ISUP_BearerState2; //state associated with cic2 + var boolean v_ACM_expected1; // First IAM sent, ACM pending, if true + var boolean v_ACM_expected2; // Second IAM sent, ACM pending, if true + + var default v_Default;// Generic default variable, used for activation + + var ISUP_BICC_MSG_ind v_IAM_r; // to store received IAM message and extract values + var ISUP_BICC_MSG_ind v_ACM_r; // to store a received ACM message and extract values + var ISUP_BICC_MSG_ind v_ANY_r; // to store a received any message and extract values + + port SyncPort syncSendPort; + port SyncPort syncPort; + port operatorPort_IsupBicc opPort_IsupBicc; + timer tc_sync := PX_ISUP_TSYNC_TIME_LIMIT; + + }// component IsupBiccComponent + + }// end Group TestAbstractComponents + + }// end group TestComponents + + group Ports + { + //used for communication with the operator + + type port operatorPort_IsupBicc procedure {inout s_IsupBicc_conversation; inout s_IsupBicc_ringing}; + type port IsupBiccPort message + { + out ISUP_BICC_MSG_req; /* ASP used to send an ISUP/BICC message */ + in ISUP_BICC_MSG_ind; /* ASP used to receive an ISUP/BICC message */ + out InitializeIsupBicc_req; /* ASP used to Initialize the test system. */ + in InitializeIsupBicc_cnf; /* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ + out BearerSetup_req; /* For BICC: request TS to setup the bearer connection between TS and SUT. */ + in BearerSetup_acc; /* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ + in BearerSetup_ind; /* For BICC: Indication that the bearer connection between TS and SUT has been setup by the SUT. */ + out BearerRelease_req; /* For BICC: request to release the established bearer connection. */ + in BearerRelease_cnf; /* For BICC: confirmation that the requested bearer is released. */ + in BearerRelease_ind; /* Indication of whether the bearer is successfully released. */ + } + + type port Coordination message + { + inout CM_Message + }with {extension "internal" } + } // End Group Ports + + } //end group SystemConfiguration + signature s_IsupBicc_conversation (in charstring text, out boolean answer); + signature s_IsupBicc_ringing (in charstring text, out boolean answer); + +} // end module SipIsup_TestSystem diff --git a/AtsCommon/SipIsup_Testcases.ttcn b/AtsCommon/SipIsup_Testcases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a0f5b6bd8c1f1dbe09e4125bcbb82aee69fb4c3f --- /dev/null +++ b/AtsCommon/SipIsup_Testcases.ttcn @@ -0,0 +1,67 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module contains test cases and their test case functions + * for the SIP-SIP and SIP-ISUP interworking. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + */ + module SipIsup_Testcases { + + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all; + //AtsCommon + import from SipIsup_TestConfiguration all; + //Ats Sip + import from SipIsup_TestSystem all; + //import from LibSip_SIPTypesAndValues all; + import from SipIsup_SS_TCFunctions all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Interface all; + //LibIms + import from LibIms_Interface all; + + import from SipIsup_PIXITS all; + + //Ats Isup + //import from SipIsup_ISUP_Configuration all; + import from SipIsup_ISUP_TCFunctions all; + import from SipIsup_ISUP_ModuleParams all; + +//TC_Reset_Circuits() + testcase TC_Reset_Circuits(inout CSeq p_CSeq_s) + runs on ServerSyncComp + system TestAdapter { + //Variables + var ImsComponent v_imsComponent ; + var IsupBiccComponent v_isupBiccComponent ; + f_cf_imsIsupUp(v_imsComponent, v_isupBiccComponent); + + v_isupBiccComponent.start(f_Reset_Circuits()); + + f_cf_imsIsupDown(v_imsComponent, v_isupBiccComponent); + + } // end TC_Reset_Circuits() + +//TC_Reset_Groups() + testcase TC_Reset_Groups(inout CSeq p_CSeq_s) + runs on ServerSyncComp + system TestAdapter { + //Variables + var ImsComponent v_imsComponent ; + var IsupBiccComponent v_isupBiccComponent ; + f_cf_imsIsupUp(v_imsComponent, v_isupBiccComponent); + + v_isupBiccComponent.start(f_Reset_Groups()); + + f_cf_imsIsupDown(v_imsComponent, v_isupBiccComponent); + + } // end TC_Reset_Groups() + +} // end module SipIsup_Testcases diff --git a/IsupAts/SipIsup_ISUP_Constants.ttcn b/IsupAts/SipIsup_ISUP_Constants.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..af3f08b8a63dec723ef1361ecb764c03a69fff69 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_Constants.ttcn @@ -0,0 +1,1137 @@ +/* + * @author STF 36 + * @version $Id$ + * @desc This module provides ISUP/BICC-related constants used by the test component +*/ +module SipIsup_ISUP_Constants +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_ParamTypes all; + +group Constants { + +/* Value 'Connected' of bit field element 'action indicator' in IE 'Action indicator'. */ +const Bit1 c_AI_actInd_conn := '0'B; + +/* Value 'no indication' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_noInd := '00'B; + +/* Value 'ordinary subscriber' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_ordSub := '01'B; + +/* Value 'payphone' of bit field element 'Called party's category indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPcatInd_payPh := '10'B; + +/* Value 'connect when free (national use)' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_conWfree := '10'B; + +/* Value 'no indication' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_noInd := '00'B; + +/* Value 'subscriber free' of bit field element 'Called party status indicator' in IE 'Backward call Indicators'. */ +const Bit2 c_BCI_cldPstatInd_subFree := '01'B; + +/* Value 'incoming echo control device included' of bit field element 'Echo control device indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_eCtrlDevInd_incl := '1'B; + +/* Value 'incoming echo control device not included' of bit field element 'Echo control device indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_eCtrlDevInd_notIncl := '0'B; + +/* Value 'interworking encountered' of bit field element 'Interworking indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_interwInd_Interw := '1'B; + +/* Value 'no interworking encountered (Signalling System No. 7 all the way)' of bit field element 'Interworking indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_interwInd_noInterw := '0'B; + +/* Value 'terminating access ISDN' of bit field element 'ISDN access indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnAccInd_ISDN := '1'B; + +/* Value 'terminating access non-ISDN' of bit field element 'ISDN access indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnAccInd_notISDN := '0'B; + +/* Value 'ISUP not used all the way' of bit field element 'ISDN user part indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnUpInd_NotUsed := '0'B; + +/* Value 'ISUP used all the way' of bit field element 'ISDN user part indicator' in IE 'Backward call Indicators'. */ +const Bit1 c_BCI_isdnUpInd_used := '1'B; + +/* Value '#16 Normal call clearing' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_16 := 16; + +/* Value '#31 Normal, unspecified' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_31 := 31; + +/* Value '#41 Temporary failure' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_41 := 41; + +/* Value '#47 Resource unavailable, unspecified' of element 'Cause indicator' in IE 'Cause'. */ +const integer c_CAU_CauseVal_47 := 47; + +/* Value 'CCBS possible' of element 'Diagnostics' in IE 'Cause'. */ +const octetstring c_CAU_cDiagn_CCBSposs := '01'O; + +/* Value 'User-to-User parameter name' of element 'Diagnostics' in IE 'Cause'. */ +const octetstring c_CAU_cDiagn_uupName := '2A'O; + +/* Value 'Network beyond interworking point' of bit field element 'Location' in IE 'Cause'. */ +const Bit4 c_CAU_cLocation_ntwBeyond := '1010'B; + +/* Value 'CCNR possible' of bit field element 'CCNR possible indicator' in IE 'CCNR possible indicator'. */ +const Bit1 c_CCNPI_ccnrPosblInd_notPsbl := '1'B; + +/* Value 'CCNR not possible' of bit field element 'CCNR possible indicator' in IE 'CCNR possible indicator'. */ +const Bit1 c_CCNPI_ccnrPosblInd_psbl := '0'B; + +/* Value 'presentation allowed with redirection number' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_alwdWith := '010'B; + +/* Value 'presentation allowed without redirection number' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_alwdWithout := '011'B; + +/* Value 'presentation not allowed' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_notAlwd := '001'B; + +/* Value 'Unknown' of bit field element 'Notification subscription options' in IE 'Call diversion information'. */ +const Bit3 c_CDI_notSubscrOptions_unknown := '000'B; + +/* Value 'deflection during alerting' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_defAlert := '0100'B; + +/* Value 'deflection immediate response' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_defImRsp := '0101'B; + +/* Value 'no reply' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_noRepl := '0010'B; + +/* Value 'mobile subscriber not reachable' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_notReach := '0110'B; + +/* Value 'User busy' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_uBusy := '0001'B; + +/* Value 'unconditional' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_unCond := '0011'B; + +/* Value 'Unknown' of bit field element 'Redirecting reason' in IE 'Call diversion information'. */ +const Bit4 c_CDI_redirReason_unkn := '0000'B; + +/* Value 'hardware failure oriented' of bit field element 'Circuit Group Supervision Message Type Indicator' in IE 'Circuit Group Supervision Message Type'. */ +const Bit2 c_CGBMT_cgSupMtypeInd_hwOrtd := '01'B; + +/* Value 'maintenance oriented' of bit field element 'Circuit Group Supervision Message Type Indicator' in IE 'Circuit Group Supervision Message Type'. */ +const Bit2 c_CGBMT_cgSupMtypeInd_maint := '00'B; + +/* Value 'routing to internal network number allowed' of bit field element 'Internal network number indicator' in IE 'Called party number'. */ +const Bit1 c_CLD_intNtwNum_alwd := '0'B; + +/* Value 'routing to internal network number not allowed' of bit field element 'Internal network number indicator' in IE 'Called party number'. */ +const Bit1 c_CLD_intNtwNum_notAlwd := '1'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Called party number'. */ +const Bit7 c_CLD_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_telex := '100'B; + +/* Value 'unknown' of bit field element 'Numbering plan indicator' in IE 'Called party number'. */ +const Bit3 c_CLD_numPlanInd_unknown := '000'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_aprInd_restrNtwk := '11'B; + +/* Value 'routing to internal network number allowed' of bit field element 'Internal network number indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_intNtwNum_alwd := '0'B; + +/* Value 'routing to internal network number not allowed' of bit field element 'Internal network number indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_intNtwNum_notAlwd := '1'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown' of bit field element 'Nature of address indicator' in IE 'Calling party number'. */ +const Bit7 c_CLI_natAddrInd_unknown := '0000000'B; + +/* Value 'complete' of bit field element 'Number incomplete indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_numIncmplInd_cmpl := '0'B; + +/* Value 'incomplete' of bit field element 'Number incomplete indicator' in IE 'Calling party number'. */ +const Bit1 c_CLI_numIncmplInd_inCmpl := '1'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Calling party number'. */ +const Bit3 c_CLI_numPlanInd_telex := '100'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_screenInd_ntwProv := '11'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Calling party number'. */ +const Bit2 c_CLI_screenInd_userProv := '01'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Connected number'. */ +const Bit7 c_CNN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Connected number'. */ +const Bit3 c_CNN_numPlanInd_telex := '100'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_screenInd_ntwProv := '11'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Connected number'. */ +const Bit2 c_CNN_screenInd_userProv := '01'B; + +/* Value 'notification required' of bit field element 'connect Type' in IE 'Connect Type'. */ +const Bit2 c_CNT_connType_notReq := '00'B; + +/* Value 'ordinary calling subscriber' of bit field element 'Calling party's category value' in IE 'Calling party's category'. */ +const Bit8 c_CPC_cPartyCat_ordSubs := '00001010'B; + +/* Value 'continuity check failed' of bit field element 'Continuity indicator' in IE 'Continuity indicators'. */ +const Bit1 c_CTI_contInd_failed := '0'B; + +/* Value 'continuity check successful' of bit field element 'Continuity indicator' in IE 'Continuity indicators'. */ +const Bit1 c_CTI_contInd_succ := '1'B; + +/* Value 'ALERTING' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_alert := '0000001'B; + +/* Value 'call forwarded on busy' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfb := '0000100'B; + +/* Value 'call forwarded on no reply (national use)' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfNoRepl := '0000101'B; + +/* Value 'call forwarded unconditional (national use)' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_cfu := '0000110'B; + +/* Value 'in-band information or an appropriate pattern is now available' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_inBand := '0000011'B; + +/* Value 'PROGRESS' of bit field element 'event indicator' in IE 'Event information'. */ +const Bit7 c_EIF_eventInd_progr := '0000010'B; + +/* Value 'end-to-end information available' of bit field element 'End-to-end information indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_eToEndInfoInd_EtoEinfo := '1'B; + +/* Value 'no end-to-end information available' of bit field element 'End-to-end information indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_eToEndInfoInd_noEtoEinfo := '0'B; + +/* Value 'no end-to-end method available (only link-by-link method available)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_noEmethod := '00'B; + +/* Value 'pass-along and SCCP methods available (national use)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_paSccp := '11'B; + +/* Value 'pass-along method available (national use)' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_passAlong := '01'B; + +/* Value 'SCCP method available' of bit field element 'End-to-end method available' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_eToEndMavail_sccp := '10'B; + +/* Value 'interworking encountered' of bit field element 'Interworking indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_interwInd_Interw := '0'B; + +/* Value 'no interworking encountered (Signalling System No. 7 all the way)' of bit field element 'Interworking indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_interwInd_noInterw := '1'B; + +/* Value 'originating access ISDN' of bit field element 'ISDN access indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnAccInd_ISDN := '1'B; + +/* Value 'originating access non-ISDN' of bit field element 'ISDN access indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnAccInd_notISDN := '0'B; + +/* Value 'ISUP not used all the way' of bit field element 'ISDN user part indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnUpInd_NotUsed := '0'B; + +/* Value 'ISUP used all the way' of bit field element 'ISDN user part indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_isdnUpInd_used := '1'B; + +/* Value 'ISDN user part not required all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_notReq := '01'B; + +/* Value 'ISDN user part preferred all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_pref := '00'B; + +/* Value 'ISDN user part required all the way' of bit field element 'ISDN user part preference indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_isdnUpPrefInd_requi := '10'B; + +/* Value 'call to be treated as an international' of bit field element 'National/international call indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_nInatCallInd_internat := '1'B; + +/* Value 'call to be treated as a national call' of bit field element 'National/international call indicator' in IE 'Forward call Indicators'. */ +const Bit1 c_FCI_nInatCallInd_nat := '0'B; + +/* Value 'connectionless and connection oriented methods available (national use)' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_both := '11'B; + +/* Value 'connectionless method available (national use' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_conLess := '01'B; + +/* Value 'connection oriented method available' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_conOrient := '10'B; + +/* Value 'no indication' of bit field element 'SCCP method indicator' in IE 'Forward call Indicators'. */ +const Bit2 c_FCI_sccpMind_noInd := '00'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Generic number'. */ +const Bit7 c_GEN_natAddrInd_unknown := '0000010'B; + +/* Value 'complete' of bit field element 'Number incomplete indicator' in IE 'Generic number'. */ +const Bit1 c_GEN_numIncmplInd_cmpl := '0'B; + +/* Value 'incomplete' of bit field element 'Number incomplete indicator' in IE 'Generic number'. */ +const Bit1 c_GEN_numIncmplInd_inCmpl := '1'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Generic number'. */ +const Bit3 c_GEN_numPlanInd_telex := '100'B; + +/* Value 'additional called number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_cldNum := '00000001'B; + +/* Value 'additional calling party number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_cliNum := '00000110'B; + +/* Value 'additional connected number' of bit field element 'Number qualifier indicator' in IE 'Generic number'. */ +const Bit8 c_GEN_numQualInd_connNum := '00000101'B; + +/* Value 'network provided' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_ntwProv := '11'B; + +/* Value 'user provided, not verified' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userNotVerif := '00'B; + +/* Value 'user provided, verified and passed' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userProv := '01'B; + +/* Value 'user provided, verified and failed' of bit field element 'Screening indicator' in IE 'Generic number'. */ +const Bit2 c_GEN_screenInd_userProvFailed := '10'B; + +/* Value 'conference disconnected' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_confDisc := '1000011'B; + +/* Value 'conference established' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_confEst := '1000010'B; + +/* Value 'call is diverting' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_diverting := '1111011'B; + +/* Value 'isolated' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_isolated := '1000101'B; + +/* Value 'reattached' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_reattached := '1000110'B; + +/* Value 'remote hold' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_remHold := '1111001'B; + +/* Value 'remote retrieval' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_remRetriv := '1111010'B; + +/* Value 'call is a waiting call' of bit field element 'generic notification indicator' in IE 'Generic notification indicator'. */ +const Bit7 c_GNI_gNotInd_waitCall := '1100000'B; + +/* Value 'request' of bit field element 'type' in IE 'Loop prevention indicators'. */ +const Bit1 c_LPI_lopReqResp_req := '0'B; + +/* Value 'calling party address requested' of bit field element 'Calling party address request indicator' in IE 'Information request indicators'. */ +const Bit1 c_IRI_cliAddress_req := '1'B; + +/* Value 'calling party address included' of bit field element 'Calling party address response indicator' in IE 'Information indicators'. */ +const Bit2 c_IID_cliAddress_included := '11'B; + +/* Value 'response' of bit field element 'type' in IE 'Loop prevention indicators'. */ +const Bit1 c_LPI_lopReqResp_rsp := '1'B; + +/* Value 'insufficient information' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_insuff := '00'B; + +/* Value 'no loop exists' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_noLoop := '01'B; + +/* Value 'simultaneous transfer' of bit field element 'response' in IE 'Loop prevention indicators'. */ +const Bit2 c_LPI_lopResponse_simult := '10'B; + +/* Value 'discard message' of bit field element 'Discard message indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_discMsgInd_discard := '1'B; + +/* Value 'do not discard message' of bit field element 'Discard message indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_discMsgInd_noDiscard := '0'B; + +/* Value 'discard information' of bit field element 'Pass on not possible indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_ponpInd_discInfo := '1'B; + +/* Value 'release call' of bit field element 'Pass on not possible indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_ponpInd_release := '0'B; + +/* Value 'do not release call' of bit field element 'Release call indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_releaseCallInd_noRel := '0'B; + +/* Value 'release call' of bit field element 'Release call indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_releaseCallInd_release := '1'B; + +/* Value 'do not send notification' of bit field element 'Send notification indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_sendNotificInd_notSnotif := '0'B; + +/* Value 'send notification' of bit field element 'Send notification indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_sendNotificInd_sendNotif := '1'B; + +/* Value 'end node interpretation' of bit field element 'Transit at intermediate exchange indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_transIntmedExchInd_endToEnd := '1'B; + +/* Value 'transit interpretation' of bit field element 'Transit at intermediate exchange indicator' in IE 'Message compatibility info'. */ +const Bit1 c_MCPI_transIntmedExchInd_transit := '0'B; + +/* Value 'MCID not requested' of bit field element 'MCID request indicator value' in IE 'MCID request indicators'. */ +const Bit1 c_MRQI_mcidRqInd_notReq := '0'B; + +/* Value 'MCID requested' of bit field element 'MCID request indicator value' in IE 'MCID request indicators'. */ +const Bit1 c_MRQI_mcidRqInd_req := '1'B; + +/* Value 'MCID included' of bit field element 'MCID response indicator value' in IE 'MCID response indicators'. */ +const Bit1 c_MRSI_mcidRsInd_incl := '1'B; + +/* Value 'MCID not included' of bit field element 'MCID response indicator value' in IE 'MCID response indicators'. */ +const Bit1 c_MRSI_mcidRsInd_notIncl := '0'B; + +/* Value 'continuity check not required' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_notReq := '00'B; + +/* Value 'continuity check performed on a previous circuit' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_performed := '10'B; + +/* Value 'continuity check required on this circuit' of bit field element 'Continuity check indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_cotChkInd_requi := '01'B; + +/* Value 'outgoing echo control device included' of bit field element 'Echo control device indicator' in IE 'Nature of connection indicators'. */ +const Bit1 c_NCI_eCtrlDevInd_included := '1'B; + +/* Value 'outgoing echo control device not included' of bit field element 'Echo control device indicator' in IE 'Nature of connection indicators'. */ +const Bit1 c_NCI_eCtrlDevInd_notIncl := '0'B; + +/* Value 'no satellite circuit in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_none := '00'B; + +/* Value 'one satellite circuit in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_one := '01'B; + +/* Value 'two satellite circuits in the connection' of bit field element 'Satellite indicator' in IE 'Nature of connection indicators'. */ +const Bit2 c_NCI_satInd_two := '10'B; + +/* Value 'call diversion may occur' of bit field element 'call diversion may occur indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_cDivMayOcc_mayOcc := '1'B; + +/* Value 'no indication' of bit field element 'call diversion may occur indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_cDivMayOcc_noInd := '0'B; + +/* Value 'in-band information or an appropriate pattern is now available' of bit field element 'in band information indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_inBandInfoInd_available := '1'B; + +/* Value 'no indication' of bit field element 'in band information indicator' in IE 'Optional Backward call Indicators'. */ +const Bit1 c_OBCI_inBandInfoInd_noInd := '0'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_aNotAlwd := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Original called number'. */ +const Bit2 c_OCN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Original called number'. */ +const Bit7 c_OCN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Original called number'. */ +const Bit3 c_OCN_numPlanInd_telex := '100'B; + +/* Value 'not requested' of bit field element 'Connected line identity request indicator' in IE 'Optional forward call indicators'. */ +const Bit1 c_OFCI_conLineIdRqInd_notReq := '0'B; + +/* Value 'requested' of bit field element 'Connected line identity request indicator' in IE 'Optional forward call indicators'. */ +const Bit1 c_OFCI_conLineIdRqInd_req := '1'B; + +/* Value 'non-CUG call' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_nonCug := '00'B; + +/* Value 'closed user group call, outgoing access allowed' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_outAllwd := '10'B; + +/* Value 'closed user group call, outgoing access not allowed' of bit field element 'Closed user group call indicator' in IE 'Optional forward call indicators'. */ +const Bit2 c_OFCI_cugCallInd_outNotAllwd := '11'B; + +/* releaseCallIndicator +Value 'Release call' of bit field element 'Release call indicator' in IE 'Parameter compatibility information/ParameterInstructionIndicator'. */ +const Bit1 c_PCI_relCall_ind_release := '0'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Redirecting number'. */ +const Bit2 c_RDGN_aprInd_restrNtwk := '11'B; + +/* Value 'international number' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Redirecting number'. */ +const Bit7 c_RDGN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirecting number'. */ +const Bit3 c_RDGN_numPlanInd_telex := '100'B; + +/* Value 'no reply (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_noReply := '0010'B; + +/* Value 'user busy (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_uBusy := '0001'B; + +/* Value 'unconditional (national use)' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_uncond := '0011'B; + +/* Value 'unknown/not available' of bit field element 'Original redirection reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_origRedirReason_unknown := '0000'B; + +/* Value 'call diverted, all redirection information presentation restricted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_divAllRestr := '100'B; + +/* Value 'call diverted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_diverted := '011'B; + +/* Value 'call diversion, redirection number presentation restricted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_divNumRestr := '110'B; + +/* Value 'no redirection (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_noRedir := '000'B; + +/* Value 'call rerouted, all redirection information presentation restricted' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouAllRestr := '010'B; + +/* Value 'call rerouted, redirection number presentation restricted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouNumRestr := '101'B; + +/* Value 'call rerouted (national use)' of bit field element 'Redirecting indicator' in IE 'Redirection information'. */ +const Bit3 c_RDNI_redirectInd_reRouted := '001'B; + +/* Value 'deflection during alerting' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_deflAlert := '0100'B; + +/* Value 'deflection immediate response' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_deflImm := '0101'B; + +/* Value 'mobile subscriber not reachable' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_mobSubsnReach := '0110'B; + +/* Value 'no reply' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_noReply := '0010'B; + +/* Value 'user busy' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_uBusy := '0001'B; + +/* Value 'unconditional' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_uncond := '0011'B; + +/* Value 'unknown/not available' of bit field element 'Redirecting reason' in IE 'Redirection information'. */ +const Bit4 c_RDNI_redirReason_unknown := '0000'B; + +/* Value 'presentation allowed' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_alwd := '00'B; + +/* Value 'address not available' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_aNotAv := '10'B; + +/* Value 'presentation restricted' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_restr := '01'B; + +/* Value 'reserved for restriction by the network' of bit field element 'Address presentation restricted indicator' in IE 'Redirection number'. */ +const Bit2 c_RDNN_aprInd_restrNtwk := '11'B; + +/* Value 'international numbe' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_internat := '0000100'B; + +/* Value 'national (significant) number' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_natSig := '0000011'B; + +/* Value 'network-specific number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_ntwSpec := '0000101'B; + +/* Value 'subscriber number (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_subscr := '0000001'B; + +/* Value 'unknown (national use)' of bit field element 'Nature of address indicator' in IE 'Redirection number'. */ +const Bit7 c_RDNN_natAddrInd_unknown := '0000010'B; + +/* Value 'Data numbering plan (ITU-T Recommendation X.121) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_data := '011'B; + +/* Value 'ISDN (Telephony) numbering plan (ITU-T Recommendation E.164)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_isdn := '001'B; + +/* Value 'Telex numbering plan (ITU-T Recommendation F.69) (national use)' of bit field element 'Numbering plan indicator' in IE 'Redirection number'. */ +const Bit3 c_RDNN_numPlanInd_telex := '100'B; + +/* Value 'presentation allowed' of bit field element 'Presentation restricted indicator' in IE 'Redirection number restriction'. */ +const Bit2 c_RDNR_presRestrInd_allowed := '00'B; + +/* Value 'presentation restricted' of bit field element 'Presentation restricted indicator' in IE 'Redirection number restriction'. */ +const Bit2 c_RDNR_presRestrInd_restr := '01'B; + +/* Value 'network initiated' of bit field element 'Suspend resume indicator' in IE 'Suspend resume indicators'. */ +const Bit1 c_SRI_suspResInd_ntw := '1'B; + +/* Value 'ISDN subscriber initiated' of bit field element 'Suspend resume indicator' in IE 'Suspend resume indicators'. */ +const Bit1 c_SRI_suspResInd_user := '0'B; + +/* Value '3.1 kHz audio' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_31Audio := '00000011'B; + +/* Value 'speech' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_speech := '00000000'B; + +/* Value '64 kbit/s unrestricted' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_64Kbs := '00000010'B; + +/* Value '64 kbit/s preferred' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement'. */ +const Bit8 c_TMR_tmrValue_64Kbs_pref := '00000110'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Transmission medium requirement value' in IE 'Transmission medium requirement' */ +const Bit8 c_TMR_tmrValue_tones := '00000101'B; + +/* Value '3.1 kHz audio' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_31Audio := '10000'B; + +/* Value 'Restricted digital information' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_restr := '01001'B; + +/* Value 'Speech' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_speech := '00000'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_tones := '10001'B; + +/* Value 'Unrestricted digital information' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_unrestr := '01000'B; + +/* Value 'Video' of bit field element 'Information Transfer Capability' in IE 'User service information'. */ +const Bit5 c_USI_infoTrfCap_video := '11000'B; + +/* Value 'A-Law' of bit field element 'User Information Layer 1 Protocol Indicator' in IE 'User service information'. */ +const Bit5 c_USI_userInfoL1_ALaw := '00011'B; + +/* Value 'mu-Law' of bit field element 'User Information Layer 1 Protocol Indicator' in IE 'User service information'. */ +const Bit5 c_USI_userInfoL1_muLaw := '00010'B; + +/* Value 'Telephony' of bit field element 'High layer characteristics identification' in IE 'User service information'. */ +const Bit7 c_USI_hlc_telephony := '0000001'B; + +/* Value 'Facsimile Group 2/3 (Recommendation F.182' of bit field element 'High layer characteristics identification' in IE 'User service information'. */ +const Bit7 c_USI_hlc_fax2_3 := '0000100'B; + +/* Value 'user-to-user information discarded by the network' of bit field element 'Network discard indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_netwDiscInd_discarded := '1'B; + +/* Value 'no information' of bit field element 'Network discard indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_netwDiscInd_noInfo := '0'B; + +/* Value 'request' of bit field element 'service type indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_service_ind_req := '0'B; + +/* Value 'response' of bit field element 'service type indicator' in IE 'User-to-user indicators'. */ +const Bit1 c_UUI_service_ind_rsp := '1'B; + +/* Value 'no information' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_noInfo := '00'B; + +/* Value 'request, not essential' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_notEss := '10'B; + +/* Value 'no information' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_noInfo := '00'B; + +/* Value 'not provided' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_notProv := '01'B; + +/* Value 'provided' of bit field element 'Service 1 response' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_rsp_prov := '10'B; + +/* Value 'request, essential' of bit field element 'Service 1 request' in IE 'User-to-user indicators'. */ +const Bit2 c_UUI_service_req_ess := '11'B; + +/* Value 'operator, language French' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorFrench := '00000001'B; + +/* Value 'operator, language English' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorEnglish := '00000010'B; + +/* Value 'operator, language German' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorGerman := '00000011'B; + +/* Value 'operator, language Russian' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorRussian := '00000100'B; + +/* Value 'operator, language Spanish' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_operatorSpanish := '00000101'B; + +/* Value 'ordinary subscriber' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_ISUP_CGC_cliPCat_ord_subs := '00001010'B; + +/* Value 'test call' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_testcall := '00001101'B; + +/* Value 'payphone' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_payphone := '00001111'B; + +/* Value 'mobile terminal located in the home PLMN' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_mobiletermHome := '00010000'B; + +/* Value 'mobile terminal located in a visited PLMN' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_mobiletermVisited := '00010001'B; + +/* Value 'IEPS call marking for preferential call set up' for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format. (TX side).*/ +const Bit8 c_CGC_IEPS := '00001110'B; + +/* Value '1 satellite' for element satelliteIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format. (TX side).*/ +const Bit2 c_ISUP_NCI_satInd_1sat := '01'B; + +/* Value 'included' for element echoControlDeviceIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_NCI_echoContrDevInd_incl := '1'B; + +/* Value 'Interworking encountered' for element interworkingIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_interwInd_enc := '1'B; + +/* Value 'ISDN user part/BICC not used all the way' for element iSDNUserPartIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_iSDNUserPartInd_notAlwUsed := '0'B; + +/* Value 'ISDN user part/BICC not required all the way' for element iSDNUserPartPrefIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit2 c_ISUP_FCI_iSDNUserPartPrefInd_notReq := '01'B; + +/* Value 'Originating access non-ISDN' for element iSDNAccessIndicator inside Forward call indicators parameter (FCI); Fixed(F) format. (TX side).*/ +const Bit1 c_ISUP_FCI_iSDNAccessInd_nonISDN := '0'B; + +/* Value 'network provided' for element screeningIndicator inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit2 c_ISUP_CGN_screeningInd := '11'B; + +/* Value 'ISDN/Telephony (E.164)' for element numberingPlanIndicator inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit3 c_ISUP_CGN_numbPlanInd_E164 := '001'B; + +/* Value 'complete' for element iNN inside Calling party number parameter (CGN); Optional(O) format. (TX side).*/ +const Bit1 c_ISUP_CGN_iNN_compl := '0'B; + +/* Value 'additional calling party number' for element numberQualifierIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit8 c_ISUP_GNU_numQualifierInd_add := '00000110'B; + +/* Value 'user provided, not verified' for element screeningIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit2 c_ISUP_GNU_screenInd_upnv := '00'B; + +/* Value 'E.164' for element numberingPlanIndicator inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit3 c_ISUP_GNU_numbPlanInd_E164 := '001'B; + +/* Value 'complete' for element iNN inside Generic number parameter (GNU); Optional(O) format. (TX side).*/ +const Bit1 c_ISUP_GNU_iNN_compl := '0'B; + +/* Value 'Speech' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_Speech := '00000'B; + +/* Value '3.1 kHz audio' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_3_1kHZ_Audio := '10000'B; + +/* Value 'Unrestricted digital information' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_UDI := '01000'B; + +/* Value 'Unrestricted digital information with tones/announcements' of bit field element 'Information Transfer Capability' in ISDN IE 'Bearer Capability' */ +const Bit5 c_BCAP_UDI_TA := '10001'B; + +/* Value 'Telephony' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Telephony := '0000001'B; + +/* Value 'Facsimilie Group 2/3' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_FaxGroup2_3 := '0000100'B; + +/* Value 'Facsimilie Group 4 Class I' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_FaxGroup4 := '0100001'B; + +/* Value 'Teletex service, basic and mixed mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F230 := '0100100'B; + +/* Value 'Teletex service, basic and processable mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F220 := '0101000'B; + +/* Value 'Teletex service, basic mode of operation' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_Teletex_F200 := '0110001'B; + +/* Value 'Syntax based Videotex' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_SyntaxBasedVideotex := '0110010'B; + +/* Value 'International Videotex interworking via gateways or interworking units' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_IntVideotex := '0110011'B; + +/* Value 'Telex service' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_TelexService := '0110101'B; + +/* Value 'Message Handling Systems' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_MHS := '0111000'B; + +/* Value 'OSI applications' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_OSIapps := '1000001'B; + +/* Value 'Audio visual' of bit field element 'High layer characteristics identification' in ISDN IE 'High Layer Compatibility' */ +const Bit7 c_HLC_AudioVisual := '1100010'B; + +/* Value 'Call is not end-to-end ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_1 := '0000001'B; + +/* Value 'Destination address is non-ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_2 := '0000010'B; + +/* Value 'Origination address is non-ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_3 := '0000011'B; + +/* Value 'Call has returned to ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_4 := '0000101'B; + +/* Value 'Interworking has occurred and has resulted in a telecommunication service change' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_5 := '0000101'B; + +/* Value 'originating access ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_6 := '0000110'B; + +/* Value 'Terminating access ISDN' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_7 := '0000111'B; + +/* Value 'In-band information or an appropriate pattern is now available' of bit field element 'Progress description' in ISDN IE 'Progress Indicator' */ +const Bit7 c_PI_8 := '0001000'B; +} /* end group Constants */ + +group Functions { +/* Function f_char_to_BCD +* @desc: Returns BCD code in a hexstring converted from +* address digits (p_char) in charstring format +* Filler character '0'H is added where necessary +* End-of-Pulsing charater is added, if p_eop is TRUE +* Works for address lengths starting from 0 (i.e. empty string) +*/ + function f_char_to_BCD(in charstring p_char, in boolean p_eop) return octetstring { + var integer v_string_length := lengthof(p_char); + var charstring v_address_char := p_char; + var octetstring v_address_oct; + var hexstring v_address_hex_ASCII; + + var integer i; + var hexstring v_address_hex_NUM := ''H; + + if (p_eop) // End of Pulsing required + { + + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "O"; // instead of "?" + // add End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 1; + } + else // even number of digits + { + v_address_char := v_address_char & "O0"; // instead of "0?" + // add filler and End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "0"; + // add filler + v_string_length := v_string_length + 1; + } + } + + v_address_oct := (char2oct(v_address_char)); + v_address_hex_ASCII := oct2hex(v_address_oct); + /* Examples + "1234" -> '31323334'H + "12345O" -> '31323334353F' */ + +// var integer i; +// var hexstring v_address_hex_NUM := ''H; + + // fill hexstring with adequate number of hex digits + for (i := 0; i < v_string_length; i := i + 1) + { + v_address_hex_NUM := v_address_hex_NUM & '0'H; + } + // fill hexstring with address in BCD format + for (i := 0; i < v_string_length; i := i + 2) + { + v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; + v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; + } + + v_address_oct := hex2oct(v_address_hex_NUM); + return v_address_oct; + } // end function f_char_to_BCD + + /* Function f_calc_oddeven + * @desc: Returns the odd/even indicator of address digits in p_char + * in a bitstring[1] + * Filler and End-of-Pulsing charaters (if p_eop is TRUE) are taken into account + * Works for address lengths starting from 0 (i.e. empty string) + */ + function f_calc_oddeven(in charstring p_char, in boolean p_eop) return bitstring { + var integer v_string_length := lengthof(p_char); + var bitstring v_odd_even_ind; + + if (p_eop) // End of Pulsing required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_odd_even_ind := '0'B; + } + else // even number of digits + { + v_odd_even_ind := '1'B; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_odd_even_ind := '1'B; + } + else // even number of digits + { + v_odd_even_ind := '0'B; + } + } + + return v_odd_even_ind; + + } // end function f_calc_oddeven + + /* Function f_calc_paramLen + * @desc: Returns the parameter length of parameters carrying the address digits + * in p_char in a bitstring[8] + * Filler and End-of-Pulsing charaters (if p_eop is TRUE) are taken into account + * An offset (p_offset) is added dependant on the presence of octets 3 and 4 + */ + function f_calc_paramLen(in charstring p_char, in boolean p_eop, in integer p_offset) + return bitstring { + var integer v_string_length := lengthof(p_char); + var bitstring v_paramLen; + + if (p_eop) // End of Pulsing required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_string_length := (v_string_length + 1) / 2; + } + else // even number of digits + { + v_string_length := (v_string_length + 2) / 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_string_length := (v_string_length + 1) / 2; + } + else // even number of digits + { + v_string_length := v_string_length / 2; + } + } + + v_paramLen := int2bit((v_string_length + p_offset), 8); + return v_paramLen; + + } // end function f_calc_paramLen + +/* These functions are used to calculate the length of fields of type +octetstring with an offset added and deliver the result as Bitstring of size 8, +first parameter is the name of the structure, in which the octetstring, +whose length is calculated, resides +p_int is the offset, +i.e. when calculating the length of a CDN parameter, +p_oct carries the octets in field addressSignals +p_int carries the value 2 as offset for octet 3 and 4 */ + +/* Function to calculate length of CDN parameter */ +function f_calc_length_cdn (in template CDN_PAR_lv p_cdn, in integer p_int) +return Bit8 { + var CDN_PAR_lv v_cdn := valueof(p_cdn); + return int2bit((lengthof (v_cdn.addressSignals) + p_int), 8 ); +} + +/* Function to calculate length of RAS parameter */ +function f_calc_length_ras (in template RAS_PAR_lv p_ras, in integer p_int) +return Bit8 { + var RAS_PAR_lv v_ras := valueof(p_ras); + return int2bit((lengthof (v_ras.status) + p_int), 8 ); +} + +/* Function to calculate length of ATP parameter carrying one CGPS IE*/ +function f_calc_length_atp_cgps (in template ISDN_IEs p_ies, in integer p_int) +return Bit8 { + var ISDN_IEs v_ies := valueof(p_ies); + return int2bit((lengthof (v_ies.callingPartySubaddress.subaddressInformation) + p_int), 8 ); +} + +/* Function to calculate length of ATP parameter carrying one CODS IE*/ +function f_calc_length_atp_cods (in template ISDN_IEs p_ies, in integer p_int) +return Bit8 { + var ISDN_IEs v_ies := valueof(p_ies); + return int2bit((lengthof (v_ies.connectedSubaddress.subaddressInformation) + p_int), 8 ); +} + +} /* end group Functions */ + +} /* end module SipIsup_ISUP_Constants */ + + + + + + diff --git a/IsupAts/SipIsup_ISUP_ModuleParams.ttcn b/IsupAts/SipIsup_ISUP_ModuleParams.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..03183d965e6317061aeb4a18f2b624fc208931b1 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ModuleParams.ttcn @@ -0,0 +1,721 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Module Parameters. + * They are all mapped to PIXIT items in ETSI TS 186 009-1. +*/ +module SipIsup_ISUP_ModuleParams{ + + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + import from SipIsup_ISUP_ParamTypes all; + + type enumerated SelectIsupOrBicc {selectIsup, selectBicc}; + +modulepar +{ +/* @desc Time to delay ACM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.7 +*/ +float PX_TDelay_ACM := 1.0; + +/* @desc Time to delay ANM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.8 +*/ +float PX_TDelay_ANM := 1.0; + +/* @desc Time to delay APM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.9 +*/ +float PX_TDelay_APM := 1.0; + +/* @desc Time to delay CGB message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.10 +*/ +float PX_TDelay_CGB := 1.0; + +/* @desc Time to delay CON message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.11 +*/ +float PX_TDelay_CON := 1.0; + +/* @desc Time to delay COTM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.12 +*/ +float PX_TDelay_COT := 1.0; + +/* @desc Time to delay CPG message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.13 +*/ +float PX_TDelay_CPG := 1.0; + +/* @desc Time to delay FAC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.14 +*/ +float PX_TDelay_FAC := 1.0; + +/* @desc Time to delay FAR message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.15 +*/ +float PX_TDelay_FAR := 1.0; + +/* @desc Time to delay GRS message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.16 +*/ +float PX_TDelay_GRS := 1.0; + +/* @desc Time to delay IDR message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.17 +*/ +float PX_TDelay_IDR := 1.0; + +/* @desc Time to delay INF message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.18 +*/ +float PX_TDelay_INF := 1.0; + +/* @desc Time to delay LOP message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.19 +*/ +float PX_TDelay_LOP := 1.0; + +/* @desc Time to delay REL message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.20 +*/ +float PX_TDelay_REL := 1.0; + +/* @desc Time to delay RES message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.21 +*/ +float PX_TDelay_RES := 1.0; + +/* @desc Time to delay RLC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.22 +*/ +float PX_TDelay_RLC := 1.0; + +/* @desc Time to delay RSC message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.23 +*/ +float PX_TDelay_RSC := 1.0; + +/* @desc Time to delay SAM message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.24 +*/ +float PX_TDelay_SAM := 1.0; + +/* @desc Time to delay SUS message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.28 +*/ +float PX_TDelay_SUS := 1.0; + +/* @desc Time to delay UNKNOWN message before sending +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.26 +*/ +float PX_TDelay_UNKNOWN := 1.0; + +/* @desc Nominal timeout value of ISUP protocol timer T2 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.27 +*/ +float PX_Timeout_T2 := 180.0; + +/* @desc Nominal timeout value of ISUP protocol timer T39 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.28 +*/ +float PX_Timeout_T39 := 120.0; + +/* @desc Nominal timeout value of ISUP protocol timer T6 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.29 +*/ +float PX_Timeout_T6 := 10.0; + +/* @desc Nominal timeout value of ISUP protocol timer T7 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.30 +*/ +float PX_Timeout_T7 := 25.0; + +/* @desc Nominal timeout value of ISUP protocol timer T +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.310 +*/ +float PX_Timeout_T8 := 12.0; + +/* @desc Nominal timeout value of ISUP protocol timer T9 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.32 +*/ +float PX_Timeout_T9 := 135.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW1 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.33 +*/ +float PX_Timeout_TOIW1 := 4.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW2 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.34 +*/ +float PX_Timeout_TOIW2 := 4.0; + +/* @desc Nominal timeout value of ISUP/SIP interworking protocol timer TOIW3 +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.35 +*/ +float PX_Timeout_TOIW3 := 4.0; + + +/* @desc Time to control PTC.stop +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.5 +*/ +float PX_ISUP_TDONE := 15.0; + +/* @desc Time to control the reception of a message +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.1 + */ +float PX_ISUP_TAC := 5.0; + +/* @desc Time to control that IUT sends nothing +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.2 +*/ +float PX_ISUP_TNOAC := 5.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.6 +*/ +float PX_ISUP_TWAIT := 30.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.3 +*/ +float PX_ISUP_TSYNC := 10.0; + +/* @desc Time to control that IUT reacts prior to Upper Tester action +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A3, item 3.4 +*/ +float PX_ISUP_TSYNC_TIME_LIMIT := 20.0; + +/* @desc Select whether ISUP or BICC testing is done. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.1 +*/ + SelectIsupOrBicc PX_ISUP_IsupOrBicc := selectIsup; +boolean PX_ISUP_Isup := true; +/* @desc Network indicator inside the Service Indicator octet (SIO). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.2 +*/ + Bit2 PX_ISUP_NW_IND := '10'B; + +/* @desc Point code of the TS (ISUP interface). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.5 +*/ + Bit14 PX_ISUP_PC_TS := '00000011001000'B; + +/* @desc Point code of the SUT (ISUP interface). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.4 +*/ + Bit14 PX_ISUP_PC_SUT := '00000001111100'B; + +/* @desc Signalling Link Selection (SLS) value of the ISUP link between TS and SUT. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.3 +*/ + Bit4 PX_ISUP_SLS := '0000'B; + +/* @desc Address (e.g. IP) of the TS (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.7 +*/ + octetstring PX_TS_ADRESS_ISUP_BICC; + +/* @desc Address (e.g. IP) of the SUT (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.6 +*/ + octetstring PX_SUT_ADRESS_ISUP_BICC; + +/* @desc Default Circuit Identity Code value for signalling connection 1). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.8 +*/ +Bit12 PX_ISUP_TX_CIC_cicv1 := '000000000001'B; + +/* @desc Default Circuit Identity Code value for signalling connection 2). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.9 +*/ +Bit12 PX_ISUP_TX_CIC_cicv2 := '000000000010'B; + +/* @desc Default Call Instance Code value for signalling connection 1). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.10 +*/ +CallInstanceCode PX_ISUP_TX_CIC_caicv1 := '00000001'O; + +/* @desc Default Call Instance Code value for signalling connection 2). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A2, item 2.11 +*/ +CallInstanceCode PX_ISUP_TX_CIC_caicv2 := '00000002'O; + +/* @desc 'Subaddress information' value sent in the 'Access transport/Connected sub-address' Parameter in the ANM message (default). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.1 +*/ +octetstring PX_ISUP_ANM_AT_connSub_val := 'A031323334'O; + +/* @desc 'component' value (accepted by the SUT without immediate response (PIXIT)) sent in the 'Facility' parameter in the FAC message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.2 +*/ +octetstring PX_ISUP_FAC_comp_txDef := 'A430050005800100'O; // Rejct component, unknown invID, generalProblem, unrecognizedComponent + +/* @desc Default 'address digits' value received in the 'Calling party number' parameter in the IAM message, when the Called party number is 'international'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.1 +*/ +charstring PX_ISUP_IAM_CLI_digits_rxInat := "38642909"; + +/* @desc Default 'address digits' value received in the 'Calling party number' parameter in the IAM message, when the Called party number is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.2 +*/ +charstring PX_ISUP_IAM_CLI_digits_rxNat := "42909"; + +/* @desc Default 'Number incomplete indicator' value received in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.5.4 +*/ +Bit1 PX_ISUP_IAM_CLI_numIncmplInd_rxDef := '0'B; + +/* @desc Default 'address digits' value sent in the 'Calling party number' parameter in the IAM message, when the Called party number is 'international'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.6.1 +*/ +charstring PX_ISUP_IAM_CLI_digits_txInat := "3864123"; + +/* @desc Default 'address digits' value sent in the 'Calling party number' parameter in the IAM message, when the Called party number is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.6.2 +*/ +charstring PX_ISUP_IAM_CLI_digits_txNat := "4123"; + +/* @desc 'address digits' value received in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.7.1 +*/ +charstring PX_ISUP_IAM_GEN_digits_rxInat := "38642909"; + +/* @desc 'address digits' value received in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.7.2 +*/ +charstring PX_ISUP_IAM_GEN_digits_rxNat := "42909"; + +/* @desc 'address digits' value sent in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.8.1 +*/ +charstring PX_ISUP_IAM_GEN_digits_txInat := "3864123"; + +/* @desc 'address digits' value sent in the 'Generic number' parameter in the IAM message, when the Nature of Address is 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.8.2 +*/ +charstring PX_ISUP_IAM_GEN_digits_txNat := "4123"; + +/* @desc Default 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the complete address and 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.7.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef :="2909"; + +/* @desc Default 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the complete address and 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.7.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_txDef := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by analysis of the number. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.2.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_analysis := "2909"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by analysis of the number. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.2.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_analysis := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by timeout. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.3.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_timeout := "2909"; + +/* @desc 'nature of address' value value sent in the 'Called party number' parameter in the IAM message, when 'sending complete' is not sent, not the maximum number of digits are sent, the number is complete and completeness is determined by timeout.. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.3.2 +*/ Bit7 PX_ISUP_TX_CLD_natAddr_timeout := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the maximum number of digits according to the national numbering plan, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.4.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_max := "29090000000000000000"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the maximum number of digits according to the national numbering plan, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.4.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_max := '0000001'B; + +/* @desc 'address digits' value (less than minimum number digits to route the call through to the SIP side) sent in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.14.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_less :="12"; + +/* @desc 'nature of addresss' value (number of digits less than minimum number digits to route the call through to the SIP side) sent in the 'Calling party number' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.14.2 +*/ +Bit7 PX_ISUP_IAM_CLD_natAddr_less := '0000001'B; + +/* @desc 'address digits' value sent in the 'Called party number' parameter in the IAM message, containing the minimum number of digits required for routing through to the SIP side, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.5.1 +*/ +charstring PX_ISUP_IAM_CLD_digits_min :="2909"; + +/* @desc 'nature of address' value sent in the 'Called party number' parameter in the IAM message, containing the minimum number of digits required for routing through to the SIP side, and no 'sending complete'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.5.2 +*/ +Bit7 PX_ISUP_TX_CLD_natAddr_min := '0000001'B; + +/* @desc Default 'complete address digits' value sent in the 'Called party number' parameter in the IAM message, when the nature of address is specified as 'international number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.12 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef_inat :="38642909"; + +/* @desc Default 'complete address digits' value sent in the 'Called party number' parameter in the IAM message, when the nature of address is specified as 'national (sign.) number'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.4.13 +*/ +charstring PX_ISUP_IAM_CLD_digits_txDef_nat :="42909"; + +/* @desc Default 'user-to-user information' value (Service 1 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.1 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S1 := '0449534B524154454C'O; + +/* @desc Default 'user-to-user information' value (Service 2 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.2 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S2 := '0449534B524154454C'O; + +/* @desc Default 'user-to-user information' value (Service 3 data) sent in the 'User-to-user information' parameter in the IAM message. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.9.3 +*/ +octetstring PX_ISUP_IAM_UUI_userInfo_S3 := '0449534B524154454C'O; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IW-U has received a BYE message from SIP. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.1 +*/ +integer PX_ISUP_REL_CAU_cVal_bye := 16; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IW-U has received a CANCEL message from SIP. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.2 +*/ +integer PX_ISUP_REL_CAU_cVal_cancel := 16; + +/* @desc 'Cause' value (decimal) received in the 'Cause' parameter in the REL message, when the IWU-O has autonomously released the call. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.3 +*/ +integer PX_ISUP_REL_CAU_cVal_autonomous := 31; + +/* @desc 'Cause value' value sent in the 'Cause' parameter in the REL message, when the diagnostics field indicates 'CCBS possible'. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.10.4 +*/ +integer PX_ISUP_REL_CAU_CCBSposs := 17; + +/* @desc SIP/ISUP interworking, after SUT send IAM message there exist possibility to await COT message + * true - await COT message + * false - don't wait COT message +*/ +boolean PX_ISUP_COT_MSG_await := false; + + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in a SAM message, containing enough number digits to allow the routing to the SIP side, where the IAM contained less than the minimum digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.1 +*/ +charstring PX_ISUP_SAM_SQN_digits_txLess_AllowRoute := "05"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the SAM message, containing the second part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.2 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_2nd := "0"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the second SAM message, containing the third part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.3 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_3rd := "9"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the third SAM message, containing the fourth and final part of the number, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.4 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_4th := "9"; + +/* @desc 'address digits' value sent in the 'Subsequent number' parameter in the third SAM message, containing the fourth and final part of the number with the amount of digits leading to the overall maximum of digits allowed according to the numbering plan, where the IAM contained already enough digits to route the call through to the SIP side. +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.11.5 +*/ +charstring PX_ISUP_SAM_SQN_digits_tx_4th_max := "9"; + +/* @desc Default value for element chargeIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.1 +*/ +Bit2 PX_ISUP_TX_BCI_v_chargeInd := '10'B; + +/* @desc Default value for element calledPartysStatusIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.2 +*/ +Bit2 PX_ISUP_TX_BCI_v_cldPStatInd := '00'B; + +/* @desc Default value for element calledPartysCategoryIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.3 +*/ +Bit2 PX_ISUP_TX_BCI_v_cldPCatInd := '01'B; + +/* @desc Default value for element end_to_endMethodIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.4 +*/ +Bit2 PX_ISUP_TX_BCI_v_eTOeMethodInd := '00'B; + +/* @desc Default value for element interworkingIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.5 +*/ +Bit1 PX_ISUP_TX_BCI_v_interwInd := '1'B; + +/* @desc Default value for element end_to_endInformationIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.6 +*/ +Bit1 PX_ISUP_TX_BCI_v_eTOeInfoInd := '0'B; + +/* @desc Default value for element iSDNUserPartIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.7 +*/ +Bit1 PX_ISUP_TX_BCI_v_iSDNUserPartInd := '0'B; + +/* @desc Default value for element holdingIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.8 +*/ +Bit1 PX_ISUP_TX_BCI_v_holdingInd := '0'B; + +/* @desc Default value for element iSDNAccessIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.9 +*/ +Bit1 PX_ISUP_TX_BCI_v_iSDNAccessInd := '0'B; + +/* @desc Default value for element echoControlDeviceIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.10 +*/ +Bit1 PX_ISUP_TX_BCI_v_echoContrDevInd := '1'B; + +/* @desc Default value for element sCCPMethodIndicator inside Backward call indicators parameter (BCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.12.11 +*/ +Bit2 PX_ISUP_TX_BCI_v_sCCPMethodInd := '00'B; + +/* @desc Default value for element callingPartysCategory inside Calling party's category parameter (CGC); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.13 +*/ +Bit8 PX_ISUP_TX_CGC_cliPCategory := '00001010'B; // ordinary calling subscriber + +/* @desc Default value for element natureOfaddressindicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.1 +*/ +Bit7 PX_ISUP_TX_CPN_natOfaddressind := '0000001'B; + +/* @desc Default value for element screeningIndicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.2 +*/ +Bit2 PX_ISUP_TX_CPN_screenInd := '01'B; + +/* @desc Default value for element addrPresRestrInd inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.3 +*/ +Bit2 PX_ISUP_TX_CPN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingplanIndicator inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.4 +*/ +Bit3 PX_ISUP_TX_CPN_numbplanInd := '001'B; + +/* @desc Default value for element addressSignals inside Connected number parameter (CPN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.14.5 +*/ +charstring PX_ISUP_TX_CPN_addrSignals := "2909"; + +/* @desc Default value for element natInternatCallIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.1 +*/ +Bit1 PX_ISUP_TX_FCI_natInternatCallInd := '0'B; + +/* @desc Default value for element endToEndMethodIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.2 +*/ +Bit2 PX_ISUP_TX_FCI_endToEndMethodInd := '00'B; + +/* @desc Default value for element interworkingIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.3 +*/ +Bit1 PX_ISUP_TX_FCI_interwInd := '1'B; + +/* @desc Default value for element endToEndInfoIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.4 +*/ +Bit1 PX_ISUP_TX_FCI_eTOeInfoIndic := '0'B; + +/* @desc Default value for element iSDNUserPartIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.5 +*/ +Bit1 PX_ISUP_TX_FCI_iSDNUserPartInd := '0'B; + +/* @desc Default value for element iSDNUserPartPrefIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.6 +*/ +Bit2 PX_ISUP_TX_FCI_iSDNUserPartPrefInd := '01'B; + +/* @desc Default value for element iSDNAccessIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.7 +*/ +Bit1 PX_ISUP_TX_FCI_iSDNAccessInd := '0'B; + +/* @desc Default value for element sCCPMethodIndicator inside Forward call indicators parameter (FCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.15.8 +*/ +Bit2 PX_ISUP_TX_FCI_sCCPMethodInd := '00'B; + +/* @desc Default value for element satelliteIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.1 +*/ +Bit2 PX_ISUP_TX_NCI_satelliteInd := '01'B; + +/* @desc Default value for element continuityCheckIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.2 +*/ +Bit2 PX_ISUP_TX_NCI_contCheckInd := '00'B; + +/* @desc Default value for element echoControlDeviceIndicator inside Nature of connection indicators parameter (NCI); Fixed(F) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.16.3 +*/ +Bit1 PX_ISUP_TX_NCI_echoContrDevInd := '1'B; + +/* @desc Default value for element natureOfAddressIndicator inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.1 +*/ +Bit7 PX_ISUP_TX_OCN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element addrPresRestrInd inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.2 +*/ +Bit2 PX_ISUP_TX_OCN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingPlanIndicator inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.3 +*/ +Bit3 PX_ISUP_TX_OCN_numbPlanInd := '001'B; + +/* @desc Default value for element addressSignals inside Original called number parameter (OCN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.17.4 +*/ +charstring PX_ISUP_TX_OCN_addrSignals := "2909"; + +/* @desc Default value for element range inside Range and status parameter (RAS); Variable(V) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.18.1 +*/ +Bit8 PX_ISUP_TX_RAS_range := '00011110'B; // 30 + +/* @desc Default value for element status inside Range and status parameter (RAS); Variable(V) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.18.2 +*/ +octetstring PX_ISUP_TX_RAS_status := 'FE7FFF7F'O; // cic 1-15, 17-31; + +/* @desc Default value for element natureOfAddressIndicator inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.1 +*/ +Bit7 PX_ISUP_TX_RDN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element addrPresRestrInd inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.2 +*/ +Bit2 PX_ISUP_TX_RDN_addrPresRestrInd := '00'B; + +/* @desc Default value for element numberingPlanIndicator inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.3 +*/ +Bit3 PX_ISUP_TX_RDN_numbPlanInd := '001'B; + +/* @desc Default value for element addressSignals inside Redirecting number parameter (RDN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.19.4 +*/ +charstring PX_ISUP_TX_RDN_addrSignals := "123"; + +/* @desc Default value for element natureOfAddressIndicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.1 +*/ +Bit7 PX_ISUP_TX_RNN_natOfAddressInd := '0000001'B; + +/* @desc Default value for element numberingPlanIndicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.2 +*/ +Bit3 PX_ISUP_TX_RNN_numbPlanInd := '001'B; + +/* @desc Default value for element Internal Network Number indicator inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.3 +*/ +Bit1 PX_ISUP_TX_RNN_iNN := '0'B; + +/* @desc Default value for element addressSignals inside Redirection number parameter (RNN); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.20.4 +*/ +charstring PX_ISUP_TX_RNN_addrSignals := "2909"; + +/* @desc Default value for element presRestrIndicator inside Redirection number restriction parameter (RNS); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.21 +*/ +Bit2 PX_ISUP_TX_RNS_presRestrInd := '00'B; + +/* @desc Default value for element transmissionMediumRequirement inside Transmission medium requirement prime parameter (TMRP); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.22 +*/ +Bit8 PX_ISUP_TX_TMR_transmMedReq := '00000000'B; + +/* @desc Default value for element hopCounter inside Hop counter parameter (HPC); Optional(O) format (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.23 +*/ +Bit5 PX_ISUP_TX_HPC_hopCounter := '01000'B; + +/* @desc Default value for an unknown parameter type (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.24.1 +*/ +Bit8 PX_ISUP_TX_unknown_parameter_type := '10001111'B; + +/* @desc Default value for an unknown message type (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.24.2 +*/ +Bit8 PX_ISUP_TX_unknown_message_type := '01001010'B; + +/* @desc Default value for of bit field element 'User Information Layer 1 Protocol Indicator' in IE Bearer Cpability encapsulated in 'User service information' or 'Access transport' parameter (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.26 +*/ +Bit5 PX_userInfoLayer1 := '00011'B; + +/* @desc Default value for calling party subaddress information (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.1 +*/ +octetstring PX_ISUP_TX_cgps_information := '49534B524154454C'O; + +/* @desc Default value for calling party subaddress odd even indicator (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.2 +*/ +Bit1 PX_ISUP_TX_cgps_odd_even_indicator := '0'B; + +/* @desc Default value for calling party subaddress type of subaddress (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.25.3 +*/ +Bit3 PX_ISUP_TX_cgps_type_of_subaddress := '010'B; + +/* @desc Default value for connected subaddress type of subaddress (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.2 +*/ +Bit3 PX_ISUP_TX_connsub_type_of_subaddress := '010'B; + +/* @desc Default value for connected party subaddress odd even indicator (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.3 +*/ +Bit1 PX_ISUP_TX_connsub_odd_even_indicator := '0'B; + +/* @desc Default value for connected subaddress information (to be sent when the TP does not specify a specific value for that field). +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A5, item 5.1.1 +*/ +octetstring PX_ISUP_TX_connsub_information := '49534B524154454C'O; + +/* true if conversation check is used +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A4, item 4.1 +*/ +boolean PX_IsupBicc_CheckConversation := false; + +/* true if ringing check is used +** @remark PICS/PIXIT Reference: TISPAN DTS 06014-3, Table A4, item 4.2 +*/ +boolean PX_IsupBicc_CheckRinging := false; + +} /* end modulepar */ +} /* end module SipIsup_ISUP_ModuleParams */ diff --git a/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn b/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1b0fd110cc3e229f79bf2f7551cdf2bbcdb7816c --- /dev/null +++ b/IsupAts/SipIsup_ISUP_MsgTemplates.ttcn @@ -0,0 +1,1189 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Message templates. +*/ +module SipIsup_ISUP_MsgTemplates +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTemplates all; + +group ISUP_BICC_Messages { +group ACM { +template ACM_MSG m_ACM_BCI(Bit2 p_cldPstatInd) := +/* TX template for Address complete message (ACM) with Called party status indicator (BCI) parameterized, and without optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := m_BCI_cpStatInd(p_cldPstatInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_BasicCall + (template BCI_PAR_v p_BCI, + template OBCI_PAR_tlv p_OBCI, + template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Address complete message (ACM) with default BCI, OBCI, ATP and TMU parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(p_OBCI, p_ATP, omit, p_TMU, omit, omit, omit, omit, omit, omit, omit), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_CDIV + (template BCI_PAR_v p_BCI, + template GNI_PAR_tlv p_GNI, + template RNN_PAR_tlv p_RNN, + template CDI_PAR_tlv p_CDI, + template RNS_PAR_tlv p_RNS) := +/* TX template for Address complete message (ACM) with default BCI, GNI, RNN, CDI and RNS parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(omit, omit, omit, p_GNI, omit, p_RNN, omit, p_CDI, p_RNS, omit, omit), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG m_ACM_OtherParameters + (template BCI_PAR_v p_BCI, + template UUIF_PAR_tlv p_UUIF, + template GNI_PAR_tlv p_GNI, + template PCI_PAR_tlv p_PCI, + template CCPI_PAR_tlv p_CCPI, + template UNKNOWN_PAR_tlv p_UNKNOWN) := +/* TX template for Address complete message (ACM) with BCI, GNI, UUI, CCPI, PCI and unknown parameter parameterized and without other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ACM_USED_OPTIONAL_PARAMS(omit, p_UUIF, omit, p_GNI, omit, omit, p_PCI, omit, omit, p_CCPI, p_UNKNOWN), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_MSG_Def := +/* RX template for Address complete message (ACM) with 'any'-values */ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI(Bit2 p_cldPstatInd) := +/* RX template for Address complete message (ACM) Called party status indicator (BCI) parameterized, and with 'any'-values */ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpStatInd(p_cldPstatInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + + +template ACM_MSG mw_ACM_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Address complete message (ACM) with default BCI, User-to-user indicators parameterized and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Address complete message (ACM) with Interworking indicator = 'interworking encountered', User-to-user indicators parameterized and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_PAR_v_any, /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatnoInd := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd1, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + +template ACM_MSG mw_ACM_BCI_cpCat_3alt(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', with Interworking indicator, ISDN user part indicator and ISDN access indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpCat_3alt(p_interwInd, p_isdnUpInd, p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cpCat_3alt2(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cpCat_3alt2(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatSubsFree(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', with Interworking indicator, ISDN access indicator, ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatSubsFree(p_interwInd, p_isdnUpInd, p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatSubsFree_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatSubsFree_tAccNonISDN(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ACM_MSG mw_ACM_BCI_cldPstatNoInd_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for Address complete message (ACM) with Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN', with ISDN user part indicator (BCI) parameterized, and any other optional parameters.*/ +{ + msgType := '00000110'B, /* Message Type '00000110'B */ + backwardCallIndicators := mw_BCI_cldPstatNoInd_tAccNonISDN(p_isdnUpInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ACM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group ACM */ + +group ANM { +template ANM_MSG m_ANM_MSG_Def := +/* TX template for Answer message (ANM) without optional parameters except call history */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_BasicCall + (template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Answer message (ANM) with Access transport and Transmission medium used parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(omit, omit, p_ATP, omit, p_TMU, omit), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_COLP + (template CPN_PAR_tlv p_CPN, + template GNU_PAR_tlv p_GNU) := +/* TX template for Answer message (ANM) with Coonected number and Generic number parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(omit, p_CPN, omit, p_GNU, omit, omit), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG m_ANM_OtherParameters + (template UUIF_PAR_tlv p_UUIF, + template RNS_PAR_tlv p_RNS) := +/* TX template for Answer message (ANM) with User-to-user information and Redirection number restriction parameterized, and without other optional parameters.*/ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_ANM_USED_OPTIONAL_PARAMS(p_UUIF, omit, omit, omit, omit, p_RNS), /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG mw_ANM_MSG_Def := +/* RX template for Answer message (ANM) with 'any'-values */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ANM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Answer message (ANM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template ANM_MSG mw_ANM_MSG_anyOpt := +/* RX template for Answer message (ANS) with 'any'-optional parameters */ +{ + msgType := '00001001'B, /* Message Type '00001001'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_ANM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Answer message (ANS) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group ANM */ + +group APM { +template APM_MSG m_APM_AI_CNT(template UAI_PAR_tlv p_AI) := +//template APM_MSG m_APM_AI_CNT(template UAI_PAR_tlv p_AI, template CNT_PAR_tlv p_CNT) := +/* TX template for Application transport message (APM) without optional parameters +MG Note: unfinished*/ +{ + msgType := '01000001'B, /* Message Type '01000001'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Application transport message (APM) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} +} /* end group APM */ + +group CGB { +template CGB_MSG m_CGB := +/* TX template for Circuit group blocking message (CGB) with default Circuit Group Supervision Message Type Indicator and Range and Status.*/ +{ + msgType := '00011000'B, /* Message Type '00011000'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=3-34 */ +} +} /* end group CGB */ + +group CGBA { +template CGBA_MSG mw_CGBA := +/* RX template for Circuit group blocking acknowledgement message (CGBA) with 'any'-optional parameters */ +{ + msgType := '00011010'B, /* Message Type '00011010'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group CGBA */ + +group CGU { +template CGU_MSG m_CGU := +/* TX template for Circuit group unblocking message (CGU. */ +{ + msgType := '00011001'B, /* Message Type '00011001'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=3-34 */ +} +} /* end group CGU */ + +group CGUA { +template CGUA_MSG mw_CGUA := +/* RX template for Circuit group unblocking acknowledgement message (CGUA). */ +{ + msgType := '00011011'B, /* Message Type '00011011'B */ + circuitGroupSupervisionMessageType := m_CGSM_Def, /* Circuit group supervision message type, F, len=1 */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group CGUA */ + +group CON { +template CON_MSG m_CON_MSG_Def := +/* TX template for Connect message (CON) with default BCI, and no optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := m_BCI_cpStatInd(c_BCI_cldPstatInd_noInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template CON_MSG m_CON_BasicCall(template ATP_PAR_tlv p_ATP, template TMU_PAR_tlv p_TMU) := +/* TX template for Connect message (CON) with default BCI, and no optional parameters except Call History Information.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := m_BCI_cpStatInd(c_BCI_cldPstatInd_noInd), /* Backward call indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CON_USED_OPTIONAL_PARAMS(p_ATP,p_TMU), /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_MSG_anyOpt(template BCI_PAR_v p_BCI) := +/* RX template for Connect message (CON) with 'any'-optional parameters */ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := p_BCI, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_BCI3(template Bit1 p_interwInd, template Bit1 p_isdnUpInd, template Bit1 p_isdnAccInd) := +/* RX template for Connect message (CON) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, and with 'any' optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd2(p_interwInd,p_isdnUpInd,p_isdnAccInd), /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CON_MSG mw_CON_BCI4 := +/* RX template for Connect message (CON) with Called party status indicator = 'no indication', Interworking indicator = 'interworking encountered', ISDN user part indicator = 'ISUP not used all the way', ISDN access indicator = 'terminating access non-ISDN', and with 'any' optional parameters.*/ +{ + msgType := '00000111'B, /* Message Type '00000111'B */ + backwardCallIndicators := mw_BCI_cldPstatnoInd3, /* Backward call indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CON_OPTIONAL_PARAMS_any, /* SET: optional parameters of Connect message (CON) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group CON */ + +group COT { +template COT_MSG m_COT_MSG(template Bit1 p_cti) := +/* TX template for Continuity message (COT) with Continuity indicators indicating continuity.*/ +{ + msgType := '00000101'B, /* Message Type '00000101'B */ + continuityIndicators := m_COI(p_cti) /* Continuity indicators, F, len=1 */ +} +} /* end group COT */ + +group CPG { +template CPG_MSG m_CPG_EIF(Bit7 p_eventInd) := +/* TX template for Call progress message (CPG) with event information parameterized and without optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_BasicCall + (template EIF_PAR_v p_EIF, + template BCI_PAR_tlv p_BCI, + template OBCI_PAR_tlv p_OBCI, + template ATP_PAR_tlv p_ATP, + template TMU_PAR_tlv p_TMU) := +/* TX template for Call progress message (CPG) with Event information and with Backward call indicators, Optional backward call indicators, Access transport and Transmission medium used parameters*/ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := p_EIF, /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(p_BCI, p_OBCI, p_ATP, omit, omit, p_TMU, omit, omit), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_GNI(template GNI_PAR_tlv p_GNI) := +/* TX template for Call progress message (CPG) with event information = 'progress' and with Generic notification. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(c_EIF_eventInd_progr), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(omit, omit, omit, omit, p_GNI, omit, omit, omit), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG m_CPG_CDIV + (template RNN_PAR_tlv p_RNN, + template GNI_PAR_tlv p_GNI, + template CDI_PAR_tlv p_CDI, + template RNS_PAR_tlv p_RNS) := +/* TX template for Call progress message (CPG) with event information = 'progress' and with Redirection number, call diversion information, redirection number restriction and generic notification set to "Call is diverting"*/ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := m_EIF(c_EIF_eventInd_progr), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_CPG_USED_OPTIONAL_PARAMS(omit, omit, omit, p_RNN, p_GNI, omit, p_CDI, p_RNS), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_MSG_Def := +/* RX template for Call progress message (CPG) with 'any'-optional parameters */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF_PAR_v_any, /* Event information, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_OPTIONAL_PARAMS_any, /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_EIF(Bit7 p_eventInd) := +/* RX template for Call progress message (CPG) with event information parameterized, and with 'any' optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_OPTIONAL_PARAMS_any, /* SET: optional parameters of Address complete message (ACM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template CPG_MSG mw_CPG_EIF_GNI(Bit7 p_eventInd, template GNI_PAR_tlv p_GNI) := +/* RX template for Call progress message (CPG) with event information and Generic notification indicator parameterized, and with 'any' other optional parameters. */ +{ + msgType := '00101100'B, /* Message Type '00101100'B */ + eventInformation := mw_EIF(p_eventInd), /* Event information, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_CPG_USED_OPTIONAL_PARAMS(p_GNI), /* SET: optional parameters of Call progress message (CPG) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group CPG */ + +group FAC { +template FAC_MSG m_FAC_comp(template ROP_PAR_tlv p_ROP) := +/* RX template for Facility message (FAC) with default remote operations and no other optional parameters.*/ +{ + msgType := '00110011'B, /* Message Type '00110011'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_FAC_USED_OPTIONAL_PARAMS(p_ROP), /* SET: optional parameters of Facility message (FAC) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group FAC */ + +group FAR { +template FAR_MSG mw_FAR_MSG_anyOpt(template FAI_PAR_v p_FAI) := +/* RX template for Facility request message (FRQ) with 'any'-optional parameters */ +{ + msgType := '00011111'B, /* Message Type '00011111'B */ + facilityIndicator := p_FAI, /* Facility indicator, F, len=1 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_FAR_OPTIONAL_PARAMS_any, /* SET: optional parameters of Facility request message (FRQ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template FAR_MSG m_FAR_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Facility request message (FAR) with User-to-user indicators parameterized. */ +{ + msgType := '00011111'B, /* Message Type '00011111'B */ + facilityIndicator := '00000010'B, /* Facility indicator, F, len=1 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_FAR_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Facility request message (FAR) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group FAR */ + +group FRJ { +template FRJ_MSG mw_FRJ_CAU(integer p_cauVal) := +/* RX template for Facility reject message (FRJ) with cause value parameterized, and with 'any' optional parameters */ +{ + msgType := '00100001'B, /* Message Type '00100001'B */ + facilityIndicator := ?, /* Facility indicator, F, len=1 */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAU(p_cauVal,?,*), /* Cause indicators, V, len=3-? */ + optionalParameters := mw_FRJ_OPTIONAL_PARAMS_any, /* SET: optional parameters of Facility reject message (FRJ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template FRJ_MSG mw_FRJ_UUI(template UUID_PAR_tlv p_UUI) := +/* RX template for Facility reject message (FRJ) with User-to-user indicators parameterized.*/ +{ + msgType := '00100001'B, /* Message Type '00100001'B */ + facilityIndicator := ?, /* Facility indicator, F, len=1 */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAUI_PAR_lv_any, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_FRJ_USED_OPTIONAL_PARAMS(p_UUI), /* SET: optional parameters of Facility reject message (FRJ) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group FRJ */ + +group GRA { +template GRA_MSG mw_GRA := +/* RX template for Circuit group reset acknowledgement message (CGRA) with 'any'-optional parameters */ +{ + msgType := '00101001'B, /* Message Type '00101001'B */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := mw_RAS_PAR_lv_any /* Range and status, V, len=3-34 */ +} +} /* end group GRA */ + +group GRS { +template GRS_MSG m_GRS := +/* TX template for Circuit group reset message (GRS).*/ +{ + msgType := '00010111'B, /* Message Type '00010111'B */ + pRAS := '00000001'B, /* Pointer to parameter 'Range and status'. */ + rangeAndStatus := m_RAS_Def /* Range and status, V, len=2 */ +} +} /* end group GRS */ + +group IAM { +template IAM_MSG m_IAM_MSG_Def := +/* TX template for Initial address message (IAM) without optional parameters except Calling Party Numberr.*/ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_BasicCall + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN, + template ATP_PAR_tlv p_ATP, + template USI_PAR_tlv p_USI, + template USIP_PAR_tlv p_USIP) := +/* TX template for Initial address message (IAM) with parametrized NCI, FCI, CGC, TMR, CDN, USI, USIP and ATP parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(p_CDN, 4), /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, omit, omit, + p_ATP, + p_USI, + omit, omit, + p_USIP, + omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CLI + (template CGN_PAR_tlv p_CGN, + template GNU_PAR_tlv p_GNU) := +/* TX template for Initial address message (IAM) with parametrized CGN and GNU parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(p_CGN, + omit, omit, omit, + omit, omit, omit, + omit, omit, omit, + p_GNU, + omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CUG + (template OFCI_PAR_tlv p_OFCI, + template CUGIC_PAR_tlv p_CUGIC) := +/* TX template for Initial address message (IAM) with parametrized OFCI and CUGIC parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + p_OFCI, + omit, omit, + p_CUGIC, + omit, omit, omit, + omit, omit, omit, + omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_CDIV + (template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template OCN_PAR_tlv p_OCN) := +/* TX template for Initial address message (IAM) with parametrized RDN, RDI and OCN parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, + p_RDN, + p_RDI, + omit, + p_OCN, + omit, omit, omit, omit, + omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_UUS + (template UUIF_PAR_tlv p_UUIF, + template UUID_PAR_tlv p_UUID) := +/* TX template for Initial address message (IAM) with parametrized UUIF and UUID parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, omit, + p_UUIF, + omit, omit, + p_UUID, + omit, omit, omit, omit), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG m_IAM_MSG_OtherParameters + (template UTSI_PAR_tlv p_UTSI, + template HPC_PAR_tlv p_HPC) := +/* TX template for Initial address message (IAM) with parametrized HPC and UTSI parameter and no other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := m_NCI_Def, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := m_FCI_Def, /* Forward call indicators, F, len=2 */ + callingPartysCategory := PX_ISUP_TX_CGC_cliPCategory, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := PX_ISUP_TX_TMR_transmMedReq, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := f_calc_length_cdn(m_CDN_PAR_Def, 4), /* Pointer to optional parameters. */ + calledPartyNumber := m_CDN_PAR_Def, /* Called party number, V, len=4-? */ + optionalParameters := m_IAM_USED_OPTIONAL_PARAMS(m_CGN_PAR_Def, + omit, omit, omit, omit, + omit, omit, omit, omit, + omit, omit, omit, + p_UTSI, + p_HPC), /* SET: optional parameters of Initial address message (IAM). */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_Def := +/* RX template for Initial address message (IAM) with 'any'-values */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_anyOpt + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN) := +/* RX template for Initial address message (IAM) with 'any'-optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_OPTIONAL_PARAMS_any, /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + + +template IAM_MSG mw_IAM_MSG_BasicCall + (template NCI_PAR_v p_NCI, + template FCI_PAR_v p_FCI, + template CGC_PAR_v p_CGC, + template TMR_PAR_v p_TMR, + template CDN_PAR_lv p_CDN, + template USI_PAR_tlv p_USI, + template USIP_PAR_tlv p_USIP, + template TMRP_PAR_tlv p_TMRP) := +/* RX template for Initial address message (IAM) with parametrized USI, USIP and TMRP parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := p_NCI, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := p_FCI, /* Forward call indicators, F, len=2 */ + callingPartysCategory := p_CGC, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := p_TMR, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := p_CDN, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + p_USI, /* User service information, O, len=4-13 */ + mw_GNU_PAR_tlv_any ifpresent, + p_USIP, /* User service information prime, O, len=4-13 */ + mw_UTSI_PAR_tlv_any ifpresent, + p_TMRP, /* Transmission medium requirement prime, O, len=3 */ + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_ATP(template ATP_PAR_tlv p_ATP) := +/* RX template for Initial address message (IAM) with parametrized ATP parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + p_ATP, /* Access transport, O, len=3-? */ + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_OIP_OIR + (template CGN_PAR_tlv p_CGN, + template GNU_PAR_tlv p_GNU) := +/* RX template for Initial address message (IAM) with parametrized CGN and GNU parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (p_CGN, /* Calling party number, O, len=4-? */ + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + p_GNU, /* Generic number, O, len=5-? */ + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_CDIV + (template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template OCN_PAR_tlv p_OCN) := +/* RX template for Initial address message (IAM) with parametrized RDN, RDI and OCN parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + p_RDN, /* Redirecting number, O, len=4-? */ + p_RDI, /* Redirection information, O, len=3-4 */ + mw_CUGIC_PAR_tlv_any ifpresent, + p_OCN, /* Original called number, O, len=4-? */ + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_CUG + (template OFCI_PAR_tlv p_OFCI, + template CUGIC_PAR_tlv p_CUGIC) := +/* RX template for Initial address message (IAM) with parametrized OFCI and CUGIC parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + p_OFCI, /* Optional forward call indicators, O, len=3 */ + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + p_CUGIC, /* Closed user group interlock code, O, len=6 */ + mw_OCN_PAR_tlv_any ifpresent, + mw_UUIF_PAR_tlv_any ifpresent, + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + mw_UTSI_PAR_tlv_any ifpresent, + mw_TMRP_PAR_tlv_any ifpresent, + mw_HPC_PAR_tlv_any ifpresent), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template IAM_MSG mw_IAM_MSG_OtherParameters + (template UUIF_PAR_tlv p_UUIF, + template UTSI_PAR_tlv p_UTSI, + template HPC_PAR_tlv p_HPC) := +/* RX template for Initial address message (IAM) with parametrized UUIF, USTI and HPC parameter and 'any' other optional parameters */ +{ + msgType := '00000001'B, /* Message Type '00000001'B */ + natureOfConnectionIndicators := mw_NCI_PAR_v_any, /* Nature of connection indicators, F, len=1 */ + forwardCallIndicators := mw_FCI_PAR_v_any, /* Forward call indicators, F, len=2 */ + callingPartysCategory := ?, /* Calling party's category, F, len=1 */ + transmissionMediumRequirement := ?, /* Transmission medium requirement, F, len=1 */ + pCDN := '00000010'B, /* Pointer to parameter 'Called party number'. */ + pOptional := ?, /* Pointer to optional parameters. */ + calledPartyNumber := mw_CDN_PAR_lv_any, /* Called party number, V, len=4-? */ + optionalParameters := mw_IAM_USED_OPTIONAL_PARAMS + (mw_CGN_PAR_tlv_any ifpresent, + mw_OFCI_PAR_tlv_any ifpresent, + mw_RDN_PAR_tlv_any ifpresent, + mw_RDI_PAR_tlv_any ifpresent, + mw_CUGIC_PAR_tlv_any ifpresent, + mw_OCN_PAR_tlv_any ifpresent, + p_UUIF, /* User-to-user information, O, len=3-131 */ + mw_ATP_PAR_tlv_any ifpresent, + mw_USI_PAR_tlv_any ifpresent, + mw_GNU_PAR_tlv_any ifpresent, + mw_USIP_PAR_tlv_any ifpresent, + p_UTSI, /* User teleservice information, O, len=4-5 */ + mw_TMRP_PAR_tlv_any ifpresent, + p_HPC /* Hop counter, O, len=3 */ + ), /* SET: optional parameters of Initial address message (IAM) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +} /* end group IAM */ + +group IDR { +template IDR_MSG m_IDR_MRQI(template MCRI_PAR_tlv p_MRQI) := +/* TX template for Identification request message (IDR) with MCID request indicators parameterized, and with no other optional parameters */ +{ + msgType := '00110110'B, /* Message Type '00110110'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_IDR_USED_OPTIONAL_PARAMS(p_MRQI), /* SET: optional parameters of Identification request message (IDR) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group IDR */ + +group INF { +template INF_MSG m_INF := +/* TX template for Information message (INF) with Calling party number parameter, and with no other optional parameters */ +{ + msgType := '00000100'B, /* Message Type '00000100'B */ + informationIndicators := m_IID_PAR_v, /* Information indicators, F, len=2 */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_INF_USED_OPTIONAL_PARAMS, /* SET: optional parameters of Information message (INF) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group INF */ + +group INR { +template INR_MSG mw_INR := +/* RX template for Information request message (INR) with 'any' optional values */ +{ + msgType := '00000011'B, /* Message Type '00000011'B */ + informationRequestIndicators := mw_IRI_PAR_v, /* Information request indicators, F, len=2 */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_INR_OPTIONAL_PARAMS_any, /* SET: optional parameters of Inforation requeste message (INR) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group INR */ + +group IRS { +template IRS_MSG mw_IRS_MRSI(template MCRS_PAR_tlv p_MRSI) := +/* RX template for Identification response message (IRS) with MCID response indicators parameterized and with 'any' other values */ +{ + msgType := '00110111'B, /* Message Type '00110111'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_IRS_USED_OPTIONAL_PARAMS(p_MRSI), /* SET: optional parameters of Identification response message (IRS) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group IRS */ + +group LOP { +template LOP_MSG mw_LOP_LPI(template LPPI_PAR_tlv p_LPI) := +/* TX template for Loop prevention message (LOP) with Loop prevention indicators parameterized and with 'any' other optional parameters */ +{ + msgType := '01000000'B, /* Message Type '01000000'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := mw_LOP_USED_OPTIONAL_PARAMS(p_LPI), /* SET: optional parameters of Loop prevention message (LOP) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} + +template LOP_MSG m_LOP_LPI(template LPPI_PAR_tlv p_LPI) := +/* TX template for Loop prevention message (LOP) with Loop prevention indicators parameterized and with no other optional parameters */ +{ + msgType := '01000000'B, /* Message Type '01000000'B */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + optionalParameters := m_LOP_USED_OPTIONAL_PARAMS(p_LPI), /* SET: optional parameters of Loop prevention message (LOP) */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group LOP */ + +group REL { +template REL_MSG m_REL(integer p_cauVal) := +/* TX template for Release message (REL) with Cause Indicators parameterized, and without optional parameters */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + causeIndicators := m_CAU(p_cauVal), /* Cause indicators, V, len=3-? */ + optionalParameters := omit, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template REL_MSG mw_REL_MSG_Def := +/* RX template for Release message (REL) with 'any'-values */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := mw_CAUI_PAR_lv_any, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_REL_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} + +template REL_MSG mw_REL(template CAUI_PAR_lv p_CAU) := +/* RX template for Release message (REL) with Cause Indicators parameterized. */ +{ + msgType := '00001100'B, /* Message Type '00001100'B */ + pCAUI := '00000010'B, /* Pointer to parameter 'Cause indicators'. */ + pOptional := ?, /* Pointer to optional parameters. */ + causeIndicators := p_CAU, /* Cause indicators, V, len=3-? */ + optionalParameters := mw_REL_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release message (REL) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group REL */ + +group RLC { +template RLC_MSG m_RLC_MSG_Def := +/* TX template for Release complete message (RLC) without optional parameters */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /* SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template RLC_MSG m_RLC_MSG_noOpt := +/* TX template for Release complete message (RLC) without optional parameters */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + optionalParameters := omit, /*SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} + +template RLC_MSG mw_RLC := +/* RX template for Release complete message (RLC) with 'any'-values */ +{ + msgType := '00010000'B, /* Message Type '00010000'B */ + pOptional := ?, /* Pointer to optional parameters. */ + optionalParameters := mw_RLC_OPTIONAL_PARAMS_any, /* SET: optional parameters of Release complete message (RLC) */ + endOfOptionalParameters := '00000000'B ifpresent /* End of optional parameters, O, len=1 */ +} +} /* end group RLC */ + +group RSC { +template RSC_MSG m_RSC := +/* TX template for Reset circuit message (RSC) */ +{ + msgType := '00010010'B /* Message Type '00010010'B */ +} +} /* end group RSC */ + +group SAM { +template SAM_MSG m_SAM_SQN(template SNN_PAR_lv p_SNN) := +/* TX template for Subsequent address message (SAM) with subsequent number parameterized and without optional parameters */ +{ + msgType := '00000010'B, /* Message Type '00000010'B */ + pSNN := '00000010'B, /* Pointer to parameter 'Subsequent number'. */ + pOptional := '00000000'B, /* Pointer to optional parameters. */ + subsequentNumber := p_SNN, /* Subsequent number, V, len=3-? */ + endOfOptionalParameters := omit /* End of optional parameters, O, len=1 */ +} +} /* end group SAM */ + +template UNKNOWN_MSG m_UNKNOWN_MCPI(template MCI_PAR_tlv p_MCI) := +/* TX template for an unknown message, with Message compatibility information parameterized, and without other optional parameters.*/ +{ + msgType := PX_ISUP_TX_unknown_message_type, /* Unknown Message Type */ + pOptional := '00000001'B, /* Pointer to optional parameters. */ + messageCompatibilityInformation := p_MCI, /* Message compatibility information, O, len=4-? */ + endOfOptionalParameters := '00000000'B /* End of optional parameters, O, len=1 */ +} +} /* end group ISUP_BICC_Messages */ + +group ISUP_ASPs { +template ISUP_BICC_MSG_req m_ISUP_MSG_req(Bit12 p_cic, template ISUP_BICC_MSG p_ISUP_BICC_MSG, Bit4 p_SLS) := +/* ASP template used to send an ISUP message */ +{ + serviceIndicatorOctet := m_SIO, /* contents only used if ISUP selected */ + routingLabel := m_RoutingLabel(PX_ISUP_PC_SUT, PX_ISUP_PC_TS, p_SLS), /* contents only evaluated if ISUP selected */ + circuitIdentityCode := m_CIC(p_cic), /* contents only evaluated if ISUP selected */ + callInstanceCode := omit, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template ISUP_BICC_MSG_ind mw_ISUP_MSG_ind(template Bit12 p_cic, template ISUP_BICC_MSG p_ISUP_BICC_MSG, template Bit4 p_SLS) := +/* ASP template used to receive an ISUP message */ +{ + serviceIndicatorOctet := m_SIO, /* contents only used if ISUP selected */ + routingLabel := m_RoutingLabel(PX_ISUP_PC_TS, PX_ISUP_PC_SUT,p_SLS), /* contents only evaluated if ISUP selected */ + circuitIdentityCode := m_CIC(p_cic), /* contents only evaluated if ISUP selected */ + callInstanceCode := omit, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} +} /* end group ISUP_ASPs */ + +group BICC_ASPs{ +template ISUP_BICC_MSG_req m_BICC_MSG_req(CallInstanceCode p_CallInstCode, template ISUP_BICC_MSG p_ISUP_BICC_MSG) := +/* ASP template used to send a BICC message */ +{ + serviceIndicatorOctet := omit, /* contents only used if ISUP selected */ + routingLabel := omit, /* contents only evaluated if ISUP selected */ + circuitIdentityCode := omit, /* contents only evaluated if ISUP selected */ + callInstanceCode := p_CallInstCode, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template ISUP_BICC_MSG_ind mw_BICC_MSG_ind(template CallInstanceCode p_CallInstCode, template ISUP_BICC_MSG p_ISUP_BICC_MSG) := +/* ASP template used to receive a BICC message */ +{ + serviceIndicatorOctet := omit, /* contents only used if ISUP selected */ + routingLabel := omit, /* contents only evaluated if ISUP selected */ + circuitIdentityCode := omit, /* contents only evaluated if ISUP selected */ + callInstanceCode := p_CallInstCode, /* contents only evaluated if BICC selected */ + iSUP_BICC_MSG := p_ISUP_BICC_MSG /* common part of ISUP/BICC message */ +} + +template InitializeIsupBicc_req m_InitializeIsup_req := +/* Used to Initialize the ISUP test system. */ +{ + ts_pointCode := PX_ISUP_PC_TS, /* Signalling point code of the TS (ISUP).*/ + sut_pointCode := PX_ISUP_PC_SUT, /*Signalling point code of the SUT (ISUP).*/ + ts_address_isup_bicc := omit, /* Address (e.g. IP) of the TS (ISUP/BICC side). */ + sut_address_isup_bicc := omit /* Address (e.g. IP) of the SUT (ISUP/BICC side). */ +} + +template InitializeIsupBicc_req m_InitializeBicc_req := +/* Used to Initialize the BICC test system. */ +{ + ts_pointCode := omit, /* Signalling point code of the TS (ISUP).*/ + sut_pointCode := omit, /*Signalling point code of the SUT (ISUP).*/ + ts_address_isup_bicc := PX_TS_ADRESS_ISUP_BICC, /* Address (e.g. IP) of the TS (ISUP/BICC side). */ + sut_address_isup_bicc := PX_SUT_ADRESS_ISUP_BICC /* Address (e.g. IP) of the SUT (ISUP/BICC side). */ +} +/* Additional comments: +This ASP is used at the beginning of each test case to initiate the necessary initialization of the +ISUP/BICC part of the test system, particularly the interfaces to the SUT. +If module parameter 'PX_ISUP_Isup' indicates 'falsec', the values of parameters 'ts_pointCode' and 'sut_pointCode' shall +be ignored by the SA. +If module parameter 'PX_ISUP_Isup' indicates 'true', the values of parameters 'ts_address_isup_bicc' and +'sut_address_isup_bicc' may be ignored, if they are not necessary. +Among the initializing actions there shall be: +a) Verification that the ISUP/BICC link is operable between SUT and TS. +b) Verification that the TS is ready to send and receive SIP messages. +Note: It is a matter of TS implementation whether the TS, upon this request, sets up and initializes lower layer connections, if these are not setup. +Other initialization actions may be TS-specific. */ + +template InitializeIsupBicc_cnf mw_InitializeIsupBicc_cnf := +/* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ +{ + result := true /* Indicating success of the whole initialization. */ +} + + +template BearerSetup_req m_BearerSetup_req(CallInstanceCode p_cic) := +/* For BICC: request TS to setup the bearer connection between TS and SUT. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerSetup_acc mw_BearerSetup_acc(CallInstanceCode p_cic) := +/* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ +{ + cic := p_cic, /* Call Instance Code identifying the bearer connection. */ + result := true /* The answer is positive when the bearer connection setup was successful and negative when the bearer connection setup failed. */ +} + +template BearerRelease_req m_BearerRelease_req(CallInstanceCode p_cic) := +/* For BICC: request to release the established bearer connection. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerRelease_cnf m_BearerRelease_cnf(CallInstanceCode p_cic) := +/* For BICC: confirmation that the requested bearer is released. */ +{ + cic := p_cic, /* Call Instance Code identifying the bearer connection. */ + result := true /* Indication that the bearer is successfully released. */ +} + +template BearerSetup_ind mw_Setup_ind(CallInstanceCode p_cic) := +/* Indication that the bearer has been released. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} + +template BearerRelease_ind mw_BearerRelease_ind(CallInstanceCode p_cic) := +/* Indication that the bearer has been released. */ +{ + cic := p_cic /* Call Instance Code identifying the bearer connection. */ +} +} /* end group BICC_ASPs */ +} /* end module SipIsup_ISUP_MsgTemplates */ + + diff --git a/IsupAts/SipIsup_ISUP_MsgTypes.ttcn b/IsupAts/SipIsup_ISUP_MsgTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ea2901085addf148fa553f6e44007c81477995ca --- /dev/null +++ b/IsupAts/SipIsup_ISUP_MsgTypes.ttcn @@ -0,0 +1,971 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-related Message type declarations. +*/ +module SipIsup_ISUP_MsgTypes +{ +import from LibCommon_BasicTypesAndValues all; +import from LibCommon_DataStrings all; +import from LibCommon_TextStrings all; +import from SipIsup_ISUP_ParamTypes all; + +group ISUP_BICC_Messages { +// Union type for all possible ISUP/BICC messages +type union ISUP_BICC_MSG +{ + ACM_MSG aCM_MSG, /* Address complete message (ACM) */ + ANM_MSG aNM_MSG, /* Answer message (ANM) */ + APM_MSG aPM_MSG, /* Application transport message (APM) */ + BLA_MSG bLA_MSG, /* Blocking acknowledgement message (BLA) */ + BLO_MSG bLO_MSG, /* Blocking message (BLO) */ + CCR_MSG cCR_MSG, /* Continuity check request message (CCR) */ + CFN_MSG cFN_MSG, /* Confusion message (CFN) */ + CGB_MSG cGB_MSG, /* Circuit group blocking message (CGB) */ + CGBA_MSG cGBA_MSG, /* Circuit group blocking acknowledgement message (CGBA) */ + CGQ_MSG cGQ_MSG, /* Circuit group query message (CGQ) */ + CGQR_MSG cGQR_MSG, /* Circuit group query response message (CGQR) */ + GRS_MSG gRS_MSG, /* Circuit group reset message (GRS) */ + GRA_MSG gRA_MSG, /* Circuit group reset acknowledgement message (GRA) */ + CGU_MSG cGU_MSG, /* Circuit group unblocking message (CGU) */ + CGUA_MSG cGUA_MSG, /* Circuit group unblocking acknowledgement message (CGUA) */ + CON_MSG cON_MSG, /* Connect message (CON) */ + CPG_MSG cPG_MSG, /* Call progress message (CPG) */ + COT_MSG cOT_MSG, /* Continuity message (COT) */ + FAA_MSG fAA_MSG, /* Facility accepted message (FAA) */ + FAC_MSG fAC_MSG, /* Facility message (FAC) */ + FRJ_MSG fRJ_MSG, /* Facility reject message (FRJ) */ + FAR_MSG fAR_MSG, /* Facility request message (FAR) */ + FTR_MSG fTR_MSG, /* Forward transfer message (FTR) */ + IAM_MSG iAM_MSG, /* Initial address message (IAM) */ + INF_MSG iNF_MSG, /* Information message (INF) */ + INR_MSG iNR_MSG, /* Information request message (INR) */ + IDR_MSG iDR_MSG, /* Identification request message (IDR) */ + IRS_MSG iRS_MSG, /* Identification response message (IRS) */ + LBA_MSG lBA_MSG, /* Loop back acknowledgement message (LBA) */ + LOP_MSG lOP_MSG, /* Loop prevention message (LOP) */ + NRM_MSG nRM_MSG, /* Network resource management message (NRM) */ + OVL_MSG oVL_MSG, /* Overload message (OVL) */ + PRI_MSG pRI_MSG, /* Pre-release information message (PRI) */ + REL_MSG rEL_MSG, /* Release message (REL) */ + RES_MSG rES_MSG, /* Resume message (RES) */ + RLC_MSG rLC_MSG, /* Release complete message (RLC) */ + RSC_MSG rSC_MSG, /* Reset circuit message (RSC) */ + SAM_MSG sAM_MSG, /* Subsequent address message (SAM) */ + SDN_MSG sDN_MSG, /* Subsequent Directory Number message (SDN) */ + SEG_MSG sEG_MSG, /* Segmentation message (SEG) */ + SUS_MSG sUS_MSG, /* Suspend message (SUS) */ + UBA_MSG uBA_MSG, /* Unblocking acknowledgement message (UBA) */ + UBL_MSG uBL_MSG, /* Unblocking message (UBL) */ + UPA_MSG uPA_MSG, /* User Part available message (UPA) */ + UPT_MSG uPT_MSG, /* User Part test message (UPT) */ + UQC_MSG uQC_MSG, /* Unequipped CIC message (UQC) */ + UUI_MSG uUI_MSG, /* User-to-user information message (UUI) */ + UNKNOWN_MSG uNKNOWN_MSG /* Message with undefined message type*/ +} + +type record ACM_MSG /* Address complete message (ACM) */ +{ + Bit8 msgType ('00000110'B), /* Message Type '00000110'B */ + BCI_PAR_v backwardCallIndicators, /* Backward call indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + ACM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Address complete message (ACM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x06)"; } + +type set ACM_OPTIONAL_PARAMS /* SET: optional parameters of Address complete message (ACM) */ +{ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CAUI_PAR_tlv causeIndicators optional, /* Cause indicators, O, len=4-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CDI_PAR_tlv callDiversionInformation optional, /* Call diversion information, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + UAI_PAR_tlv uIDActionIndicators optional, /* UID action indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + CCPI_PAR_tlv cCNRPossibleIndicator optional, /* CCNR possible indicator, O, len=3 */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + UNKNOWN_PAR_tlv unknownParameter optional /* Unknown parameter */ +} + +type record ANM_MSG /* Answer message (ANM) */ +{ + Bit8 msgType('00001001'B), /* Message Type '00001001'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + ANM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Answer message (ANM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +//with { encode "present=bytes(1,0x09)"; } + +type set ANM_OPTIONAL_PARAMS /* SET: optional parameters of Answer message (ANM) */ +{ + BCI_PAR_tlv backwardCallIndicators optional, /* Backward call indicators, O, len=4 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + DIF_PAR_tlv displayInformation optional, /* Display information, O, len=3-? */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=1-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3 */ +} + +type record APM_MSG /* Application transport message (APM) */ +{ + Bit8 msgType('01000001'B), /* Message Type '01000001'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + APM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Application transport message (APM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x41)"; } + +type set APM_OPTIONAL_PARAMS /* SET: optional parameters of Application transport message (APM) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional /* Application transport parameter2, O, len=5-? */ +} + +type record BLA_MSG /* Blocking acknowledgement message (BLA) */ +{ + Bit8 msgType ('00010101'B) /* Message Type '00010101'B */ +} +//with { encode "present=bytes(1,0x15)"; } + +type record BLO_MSG /* Blocking message (BLO) */ +{ + Bit8 msgType ('00010011'B) /* Message Type '00010011'B */ +} +//with { encode "present=bytes(1,0x13)"; } + +type record CCR_MSG /* Continuity check request message (CCR) */ +{ + Bit8 msgType ('00010001'B) /* Message Type '00010001'B */ +} +//with { encode "present=bytes(1,0x11)"; } + +type record CFN_MSG /* Confusion message (CFN) */ +{ + Bit8 msgType ('00101111'B), /* Message Type '00101111'B */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2F)"; } + +type record CGB_MSG /* Circuit group blocking message (CGB) */ +{ + Bit8 msgType ('00011000'B), /* Message Type '00011000'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x18)"; } + +type record CGBA_MSG /* Circuit group blocking acknowledgement message (CGBA) */ +{ + Bit8 msgType ('00011010'B), /* Message Type '00011010'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x1A)"; } + +type record CGQ_MSG /* Circuit group query message (CGQ) */ +{ + Bit8 msgType ('00101010'B), /* Message Type '00101010'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=2 */ +} +with { encode "present=bytes(1,0x2A)"; } + +type record CGQR_MSG /* Circuit group query response message (CGQR) */ +{ + Bit8 msgType ('00101011'B), /* Message Type '00101011'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + Bit8 pCSI, /* Pointer to parameter 'Circuit state indicator'. */ + RAS_PAR_lv rangeAndStatus, /* Range and status, V, len=2 */ + CSI_PAR_lv circuitStateIndicator /* Circuit state indicator, V, len=2-33 */ +} +with { encode "present=bytes(1,0x2B)"; } + +type record CGU_MSG /* Circuit group unblocking message (CGU) */ +{ + Bit8 msgType ('00011001'B), /* Message Type '00011001'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x19)"; } + +type record CGUA_MSG /* Circuit group unblocking acknowledgement message (CGUA) */ +{ + Bit8 msgType ('00011011'B), /* Message Type '00011011'B */ + CGSM_PAR_v circuitGroupSupervisionMessageType, /* Circuit group supervision message type, F, len=1 */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x1B)"; } + +type record CON_MSG /* Connect message (CON) */ +{ + Bit8 msgType ('00000111'B), /* Message Type '00000111'B */ + BCI_PAR_v backwardCallIndicators, /* Backward call indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CON_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Connect message (CON) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x07)"; } + +type set CON_OPTIONAL_PARAMS /* SET: optional parameters of Connect message (CON) */ +{ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3 */ +} + +type record COT_MSG /* Continuity message (COT) */ +{ + Bit8 msgType ('00000101'B), /* Message Type '00000101'B */ + COI_PAR_v continuityIndicators /* Continuity indicators, F, len=1 */ +} +with { encode "present=bytes(1,0x05)"; } + +type record CPG_MSG /* Call progress message (CPG) */ +{ + Bit8 msgType ('00101100'B), /* Message Type '00101100'B */ + EIF_PAR_v eventInformation, /* Event information, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CPG_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Call progress message (CPG) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2C)"; } + +type set CPG_OPTIONAL_PARAMS /* SET: optional parameters of Call progress message (CPG) */ +{ + CAUI_PAR_tlv causeIndicators optional, /* Cause indicators, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + BCI_PAR_tlv backwardCallIndicators optional, /* Backward call indicators, O, len=4 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + TMU_PAR_tlv transmissionMediumUsed optional, /* Transmission medium used, O, len=3 */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CDI_PAR_tlv callDiversionInformation optional, /* Call diversion information, O, len=3 */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + RNS_PAR_tlv redirectionNumberRestriction optional, /* Redirection number restriction, O, len=3 */ + CTN_PAR_tlv callTransferNumber optional, /* Call transfer number, O, len=4-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + CPN_PAR_tlv connectedNumber optional, /* Connected number, O, len=4-? */ + BGV_PAR_tlv backwardGVNS optional, /* Backward GVNS, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + CHI_PAR_tlv callHistoryInformation optional, /* Call history information, O, len=4 */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + UAI_PAR_tlv uIDActionIndicators optional, /* UID action indicators, O, len=3-? */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + CCPI_PAR_tlv cCNRPossibleIndicator optional, /* CCNR possible indicator, O, len=3 */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + UNKNOWN_PAR_tlv unknownParameter optional /* Unknown parameter */ +} + +type record CPG_MSG_unknown_parameter /* Call progress message (CPG) with one unknown optional parameters */ +{ + Bit8 msgType ('00101100'B), /* Message Type '00101100'B */ + EIF_PAR_v eventInformation, /* Event information, F, len=1 */ + Bit8 pOptional ('00000001'B), /* Pointer to optional parameters. */ + UNKNOWN_PAR_tlv unknownParameter, /* Unknown parameter */ + EOP endOfOptionalParameters ('00000000'B) /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2C)"; } + +type record FAA_MSG /* Facility accepted message (FAA) */ +{ + Bit8 msgType ('00100000'B), /* Message Type '00100000'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAA_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility accepted message (FAA) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x20)"; } + +type set FAA_OPTIONAL_PARAMS /* SET: optional parameters of Facility accepted message (FAA) */ +{ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record FAC_MSG /* Facility message (FAC) */ +{ + Bit8 msgType('00110011'B), /* Message Type '00110011'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAC_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility message (FAC) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x33)"; } + +type set FAC_OPTIONAL_PARAMS /* SET: optional parameters of Facility message (FAC) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + CTN_PAR_tlv callTransferNumber optional, /* Call transfer number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=4-? */ + PRI_PAR_tlv pivotRoutingIndicators optional, /* Pivot routing indicators, O, len=3 */ + PST_PAR_tlv pivotStatus optional, /* Pivot status, O, len=3 */ + PICN_PAR_tlv pivotCounter optional, /* Pivot counter, O, len=3 */ + PRBI_PAR_tlv pivotRoutingBackwardInformation optional, /* Pivot routing backward information, O, len=3-? */ + RST_PAR_tlv redirectStatus optional /* Redirect status, O, len=3-? */ +} + +type record FAR_MSG /* Facility request message (FAR) */ +{ + Bit8 msgType ('00011111'B), /* Message Type '00011111'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FAR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility request message (FAR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x1F)"; } + +type set FAR_OPTIONAL_PARAMS /* SET: optional parameters of Facility request message (FAR) */ +{ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record FRJ_MSG /* Facility reject message (FRJ) */ +{ + Bit8 msgType('00100001'B), /* Message Type '00100001'B */ + FAI_PAR_v facilityIndicator, /* Facility indicator, F, len=1 */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + FRJ_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Facility reject message (FRJ) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x21)"; } + +type set FRJ_OPTIONAL_PARAMS /* SET: optional parameters of Facility reject message (FRJ) */ +{ + UUID_PAR_tlv userToUserIndicators optional /* User-to-user indicators, O, len=3 */ +} + +type record FTR_MSG /* Forward transfer message (FTR) */ +{ + Bit8 msgType('00001000'B), /* Message Type '00001000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + FTR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Forward transfer message (FTR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x08)"; } + +type set FTR_OPTIONAL_PARAMS /* SET: optional parameters of Forward transfer message (FTR) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record GRA_MSG /* Circuit group reset acknowledgement message (GRA) */ +{ + Bit8 msgType ('00101001'B), /* Message Type '00101001'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=3-34 */ +} +with { encode "present=bytes(1,0x29)"; } + +type record GRS_MSG /* Circuit group reset message (GRS) */ +{ + Bit8 msgType ('00010111'B), /* Message Type '00010111'B */ + Bit8 pRAS, /* Pointer to parameter 'Range and status'. */ + RAS_PAR_lv rangeAndStatus /* Range and status, V, len=2 */ +} +with { encode "present=bytes(1,0x17)"; } + +type record IAM_MSG /* Initial address message (IAM) */ +{ + Bit8 msgType ('00000001'B), /* Message Type '00000001'B */ + NCI_PAR_v natureOfConnectionIndicators, /* Nature of connection indicators, F, len=1 */ + FCI_PAR_v forwardCallIndicators, /* Forward call indicators, F, len=2 */ + CGC_PAR_v callingPartysCategory, /* Calling party's category, F, len=1 */ + TMR_PAR_v transmissionMediumRequirement, /* Transmission medium requirement, F, len=1 */ + Bit8 pCDN, /* Pointer to parameter 'Called party number'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CDN_PAR_lv calledPartyNumber, /* Called party number, V, len=4-? */ + IAM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Initial address message (IAM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x01)"; } + +type set IAM_OPTIONAL_PARAMS /* SET: optional parameters of Initial address message (IAM) */ +{ + TNS_PAR_tlv transitNetworkSelection optional, /* Transit network selection, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + OFCI_PAR_tlv optionalForwardCallIndicators optional, /* Optional forward call indicators, O, len=3 */ + RDN_PAR_tlv redirectingNumber optional, /* Redirecting number, O, len=4-? */ + RDI_PAR_tlv redirectionInformation optional, /* Redirection information, O, len=3-4 */ + CUGIC_PAR_tlv closedUserGroupInterlockCode optional, /* Closed user group interlock code, O, len=6 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + OCN_PAR_tlv originalCalledNumber optional, /* Original called number, O, len=4-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + USI_PAR_tlv userServiceInformation optional, /* User service information, O, len=4-13 */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional, /* Generic number2, O, len=5-? */ + PDC_PAR_tlv propagationDelayCounter optional, /* Propagation delay counter, O, len=4 */ + USIP_PAR_tlv userServiceInformationPrime optional, /* User service information prime, O, len=4-13 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + GDG_PAR_tlv genericDigits1 optional, /* Generic digits1, O, len=4-? */ + GDG_PAR_tlv genericDigits2 optional, /* Generic digits2, O, len=4-? */ + OIPC_PAR_tlv originationISCPointCode optional, /* Origination ISC point code, O, len=4 */ + UTSI_PAR_tlv userTeleserviceInformation optional, /* User teleservice information, O, len=4-5 */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + SAC_PAR_tlv serviceActivation optional, /* Service activation, O, len=3-? */ + MLPP_PAR_tlv mLPPPrecedence optional, /* MLPP precedence, O, len=8 */ + TMRP_PAR_tlv transmissionMediumRequirementPrime optional, /* Transmission medium requirement prime, O, len=3 */ + LON_PAR_tlv locationNumber optional, /* Location number, O, len=4-? */ + FGVNS_PAR_tlv forwardGVNS optional, /* Forward GVNS, O, len=5-26 */ + CCSS_PAR_tlv cCSS optional, /* CCSS, O, len=3-? */ + NMC_PAR_tlv networkManagementControls optional, /* Network management controls, O, len=3-? */ + CAM_PAR_tlv circuitAssignmentMap optional, /* Circuit assignment map, O, len=6-7 */ + CRI_PAR_tlv correlationId optional, /* Correlation id, O, len=3-? */ + CDTI_PAR_tlv callDiversionTreatmentIndicators optional, /* Call diversion treatment indicators, O, len=3-? */ + CIN_PAR_tlv calledINNumber optional, /* Called IN number, O, len=4-? */ + COTI_PAR_tlv callOfferingTreatmentIndicators optional, /* Call offering treatment indicators, O, len=3-? */ + CTI_PAR_tlv conferenceTreatmentIndicators optional, /* Conference treatment indicators, O, len=3-? */ + SCFI_PAR_tlv sCFId optional, /* SCF id, O, len=3-? */ + UCI_PAR_tlv uIDCapabilityIndicators optional, /* UID capability indicators, O, len=3-? */ + ECI_PAR_tlv echoControlInformation optional, /* Echo control information, O, len=3 */ + HPC_PAR_tlv hopCounter optional, /* Hop counter, O, len=3 */ + CCRQ_PAR_tlv collectCallRequest optional, /* Collect call request, O, len=3 */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional, /* Application transport parameter2, O, len=5-? */ + PICP_PAR_tlv pivotCapability optional, /* Pivot capability, O, len=3 */ + CDIN_PAR_tlv calledDirectoryNumber optional, /* Called directory number, O, len=5-? */ + OCI_PAR_tlv originalCalledINNumber optional, /* Original called IN number, O, len=4-? */ + CGL_PAR_tlv callingGeodeticLocation optional, /* Calling geodetic location, O, len=3-? */ + NRN_PAR_tlv networkRoutingNumber optional, /* Network routing number, O, len=4-? */ + QRC_PAR_tlv queryOnReleaseCapability optional, /* Query on release capability, O, len=3 */ + PICN_PAR_tlv pivotCounter optional, /* Pivot counter, O, len=3 */ + PRFI_PAR_tlv pivotRoutingForwardInformation optional, /* Pivot routing forward information, O, len=3-? */ + RCP_PAR_tlv redirectCapability optional, /* Redirect capability, O, len=3 */ + RCN_PAR_tlv redirectCounter optional, /* Redirect counter, O, len=3 */ + RST_PAR_tlv redirectStatus optional, /* Redirect status, O, len=3 */ + RFI_PAR_tlv redirectForwardInformation optional, /* Redirect forward information, O, len=3-? */ + NPFI_PAR_tlv numberPortabilityForwardInformation optional, /* Number portability forward information, O, len=1-? */ + ARR_PAR_tlv automaticReRouting optional /* Automatic re-routing, O, len=4-? */ +} + +type record IDR_MSG /* Identification request message (IDR) */ +{ + Bit8 msgType('00110110'B), /* Message Type '00110110'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + IDR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Identification request message (IDR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x36)"; } + +type set IDR_OPTIONAL_PARAMS /* SET: optional parameters of Identification request message (IDR) */ +{ + MCRI_PAR_tlv mCIDRequestIndicators optional, /* MCID request indicators, O, len=3 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record INF_MSG /* Information message (INF) */ +{ + Bit8 msgType ('00000100'B), /* Message Type '00000100'B */ + IID_PAR_v informationIndicators, /* Information indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + INF_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Information message (INF) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x04)"; } + +type set INF_OPTIONAL_PARAMS /* SET: optional parameters of Information message (INF) */ +{ + CGC_PAR_tlv callingPartysCategory optional, /* Calling party's category, O, len=3 */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + CRQ_PAR_tlv connectionRequest optional, /* Connection request, O, len=7-9 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + NSF_PAR_tlv networkSpecificFacility optional /* Network specific facility, O, len=4-? */ +} + +type record INR_MSG /* Information request message (INR) */ +{ + Bit8 msgType ('00000011'B), /* Message Type '00000011'B */ + IRI_PAR_v informationRequestIndicators, /* Information request indicators, F, len=2 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + INR_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Information request message (INR) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x03)"; } + +type set INR_OPTIONAL_PARAMS /* SET: optional parameters of Information request message (INR) */ +{ + CRF_PAR_tlv callReference optional, /* Call reference, O, len=7 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record IRS_MSG /* Identification response message (IRS) */ +{ + Bit8 msgType('00110111'B), /* Message Type '00110111'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + IRS_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Identification response message (IRS) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x37)"; } + +type set IRS_OPTIONAL_PARAMS /* SET: optional parameters of Identification response message (IRS) */ +{ + MCRS_PAR_tlv mCIDResponseIndicators optional, /* MCID response indicators, O, len=3 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CGN_PAR_tlv callingPartyNumber optional, /* Calling party number, O, len=4-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional /* Generic number2, O, len=5-? */ +} + +type record LBA_MSG /* Loop back acknowledgement message (LBA) */ +{ + Bit8 msgType ('00100100'B) /* Message Type '00100100'B */ +} +//with { encode "present=bytes(1,0x24)"; } + +type record LOP_MSG /* Loop prevention message (LOP) */ +{ + Bit8 msgType('01000000'B), /* Message Type '01000000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + LOP_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Loop prevention message (LOP) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x40)"; } + +type set LOP_OPTIONAL_PARAMS /* SET: optional parameters of Loop prevention message (LOP) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + CTR_PAR_tlv callTransferReference optional, /* Call transfer reference, O, len=3 */ + LPPI_PAR_tlv loopPreventionIndicators optional /* Loop prevention indicators, O, len=3 */ +} + +type record NRM_MSG /* Network resource management message (NRM) */ +{ + Bit8 msgType('00110010'B), /* Message Type '00110010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + NRM_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Network resource management message (NRM) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x32)"; } + +type set NRM_OPTIONAL_PARAMS /* SET: optional parameters of Network resource management message (NRM) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + ECI_PAR_tlv echoControlInformation optional /* Echo control information, O, len=3 */ +} + +type record OVL_MSG /* Overload message (OVL) */ +{ + Bit8 msgType ('00110000'B) /* Message Type '00110000'B */ +} +//with { encode "present=bytes(1,0x30)"; } + +type record PRI_MSG /* Pre-release information message (PRI) */ +{ + Bit8 msgType('01000010'B), /* Message Type '01000010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + PRI_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Pre-release information message (PRI) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x42)"; } + +type set PRI_OPTIONAL_PARAMS /* SET: optional parameters of Pre-release information message (PRI) */ +{ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + OFCI_PAR_tlv optionalForwardCallIndicators optional, /* Optional forward call indicators, O, len=3 */ + OBCI_PAR_tlv optionalBackwardCallIndicators optional, /* Optional backward call indicators, O, len=3 */ + APP_PAR_tlv applicationTransportParameter1 optional, /* Application transport parameter1, O, len=5-? */ + APP_PAR_tlv applicationTransportParameter2 optional /* Application transport parameter2, O, len=5-? */ +} + +type record REL_MSG /* Release message (REL) */ +{ + Bit8 msgType ('00001100'B), /* Message Type '00001100'B */ + Bit8 pCAUI, /* Pointer to parameter 'Cause indicators'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + CAUI_PAR_lv causeIndicators, /* Cause indicators, V, len=3-? */ + REL_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Release message (REL) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0C)"; } + +type set REL_OPTIONAL_PARAMS /* SET: optional parameters of Release message (REL) */ +{ + RDI_PAR_tlv redirectionInformation optional, /* Redirection information, O, len=3-4 */ + RNN_PAR_tlv redirectionNumber optional, /* Redirection number, O, len=5-? */ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + SPC_PAR_tlv signallingPointCode optional, /* Signalling point code, O, len=4 */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + ACL_PAR_tlv automaticCongestionLevel optional, /* Automatic congestion level, O, len=3 */ + NSF_PAR_tlv networkSpecificFacility optional, /* Network specific facility, O, len=4-? */ + ADI_PAR_tlv accessDeliveryInformation optional, /* Access delivery information, O, len=3 */ + PCI_PAR_tlv parameterCompatibilityInformation optional, /* Parameter compatibility information, O, len=4-? */ + UUID_PAR_tlv userToUserIndicators optional, /* User-to-user indicators, O, len=3 */ + DIF_PAR_tlv displayInformation optional, /* Display information, O, len=3-? */ + ROP_PAR_tlv remoteOperations optional, /* Remote operations, O, len=8-? */ + HTRI_PAR_tlv hTRInformation optional, /* HTR information, O, len=4-? */ + RCN_PAR_tlv redirectCounter optional, /* Redirect counter, O, len=3 */ + RBI_PAR_tlv redirectBackwardInformation optional /* Redirect backward information, O, len=3-? */ +} + +type record RES_MSG /* Resume message (RES) */ +{ + Bit8 msgType ('00001110'B), /* Message Type '00001110'B */ + SRI_PAR_v suspendResumeIndicators, /* Suspend Resume indicators, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + RES_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Resume message (RES) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0E)"; } + +type set RES_OPTIONAL_PARAMS /* SET: optional parameters of Resume message (RES) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record RLC_MSG /* Release complete message (RLC) */ +{ + Bit8 msgType('00010000'B), /* Message Type '00010000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + RLC_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Release complete message (RLC) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +//with { encode "present=bytes(1,0x010)"; } + +type set RLC_OPTIONAL_PARAMS /* SET: optional parameters of Release complete message (RLC) */ +{ + CAUI_PAR_tlv causeIndicators optional /* Cause indicators, O, len=5-6 */ +} + +type record RSC_MSG /* Reset circuit message (RSC) */ +{ + Bit8 msgType ('00010010'B) /* Message Type '00010010'B */ +} +//with { encode "present=bytes(1,0x12)"; } + +type record SAM_MSG /* Subsequent address message (SAM) */ +{ + Bit8 msgType ('00000010'B), /* Message Type '00000010'B */ + Bit8 pSNN, /* Pointer to parameter 'Subsequent number'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SNN_PAR_lv subsequentNumber, /* Subsequent number, V, len=3-? */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +}with { encode "present=bytes(1,0x02)"; } + +type record SDN_MSG /* Subsequent Directory Number message (SDN) */ +{ + Bit8 msgType('01000011'B), /* Message Type '01000011'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SDN_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Subsequent Directory Number message (SDN) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x43)"; } + + +type set SDN_OPTIONAL_PARAMS /* SET: optional parameters of Subsequent Directory Number message (SDN) */ +{ + SNN_PAR_tlv subsequentNumber optional, /* Subsequent number, O, len=4-? */ + MCI_PAR_tlv messageCompatibilityInformation optional /* Message compatibility information, O, len=4-? */ +} + +type record SEG_MSG /* Segmentation message (SEG) */ +{ + Bit8 msgType('00111000'B), /* Message Type '00111000'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SEG_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Segmentation message (SEG) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x38)"; } + +type set SEG_OPTIONAL_PARAMS /* SET: optional parameters of Segmentation message (SEG) */ +{ + ATP_PAR_tlv accessTransport optional, /* Access transport, O, len=3-? */ + UUIF_PAR_tlv userToUserInformation optional, /* User-to-user information, O, len=3-131 */ + MCI_PAR_tlv messageCompatibilityInformation optional, /* Message compatibility information, O, len=3-? */ + GDG_PAR_tlv genericDigits1 optional, /* Generic digits1, O, len=4-? */ + GDG_PAR_tlv genericDigits2 optional, /* Generic digits2, O, len=4-? */ + GNI_PAR_tlv genericNotificationIndicator1 optional, /* Generic notification indicator1, O, len=3 */ + GNI_PAR_tlv genericNotificationIndicator2 optional, /* Generic notification indicator2, O, len=3 */ + GNU_PAR_tlv genericNumber1 optional, /* Generic number1, O, len=5-? */ + GNU_PAR_tlv genericNumber2 optional /* Generic number2, O, len=5-? */ +} + +type record SUS_MSG /* Suspend message (SUS) */ +{ + Bit8 msgType ('00001101'B), /* Message Type '00001101'B */ + SRI_PAR_v suspendResumeIndicators, /* Suspend Resume indicators, F, len=1 */ + Bit8 pOptional, /* Pointer to optional parameters. */ + SUS_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of Suspend message (SUS) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x0D)"; } + +type set SUS_OPTIONAL_PARAMS /* SET: optional parameters of Suspend message (SUS) */ +{ + CRF_PAR_tlv callReference optional /* Call reference, O, len=7 */ +} + +type record UBA_MSG /* Unblocking acknowledgement message (UBA) */ +{ + Bit8 msgType ('00010110'B) /* Message Type '00010110'B */ +} +//with { encode "present=bytes(1,0x16)"; } + +type record UBL_MSG /* Unblocking message (UBL) */ +{ + Bit8 msgType ('00010100'B) /* Message Type '00010100'B */ +} +//with { encode "present=bytes(1,0x14)"; } + +type record UPA_MSG /* User Part available message (UPA) */ +{ + Bit8 msgType('00110101'B), /* Message Type '00110101'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UPA_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User Part available message (UPA) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x35)"; } + +type set UPA_OPTIONAL_PARAMS /* SET: optional parameters of User Part available message (UPA) */ +{ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record UPT_MSG /* User Part test message (UPT) */ +{ + Bit8 msgType('00110100'B), /* Message Type '00110100'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UPT_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User Part test message (UPT) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x34)"; } + +type set UPT_OPTIONAL_PARAMS /* SET: optional parameters of User Part test message (UPT) */ +{ + PCI_PAR_tlv parameterCompatibilityInformation optional /* Parameter compatibility information, O, len=4-? */ +} + +type record UQC_MSG /* Unequipped CIC message (UQC) */ +{ + Bit8 msgType ('00101110'B) /* Message Type '00101110'B */ +} +//with { encode "present=bytes(1,0x2E)"; } + +type record UUI_MSG /* User-to-user information message (UUI) */ +{ + Bit8 msgType ('00101101'B), /* Message Type '00101101'B */ + Bit8 pUUIF, /* Pointer to parameter 'User-to-user information'. */ + Bit8 pOptional, /* Pointer to optional parameters. */ + UUIF_PAR_lv userToUserInformation, /* User-to-user information, V, len=2-130 */ + UUI_OPTIONAL_PARAMS optionalParameters optional, /* SET: optional parameters of User-to-user information message (UUI) */ + EOP endOfOptionalParameters optional /* End of optional parameters, O, len=1 */ +} +with { encode "present=bytes(1,0x2D)"; } + +type set UUI_OPTIONAL_PARAMS /* SET: optional parameters of User-to-user information message (UUI) */ +{ + ATP_PAR_tlv accessTransport optional /* Access transport, O, len=3-? */ +} + +type record UNKNOWN_MSG /* Message with unknown message type */ +{ + Bit8 msgType, /* Unknown Message Type, e.g. '01001010'B */ + Bit8 pOptional, /* Pointer to optional parameters. */ + MCI_PAR_tlv messageCompatibilityInformation, /* Message compatibility information, O, len=4-? */ + EOP endOfOptionalParameters /* End of optional parameters, O, len=1 */ +} +} /* end group ISUP_BICC_Messages */ + +group ISUP_BICC_ASPs { +type record ISUP_BICC_MSG_req /* ASP used to send an ISUP/BICC message */ +{ + ServiceIndicatorOctet serviceIndicatorOctet optional, /* contents only evaluated if ISUP selected */ + RoutingLabel routingLabel optional, /* contents only evaluated if ISUP selected */ + CircuitIdentityCode circuitIdentityCode optional, /* contents only evaluated if ISUP selected */ + CallInstanceCode callInstanceCode optional, /* contents only evaluated if BICC selected */ + ISUP_BICC_MSG iSUP_BICC_MSG optional /* common part of ISUP/BICC message */ +} with { encode "ISUPCodec" } + +/* Additional comments: +The SA takes from the ASP, depending on the value of module parameter 'PX_ISUP_Isup', either the +ordered combination of 'serviceIndicatorOctet', 'routingLabel' and 'circuitIdentityCode' (ISUP), +or 'callInstanceCode' (BICC'), puts it in front of encoded parameter 'iSUP_BICC_MSG', and sends the +so constructed message at the ISUP or BICC interface respectively.*/ + + +type record ISUP_BICC_MSG_ind /* ASP used to receive an ISUP/BICC message */ +{ + ServiceIndicatorOctet serviceIndicatorOctet optional, /* contents only evaluated if ISUP selected */ + RoutingLabel routingLabel optional, /* contents only evaluated if ISUP selected */ + CircuitIdentityCode circuitIdentityCode optional, /* contents only evaluated if ISUP selected */ + CallInstanceCode callInstanceCode optional, /* contents only evaluated if BICC selected */ + ISUP_BICC_MSG iSUP_BICC_MSG optional /* common part of ISUP/BICC message */ +} with { encode "ISUPCodec" } +/* Additional comments: +The SA takes from the received message, depending on the value of module parameter 'PX_ISUP_Isup', +either the ordered combination of 'serviceIndicatorOctet', 'routingLabel' and +'circuitIdentityCode' (ISUP), or 'callInstanceCode' (BICC'), and puts it into the associated ASP +parameters. The complementary ASP parameters 'callInstanceCode' (ISUP) and combination of +'serviceIndicatorOctet', 'routingLabel' and 'circuitIdentityCode' (BICC) are filled by the SA with '0' bits +according to the lengths of their types. +The TE does not evaluate the contents of the complementary parameters (but needs the coorect lengths +to identify the start of 'iSUP_BICC_MSG'. +The received message (body) is put by the SA into parameter 'iSUP_BICC_MSG' and is matched in the ATS with an according receive template.*/ +} /* end group ISUP_BICC_ASPs */ + +group BICC_ASPs { +type record InitializeIsupBicc_req /* ASP used to Initialize the ISUP/BICC part of the test system. */ +{ + Bit14 ts_pointCode optional, /* Signalling point code of the TS (ISUP). */ + Bit14 sut_pointCode optional, /* Signalling point code of the SUT (ISUP). */ + octetstring ts_address_isup_bicc optional, /* Address (e.g. IP) of the TS (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. */ + octetstring sut_address_isup_bicc optional /* Address (e.g. IP) of the SUT (ISUP/BICC side). The use of this address is to enable the TS to communicate with the SUT at the ISUP/BICC side to establish and maintain the lower layer connections. */ +} +/* Additional comments: +This ASP is used at the beginning of each test case to initiate the necessary initialization of the +ISUP/BICC part of the test system, particularly the interfaces to the SUT. +If module parameter 'PX_ISUP_Isup' indicates 'false', the values of parameters 'ts_pointCode' and 'sut_pointCode' shall +be ignored by the SA. +If module parameter 'PX_ISUP_Isup' indicates 'true', the values of parameters 'ts_address_isup_bicc' and +'sut_address_isup_bicc' may be ignored, if they are not necessary. +Among the initializing actions there shall be: +a) Verification that the ISUP/BICC link is operable between SUT and TS. +b) Verification that the TS is ready to send and receive SIP messages. +Note: It is a matter of TS implementation whether the TS, upon this request, sets up and initializes lower layer connections, if these are not setup. +Other initialization actions may be TS-specific. */ + +type record InitializeIsupBicc_cnf /* Answer whether all necessary TS initializations have been successfully performed. The result can be positive or negative. The result will be positive only if the TS is able to send and recieve messages at the SIP- and the ISUP/BICC-interface of the SUT. */ +{ + boolean result /* Indicating success or non-success of the whole initialization. */ +} + +type record BearerSetup_req /* For BICC: request TS to setup the bearer connection between TS and SUT. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerSetup_acc /* For BICC: answer to BearerSetup_req. The answer can be positive (bearer connection setup successful) or negative (bearer connection setup failed). */ +{ + CallInstanceCode cic, /* Call Instance Code identifying the bearer connection. */ + boolean result /* The answer is positive when the bearer connection setup was successful and negative when the bearer connection setup failed. */ +} + +type record BearerRelease_req /* For BICC: request to release the established bearer connection. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerRelease_cnf /* For BICC: confirmation that the requested bearer is released. */ +{ + CallInstanceCode cic, /* Call Instance Code identifying the bearer connection. */ + boolean result /* Indication of whether the bearer is successfully released. */ +} + +type record BearerSetup_ind /* Indication of that the bearer has been setup. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} + +type record BearerRelease_ind /* Indication of whether the bearer is successfully released. */ +{ + CallInstanceCode cic /* Call Instance Code identifying the bearer connection. */ +} +} /* end group BICC_ASPs */ +} /* end module SipIsup_ISUP_MsgTypes */ diff --git a/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn b/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7d657ca245bcc04a4abfd17a248628401f908338 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ParamTemplates.ttcn @@ -0,0 +1,3672 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-parameter templates. +*/ +module SipIsup_ISUP_ParamTemplates +{ + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTypes all; + +group MessageHeader { +template CircuitIdentityCode m_CIC(template Bit12 p_Cicv) := +/* template for the CIC parameter */ +{ + cicv := p_Cicv, /* cic value */ + spare := '0000'B /* spare */ +} + +template CircuitIndicator mw_CircuitIndicator_any := +/* Default RX template for type CircuitIndicator with wildcards for simple types */ +{ + maintenanceBlockingState := ?, /* bits BA: Maintenance blocking state */ + callProcessingState := ?, /* bits DC: Call processing state */ + hardwareBlockingState := ?, /* bits F E: Hardware blocking state (Note) */ + spare := '00'B /* bits H-G: spare */ +} + +template RoutingLabel m_RoutingLabel(template Bit14 p_Dpc, template Bit14 p_Opc,template Bit4 p_Sls) := +/* template for the routing label */ +{ + dpc := p_Dpc, /* destination point code */ + opc := p_Opc, /* origination point code */ + sls := p_Sls /* sls */ +} + +template ServiceIndicatorOctet m_SIO := +/* Default TX template for type ServiceIndicatorOctet with parametrization for non-ext/spare-fields */ +{ + userPartIdentification := '0101'B, /* User part identification, '5'H for ISUP */ + spare := '00'B, /* Spare */ + networkIndicator := PX_ISUP_NW_IND /* Network indicator */ +} +} /* end group MessageHeader */ + +group Parameter { +group ATP { +template ATP_PAR_tlv m_ATP_BCAP(BearerCapability p_bcap, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Bearer capability. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := {p_bcap}, /* Q.931 information element Bearer capability */ + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_BCAP_PI(BearerCapability p_bcap, ProgressIndicator p_pi, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Bearer capability and Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := {p_bcap}, /* Q.931 information element Bearer capability */ + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_CLSU := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Calling sub-address (default value). */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := f_calc_length_atp_cgps({bearerCapability := omit, highLayerCompatibility := omit, lowLayerCompatibility := omit, progressIndicator := omit, calledPartySubaddress := omit, callingPartySubaddress := m_cgps, connectedSubaddress := omit},3), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := m_cgps, /* Q.931 Calling sub-address */ + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_CNSU := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Connected sub-address (default value). */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := f_calc_length_atp_cods({bearerCapability := omit, highLayerCompatibility := omit, lowLayerCompatibility := omit, progressIndicator := omit, calledPartySubaddress := omit, callingPartySubaddress := omit, connectedSubaddress := m_cons},3), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := m_cons /* Q.931 information element Connected sub-address */ + } + } +} + +template ATP_PAR_tlv m_ATP_HLC(HighLayerCompatibilities p_hlc, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information elements High layer compatibility. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability :=omit, + highLayerCompatibility := p_hlc, /* Q.931 information element High layer compatibility */ + lowLayerCompatibility := omit, + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_HLC_PI(HighLayerCompatibility p_hlc, ProgressIndicator p_pi) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information elements High layer compatibility and Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := '00001000'B, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := {p_hlc}, /* Q.931 information element High layer compatibility */ + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_LLC(LowLayerCompatibility p_llc, integer p_length) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Low Layer Compatibility. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := omit, + highLayerCompatibility := omit, + lowLayerCompatibility := p_llc, /* Q.931 information element Low Layer Compatibility */ + progressIndicator := omit, + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv m_ATP_PI(ProgressIndicator p_pi) := +/* TX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element Progress indicator. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := '00000100'B, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability :=omit, + highLayerCompatibility := omit, + lowLayerCompatibility := omit, + progressIndicator := p_pi, /* Q.931 information element Progress indicator */ + calledPartySubaddress := omit, + callingPartySubaddress := omit, + connectedSubaddress := omit + } + } +} + +template ATP_PAR_tlv mw_ATP_PAR_tlv_any := +/* Default RX template for type ATP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := { anyInformationElements := ? } /* Any Q.931 information elements */ +} + +template ATP_PAR_tlv mw_ATP_HLC(template HighLayerCompatibility p_hlc) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element hlc, highLayerCharacteristicsIdentification parameterized and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := p_hlc, /* Q.931 High layer compatibility */ + lowLayerCompatibility := *, + progressIndicator := *, + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template ATP_PAR_tlv mw_ATP_LLC(template LowLayerCompatibility p_llc) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element llc and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := *, + lowLayerCompatibility := p_llc, /* Q.931 Low layer compatibility */ + progressIndicator := *, + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template ATP_PAR_tlv mw_ATP_PI(template ProgressIndicator p_pi) := +/* RX template for Access Transport parameter (ATP); Optional(O) format, with Q.931 information element pi, progressDescription parameterized and any-values otherwise. */ +{ + paramType := '00000011'B, /* Parameter Type '00000011'B */ + paramLen := ?, /* Parameter Length field */ + informationElements := /* Q.931 information elements */ + { + specificInformationElements := + { + bearerCapability := *, + highLayerCompatibility := *, + lowLayerCompatibility := *, + progressIndicator := p_pi, /* Q.931 Progress Indicator */ + calledPartySubaddress := *, + callingPartySubaddress := *, + connectedSubaddress := * + } + } +} + +template BearerCapability m_bcap_InfoTrfCap(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* TX template for Q.931 Bearer Capability information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='00000100'B, /* Information Element Type '00000100'B */ + iELen :='00000101'B, /* Information Element Length field */ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + +template BearerCapability m_bcap_Std(Bit5 p_InfoTrfCap) := +/* TX template for Q.931 Bearer Capability information element, with Information transfer capabilty and User information layer 1 protocol parameterized.*/ +{ + iEType :='00000100'B, /* Information Element Type '00000100'B */ + iELen :='00000010'B, /* Information Element Length field */ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := omit, + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + +template BCAP_octet3 m_BCAP_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default TX template for type BCAP_octet3 with Information transfer capability parameterized and default values otherwise.*/ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := '00'B, /* Coding standard = CCITT standardized coding */ + ext := '1'B /* Extension */ +} + +template BCAP_octet4 m_BCAP_octet4_Std := +/* Default TX template for type BCAP_octet4 with default values.*/ +{ + informationTransferRate := '10000'B, /* Information transfer rate = 64 kbit/s */ + transferMode := '00'B, /* Transfer mode = circuit mode*/ + ext := '1'B, /* Extension */ + rateMultiplier := omit /* Rate multiplier */ +} + +template BCAP_octet5 m_BCAP_octet5_Std(Bit5 p_UserInfoL1) := +/* Default TX template for type BCAP_octet5 with User information Layer 1 protocol parameterized and default values otherwise.*/ +{ + userInformationLayer1Protocol := p_UserInfoL1, /* User information Layer 1 protocol */ + layerIdentification := '01'B, /* Layer identification = Recommendation G.711 A-law */ + ext := '1'B, /* Extension */ + bCAP_octet5a := omit, + bCAP_octet5b1 := omit, + bCAP_octet5b2 := omit, + bCAP_octet5c := omit, + bCAP_octet5d := omit +} + +template BCAP_octet6 m_BCAP_octet6_Std := +/* Default TX template for type BCAP_octet6 with Module parameters for non-ext/spare-fields */ +{ + userInformationLayer2Protocol := '00010'B, /* User information Layer 2 protocol = Recommendation Q.921 */ + layerIdentification := '10'B, /* Layer identification = Layer 2 */ + ext := '1'B /* Extension */ +} + +template BCAP_octet7 m_BCAP_octet7_Std := +/* Default TX template for type BCAP_octet7 with Module parameters for non-ext/spare-fields */ +{ + userInformationLayer3Protocol := '00010'B, /* User information Layer 3 protocol = Recommendation Q.931 */ + layerIdentification := '11'B, /* Layer identification = Layer 3*/ + ext := '1'B /* Extension */ +} + +template BCAP_octet3 mw_BCAP_octet3_any := +/* Default RX template for type BCAP_octet3 with wildcards for simple types */ +{ + informationTransferCapability := ?, /* Information transfer capability */ + codingStandard := ?, /* Coding standard */ + ext := ? /* Extension */ +} + +template BCAP_octet4 mw_BCAP_octet4_any := +/* Default RX template for type BCAP_octet4 with wildcards for simple types */ +{ + informationTransferRate := ?, /* Information transfer rate */ + transferMode := ?, /* Transfer mode */ + ext := ?, /* Extension */ + rateMultiplier := * /* Rate multiplier */ +} + +template BCAP_octet5 mw_BCAP_octet5_any := +/* Default RX template for type BCAP_octet5 with 'any' template values for structured types, and wildcards for simple types */ +{ + userInformationLayer1Protocol := ?, /* User information Layer 1 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ?, /* Extension */ + bCAP_octet5a := mw_BCAP_octet5a_any ifpresent, + bCAP_octet5b1 := mw_BCAP_octet5b1_any ifpresent, + bCAP_octet5b2 := mw_BCAP_octet5b2_any ifpresent, + bCAP_octet5c := mw_BCAP_octet5c_any ifpresent, + bCAP_octet5d := mw_BCAP_octet5d_any ifpresent +} + +template BCAP_octet5a mw_BCAP_octet5a_any := +/* Default RX template for type BCAP_octet5a with wildcards for simple types */ +{ + userRate := ?, /* User rate */ + negot := ?, /* Negotiation */ + synch_asynch := ?, /* Synchronous/asynchronous */ + ext := ? /* Extension */ +} + +template BCAP_octet5b1 mw_BCAP_octet5b1_any := +/* Default RX template for type BCAP_octet5b1 with wildcards for simple types */ +{ + spare := '0'B, /* Spare */ + flowControlOnRx := ?, /* Flow control on reception (Rx) */ + flowControlOnTx := ?, /* Flow control on transmission (Tx) */ + nICOnRx := ?, /* Network independent Clock (NIC) on reception (Rx) */ + nICOnTx := ?, /* Network independent Clock (NIC) on transmission (Tx) */ + intermediateRate := ?, /* Intermediate rate */ + ext := ? /* Extension */ +} + +template BCAP_octet5b2 mw_BCAP_octet5b2_any := +/* Default RX template for type BCAP_octet5b2 with wildcards for simple types */ +{ + spare := '0'B, /* Spare */ + inbandOutbandNegotiation := ?, /* In-band/out-band negotiation */ + assignorAssignee := ?, /* Assignor/assignee */ + lLINegotiation := ?, /* Logical link identifier negotiation */ + mode := ?, /* Mode of operation */ + multiFrameSupport := ?, /* Multiple frame establishment support in data link */ + hdrNoHdr := ?, /* rate addaption header/no header */ + ext := ? /* Extension */ +} + +template BCAP_octet5c mw_BCAP_octet5c_any := +/* Default RX template for type BCAP_octet5c with wildcards for simple types */ +{ + parity := ?, /* Parity information */ + numberOfDataBits := ?, /* Number of data bits excluding parity bit if present*/ + numberOfStopBits := ?, /* Number of stop bits */ + ext := ? /* Extension */ +} + +template BCAP_octet5d mw_BCAP_octet5d_any := +/* Default RX template for type BCAP_octet5d with wildcards for simple types */ +{ + modemType := ?, /* Modem type */ + duplexMode := ?, /* Duplex mode*/ + ext := ? /* Extension */ +} + +template BCAP_octet6 mw_BCAP_octet6_any := +/* Default RX template for type BCAP_octet6 with wildcards for simple types */ +{ + userInformationLayer2Protocol := ?, /* User information Layer 2 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ? /* Extension */ +} + +template BCAP_octet7 mw_BCAP_octet7_any := +/* Default RX template for type BCAP_octet7 with wildcards for simple types */ +{ + userInformationLayer3Protocol := ?, /* User information Layer 3 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ? /* Extension */ +} + +template BCAP_octet3 mw_BCAP_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default RX template for type BCAP_octet3 with wildcards for simple types */ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := ?, /* Coding standard */ + ext := ? /* Extension */ +} + +template BCAP_octet5 mw_BCAP_octet5_Std(Bit5 p_UserInfoL1) := +/* Default RX template for type BCAP_octet5 with 'any' template values for structured types, and wildcards for simple types */ +{ + userInformationLayer1Protocol := p_UserInfoL1, /* User information Layer 1 protocol */ + layerIdentification := ?, /* Layer identification */ + ext := ?, /* Extension */ + bCAP_octet5a := mw_BCAP_octet5a_any ifpresent, + bCAP_octet5b1 := mw_BCAP_octet5b1_any ifpresent, + bCAP_octet5b2 := mw_BCAP_octet5b2_any ifpresent, + bCAP_octet5c := mw_BCAP_octet5c_any ifpresent, + bCAP_octet5d := mw_BCAP_octet5d_any ifpresent +} + +template CallingPartySubaddress m_cgps := +/* TX template for Q.931 Calling party subaddress information element, with all default values */ +{ + iEType := '01101101'B, /* Information Element Type '01101101'B */ + iELen := int2bit((lengthof (PX_ISUP_TX_cgps_information) + 1), 8 ), /* Information Element Length field */ + spare := '000'B, /* Spare */ + oddEven := PX_ISUP_TX_cgps_odd_even_indicator, /* OE */ + typeOfSubaddress := PX_ISUP_TX_cgps_type_of_subaddress, /* Type of Subaddress */ + ext := '1'B, /* Extension */ + subaddressInformation := PX_ISUP_TX_cgps_information /* Subaddress Information */ +} + +template ConnectedSubaddress m_cons := +/* TX template for Q.931 information element Connected sub-address (default value). */ +{ + iEType := '01001101'B, /* Information Element Type '01001101'B */ + iELen := int2bit((lengthof(PX_ISUP_TX_connsub_information) + 1), 8), /* Information Element Length field */ + spare := '000'B, /* Spare */ + oddEven := PX_ISUP_TX_connsub_odd_even_indicator, /* OE */ + typeOfSubaddress := PX_ISUP_TX_connsub_type_of_subaddress, /* Type of Subaddress */ + ext := '1'B, /* Extension */ + subaddressInformation := PX_ISUP_TX_connsub_information /* Subaddress Information */ +} + +template LowLayerCompatibility m_llc_InfoTrfCap(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* TX template for Q.931 Low Layer Compatibility information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='01111100'B, /* Information Element Type '01111100'B */ + iELen :='00000010'B, /* Information Element Length field */ + lLC_octet3 := m_LLC_octet3_Std(p_InfoTrfCap), + lLC_octet4 := m_BCAP_octet4_Std, + lLC_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + lLC_octet6 := omit, + lLC_octet7 := omit +} + +template LowLayerCompatibility m_llc_Std(Bit5 p_InfoTrfCap) := +/* TX template for Q.931 Low Layer Compatibility information element, with Information transfer capabilty parameterized.*/ +{ + iEType :='01111100'B, /* Information Element Type '01111100'B */ + iELen :='00000010'B, /* Information Element Length field */ + lLC_octet3 := m_LLC_octet3_Std(p_InfoTrfCap), + lLC_octet4 := m_BCAP_octet4_Std, + lLC_octet5 := omit, + lLC_octet6 := omit, + lLC_octet7 := omit +} + +template LLC_octet3 m_LLC_octet3_Std(Bit5 p_InfoTrfCap) := +/* Default TX template for type LLC_octet3 with Information transfer capability parameterized and default values otherwise.*/ +{ + informationTransferCapability := p_InfoTrfCap, /* Information transfer capability */ + codingStandard := '00'B, /* Coding standard = CCITT standardized coding */ + extension_3 := '1'B, /* Extension */ + spare6 := omit, /* Spare */ + negotiationIndicator := omit, /* Negotiation indicator */ + extension_3a := omit /* Extension */ +} + +template HighLayerCompatibility m_hlc(Bit7 p_hlcId) := +/* TX template for Q.931 High Layer Compatibility information element, with highLayerCharacteristicsIdentification parameterized.*/ +{ + iEType := '01111101'B, /* Information Element Type '01111101'B */ + iELen := '00000010'B, /* Information Element Length field */ + presentation := '01'B, /* High layer protocol profile */ + interpretation := '100'B, /* First (primary or only) high layer characteristics */ + codingStandard := '00'B, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlcId, /* High Layer Characteristics Identification */ + ext2 := '1'B, /* Extension */ + extendedHighLayerCharacteristicsIdentification := omit, /* Extended high layer characteristics identification */ + ext3 := omit, /* Extension */ + extendedVideotelephonyCharacteristicsIdentification := omit, /* Extended videotelephony characteristics identification */ + ext4 := omit /* Extension */ +} + +template ProgressIndicator m_pi(Bit7 p_progInd) := +/* RX template for Q.931 Progress Indicator information element, with progressDescription parameterized and any-values otherwise.*/ +{ + iEType := '00011110'B, /* Information Element Type '00011110'B */ + iELen := '00000010'B, /* Information Element Length field */ + location := '0000'B, /* Location */ + spare := '0'B, /* Spare */ + codingStandard := '00'B, /* Coding Standard */ + ext1 := '1'B, /* Extension */ + progressDescription := p_progInd, /* Progress Description */ + ext2 := '1'B /* Extension */ +} + +template HighLayerCompatibility mw_hlc(Bit7 p_hlcId) := +/* RX template for Q.931 High Layer Compatibility information element, with highLayerCharacteristicsIdentification parameterized and any-values otherwise.*/ +{ + iEType := '01111101'B, /* Information Element Type '01111101'B */ + iELen := ?, /* Information Element Length field */ + presentation := ?, /* High layer protocol profile */ + interpretation := ?, /* First (primary or only) high layer characteristics */ + codingStandard := ?, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlcId, /* Facsimile Group 2/3 */ + ext2 := '1'B, /* Extension */ + extendedHighLayerCharacteristicsIdentification := *, /* Extended high layer characteristics identification */ + ext3 := *, /* Extension */ + extendedVideotelephonyCharacteristicsIdentification := *, /* Extended videotelephony characteristics identification */ + ext4 := * /* Extension */ +} + +template ProgressIndicator mw_pi(Bit7 p_progInd) := +/* RX template for Q.931 Progress Indicator information element, with progressDescription parameterized and any-values otherwise.*/ +{ + iEType := '00011110'B, /* Information Element Type '00011110'B */ + iELen := '00000010'B, /* Information Element Length field */ + location := ?, /* Location */ + spare := '0'B, /* Spare */ + codingStandard := ?, /* Coding Standard */ + ext1 := '1'B, /* Extension */ + progressDescription := p_progInd, /* Progress Description */ + ext2 := '1'B /* Extension */ +} +} /* end group ATP */ + +group BCI { +template BCI_PAR_v m_BCI_cpStatInd(Bit2 p_cldPstatInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator parameterized and default values otherwise. */ +{ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_BCI_v_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := PX_ISUP_TX_BCI_v_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := PX_ISUP_TX_BCI_v_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v m_BCI(Bit2 p_cldPstatInd, + Bit1 p_interwInd, + Bit1 p_iSDNUserPartInd, + Bit1 p_iSDNAccessInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator, Interworking indicator, ISDN User Part indicator and ISDN Access indicator parameterized and default values otherwise. */ +{ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_tlv m_BCI_tlv(Bit2 p_cldPstatInd, + Bit1 p_interwInd, + Bit1 p_iSDNUserPartInd, + Bit1 p_iSDNAccessInd) := +/* TX template for Backward call indicators parameter (BCI), with Called party status indicator, Interworking indicator, ISDN User Part indicator and ISDN Access indicator parameterized and default values otherwise. */ +{ + paramType := '00010001'B, /* Parameter Type '00010001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + chargeIndicator := PX_ISUP_TX_BCI_v_chargeInd, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := PX_ISUP_TX_BCI_v_cldPCatInd, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := PX_ISUP_TX_BCI_v_eTOeMethodInd, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := PX_ISUP_TX_BCI_v_eTOeInfoInd, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_iSDNUserPartInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := PX_ISUP_TX_BCI_v_holdingInd, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_iSDNAccessInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_BCI_v_echoContrDevInd, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := PX_ISUP_TX_BCI_v_sCCPMethodInd /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_PAR_v_any := +/* Default RX template for type BCI_PAR_v with wildcards for simple types */ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_tlv mw_BCI_PAR_tlv_any := +/* Default RX template for type BCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010001'B, /* Parameter Type '00010001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpStatInd(Bit2 p_cldPstatInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := p_cldPstatInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_iwEnc := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator = 'interworking encountered' and any-values otherwise*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator */ + calledPartysStatusIndicator := ?, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd1 := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Called party status indicator = 'no indication' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := ?, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd2(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatnoInd3 := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Called party status indicator = 'no indication', Interworking indicator = 'interworking encountered', ISDN user part indicator = 'ISUP not used all the way' and ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := ?, /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := c_BCI_isdnUpInd_NotUsed, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpCat_3alt(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cpCat_3alt2(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'no indication', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatSubsFree(template Bit1 p_interwInd,template Bit1 p_isdnUpInd,template Bit1 p_isdnAccInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with Interworking indicator, ISDN user part indicator and ISDN access indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_subFree, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := p_isdnAccInd, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatSubsFree_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_subFree, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} + +template BCI_PAR_v mw_BCI_cldPstatNoInd_tAccNonISDN(Bit1 p_isdnUpInd) := +/* RX template for type BCI_PAR_v (Backward call Indicators) with ISDN user part indicator parameterized, Called party status indicator = 'subscriber free', Called party's category indicator = '(no indication or ordinary subscriber or payphone)', Interworking indicator = 'interworking encountered', ISDN access indicator = 'terminating access non-ISDN' and any-values otherwise.*/ +{ + chargeIndicator := ?, /* bits BA : Charge indicator (Note 1) */ + calledPartysStatusIndicator := c_BCI_cldPstatInd_noInd, /* bits DC : Called party's status indicator */ + calledPartysCategoryIndicator := (c_BCI_cldPcatInd_noInd, c_BCI_cldPcatInd_ordSub, c_BCI_cldPcatInd_payPh), /* bits FE : Called party's category indicator */ + end_to_endMethodIndicator := ?, /* bits HG : End-to-end method indicator (Note 2) */ + interworkingIndicator := c_BCI_interwInd_Interw, /* bit I: Interworking indicator (Note 2) */ + end_to_endInformationIndicator := ?, /* bit J: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit K: ISDN user part indicator (Note 2) */ + holdingIndicator := ?, /* bit L: Holding indicator (national use) */ + iSDNAccessIndicator := c_BCI_isdnAccInd_notISDN, /* bit M: ISDN access indicator */ + echoControlDeviceIndicator := ?, /* bit N: Echo control device indicator */ + sCCPMethodIndicator := ? /* bits PO: SCCP method indicator (Note 2) */ +} +} /* end group BCI */ + +group CAU { +template CAUI_PAR_lv m_CAU(integer p_cauVal) := +/* Default TX template for Cause indicators parameter (CAUI); Mandatory Variable (V) format. */ +{ + paramLen := '00000010'B, /* Parameter Length field */ + location := '0000'B, /* location */ + spare := '0'B, /* spare */ + codingStandard := '00'B, /* codingStandard */ + ext1 := '1'B, /* Extension */ + causeValue := int2bit(p_cauVal, 7), /* Cause value */ + ext2 := '1'B, /* Extension */ + diagnostics := omit /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_lv mw_CAUI_PAR_lv_any := +/* Default RX template for type CAUI_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + location := ?, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := ?, /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := * /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_tlv mw_CAUI_PAR_tlv_any := +/* Default RX template for type CAUI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010010'B, /* Parameter Type '00010010'B */ + paramLen := ?, /* Parameter Length field */ + location := ?, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := ?, /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := * /* Diagnostic(s) (if any) */ +} + +template CAUI_PAR_lv mw_CAU(template integer p_cauVal, + template Bit4 p_location, + template octetstring p_diagnostics) := +/* TX template for Cause indicators parameter (CAUI); Mandatory Variable (V) format, with cause value parameterized and diagnostics = '2A'O. */ +{ + paramLen := '00000011'B, /* Parameter Length field */ + location := p_location, /* location */ + spare := '0'B, /* spare */ + codingStandard := ?, /* codingStandard */ + ext1 := ?, /* Extension */ + causeValue := int2bit(p_cauVal, 7), /* Cause value */ + ext2 := ?, /* Extension */ + diagnostics := p_diagnostics /* Diagnostic(s) */ +} +} /* end group CAU */ + +group CCPI { +template CCPI_PAR_tlv m_CCPI_Def := +/* TX template for CCNR possible indicator parameter (CCPI); Optional(O) format, with all default values. */ +{ + paramType := '01111010'B, /* Parameter Type '01111010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCNRPossibleIndicator := '1'B, /* bit A: CCNR possible indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CCPI_PAR_tlv mw_CCPI_PAR_tlv_any := +/* Default RX template for type CCPI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111010'B, /* Parameter Type '01111010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCNRPossibleIndicator := ?, /* bit A: CCNR possible indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group CCPI */ + +group CDI { +template CDI_PAR_tlv m_CDI_Def := +/*TX template for Call diversion information parameter (CDI); Optional(O) format, with all default values. */ +{ + paramType := '00110110'B, /* Parameter Type '00110110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationSubscriptionOptions := '000'B, /* bits CBA: Notification subscription options */ + redirectingReason := '0011'B, /* bits GFED: Redirecting reason */ + spare := '0'B /* bit H: spare */ +} + +template CDI_PAR_tlv mw_CDI_PAR_tlv_any := +/* Default RX template for type CDI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110110'B, /* Parameter Type '00110110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationSubscriptionOptions := ?, /* bits CBA: Notification subscription options */ + redirectingReason := ?, /* bits GFED: Redirecting reason */ + spare := '0'B /* bit H: spare */ +} +} /* end group CDI */ + +group CDN { +template CDN_PAR_lv m_CDN_PAR_Def := +/* Default TX template for Called party number parameter (CDN); Variable(V) format. */ +{ + paramLen := f_calc_paramLen(PX_ISUP_IAM_CLD_digits_txDef, true, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_CLD_natAddr_txDef, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_IAM_CLD_digits_txDef, true), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + iNN := c_CLD_intNtwNum_alwd, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_IAM_CLD_digits_txDef, true) /* address signals */ +} + +template CDN_PAR_lv m_CDN(Bit7 p_natAddrInd, + charstring p_digits, + boolean p_sendCmpl) := +/* TX template for Called party number parameter (CDN); Optional (O) format, with Nature of address indicator and address digits parameterized, sending complete sent, and default values otherwise. */ +{ + paramLen := f_calc_paramLen(p_digits, p_sendCmpl, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, p_sendCmpl), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + iNN := c_CLD_intNtwNum_alwd, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(p_digits, p_sendCmpl) /* address signals */ +} + +template CDN_PAR_lv mw_CDN_PAR_lv_any := +/* Default RX template for type CDN_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} + +template CDN_PAR_lv mw_CDN(template Bit7 p_natAddrInd, + template Bit3 p_numPlanInd, + template Bit1 p_intNtwNum) := +/* RX template for Called party number parameter (CDN); Mandatory Variable(MV) format, with Internal network number indicator, Numbering plan indicator and Nature of Address parameterized. */ +{ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := p_numPlanInd, /* Numbering plan indicator */ + iNN := p_intNtwNum, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} +} /* end group CDN */ + +group CGN { +template CGN_PAR_tlv m_CGN_PAR_Def := +/* TX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address = 'National number', Screening indicator = 'network provided', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed', number digits = default number. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(PX_ISUP_IAM_CLI_digits_txNat, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := c_CLI_natAddrInd_natSig, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_IAM_CLI_digits_txNat, false), /* O/E */ + screeningIndicator:= c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd := c_CLI_aprInd_alwd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := c_CLI_numIncmplInd_cmpl, /* Number Incomplete Indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_IAM_CLI_digits_txNat, false) /* address signals */ +} + +template CGN_PAR_tlv m_CGN(Bit7 p_natAddrInd, + Bit2 p_screenInd, + Bit2 p_addrPresRestrInd, + charstring p_digits) := +/* TX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address, Screening indicator, Address presentation restricted indicator and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator:= p_screenInd, /* Screening indicator */ + addrPresRestrInd := p_addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := c_CLI_numIncmplInd_cmpl, /* Number Incomplete Indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_PAR_tlv_any := +/* Default RX template for type CGN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=?, /* Screening indicator */ + addrPresRestrInd :=?, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + nII := ?, /* Number Incomplete Indicator */ + addressSignals := * /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restr := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Address presentation restricted indicator = 'presentation restricted by the network' and any-values otherwise. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=?, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restrNtwk, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + nII := ?, /* Number Incomplete Indicator */ + addressSignals := * /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_noDigits := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with address digits = 'absent', Screening indicator = 'network provided', Number incomplete indicator = '0', Numbering plan indicator = '000', Address presentation restricted indicator = 'Address not available', Nature of address indicator = '0000000'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := '00000010'B, /* Parameter Length field */ + natureOfAddressIndicator := '0000000'B, /* Nature of address indicator */ + oddEven := ?, /* OE */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_aNotAv, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := '000'B, /* Numbering plan indicator */ + nII := '0'B, /* Number incomplete indicator */ + addressSignals := omit /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_allowed(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_alwd, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restrP(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restr, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restr_anyNOA(charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator = 'any', address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restr, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template CGN_PAR_tlv mw_CGN_restrN(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Calling party number parameter (CGN); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'network provided', Number incomplete indicator = default, Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted by the network'. */ +{ + paramType := '00001010'B, /* Parameter Type '00001010'B */ + paramLen := f_calc_paramLen(p_digits, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator :=c_CLI_screenInd_ntwProv, /* Screening indicator */ + addrPresRestrInd :=c_CLI_aprInd_restrNtwk, /* Address presentation restricted indicator (NOTE) */ + numberingPlanIndicator := c_CLD_numPlanInd_isdn, /* Numbering plan indicator */ + nII := PX_ISUP_IAM_CLI_numIncmplInd_rxDef, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} +} /* end group CGN */ + +group CGSM { +template CGSM_PAR_v m_CGSM_Def := +/* TX template for Circuit Group Supervision Message Type parameter (CGSM); Optional(O) format, with Circuit Group Supervision Message Type Indicator value = 'hardware failure oriented'. */ +{ + cgSupervMTypeIndicator := c_CGBMT_cgSupMtypeInd_hwOrtd, /* bits BA: Circuit group supervision message type indicator */ + spare := '000000'B /* bits H-C: spare */ +} + +template CGSM_PAR_v mw_CGSM_PAR_v_any := +/* Default RX template for type CGSM_PAR_v with wildcards for simple types */ +{ + cgSupervMTypeIndicator := ?, /* bits BA: Circuit group supervision message type indicator */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group CGSM */ + +group COI { +template COI_PAR_v m_COI(template Bit1 p_cti) := +/* TX template for Continuity indicators (COI); Fixed (F) format, with Continuity indicator = 'continuity check successful' (resp. 'continuity'). */ +{ + continuityIndicator := p_cti, /* bit A: Continuity indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template COI_PAR_v mw_COI_PAR_v_any := +/* Default RX template for type COI_PAR_v with wildcards for simple types */ +{ + continuityIndicator := ?, /* bit A: Continuity indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group COI */ + +group CPN { +template CPN_PAR_tlv m_CPN_Def := +/* TX template for Connected number parameter (CPN); Optional(O) format, with default values. */ +{ + paramType := '00100001'B, /* Parameter Type '00100001'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_CPN_addrSignals, false, 2), /* Parameter Length field */ + natureOfaddressindicator := PX_ISUP_TX_CPN_natOfaddressind, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_CPN_addrSignals, false), /* O/E */ + screeningIndicator := PX_ISUP_TX_CPN_screenInd, /* Screening indicator */ + addrPresRestrInd := PX_ISUP_TX_CPN_addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + numberingplanIndicator := PX_ISUP_TX_CPN_numbplanInd, /* Numberingplan indicator */ + spare := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_CPN_addrSignals, false) /* address signals */ +} + +template CPN_PAR_tlv mw_CPN_PAR_tlv_any := +/* Default RX template for type CPN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100001'B, /* Parameter Type '00100001'B */ + paramLen := ?, /* Parameter Length field */ + natureOfaddressindicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE) */ + numberingplanIndicator := ?, /* Numberingplan indicator */ + spare := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group CPN */ + +group CUGIC { +template CUGIC_PAR_tlv mw_CUGIC_PAR_tlv_any := +/* Default RX template for type CUGIC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00011010'B, /* Parameter Type '00011010'B */ + paramLen := '00000100'B, /* Parameter Length field */ + networkIdentity := ?, /* a) Network Identity (NI) (octets 1 and 2) */ + binaryCode := ? /* Binary code */ +} +} /* end group CUGIC */ + +group EIF { +template EIF_PAR_v m_EIF(Bit7 p_eventInd) := +/* TX template for type EIF_PAR_v (Event information) with eventIndicator parameterized and default values otherwise */ +{ + eventIndicator := p_eventInd, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := '0'B /* bit H: Event presentation restricted indicator (national use) */ +} +template EIF_PAR_v mw_EIF_PAR_v_any := +/* Default RX template for type EIF_PAR_v with wildcards for simple types */ +{ + eventIndicator := ?, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := ? /* bit H: Event presentation restricted indicator (national use) */ +} + +template EIF_PAR_v mw_EIF(Bit7 p_eventInd) := +/* RX template for type EIF_PAR_v (Event information) with eventIndicator parameterized and wildcards otherwise */ +{ + eventIndicator := p_eventInd, /* bits G F E D C B A: Event indicator */ + eventPresRestrInd := ? /* bit H: Event presentation restricted indicator (national use) */ +} +} /* end group EIF */ + +group FCI { +template FCI_PAR_v m_FCI_Def := +/* Default TX template for Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + natInternatCallIndicator := PX_ISUP_TX_FCI_natInternatCallInd, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := PX_ISUP_TX_FCI_endToEndMethodInd, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_FCI_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := PX_ISUP_TX_FCI_eTOeInfoIndic, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := PX_ISUP_TX_FCI_iSDNUserPartInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := PX_ISUP_TX_FCI_iSDNUserPartPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := PX_ISUP_TX_FCI_iSDNAccessInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := PX_ISUP_TX_FCI_sCCPMethodInd, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := '0000'B /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v m_FCI(template Bit1 p_isdnUpInd, + template Bit1 p_isdnAccInd) := + +/* Default TX template for Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + natInternatCallIndicator := PX_ISUP_TX_FCI_natInternatCallInd, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := PX_ISUP_TX_FCI_endToEndMethodInd, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := PX_ISUP_TX_FCI_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := PX_ISUP_TX_FCI_eTOeInfoIndic, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := PX_ISUP_TX_FCI_iSDNUserPartPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := p_isdnAccInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := PX_ISUP_TX_FCI_sCCPMethodInd, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := '0000'B /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v mw_FCI_PAR_v_any := +/* Default RX template for type FCI_PAR_v with wildcards for simple types */ +{ + natInternatCallIndicator := ?, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := ?, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := ?, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := ?, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := ?, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := ?, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := ?, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := ?, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := ? /* bits P-M: reserved for national use */ +} + +template FCI_PAR_v mw_FCI(template Bit1 p_interwInd, + template Bit1 p_isdnUpInd, + template Bit2 p_isdnUpPrefInd, + template Bit1 p_isdnAccInd) := +/* RX template for Forward call Indicators (FCI); Fixed (F) format, with parametrized and default values. */ +{ + natInternatCallIndicator := ?, /* bit A: National/international call indicator (Note 1) */ + endToEndMethodIndicator := ?, /* bits CB: End-to-end method indicator (Note 2) */ + interworkingIndicator := p_interwInd, /* bit D: Interworking indicator (Note 2) */ + endToEndInfoIndicator := ?, /* bit E: End-to-end information indicator (national use) (Note 2) */ + iSDNUserPartIndicator := p_isdnUpInd, /* bit F: ISDN user part indicator (Note 2) */ + iSDNUserPartPrefIndicator := p_isdnUpPrefInd, /* bits HG: ISDN user part preference indicator */ + iSDNAccessIndicator := p_isdnAccInd, /* bit I: ISDN access indicator */ + sCCPMethodIndicator := ?, /* bits KJ: SCCP method indicator (Note 2) */ + spare := '0'B, /* bit L: spare */ + reserved := ? /* bits P-M: reserved for national use */ +} +} /* end group FCI */ + +group GNI { +template GNI_PAR_tlv m_GNI(Bit7 p_gNotInd) := +/* TX template for type GNI_PAR_tlv (Generic notification indicator) with notificationIndicator parameterized. */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := p_gNotInd, /* Notification indicator */ + ext := '1'B /* Extension */ +} + +template GNI_PAR_tlv mw_GenNotifInd(Bit7 p_gNotInd) := +/* RX template for type GNI_PAR_tlv (Generic notification indicator) with notificationIndicator parameterized. */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := p_gNotInd, /* Notification indicator */ + ext := '1'B /* Extension */ +} + +template GNI_PAR_tlv mw_GNI_PAR_tlv_any := +/* Default RX template for type GNI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101100'B, /* Parameter Type '00101100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + notificationIndicator := ?, /* Notification indicator */ + ext := ? /* Extension */ +} +} /* end group GNI */ + +group GNU { +template GNU_PAR_tlv m_GNU_allowed(Bit7 p_natAddrInd, charstring p_digits) := +/* TX template for Generic number parameter (GNU); Optional (O) format, with Nature of address and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed', Number qualifier indicator = 'additional calling party number', and default values otherwise. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := c_GEN_numQualInd_cliNum, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := '01'B, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv m_GNU_restr(Bit7 p_natAddrInd, charstring p_digits) := +/* TX template for Generic number parameter (GNU); Optional (O) format, with Nature of address and address digits parameterized, and Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted', Number qualifier indicator = 'additional calling party number', and default values otherwise. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := c_GEN_numQualInd_cliNum, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := '01'B, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_restr, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_PAR_tlv_any := +/* Default RX template for type GNU_PAR_tlv with wildcards for simple types */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := ?, /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := ?, /* Nature of address indicator (NOTE 1) */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := ?, /* Numbering plan indicator (NOTE 2) */ + nI := ?, /* Number incomplete indicator */ + addressSignals := * /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_allowed_up(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user provided', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userProv, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_allowed_upNot(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user-provided/not verified', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation allowed'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userNotVerif, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_alwd, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} + +template GNU_PAR_tlv mw_GNU_restr_upNot(Bit7 p_natAddrInd, charstring p_digits) := +/* RX template for Generic number (GNU); Optional (O) format, with Nature of address indicator and address digits parameterized, Screening indicator = 'user-provided/not verified', Number incomplete indicator = 'complete', Numbering plan indicator = 'ISDN numbering plan', Address presentation restricted indicator = 'presentation restricted'. */ +{ + paramType := '11000000'B, /* Parameter Type '11000000'B */ + paramLen := f_calc_paramLen(p_digits, false, 3), /* Parameter Length field */ + numberQualifierIndicator := ?, /* Number qualifier indicator */ + natureOfAddressIndicator := p_natAddrInd, /* Nature of address indicator (NOTE 1) */ + oddEven := f_calc_oddeven(p_digits, false), /* O/E */ + screeningIndicator := c_GEN_screenInd_userNotVerif, /* Screening indicator (NOTE 4) */ + addrPresRestrInd := c_GEN_aprInd_restr, /* Address presentation restricted indicator (NOTE 3) */ + numberingPlanIndicator := c_GEN_numPlanInd_isdn, /* Numbering plan indicator (NOTE 2) */ + nI := c_GEN_numIncmplInd_cmpl, /* Number incomplete indicator */ + addressSignals := f_char_to_BCD(p_digits, false) /* address signals */ +} +} /* end group GNU */ + +group HPC { +template HPC_PAR_tlv m_HPC_Def := +/* TX template for Hop counter (HPC); Optional (O) format, with hop counter value = default. */ +{ + paramType := '00111101'B, /* Parameter Type '00111101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + hopCounter := PX_ISUP_TX_HPC_hopCounter, /* bits EDCBA: Hop counter */ + spare := '000'B /* bits HGF: spare */ +} + +template HPC_PAR_tlv mw_HPC_PAR_tlv_any := +/* Default RX template for type HPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111101'B, /* Parameter Type '00111101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + hopCounter := ?, /* bits EDCBA: Hop counter */ + spare := '000'B /* bits HGF: spare */ +} +} /* end group HPC */ + +group IID { +template IID_PAR_v m_IID_PAR_v := +/* Default RX template for type IID_PAR_v with default values for simple types */ +{ + cliAddrResponseIndicator := c_IID_cliAddress_included, /* bits BA: Calling party address response indicator */ + holdProvidedIndicator := '0'B, /* bit C: Hold provided indicator */ + spare1 := '00'B, /* bits ED: spare */ + cliCatRespIndicator := '0'B, /* bit F: Calling party's category response indicator */ + chargeInfoRespIndicator := '0'B, /* bit G: Charge information response indicator */ + solicitedInfoIndicator := '0'B, /* bit H: Solicited information indicator */ + spare2 := '0000'B, /* bits L-I: spare */ + reserved := '0000'B /* bits P-M: reserved */ +} + +template IID_PAR_v mw_IID_PAR_v_any := +/* Default RX template for type IID_PAR_v with wildcards for simple types */ +{ + cliAddrResponseIndicator := ?, /* bits BA: Calling party address response indicator */ + holdProvidedIndicator := ?, /* bit C: Hold provided indicator */ + spare1 := '00'B, /* bits ED: spare */ + cliCatRespIndicator := ?, /* bit F: Calling party's category response indicator */ + chargeInfoRespIndicator := ?, /* bit G: Charge information response indicator */ + solicitedInfoIndicator := ?, /* bit H: Solicited information indicator */ + spare2 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} +} /* end group IRI */ + +group IRI { +template IRI_PAR_v mw_IRI_PAR_v := +/* Default RX template for type IRI_PAR_v with fixed Calling party address request indicator and wildcards for simple types */ +{ + cliAddrRequestIndicator := c_IRI_cliAddress_req, /* bit A: Calling party address request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator */ + spare1 := '0'B, /* bit C: spare */ + cliCatRequestIndicator := ?, /* bit D: Calling party's category request indicator */ + chargeInfoRequestIndicator := ?, /* bit E: Charge information request indicator */ + spare2 := '00'B, /* bits GF: spare */ + maliciousCidReqIndicator := ?, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + spare3 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} + +template IRI_PAR_v mw_IRI_PAR_v_any := +/* Default RX template for type IRI_PAR_v with wildcards for simple types */ +{ + cliAddrRequestIndicator := ?, /* bit A: Calling party address request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator */ + spare1 := '0'B, /* bit C: spare */ + cliCatRequestIndicator := ?, /* bit D: Calling party's category request indicator */ + chargeInfoRequestIndicator := ?, /* bit E: Charge information request indicator */ + spare2 := '00'B, /* bits GF: spare */ + maliciousCidReqIndicator := ?, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + spare3 := '0000'B, /* bits L-I: spare */ + reserved := ? /* bits P-M: reserved */ +} +} /* end group IRI */ + +group LPPI { +template LPPI_PAR_tlv mw_LPPI_PAR_tlv_any := +/* Default RX template for type LPPI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + responseIndicator := ?, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} +template LPPI_PAR_tlv mw_LPPI_rsp_insuff := +/* RX template for Loop prevention indicators parameter (LPPI); Optional (O) format, with response indicator value = 'insufficient information'. */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '1'B, /* bit A: Type */ + responseIndicator := c_LPI_lopResponse_insuff, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} + +template LPPI_PAR_tlv mw_LPPI_req_Def := +/* TX template for Loop prevention indicators parameter (LPPI); Optional (O) format, containing 'request'. */ +{ + paramType := '01000100'B, /* Parameter Type '01000100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: Type */ + responseIndicator := '00'B, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + spare := '00000'B /* bits H-D: spare */ +} +} /* end group LPPI */ + +group MCI { +template MCI_PAR_tlv m_MCI_RelCall := +/* TX template for Message compatibility information parameter (MCI); Optional(O) format, with Instruction Indicators indicating 'release call'. */ +{ + paramType := '00111000'B, /* Parameter Type '00111000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + instructionIndicators := {m_InstructionIndicator_RelCall} +} + +template InstructionIndicator m_InstructionIndicator_RelCall := +/* Default TX template for type InstructionIndicator with Message compatibility information parameters indicating 'release call' */ +{ + transitAtIntermExchIndicator := '1'B, /* bit A: Transit at intermediate exchange indicator */ + releaseCallIndicator := '1'B, /* bit B: Release call indicator */ + sendNotificationIndicator := '0'B, /* bit C: Send notification indicator */ + discardMessageIndicator := '1'B, /* bit D: Discard message indicator */ + passOnNotPossibleIndicator := '0'B, /* bit E: Pass on not possible indicator */ + broadNarrowBandInterwIndicator := '10'B, /* bits G F: Broadband/narrowband interworking indicator */ + ext := '1'B /* extension bit */ +} + +template MCI_PAR_tlv mw_MCI_PAR_tlv_any := +/* Default RX template for type MCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111000'B, /* Parameter Type '00111000'B */ + paramLen := ?, /* Parameter Length field */ + instructionIndicators := ? +} +} /* end group MCI */ + +group MCRI { +template MCRI_PAR_tlv m_MCRI_req := +/* TX template for MCID request indicators parameter (MCRI); Optional (O) format, with MCID request indicator value = 'MCID requested'. */ +{ + paramType := '00111011'B, /* Parameter Type '00111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDRequestIndicator := c_MRQI_mcidRqInd_req, /* bit A: MCID request indicator */ + holdingIndicator := '0'B, /* bit B: Holding indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} + +template MCRI_PAR_tlv mw_MCRI_PAR_tlv_any := +/* Default RX template for type MCRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111011'B, /* Parameter Type '00111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDRequestIndicator := ?, /* bit A: MCID request indicator */ + holdingIndicator := ?, /* bit B: Holding indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group MCRI */ + +group MCRS { +template MCRS_PAR_tlv m_MCRS_notIncl := +/* TX template for MCID response indicators parameter (MCRS); Optional (O) format, with MCID response indicator value = 'MCID not included'. */ +{ + paramType := '00111100'B, /* Parameter Type '00111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDResponseIndicator := c_MRSI_mcidRsInd_notIncl, /* bit A: MCID response indicator */ + holdProvidedIndicator := ?, /* bit B: Hold provided indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} + +template MCRS_PAR_tlv mw_MCRS_PAR_tlv_any := +/* Default RX template for type MCRS_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111100'B, /* Parameter Type '00111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + mCIDResponseIndicator := ?, /* bit A: MCID response indicator */ + holdProvidedIndicator := ?, /* bit B: Hold provided indicator (national use) */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group MCRS */ + +group NCI { +template NCI_PAR_v m_NCI_Def := +/* Default TX template for Nature of connection indicators parameter (NCI); Fixed(F) format. */ +{ + satelliteIndicator := PX_ISUP_TX_NCI_satelliteInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := PX_ISUP_TX_NCI_contCheckInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_NCI_echoContrDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v m_NCI(template Bit2 p_cotChkInd) := +/* TX template for Nature of connection indicators (NCI); Fixed (F) format, with parametrized Continuity check indicator and all other values = default. */ +{ + satelliteIndicator := PX_ISUP_TX_NCI_satelliteInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := p_cotChkInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := PX_ISUP_TX_NCI_echoContrDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v mw_NCI_PAR_v_any := +/* Default RX template for type NCI_PAR_v with wildcards for simple types */ +{ + satelliteIndicator := ?, /* bits BA: Satellite indicator */ + continuityCheckIndicator := ?, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := ?, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} + +template NCI_PAR_v mw_NCI(template Bit2 p_satInd, + template Bit2 p_cotChkInd, + template Bit1 p_eCtrlDevInd) := +/* RX template for Nature of connection indicators (NCI); Fixed (F) format, with Continuity check indicator parameterized and any-values otherwise. */ +{ + satelliteIndicator := p_satInd, /* bits BA: Satellite indicator */ + continuityCheckIndicator := p_cotChkInd, /* bits DC: Continuity check indicator */ + echoControlDeviceIndicator := p_eCtrlDevInd, /* bit E: Echo control device indicator */ + spare := '000'B /* bits H-F: spare */ +} +} /* end group NCI */ + +group OBCI { +template OBCI_PAR_tlv m_OBCI_cDivMay := +/* TX template for Optional backward call indicators parameter (OBCI), with Call diversion may occur indicator = 'call diversion may occur' and default values otherwise.*/ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := '0'B, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := c_OBCI_cDivMayOcc_mayOcc, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := '0'B, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := '0'B, /* bit D: MLPP user indicator */ + reserved := '0000'B /* bits H-E: reserved for national use */ +} + +template OBCI_PAR_tlv m_OBCI_iBandInd(Bit1 p_inBandInfoInd) := +/* TX template for Optional backward call indicators parameter (OBCI), with In-band information indicator parameterized and default values otherwise. */ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := p_inBandInfoInd, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := '0'B, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := '0'B, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := '0'B, /* bit D: MLPP user indicator */ + reserved := '0000'B /* bits H-E: reserved for national use */ +} + +template OBCI_PAR_tlv mw_OBCI_PAR_tlv_any := +/* Default RX template for type OBCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101001'B, /* Parameter Type '00101001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + inBandInformationIndicator := ?, /* bit A: In-band information indicator */ + callDivMayOccurIndicator := ?, /* bit B: Call diversion may occur indicator */ + simpleSegmentationIndicator := ?, /* bit C: Simple segmentation indicator */ + mLPPUserIndicator := ?, /* bit D: MLPP user indicator */ + reserved := ? /* bits H-E: reserved for national use */ +} +} /* end group OBCI */ + +group OCN { +template OCN_PAR_tlv m_OCN_Def := +/* TX template for Original called number parameter (OCN); Optional (O) format, with all default values. */ +{ + paramType := '00101000'B, /* Parameter Type '00101000'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_OCN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_OCN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_OCN_addrSignals, false), /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := PX_ISUP_TX_OCN_addrPresRestrInd, /* Address presentation restricted indicator */ + numberingPlanIndicator := PX_ISUP_TX_OCN_numbPlanInd, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_OCN_addrSignals, false) /* address signals */ +} + +template OCN_PAR_tlv mw_OCN_PAR_tlv_any := +/* Default RX template for type OCN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101000'B, /* Parameter Type '00101000'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group OCN */ + +group OFCI { +template OFCI_PAR_tlv m_OFCI_CLIR := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Connected line identity request indicator = 'requested' and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cUGCallIndicator := '00'B, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := '0'B, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := c_OFCI_conLineIdRqInd_req /* bit H: Connected line identity request indicator */ +} + +template OFCI_PAR_tlv m_OFCI_CUG(Bit2 p_cugCallInd) := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Closed user group call indicator parameterized and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cUGCallIndicator := p_cugCallInd, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := '0'B, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := '0'B /* bit H: Connected line identity request indicator */ +} + +template OFCI_PAR_tlv mw_OFCI_PAR_tlv_any := +/* TX template for Optional forward call indicators (OFCI); Optional (O) format, with Closed user group call indicator parameterized and default values otherwise. */ +{ + paramType := '00001000'B, /* Parameter Type '00001000'B */ + paramLen := ?, /* Parameter Length field */ + cUGCallIndicator := ?, /* bits BA: Closed user group call indicator */ + simpleSegIndicator := ?, /* bit C: Simple segmentation indicator */ + spare := '0000'B, /* bits G-D: spare */ + cLIRequestIndicator := ? /* bit H: Connected line identity request indicator */ +} +} /* end group OFCI */ + +group PCI { +template PCI_PAR_tlv m_PCI_RelCall := +/* Default TX template for Parameter compatibility information parameter (PCI); Optional(O) format. */ +{ + paramType := '00111001'B, /* Parameter Type '00111001'B */ + paramLen := '00000011'B, /* Parameter Length field */ + parameterInstructionIndicators := {m_ParameterInstructionIndicator_RelCall} +} + +template ParameterInstructionIndicator m_ParameterInstructionIndicator_RelCall := +{ + upgradedParameter := PX_ISUP_TX_unknown_parameter_type, /* upgraded parameter name */ + transitAtIntermExchIndicator := '1'B, /* bit A: Transit at intermediate exchange indicator */ + releaseCallIndicator := '1'B, /* bit B: Release call indicator */ + sendNotificationIndicator := '0'B, /* bit C: Send notification indicator */ + discardMessageIndicator := '1'B, /* bit D: Discard message indicator */ + discardParameterIndicator := '1'B, /* bit E: Discard parameter indicator */ + passOnNotPossibleIndicator := '00'B, /* bits G F: Pass on not possible indicator */ + ext1 := '1'B, /* bit H: Extension indicator (ext.) */ + broadNarrowBandInterwIndicator := '10'B, /* bits J I: Broadband/narrowband interworking indicator */ + spare := '00000'B, /* bits O-K: spare */ + ext2 := '1'B, /* bit P: Extension indicator (ext.) */ + moreInstructionIndicators := omit /* to be defined when required */ +} + +template PCI_PAR_tlv mw_PCI_PAR_tlv_any := +/* Default RX template for type PCI_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00111001'B, /* Parameter Type '00111001'B */ + paramLen := ?, /* Parameter Length field */ + parameterInstructionIndicators := ? +} +} /* end group PCI */ + +group RAS{ +template RAS_PAR_lv m_RAS_Def := +/* Default TX template for Range and status parameter (RAS); Variable(V) format. */ +{ + paramLen := int2bit((lengthof(PX_ISUP_TX_RAS_status) + 1), 8), /* Parameter Length field */ + range := PX_ISUP_TX_RAS_range, /* Range */ + status := PX_ISUP_TX_RAS_status /* Status */ +} + +template RAS_PAR_lv mw_RAS_PAR_lv_any := +/* Default RX template for type RAS_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + range := ?, /* Range */ + status := ? /* Status */ +} +} /* end group RAS */ + +group RDI { +template RDI_PAR_tlv m_RDI_Def := +/* TX template for Redirection information parameter (RDI); Optional (O) format, with all default values. */ +{ + paramType := '00010011'B, /* Parameter Type '00010011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + redirectingIndicator := '011'B, /* bits CBA: Redirecting indicator */ + spare := '0'B, /* Bit D: spare */ + originalRedirectionReason := '0011'B, /* bits H G F E: Original redirection reason */ + redirectionCounter := '001'B, /* bits K J I: Redirection counter */ + reserved := '0'B, /* bit L: reserved for national use */ + redirectingReason := '0011'B /* bits PONM: Redirecting reason */ +} + +template RDI_PAR_tlv mw_RDI_PAR_tlv_any := +/* Default RX template for type RDI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00010011'B, /* Parameter Type '00010011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + redirectingIndicator := ?, /* bits CBA: Redirecting indicator */ + spare := '0'B, /* Bit D: spare */ + originalRedirectionReason := ?, /* bits H G F E: Original redirection reason */ + redirectionCounter := ?, /* bits K J I: Redirection counter */ + reserved := ?, /* bit L: reserved for national use */ + redirectingReason := ? /* bits PONM: Redirecting reason */ +} +} /* end group RDI */ + +group RDN { +template RDN_PAR_tlv m_RDN_Def := +/* TX template for Redirecting number parameter (RDN); Optional (O) format, with all default values. */ +{ + paramType := '00001011'B, /* Parameter Type '00001011'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_RDN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_RDN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_RDN_addrSignals, false), /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := PX_ISUP_TX_RDN_addrPresRestrInd, /* Address presentation restricted indicator */ + numberingPlanIndicator := PX_ISUP_TX_RDN_numbPlanInd, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_RDN_addrSignals, false) /* address signals */ +} + +template RDN_PAR_tlv mw_RDN_PAR_tlv_any := +/* Default RX template for type RDN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001011'B, /* Parameter Type '00001011'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := * /* address signals */ +} +} /* end group RDN */ + +group RNN { +template RNN_PAR_tlv m_RNN_Def := +/* TX template for type RNN_PAR_tlv (Redirection number parameter) with all default values */ +{ + paramType := '00001100'B, /* Parameter Type '00001100'B */ + paramLen := f_calc_paramLen(PX_ISUP_TX_RNN_addrSignals, false, 2), /* Parameter Length field */ + natureOfAddressIndicator := PX_ISUP_TX_RNN_natOfAddressInd, /* Nature of address indicator */ + oddEven := f_calc_oddeven(PX_ISUP_TX_RNN_addrSignals, false), /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := PX_ISUP_TX_RNN_numbPlanInd, /* Numbering plan indicator */ + iNN := PX_ISUP_TX_RNN_iNN, /* Internal Network Number indicator */ + addressSignals := f_char_to_BCD(PX_ISUP_TX_RNN_addrSignals, false) /* address signals */ +} + +template RNN_PAR_tlv mw_RNN_PAR_tlv_any := +/* Default RX template for type RNN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001100'B, /* Parameter Type '00001100'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := * /* address signals */ +} +} /* end group RNN */ + +group RNS { +template RNS_PAR_tlv m_RNS_Def := +/* TX template for Redirection number restriction parameter (RNS), Optional(O) format, with all default values. */ +{ + paramType := '01000000'B, /* Parameter Type '01000000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + presRestrIndicator := PX_ISUP_TX_RNS_presRestrInd, /* bits BA: Presentation restricted indicator */ + spare := '000000'B /* bits H-C: spare */ +} + +template RNS_PAR_tlv mw_RNS_PAR_tlv_any := +/* Default RX template for type RNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000000'B, /* Parameter Type '01000000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + presRestrIndicator := ?, /* bits BA: Presentation restricted indicator */ + spare := '000000'B /* bits H-C: spare */ +} +} /* end group RNS */ + +group ROP { +template ROP_PAR_tlv m_ROP_comp := +/* TX template for Remote operations parameter (ROP); Optional(O) format. */ +{ + paramType := '00110010'B, /* Parameter Type '00100001'B */ + paramLen := int2bit((lengthof(PX_ISUP_FAC_comp_txDef)+1), 8), /* Parameter Length field */ + protocolProfile := '10001'B, /* Remote operations*/ + spare := '00'B, /* Spare */ + ext := '1'B, /* Extension */ + components := PX_ISUP_FAC_comp_txDef /* Remote operations components */ +} + +template ROP_PAR_tlv mw_ROP_PAR_tlv_any := +/* Default RX template for type ROP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110010'B, /* Parameter Type '00110010'B */ + paramLen := ?, /* Parameter Length field */ + protocolProfile := ?, /* Protocol profile */ + spare := '00'B, /* spare */ + ext := ?, /* Extension */ + components := ? /* ASN.1 components */ +} +} /* end group ROP */ + +group SNN{ +template SNN_PAR_lv m_SNN(charstring p_digits, + boolean p_sendCmpl) := +/* TX template for Subsequent number parameter (SNN); Mandatory Variable (V) format, with address digits and sending complete parameterized, and default values otherwise. */ +{ + paramLen := f_calc_paramLen(p_digits, p_sendCmpl, 1), /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := f_calc_oddeven(p_digits, p_sendCmpl), /* O/E */ + addressSignals := f_char_to_BCD(p_digits, p_sendCmpl) /* address signals */ +} + +template SNN_PAR_lv mw_SNN_PAR_lv_any := +/* Default RX template for type Subsequent number with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} + +template SNN_PAR_tlv mw_SNN_PAR_tlv_any := +/* Default RX template for type SNN_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000101'B, /* Parameter Type '00000101'B */ + paramLen := ?, /* Parameter Length field */ + spare := '0000000'B, /* spare */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} +} /* end group SNN */ + +group SRI { +template SRI_PAR_v m_SRI(Bit1 p_suspResInd) := +/* TX template for Suspend Resume indicators parameter (SRI); Fixed(F) format, with Suspend resume indicator parameterized. */ +{ + suspendResumeIndicator := p_suspResInd, /* bit A: Suspend/resume indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template SRI_PAR_v mw_SRI_PAR_v_any := +/* Default RX template for type SRI_PAR_v with wildcards for simple types */ +{ + suspendResumeIndicator := ?, /* bit A: Suspend/resume indicator */ + spare := '0000000'B /* bits H-B: spare */ +} +} /* end group SRI */ + +group TMRP { +template TMRP_PAR_tlv mw_TMRP_PAR_tlv_any := +/* Default RX template for type TMRP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111110'B, /* Parameter Type '00111110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumRequirement := ? /* Transmission medium requirement */ +} + +template TMRP_PAR_tlv mw_TMRP_PAR_tlv(Bit8 p_TMR) := +/* Default RX template for type TMRP_PAR_tlv with parametrized Transmission medium requirement */ +{ + paramType := '00111110'B, /* Parameter Type '00111110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumRequirement := p_TMR /* Transmission medium requirement */ +} +} /* end group TMRP */ + +group TMU { +template TMU_PAR_tlv m_TMU(Bit8 p_TMU) := +/* Default RX template for type TMU_PAR_tlv with parametrized Transmission medium used */ +{ + paramType := '00110101'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumUsed := p_TMU /* Transmission medium used */ +} + +template TMU_PAR_tlv mw_TMU_PAR_tlv_any := +/* Default RX template for type TMU_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110101'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + transmissionMediumUsed := ? /* Transmission medium used */ +} +} /* end group TMU */ + +group UAI { +template UAI_PAR_tlv m_UAI_connected := +/* TX template for Action indicator (UAI); Optional (O) format, with throughConnInstructionIndicator = 'connected'. */ +{ + paramType := '01110100'B, /* Parameter Type '01110100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + throughConnInstructionIndicator := c_AI_actInd_conn, /* bit A: Through-connection instruction indicator */ + t9TimerInstructionIndicator := '0'B, /* bit B: T9 timer instruction indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := '1'B /* bit H: Extension indicator */ +} + +template UAI_PAR_tlv mw_UAI_PAR_tlv_any := +/* Default RX template for type UAI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110100'B, /* Parameter Type '01110100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + throughConnInstructionIndicator := ?, /* bit A: Through-connection instruction indicator */ + t9TimerInstructionIndicator := ?, /* bit B: T9 timer instruction indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} +} /* end group UAI */ + +group USI { +template USI_PAR_tlv m_USI(template USIContents p_uSIContents, integer p_length) := +/* Default TX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIContents m_USIContents_Std(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* Default TX template for type USIContents with Information transfer capability and User information Layer 1 protocol parameterized, and with default values otherwise (extension octets are omitted).*/ +{ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := m_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := m_BCAP_octet6_Std, + bCAP_octet7 := m_BCAP_octet7_Std +} + +template USIContents m_USIContents_InfoTrfCap(Bit5 p_InfoTrfCap) := +/* TX template for type USIContents with Information transfer capability parameterized, and with default values otherwise (octets 5, 6 and 7 and extension octets are omitted).*/ +{ + bCAP_octet3 := m_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := m_BCAP_octet4_Std, + bCAP_octet5 := omit, + bCAP_octet6 := omit, + bCAP_octet7 := omit +} + + + +template USI_PAR_tlv mw_USI_PAR_tlv_any := +/* Default RX template for type USI_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := mw_USIContents_any +} + +template USIContents mw_USIContents_any := +/* Default RX template for type USIContents with 'any' template values for structured types, and wildcards for simple types */ +{ + bCAP_octet3 := mw_BCAP_octet3_any, + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_any ifpresent, + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} + +template USI_PAR_tlv mw_USI_Std(USIContents p_uSIContents) := +/* Default RX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00011101'B, /* Parameter Type '00011101'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIContents mw_USIContents_Std(Bit5 p_InfoTrfCap, Bit5 p_UserInfoL1) := +/* Default RX template for type USIContents with Information transfer capability and User information Layer 1 protocol parameterized, and with 'any' template values for other structured types, and wildcards for simple types.*/ +{ + bCAP_octet3 := mw_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_Std(p_UserInfoL1), + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} + +template USIContents mw_USIContents_InfoTrfCap(Bit5 p_InfoTrfCap) := +/* RX template for type USIContents with Information transfer capability parameterized, and with 'any' template values for other structured types, and wildcards for simple types.*/ +{ + bCAP_octet3 := mw_BCAP_octet3_Std(p_InfoTrfCap), + bCAP_octet4 := mw_BCAP_octet4_any, + bCAP_octet5 := mw_BCAP_octet5_any ifpresent, + bCAP_octet6 := mw_BCAP_octet6_any ifpresent, + bCAP_octet7 := mw_BCAP_octet7_any ifpresent +} +} /* end group USI */ + +group USIP { +template USIP_PAR_tlv m_USIP(template USIContents p_uSIContents, integer p_length) := +/* Default TX template with parametrization for User service information parameter (USI); Optional(O) format. */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := int2bit(p_length,8), /* Parameter Length field */ + uSIContents := p_uSIContents +} + +template USIP_PAR_tlv mw_USIP_PAR_tlv_any := +/* Default RX template for type USIP_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := mw_USIContents_any +} + +template USIP_PAR_tlv mw_USIP_PAR_tlv(USIContents p_uSIContents) := +/* Default RX template for type USIP_PAR_tlv with parametrized Information Transfer Capability, 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '00110000'B, /* Parameter Type '00110000'B */ + paramLen := ?, /* Parameter Length field */ + uSIContents := p_uSIContents +} +} /* end group USIP */ + +group UTSI { +template UTSI_PAR_tlv m_UTSI(Bit7 p_hlci) := +/* TX template for type UTSI_PAR_tlv with parametrized High Layer Characteristics Identification */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := '00000010'B, /* Parameter Length field */ + presentation := '01'B, /* High layer protocol profile */ + interpretation := '100'B, /* First (primary or only) high layer characteristics */ + codingStandard := '00'B, /* ITU-T standardized coding */ + ext1 :='1'B, /* Extension */ + highLayerCharacteristicsIdentification := p_hlci, /* High Layer Characteristics Identification */ + ext2 := '1'B, /* Extension */ + extendedLayerCharacteristicsIdentification := omit, /* Extended high layer characteristics identification */ + ext3 := omit /* Extension */ +} + +template UTSI_PAR_tlv mw_UTSI_PAR_tlv_any := +/* Default RX template for type UTSI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := ?, /* Parameter Length field */ + presentation := ?, /* Presentation */ + interpretation := ?, /* Interpretation */ + codingStandard := ?, /* Coding standard */ + ext1 := ?, /* Extension */ + highLayerCharacteristicsIdentification := ?, /* High layer characteristics identification */ + ext2 := ?, /* Extension */ + extendedLayerCharacteristicsIdentification := *, /* Extended layer characteristics identification */ + ext3 := * /* Extension */ +} + +template UTSI_PAR_tlv mw_UTSI(Bit7 p_hlci) := +/* Default RX template for type UTSI_PAR_tlv with parametrized High Layer Characteristics Identification */ +{ + paramType := '00110100'B, /* Parameter Type '00110100'B */ + paramLen := ?, /* Parameter Length field */ + presentation := ?, /* Presentation */ + interpretation := ?, /* Interpretation */ + codingStandard := ?, /* Coding standard */ + ext1 := ?, /* Extension */ + highLayerCharacteristicsIdentification := p_hlci, /* High layer characteristics identification */ + ext2 := ?, /* Extension */ + extendedLayerCharacteristicsIdentification := *, /* Extended layer characteristics identification */ + ext3 := * /* Extension */ +} +} /* end group UTSI */ + +group UUID { +template UUID_PAR_tlv m_UUID_req_S1(Bit2 p_serv1) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 1 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := p_serv1, /* bits C B: Service 1 */ + service2 := '00'B, /* bits E D: Service 2 no information */ + service3 := '00'B, /* bits G F: Service 3 no information */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv m_UUID_req_S2(Bit2 p_serv2) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := '00'B, /* bits C B: Service 1 no information */ + service2 := p_serv2, /* bits E D: Service 2*/ + service3 := '00'B, /* bits G F: Service 3 no information */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv m_UUID_req_S3(Bit2 p_serv3) := +/* TX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 requested. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := '0'B, /* bit A: req/resp type */ + service1 := '00'B, /* bits C B: Service 1 no information */ + service2 := '00'B, /* bits E D: Service 2 no information*/ + service3 := p_serv3, /* bits G F: Service 3 */ + networkDiscardIndicator := '0'B /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_PAR_tlv_any := +/* Default RX template for type UUID_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S2Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 2 = 'not provided'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := c_UUI_service_rsp_notProv, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S1Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 1 = 'not provided' and networkDiscardIndicator = 'UUI discarded by the network'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := c_UUI_service_rsp_notProv, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := ?, /* bits G F: Service 3 */ + networkDiscardIndicator := c_UUI_netwDiscInd_discarded /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} + +template UUID_PAR_tlv mw_UUID_resp_S3Not := +/* RX template for User-to-user indicators parameter (UUID); Optional (O) format, with Service 3 = 'not provided'. */ +{ + paramType := '00101010'B, /* Parameter Type '00101010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + request_response := ?, /* bit A: Type */ + service1 := ?, /* bits C B: Service 1 */ + service2 := ?, /* bits E D: Service 2 */ + service3 := c_UUI_service_rsp_notProv, /* bits G F: Service 3 */ + networkDiscardIndicator := ? /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} +} /* end group UUID */ + +group UUIF { +template UUIF_PAR_tlv m_UUIF_ServDat(octetstring p_serviceData) := +/* TX template for User-to-user information parameter (UUIF); Optional (O) format, with user-to-user information value parameterized. */ +{ + paramType := '00100000'B, /* Parameter Type '00100000'B */ + paramLen := int2bit(lengthof(p_serviceData),8), /* Parameter Length field */ + userToUserInformation := p_serviceData /* User-to-user information */ +} + +template UUIF_PAR_lv mw_UUIF_PAR_lv_any := +/* Default RX template for type UUIF_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + userToUserInformation := ? /* User-to-user information */ +} + +template UUIF_PAR_tlv mw_UUIF_PAR_tlv_any := +/* Default RX template for type UUIF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100000'B, /* Parameter Type '00100000'B */ + paramLen := ?, /* Parameter Length field */ + userToUserInformation := ? /* User-to-user information */ +} +} /* end group UUIF */ + +template UNKNOWN_PAR_tlv m_UnknownPar := +/* TX template for unknown parameter (UNKNOWN); Optional (O) format, with Unknown parameter type given by Module Parameter, and arbitrary parameter contents. */ +{ + paramType := PX_ISUP_TX_unknown_parameter_type, /* Unknown Parameter Type e.g. '10001111'B */ + paramLen := '00000010'B, /* Parameter Length field */ + contents := '3A95'O /* Parameter contents */ +} + +group OptionalParameterListUsed { +template ACM_OPTIONAL_PARAMS m_ACM_USED_OPTIONAL_PARAMS(template OBCI_PAR_tlv p_OBCI, template UUIF_PAR_tlv p_UUIF, template ATP_PAR_tlv p_ATP, template GNI_PAR_tlv p_GNI, template TMU_PAR_tlv p_TMU, template RNN_PAR_tlv p_RNN, template PCI_PAR_tlv p_PCI, template CDI_PAR_tlv p_CDI, template RNS_PAR_tlv p_RNS, template CCPI_PAR_tlv p_CCPI, template UNKNOWN_PAR_tlv p_UNKNOWN) := +/* TX template for SET: optional parameters of Address complete message (ACM) with optional parameters Optional backward call indicators, User-to-user information, Access Trasnport, Generic notification indicator, Transmission Medium Used, Redirection number, Parameter compatibility information, Call diversion information, Redirection number restriction and CCNR possible indicator parameterized.*/ +{ + optionalBackwardCallIndicators := p_OBCI, /* Optional backward call indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + causeIndicators := omit, /* Cause indicators, O, len=4-? */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + redirectionNumber := p_RNN, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := p_PCI,/* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := p_CDI, /* Call diversion information, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := omit, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := p_CCPI, /* CCNR possible indicator, O, len=3 */ + hTRInformation := omit, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit, /* O, len=3 */ + unknownParameter := p_UNKNOWN +} + +template ANM_OPTIONAL_PARAMS m_ANM_USED_OPTIONAL_PARAMS(template UUIF_PAR_tlv p_UUIF, template CPN_PAR_tlv p_CPN, template ATP_PAR_tlv p_ATP, template GNU_PAR_tlv p_GNU, template TMU_PAR_tlv p_TMU, template RNS_PAR_tlv p_RNS) := +/* TX template for SET: optional parameters of Answer message (ANM) with optional parameters User-to-user information, Connected number, Access transport, Generic number, Transmission medium used and Redirection number restriction parameterized.*/ +{ + backwardCallIndicators := omit, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := omit, /* Optional backward call indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + connectedNumber := p_CPN, /* Connected number, O, len=4-? */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + redirectionNumber := omit, /* Redirection number, O, len=5-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + displayInformation := omit, /* Display information, O, len=3-? */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=1-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3 */ +} + +template CON_OPTIONAL_PARAMS m_CON_USED_OPTIONAL_PARAMS(template ATP_PAR_tlv p_ATP, template TMU_PAR_tlv p_TMU) := +/* TX template for SET: optional parameters of Connect message (CON) with optional parameter with optional parameters Access transport and Transmission medium used parameterized */ +{ + optionalBackwardCallIndicators := omit, /* Optional backward call indicators, O, len=3 */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + connectedNumber := omit, /* Connected number, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + userToUserInformation := omit, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + genericNumber1 := omit, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + redirectionNumberRestriction := omit, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + hTRInformation := omit, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3 */ +} + +template CPG_OPTIONAL_PARAMS m_CPG_USED_OPTIONAL_PARAMS(template BCI_PAR_tlv p_BCI, template OBCI_PAR_tlv p_OBCI, template ATP_PAR_tlv p_ATP, template RNN_PAR_tlv p_RNN, template GNI_PAR_tlv p_GNI, template TMU_PAR_tlv p_TMU, template CDI_PAR_tlv p_CDI, template RNS_PAR_tlv p_RNS) := +/* TX template for SET: optional parameters of Call progress message (CPG) with optional parameters Backward call indicators, Optional backward call indicators, Access transport, Redirection number, Generic notification, Transmission medium used, Call diversion information and Redirection numberindicator restriction.*/ +{ + causeIndicators := omit, /* Cause indicators, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + backwardCallIndicators := p_BCI, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := p_OBCI, /* Optional backward call indicators, O, len=3 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userToUserIndicators := omit, /* User-to-user indicators, O, len=3 */ + redirectionNumber := p_RNN, /* Redirection number, O, len=5-? */ + userToUserInformation := omit, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := p_TMU, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := omit, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := p_CDI, /* Call diversion information, O, len=3 */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := p_RNS, /* Redirection number restriction, O, len=3 */ + callTransferNumber := omit, /* Call transfer number, O, len=4-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + connectedNumber := omit, /* Connected number, O, len=4-? */ + backwardGVNS := omit, /* Backward GVNS, O, len=3-? */ + genericNumber1 := omit, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + callHistoryInformation := omit, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := omit, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := omit, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown parameters */ +} + +template FAC_OPTIONAL_PARAMS m_FAC_USED_OPTIONAL_PARAMS(template ROP_PAR_tlv p_ROP):= +/* TX template for SET: optional parameters of Facility message (FAC) with remote operations parameterized and no other optional parameters.*/ +{ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + remoteOperations := p_ROP, /* Remote operations, O, len=8-? */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + callTransferNumber := omit, /* Call transfer number, O, len=4-? */ + accessTransport := omit, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + redirectionNumber := omit, /* Redirection number, O, len=4-? */ + pivotRoutingIndicators := omit, /* Pivot routing indicators, O, len=3 */ + pivotStatus := omit, /* Pivot status, O, len=3 */ + pivotCounter := omit, /* Pivot counter, O, len=3 */ + pivotRoutingBackwardInformation := omit, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := omit /* Redirect status, O, len=3-? */ +} + +template FAR_OPTIONAL_PARAMS m_FAR_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUI) := +/* TX template for SET: optional parameters of Facility request message (FAR) with User-to-user indicators parameterized and no other optional parameters */ +{ + userToUserIndicators := p_UUI, /* User-to-user indicators, O, len=3 */ + callReference := omit, /* Call reference, O, len=7 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := omit /* Parameter compatibility information, O, len=4-? */ +} + +template IAM_OPTIONAL_PARAMS m_IAM_USED_OPTIONAL_PARAMS(template CGN_PAR_tlv p_CGN, template OFCI_PAR_tlv p_OFCI, template RDN_PAR_tlv p_RDN, template RDI_PAR_tlv p_RDI, template CUGIC_PAR_tlv p_CUGIC, template OCN_PAR_tlv p_OCN, template UUIF_PAR_tlv p_UUIF, template ATP_PAR_tlv p_ATP, template USI_PAR_tlv p_USI, template UUID_PAR_tlv p_UUID, template GNU_PAR_tlv p_GNU, template USIP_PAR_tlv p_USIP, template UTSI_PAR_tlv p_UTSI, template HPC_PAR_tlv p_HPC) := +/* TX template for SET: optional parameters of Initial address message (IAM) with all used optional parameters parameterized*/ +{ + transitNetworkSelection := omit, /* Transit network selection, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + callingPartyNumber := p_CGN, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := p_OFCI, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := p_RDN, /* Redirecting number, O, len=4-? */ + redirectionInformation := p_RDI, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := p_CUGIC, /* Closed user group interlock code, O, len=6 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + originalCalledNumber := p_OCN, /* Original called number, O, len=4-? */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userServiceInformation := p_USI, /* User service information, O, len=4-13 */ + userToUserIndicators := p_UUID, /* User-to-user indicators, O, len=3 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := omit, /* Generic number2, O, len=5-? */ + propagationDelayCounter := omit, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := p_USIP, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := omit, /* Network specific facility, O, len=4-? */ + genericDigits1 := omit, /* Generic digits1, O, len=4-? */ + genericDigits2 := omit, /* Generic digits2, O, len=4-? */ + originationISCPointCode := omit, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := p_UTSI, /* User teleservice information, O, len=4-5 */ + remoteOperations := omit, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := omit, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := omit, /* Generic notification indicator2, O, len=3 */ + serviceActivation := omit, /* Service activation, O, len=3-? */ + mLPPPrecedence := omit, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := omit, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := omit, /* Location number, O, len=4-? */ + forwardGVNS := omit, /* Forward GVNS, O, len=5-26 */ + cCSS := omit, /* CCSS, O, len=3-? */ + networkManagementControls := omit, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := omit, /* Circuit assignment map, O, len=6-7 */ + correlationId := omit, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := omit, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := omit, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := omit, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := omit, /* Conference treatment indicators, O, len=3-? */ + sCFId := omit, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := omit, /* UID capability indicators, O, len=3-? */ + echoControlInformation := omit, /* Echo control information, O, len=3 */ + hopCounter := p_HPC, /* Hop counter, O, len=3 */ + collectCallRequest := omit, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := omit, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := omit, /* Application transport parameter2, O, len=5-? */ + pivotCapability := omit, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := omit, /* Called directory number, O, len=5-? */ + originalCalledINNumber := omit, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := omit, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := omit, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := omit, /* Query on release capability, O, len=3 */ + pivotCounter := omit, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := omit, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := omit, /* Redirect capability, O, len=3 */ + redirectCounter := omit, /* Redirect counter, O, len=3 */ + redirectStatus := omit, /* Redirect status, O, len=3 */ + redirectForwardInformation := omit, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := omit, /* Number portability forward information, O, len=1-? */ + automaticReRouting := omit /* Automatic re-routing, O, len=4-? */ +} + +template IDR_OPTIONAL_PARAMS m_IDR_USED_OPTIONAL_PARAMS(template MCRI_PAR_tlv p_MRQI) := +/* TX template for SET: optional parameters of Identification request message (IDR) with MCID request indicators parameterized and no other optional parameters */ +{ + mCIDRequestIndicators := p_MRQI, /* MCID request indicators, O, len=3 */ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit /* Parameter compatibility information, O, len=4-? */ +} + +template INF_OPTIONAL_PARAMS m_INF_USED_OPTIONAL_PARAMS := +/* TX template for SET: optional parameters of Information message (INF) with Calling party number and with no other optional parameters */ +{ + callingPartysCategory := omit, /* Calling party's category, O, len=3 */ + callingPartyNumber := m_CGN_PAR_Def, /* Calling party number, O, len=4-? */ + callReference := omit, /* Call reference, O, len=7 */ + connectionRequest := omit, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + networkSpecificFacility := omit /* Network specific facility, O, len=4-? */ +} + +template LOP_OPTIONAL_PARAMS m_LOP_USED_OPTIONAL_PARAMS(template LPPI_PAR_tlv p_LPI) := +/* TX template for SET: optional parameters of Loop prevention message (LOP) with Loop prevention indicators parameterized and with no other optional parameters */ +{ + messageCompatibilityInformation := omit, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := omit, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := omit, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := p_LPI /* Loop prevention indicators, O, len=3 */ +} + +template ACM_OPTIONAL_PARAMS mw_ACM_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUID) := +/* TX template for SET: optional parameters of Address complete message (ACM) with optional parameters Optional backward call indicators, Generic notification indicator, Redirection number, Call diversion information, Redirection number restriction and CCNR possible indicator parameterized.*/ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + userToUserIndicators := p_UUID, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter :=omit +} + +template CPG_OPTIONAL_PARAMS mw_CPG_USED_OPTIONAL_PARAMS(template GNI_PAR_tlv p_GNI) := +/* RX template for SET: optional parameters of Call progress message (CPG) with optional parameters Generic notification indicator parameterized.*/ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := p_GNI, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown parameters */ +} + +template FRJ_OPTIONAL_PARAMS mw_FRJ_USED_OPTIONAL_PARAMS(template UUID_PAR_tlv p_UUI) := +/* RX template for SET: optional parameters of Facility reject message (FRJ) with 'User-to-user indicators parameterized */ +{ + userToUserIndicators := p_UUI /* User-to-user indicators, O, len=3 */ +} + +template IAM_OPTIONAL_PARAMS mw_IAM_USED_OPTIONAL_PARAMS + (template CGN_PAR_tlv p_CGN, + template OFCI_PAR_tlv p_OFCI, + template RDN_PAR_tlv p_RDN, + template RDI_PAR_tlv p_RDI, + template CUGIC_PAR_tlv p_CUGIC, + template OCN_PAR_tlv p_OCN, + template UUIF_PAR_tlv p_UUIF, + template ATP_PAR_tlv p_ATP, + template USI_PAR_tlv p_USI, + template GNU_PAR_tlv p_GNU, + template USIP_PAR_tlv p_USIP, + template UTSI_PAR_tlv p_UTSI, + template TMRP_PAR_tlv p_TMRP, + template HPC_PAR_tlv p_HPC) := +/* RX template for SET: optional parameters of Initial address message (IAM) with CGN, OFCI, RDN, RDI, CUGIC, OCN, UUIF, ATP, USI, GNU, USIP, UTSI, TMRP, HPC parameterized and 'any' other optional parameters.*/ +{ + transitNetworkSelection := mw_TNS_PAR_tlv_any ifpresent, /* Transit network selection, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + callingPartyNumber := p_CGN, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := p_OFCI, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := p_RDN, /* Redirecting number, O, len=4-? */ + redirectionInformation := p_RDI, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := p_CUGIC, /* Closed user group interlock code, O, len=6 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + originalCalledNumber := p_OCN, /* Original called number, O, len=4-? */ + userToUserInformation := p_UUIF, /* User-to-user information, O, len=3-131 */ + accessTransport := p_ATP, /* Access transport, O, len=3-? */ + userServiceInformation := p_USI, /* User service information, O, len=4-13 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + genericNumber1 := p_GNU, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + propagationDelayCounter := mw_PDC_PAR_tlv_any ifpresent, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := p_USIP, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + originationISCPointCode := mw_OIPC_PAR_tlv_any ifpresent, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := p_UTSI, /* User teleservice information, O, len=4-5 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + mLPPPrecedence := mw_MLPP_PAR_tlv_any ifpresent, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := p_TMRP, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := mw_LON_PAR_tlv_any ifpresent, /* Location number, O, len=4-? */ + forwardGVNS := mw_FGVNS_PAR_tlv_any ifpresent, /* Forward GVNS, O, len=5-26 */ + cCSS := mw_CCSS_PAR_tlv_any ifpresent, /* CCSS, O, len=3-? */ + networkManagementControls := mw_NMC_PAR_tlv_any ifpresent, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := mw_CAM_PAR_tlv_any ifpresent, /* Circuit assignment map, O, len=6-7 */ + correlationId := mw_CRI_PAR_tlv_any ifpresent, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := mw_CDTI_PAR_tlv_any ifpresent, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := mw_CIN_PAR_tlv_any ifpresent, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := mw_COTI_PAR_tlv_any ifpresent, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + sCFId := mw_SCFI_PAR_tlv_any ifpresent, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := mw_UCI_PAR_tlv_any ifpresent, /* UID capability indicators, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + hopCounter := p_HPC, /* Hop counter, O, len=3 */ + collectCallRequest := mw_CCRQ_PAR_tlv_any ifpresent, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotCapability := mw_PICP_PAR_tlv_any ifpresent, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := mw_CDIN_PAR_tlv_any ifpresent, /* Called directory number, O, len=5-? */ + originalCalledINNumber := mw_OCI_PAR_tlv_any ifpresent, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := mw_CGL_PAR_tlv_any ifpresent, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := mw_NRN_PAR_tlv_any ifpresent, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := mw_QRC_PAR_tlv_any ifpresent, /* Query on release capability, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := mw_PRFI_PAR_tlv_any ifpresent, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := mw_RCP_PAR_tlv_any ifpresent, /* Redirect capability, O, len=3 */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + redirectForwardInformation := mw_RFI_PAR_tlv_any ifpresent, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := mw_NPFI_PAR_tlv_any ifpresent, /* Number portability forward information, O, len=1-? */ + automaticReRouting := mw_ARR_PAR_tlv_any ifpresent /* Automatic re-routing, O, len=4-? */ +} + +template IRS_OPTIONAL_PARAMS mw_IRS_USED_OPTIONAL_PARAMS(template MCRS_PAR_tlv p_MCRS) := +/* RX template for SET: optional parameters of Identification response message (IRS) with MCID response indicators parameterized, and with 'any' other optional parameters */ +{ + mCIDResponseIndicators := p_MCRS, /* MCID response indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} + +template LOP_OPTIONAL_PARAMS mw_LOP_USED_OPTIONAL_PARAMS(template LPPI_PAR_tlv p_LPI) := +/* RX template for SET: optional parameters of Loop prevention message (LOP) with Loop prevention indicators parameterized and with 'any' other optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := mw_CTR_PAR_tlv_any ifpresent, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := p_LPI /* Loop prevention indicators, O, len=3 */ +} +} /* end group OptionalParameterListUsed */ + +group OptionalParameterListAny{ +template ACM_OPTIONAL_PARAMS mw_ACM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Address complete message (ACM) with 'any'-optional parameters */ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter :=omit +} ifpresent; + +template ANM_OPTIONAL_PARAMS mw_ANM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Answer message (ANM) with 'any'-optional parameters */ +{ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + displayInformation := mw_DIF_PAR_tlv_any ifpresent, /* Display information, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=1-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3 */ +} ifpresent; + +template APM_OPTIONAL_PARAMS mw_APM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Application transport message (APM) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent /* Application transport parameter2, O, len=5-? */ +} ifpresent; + +template CON_OPTIONAL_PARAMS mw_CON_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Connect message (CON) with 'any'-optional parameters */ +{ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3 */ +} ifpresent; + +template CPG_OPTIONAL_PARAMS mw_CPG_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Call progress message (CPG) with 'any'-optional parameters */ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent, /* Cause indicators, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + backwardCallIndicators := mw_BCI_PAR_tlv_any ifpresent, /* Backward call indicators, O, len=4 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + transmissionMediumUsed := mw_TMU_PAR_tlv_any ifpresent, /* Transmission medium used, O, len=3 */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callDiversionInformation := mw_CDI_PAR_tlv_any ifpresent, /* Call diversion information, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + redirectionNumberRestriction := mw_RNS_PAR_tlv_any ifpresent, /* Redirection number restriction, O, len=3 */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + connectedNumber := mw_CPN_PAR_tlv_any ifpresent, /* Connected number, O, len=4-? */ + backwardGVNS := mw_BGV_PAR_tlv_any ifpresent, /* Backward GVNS, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + callHistoryInformation := mw_CHI_PAR_tlv_any ifpresent, /* Call history information, O, len=4 */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + uIDActionIndicators := mw_UAI_PAR_tlv_any ifpresent, /* UID action indicators, O, len=3-? */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + cCNRPossibleIndicator := mw_CCPI_PAR_tlv_any ifpresent, /* CCNR possible indicator, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + unknownParameter := omit /* Unknown Parameter */ +} ifpresent; + +template FAA_OPTIONAL_PARAMS mw_FAA_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility accepted message (FAA) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template FAC_OPTIONAL_PARAMS mw_FAC_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility message (FAC) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + callTransferNumber := mw_CTN_PAR_tlv_any ifpresent, /* Call transfer number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=4-? */ + pivotRoutingIndicators := mw_PRI_PAR_tlv_any ifpresent, /* Pivot routing indicators, O, len=3 */ + pivotStatus := mw_PST_PAR_tlv_any ifpresent, /* Pivot status, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingBackwardInformation := mw_PRBI_PAR_tlv_any ifpresent, /* Pivot routing backward information, O, len=3-? */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent /* Redirect status, O, len=3-? */ +} ifpresent; + +template FAR_OPTIONAL_PARAMS mw_FAR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility request message (FAR) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template FRJ_OPTIONAL_PARAMS mw_FRJ_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Facility reject message (FRJ) with 'any'-optional parameters */ +{ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent /* User-to-user indicators, O, len=3 */ +} ifpresent; + +template FTR_OPTIONAL_PARAMS mw_FTR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Forward transfer message (FTR) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template IAM_OPTIONAL_PARAMS mw_IAM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Initial address message (IAM) with 'any'-optional parameters */ +{ + transitNetworkSelection := mw_TNS_PAR_tlv_any ifpresent, /* Transit network selection, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + optionalForwardCallIndicators := mw_OFCI_PAR_tlv_any ifpresent, /* Optional forward call indicators, O, len=3 */ + redirectingNumber := mw_RDN_PAR_tlv_any ifpresent, /* Redirecting number, O, len=4-? */ + redirectionInformation := mw_RDI_PAR_tlv_any ifpresent, /* Redirection information, O, len=3-4 */ + closedUserGroupInterlockCode := mw_CUGIC_PAR_tlv_any ifpresent, /* Closed user group interlock code, O, len=6 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + originalCalledNumber := mw_OCN_PAR_tlv_any ifpresent, /* Original called number, O, len=4-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userServiceInformation := mw_USI_PAR_tlv_any ifpresent, /* User service information, O, len=4-13 */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number2, O, len=5-? */ + propagationDelayCounter := mw_PDC_PAR_tlv_any ifpresent, /* Propagation delay counter, O, len=4 */ + userServiceInformationPrime := mw_USIP_PAR_tlv_any ifpresent, /* User service information prime, O, len=4-13 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + originationISCPointCode := mw_OIPC_PAR_tlv_any ifpresent, /* Origination ISC point code, O, len=4 */ + userTeleserviceInformation := mw_UTSI_PAR_tlv_any ifpresent, /* User teleservice information, O, len=4-5 */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + serviceActivation := mw_SAC_PAR_tlv_any ifpresent, /* Service activation, O, len=3-? */ + mLPPPrecedence := mw_MLPP_PAR_tlv_any ifpresent, /* MLPP precedence, O, len=8 */ + transmissionMediumRequirementPrime := mw_TMRP_PAR_tlv_any ifpresent, /* Transmission medium requirement prime, O, len=3 */ + locationNumber := mw_LON_PAR_tlv_any ifpresent, /* Location number, O, len=4-? */ + forwardGVNS := mw_FGVNS_PAR_tlv_any ifpresent, /* Forward GVNS, O, len=5-26 */ + cCSS := mw_CCSS_PAR_tlv_any ifpresent, /* CCSS, O, len=3-? */ + networkManagementControls := mw_NMC_PAR_tlv_any ifpresent, /* Network management controls, O, len=3-? */ + circuitAssignmentMap := mw_CAM_PAR_tlv_any ifpresent, /* Circuit assignment map, O, len=6-7 */ + correlationId := mw_CRI_PAR_tlv_any ifpresent, /* Correlation id, O, len=3-? */ + callDiversionTreatmentIndicators := mw_CDTI_PAR_tlv_any ifpresent, /* Call diversion treatment indicators, O, len=3-? */ + calledINNumber := mw_CIN_PAR_tlv_any ifpresent, /* Called IN number, O, len=4-? */ + callOfferingTreatmentIndicators := mw_COTI_PAR_tlv_any ifpresent, /* Call offering treatment indicators, O, len=3-? */ + conferenceTreatmentIndicators := mw_CTI_PAR_tlv_any ifpresent, /* Conference treatment indicators, O, len=3-? */ + sCFId := mw_SCFI_PAR_tlv_any ifpresent, /* SCF id, O, len=3-? */ + uIDCapabilityIndicators := mw_UCI_PAR_tlv_any ifpresent, /* UID capability indicators, O, len=3-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent, /* Echo control information, O, len=3 */ + hopCounter := mw_HPC_PAR_tlv_any ifpresent, /* Hop counter, O, len=3 */ + collectCallRequest := mw_CCRQ_PAR_tlv_any ifpresent, /* Collect call request, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter2, O, len=5-? */ + pivotCapability := mw_PICP_PAR_tlv_any ifpresent, /* Pivot capability, O, len=3 */ + calledDirectoryNumber := mw_CDIN_PAR_tlv_any ifpresent, /* Called directory number, O, len=5-? */ + originalCalledINNumber := mw_OCI_PAR_tlv_any ifpresent, /* Original called IN number, O, len=4-? */ + callingGeodeticLocation := mw_CGL_PAR_tlv_any ifpresent, /* Calling geodetic location, O, len=3-? */ + networkRoutingNumber := mw_NRN_PAR_tlv_any ifpresent, /* Network routing number, O, len=4-? */ + queryOnReleaseCapability := mw_QRC_PAR_tlv_any ifpresent, /* Query on release capability, O, len=3 */ + pivotCounter := mw_PICN_PAR_tlv_any ifpresent, /* Pivot counter, O, len=3 */ + pivotRoutingForwardInformation := mw_PRFI_PAR_tlv_any ifpresent, /* Pivot routing forward information, O, len=3-? */ + redirectCapability := mw_RCP_PAR_tlv_any ifpresent, /* Redirect capability, O, len=3 */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectStatus := mw_RST_PAR_tlv_any ifpresent, /* Redirect status, O, len=3 */ + redirectForwardInformation := mw_RFI_PAR_tlv_any ifpresent, /* Redirect forward information, O, len=3-? */ + numberPortabilityForwardInformation := mw_NPFI_PAR_tlv_any ifpresent, /* Number portability forward information, O, len=1-? */ + automaticReRouting := mw_ARR_PAR_tlv_any ifpresent /* Automatic re-routing, O, len=4-? */ +} + +template IDR_OPTIONAL_PARAMS mw_IDR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Identification request message (IDR) with 'any'-optional parameters */ +{ + mCIDRequestIndicators := mw_MCRI_PAR_tlv_any ifpresent, /* MCID request indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template INF_OPTIONAL_PARAMS mw_INF_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Information message (INF) with 'any'-optional parameters */ +{ + callingPartysCategory := mw_CGC_PAR_tlv_any ifpresent, /* Calling party's category, O, len=3 */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + connectionRequest := mw_CRQ_PAR_tlv_any ifpresent, /* Connection request, O, len=7-9 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent /* Network specific facility, O, len=4-? */ +} ifpresent; + +template INR_OPTIONAL_PARAMS mw_INR_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Information request message (INR) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent, /* Call reference, O, len=7 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template IRS_OPTIONAL_PARAMS mw_IRS_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Identification response message (IRS) with 'any'-optional parameters */ +{ + mCIDResponseIndicators := mw_MCRS_PAR_tlv_any ifpresent, /* MCID response indicators, O, len=3 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callingPartyNumber := mw_CGN_PAR_tlv_any ifpresent, /* Calling party number, O, len=4-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} ifpresent; + +template LOP_OPTIONAL_PARAMS mw_LOP_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Loop prevention message (LOP) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + callTransferReference := mw_CTR_PAR_tlv_any ifpresent, /* Call transfer reference, O, len=3 */ + loopPreventionIndicators := mw_LPPI_PAR_tlv_any ifpresent /* Loop prevention indicators, O, len=3 */ +} ifpresent; + +template NRM_OPTIONAL_PARAMS mw_NRM_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Network resource management message (NRM) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + echoControlInformation := mw_ECI_PAR_tlv_any ifpresent /* Echo control information, O, len=3 */ +} ifpresent; + +template PRI_OPTIONAL_PARAMS mw_PRI_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Pre-release information message (PRI) with 'any'-optional parameters */ +{ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + optionalForwardCallIndicators := mw_OFCI_PAR_tlv_any ifpresent, /* Optional forward call indicators, O, len=3 */ + optionalBackwardCallIndicators := mw_OBCI_PAR_tlv_any ifpresent, /* Optional backward call indicators, O, len=3 */ + applicationTransportParameter1 := mw_APP_PAR_tlv_any ifpresent, /* Application transport parameter1, O, len=5-? */ + applicationTransportParameter2 := mw_APP_PAR_tlv_any ifpresent /* Application transport parameter2, O, len=5-? */ +} ifpresent; + +template REL_OPTIONAL_PARAMS mw_REL_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Release message (REL) with 'any'-optional parameters */ +{ + redirectionInformation := mw_RDI_PAR_tlv_any ifpresent, /* Redirection information, O, len=3-4 */ + redirectionNumber := mw_RNN_PAR_tlv_any ifpresent, /* Redirection number, O, len=5-? */ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + signallingPointCode := mw_SPC_PAR_tlv_any ifpresent, /* Signalling point code, O, len=4 */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + automaticCongestionLevel := mw_ACL_PAR_tlv_any ifpresent, /* Automatic congestion level, O, len=3 */ + networkSpecificFacility := mw_NSF_PAR_tlv_any ifpresent, /* Network specific facility, O, len=4-? */ + accessDeliveryInformation := mw_ADI_PAR_tlv_any ifpresent, /* Access delivery information, O, len=3 */ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent, /* Parameter compatibility information, O, len=4-? */ + userToUserIndicators := mw_UUID_PAR_tlv_any ifpresent, /* User-to-user indicators, O, len=3 */ + displayInformation := mw_DIF_PAR_tlv_any ifpresent, /* Display information, O, len=3-? */ + remoteOperations := mw_ROP_PAR_tlv_any ifpresent, /* Remote operations, O, len=8-? */ + hTRInformation := mw_HTRI_PAR_tlv_any ifpresent, /* HTR information, O, len=4-? */ + redirectCounter := mw_RCN_PAR_tlv_any ifpresent, /* Redirect counter, O, len=3 */ + redirectBackwardInformation := mw_RBI_PAR_tlv_any ifpresent /* Redirect backward information, O, len=3-? */ +} ifpresent; + +template RES_OPTIONAL_PARAMS mw_RES_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Resume message (RES) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template RLC_OPTIONAL_PARAMS mw_RLC_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Release complete message (RLC) with 'any'-optional parameters */ +{ + causeIndicators := mw_CAUI_PAR_tlv_any ifpresent /* Cause indicators, O, len=5-6 */ +} ifpresent; + +template SDN_OPTIONAL_PARAMS mw_SDN_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Subsequent Directory Number message (SDN) with 'any'-optional parameters */ +{ + subsequentNumber := mw_SNN_PAR_tlv_any ifpresent, /* Subsequent number, O, len=4-? */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent /* Message compatibility information, O, len=4-? */ +} ifpresent; + +template SEG_OPTIONAL_PARAMS mw_SEG_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Segmentation message (SEG) with 'any'-optional parameters */ +{ + accessTransport := mw_ATP_PAR_tlv_any ifpresent, /* Access transport, O, len=3-? */ + userToUserInformation := mw_UUIF_PAR_tlv_any ifpresent, /* User-to-user information, O, len=3-131 */ + messageCompatibilityInformation := mw_MCI_PAR_tlv_any ifpresent, /* Message compatibility information, O, len=3-? */ + genericDigits1 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits1, O, len=4-? */ + genericDigits2 := mw_GDG_PAR_tlv_any ifpresent, /* Generic digits2, O, len=4-? */ + genericNotificationIndicator1 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator1, O, len=3 */ + genericNotificationIndicator2 := mw_GNI_PAR_tlv_any ifpresent, /* Generic notification indicator2, O, len=3 */ + genericNumber1 := mw_GNU_PAR_tlv_any ifpresent, /* Generic number1, O, len=5-? */ + genericNumber2 := mw_GNU_PAR_tlv_any ifpresent /* Generic number2, O, len=5-? */ +} ifpresent; + +template SUS_OPTIONAL_PARAMS mw_SUS_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of Suspend message (SUS) with 'any'-optional parameters */ +{ + callReference := mw_CRF_PAR_tlv_any ifpresent /* Call reference, O, len=7 */ +} ifpresent; + +template UPT_OPTIONAL_PARAMS mw_UPT_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User Part test message (UPT) with 'any'-optional parameters */ +{ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template UPA_OPTIONAL_PARAMS mw_UPA_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User Part available message (UPA) with 'any'-optional parameters */ +{ + parameterCompatibilityInformation := mw_PCI_PAR_tlv_any ifpresent /* Parameter compatibility information, O, len=4-? */ +} ifpresent; + +template UUI_OPTIONAL_PARAMS mw_UUI_OPTIONAL_PARAMS_any := +/* RX template for SET: optional parameters of User-to-user information message (UUI) with 'any'-optional parameters */ +{ + accessTransport := mw_ATP_PAR_tlv_any ifpresent /* Access transport, O, len=3-? */ +} ifpresent; +} /* end group OptionalParameterListAny */ + +group ParametersAnyValue { +template ACL_PAR_tlv mw_ACL_PAR_tlv_any := +/* Default RX template for type ACL_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100111'B, /* Parameter Type '00100111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + automaticCongestionLevel := ? /* Automatic congestion level */ +} + +template ADI_PAR_tlv mw_ADI_PAR_tlv_any := +/* Default RX template for type ADI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101110'B, /* Parameter Type '00101110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + accessDeliveryIndicator := ?, /* bit A: Access delivery indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template APP_PAR_tlv mw_APP_PAR_tlv_any := +/* Default RX template for type APP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111000'B, /* Parameter Type '01111000'B */ + paramLen := ?, /* Parameter Length field */ + applicationContextIdentifier_lsb := ?, /* Application context identifier, least significant bits */ + ext1 := ?, /* Extension */ + applicationContextIdentifier_msb := ?, /* Application context identifier, most significant bits; optional */ + ext1a := ?, /* Extension */ + releaseCallIndicator := ?, /* bit 1: Release call indicator (RCI) */ + sendNotificationIndicator := ?, /* bit 2: Send notification indicator (SNI) */ + spare := '00000'B, /* spare */ + ext2 := ?, /* Extension */ + aPMSegmentationIndicator := ?, /* d: APM segmentation indicator */ + sequenceIndicator := ?, /* E: Sequence indicator (SI) */ + ext3 := ?, /* Extension */ + segmentationLocalReference := ?, /* f: Segmentation local reference (SLR) */ + ext3a := ?, /* Extension */ + aPMUserInformation := ? /* APM User Information */ +} + +template ARR_PAR_tlv mw_ARR_PAR_tlv_any := +/* Default RX template for type ARR_PAR_tlv with 'any' template values for structured types, and wildcards for simple types */ +{ + paramType := '10010110'B, /* Parameter Type '10010110'B */ + paramLen := '00000010'B, /* Parameter Length field */ + reRoutingCounter := ?, /* Re-routing counter */ + reRoutingInhibitIndicator := ?, /* Re-routing inhibit indicator */ + ext1 := ?, /* Extension */ + aRR_Octet1a := { + reRoutingReason := ?, /* Re-routing reason */ + ext1a := ? /* Extension */ + } ifpresent +} + +template BGV_PAR_tlv mw_BGV_PAR_tlv_any := +/* Default RX template for type BGV_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001101'B, /* Parameter Type '01001101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + terminatingAccessIndicator := ?, /* bits B A: Terminating access indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator: as for 3.25 a). */ +} + +template CAM_PAR_tlv mw_CAM_PAR_tlv_any := +/* Default RX template for type CAM_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100101'B, /* Parameter Type '00100101'B */ + paramLen := '00000101'B, /* Parameter Length field */ + mapType := ?, /* Map type */ + spare := '00'B, /* spare */ + mappingBits := ? /* mapping bits */ +} + +template CCRQ_PAR_tlv mw_CCRQ_PAR_tlv_any := +/* Default RX template for type CCRQ_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111001'B, /* Parameter Type '01111001'B */ + paramLen := '00000001'B, /* Parameter Length field */ + collectCallRequestIndicator := ?, /* bit A: Collect call request indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CCSS_PAR_tlv mw_CCSS_PAR_tlv_any := +/* Default RX template for type CCSS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001011'B, /* Parameter Type '01001011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + cCSSCallIndicator := ?, /* bit A: CCSS call indicator */ + spare := '0000000'B /* bits H-B: spare */ +} + +template CDIN_PAR_tlv mw_CDIN_PAR_tlv_any := +/* Default RX template for type CDIN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111101'B, /* Parameter Type '01111101'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := ? /* address signals */ +} + +template CDTI_PAR_tlv mw_CDTI_PAR_tlv_any := +/* Default RX template for type CDTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01101110'B, /* Parameter Type '01101110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callToBeDivertedIndicator := ?, /* bits BA: Call to be diverted indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CGC_PAR_tlv mw_CGC_PAR_tlv_any := +/* Default RX template for type CGC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001001'B, /* Parameter Type '00110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callingPartysCategory := ? /* Calling party's category */ +} + +template CGL_PAR_tlv mw_CGL_PAR_tlv_any := +/* Default RX template for type CGL_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000001'B, /* Parameter Type '10000001'B */ + paramLen := ?, /* Parameter Length field */ + screeningIndicator := ?, /* b) Screening indicator */ + locationPresRestrIndicator := ?, /* a) Location presentation restricted indicator */ + spare := '0000'B, /* spare */ + typeOfShape := ?, /* Type of shape */ + ext := ?, /* Extension */ + shapeDescription := ? /* Shape description */ +} + +template CHI_PAR_tlv mw_CHI_PAR_tlv_any := +/* Default RX template for type CHI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101101'B, /* Parameter Type '00101101'B */ + paramLen := '00000010'B, /* Parameter Length field */ + propagationDelayValue := ? /* Propagation delay value */ +} + +template CIN_PAR_tlv mw_CIN_PAR_tlv_any := +/* Default RX template for type CIN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01101111'B, /* Parameter Type '01101111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template COTI_PAR_tlv mw_COTI_PAR_tlv_any := +/* Default RX template for type COTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110000'B, /* Parameter Type '01110000'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callToBeOfferedIndicator := ?, /* bits BA: Call to be offered indicator */ + spare := '000000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CRF_PAR_tlv mw_CRF_PAR_tlv_any := +/* Default RX template for type CRF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00000001'B, /* Parameter Type '00000001'B */ + paramLen := '00000101'B, /* Parameter Length field */ + callIdentity := ?, /* Call identity */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template CRI_PAR_tlv mw_CRI_PAR_tlv_any := +/* Default RX template for type CRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01100101'B, /* Parameter Type '01100101'B */ + paramLen := ?, /* Parameter Length field */ + correlationId := ? /* Correlation id */ +} + +template CRQ_PAR_tlv mw_CRQ_PAR_tlv_any := +/* Default RX template for type CRQ_PAR_tlv with wildcards for simple types */ +{ + paramType := '00001101'B, /* Parameter Type '00001101'B */ + paramLen := ?, /* Parameter Length field */ + localReference := ?, /* Local reference */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B, /* spare */ + protocolClass := *, /* Protocol class */ + credit := * /* Credit */ +} + +template CSI_PAR_lv mw_CSI_PAR_lv_any := +/* Default RX template for type CSI_PAR_lv with wildcards for simple types */ +{ + paramLen := ?, /* Parameter Length field */ + //circuitIndicators := superset({mw_CircuitIndicator_any}) + circuitIndicators := {*, mw_CircuitIndicator_any} +} + +template CTI_PAR_tlv mw_CTI_PAR_tlv_any := +/* Default RX template for type CTI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110010'B, /* Parameter Type '01110010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + conferenceAcceptanceIndicator := ?, /* bits BA: Conference acceptance indicator (Note) */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template CTN_PAR_tlv mw_CTN_PAR_tlv_any := +/* Default RX template for type CTN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000101'B, /* Parameter Type '01000101'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template CTR_PAR_tlv mw_CTR_PAR_tlv_any := +/* Default RX template for type CTR_PAR_tlv with wildcards for simple types */ +{ + paramType := '01000011'B, /* Parameter Type '01000011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + callTransferIdentity := ? /* Call transfer identity */ +} + +template DIF_PAR_tlv mw_DIF_PAR_tlv_any := +/* Default RX template for type DIF_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110011'B, /* Parameter Type '01110011'B */ + paramLen := ?, /* Parameter Length field */ + displayInformation := ? /* Display information */ +} + +template ECI_PAR_tlv mw_ECI_PAR_tlv_any := +/* Default RX template for type ECI_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110111'B, /* Parameter Type '00110111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + outgECDeviceInfoInd := ?, /* bits BA: Outgoing echo control device information indicator */ + incECDeviceInfoInd := ?, /* bits DC: Incoming echo control device information indicator */ + outgECDeviceReqInd := ?, /* bits FE : Outgoing echo control device request indicator */ + IncECDeviceReqInd := ? /* bits HG: Incoming echo control device request indicator */ +} + +template FGVNS_PAR_tlv mw_FGVNS_PAR_tlv_any := +/* Default RX template for type FGVNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001100'B, /* Parameter Type '01001100'B */ + paramLen := ?, /* Parameter Length field */ + fGVNSContents := ? +} + +template GDG_PAR_tlv mw_GDG_PAR_tlv_any := +/* Default RX template for type GDG_PAR_tlv with wildcards for simple types */ +{ + paramType := '11000001'B, /* Parameter Type '11000001'B */ + paramLen := ?, /* Parameter Length field */ + typeOfDigits := ?, /* Encoding scheme Type of digits */ + encodingScheme := ?, /* Encoding scheme Type of digits */ + digits := ? /* Digits */ +} + +template HTRI_PAR_tlv mw_HTRI_PAR_tlv_any := +/* Default RX template for type HTRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000010'B, /* Parameter Type '10000010'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '0000'B, /* spare */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template LON_PAR_tlv mw_LON_PAR_tlv_any := +/* Default RX template for type LON_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111111'B, /* Parameter Type '00111111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + screeningIndicator := ?, /* Screening indicator */ + addrPresRestrInd := ?, /* Address presentation restricted indicator (NOTE ) */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + iNN := ?, /* Internal Network Number indicator */ + addressSignals := * /* address signals */ +} + +template MLPP_PAR_tlv mw_MLPP_PAR_tlv_any := +/* Default RX template for type MLPP_PAR_tlv with wildcards for simple types */ +{ + paramType := '00111010'B, /* Parameter Type '00111010'B */ + paramLen := '00000110'B, /* Parameter Length field */ + precedenceLevel := ?, /* Precedence level */ + spare1 := '0'B, /* spare */ + lFB := ?, /* LFB (look ahead for busy) */ + spare2 := '0'B, /* spare */ + networkIdentity := ?, /* Network Identity (NI) octet 2 and 3 */ + mLppServiceDomain := ? /* MLPP service domain */ +} + +template NMC_PAR_tlv mw_NMC_PAR_tlv_any := +/* Default RX template for type NMC_PAR_tlv with wildcards for simple types */ +{ + paramType := '01011011'B, /* Parameter Type '01011011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + temporaryAlternativeRouting := ?, /* bit A: Temporary Alternative Routing (TAR) indicator */ + spare := '000000'B, /* bits G-B: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template NPFI_PAR_tlv mw_NPFI_PAR_tlv_any := +/* Default RX template for type NPFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001101'B, /* Parameter Type '10001101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + numberPortabilityStatusIndicator := ?, /* a) bits DCBA: Number portability status indicator */ + spare := '000'B, /* b) bits GFE: spare */ + ext := ? /* c) bit H: Extension indicator */ +} + +template NRN_PAR_tlv mw_NRN_PAR_tlv_any := +/* Default RX template for type NRN_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000100'B, /* Parameter Type '10000100'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + numberingPlanIdentifier := ?, /* Numbering Plan Identifier */ + oddEven := ?, /* O/E */ + addressSignals := ? /* address signals */ +} + +template NSF_PAR_tlv mw_NSF_PAR_tlv_any := +/* Default RX template for type NSF_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101111'B, /* Parameter Type '00101111'B */ + paramLen := ?, /* Parameter Length field */ + networkSpecific := ? /* Network identification */ +} + +template OCI_PAR_tlv mw_OCI_PAR_tlv_any := +/* Default RX template for type OCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111111'B, /* Parameter Type '01111111'B */ + paramLen := ?, /* Parameter Length field */ + natureOfAddressIndicator := ?, /* Nature of address indicator */ + oddEven := ?, /* O/E */ + spare1 := '00'B, /* spare */ + addrPresRestrInd := ?, /* Address presentation restricted indicator */ + numberingPlanIndicator := ?, /* Numbering plan indicator */ + spare2 := '0'B, /* spare */ + addressSignals := ? /* address signals */ +} + +template OIPC_PAR_tlv mw_OIPC_PAR_tlv_any := +/* Default RX template for type OIPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00101011'B, /* Parameter Type '00101011'B */ + paramLen := '00000010'B, /* Parameter Length field */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template PDC_PAR_tlv mw_PDC_PAR_tlv_any := +/* Default RX template for type PDC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110001'B, /* Parameter Type '00110001'B */ + paramLen := '00000010'B, /* Parameter Length field */ + propagationDelayValue := ? /* Propagation delay value */ +} + +template PICN_PAR_tlv mw_PICN_PAR_tlv_any := +/* Default RX template for type PICN_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000111'B, /* Parameter Type '10000111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotCounter := ?, /* bits EDCBA: Pivot counter */ + spare := '000'B /* bits HGF: spare */ +} + +template PICP_PAR_tlv mw_PICP_PAR_tlv_any := +/* Default RX template for type PICP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111011'B, /* Parameter Type '01111011'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotPossibleIndicator := ?, /* bits CBA: Pivot possible indicator */ + spare := '000'B, /* bits FED: spare */ + interwToRedirectionIndicator := ?, /* bit G: Interworking to redirection indicator (national use) */ + ext := ? /* bit H: Extension indicator */ +} + +template PRBI_PAR_tlv mw_PRBI_PAR_tlv_any := +/* Default RX template for type PRBI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001001'B, /* Parameter Type '10001001'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Backward := ? /* information types */ +} + +template PRFI_PAR_tlv mw_PRFI_PAR_tlv_any := +/* Default RX template for type PRFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001000'B, /* Parameter Type '10001000'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Forward := ? /* information types */ +} + +template PRI_PAR_tlv mw_PRI_PAR_tlv_any := +/* Default RX template for type PRI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01111100'B, /* Parameter Type '01111100'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotRoutingIndicators := ?, /* bits G F E D C B A: Pivot routing indicators */ + ext := ? /* bit H: Extension indicator */ +} + +template PST_PAR_tlv mw_PST_PAR_tlv_any := +/* Default RX template for type PST_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000110'B, /* Parameter Type '10000110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + pivotStatusIndicator := ?, /* bits BA: Pivot status indicator */ + spare := '00000'B, /* bits GFEDC: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template QRC_PAR_tlv mw_QRC_PAR_tlv_any := +/* Default RX template for type QRC_PAR_tlv with wildcards for simple types */ +{ + paramType := '10000101'B, /* Parameter Type '10000101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + qoRCapabilityIndicator := ?, /* bit A: QoR capability indicator */ + spare := '000000'B, /* bits G-B: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template RBI_PAR_tlv mw_RBI_PAR_tlv_any := +/* Default RX template for type RBI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001100'B, /* Parameter Type '10001100'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Backward := ? /* information types */ +} + +template RCN_PAR_tlv mw_RCN_PAR_tlv_any := +/* Default RX template for type RCN_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110111'B, /* Parameter Type '01110111'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectCounter := ?, /* bits EDCBA: Redirect counter */ + spare := '000'B /* bits HGF: spare */ +} + +template RCP_PAR_tlv mw_RCP_PAR_tlv_any := +/* Default RX template for type RCP_PAR_tlv with wildcards for simple types */ +{ + paramType := '01001110'B, /* Parameter Type '01001110'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectPossibleIndicator := ?, /* bits CBA: Redirect possible indicator */ + spare := '0000'B, /* bits GFED: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template RFI_PAR_tlv mw_RFI_PAR_tlv_any := +/* Default RX template for type RFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001011'B, /* Parameter Type '10001011'B */ + paramLen := ?, /* Parameter Length field */ + informationTypes_Forward := ? /* information types */ +} + +template RST_PAR_tlv mw_RST_PAR_tlv_any := +/* Default RX template for type RST_PAR_tlv with wildcards for simple types */ +{ + paramType := '10001010'B, /* Parameter Type '10001010'B */ + paramLen := '00000001'B, /* Parameter Length field */ + redirectStatusIndicator := ?, /* bits BA: Redirect status indicator */ + spare := '00000'B, /* bits GFEDC: spare */ + ext := ? /* bit H: Extension indicator */ +} + +template SAC_PAR_tlv mw_SAC_PAR_tlv_any := +/* Default RX template for type SAC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00110011'B, /* Parameter Type '00110011'B */ + paramLen := ?, /* Parameter Length field */ + featureCodes := ? /* Feature codes */ +} + +template SCFI_PAR_tlv mw_SCFI_PAR_tlv_any := +/* Default RX template for type SCFI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01100110'B, /* Parameter Type '01100110'B */ + paramLen := ?, /* Parameter Length field */ + sCFId := ? /* SCF id */ +} + +template SPC_PAR_tlv mw_SPC_PAR_tlv_any := +/* Default RX template for type SPC_PAR_tlv with wildcards for simple types */ +{ + paramType := '00011110'B, /* Parameter Type '00011110'B */ + paramLen := '00000010'B, /* Parameter Length field */ + signallingPointCode := ?, /* Signalling point code */ + spare := '00'B /* spare */ +} + +template TNS_PAR_tlv mw_TNS_PAR_tlv_any := +/* Default RX template for type TNS_PAR_tlv with wildcards for simple types */ +{ + paramType := '00100011'B, /* Parameter Type '00100011'B */ + paramLen := ?, /* Parameter Length field */ + networkIdentificationPlan := ?, /* Network identification plan */ + typeOfNetworkIdentification := ?, /* Type of network identification */ + oddEven := ?, /* O/E */ + networkIdentification := ? /* Network identification */ +} + +template UCI_PAR_tlv mw_UCI_PAR_tlv_any := +/* Default RX template for type UCI_PAR_tlv with wildcards for simple types */ +{ + paramType := '01110101'B, /* Parameter Type '01110101'B */ + paramLen := '00000001'B, /* Parameter Length field */ + througConnectionIndicator := ?, /* bit A: Through-connection indicator */ + t9TimerIndicator := ?, /* bit B: T9 timer indicator */ + spare := '00000'B, /* bits G-C: spare */ + ext := ? /* bit H: Extension indicator */ +} +} /* end group ParametersAnyValue */ +} /* end group Parameter */ +} /* end Module SipIsup_ISUP_ParamTemplates */ + diff --git a/IsupAts/SipIsup_ISUP_ParamTypes.ttcn b/IsupAts/SipIsup_ISUP_ParamTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bcd95f1d8c5d5157171154f0bfaa22c36c23db89 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_ParamTypes.ttcn @@ -0,0 +1,1777 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides ISUP/BICC-parameter type declarations. +*/ +module SipIsup_ISUP_ParamTypes{ + +import from LibCommon_BasicTypesAndValues all; +import from LibCommon_DataStrings all; +import from LibCommon_TextStrings all; + +group VariableLengthOctetstrings { +type octetstring Oct1to2 length(1..2) with {encode "1 to 2 bytes"}; +type octetstring Oct0to4 length(0..4) with {encode "0 to 4 bytes"}; +type octetstring Oct0to8 length(0..8) with {encode "0 to 8 bytes"}; +type octetstring Oct0to9 length(0..9) with {encode "0 to 9 bytes"}; +} /* end group VariableLengthOctetstrings */ + +group MessageHeader { +type octetstring CallInstanceCode length(4); + +type record CircuitIdentityCode +{ + Bit12 cicv, /* cic code value */ + Bit4 spare /* Spare field */ +} + +type record RoutingLabel +{ + Bit14 dpc, /* destination point code */ + Bit14 opc, /* origination point code */ + Bit4 sls /* Signalling link selection */ +} + +type record ServiceIndicatorOctet +{ + Bit4 userPartIdentification, /* User part identification, '5'H for ISUP */ + Bit2 spare, /* Spare */ + Bit2 networkIndicator /* Network indicator */ +} +} /* end group MessageHeader */ + +group Parameter { +type record ACL_PAR_tlv /* Automatic congestion level parameter (ACL); Optional(O) format. */ +{ + Bit8 paramType ('00100111'B), /* Parameter Type '00100111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 automaticCongestionLevel /* Automatic congestion level */ +} +with { encode "present=bytes(1,0x27)" } + +type record ADI_PAR_tlv /* Access delivery information parameter (ADI); Optional(O) format. */ +{ + Bit8 paramType ('00101110'B), /* Parameter Type '00101110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 accessDeliveryIndicator, /* bit A: Access delivery indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x2E)"; } + +group APP { +type record APP_PAR_tlv /* Application transport parameter parameter (APP); Optional(O) format. */ +{ + Bit8 paramType ('01111000'B), /* Parameter Type '01111000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 applicationContextIdentifier_lsb, /* Application context identifier, least significant bits */ + Bit1 ext1, /* Extension */ + Bit7 applicationContextIdentifier_msb, /* Application context identifier, most significant bits; optional */ + Bit1 ext1a, /* Extension */ + Bit1 releaseCallIndicator, /* bit 1: Release call indicator (RCI) */ + Bit1 sendNotificationIndicator, /* bit 2: Send notification indicator (SNI) */ + Bit5 spare, /* spare */ + Bit1 ext2, /* Extension */ + Bit6 aPMSegmentationIndicator, /* d: APM segmentation indicator */ + Bit1 sequenceIndicator, /* E: Sequence indicator (SI) */ + Bit1 ext3, /* Extension */ + Bit7 segmentationLocalReference, /* f: Segmentation local reference (SLR) */ + Bit1 ext3a, /* Extension */ + APMUserInformation aPMUserInformation /* APM User Information */ +} +with { encode "present=bytes(1,0x78)"; + encode (paramLen) "tag=""APP_paramLen"";"; + encode (aPMUserInformation) "length=valueOf(getTag(""APP_paramLen"")).toInt()-5;"; } + + /* Start auxiliary types for application transport parameter parameter (APP) */ +type record Address +{ + Bit8 addressLen, /* Address Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode (addressLen) "tag=""AdrLen"";"; + encode (addressSignals) "length=valueOf(getTag(""AdrLen"")).toInt()-2;"; } + +type octetstring APMUserInformation_g1; /* used APM'98'-user application */ + +type record APMUserInformation_g2 /* used APM'2000'-user application */ +{ + Address originatingAddress, + Address destinationAddress, + octetstring encapsulatedApplicationInformation +} + +type union APMUserInformation +{ + APMUserInformation_g1 aPMUserInformation_g1, + APMUserInformation_g2 aPMUserInformation_g2 +} +/* End auxiliary types for application transport parameter parameter (APP) */ +} /* end group APP */ + +group ARR { +type record ARR_PAR_tlv /* Automatic re-routing parameter (ARR); Optional(O) format. */ +{ + Bit8 paramType ('10010110'B), /* Parameter Type '10010110'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit6 reRoutingCounter, /* Re-routing counter */ + Bit1 reRoutingInhibitIndicator, /* Re-routing inhibit indicator */ + Bit1 ext1, /* Extension */ + ARR_Octet1a aRR_Octet1a optional /* Octet 1a */ +} +with { encode "present=bytes(1,0x96)"; } + +/* Start auxiliary types for automatic re-routing parameter (ARR) */ +type record ARR_Octet1a +{ + Bit7 reRoutingReason, /* Re-routing reason */ + Bit1 ext1a /* Extension */ +} +/* End auxiliary types for automatic re-routing parameter (ARR) */ +} /* group ARR */ + +group ATP { +type record ATP_PAR_tlv /* Access transport parameter (ATP); Optional(O) format. */ +{ + Bit8 paramType ('00000011'B), /* Parameter Type '00000011'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationElements informationElements /* Q.931 information elements */ +} +with { encode "present=bytes(1,0x03)"; + encode (paramLen) "tag=""ATP_paramLen"";"; + encode (informationElements) "length=valueOf(getTag(""ATP_paramLen"")).toInt();"; } + +/* start auxiliary types for access transport parameter (ATP) */ +type set of BearerCapability BearerCapabilities; + +type record BearerCapability /* Q.931 Bearer Capability information element */ +{ + Bit8 iEType ('00000100'B), /* Information Element Type '00000100'B */ + Bit8 iELen, /* Information Element Length field */ + BCAP_octet3 bCAP_octet3, + BCAP_octet4 bCAP_octet4, + BCAP_octet5 bCAP_octet5 optional, + BCAP_octet6 bCAP_octet6 optional, + BCAP_octet7 bCAP_octet7 optional +} + +type record BCAP_octet3 +{ + Bit5 informationTransferCapability, /* Information transfer capability */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet4 +{ + Bit5 informationTransferRate, /* Information transfer rate */ + Bit2 transferMode, /* Transfer mode */ + Bit1 ext, /* Extension */ + Bit8 rateMultiplier optional /* Rate multiplier */ +} + +type record BCAP_octet5 +{ + Bit5 userInformationLayer1Protocol, /* User information Layer 1 protocol */ + Bit2 layerIdentification ('01'B), /* Layer identification */ + Bit1 ext, /* Extension */ + BCAP_octet5a bCAP_octet5a optional, + BCAP_octet5b1 bCAP_octet5b1 optional, + BCAP_octet5b2 bCAP_octet5b2 optional, + BCAP_octet5c bCAP_octet5c optional, + BCAP_octet5d bCAP_octet5d optional +} + +type record BCAP_octet5a +{ + Bit5 userRate, /* User rate */ + Bit1 negot, /* Negotiation */ + Bit1 synch_asynch, /* Synchronous/asynchronous */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5b1 +{ + Bit1 spare, /* Spare */ + Bit1 flowControlOnRx, /* Flow control on reception (Rx) */ + Bit1 flowControlOnTx, /* Flow control on transmission (Tx) */ + Bit1 nICOnRx, /* Network independent Clock (NIC) on reception (Rx) */ + Bit1 nICOnTx, /* Network independent Clock (NIC) on transmission (Tx) */ + Bit2 intermediateRate, /* Intermediate rate */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5b2 +{ + Bit1 spare, /* Spare */ + Bit1 inbandOutbandNegotiation, /* In-band/out-band negotiation */ + Bit1 assignorAssignee, /* Assignor/assignee */ + Bit1 lLINegotiation, /* Logical link identifier negotiation */ + Bit1 mode, /* Mode of operation */ + Bit1 multiFrameSupport, /* Multiple frame establishment support in data link */ + Bit1 hdrNoHdr, /* rate addaption header/no header */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5c +{ + Bit3 parity, /* Parity information */ + Bit2 numberOfDataBits, /* Number of data bits excluding parity bit if present*/ + Bit2 numberOfStopBits, /* Number of stop bits */ + Bit1 ext /* Extension */ +} + +type record BCAP_octet5d +{ + Bit6 modemType, /* Modem type */ + Bit1 duplexMode, /* Duplex mode*/ + Bit1 ext /* Extension */ +} + +type record BCAP_octet6 +{ + Bit5 userInformationLayer2Protocol, /* User information Layer 2 protocol */ + Bit2 layerIdentification ('10'B), /* Layer identification */ + Bit1 ext ('1'B) /* Extension */ +} + +type record BCAP_octet7 +{ + Bit5 userInformationLayer3Protocol, /* User information Layer 3 protocol */ + Bit2 layerIdentification ('11'B), /* Layer identification */ + Bit1 ext ('1'B) /* Extension */ +} + +type set of HighLayerCompatibility HighLayerCompatibilities; + +type record HighLayerCompatibility /* Q.931 High Layer Compatibility information element */ +{ + Bit8 iEType ('01111101'B), /* Information Element Type '01111101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit2 presentation, /* Presentation */ + Bit3 interpretation, /* Interpretation */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext1, /* Extension */ + Bit7 highLayerCharacteristicsIdentification, /* High layer characteristics identification */ + Bit1 ext2, /* Extension */ + Bit7 extendedHighLayerCharacteristicsIdentification optional, /* Extended high layer characteristics identification */ + Bit1 ext3 optional, /* Extension */ + Bit7 extendedVideotelephonyCharacteristicsIdentification optional, /* Extended videotelephony characteristics identification */ + Bit1 ext4 optional /* Extension */ + } +with { encode "present=bytes(1,0x7D)" } + +type record LowLayerCompatibility { + Bit8 iEType ('01111100'B), /* Information Element Type '01111100'B */ + Bit8 iELen, /* Information Element Length field */ + LLC_octet3 lLC_octet3, + BCAP_octet4 lLC_octet4, + BCAP_octet5 lLC_octet5 optional, + LLC_octet6 lLC_octet6 optional, + LLC_octet7 lLC_octet7 optional +} +with { encode "present=bytes(1,0x7C)" } + +type record LLC_octet3 { + Bit5 informationTransferCapability, + Bit2 codingStandard, + Bit1 extension_3, + Bit6 spare6 ('000000'B) optional, + Bit1 negotiationIndicator optional, + Bit1 extension_3a optional +}; + +type record LLC_octet6a_user { + Bit7 userSpecifiedLayer2information, + Bit1 extension6a +}; + +type record LLC_octet6a_other { + Bit2 q933Use, + Bit3 spare6a ('000'B), + Bit2 modeOfOperation, + Bit1 extension6a, + Bit7 windowSize optional, + Bit1 extension6b optional +}; + +type union LLC_octet6a { + LLC_octet6a_user octet6a_user, + LLC_octet6a_other octet6a_other +}; + +type record LLC_octet6 { + Bit5 userInformationLayer2Protocol, + Bit2 layerId, + Bit1 extension6, + // OctET 6a-b: + LLC_octet6a octet6a optional +}; + +type record LLC_octet7a_user { + Bit7 userSpecifiedLayer3information, + Bit1 extension7a +}; + +type record LLC_octet7a_other { + Bit5 spare7a ('00000'B), + Bit2 modeOfOperation, + Bit1 extension7a, + Bit4 defaultPacketSize optional, + Bit3 spare7b ('000'B) optional, + Bit1 extension7b optional, + // OctET 7c: + Bit7 packetWindowSize optional, + Bit1 extension7c optional +}; + +type union LLC_octet7a { + LLC_octet7a_user octet7a_user, + LLC_octet7a_other octet7a_other +}; + +type record LLC_octet7 { + Bit5 userInformationLayer3Protocol, + Bit2 layerId ('11'B), + Bit1 extension7, + // OctET 7a: + LLC_octet7a octet7a optional +}; + + type record ProgressIndicator /* Q.931 Progress indicator information element */ +{ + Bit8 iEType ('00011110'B), /* Information Element Type '00011110'B */ + Bit8 iELen, /* Information Element Length field */ + Bit4 location, /* Location */ + Bit1 spare, /* Spare */ + Bit2 codingStandard, /* Coding Standard */ + Bit1 ext1, /* Extension */ + Bit7 progressDescription, /* Progress Description */ + Bit1 ext2 /* Extension */ +} +with { encode "present=bytes(1,0x1E)"; + encode (iELen) "tag=""PI_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""PI_iELen"")).toInt()-1;"; } + + type record CalledPartySubaddress /* Q.931 Called party subaddress information element */ +{ + Bit8 iEType ('01110001'B), /* Information Element Type '01110001'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x71)"; + encode (iELen) "tag=""CDPS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CDPS_iELen"")).toInt()-1;"; } + + type record CallingPartySubaddress /* Q.931 Calling party subaddress information element */ +{ + Bit8 iEType ('01101101'B), /* Information Element Type '01101101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x6D)"; + encode (iELen) "tag=""CGPS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CGPS_iELen"")).toInt()-1;"; } + +type record ConnectedSubaddress /* Q.931 Connected subaddress information element */ +{ + Bit8 iEType ('01001101'B), /* Information Element Type '01001101'B */ + Bit8 iELen, /* Information Element Length field */ + Bit3 spare, /* Spare */ + Bit1 oddEven, /* OE */ + Bit3 typeOfSubaddress, /* Type of Subaddress */ + Bit1 ext, /* Extension */ + octetstring subaddressInformation /* Subaddress Information */ +} +with { encode "present=bytes(1,0x4D)"; + encode (iELen) "tag=""CODS_iELen"";"; + encode (subaddressInformation) "length=valueOf(getTag(""CODS_iELen"")).toInt()-1;"; } + +type union InformationElements +{ + ISDN_IEs specificInformationElements, /* Used for BCAP, HLC, LLC, PI, CDPS, CGPS and CODS */ + octetstring anyInformationElements /* Used for receive templates */ +} + +type set ISDN_IEs +{ + BearerCapabilities bearerCapability optional, /* Q.931 Bearer Capability maybe repeated */ + HighLayerCompatibilities highLayerCompatibility optional, /* Q.931 High Layer Compatibility maybe repeated */ + LowLayerCompatibility lowLayerCompatibility optional, /* Q.931 Low Layer Compatibility */ + ProgressIndicator progressIndicator optional, /* Q.931 Progress Indicator */ + CalledPartySubaddress calledPartySubaddress optional, /* Q.931 Called Party Subaddress */ + CallingPartySubaddress callingPartySubaddress optional, /* Q.931 Calling Party Subaddress */ + ConnectedSubaddress connectedSubaddress optional /* Q.931 Connected Subaddress */ +} +/* end auxiliary types for access transport parameter (ATP) */ +} /* end group ATP */ + +type record BCI_PAR_v /* Backward call indicators parameter (BCI); Fixed(F) format. */ +{ + Bit2 chargeIndicator, /* bits BA : Charge indicator (Note 1) */ + Bit2 calledPartysStatusIndicator, /* bits DC : Called party's status indicator */ + Bit2 calledPartysCategoryIndicator, /* bits FE : Called party's category indicator */ + Bit2 end_to_endMethodIndicator, /* bits HG : End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit I: Interworking indicator (Note 2) */ + Bit1 end_to_endInformationIndicator, /* bit J: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit K: ISDN user part indicator (Note 2) */ + Bit1 holdingIndicator, /* bit L: Holding indicator (national use) */ + Bit1 iSDNAccessIndicator, /* bit M: ISDN access indicator */ + Bit1 echoControlDeviceIndicator, /* bit N: Echo control device indicator */ + Bit2 sCCPMethodIndicator /* bits PO: SCCP method indicator (Note 2) */ +} + +type record BCI_PAR_tlv /* Backward call indicators parameter (BCI); Optional(O) format. */ +{ + Bit8 paramType ('00010001'B), /* Parameter Type '00010001'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit2 chargeIndicator, /* bits BA : Charge indicator (Note 1) */ + Bit2 calledPartysStatusIndicator, /* bits DC : Called party's status indicator */ + Bit2 calledPartysCategoryIndicator, /* bits FE : Called party's category indicator */ + Bit2 end_to_endMethodIndicator, /* bits HG : End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit I: Interworking indicator (Note 2) */ + Bit1 end_to_endInformationIndicator, /* bit J: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit K: ISDN user part indicator (Note 2) */ + Bit1 holdingIndicator, /* bit L: Holding indicator (national use) */ + Bit1 iSDNAccessIndicator, /* bit M: ISDN access indicator */ + Bit1 echoControlDeviceIndicator, /* bit N: Echo control device indicator */ + Bit2 sCCPMethodIndicator /* bits PO: SCCP method indicator (Note 2) */ +} +with { encode "present=bytes(1,0x11)"; } + +type record BGV_PAR_tlv /* Backward GVNS parameter (BGV); Optional(O) format. */ +{ + Bit8 paramType ('01001101'B), /* Parameter Type '01001101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 terminatingAccessIndicator, /* bits B A: Terminating access indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator: as for 3.25 a). */ +} +with { encode "present=bytes(1,0x4D)"; } + +type record CAM_PAR_tlv /* Circuit assignment map parameter (CAM); Optional(O) format. */ +{ + Bit8 paramType ('00100101'B), /* Parameter Type '00100101'B */ + Bit8 paramLen ('00000101'B), /* Parameter Length field */ + Bit6 mapType, /* Map type */ + Bit2 spare, /* spare */ + Bit32 mappingBits /* mapping bits */ +} +with { encode "present=bytes(1,0x25)"; } + +type record CAUI_PAR_lv /* Cause indicators parameter (CAUI); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit4 location, /* location */ + Bit1 spare, /* spare */ + Bit2 codingStandard, /* codingStandard */ + Bit1 ext1, /* Extension */ + Bit7 causeValue, /* Cause value */ + Bit1 ext2, /* Extension */ + octetstring diagnostics optional /* Diagnostic(s) (if any) */ +} +with { encode (paramLen) "tag=""CAUI_paramLen"";"; + encode (diagnostics) "length=valueOf(getTag(""CAUI_paramLen"")).toInt()-2;"; } + +type record CAUI_PAR_tlv /* Cause indicators parameter (CAUI); Optional(O) format. */ +{ + Bit8 paramType ('00010010'B), /* Parameter Type '00010010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 location, /* location */ + Bit1 spare, /* spare */ + Bit2 codingStandard, /* codingStandard */ + Bit1 ext1, /* Extension */ + Bit7 causeValue, /* Cause value */ + Bit1 ext2, /* Extension */ + octetstring diagnostics optional /* Diagnostic(s) (if any) */ +} +with { encode "present=bytes(1,0x12)"; + encode (paramLen) "tag=""CAUI_paramLen"";"; + encode (diagnostics) "length=valueOf(getTag(""CAUI_paramLen"")).toInt()-2;"; } + +type record CCPI_PAR_tlv /* CCNR possible indicator parameter (CCPI); Optional(O) format. */ +{ + Bit8 paramType ('01111010'B), /* Parameter Type '01111010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 cCNRPossibleIndicator, /* bit A: CCNR possible indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x7A)"; } + +type record CCRQ_PAR_tlv /* Collect call request parameter (CCRQ); Optional(O) format. */ +{ + Bit8 paramType ('01111001'B), /* Parameter Type '01111001'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 collectCallRequestIndicator, /* bit A: Collect call request indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x79)"; } + +type record CCSS_PAR_tlv /* CCSS parameter (CCSS); Optional(O) format. */ +{ + Bit8 paramType ('01001011'B), /* Parameter Type '01001011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 cCSSCallIndicator, /* bit A: CCSS call indicator */ + Bit7 spare /* bits H-B: spare */ +} +with { encode "present=bytes(1,0x4B)"; } + +type record CDI_PAR_tlv /* Call diversion information parameter (CDI); Optional(O) format. */ +{ + Bit8 paramType ('00110110'B), /* Parameter Type '00110110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 notificationSubscriptionOptions, /* bits CBA: Notification subscription options */ + Bit4 redirectingReason, /* bits GFED: Redirecting reason */ + Bit1 spare /* bit H: spare */ +} +with { encode "present=bytes(1,0x36)"; } + +type record CDIN_PAR_tlv /* Called directory number parameter (CDIN); Optional(O) format. */ +{ + Bit8 paramType ('01111101'B), /* Parameter Type '01111101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x7D)"; + encode (paramLen) "tag=""CDIN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CDIN_paramLen"")).toInt()-2;"; } + +type record CDN_PAR_lv /* Called party number parameter (CDN); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* OE */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals /* address signals */ +} +with { encode (paramLen) "tag=""CDN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CDN_paramLen"")).toInt()-2;"; } + +type record CDTI_PAR_tlv /* Call diversion treatment indicators parameter (CDTI); Optional(O) format. */ +{ + Bit8 paramType ('01101110'B), /* Parameter Type '01101110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 callToBeDivertedIndicator, /* bits BA: Call to be diverted indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x6E)"; } + +type Bit8 CGC_PAR_v; /* Calling party's category parameter (CGC); Fixed(F) format. */ + +type record CGC_PAR_tlv /* Calling party's category parameter (CGC); Optional(O) format. */ +{ + Bit8 paramType ('00001001'B), /* Parameter Type '00110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 callingPartysCategory /* Calling party's category */ +} +with { encode "present=bytes(1,0x09)"; } + +group CGL { +type record CGL_PAR_tlv /* Calling geodetic location parameter (CGL); Optional(O) format. */ +{ + Bit8 paramType ('10000001'B), /* Parameter Type '10000001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit2 screeningIndicator, /* b) Screening indicator */ + Bit2 locationPresRestrIndicator, /* a) Location presentation restricted indicator */ + Bit4 spare, /* spare */ + Bit7 typeOfShape, /* Type of shape */ + Bit1 ext, /* Extension */ + ShapeDescription shapeDescription /* Shape description */ +} +with { encode "present=bytes(1,0x81)"; + encode (paramLen) "tag=""CGL_paramLen"";"; + encode (shapeDescription) "length=valueOf(getTag(""CGL_paramLen"")).toInt()-2;"; } + +/* Start auxiliary types for calling geodetic location parameter (CGL) */ +type record EllipsoidPointShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude /* Degrees of longitude */ +} + +type record EllipsoidPointWithUncertaintyShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 uncertaintyCode, /* Uncertainty code */ + Bit1 spare1, /* spare */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record PointWithAltitudeAndUncertaintyShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 uncertaintyCode1, /* Uncertainty code */ + Bit1 spare1, /* spare */ + Oct2 altitude, /* Altitude */ + Bit7 uncertaintyCode2, /* uncertainty code */ + Bit1 spare, /* spare */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record EllipseOnTheEllipsoidShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 majorRadius, /* Major radius */ + Bit1 spare1, /* spare */ + Bit7 minorRadius, /* Minor radius */ + Bit1 spare2, /* spare */ + Bit8 orientation, /* Orientation */ + Bit7 confidence, /* Confidence */ + Bit1 spare3 /* spare */ +} + +type record EllipsoidCircleSectorShapeDescription +{ + Oct3 degreesOfLatitude, /* Degrees of latitude */ + Oct3 degreesOfLongitude, /* Degrees of longitude */ + Bit7 radius, /* Radius */ + Bit1 spare1, /* spare */ + Bit8 offset, /* Offset */ + Bit8 includedAngle, /* Included angle */ + Bit7 confidence, /* Confidence */ + Bit1 spare2 /* spare */ +} + +type record PolygonShapeDescription +{ + Bit4 numberOfPoints, /* Number of points */ + Bit4 spare, /* spare */ + octetstring contents /* contents */ +} +with { encode (numberOfPoints) "tag=""numOfPoints"";"; + encode (contents) "length=valueOf(getTag(""numOfPoints"")).toInt()*6;"; } + +type union ShapeDescription +{ + EllipsoidPointShapeDescription ellipsoidPointShapeDescription, + EllipsoidPointWithUncertaintyShapeDescription ellipsoidPointWithUncertaintyShapeDescription, + PointWithAltitudeAndUncertaintyShapeDescription pointWithAltitudeAndUncertaintyShapeDescription, + EllipseOnTheEllipsoidShapeDescription ellipseOnTheEllipsoidShapeDescription, + EllipsoidCircleSectorShapeDescription ellipsoidCircleSectorShapeDescription, + PolygonShapeDescription polygonShapeDescription +} +/* End auxiliary types for calling geodetic location parameter (CGL) */ +} /* end group CGL */ + +type record CGN_PAR_tlv /* Calling party number parameter (CGN); Optional(O) format. */ +{ + Bit8 paramType ('00001010'B), /* Parameter Type '00001010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* OE */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 nII, /* NumberIncompleteIndicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0A)"; + encode (paramLen) "tag=""CGN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CGN_paramLen"")).toInt()-2;"; } + +type record CGSM_PAR_v /* Circuit group supervision message type parameter (CGSM); Fixed(F) format. */ +{ + Bit2 cgSupervMTypeIndicator, /* bits BA: Circuit group supervision message type indicator */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x15)"; } + +type record CHI_PAR_tlv /* Call history parameter (CHI); Optional(O) format. */ +{ + Bit8 paramType ('00101101'B), /* Parameter Type '00101101'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit16 propagationDelayValue /* Propagation delay value */ +} +with { encode "present=bytes(1,0x2D)"; } + +type record CIN_PAR_tlv /* Called IN number parameter (CIN); Optional(O) format. */ +{ + Bit8 paramType ('01101111'B), /* Parameter Type '01101111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x6F)"; + encode (paramLen) "tag=""CIN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CIN_paramLen"")).toInt()-2;"; } + +type record COI_PAR_v /* Continuity indicators parameter (COI); Fixed(F) format. */ +{ + Bit1 continuityIndicator, /* bit A: Continuity indicator */ + Bit7 spare /* bits H-B: spare */ +} + +type record COTI_PAR_tlv /* Call offering treatment indicators parameter (COTI); Optional(O) format. */ +{ + Bit8 paramType ('01110000'B), /* Parameter Type '01110000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 callToBeOfferedIndicator, /* bits BA: Call to be offered indicator */ + Bit6 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x70)"; } + +type record CPN_PAR_tlv /* Connected number parameter (CPN); Optional(O) format. */ +{ + Bit8 paramType ('00100001'B), /* Parameter Type '00100001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfaddressindicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE) */ + Bit3 numberingplanIndicator, /* Numberingplan indicator */ + Bit1 spare, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x21)"; + encode (paramLen) "tag=""CPN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CPN_paramLen"")).toInt()-2;"; } + +type record CRI_PAR_tlv /* Correlation id parameter (CRI); Optional(O) format. */ +{ + Bit8 paramType ('01100101'B), /* Parameter Type '01100101'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring correlationId /* Correlation id */ +} +with { encode "present=bytes(1,0x65)"; + encode (paramLen) "tag=""CRI_paramLen"";"; + encode (correlationId) "length=valueOf(getTag(""CRI_paramLen"")).toInt();"; } + +type record CRQ_PAR_tlv /* Connection request parameter (CRQ); Optional(O) format. */ +{ + Bit8 paramType ('00001101'B), /* Parameter Type '00001101'B */ + Bit8 paramLen, /* Parameter Length field */ + Oct3 localReference, /* Local reference */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare, /* spare */ + Bit8 protocolClass optional, /* Protocol class */ + Bit8 credit optional /* Credit */ +} +with { encode "present=bytes(1,0x0D)"; } + +type record CRF_PAR_tlv /* Call reference parameter (CRF); Optional(O) format. */ +{ + Bit8 paramType ('00000001'B), /* Parameter Type '00000001'B */ + Bit8 paramLen ('00000101'B), /* Parameter Length field */ + Bit24 callIdentity, /* Call identity */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x01)"; } + +group CSI { +type record CSI_PAR_lv /* Circuit state indicator parameter (CSI); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + CircuitIndicators circuitIndicators +} +with { encode (paramLen) "tag=""CSI_paramLen"";"; + encode (circuitIndicators) "length=valueOf(getTag(""CSI_paramLen"")).toInt();"; } + +/* start auxiliary types for circuit state indicator parameter (CSI) */ +type record CircuitIndicator +{ + Bit2 maintenanceBlockingState, /* bits BA: Maintenance blocking state */ + Bit2 callProcessingState, /* bits DC: Call processing state */ + Bit2 hardwareBlockingState, /* bits F E: Hardware blocking state (Note) */ + Bit2 spare /* bits H-G: spare */ +} + +type set of CircuitIndicator CircuitIndicators; +/* end auxiliary types for circuit state indicator parameter (CSI) */ +} /* end group CSI */ + +type record CTI_PAR_tlv /* Conference treatment indicators parameter (CTI); Optional(O) format. */ +{ + Bit8 paramType ('01110010'B), /* Parameter Type '01110010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 conferenceAcceptanceIndicator, /* bits BA: Conference acceptance indicator (Note) */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x72)"; } + +type record CTN_PAR_tlv /* Call transfer number parameter (CTN); Optional(O) format. */ +{ + Bit8 paramType ('01000101'B), /* Parameter Type '01000101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x45)"; + encode (paramLen) "tag=""CTN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""CTN_paramLen"")).toInt()-2;"; } + +type record CTR_PAR_tlv /* Call transfer reference parameter (CTR); Optional(O) format. */ +{ + Bit8 paramType ('01000011'B), /* Parameter Type '01000011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 callTransferIdentity /* Call transfer identity */ +} +with { encode "present=bytes(1,0x43)"; } + +type record CUGIC_PAR_tlv /* Closed user group interlock code parameter (CUGIC); Optional(O) format. */ +{ + Bit8 paramType ('00011010'B), /* Parameter Type '00011010'B */ + Bit8 paramLen ('00000100'B), /* Parameter Length field */ + Oct2 networkIdentity, /* a) Network Identity (NI) (octets 1 and 2) */ + Bit16 binaryCode /* Binary code */ +} +with { encode "present=bytes(1,0x1A)"; } + +type record DIF_PAR_tlv /* Display information parameter (DIF); Optional(O) format. */ +{ + Bit8 paramType ('01110011'B), /* Parameter Type '01110011'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring displayInformation /* Display information */ +} +with { encode "present=bytes(1,0x73)"; + encode (paramLen) "tag=""DIF_paramLen"";"; + encode (displayInformation) "length=valueOf(getTag(""DIF_paramLen"")).toInt();"; } + +type record ECI_PAR_tlv /* Echo control information parameter (ECI); Optional(O) format. */ +{ + Bit8 paramType ('00110111'B), /* Parameter Type '00110111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 outgECDeviceInfoInd, /* bits BA: Outgoing echo control device information indicator */ + Bit2 incECDeviceInfoInd, /* bits DC: Incoming echo control device information indicator */ + Bit2 outgECDeviceReqInd, /* bits FE : Outgoing echo control device request indicator */ + Bit2 IncECDeviceReqInd /* bits HG: Incoming echo control device request indicator */ +} +with { encode "present=bytes(1,0x37)"; } + +type record EIF_PAR_v /* Event information parameter (EIF); Fixed(F) format. */ +{ + Bit7 eventIndicator, /* bits G F E D C B A: Event indicator */ + Bit1 eventPresRestrInd /* bit H: Event presentation restricted indicator (national use) */ +} + +type Bit8 EOP ('00000000'B) with { encode "present=bytes(1,0x00)"; }; + +type Bit8 FAI_PAR_v; /* Facility indicator parameter (FAI); Fixed(F) format. */ + +type record FAI_PAR_tlv /* Facility indicator parameter (FAI); Optional(O) format. */ +{ + Bit8 paramType ('00011000'B), /* Parameter Type '00011000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 facilityIndicators /* Facility indicators */ +} +with { encode "present=bytes(1,0x18)"; } + +type record FCI_PAR_v /* Forward call indicators parameter (FCI); Fixed(F) format. */ +{ + Bit1 natInternatCallIndicator, /* bit A: National/international call indicator (Note 1) */ + Bit2 endToEndMethodIndicator, /* bits CB: End-to-end method indicator (Note 2) */ + Bit1 interworkingIndicator, /* bit D: Interworking indicator (Note 2) */ + Bit1 endToEndInfoIndicator, /* bit E: End-to-end information indicator (national use) (Note 2) */ + Bit1 iSDNUserPartIndicator, /* bit F: ISDN user part indicator (Note 2) */ + Bit2 iSDNUserPartPrefIndicator, /* bits HG: ISDN user part preference indicator */ + Bit1 iSDNAccessIndicator, /* bit I: ISDN access indicator */ + Bit2 sCCPMethodIndicator, /* bits KJ: SCCP method indicator (Note 2) */ + Bit1 spare, /* bit L: spare */ + Bit4 reserved /* bits P-M: reserved for national use */ +} + +group FGVNS { +type record FGVNS_PAR_tlv /* Forward GVNS parameter (FGVNS); Optional(O) format. */ +{ + Bit8 paramType ('01001100'B), /* Parameter Type '01001100'B */ + Bit8 paramLen, /* Parameter Length field */ + FGVNSContents fGVNSContents +} +with { encode "present=bytes(1,0x4C)"; + encode (paramLen) "tag=""FGVNS_paramLen"";"; + encode (fGVNSContents) "length=valueOf(getTag(""FGVNS_paramLen"")).toInt();"; } + +/* Start auxiliary types for forward GVNS parameter (FGVNS) */ +type record FGVNSContents +{ + OriginatingParticipatingServiceProvider originatingParticipatingServiceProvider, /* Originating participating service provider (OPSP) (Structured Type) */ + GVNSUserGroup gVNSUserGroup, /* GVNS user group (GUG) (Structured Type) */ + TerminatingNetworkRoutingNumber terminatingNetworkRoutingNumber /* Terminating network routing number (TNRN) (Structured Type) */ +} + +type record OriginatingParticipatingServiceProvider +{ + Bit4 oPSPLengthIndicator, /* OPSP length indicator */ + Bit3 spare, /* spare */ + Bit1 oddEven, /* O/E */ + Oct0to4 digits /* digits */ +} +with { encode (oPSPLengthIndicator) "tag=""OPSP_paramLen"";"; + encode (digits) "length=valueOf(getTag(""OPSP_paramLen"")).toInt();"; } + +type record GVNSUserGroup +{ + Bit4 gUGLengthIndicator, /* GUG length indicator */ + Bit3 spare, /* spare */ + Bit1 oddEven, /* O/E */ + Oct0to8 digits /* digits */ +} +with { encode (gUGLengthIndicator) "tag=""GUG_paramLen"";"; + encode (digits) "length=valueOf(getTag(""GUG_paramLen"")).toInt();"; } + +type record TerminatingNetworkRoutingNumber +{ + Bit4 tNRNLengthIndicator, /* TNRN length indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 oddEven, /* O/E */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 spare, /* spare */ + Oct0to9 digits /* digits */ +} +with { encode (tNRNLengthIndicator) "tag=""TNRN_paramLen"";"; + encode (digits) "length=valueOf(getTag(""TNRN_paramLen"")).toInt();"; } +/* End auxiliary types for forward GVNS parameter (FGVNS) */ +} /* end group FGVNS */ + +type record GDG_PAR_tlv /* Generic digits parameter (GDG); Optional(O) format. */ +{ + Bit8 paramType ('11000001'B), /* Parameter Type '11000001'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit5 typeOfDigits, /* Encoding scheme Type of digits */ + Bit3 encodingScheme, /* Encoding scheme Type of digits */ + Oct1to15 digits /* Digits */ +} +with { encode "present=bytes(1,0xC1)"; + encode (paramLen) "tag=""CDG_paramLen"";"; + encode (digits) "length=valueOf(getTag(""CDG_paramLen"")).toInt()-1;"; } + +type record GNI_PAR_tlv /* Generic notification indicator parameter (GNI); Optional(O) format. */ +{ + Bit8 paramType ('00101100'B), /* Parameter Type '00101100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit7 notificationIndicator, /* Notification indicator */ + Bit1 ext /* Extension */ +} +with { encode "present=bytes(1,0x2C)"; } + +type record GNU_PAR_tlv /* Generic number parameter (GNU); Optional(O) format. */ +{ + Bit8 paramType ('11000000'B), /* Parameter Type '11000000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit8 numberQualifierIndicator, /* Number qualifier indicator */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator (NOTE�1/21) */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator (NOTE�1/24) */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE�1/23) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator (NOTE�1/22) */ + Bit1 nI, /* Number incomplete indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0xC0)"; + encode (paramLen) "tag=""GNU_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""GNU_paramLen"")).toInt()-3;"; } + + +type record HPC_PAR_tlv /* Hop counter parameter (HPC); Optional(O) format. */ +{ + Bit8 paramType ('00111101'B), /* Parameter Type '00111101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 hopCounter, /* bits EDCBA: Hop counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x7D)"; } + +type record HTRI_PAR_tlv /* HTR information parameter (HTRI); Optional(O) format. */ +{ + Bit8 paramType ('10000010'B), /* Parameter Type '10000010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare1, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x82)"; + encode (paramLen) "tag=""HTRI_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""HTRI_paramLen"")).toInt()-2;"; } + +type record IID_PAR_v /* Information indicators parameter (IID); Fixed(F) format. */ +{ + Bit2 cliAddrResponseIndicator, /* bits BA: Calling party address response indicator */ + Bit1 holdProvidedIndicator, /* bit C: Hold provided indicator */ + Bit2 spare1, /* bits ED: spare */ + Bit1 cliCatRespIndicator, /* bit F: Calling party's category response indicator */ + Bit1 chargeInfoRespIndicator, /* bit G: Charge information response indicator */ + Bit1 solicitedInfoIndicator, /* bit H: Solicited information indicator */ + Bit4 spare2, /* bits L-I: spare */ + Bit4 reserved /* bits P-M: reserved */ +} + +type record IPRRB_IT /* Invoking pivot/redirect reason backward information type */ +{ + Bit8 informationTypeTag ('00000011'B), /* information type tag '00000011'B */ + Bit8 informationTypeLength ('00000001'B), /* information type length */ + Bit7 invokingReason, /* Invoking pivot/redirect reason */ + Bit1 ext /* Extension indicator */ +} +with { encode "present=bytes(1,0x03)"; } + +type record IPRRF_IT /* Invoking pivot/redirect reason forward information type */ +{ + Bit8 informationTypeTag ('00000100'B), /* information type tag '00000100'B */ + Bit8 informationTypeLength ('00000001'B), /* information type length */ + Bit7 invokingReason, /* Invoking pivot/redirect reason */ + Bit1 ext /* Extension indicator */ +} +with { encode "present=bytes(1,0x04)"; } + +type record IRI_PAR_v /* Information request indicators parameter (IRI); Fixed(F) format. */ +{ + Bit1 cliAddrRequestIndicator, /* bit A: Calling party address request indicator */ + Bit1 holdingIndicator, /* bit B: Holding indicator */ + Bit1 spare1, /* bit C: spare */ + Bit1 cliCatRequestIndicator, /* bit D: Calling party's category request indicator */ + Bit1 chargeInfoRequestIndicator, /* bit E: Charge information request indicator */ + Bit2 spare2, /* bits GF: spare */ + Bit1 maliciousCidReqIndicator, /* bit H: Malicious call identification request indicator (reserved, used in ISUP'88 Blue Book) */ + Bit4 spare3, /* bits L-I: spare */ + Bit4 reserved /* bits P-M: reserved */ +} + +type record LON_PAR_tlv /* Location number parameter (LON); Optional(O) format. */ +{ + Bit8 paramType ('00111111'B), /* Parameter Type '00111111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 screeningIndicator, /* Screening indicator */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator (NOTE ) */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x3F)"; + encode (paramLen) "tag=""LON_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""LON_paramLen"")).toInt()-2;"; } + +type record LPPI_PAR_tlv /* Loop prevention indicators parameter (LPPI); Optional(O) format. */ +{ + Bit8 paramType ('01000100'B), /* Parameter Type '01000100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 request_response, /* bit A: Type */ + Bit2 responseIndicator, /* bits C B: Response indicator (only if bit A equals to 1 (response), otherwise: spare) */ + Bit5 spare /* bits H-D: spare */ +} +with { encode "present=bytes(1,0x44)"; } + +group MCI { +type record MCI_PAR_tlv /* Message compatibility information parameter (MCI); Optional(O) format. */ +{ + Bit8 paramType ('00111000'B), /* Parameter Type '00111000'B */ + Bit8 paramLen, /* Parameter Length field */ + InstructionIndicators instructionIndicators +} +with { encode "present=bytes(1,0x38)"; + encode (paramLen) "tag=""MCI_paramLen"";"; + encode (instructionIndicators) "length=valueOf(getTag(""MCI_paramLen"")).toInt();"; } + +/* Start auxiliary types for message compatibility information parameter (MCI) */ +type record InstructionIndicator +{ + Bit1 transitAtIntermExchIndicator, /* bit A: Transit at intermediate exchange indicator */ + Bit1 releaseCallIndicator, /* bit B: Release call indicator */ + Bit1 sendNotificationIndicator, /* bit C: Send notification indicator */ + Bit1 discardMessageIndicator, /* bit D: Discard message indicator */ + Bit1 passOnNotPossibleIndicator, /* bit E: Pass on not possible indicator */ + Bit2 broadNarrowBandInterwIndicator, /* bits G F: Broadband/narrowband interworking indicator */ + Bit1 ext /* extension bit */ +} + +type set of InstructionIndicator InstructionIndicators; +/* End auxiliary types for message compatibility information parameter (MCI) */ +} /* end group MCI */ + +type record MCRI_PAR_tlv /* MCID request indicators parameter (MCRI); Optional(O) format. */ +{ + Bit8 paramType ('00111011'B), /* Parameter Type '00111011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 mCIDRequestIndicator, /* bit A: MCID request indicator */ + Bit1 holdingIndicator, /* bit B: Holding indicator (national use) */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x3B)"; } + +type record MCRS_PAR_tlv /* MCID response indicators parameter (MCRS); Optional(O) format. */ +{ + Bit8 paramType ('00111100'B), /* Parameter Type '00111100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 mCIDResponseIndicator, /* bit A: MCID response indicator */ + Bit1 holdProvidedIndicator, /* bit B: Hold provided indicator (national use) */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x3C)"; } + +type record MLPP_PAR_tlv /* MLPP precedence parameter (MLPP); Optional(O) format. */ +{ + Bit8 paramType ('00111010'B), /* Parameter Type '00111010'B */ + Bit8 paramLen ('00000110'B), /* Parameter Length field */ + Bit4 precedenceLevel, /* Precedence level */ + Bit1 spare1, /* spare */ + Bit2 lFB, /* LFB (look ahead for busy) */ + Bit1 spare2, /* spare */ + Oct2 networkIdentity, /* Network Identity (NI) octet 2 and 3 */ + Oct3 mLppServiceDomain /* MLPP service domain */ +} +with { encode "present=bytes(1,0x3A)"; } + +type record NCI_PAR_v /* Nature of connection indicators parameter (NCI); Fixed(F) format. */ +{ + Bit2 satelliteIndicator, /* bits BA: Satellite indicator */ + Bit2 continuityCheckIndicator, /* bits DC: Continuity check indicator */ + Bit1 echoControlDeviceIndicator, /* bit E: Echo control device indicator */ + Bit3 spare /* bits H-F: spare */ +} + +type record NMC_PAR_tlv /* Network management controls parameter (NMC); Optional(O) format. */ +{ + Bit8 paramType ('01011011'B), /* Parameter Type '01011011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 temporaryAlternativeRouting, /* bit A: Temporary Alternative Routing (TAR) indicator */ + Bit6 spare, /* bits G-B: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x5B)"; } + +type record NPFI_PAR_tlv /* Number portability forward information parameter (NPFI); Optional(O) format. */ +{ + Bit8 paramType ('10001101'B), /* Parameter Type '10001101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit4 numberPortabilityStatusIndicator, /* a) bits DCBA: Number portability status indicator */ + Bit3 spare, /* b) bits GFE: spare */ + Bit1 ext /* c) bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x8D)"; } + +type record NRN_PAR_tlv /* Network routing number parameter (NRN); Optional(O) format. */ +{ + Bit8 paramType ('10000100'B), /* Parameter Type '10000100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 natureOfAddressIndicator, /* Nature of address indicator */ + Bit3 numberingPlanIdentifier, /* Numbering Plan Identifier */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x84)"; + encode (paramLen) "tag=""NRN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""NRN_paramLen"")).toInt()-1;"; } + +type record NSF_PAR_tlv /* Network specific facility parameter (NSF); Optional(O) format. */ +{ + Bit8 paramType ('00101111'B), /* Parameter Type '00101111'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring networkSpecific /* Network identification */ +} +with { encode "present=bytes(1,0x2F)"; + encode (paramLen) "tag=""NSF_paramLen"";"; + encode (networkSpecific) "length=valueOf(getTag(""NSF_paramLen"")).toInt();"; } + +type record OBCI_PAR_tlv /* Optional backward call indicators parameter (OBCI); Optional(O) format. */ +{ + Bit8 paramType ('00101001'B), /* Parameter Type '00101001'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 inBandInformationIndicator, /* bit A: In-band information indicator */ + Bit1 callDivMayOccurIndicator, /* bit B: Call diversion may occur indicator */ + Bit1 simpleSegmentationIndicator, /* bit C: Simple segmentation indicator */ + Bit1 mLPPUserIndicator, /* bit D: MLPP user indicator */ + Bit4 reserved /* bits H-E: reserved for national use */ +} +with { encode "present=bytes(1,0x29)"; } + +type record OCI_PAR_tlv /* Original called IN number parameter (OCI); Optional(O) format. */ +{ + Bit8 paramType ('01111111'B), /* Parameter Type '01111111'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x7F)"; + encode (paramLen) "tag=""OCI_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""OCI_paramLen"")).toInt()-2;"; } + +type record OCN_PAR_tlv /* Original called number parameter (OCN); Optional(O) format. */ +{ + Bit8 paramType ('00101000'B), /* Parameter Type '00101000'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x28)"; + encode (paramLen) "tag=""OCN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""OCN_paramLen"")).toInt()-2;"; } + +type record OFCI_PAR_tlv /* Optional forward call indicators parameter (OFCI); Optional(O) format. */ +{ + Bit8 paramType ('00001000'B), /* Parameter Type '00001000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 cUGCallIndicator, /* bits BA: Closed user group call indicator */ + Bit1 simpleSegIndicator, /* bit C: Simple segmentation indicator */ + Bit4 spare, /* bits G-D: spare */ + Bit1 cLIRequestIndicator /* bit H: Connected line identity request indicator */ +} +with { encode "present=bytes(1,0x08)"; } + +type record OIPC_PAR_tlv /* Origination ISC point code parameter (OIPC); Optional(O) format. */ +{ + Bit8 paramType ('00101011'B), /* Parameter Type '00101011'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x2B)"; } + +group PCI { +type record PCI_PAR_tlv /* Parameter compatibility information parameter (PCI); Optional(O) format. */ +{ + Bit8 paramType ('00111001'B), /* Parameter Type '00111001'B */ + Bit8 paramLen, /* Parameter Length field */ + ParameterInstructionIndicators parameterInstructionIndicators +} +with { encode "present=bytes(1,0x39)"; + encode (paramLen) "tag=""PCI_paramLen"";"; + encode (parameterInstructionIndicators) "length=valueOf(getTag(""PCI_paramLen"")).toInt();"; } + +/* Start auxiliary types for parameter compatibility information parameter (PCI) */ +type record ParameterInstructionIndicator +{ + Bit8 upgradedParameter, /* upgraded parameter name */ + Bit1 transitAtIntermExchIndicator, /* bit A: Transit at intermediate exchange indicator */ + Bit1 releaseCallIndicator, /* bit B: Release call indicator */ + Bit1 sendNotificationIndicator, /* bit C: Send notification indicator */ + Bit1 discardMessageIndicator, /* bit D: Discard message indicator */ + Bit1 discardParameterIndicator, /* bit E: Discard parameter indicator */ + Bit2 passOnNotPossibleIndicator, /* bits G F: Pass on not possible indicator */ + Bit1 ext1, /* bit H: Extension indicator (ext.) */ + Bit2 broadNarrowBandInterwIndicator optional, /* bits J I: Broadband/narrowband interworking indicator */ + Bit5 spare optional, /* bits O-K: spare */ + Bit1 ext2 optional, /* bit P: Extension indicator (ext.) */ + octetstring moreInstructionIndicators optional /* to be defined when required */ +} +type set of ParameterInstructionIndicator ParameterInstructionIndicators; +/* End auxiliary types for parameter compatibility information parameter (PCI) */ +} /* end group PCI */ + +type record PDC_PAR_tlv /* Propagation delay counter parameter (PDC); Optional(O) format. */ +{ + Bit8 paramType ('00110001'B), /* Parameter Type '00110001'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit16 propagationDelayValue /* Propagation delay value */ +} +with { encode "present=bytes(1,0x31)"; } + +type record PICN_PAR_tlv /* Pivot counter parameter (PICN); Optional(O) format. */ +{ + Bit8 paramType ('10000111'B), /* Parameter Type '10000111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 pivotCounter, /* bits EDCBA: Pivot counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x87)"; } + +type record PICP_PAR_tlv /* Pivot capability parameter (PICP); Optional(O) format. */ +{ + Bit8 paramType ('01111011'B), /* Parameter Type '01111011'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 pivotPossibleIndicator, /* bits CBA: Pivot possible indicator */ + Bit3 spare, /* bits FED: spare */ + Bit1 interwToRedirectionIndicator, /* bit G: Interworking to redirection indicator (national use) */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x7B)"; } + +group Auxiliary_PRFI_PRBI_RFI_RBI { +/* Start auxiliary types for + - pivot routing forward information parameter (PRFI) + - pivot routing backward information parameter (PRBI) + - redirect forward information parameter (RFI) + - redirect backward information parameter (RBI) */ +type record RIEP_IT /* Return to invoking exchange possible information type */ +{ + Bit8 informationTypeTag ('00000001'B), /* information type tag '00000001'B */ + Bit8 informationTypeLength ('00000000'B) /* information type length */ +} +with { encode "present=bytes(1,0x01)"; } + +type record RIECI_IT /* Return to invoking exchange call identifier information type */ +{ + Bit8 informationTypeTag ('00000010'B), /* information type tag '00000010'B */ + Bit8 informationTypeLength('00000101'B), /* information type length */ + Bit24 callIdentity, /* Call identity */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x02)"; } + +type record PerformingReason +{ + Bit7 performingReason, /* Performing Pivot/Redirect Reason */ + Bit1 ext, /* Extension indicator */ + Bit4 possibleIndicator, /* Pivot/Redirect possible indicator at performing exchange */ + Bit4 spare /* spare */ +} + +type set of PerformingReason PerformingReasons; + +type record PPRI_IT /* Performing pivot/redirect indicator information type */ +{ + Bit8 informationTypeTag ('00000011'B), /* information type tag '00000011'B */ + Bit8 informationTypeLength, /* information type length */ + PerformingReasons performingReasons /* Performing Pivot/Redirect Reasons */ +} +with { encode "present=bytes(1,0x03)"; + encode (informationTypeLength) "tag=""PPRI_informationTypeLength"";"; + encode (performingReasons) "length=valueOf(getTag(""PPRI_informationTypeLength"")).toInt();"; } + +type record RIED_IT /* Return to invoking exchange duration */ +{ + Bit8 informationTypeTag ('00000001'B), /* information type tag '00000001'B */ + Bit8 informationTypeLength, /* information type length */ + Oct1to2 returnToInvokingExchangeDuration /* Return to invoking exchange duration in seconds */ +} +with { encode "present=bytes(1,0x01)"; + encode (informationTypeLength) "tag=""RIED_informationTypeLength"";"; + encode (returnToInvokingExchangeDuration) "length=valueOf(getTag(""RIED_informationTypeLength"")).toInt();"; } + +type union InformationType_Forward /* Information type for Pivot/Redirect routing forward information parameters */ +{ + RIEP_IT rIEP_IT, + RIECI_IT rIECI_IT, + PPRI_IT pPRI_IT, + IPRRF_IT iPRRF_IT +} + +type union InformationType_Backward /* Information type for Pivot/Redirect routing backward information parameters */ +{ + RIED_IT rIED_IT, + RIECI_IT rIECI_IT, + IPRRB_IT iPRRB_IT +} + +type set of InformationType_Forward InformationTypes_Forward; + +type set of InformationType_Backward InformationTypes_Backward; +/* End auxiliary types for + - pivot routing forward information parameter (PRFI) + - pivot routing backward information parameter (PRBI) + - redirect forward information parameter (RFI) + - redirect backward information parameter (RBI) */ + +} /* end group Auxiliary_PRFI_PRBI_RFI_RBI */ + +type record PRBI_PAR_tlv /* Pivot routing backward information parameter (PRBI); Optional(O) format. */ +{ + Bit8 paramType ('10001001'B), /* Parameter Type '10001001'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Backward informationTypes_Backward /* information types */ +} +with { encode "present=bytes(1,0x89)"; + encode (paramLen) "tag=""PRBI_paramLen"";"; + encode (informationTypes_Backward) "length=valueOf(getTag(""PRBI_paramLen"")).toInt();"; } + +type record PRFI_PAR_tlv /* Pivot routing forward information parameter (PRFI); Optional(O) format. */ +{ + Bit8 paramType ('10001000'B), /* Parameter Type '10001000'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Forward informationTypes_Forward /* information types */ +} +with { encode "present=bytes(1,0x88)"; + encode (paramLen) "tag=""PRFI_paramLen"";"; + encode (informationTypes_Forward) "length=valueOf(getTag(""PRFI_paramLen"")).toInt();"; } + +type record PRI_PAR_tlv /* Pivot routing indicators parameter (PRI); Optional(O) format. */ +{ + Bit8 paramType ('01111100'B), /* Parameter Type '01111100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit7 pivotRoutingIndicators, /* bits G F E D C B A: Pivot routing indicators */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x7C)"; } + +type record PST_PAR_tlv /* Pivot status parameter (PST); Optional(O) format. */ +{ + Bit8 paramType ('10000110'B), /* Parameter Type '10000110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 pivotStatusIndicator, /* bits BA: Pivot status indicator */ + Bit5 spare, /* bits GFEDC: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x86)"; } + +type record QRC_PAR_tlv /* Query on release capability parameter (QRC); Optional(O) format. */ +{ + Bit8 paramType ('10000101'B), /* Parameter Type '10000101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 qoRCapabilityIndicator, /* bit A: QoR capability indicator */ + Bit6 spare, /* bits G-B: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x85)"; } + +type record RAS_PAR_lv /* Range and status parameter (RAS); Variable(V) format. */ +{ + Bit8 paramLen , /* Parameter Length field */ + Bit8 range, /* Range */ + octetstring status /* Status */ +} +with { encode (paramLen) "tag=""RAS_paramLen"";"; + encode (status) "length=valueOf(getTag(""RAS_paramLen"")).toInt()-1;"; } + +type record RBI_PAR_tlv /* Redirect backward information parameter (RBI); Optional(O) format. */ +{ + Bit8 paramType ('10001100'B), /* Parameter Type '10001100'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Backward informationTypes_Backward /* information types */ +} +with { encode "present=bytes(1,0x8C)"; + encode (paramLen) "tag=""RBI_paramLen"";"; + encode (informationTypes_Backward) "length=valueOf(getTag(""RBI_paramLen"")).toInt();"; } + +type record RCN_PAR_tlv /* Redirect counter parameter (RCN); Optional(O) format. */ +{ + Bit8 paramType ('01110111'B), /* Parameter Type '01110111'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit5 redirectCounter, /* bits EDCBA: Redirect counter */ + Bit3 spare /* bits HGF: spare */ +} +with { encode "present=bytes(1,0x77)"; } + +type record RCP_PAR_tlv /* Redirect capability parameter (RCP); Optional(O) format. */ +{ + Bit8 paramType ('01001110'B), /* Parameter Type '01001110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit3 redirectPossibleIndicator, /* bits CBA: Redirect possible indicator */ + Bit4 spare, /* bits GFED: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x4E)"; } + +type record RDN_PAR_tlv /* Redirecting number parameter (RDN); Optional(O) format. */ +{ + Bit8 paramType ('00001011'B), /* Parameter Type '00001011'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit2 spare1, /* spare */ + Bit2 addrPresRestrInd, /* Address presentation restricted indicator */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 spare2, /* spare */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0B)"; + encode (paramLen) "tag=""RDN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""RDN_paramLen"")).toInt()-2;"; } + +type record RDI_PAR_tlv /* Redirection information parameter (RDI); Optional(O) format. */ +{ + Bit8 paramType ('00010011'B), /* Parameter Type '00010011'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit3 redirectingIndicator, /* bits CBA: Redirecting indicator */ + Bit1 spare, /* Bit D: spare */ + Bit4 originalRedirectionReason, /* bits H G F E: Original redirection reason */ + Bit3 redirectionCounter, /* bits K J I: Redirection counter */ + Bit1 reserved, /* bit L: reserved for national use */ + Bit4 redirectingReason /* bits PONM: Redirecting reason */ +} +with { encode "present=bytes(1,0x13)"; } + +type record RFI_PAR_tlv /* Redirect forward information parameter (RFI); Optional(O) format. */ +{ + Bit8 paramType ('10001011'B), /* Parameter Type '10001011'B */ + Bit8 paramLen, /* Parameter Length field */ + InformationTypes_Forward informationTypes_Forward /* information types */ +} +with { encode "present=bytes(1,0x8B)"; + encode (paramLen) "tag=""RFI_paramLen"";"; + encode (informationTypes_Forward) "length=valueOf(getTag(""RFI_paramLen"")).toInt();"; } + +type record RNN_PAR_tlv /* Redirection number parameter (RNN); Optional(O) format. */ +{ + Bit8 paramType ('00001100'B), /* Parameter Type '00001100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 natureOfAddressIndicator, /* Nature of address indicator */ + Bit1 oddEven, /* O/E */ + Bit4 spare, /* spare */ + Bit3 numberingPlanIndicator, /* Numbering plan indicator */ + Bit1 iNN, /* Internal Network Number indicator */ + octetstring addressSignals optional /* address signals */ +} +with { encode "present=bytes(1,0x0C)"; + encode (paramLen) "tag=""RNN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""RNN_paramLen"")).toInt()-2;"; } + +type record RNS_PAR_tlv /* Redirection number restriction parameter (RNS); Optional(O) format. */ +{ + Bit8 paramType ('01000000'B), /* Parameter Type '01000000'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 presRestrIndicator, /* bits BA: Presentation restricted indicator */ + Bit6 spare /* bits H-C: spare */ +} +with { encode "present=bytes(1,0x40)"; } + +type record ROP_PAR_tlv /* Remote operations parameter (ROP); Optional(O) format. */ +{ + Bit8 paramType ('00110010'B), /* Parameter Type '00110010'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit5 protocolProfile, /* Protocol profile */ + Bit2 spare, /* spare */ + Bit1 ext, /* Extension */ + octetstring components /* ASN.1 components */ +} +with { encode "present=bytes(1,0x32)"; + encode (paramLen) "tag=""ROP_paramLen"";"; + encode (components) "length=valueOf(getTag(""ROP_paramLen"")).toInt()-1;"; } + +type record RST_PAR_tlv /* Redirect status parameter (RST); Optional(O) format. */ +{ + Bit8 paramType ('10001010'B), /* Parameter Type '10001010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit2 redirectStatusIndicator, /* bits BA: Redirect status indicator */ + Bit5 spare, /* bits GFEDC: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x8A)"; } + +type record SAC_PAR_tlv /* Service activation parameter (SAC); Optional(O) format. */ +{ + Bit8 paramType ('00110011'B), /* Parameter Type '00110011'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring featureCodes /* Feature codes */ +} +with { encode "present=bytes(1,0x33)"; + encode (paramLen) "tag=""SAC_paramLen"";"; + encode (featureCodes) "length=valueOf(getTag(""SAC_paramLen"")).toInt();"; } + +type record SCFI_PAR_tlv /* SCF id parameter (SCFI); Optional(O) format. */ +{ + Bit8 paramType ('01100110'B), /* Parameter Type '01100110'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring sCFId /* SCF id */ +} +with { encode "present=bytes(1,0x66)"; + encode (paramLen) "tag=""SCFI_paramLen"";"; + encode (sCFId) "length=valueOf(getTag(""SCFI_paramLen"")).toInt();"; } + +type record SPC_PAR_tlv /* Signalling point code parameter (SPC); Optional(O) format. */ +{ + Bit8 paramType ('00011110'B), /* Parameter Type '00011110'B */ + Bit8 paramLen ('00000010'B), /* Parameter Length field */ + Bit14 signallingPointCode, /* Signalling point code */ + Bit2 spare /* spare */ +} +with { encode "present=bytes(1,0x1E)"; } + +type record SNN_PAR_lv /* Subsequent number parameter (SNN); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + Bit7 spare, /* spare */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode (paramLen) "tag=""SNN_lv_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""SNN_lv_paramLen"")).toInt()-1;"; } + +type record SNN_PAR_tlv /* Subsequent number parameter (SNN); Optional(O) format. */ +{ + Bit8 paramType ('00000101'B), /* Parameter Type '00000101'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit7 spare, /* spare */ + Bit1 oddEven, /* O/E */ + octetstring addressSignals /* address signals */ +} +with { encode "present=bytes(1,0x05)"; + encode (paramLen) "tag=""SNN_paramLen"";"; + encode (addressSignals) "length=valueOf(getTag(""SNN_paramLen"")).toInt()-1;"; } + +type record SRI_PAR_v /* Suspend Resume indicators parameter (SRI); Fixed(F) format. */ +{ + Bit1 suspendResumeIndicator, /* bit A: Suspend/resume indicator */ + Bit7 spare /* bits H-B: spare */ +} + +type record TNS_PAR_tlv /* Transit network selection parameter (TNS); Optional(O) format. */ +{ + Bit8 paramType ('00100011'B), /* Parameter Type '00100011'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit4 networkIdentificationPlan, /* Network identification plan */ + Bit3 typeOfNetworkIdentification, /* Type of network identification */ + Bit1 oddEven, /* O/E */ + octetstring networkIdentification /* Network identification */ +} +with { encode "present=bytes(1,0x23)"; + encode (paramLen) "tag=""TNS_paramLen"";"; + encode (networkIdentification) "length=valueOf(getTag(""TNS_paramLen"")).toInt()-1;"; } + +type Bit8 TMR_PAR_v; /* ransmission medium requirement parameter (TMR); Fixed(F) format. */ + +type record TMRP_PAR_tlv /* Transmission medium requirement prime parameter (TMRP); Optional(O) format. */ +{ + Bit8 paramType ('00111110'B), /* Parameter Type '00111110'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 transmissionMediumRequirement /* Transmission medium requirement */ +} +with { encode "present=bytes(1,0x3E)"; } + +type record TMU_PAR_tlv /* Transmission medium used parameter (TMU); Optional(O) format. */ +{ + Bit8 paramType ('00110101'B), /* Parameter Type '00110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit8 transmissionMediumUsed /* Transmission medium used */ +} +with { encode "present=bytes(1,0x35)"; } + +type record UAI_PAR_tlv /* UID action indicators parameter (UAI); Optional(O) format. */ +{ + Bit8 paramType ('01110100'B), /* Parameter Type '01110100'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 throughConnInstructionIndicator, /* bit A: Through-connection instruction indicator */ + Bit1 t9TimerInstructionIndicator, /* bit B: T9 timer instruction indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x74)"; } + +type record UCI_PAR_tlv /* UID capability indicators parameter (UCI); Optional(O) format. */ +{ + Bit8 paramType ('01110101'B), /* Parameter Type '01110101'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 througConnectionIndicator, /* bit A: Through-connection indicator */ + Bit1 t9TimerIndicator, /* bit B: T9 timer indicator */ + Bit5 spare, /* bits G-C: spare */ + Bit1 ext /* bit H: Extension indicator */ +} +with { encode "present=bytes(1,0x75)"; } + +group USI { +type record USI_PAR_tlv /* User service information parameter (USI); Optional(O) format. */ +{ + Bit8 paramType ('00011101'B), /* Parameter Type '00011101'B */ + Bit8 paramLen, /* Parameter Length field */ + USIContents uSIContents +} +with { encode "present=bytes(1,0x1D)"; + encode (paramLen) "tag=""USI_paramLen"";"; + encode (uSIContents) "length=valueOf(getTag(""USI_paramLen"")).toInt();"; } + +/* Start auxiliary types for user service information parameter (USI) */ +type record USIContents +{ + BCAP_octet3 bCAP_octet3, + BCAP_octet4 bCAP_octet4, + BCAP_octet5 bCAP_octet5 optional, + BCAP_octet6 bCAP_octet6 optional, + BCAP_octet7 bCAP_octet7 optional +} +/* End auxiliary types for user service information parameter (USI) */ +} /* end group USI */ + +type record USIP_PAR_tlv /* User service information prime parameter (USIP); Optional(O) format. */ +{ + Bit8 paramType ('00110000'B), /* Parameter Type '00110000'B */ + Bit8 paramLen, /* Parameter Length field */ + USIContents uSIContents +} +with { encode "present=bytes(1,0x30)"; + encode (paramLen) "tag=""USIP_paramLen"";"; + encode (uSIContents) "length=valueOf(getTag(""USIP_paramLen"")).toInt();"; } + + +type record UTSI_PAR_tlv /* User teleservice information parameter (UTSI); Optional(O) format. */ +{ + Bit8 paramType ('00110100'B), /* Parameter Type '00110100'B */ + Bit8 paramLen, /* Parameter Length field */ + Bit2 presentation, /* Presentation */ + Bit3 interpretation, /* Interpretation */ + Bit2 codingStandard, /* Coding standard */ + Bit1 ext1, /* Extension */ + Bit7 highLayerCharacteristicsIdentification, /* High layer characteristics identification */ + Bit1 ext2, /* Extension */ + Bit7 extendedLayerCharacteristicsIdentification optional, /* Extended layer characteristics identification */ + Bit1 ext3 optional /* Extension */ +} +with { encode "present=bytes(1,0x34)"; } + +type record UUID_PAR_tlv /* User-to-user indicators parameter (UUID); Optional(O) format. */ +{ + Bit8 paramType ('00101010'B), /* Parameter Type '00101010'B */ + Bit8 paramLen ('00000001'B), /* Parameter Length field */ + Bit1 request_response, /* bit A: Type */ + Bit2 service1, /* bits C B: Service 1 */ + Bit2 service2, /* bits E D: Service 2 */ + Bit2 service3, /* bits G F: Service 3 */ + Bit1 networkDiscardIndicator /* bit H: Network discard indicator (only applicable if bit A equals 1 (response), otherwise: spare) */ +} +with { encode "present=bytes(1,0x2A)"; } + +type record UUIF_PAR_lv /* User-to-user information parameter (UUIF); Variable(V) format. */ +{ + Bit8 paramLen, /* Parameter Length field */ + octetstring userToUserInformation /* User-to-user information */ +} +with { encode (paramLen) "tag=""UUIF_lv_paramLen"";"; + encode (userToUserInformation) "length=valueOf(getTag(""UUIF_lv_paramLen"")).toInt();"; } + +type record UUIF_PAR_tlv /* User-to-user information parameter (UUIF); Optional(O) format. */ +{ + Bit8 paramType ('00100000'B), /* Parameter Type '00100000'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring userToUserInformation /* User-to-user information */ +} +with { encode "present=bytes(1,0x20)"; + encode (paramLen) "tag=""UUIF_paramLen"";"; + encode (userToUserInformation) "length=valueOf(getTag(""UUIF_paramLen"")).toInt();"; } + +type record UNKNOWN_PAR_tlv /* Parameter with unknown type. */ +{ + Bit8 paramType, /* Unknown Parameter Type e.g. '10001111'B */ + Bit8 paramLen, /* Parameter Length field */ + octetstring contents /* Parameter Contents */ +} +} /* end group Parameter */ +} /* end module SipIsup_ISUP_ParamTypes */ diff --git a/IsupAts/SipIsup_ISUP_Steps.ttcn b/IsupAts/SipIsup_ISUP_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..4817bc2d0e69271986b3d8e0142225584ffd97ac --- /dev/null +++ b/IsupAts/SipIsup_ISUP_Steps.ttcn @@ -0,0 +1,1857 @@ +/* + * @author STF 366 + * @version $Id$ + * @desc This module provides test steps (including altsteps) used at the ISUP/BICC side. +*/ +module SipIsup_ISUP_Steps +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + //AtsIsup + import from SipIsup_TestSystem all; + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_MsgTemplates all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_ParamTemplates all; + import from SipIsup_ISUP_ParamTypes all; + +group behaviour +{ + +group SipIsup_ISUP_Defaults +{ + altstep a_IsupBicc_Def_Generic() runs on IsupBiccComponent + { + // COT with Continuity Indicator parameter indicating successful continuity check is ignored + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cOT_MSG := m_COT_MSG(c_CTI_contInd_succ)}, v_SLS)) + { + repeat; + } + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cOT_MSG := m_COT_MSG(c_CTI_contInd_succ)})) + { + repeat; + } + + /* For unexpected message 'Address complete' + store CIC values, release connection and stop, + if cic = active cic, + for expected ACM do nothing and return */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, { aCM_MSG := mw_ACM_MSG_Def}, v_SLS))-> value v_ACM_r + { + v_CircuitIdentityCodeDef := v_ACM_r.circuitIdentityCode.cicv; + if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) and (v_ACM_expected1 == false)) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) and (v_ACM_expected2 == false)) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS2)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) and (v_ACM_expected1 == true)) + { + v_ACM_expected1 := false; + repeat; + } + else if((v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) and (v_ACM_expected2 == true)) + { + v_ACM_expected2 := false; + repeat; + } + else {repeat;} + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, { aCM_MSG := mw_ACM_MSG_Def}))-> value v_ACM_r + { + v_CallInstanceCodeDef := v_ACM_r.callInstanceCode; + if((v_CallInstanceCodeDef == v_CallInstanceCode1) and (v_ACM_expected1 == false)) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode2) and (v_ACM_expected2 == false)) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode1) and (v_ACM_expected1 == true)) + { + v_ACM_expected1 := false; + repeat; + } + else if((v_CallInstanceCodeDef == v_CallInstanceCode2) and (v_ACM_expected2 == true)) + { + v_ACM_expected2 := false; + repeat; + } + else {repeat;} + } + + /* For unexpected ISUP message 'Initial address' + store CIC and SLS values, release connection and stop */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, { iAM_MSG := mw_IAM_MSG_anyOpt(mw_NCI_PAR_v_any, mw_FCI_PAR_v_any, ?, ?, mw_CDN_PAR_lv_any)}, ?) + )-> value v_IAM_r + { + v_CircuitIdentityCodeDef := v_IAM_r.circuitIdentityCode.cicv; + v_SLS := v_IAM_r.routingLabel.sls; + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCodeDef, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, { iAM_MSG := mw_IAM_MSG_anyOpt(mw_NCI_PAR_v_any, mw_FCI_PAR_v_any, ?, ?, mw_CDN_PAR_lv_any)}) + )-> value v_IAM_r + { + v_CallInstanceCodeDef := v_IAM_r.callInstanceCode; + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCodeDef, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + /* For unexpected messages + store CIC values, release connection and stop, + if cic = active cic */ + [PX_ISUP_Isup] IsupBiccP.receive( + mw_ISUP_MSG_ind(?, ?, ?) + )-> value v_ANY_r + { + v_CircuitIdentityCodeDef := v_ANY_r.circuitIdentityCode.cicv; + if(v_CircuitIdentityCodeDef == v_CircuitIdentityCode1) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if(v_CircuitIdentityCodeDef == v_CircuitIdentityCode2) + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_Def}, v_SLS2)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else + {repeat;} + } + + [not PX_ISUP_Isup] IsupBiccP.receive( + mw_BICC_MSG_ind(?, ?) + )-> value v_ANY_r + { + v_CallInstanceCodeDef := v_ANY_r.callInstanceCode; + if(v_CallInstanceCodeDef == v_CallInstanceCode1) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else if(v_CallInstanceCodeDef == v_CallInstanceCode2) + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + else + {repeat;} + } + + [PX_ISUP_Isup] any timer.timeout + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS2)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] any timer.timeout + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + } + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 0; + } + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + } + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 0; + } + [] IsupBiccP.receive( mw_BearerSetup_acc(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 3; + } + [] IsupBiccP.receive( mw_BearerSetup_acc(v_CallInstanceCode2)) + { + v_ISUP_BearerState2 := 3; + } + + [PX_ISUP_Isup] syncPort.receive + { + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + IsupBiccP.send(m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_Def}, v_SLS)); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + + [not PX_ISUP_Isup] syncPort.receive + { + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_Def})); + IsupBiccP.send(m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_Def})); + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + };// end default a_IsupBicc_Def_Generic + +}; // end group SipIsup_ISUP_Defaults + +group SipIsup_ISUP_Receive_Msgs +{ + function f_awaiting_ACM(template ACM_MSG p_ACM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aCM_MSG := p_ACM})) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ACM2(template ACM_MSG p_ACM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { aCM_MSG := p_ACM}, v_SLS2)) + { + v_ACM_expected2 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { aCM_MSG := p_ACM})) + { + v_ACM_expected2 := false; + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ANM(template ANM_MSG p_ANM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aNM_MSG := p_ANM}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aNM_MSG := p_ANM})) + { + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := mw_CPG_MSG_Def}, v_SLS)) + {repeat;}; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := mw_CPG_MSG_Def})) + {repeat;}; + } + } + + function f_awaiting_ANM2(template ANM_MSG p_ANM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { aNM_MSG := p_ANM}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { aNM_MSG := p_ANM})) + { + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cPG_MSG := mw_CPG_MSG_Def}, v_SLS)) + {repeat;}; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cPG_MSG := mw_CPG_MSG_Def})) + {repeat;}; + } + } + + function f_awaiting_CGBA(template CGBA_MSG p_CGBA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGBA_MSG := p_CGBA}, v_SLS)) + { + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGBA_MSG := p_CGBA})) + { + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_CGBA2(template CGBA_MSG p_CGBA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGBA_MSG := p_CGBA}, v_SLS2)) + { + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGBA_MSG := p_CGBA})) + { + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_CON(template CON_MSG p_CON) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cON_MSG := p_CON}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cON_MSG := p_CON})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_COT(template COT_MSG p_COT) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cOT_MSG := p_COT}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cOT_MSG := p_COT})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_COT2(template COT_MSG p_COT) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cOT_MSG := p_COT}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { cOT_MSG := p_COT})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_CPG(template CPG_MSG p_CPG) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := p_CPG})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_FRJ(template FRJ_MSG p_FRJ) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { fRJ_MSG := p_FRJ}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { fRJ_MSG := p_FRJ})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_GRA(template GRA_MSG p_GRA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { gRA_MSG := p_GRA}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { gRA_MSG := p_GRA})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_GRA2(template GRA_MSG p_GRA) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { gRA_MSG := p_GRA}, v_SLS2)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode2, { gRA_MSG := p_GRA})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_IAM(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(?, { iAM_MSG := p_IAM}, ?))-> value v_IAM_r + { + v_CircuitIdentityCode1 := v_IAM_r.circuitIdentityCode.cicv; + v_SLS := v_IAM_r.routingLabel.sls; + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(?, { iAM_MSG := p_IAM}))-> value v_IAM_r + { + v_CallInstanceCode1 := v_IAM_r.callInstanceCode; + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_IAM2(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(?, { iAM_MSG := p_IAM}, ?))-> value v_IAM_r + { + v_CircuitIdentityCode2 := v_IAM_r.circuitIdentityCode.cicv; + v_SLS2 := v_IAM_r.routingLabel.sls; + setverdict(pass); + TWait.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(?, { iAM_MSG := p_IAM}))-> value v_IAM_r + { + v_CallInstanceCode2 := v_IAM_r.callInstanceCode; + setverdict(pass); + TWait.stop; + }; + } + } + + function f_awaiting_INR(template INR_MSG p_INR) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { iNR_MSG := p_INR}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { iNR_MSG := p_INR})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_IRS(template IRS_MSG p_IRS) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { iRS_MSG := p_IRS}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { iRS_MSG := p_IRS})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_LOP(template LOP_MSG p_LOP) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { lOP_MSG := p_LOP}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { lOP_MSG := p_LOP})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_REL(template REL_MSG p_REL) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := p_REL}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := p_REL})) + { + setverdict(pass); + TAck.stop; + v_ISUP_BearerState1 := 2; + }; + } + } + + function f_awaiting_RLC(template RLC_MSG p_RLC) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rLC_MSG := p_RLC}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { rLC_MSG := p_RLC})) + { + setverdict(pass); + TAck.stop; + v_ISUP_BearerState1 := 0; + }; + } + } + + function f_awaiting_SAM(template SAM_MSG p_SAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { sAM_MSG := p_SAM}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { sAM_MSG := p_SAM})) + { + setverdict(pass); + TAck.stop; + }; + } + } + + function f_awaiting_ACM_CPG(template ACM_MSG p_ACM, + template CPG_MSG p_CPG) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TAck.start; + alt + { + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { aCM_MSG := p_ACM})) + { + v_ACM_expected1 := false; + setverdict(pass); + TAck.stop; + }; + [PX_ISUP_Isup] IsupBiccP.receive + (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)) + { + setverdict(pass); + TAck.stop; + }; + [not PX_ISUP_Isup] IsupBiccP.receive + (mw_BICC_MSG_ind(v_CallInstanceCode1, { cPG_MSG := p_CPG})) + { + setverdict(pass); + TAck.stop; + }; + } + } +} // end group SipIsup_ISUP_Receive_Msgs + +group SipIsup_ISUP_Transmit_Msgs +{ + function f_send_ACM(template ACM_MSG p_ACM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ACM.start; + alt + { + [] TDelay_ACM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aCM_MSG := p_ACM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aCM_MSG := p_ACM})); + } + } + + function f_send_ACM2(template ACM_MSG p_ACM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ACM.start; + alt + { + [] TDelay_ACM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { aCM_MSG := p_ACM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { aCM_MSG := p_ACM})); + } + } + + function f_send_ANM(template ANM_MSG p_ANM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ANM.start; + alt + { + [] TDelay_ANM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aNM_MSG := p_ANM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aNM_MSG := p_ANM})); + } + } + + function f_send_ANM2(template ANM_MSG p_ANM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_ANM.start; + alt + { + [] TDelay_ANM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { aNM_MSG := p_ANM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { aNM_MSG := p_ANM})); + } + } + + function f_send_APM(template APM_MSG p_APM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_APM.start; + alt + { + [] TDelay_APM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { aPM_MSG := p_APM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { aPM_MSG := p_APM})); + } + } + + function f_send_CGB(template CGB_MSG p_CGB, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CGB.start; + alt + { + [] TDelay_CGB.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGB_MSG := p_CGB}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGB_MSG := p_CGB})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_CGB2(template CGB_MSG p_CGB, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CGB.start; + alt + { + [] TDelay_CGB.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { cGB_MSG := p_CGB}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { cGB_MSG := p_CGB})); + v_ISUP_BearerState2 := 0; + } + } + + function f_send_CON(template CON_MSG p_CON, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CON.start; + alt + { + [] TDelay_CON.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cON_MSG := p_CON}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cON_MSG := p_CON})); + } + } + + function f_send_COT(template COT_MSG p_COT, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_COT.start; + alt + { + [] TDelay_COT.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cOT_MSG := p_COT}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cOT_MSG := p_COT})); + } + } + + function f_send_CPG(template CPG_MSG p_CPG, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CPG.start; + alt + { + [] TDelay_CPG.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cPG_MSG := p_CPG})); + } + } + + function f_send_CPG_invalid(template CPG_MSG p_CPG, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_CPG.start; + alt + { + [] TDelay_CPG.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cPG_MSG := p_CPG}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cPG_MSG := p_CPG})); + } + } + + function f_send_FAC(template FAC_MSG p_FAC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_FAC.start; + alt + { + [] TDelay_FAC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { fAC_MSG := p_FAC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { fAC_MSG := p_FAC})); + } + } + + function f_send_FAR(template FAR_MSG p_FAR, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_FAR.start; + alt + { + [] TDelay_FAR.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { fAR_MSG := p_FAR}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { fAR_MSG := p_FAR})); + } + } + + function f_send_GRS(template GRS_MSG p_GRS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_GRS.start; + alt + { + [] TDelay_GRS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { gRS_MSG := p_GRS}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { gRS_MSG := p_GRS})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_GRS2(template GRS_MSG p_GRS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_GRS.start; + alt + { + [] TDelay_GRS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { gRS_MSG := p_GRS}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { gRS_MSG := p_GRS})); + v_ISUP_BearerState2 := 0; + } + } + + function f_send_IAM(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iAM_MSG := p_IAM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iAM_MSG := p_IAM})); + v_ISUP_BearerState1 := 1; + } + v_ACM_expected1 := true; + } + + function f_send_IAM2(template IAM_MSG p_IAM) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { iAM_MSG := p_IAM}, v_SLS2)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { iAM_MSG := p_IAM})); + v_ISUP_BearerState2 := 1; + } + v_ACM_expected2 := true; + } + + function f_send_IDR(template IDR_MSG p_IDR, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_IDR.start; + alt + { + [] TDelay_IDR.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iDR_MSG := p_IDR}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iDR_MSG := p_IDR})); + } + } + + function f_send_INF(template INF_MSG p_INF, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_INF.start; + alt + { + [] TDelay_INF.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { iNF_MSG := p_INF}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { iNF_MSG := p_INF})); + } + } + + function f_send_LOP(template LOP_MSG p_LOP, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_LOP.start; + alt + { + [] TDelay_LOP.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { lOP_MSG := p_LOP}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { lOP_MSG := p_LOP})); + } + } + + function f_send_REL(template REL_MSG p_REL, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_REL.start; + alt + { + [] TDelay_REL.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := p_REL}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := p_REL})); + v_ISUP_BearerState1 := 2; + } + } + + function f_send_RES(template RES_MSG p_RES, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RES.start; + alt + { + [] TDelay_RES.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rES_MSG := p_RES}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rES_MSG := p_RES})); + } + } + + function f_send_RLC(template RLC_MSG p_RLC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RLC.start; + alt + { + [] TDelay_RLC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := p_RLC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := p_RLC})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_RSC(template RSC_MSG p_RSC, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_RSC.start; + alt + { + [] TDelay_RSC.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rSC_MSG := p_RSC}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rSC_MSG := p_RSC})); + v_ISUP_BearerState1 := 0; + } + } + + function f_send_SAM(template SAM_MSG p_SAM, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_SAM.start; + alt + { + [] TDelay_SAM.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { sAM_MSG := p_SAM}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { sAM_MSG := p_SAM})); + } + } + + function f_send_SUS(template SUS_MSG p_SUS, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_SUS.start; + alt + { + [] TDelay_SUS.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { sUS_MSG := p_SUS}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { sUS_MSG := p_SUS})); + } + } + + function f_send_UNKNOWN(template UNKNOWN_MSG p_UNKNOWN, boolean p_delay) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (p_delay == true) + { + TDelay_UNKNOWN.start; + alt + { + [] TDelay_UNKNOWN.timeout{}; + } + } + if (PX_ISUP_Isup == true) + { + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { uNKNOWN_MSG := p_UNKNOWN}, v_SLS)); + } + else + { + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { uNKNOWN_MSG := p_UNKNOWN})); + } + } + +} // end group SipIsup_ISUP_Transmit_Msgs + + +group SipIsup_ISUP_Checks +{ + function f_IsupBicc_CheckRingingTone() runs on IsupBiccComponent + { + var boolean v_Result; + var charstring v_question := "confirm if ringing at IsupBicc port"; + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_IsupBicc_CheckRinging) { + opPort_IsupBicc.call(s_IsupBicc_ringing:{v_question, -}) + {[] opPort_IsupBicc.getreply(s_IsupBicc_ringing:{-, true}) {} + [] opPort_IsupBicc.getreply(s_IsupBicc_ringing:{-, false}) + {all timer.stop; + setverdict(fail); + stop;} + } + } + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return + } + + function f_IsupBicc_CheckConversation() runs on IsupBiccComponent + { + var boolean v_Result; + var charstring v_question := "confirm if conversation at IsupBicc port"; + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_IsupBicc_CheckConversation) { + opPort_IsupBicc.call(s_IsupBicc_conversation:{v_question, -}) + {[] opPort_IsupBicc.getreply(s_IsupBicc_conversation:{-, true}) {} + [] opPort_IsupBicc.getreply(s_IsupBicc_conversation:{-, false}) + {all timer.stop; + setverdict(fail); + stop;} + } + } + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); + return + } + +}// end group SipIsup_ISUP_Checks + +group SipIsup_ISUP_BearerRelated +{ + function f_IsupBicc_Bearer1ReleaseIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_BearerRelease_ind(v_CallInstanceCode1)) + { + v_ISUP_BearerState1 := 0; + TWait.stop; + }; + } + } + } + + + function f_IsupBicc_Bearer1ReleaseRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send(m_BearerRelease_req(v_CallInstanceCode1)); + + v_ISUP_BearerState1 := 2; + TAck.start; + + alt + { + [] IsupBiccP.receive (m_BearerRelease_cnf(v_CallInstanceCode1)) + { + TAck.stop; + v_ISUP_BearerState1 := 0; + }; + } + } + } + + + function f_IsupBicc_Bearer1SetupIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_Setup_ind(v_CallInstanceCode1)) + {TWait.stop; + v_ISUP_BearerState1 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer1SetupRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send ( m_BearerSetup_req(v_CallInstanceCode1)); + + v_ISUP_BearerState1 := 1; + TAck.start; + + alt + { + [] IsupBiccP.receive ( mw_BearerSetup_acc(v_CallInstanceCode1)) + {TAck.stop; + v_ISUP_BearerState1 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer2SetupIndication() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start; + + alt + { + [] IsupBiccP.receive (mw_Setup_ind(v_CallInstanceCode2)) + {TWait.stop; + v_ISUP_BearerState2 := 3; + }; + } + } + } + + + function f_IsupBicc_Bearer2SetupRequest() runs on IsupBiccComponent + { + if (PX_ISUP_Isup == false) + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + IsupBiccP.send ( m_BearerSetup_req(v_CallInstanceCode2)); + + v_ISUP_BearerState2 := 1; + TAck.start; + + alt + { + [] IsupBiccP.receive ( mw_BearerSetup_acc(v_CallInstanceCode2)) + {TAck.stop; + v_ISUP_BearerState2 := 3; + }; + } + } + } + +}// end group SipIsup_ISUP_BearerRelated + +group SipIsup_ISUP_Preambles +{ + // Preamble performing only initialization + function f_IsupBicc_Pre0() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + v_ISUP_BearerState1 := 0;//initialize bearer state associated with cic1 + v_ISUP_BearerState2 := 0;//initialize bearer state associated with cic2 + + // Initialize cic values for transmission side + v_CircuitIdentityCode1 := PX_ISUP_TX_CIC_cicv1; + v_CircuitIdentityCode2 := PX_ISUP_TX_CIC_cicv2; + v_CallInstanceCode1 := PX_ISUP_TX_CIC_caicv1; + v_CallInstanceCode2 := PX_ISUP_TX_CIC_caicv2; + v_SLS := PX_ISUP_SLS; + v_SLS2 := int2bit((bit2int(PX_ISUP_SLS) + 1), 4); + + } //end function f_IsupBiccPre0 + +} // end group SipIsup_ISUP_Preambles + + +group SipIsup_ISUP_Postambles +{ + // Postamble checking signalling- and bearer states + function f_IsupBicc_Post_CheckStates() runs on IsupBiccComponent + { + if (v_ISUP_BearerState1 != 0) + { + setverdict(inconc); + log ("Bearer connection state of cic1 is not 0 at the test case end."); + } + if (v_ISUP_BearerState2 != 0) + { + setverdict(inconc); + log ("Bearer connection state of cic2 is not 0 at the test case end."); + } + + }// end f_IsupBicc_Post_CheckStates + + + + // MG Note 1: Bearer Release Ind not yet covered + // Postamble expecting REL for cic1 and sending RLC + function f_IsupBicc_Post_expREL1(boolean p_Bearer1_established) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start;// Wait for REL message + + alt + { // expect REL Msg + [PX_ISUP_Isup] IsupBiccP.receive + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + } + [not PX_ISUP_Isup] IsupBiccP.receive + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0; //initialize state associated with cic1 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + + } //end function f_IsupBicc_Post_expREL1 + + + // Postamble expecting REL for cic1 and cic2 and sending RLC for both + function f_IsupBicc_Post_expREL2() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + TWait.start;// Wait for REL message + + alt + { + [PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic1 first + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { // send RLC Msg on cic1 + IsupBiccP.send (m_ISUP_MSG_req( v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic2 + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { rEL_MSG := mw_REL_MSG_Def}, v_SLS2)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS2)); + } + } + } + + [PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic2 first + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { rEL_MSG := mw_REL_MSG_Def}, v_SLS2)) + { // send RLC Msg on cic2 + IsupBiccP.send (m_ISUP_MSG_req( v_CircuitIdentityCode2, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS2)); + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic1 + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rEL_MSG := mw_REL_MSG_Def}, v_SLS)) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rLC_MSG := m_RLC_MSG_noOpt}, v_SLS)); + } + } + } + + [not PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic1 first + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { // send RLC Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req( v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic2 + ( mw_BICC_MSG_ind(v_CallInstanceCode2, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState2 := 0;//initialize state associated with cic2 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + } + + [not PX_ISUP_Isup] IsupBiccP.receive // receive REL Msg on cic2 first + ( mw_BICC_MSG_ind(v_CallInstanceCode2, { rEL_MSG := mw_REL_MSG_Def})) + { // send RLC Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req( v_CallInstanceCode2, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState2 := 0; //initialize state associated with cic1 + + alt + { + [] IsupBiccP.receive // receive REL Msg on cic1 + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { rEL_MSG := mw_REL_MSG_Def})) + { TWait.stop; + // send RLC Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rLC_MSG := m_RLC_MSG_noOpt})); + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + f_IsupBicc_Post_CheckStates(); // check signalling states and bearer connection states. + } + } + } + } + + } //end function f_IsupBicc_Post_expREL2 + + + // MG Note 1: Bearer Release not yet covered + // Postamble sending REL and expecting RLC for cic1 + function f_IsupBicc_Post_sendREL1(boolean p_Bearer1_established) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send REL Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)}, v_SLS)); + TAck.start; // Wait for REL message + + alt { // expect RLC Msg + [] IsupBiccP.receive(mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { rLC_MSG := mw_RLC}, v_SLS)) + {TAck.stop;} + } + } + else + { // send REL Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { rEL_MSG := m_REL(c_CAU_CauseVal_16)})); + v_ISUP_BearerState1 := 2; //initialize state associated with cic1 + TAck.start; // Wait for REL message + + alt { // expect RLC Msg + [] IsupBiccP.receive(mw_BICC_MSG_ind(v_CallInstanceCode1,{ rLC_MSG := mw_RLC})) + {TAck.stop;} + } + v_ISUP_BearerState1 := 0;//initialize state associated with cic1 + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + } //end function f_IsupBicc_Post_sendREL1 + + + + // Postamble sending CGU and expecting CGUA for cic1 + function f_IsupBicc_Post_CGU1() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send CGU Msg + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGU_MSG := m_CGU}, v_SLS)); + TWait.start; // Wait for CGUA message + + alt { // expect CGUA Msg + [] IsupBiccP.receive + ( mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := mw_CGUA}, v_SLS)) + {TWait.stop;} + } + } + else + { // send CGU Msg + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGU_MSG := m_CGU})); + TWait.start; // Wait for CGUA message + + alt { // expect CGUA Msg + [] IsupBiccP.receive + ( mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := mw_CGUA})) + {TWait.stop;} + } + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + } //end function f_IsupBicc_Post_CGU1 + + // Postamble sending CGU and expecting CGUA for cic1 and cic2 + function f_IsupBicc_Post_CGU2() runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + if (PX_ISUP_Isup == true) + { // send CGU Msg on cic1 + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { cGU_MSG := + m_CGU}, v_SLS)); + + // send CGU Msg on cic2 + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { cGU_MSG := + m_CGU}, v_SLS2)); + + TWait.start;// Wait for CGUA messages + + alt { + // expect CGUA Msg on cic1 first + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := + mw_CGUA}, v_SLS)) + { + alt { // expect CGUA Msg on cic2 + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGUA_MSG := + mw_CGUA}, v_SLS2)) + {TWait.stop;} + } + } + // expect CGUA Msg on cic2 first + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode2, { cGUA_MSG := + mw_CGUA}, v_SLS2)) + { + alt { // expect CGUA Msg on cic1 + [] IsupBiccP.receive (mw_ISUP_MSG_ind(v_CircuitIdentityCode1, { cGUA_MSG := + mw_CGUA}, v_SLS)) + {TWait.stop;} + } + } + } + } + + else + { // send CGU Msg on cic1 + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode1, { cGU_MSG := + m_CGU})); + + // send CGU Msg on cic2 + IsupBiccP.send (m_BICC_MSG_req(v_CallInstanceCode2, { cGU_MSG := + m_CGU})); + + TWait.start;// Wait for CGUA messages + + alt { + // expect CGUA Msg on cic1 first + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := + mw_CGUA})) + { + alt { // expect CGUA Msg on cic2 + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGUA_MSG := + mw_CGUA})) + {TWait.stop;} + } + } + // expect CGUA Msg on cic2 first + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode2, { cGUA_MSG := + mw_CGUA})) + { + alt { // expect CGUA Msg on cic1 + [] IsupBiccP.receive (mw_BICC_MSG_ind(v_CallInstanceCode1, { cGUA_MSG := + mw_CGUA})) + {TWait.stop;} + } + } + } + f_IsupBicc_Post_CheckStates();// check signalling states and bearer connection states. + } + + + } //end function f_IsupBicc_Post_UGB1 + +} // end group SipIsup_ISUP_Postambles + +group SipIsup_ISUP_GeneralSteps +{ + // Wait for timeout + function f_IsupBicc_Wait(float timeoutValue) runs on IsupBiccComponent + { + v_Default := activate (a_IsupBicc_Def_Generic()); + + ProtocolTimer.start(timeoutValue); + alt + { + [] ProtocolTimer.timeout{}; + } + } + +}// end group SipIsup_ISUP_GeneralSteps + +}// end group behaviour +}//end module SipIsup_ISUP_Steps diff --git a/IsupAts/SipIsup_ISUP_TCFunctions.ttcn b/IsupAts/SipIsup_ISUP_TCFunctions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ccd6e8e5e1ebacf96da69506e13e633bacd3e8a7 --- /dev/null +++ b/IsupAts/SipIsup_ISUP_TCFunctions.ttcn @@ -0,0 +1,61 @@ +/* + * @author STF 368 + * @version $Id$ + * @desc This module provides the ISUP-side test case functions for SIP/ISUP interworking. + * Supplementary services: + * 186 005 - 2 TIP/TIR + * 186 016 - 2 CUG + * 186 017 - 2 ACR/CB + * 186 018 - 2 MCID + * Some TC functions are parameterized according to the VA-Tables (variants) + * defined in the test purposes. +*/ +module SipIsup_ISUP_TCFunctions { + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + import from LibCommon_TextStrings all; + + //AtsCommon + import from SipIsup_TestSystem all; + import from SipIsup_PIXITS all; + + //AtsIsup + import from SipIsup_ISUP_ParamTypes all; + import from SipIsup_ISUP_MsgTypes all; + import from SipIsup_ISUP_Constants all; + import from SipIsup_ISUP_ModuleParams all; + import from SipIsup_ISUP_ParamTemplates all; + import from SipIsup_ISUP_MsgTemplates all; + import from SipIsup_ISUP_Steps all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + + function f_Reset_Circuits() runs on IsupBiccComponent + { + + // Perform preamble + f_IsupBicc_Pre0(); + + /*Send default RSC message*/ + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { rSC_MSG := m_RSC}, v_SLS)); + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode2, { rSC_MSG := m_RSC}, v_SLS)); + + }//End f_Reset_Circuits + + function f_Reset_Groups() runs on IsupBiccComponent + { + + // Perform preamble + f_IsupBicc_Pre0(); + + /*Send default RSC message*/ + IsupBiccP.send (m_ISUP_MSG_req(v_CircuitIdentityCode1, { gRS_MSG := m_GRS}, v_SLS)); + + }//End f_Reset_Groups + +} // end module SipIsup_ISUP_TCFunctions diff --git a/LibCommon/LibCommon_AbstractData.ttcn b/LibCommon/LibCommon_AbstractData.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..db7b2ebf20f392e0663e6ba5f4739578c3a67ee8 --- /dev/null +++ b/LibCommon/LibCommon_AbstractData.ttcn @@ -0,0 +1,133 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of functions for abstract data types which may be + * useful in the implementation of any TTCN-3 test suite. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_AbstractData { + + //LibCommon + import from LibCommon_BasicTypesAndValues { type UInt } ; + + group stringStack { + + type record StringStack { + UInt stackSize, + StringItems stringItems + } + + type record of charstring StringItems; + + /* + * @desc Constant which can be used to initialize a + * string stack. A string stack can be intialized by + * assigning this value in the variable declariation. + * An alternative is to call the initlialization function. + * @see LibCommon_AbstractData.f_initStringStack + * @remark Note that an initlialized stack stack is not + * necessarily the same as an empty string stack. + * An empty tring stack as 0 zero elements but may + * have a non empty list of (empty) items. + */ + const StringStack c_initStringStack := { 0, {} } + + /* + * @desc The invocation of this function will initialize + * a string stack to an empty string stack. + * An alternative is to initlialize a stack using a + * constant value. + * @see LibCommon_AbstractData.c_initStringStack + * @param p_stack String stack to be initialized. + */ + function f_initStringStack ( inout StringStack p_stack ) { + p_stack := c_initStringStack + } + + /* + * @desc This function checks if a string stack is + * empty. + * @param p_stack String stack to be checked. + * @return true if empty, false if not empty + */ + function f_isStringStackEmpty ( inout StringStack p_stack ) + return boolean { + if ( p_stack.stackSize == 0 ) {return true} + else {return false} + } + + /* + * @desc This function checks if a given string is on the + * string stack. + * @param p_stack String stack where the string item + * is to be looked for. + * @param p_item String to be checked for. + * @return true if found, false if not found + */ + function f_isItemOnStringStack ( inout StringStack p_stack, + in charstring p_item ) + return boolean { + var integer i; + for (i := 0; i < p_stack.stackSize; i := i+1 ) { + if ( p_stack.stringItems[i] == p_item ) { + return true; + } + } + return false; + } + + /* + * @desc This function checks if a given string is on the + * string stack. + * @param p_stack String stack where the string item + * is to be looked for. + * @param p_item String item on top of the stack. + * @return false if stack is empty, true otherwise + */ + function f_peekStringStackTop ( inout StringStack p_stack, + out charstring p_item) + return boolean { + if (p_stack.stackSize == 0) { + p_item := "f_peekTopStringStack: String stack is empty!"; + return false; + } + p_item := p_stack.stringItems[p_stack.stackSize-1]; + return true; + } + + + /* + * @desc This function puts a string to the top of a + * string stack. + * @param p_stack String stack to which the string item + * is to be added. + * @param p_item String to be added. + */ + function f_pushStringStack ( inout StringStack p_stack, + in charstring p_item ) { + p_stack.stringItems[p_stack.stackSize] := p_item; + p_stack.stackSize := p_stack.stackSize + 1; + } + + /* + * @desc This function removes the string from the top of a + * string stack. If the stack is empty nothing is done + * @param p_stack String stack from which the top string item + * is to be removed. + */ + function f_popStringStack ( inout StringStack p_stack ) { + if ( p_stack.stackSize > 0 ) { + p_stack.stackSize := p_stack.stackSize-1; + // "delete" top stack item to be safe + // Note: due to record of index the "old top" is size-1! + p_stack.stringItems[p_stack.stackSize] := ""; + } + } + + } // end group stringStack + +} // end module LibCommon_AbstractData diff --git a/LibCommon/LibCommon_BasicTypesAndValues.ttcn b/LibCommon/LibCommon_BasicTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ce87eca0e6fbdadf16bafcdeaf42eefd46296940 --- /dev/null +++ b/LibCommon/LibCommon_BasicTypesAndValues.ttcn @@ -0,0 +1,220 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of basic type and value definitions which may be + * useful in the implementation of any TTCN-3 test suite.

+ * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_BasicTypesAndValues { + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group unsignedIntegerDefintions { + + const integer c_uInt1Max := 1; + const integer c_uInt2Max := 3; + const integer c_uInt3Max := 7; + const integer c_uInt4Max := 15; + const integer c_uInt5Max := 31; + const integer c_uInt6Max := 63; + const integer c_uInt7Max := 127; + const integer c_uInt8Max := 255; + const integer c_uInt9Max := 511; + const integer c_uInt10Max := 1023; + const integer c_uInt11Max := 2047; + const integer c_uInt12Max := 4095; + const integer c_uInt13Max := 8191; + const integer c_uInt14Max := 16383; + const integer c_uInt15Max := 32767; + const integer c_uInt16Max := 65535; + const integer c_uInt17Max := 131071; + const integer c_uInt18Max := 262143; + const integer c_uInt19Max := 524287; + const integer c_uInt20Max := 1048575; + const integer c_uInt21Max := 2097151; + const integer c_uInt22Max := 4194303; + const integer c_uInt23Max := 8388607; + const integer c_uInt24Max := 16777215; + const integer c_uInt25Max := 33554431; + const integer c_uInt26Max := 67108863; + const integer c_uInt27Max := 134217727; + const integer c_uInt28Max := 268435456; + const integer c_uInt29Max := 536870911; + const integer c_uInt30Max := 1073741823; + const integer c_uInt31Max := 2147483647; +// const integer c_uInt32Max := 4294967295; + +// const integer c_uInt48Max := 281474976710655; + const integer c_uInt48Max := 2147483647; + + type integer UInt (0 .. infinity); + type integer UInt1 (0 .. c_uInt1Max) with {encode "length=1;"}; + type integer UInt2 (0 .. c_uInt2Max) with {encode "length=2"}; + type integer UInt3 (0 .. c_uInt3Max) with {encode "length=3"}; + type integer UInt4 (0 .. c_uInt4Max) with {encode "length=4"}; + type integer UInt5 (0 .. c_uInt5Max) with {encode "length=5"}; + type integer UInt6 (0 .. c_uInt6Max) with {encode "length=6"}; + type integer UInt7 (0 .. c_uInt7Max) with {encode "length=7"}; + type integer UInt8 (0 .. c_uInt8Max) with {encode "length=8"}; + type integer UInt9 (0 .. c_uInt9Max) with {encode "length=9"}; + type integer UInt10 (0 .. c_uInt10Max) with {encode "length=10"}; + type integer UInt11 (0 .. c_uInt11Max) with {encode "length=11"}; + type integer UInt12 (0 .. c_uInt12Max) with {encode "length=12"}; + type integer UInt13 (0 .. c_uInt13Max) with {encode "length=13"}; + type integer UInt14 (0 .. c_uInt14Max) with {encode "length=14"}; + type integer UInt15 (0 .. c_uInt15Max) with {encode "length=15"}; + type integer UInt16 (0 .. c_uInt16Max) with {encode "length=16"}; + type integer UInt17 (0 .. c_uInt17Max) with {encode "length=17"}; + type integer UInt18 (0 .. c_uInt18Max) with {encode "length=18"}; + type integer UInt19 (0 .. c_uInt19Max) with {encode "length=19"}; + type integer UInt20 (0 .. c_uInt20Max) with {encode "length=20"}; + type integer UInt21 (0 .. c_uInt21Max) with {encode "length=21"}; + type integer UInt22 (0 .. c_uInt22Max) with {encode "length=22"}; + type integer UInt23 (0 .. c_uInt23Max) with {encode "length=23"}; + type integer UInt24 (0 .. c_uInt24Max) with {encode "length=24"}; + type integer UInt25 (0 .. c_uInt25Max) with {encode "length=25"}; + type integer UInt26 (0 .. c_uInt26Max) with {encode "length=26"}; + type integer UInt27 (0 .. c_uInt27Max) with {encode "length=27"}; + type integer UInt28 (0 .. c_uInt28Max) with {encode "length=28"}; + type integer UInt29 (0 .. c_uInt29Max) with {encode "length=29"}; + type integer UInt30 (0 .. c_uInt30Max) with {encode "length=30"}; + type integer UInt31 (0 .. c_uInt31Max) with {encode "length=31"}; +// type integer UInt32 (0 .. c_uInt32Max) with {encode "length=32"}; + type integer UInt32 (0 .. c_uInt31Max) with {encode "length=32"}; + +// type integer UInt48 (0 .. c_uInt48Max) with {encode "length=48"}; + type integer UInt48 (0 .. c_uInt31Max) with {encode "length=32"}; + + } // end group unsignedIntegerDefintions + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group signedIntegerDefintions { + + const integer c_int1Min := -1; + const integer c_int1Max := 0; + const integer c_int2Min := -2; + const integer c_int2Max := 1; + const integer c_int3Min := -4; + const integer c_int3Max := 3; + const integer c_int4Min := -8; + const integer c_int4Max := 7; + const integer c_int5Min := -16; + const integer c_int5Max := 15; + const integer c_int6Min := -32; + const integer c_int6Max := 31; + const integer c_int7Min := -64; + const integer c_int7Max := 63; + const integer c_int8Min := -128; + const integer c_int8Max := 127; + const integer c_int9Min := -256; + const integer c_int9Max := 255; + const integer c_int10Min := -512; + const integer c_int10Max := 511; + const integer c_int11Min := -1024; + const integer c_int11Max := 1023; + const integer c_int12Min := -2048; + const integer c_int12Max := 2047; + const integer c_int13Min := -4096; + const integer c_int13Max := 4095; + const integer c_int14Min := -8192; + const integer c_int14Max := 8191; + const integer c_int15Min := -16384; + const integer c_int15Max := 16383; + const integer c_int16Min := -32768; + const integer c_int16Max := 32767; + const integer c_int17Min := -65536; + const integer c_int17Max := 65535; + const integer c_int18Min := -131072; + const integer c_int18Max := 131071; + const integer c_int19Min := -262144; + const integer c_int19Max := 262143; + const integer c_int20Min := -524288; + const integer c_int20Max := 524287; + const integer c_int21Min := -1048576; + const integer c_int21Max := 1048575; + const integer c_int22Min := -2097152; + const integer c_int22Max := 2097151; + const integer c_int23Min := -4194304; + const integer c_int23Max := 4194303; + const integer c_int24Min := -8388608; + const integer c_int24Max := 8388607; + const integer c_int25Min := -16777216; + const integer c_int25Max := 16777215; + const integer c_int26Min := -33554432; + const integer c_int26Max := 33554431; + const integer c_int27Min := -67108864; + const integer c_int27Max := 67108863; + const integer c_int28Min := -134217728; + const integer c_int28Max := 134217727; + const integer c_int29Min := -268435456; + const integer c_int29Max := 268435456; + const integer c_int30Min := -536870912; + const integer c_int30Max := 536870911; + const integer c_int31Min := -1073741824; + const integer c_int31Max := 1073741823; +// const integer c_int32Min := -2147483648; + const integer c_int32Max := 2147483647; + + type integer Int; + type integer Int1 (c_int1Min .. c_int1Max) with { encode "length=1"}; + type integer Int2 (c_int2Min .. c_int2Max) with { encode "length=2"}; + type integer Int3 (c_int3Min .. c_int3Max) with { encode "length=3"}; + type integer Int4 (c_int4Min .. c_int4Max) with { encode "length=4"}; + type integer Int5 (c_int5Min .. c_int5Max) with { encode "length=5"}; + type integer Int6 (c_int6Min .. c_int6Max) with { encode "length=6"}; + type integer Int7 (c_int7Min .. c_int7Max) with { encode "length=7"}; + type integer Int8 (c_int8Min .. c_int8Max) with { encode "length=8"}; + type integer Int9 (c_int9Min .. c_int9Max) with { encode "length=9"}; + type integer Int10 (c_int10Min .. c_int10Max) with { encode "length=10"}; + type integer Int11 (c_int11Min .. c_int11Max) with { encode "length=11"}; + type integer Int12 (c_int12Min .. c_int12Max) with { encode "length=12"}; + type integer Int13 (c_int13Min .. c_int13Max) with { encode "length=13"}; + type integer Int14 (c_int14Min .. c_int14Max) with { encode "length=14"}; + type integer Int15 (c_int15Min .. c_int15Max) with { encode "length=15"}; + type integer Int16 (c_int16Min .. c_int16Max) with { encode "length=16"}; + type integer Int17 (c_int17Min .. c_int17Max) with { encode "length=17"}; + type integer Int18 (c_int18Min .. c_int18Max) with { encode "length=18"}; + type integer Int19 (c_int19Min .. c_int19Max) with { encode "length=19"}; + type integer Int20 (c_int20Min .. c_int20Max) with { encode "length=20"}; + type integer Int21 (c_int21Min .. c_int21Max) with { encode "length=21"}; + type integer Int22 (c_int22Min .. c_int22Max) with { encode "length=22"}; + type integer Int23 (c_int23Min .. c_int23Max) with { encode "length=23"}; + type integer Int24 (c_int24Min .. c_int24Max) with { encode "length=24"}; + type integer Int25 (c_int25Min .. c_int25Max) with { encode "length=25"}; + type integer Int26 (c_int26Min .. c_int26Max) with { encode "length=26"}; + type integer Int27 (c_int27Min .. c_int27Max) with { encode "length=27"}; + type integer Int28 (c_int28Min .. c_int28Max) with { encode "length=28"}; + type integer Int29 (c_int29Min .. c_int29Max) with { encode "length=29"}; + type integer Int30 (c_int30Min .. c_int30Max) with { encode "length=30"}; + type integer Int31 (c_int31Min .. c_int31Max) with { encode "length=31"}; +// type integer Int32 (c_int32Min .. c_int32Max) with { encode "length=32"}; + + } // end group signedIntegerDefintions + + /* + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group booleanDefintions { + + type boolean Bool1 with {encode "length=1"}; + type boolean Bool2 with {encode "length=2"}; + type boolean Bool3 with {encode "length=3"}; + type boolean Bool4 with {encode "length=4"}; + type boolean Bool5 with {encode "length=5"}; + type boolean Bool6 with {encode "length=6"}; + type boolean Bool7 with {encode "length=7"}; + type boolean Bool8 with {encode "length=8"}; + + } // end group booleanDefintions + +} // end module LibCommon_BasicTypesAndValues diff --git a/LibCommon/LibCommon_DataStrings.ttcn b/LibCommon/LibCommon_DataStrings.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..34bb3e32dcddd179035daf38975b8cb75133ada8 --- /dev/null +++ b/LibCommon/LibCommon_DataStrings.ttcn @@ -0,0 +1,100 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of data string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Data string" refers to TTCN-3 hexstring, octetstring + * and bitstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_DataStrings { + + /* + * @remark Number in name indicates string length in number of + * _bits_ + */ + group bitStringSubTypes { + + type bitstring Bit1 length(1) with {encode "1 bit"}; + type bitstring Bit2 length(2) with {encode "2 bits"}; + type bitstring Bit3 length(3) with {encode "3 bits"}; + type bitstring Bit4 length(4) with {encode "4 bits"}; + type bitstring Bit5 length(5) with {encode "5 bits"}; + type bitstring Bit6 length(6) with {encode "6 bits"}; + type bitstring Bit7 length(7) with {encode "7 bits"}; + type bitstring Bit8 length(8) with {encode "8 bits"}; + type bitstring Bit9 length(9) with {encode "9 bits"}; + type bitstring Bit10 length(10) with {encode "10 bits"}; + type bitstring Bit11 length(11) with {encode "11 bits"}; + type bitstring Bit12 length(12) with {encode "12 bits"}; + type bitstring Bit13 length(13) with {encode "13 bits"}; + type bitstring Bit14 length(14) with {encode "14 bits"}; + type bitstring Bit15 length(15) with {encode "15 bits"}; + type bitstring Bit16 length(16) with {encode "16 bits"}; + type bitstring Bit17 length(17) with {encode "17 bits"}; + type bitstring Bit18 length(18) with {encode "18 bits"}; + type bitstring Bit19 length(19) with {encode "19 bits"}; + type bitstring Bit20 length(20) with {encode "20 bits"}; + type bitstring Bit21 length(21) with {encode "21 bits"}; + type bitstring Bit22 length(22) with {encode "22 bits"}; + type bitstring Bit23 length(23) with {encode "23 bits"}; + type bitstring Bit24 length(24) with {encode "24 bits"}; + type bitstring Bit25 length(25) with {encode "25 bits"}; + type bitstring Bit26 length(26) with {encode "26 bits"}; + type bitstring Bit27 length(27) with {encode "27 bits"}; + type bitstring Bit28 length(28) with {encode "28 bits"}; + type bitstring Bit29 length(29) with {encode "29 bits"}; + type bitstring Bit30 length(30) with {encode "30 bits"}; + type bitstring Bit31 length(31) with {encode "31 bits"}; + type bitstring Bit32 length(32) with {encode "32 bits"}; + + type bitstring Bit48 length(48) with {encode "48 bits"}; + + type bitstring Bit64 length(64) with {encode "64 bits"}; + + } // end group bitStringSubTypes + + /* + * @remark Number in name indicates string length in number of + * _octets_ + */ + group octetStringSubTypes { + + type octetstring Oct1 length(1) with {encode "1 bytes"}; + type octetstring Oct2 length(2) with {encode "2 bytes"}; + type octetstring Oct3 length(3) with {encode "3 bytes"}; + type octetstring Oct4 length(4) with {encode "4 bytes"}; + type octetstring Oct5 length(5) with {encode "5 bytes"}; + type octetstring Oct6 length(6) with {encode "6 bytes"}; + type octetstring Oct7 length(7) with {encode "7 bytes"}; + type octetstring Oct8 length(8) with {encode "8 bytes"}; + type octetstring Oct9 length(9) with {encode "9 bytes"}; + type octetstring Oct10 length(10) with {encode "10 bytes"}; + type octetstring Oct11 length(11) with {encode "11 bytes"}; + type octetstring Oct12 length(12) with {encode "12 bytes"}; + type octetstring Oct13 length(13) with {encode "13 bytes"}; + type octetstring Oct14 length(14) with {encode "14 bytes"}; + type octetstring Oct15 length(15) with {encode "15 bytes"}; + type octetstring Oct16 length(16) with {encode "16 bytes"}; + + type octetstring Oct128 length(128) with {encode "128 bytes"}; +// Added AF + type octetstring Oct80 length(80) with {encode "80 bytes"}; + type octetstring Oct160 length(160) with {encode "160 bytes"}; + type octetstring Oct320 length(320) with {encode "320 bytes"}; + type octetstring Oct640 length(640) with {encode "640 bytes"}; + type octetstring Oct1280 length(1280) with {encode "1280 bytes"}; + + type octetstring Oct1to15 length(1..15) with {encode "1 to 15 bytes"}; + type octetstring Oct6to15 length(6..15) with {encode "6 to 15 bytes"}; + type octetstring Oct1to128 length(1..128) with {encode "1 to 128 bytes"}; + type octetstring Oct1to254 length(1..254) with {encode "1 to 254 bytes"}; + type octetstring Oct1to255 length(1..255) with {encode "1 to 255 bytes"}; + + } // end group octetStringSubTypes + +} // end module LibCommon_DataStrings diff --git a/LibCommon/LibCommon_Sync.ttcn b/LibCommon/LibCommon_Sync.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..0c86eabe8fc4d28987388d2e5ea1e5bfcd544942 --- /dev/null +++ b/LibCommon/LibCommon_Sync.ttcn @@ -0,0 +1,1003 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc This module implements _one_ generic synchronization mechanism + * for TTCN-3 test cases with one or more test components. + * Key concept is here that one test component acts as a + * synchronization server which listens and triggers one or more + * synchronization clients. It is recomended to use the MTC always as + * the synchronization server but in theory also a PTC can act as such + * a server.

+ * This synchronization is used by calling a library function on + * the server test component to wait for a desired amount of clients + * to notify the server that they have reached a specific synchronization + * point. Each client test component must call another library + * function to perform this notification.

+ * In the event that a client is not able to reach a synchronization + * point the server sends out a signal to all clients to abort the + * test case. This signal is a STOP message which can be caught by + * a test component default which in turn can then run a proper + * shut down behavior based on the current state of the test + * component.

+ * Note that this synchronization mechanism can also be used + * in a special mode called "self synchronization" when a test case + * only has one test component. Here, the test component in essence + * acts as a server and client at the same time. The main benefit of + * using self synchoronization is that the same shutdown mechanisms + * can also be reused fomr the multi component test cases.

+ * This module contains a lot of TTCN-3 definitions. It has been + * structured into tree main groups to help the user to identify + * quickly relevant TTCN-3 definitions. For rookie users of this + * library basicUserRelevantDefinitions should offer all the needed + * definitions. Advanced users can consider use of definitions in + * advancedUserRelevantDefinitions. Finally, libraryInternalDefinitions + * are definitions which are required for the library to work + * properly but do not need to be used in your code. Remember that + * the main motiviation of this sychronization library is to offer + * are _simple_ user interface. Practice has shown that when writing + * actual test component behavior _only a handful_ of functions + * usually wind up being used! Also check the sync library examples + * module for example uses of this sync library.

+ * The invocation of the sync lib functions is also closely tied + * to the verdict control functions which should also be reviewed + * prior to using this library.

+ * This module has been derived from EtsiLibCommon_Synchronization + * which was created in ETSIs STF256/276. It has been kept + * intentionally separate to avoid conflicts with future ETSI + * test suite releases. + * @see LibCommon_Sync.basicUserRelevantDefinitions + * @see LibCommon_Sync.advancedUserRelevantDefinitions + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ +module LibCommon_Sync { + + //LibCommon + import from LibCommon_BasicTypesAndValues { type UInt } ; + import from LibCommon_AbstractData all; + import from LibCommon_VerdictControl all; + + group basicUserRelevantDefinitions { + + group importantSyncTypeDefinitions { + + group compTypeRelated { + + /* + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case may - but does + * not have to - directly use this component type its + * runs on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ServerSyncComp { + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; + } + + /* + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync client + * component. The test component(s) which act as a + * sync client in a test case may - but do not have + * to - directly use this component type their runs + * on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ClientSyncComp { + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /* + * @desc This type is used to define any synchronization + * behavior which is relevant to non-concurrent test + * cases. + * Note that self synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + * Note also that this type is type compatible to the + * ClientSyncComp type so that shutdown altsteps from + * concurrent test cases can also be reused in single + * component test cases! + * @see LibCommon_Sync.ClientSyncComp + */ + type component SelfSyncComp { + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /* + * @desc This port type must be imported into test suites + * when defining test component types which are + * type compatible to a synchronization component + * type + * @see LibCommon_Sync.SelfSyncComp + * @see LibCommon_Sync.ServerSyncComp + * @see LibCommon_Sync.ClientSyncComp + */ + type port SyncPort message { inout SyncCmd } + + } // end compTypeRelated + + group standardSyncPointNames { + const charstring c_prDone := "preambleDone"; + const charstring c_tbDone := "testBodyDone"; + const charstring c_sync1 := "c_sync1"; + const charstring c_sync2 := "c_sync2"; + const charstring c_sync3 := "c_sync3"; + const charstring c_sync4 := "c_sync4"; + const charstring c_sync5 := "c_sync5"; + const charstring c_uPlane := "SyncAfterUPlaneCheck"; + const charstring c_Ringing := "Check ringing tone"; + + } + + } // end group importantSyncTypeDefinitions + + group syncCompTestConfiguration { + + /* @desc Calls self connect function if invoking + * component is the MTC or otherwise connects the client + * the server. This function allows to implement preambles + * in a way that they can be used by test components + * in both non-concurrent as well as concurrent test + * cases! + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_connect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.f_connect4ClientSync + */ + function f_connect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_connect4SelfSync(); + } else { + f_connect4ClientSync(); + } + } + + /* @desc Calls self connect function if the invoking + * component is the MTC or otherwise disconnects the client + * from the server. This function allows to implement + * postambles in a way that they can be used in both + * non-concurrent as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_disconnect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_disconnect4SelfSync + * @see LibCommon_Sync.f_disconnect4ClientSync + */ + function f_disconnect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_disconnect4SelfSync(); + } else { + f_disconnect4ClientSync(); + } + } + + } // end group syncCompTestConfiguration + + group syncFunctions { + + /* @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + * @return execution status + */ + function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); + } + f_serverWaitForAllClientsToStop(); + } + + /* @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * setd the verdict based on the specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdict + */ + function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdict(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdict(p_syncPoint, p_ret); + } + } + + /* @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + } + + } // end group syncFunctions + + group syncCompStateHandling { + + /* + * @desc This function updates the state (stack) of a + * sync client or self sync component. This stack is + * key in the shutdown handling of test components. + * It adds the new state name to the top of the + * sync component stack of states. + * The state will only be added in case of a current + * execution status of e_success. + * @param p_newSyncCompState Name of state which was attempted to be reached. + * @param p_ret Current behavior execution status + * @remark If the state of component changes this function must be + * _at least_ called from your test suite prior to f_selfSync + * or f_clientSync which is the only definite place for the + * shutdown default invocation! + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + */ + function f_addSyncCompState(in charstring p_newSyncCompState, + in FncRetCode p_ret) + runs on ClientSyncComp { + if ( p_ret == e_success ) { + if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { + log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); + } else { + f_pushStringStack(v_stateStack,p_newSyncCompState); + } + } + } // end function f_addSyncCompState + + /* + * @desc This function returns the top state on the sync + * state stack of a sync client or self sync + * component and removes it from the stack + * This function cna be used, e.g., in a while + * statement within a postamble or shutdown + * implementation + * @param p_item State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_getTopSyncCompState( out charstring p_state ) + runs on ClientSyncComp + return boolean { + if ( not f_peekStringStackTop(v_stateStack,p_state) ) { + p_state := "IDLE"; + return false; + } + f_popStringStack(v_stateStack); + return true; + } // end function f_getTopSyncCompState + + /* + * @desc This function removes the last state on the state stack + * of a sync client or self sync component. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_popSyncCompState() + runs on ClientSyncComp { + f_popStringStack(v_stateStack); + } // end function f_popSyncCompState + + /* + * @desc This function returns the top state on the sync state + * stack of a sync client or self sync component. It + * does not remove it from the stack + * This stack is key in the shutdown handling of test + * components. + * @param p_item State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_peekTopSyncCompState(out charstring p_state) + runs on ClientSyncComp + return boolean { + return f_peekStringStackTop(v_stateStack,p_state); + } // end function f_peekTopSyncCompState + + /* + * @desc This function checks if the sync state stack + * of a sync client or self sync component is empty. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_isSyncCompStateStackEmpty() + runs on ClientSyncComp + return boolean { + return f_isStringStackEmpty(v_stateStack); + } // end function f_isSyncCompStateStackEmpty + + } // end group syncCompStateHandling + + group exampleShutDownAltstep { + + /* @desc This is an example of a shutdown altstep which can be + * used as a "template" for a interface specific shutdown + * altstep or possily as a first temporary solution in + * test case development.

+ * This altstep shall be activated as a default as the + * first statement in each test case function which drives + * an interface, i.e., in MTC behavior of single component + * and in each client behavior of multi component test + * cases.
+ * The required behavior from this altstep is to:

+ * 1) expect the STOP either via the test component + * syncPort

+ * 2) upon its arrival it should shut down the SUT + * gracefully based on the current component state

+ * The current component state should have been + * previously kept uptodate from a test suite via the + * f_addSyncCompState function. This default will then be + * (automatically) invoked either from within f_selfSync + * or f_clientSync.
+ * Note that shutdown defaults can be written as + * _interface specific_ - they do not need to be test case + * or test component specific! See another example of a + * shutdown altstep in the sync library module. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_SyncExamples.a_exampleShutDown + * @remark Your application specific shutdown altstep + * implementation(s) should _not_ be defined in this + * module but as part of your test suite or application + * library. + */ + altstep a_dummyShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "x" ) { + // then do something + } else if ( v_state == "y" ) { + // then do something else + } + } // end while + f_disconnect4SelfOrClientSync(); + // unmap/disconnect more if needed + log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + } // end group exampleShutDownAltstep + + } // end group basicUserRelevantDefinitions + + group advancedUserRelevantDefinitions { + + group serverRelated { + + /* @desc Implements synchronization of "n" clients from server + * side. If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @return execution status + */ + function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) + runs on ServerSyncComp { + f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); + } + + /* @desc Handles synchronization of clients from server side. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @return execution status + */ + function f_serverSyncClientsTimed( in UInt p_NoOfClients, + in charstring p_syncId, + float p_execTimeLimit ) + runs on ServerSyncComp { + + var integer v_noOfRecvdSyncMsgs := 0; + var boolean v_stopClients := false; + var ClientSyncCompList v_clientRefs := {}; + var ClientSyncComp v_clientRef; + + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server now starting handling of next synchronization point ... ****") ; + } + tc_sync.start(p_execTimeLimit) ; + alt{ + [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; + v_stopClients := true; + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; + v_stopClients := true; + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; } + [] syncPort.receive(SyncCmd :? ) { + log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; + v_stopClients := true; } + [] any port.receive { + // leave it to be ok to receive anything else + // in case that the user has added any non-sync ports to + // his/her server component type definition! + } + [] tc_sync.timeout{ + log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); + v_stopClients := true; } + } //end alt + tc_sync.stop ; + if ( v_stopClients ) { + setverdict(inconc); + // then send out STOP sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerStop); + f_serverWaitForAllClientsToShutDown(); // function will never return! + } else { + setverdict(pass); + // then send out READY sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; + } + } + } // end function f_serverSyncClientsTimed + + /* + * @desc This function is intended only for use on the sync + * server component in concurrent TTCN-3 test cases. + * It waits for all components to finish execution within + * the PX_TSYNC_TIME_LIMIT. If a timeout occurs + * the server will stop all clients. + * This function sets the server component verdict. + */ + function f_serverWaitForAllClientsToStop() + runs on ServerSyncComp { + tc_sync.start; + alt { + [] all component.done { + tc_sync.stop; + log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; + } + [] tc_sync.timeout { + log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; + } + } // end alt + setverdict(pass); + stop; + } // end function f_serverWaitForAllClientsToStop + + } // end group serverRelated + + group clientRelated { + + /* @desc This function creates the connection needed to + * execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_connect4ClientSync() + runs on ClientSyncComp { + connect(self:syncPort, mtc:syncPort); + }// end function f_connect4ClientSync + + /* @desc This function removes the connection needed + * to execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_disconnect4ClientSync() + runs on ClientSyncComp { + disconnect(self:syncPort, mtc:syncPort); + }// end function f_disconnect4ClientSync + + /* @desc This function combines client verdict setting with its + * synchronization for use after or within a preamble + * implementation. + * Note that such preambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPreamble(in charstring p_syncId , + FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdictPreamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdict(in charstring p_syncId, + in FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdict(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function combines client verdict setting with its + * synchronization for use after or within a + * postamble implementation. + * Note that such prostambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPostamble(in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp { + f_setVerdictPostamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /* @desc This function handles synchronization of a sync client + * with the server. In case of successful execution it sends + * a READY message to the server and waits the READY back. + * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. + * In case of a non successful execution status it + * sends a STOP message to the server. + * In both cases the receipt of a STOP message or no + * response from the server it will trigger the shutdown + * default (if activated). + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_clientSendStop + * @return Updated execution status + */ + function f_clientSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp + return FncRetCode{ + + if (p_ret == e_success){ + syncPort.send(m_syncClientReady(p_syncId)); + tc_sync.start; + alt{ + [] syncPort.receive(m_syncServerReady(p_syncId)){ + tc_sync.stop ; } + [] tc_sync.timeout{ + log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); } // function will not return! + } //end alt + } //end if + else { + log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; + } + return e_success ; + + } // end function f_clientSync + + /* @desc This function can be used to request the shutdown a + * multi component test case _prior_ to reaching a + * synchronization point. It sends a STOP message to + * the sync server and awaits then the STOP from the server + * which will trigger the shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_clientSendStop() + runs on ClientSyncComp { + log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; + syncPort.send(m_syncClientStop) ; + tc_sync.start; + alt{ + [] tc_sync.timeout{ + log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // stop here if shutdown default does not stop + } + + } // end group clientRelated + + } // end group advancedUserRelevantDefinitions + + group otherSyncLibDefinitions { + + group syncLibModuleparams { + /* + * @desc Default time limit for a sync client to reach a + * synchronization point + */ + modulepar {float PX_TSYNC_TIME_LIMIT := 120.0} + + /* + * @desc Default time limit for a sync client to finish + * its execution of the shutdown default + */ + modulepar {float PX_TSHUT_DOWN_TIME_LIMIT := 120.0} + } + + group otherSyncLibTypes { + + type record of charstring SyncPointList; + + type record of ClientSyncComp ClientSyncCompList; + + } // end group otherSyncLibTypes + + group otherSelfSyncRelatedDefinitions { + + /* @desc This function creates the connection needed to + * execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_connect4SelfSync() + runs on SelfSyncComp { + connect(self:syncSendPort, self:syncPort); + }// end function f_connect4SelfSync + + /* @desc This function removes the connection needed + * to execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_disconnect4SelfSync() + runs on SelfSyncComp { + disconnect(self:syncSendPort, self:syncPort); + }// end function f_disconnect4SelfSync + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after and possibly in the test body + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSyncAndVerdict( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdict(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after the preamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPreamble( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function combines MTC verdict setting with self + * synchronization for use after the postamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPostamble( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /* @desc This function synchronizes a MTC with itself. In case + * of a non successful execution status it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @return Updated execution status + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp + return FncRetCode{ + if (p_ret != e_success){ + f_selfSyncStop() ; // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_selfSync: Successfully passed synchronization point. ****") ; + } + return e_success ; + }// end function f_selfSync + + /* @desc This function can be used to shut down a test case _prior_ + * to reaching a synchronization point. it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @see LibCommon_Sync.f_connect4SelfSync + */ + function f_selfSyncStop() + runs on SelfSyncComp { + + log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; + syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_selfSyncStop + + } // end group otherSelfSyncRelatedDefinitions + + /* + * @desc The sychronization protocol is conceptually based on + * named synchronization. Each synchronization point + * has it own specific synchronization message. This + * makes each synchronization unique, and allows, e.g., to + * ensure that a server synchronizes only clients which have + * reached the same synchronization point. + */ + group syncProtocolDefinition { + + type union SyncCmd { + ClientReady clientReady, + ServerReady serverReady, + ClientStop clientStop, + ServerStop serverStop + } + + type record ClientReady { + charstring syncPointId + } + + type record ServerReady { + charstring syncPointId + } + + type record ClientStop {} + + type record ServerStop {} + + } // end group syncProtocolDefinition + + group syncMessages { + template SyncCmd m_syncClientReady( template charstring p_syncId ) := { + clientReady := { p_syncId } + } + + template SyncCmd m_syncServerReady( template charstring p_syncId ) := { + serverReady := { p_syncId } + } + + template SyncCmd m_syncClientStop := { + clientStop := {} + } + + template SyncCmd m_syncServerStop := { + serverStop := {} + } + + } // end group syncMessages + + group otherSyncLibFunctions { + + /* + * @desc Makes server send a sync message to all known clients + * @param p_clientRefs List of client references to which the message is to be send + * @param p_syncCmd The actual synchronization message to be sent out + */ + function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, + in template SyncCmd p_syncCmd) + runs on ServerSyncComp { + var integer i:=0; + for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ + syncPort.send(p_syncCmd) to p_clientRefs[i]; + } + } // end function f_serverSendToAllClients + + /* + * @desc This function is intended only for use on server in concurrent + * TTCN-3 test cases. It waits for all components to shut down + * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs + * it aborts the test case (no matter how far clients got with their + * shutdown). + * This function sets the server verdict. + */ + function f_serverWaitForAllClientsToShutDown() + runs on ServerSyncComp { + + tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); + alt { + [] all component.done { + tc_shutDown.stop; + log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; + } + [] tc_shutDown.timeout { + log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; + } + } // end alt + // cover case that shut down default is NOT activated + setverdict(inconc); + mtc.stop; + } // end function f_serverWaitForAllClientsToShutDown + + } // end group otherSyncLibFunctions + + } // end group otherSyncLibDefinitions + +} // end module LibCommon_Sync diff --git a/LibCommon/LibCommon_SyncExamples.ttcn b/LibCommon/LibCommon_SyncExamples.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..19360b89acc04b0ae9bfdd033c86af6217154792 --- /dev/null +++ b/LibCommon/LibCommon_SyncExamples.ttcn @@ -0,0 +1,794 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc This module provides some examples on how the SyncLib + * can be used in the specification of testcases. This module + * is only intended to serve as an (executable) example but should + * or does not need to be included in any test suite which uses + * this synchronization mechanism!

+ * The testcases illustrate how a handful of basic synchronization + * functions can be used to implement synchronization and how they + * behave in different execution scenarios. Note that there are + * a number of additional functions offered by this sync library + * which are available for use. This is only a "starter".

+ * The examples show use of synchronization as well as the use of + * the synchronization component state to write highly reusable + * component shut down mechanisms. It uses heavily the concepts + * of the verdict control library which is to avoid setting a + * test component verdict in behavior directly but to use a return + * code instead and only set the verdict as part of the + * synchronization. Only avoiding of the use of verdict allows + * again an implementation of truly reusable behavior.

+ * Regarding the reuse it would have been possible implement the + * test suite in a much more modular way, e.g,. isolate pre- and + * postambles in separate functions and resue them in different + * test cases ... We have not done this here to keep the examples + * more self contained. We however strongly advise users to (re)use + * functional decomposition much more heavily in their own test + * case implementations!

+ * Note that these test cases are executable as long as you have + * any or a dummy SUT Adapter implementation, a Platform Adapter + * which implements some concept of time, as well as any kind of + * codec to en/decode synchronization messages between test + * components. Feel free to execute this test cases and see the + * execution logs to see how the synchronization was handled at + * run-time. + */ +module LibCommon_SyncExamples { + + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + import from LibCommon_AbstractData all; +// import from LibCommon_VerdictControl { type FncRetCode; function f_setVerdictPostamble }; +// import from LibCommon_AbstractData { type StringStack; const c_initStringStack}; + + group exampleTestSystem { + + /* + * @desc Test component types in a test suite which uses the + * LibCommon_Sync function must - no matter if used in single + * or multi component test cases by type compatible to one of + * the sync library component type definitions. + * It is safest to define test components to be type compatible + * to the SelfSyncComp type. That way components can use self + * as well as client sync functions. + */ + type component ExampleComp + { + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack:= c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + + // here could follow additional port, variable, + // and timer definitions of any kind + } + + /* + * @desc There are no requirements upon the system component + * type definition by the LibCommon_Sync + */ + type component ExampleSystemComp + { + // here could be port, variable, and + // timer definitions of any kind + // this example system component does not + // contain any since it does not test any SUT + } + + } + + /* @desc This is an example of a shutdown altstep which handles + * the proper shutdown of our "example" interface. These + * actions of course only take place if the test case maintains + * its sync component state. See the referenced test cases for + * examples. Note this shutdown is a generic one and works for any + * test component which use the "example" interface. + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndErrorWithCompState + */ + altstep a_exampleShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_exampleShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "State A" ) { + log("**** a_exampleShutDown: ""Undoing"" State A ... ****"); + } else if ( v_state == "State B" ) { + log("**** a_exampleShutDown: ""Undoing"" State B ... ****"); + } else if ( v_state == "State C" ) { + log("**** a_exampleShutDown: ""Undoing"" State C ... ****"); + } + } // end while + f_disconnect4SelfOrClientSync(); + // Your test suite may require more unmappings/disconnections here + log("**** a_exampleShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + /* + * @desc Self synchronization can be used if there is only one + * test component in a test case. + */ + group selfSyncTestCases { + + /* + * @desc This test case is a simple scenario where everything + * goes ok. The dummy default is activated to catch + * scenarios where things do not go well.

+ * All log statements in this test case statement will + * be printed during its execution. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The final test case verdict is pass. + * @see LibCommon_SyncExamples.tc_selfSyncPreambleError + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyTimeout + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_selfSyncOk() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncOk + + /* + * @desc This test case shows how the LibCommon_Sync handles + * an error in a preamble.

+ * Only the preamble log statement will be printed. + * The error in the premable will trigger the sending of + * a STOP sync message which in turn will trigger the + * activated dummy shutdown.

+ * The synchronization function will report the failure + * to reach the first sync point and set the component + * verdict to fail.After handling shutdown the sync + * library will terminate the test component (and therefore + * also the test case).

+ * The final test case verdict is inconclusive since the + * error occured in the preamble (and the test body has not yet + * been executed). The verdict would be fail in case + * f_selfOrClientSyncAndVerdict would have been used instead + * of f_selfOrClientSyncAndVerdictPR for preamble + * synchronization. + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdictPR + */ + testcase tc_selfSyncPreambleError() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing preamble with error ****+"); + v_ret := e_error; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncPreambleError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase selfSyncPreambleError + + /* + * @desc This test case shows how the LibCommon_Sync handles + * a timeout in a test body.

+ * Here the postamble log statement will not be printed. + * The first sync function invocation will print the successful + * reaching of the preamble sync point and set the verdict + * to pass.

+ * The timeout will cause the second sync invocation to set the + * component verdict to inconclusive, report the faliure to + * reach the second sync point, send a STOP message. Again the + * activated dummy default will catch this sync message + * and shut down the test component and stop the test case.

+ * The final test case verdict is inconc. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_selfSyncTestBodyTimeout() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing test body with timeout ****+"); + v_ret := e_timeout; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncTestBodyTimeout: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncTestBodyTimeout + + /* + * @desc This test case shows how sync component state functions + * can be used in conjunction with an "example" shutdown + * default. Note the default used here is not the + * dummy but an example shutdown!

+ * The preamble passes but an an error occurs in the test body. + * Therefore only the postamble log statement will not + * be printed since the shutdown default catches during the test + * body sycnhronization.

+ * During the execution the preamble is assumed to advance the + * component state from an "IDLE" state to "State A", a + * successfull execution of the test body would then advance it + * to "State B" , and the postamble would return the + * component to the "IDLE" state. Note however that "State B" + * is never added since the execution of the test body is _not_ + * successful!

+ * The final test case verdict is fail. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_popSyncCompState + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.a_exampleShutDown + */ + testcase tc_selfSyncTestBodyErrorWithCompState() + runs on ExampleComp + system ExampleSystemComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_tbDone, v_ret); + + // implement test body behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing test body with error ****+"); + v_ret := e_error; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** tc_selfSyncTestBodyErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end testcase tc_selfSyncTestBodyErrorWithCompState + + } // end group selfSyncTestCases + + /* + * @desc Regular synchronization can be used if there is more than one + * test component in a test case. Here, the MTC should preferably only + * act as the sync server, i.e., only PTCs actually test interfaces. + * This group focuses on test cases with a MTC and 2 PTCs which has + * some "extra support" in sync library as this configuration occurs + * quite frequently (at least in protocol testing). + */ + group twoCompSyncTestCases { + + group twoCompSyncOkTestCase { + + /* + * @desc This test case is a simple scenario where everything + * goes ok. The dummy default is activated to catch + * scenarios where things do not go well.

+ * All log statements for both PTCs will be printed. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The MTC acts here only as the sync server. It uses the most + * condensed for of specifying server sync behavior for 2 + * components, i.e., f_serverSync2ClientsAndStop(). The next + * test case will show a the same behavior using 4 smaller + * functions invocations.

+ * The final test case verdict is pass. + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndError + * @see LibCommon_Sync.f_serverSync2ClientsAndStop + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncOk() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOk()); + v_ptcBRef.start(f_PTCB_twoCompSyncOk()); + // synchronize both PTCs on these 2 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOk + + function f_PTCB_twoCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOk + + } // end group twoCompSyncOkTestCase + + group twoCompSyncOkAndErrorTestCase { + + /* + * @desc In this scenario PTC A behaves ok but an error occurs + * in the postamble of PTC B. So the test case passes + * successfully through the first two sync points but then + * PTC B the error return value causes PTC B to request the + * stopping of the test case from the sync server, i.e., + * the MTC. The synchronization server reacts to this by + * sending a STOP message (within the sync function) which + * then causes BOTH PTCs to execute their dummy shutdown + * default. Note that use of a proper shutdown default is + * discussed in a later example.

+ * Note that still all log statements of both PTCs will be + * printed since the error occurs within the postmable! + * Note that the MTC uses here now three separate sync + * function and then a function to wait for components to + * finish. Nevertheless these calls are equivalent to the + * single function call in the previous test case. + * The functions used here however are more flexible, i.e., + * allow to specify the time to wait for sync messages from + * the server, as well as the number of clients to be + * synchronized.

+ * The final test case verdict is inconclusive since the + * error occurs in the PTC B postamble (so its test body + * has been executed successfully). The verdict would be + * fail in case f_selfOrClientSyncAndVerdict would have + * been used instead of f_selfOrClientSyncAndVerdictPR + * for postamble synchronization. + * @see LibCommon_SyncExamples.tc_twoCompSyncOk + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndErrorWithCompState + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdictPR + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncOkAndError() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOkAndError()); + v_ptcBRef.start(f_PTCB_twoCompSyncOkAndError()); + // synchronize both PTCs on these sychronization points + f_serverSyncClientsTimed(2, c_prDone, PX_TSYNC_TIME_LIMIT); + f_serverSyncClientsTimed(2, c_tbDone, PX_TSYNC_TIME_LIMIT); + // then wait for them to stop + f_serverWaitForAllClientsToStop(); + } + + function f_PTCA_twoCompSyncOkAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOkAndError + + function f_PTCB_twoCompSyncOkAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncOkAndError: Executing postamble with error ****+"); + v_ret := e_error; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOkAndError + + } // end group twoCompSyncOkAndErrorTestCase + + group twoCompSyncErrorAndErrorTestCase { + + /* + * @desc In this scenario PTC A has a problem in the test body and + * PTC B in its postamble. So the test case passes + * successfully through the first sync point but then + * PTC A's error return value causes PTC A to request the + * stopping of the test case from the sync server, i.e., + * the MTC. The sync server synchronization reacts to this + * by sending a STOP message (within the server synch function) + * which then causes BOTH PTCs to execute their shutdown + * default. Therefore PTC B never is shutdown before reaching + * its postamble.

+ * Log statements of both PTCs for the first two sync points + * will be printed since the first error occurs within the + * test body of PTC A. At the 2nd sync point PTCA will set + * its verdict to fail but PTC B still to pass.

+ * The final test case verdict is still a fail. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_twoCompSyncErrorAndError() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncErrorAndError()); + v_ptcBRef.start(f_PTCB_twoCompSyncErrorAndError()); + // synchronize both PTCs on these 3 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncErrorAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing test body with error ****+"); + v_ret := e_error; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncErrorAndError: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncErrorAndError + + function f_PTCB_twoCompSyncErrorAndError() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCB_twoCompSyncErrorAndError: Executing postamble with error ****+"); + v_ret := e_error; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncErrorAndError + + } // end group twoCompSyncErrorAndErrorTestCase + + group twoCompSyncOkAndErrorWithCompStateTestCase { + + /* + * @desc This scenario is similar to our previous example + * tc_twoCompSyncOkAndError. This time around however + * the error in PTC B occurs in the test body. Also + * each PTC keeps track of its state which is then used by + * the "example" shutdown default to shut down a component.

+ * Note that the shutdown is the same as used in a self sync + * test case - also that both PTCs use the same default but + * shut down in different ways since they reach different + * states. The reuse of a default by a PTC is only possible + * course if the test components test the same interface, + * e.g., use the same protocol to interatc with the SUT.

+ * Note that still all log statements of both PTCs will be + * printed since the error occurs within the postamble! + * The default for PTC B will only undo "State A" as it has + * failed to reach "State B". PTC A will undo both states.

+ * The final test case verdict is fail. + * @see LibCommon_SyncExamples.tc_twoCompSyncOkAndError + * @see LibCommon_SyncExamples.tc_selfSyncTestBodyErrorWithCompState + * @see LibCommon_SyncExamples.a_exampleShutDown + */ + testcase tc_twoCompSyncOkAndErrorWithCompState() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcARef, v_ptcBRef; + // create and start PTCs + v_ptcARef := ExampleComp.create; + v_ptcBRef := ExampleComp.create; + v_ptcARef.start(f_PTCA_twoCompSyncOkAndErrorWithCompState()); + v_ptcBRef.start(f_PTCB_twoCompSyncOkAndErrorWithCompState()); + // synchronize both PTCs on these 3 sychronization points + // and then wait for them to stop + f_serverSync2ClientsAndStop({c_prDone,c_tbDone}); + } + + function f_PTCA_twoCompSyncOkAndErrorWithCompState() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing test body successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCA_twoCompSyncOkAndErrorWithCompState + + function f_PTCB_twoCompSyncOkAndErrorWithCompState() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_exampleShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing preamble successfully ****+"); + v_ret := e_success; + f_addSyncCompState( "State A", v_ret ); + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing test body with error ****+"); + v_ret := e_error; + f_addSyncCompState( "State B", v_ret ); + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTCA_twoCompSyncOkAndErrorWithCompState: Executing postamble successfully ****+"); + v_ret := e_success; + f_popSyncCompState(); // Preamble "undid" State B + f_popSyncCompState(); // Preamble "undid" State A + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTCB_twoCompSyncOkAndErrorWithCompState + + } // end group twoCompSyncOkAndErrorWithCompStateTestCase + + } // end group twoCompSyncTestCases + + /* + * @desc Regular synchronization can be used if there is more than one + * test component in a test case. Here, the MTC should preferably only + * act as the sync server, i.e., only PTCs actually test interfaces. + * This group focuses on test cases with a MTC and any number of PTCs. + */ + group multiCompSyncTestCases { + + group multiCompSyncOk { + /* + * @desc This test case is a simple scenario where everything + * goes ok. It starts 5 components with identical behavior + * The dummy default is activated by each PTC to catch + * scenarios where things do not go well. The MTC acts + * again only as the sync server.

+ * All log statements for all PTCs will be printed. + * The synchronization functions will print the successful + * reaching of each sync point and each time set the verdict + * to pass.

+ * The final test case verdict is pass. + * @see LibCommon_Sync.a_dummyShutDown + */ + testcase tc_multiCompSyncOk() + runs on ServerSyncComp + system ExampleSystemComp { + var ExampleComp v_ptcRef[5]; + var integer i; + // create and start PTCs + for (i := 0; i < 5; i := i+1) { + v_ptcRef[i] := ExampleComp.create; + v_ptcRef[i].start(f_PTC_multiCompSyncOk()); + } + // synchronize all PTCs on these sychronization points + f_serverSyncClientsTimed(5, c_prDone, PX_TSYNC_TIME_LIMIT); + f_serverSyncClientsTimed(5, c_tbDone, PX_TSYNC_TIME_LIMIT); + // then wait for them to stop + f_serverWaitForAllClientsToStop(); + } + + function f_PTC_multiCompSyncOk() + runs on ExampleComp { + var FncRetCode v_ret; + var default v_def := activate(a_dummyShutDown()); + // establish test configuration + f_connect4SelfOrClientSync(); + + // implement preamble behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing preamble successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdictPR(c_prDone, v_ret); + + // implement test body behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing test body successfully ****+"); + v_ret := e_success; + f_selfOrClientSyncAndVerdict(c_tbDone, v_ret); + + // implement postamble behavior which should set return code + log("**** f_PTC_multiCompSyncOk: Executing postamble successfully ****+"); + v_ret := e_success; + f_setVerdictPostamble(v_ret); + + // tear down test configuration + f_disconnect4SelfOrClientSync(); + deactivate; + } // end function f_PTC_multiCompSyncOk + + } // end group multiCompSyncOk + + } // end group twoCompSyncTestCases + + control { + execute( tc_selfSyncOk() ); // verdict: PASS + execute( tc_selfSyncPreambleError() ); // verdict: INCONC + execute( tc_selfSyncTestBodyTimeout() ); // verdict: INCONC + execute( tc_selfSyncTestBodyErrorWithCompState() ); // verdict: ERROR + execute( tc_twoCompSyncOk() ); // verdict: PASS + execute( tc_twoCompSyncOkAndError() ); // verdict: INCONC + execute( tc_twoCompSyncErrorAndError() ); // verdict: ERROR + execute( tc_twoCompSyncOkAndErrorWithCompState() ); // verdict: ERROR + execute( tc_multiCompSyncOk() ); // verdict: PASS + } + +} // end module LibCommon_SyncExamples diff --git a/LibCommon/LibCommon_TextStrings.ttcn b/LibCommon/LibCommon_TextStrings.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..16b4fb1f5c0662589ec21e54ac134f1a1b33b64b --- /dev/null +++ b/LibCommon/LibCommon_TextStrings.ttcn @@ -0,0 +1,108 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of text string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Text string" refers to TTCN-3 charstring and universal + * charstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_TextStrings { + + /* + * @desc These constants can be used to add special characters into + * TTCN-3 text strings by using the concatenation operator. + * Example use: + * var charstring v_text := "Hi!" & c_CRLF & "Hello!"; + */ + group usefulConstants { + + const charstring c_NUL := oct2str('00'O); + const charstring c_SOH := oct2str('01'O); + const charstring c_STX := oct2str('02'O); + const charstring c_ETX := oct2str('03'O); + const charstring c_EOT := oct2str('04'O); + const charstring c_ENQ := oct2str('05'O); + const charstring c_ACK := oct2str('06'O); + const charstring c_BEL := oct2str('07'O); + const charstring c_BS := oct2str('08'O); + const charstring c_TAB := oct2str('09'O); + const charstring c_LF := oct2str('0A'O); + const charstring c_VT := oct2str('0B'O); + const charstring c_FF := oct2str('0C'O); + const charstring c_CR := oct2str('0D'O); + const charstring c_SO := oct2str('0E'O); + const charstring c_SI := oct2str('0F'O); + const charstring c_DLE := oct2str('10'O); + const charstring c_DC1 := oct2str('11'O); + const charstring c_DC2 := oct2str('12'O); + const charstring c_DC3 := oct2str('13'O); + const charstring c_DC4 := oct2str('14'O); + const charstring c_NAK := oct2str('15'O); + const charstring c_SYN := oct2str('16'O); + const charstring c_ETB := oct2str('17'O); + const charstring c_CAN := oct2str('18'O); + const charstring c_EM := oct2str('19'O); + const charstring c_SUB := oct2str('1A'O); + const charstring c_ESC := oct2str('1B'O); + const charstring c_FS := oct2str('1C'O); + const charstring c_GS := oct2str('1D'O); + const charstring c_RS := oct2str('1E'O); + const charstring c_US := oct2str('1F'O); + const charstring c_DEL := oct2str('7F'O); + + const charstring c_CRLF := oct2str('0D'O) & oct2str('0A'O); + + } // end group usefulConstants + + /* + * @remark Number in name indicates string length in number of + * _chars_ + */ + group textStringSubTypes { + + type charstring String1 length(1) with { encode "1 byte"}; + type charstring String2 length(2) with { encode "2 bytes"}; + type charstring String3 length(3) with { encode "3 bytes"}; + type charstring String4 length(4) with { encode "4 bytes"}; + type charstring String5 length(5) with { encode "5 bytes"}; + type charstring String6 length(6) with { encode "6 bytes"}; + type charstring String7 length(7) with { encode "7 bytes"}; + type charstring String8 length(8) with { encode "8 bytes"}; + type charstring String9 length(9) with { encode "9 bytes"}; + type charstring String10 length(10) with { encode "10 bytes"}; + type charstring String11 length(11) with { encode "11 bytes"}; + type charstring String12 length(12) with { encode "12 bytes"}; + type charstring String13 length(13) with { encode "13 bytes"}; + type charstring String14 length(14) with { encode "14 bytes"}; + type charstring String15 length(15) with { encode "15 bytes"}; + type charstring String16 length(16) with { encode "16 bytes"}; + + type charstring String1To63 length(1..63) with {encode "1 to 63 bytes"}; + type charstring String1To64 length(1..64) with {encode "1 to 64 bytes"}; + type charstring String1To127 length(1..127) with {encode "1 to 127 bytes"}; + type charstring String1To128 length(1..128) with {encode "1 to 128 bytes"}; + type charstring String1to255 length(1..255) with {encode "1 to 255 bytes"}; + + } // end stringSubTypes + + group usefulTextStringTypes { + + // NOTE STS: below universal commented due to serious RTS problems in Tau 2.3 and before + type /*universal*/ charstring UnicodeText; + + // NOTE STS: below universal commented due to serious RTS problems in Tau 2.3 and before + type /*universal*/ charstring UnicodeText1to255 length(1..255) + with {encode "1 to 255 bytes"}; + + type charstring AlphaNum ("0".."9","a".."z","A".."Z"); + type AlphaNum AlphaNum2 length(2); + type AlphaNum AlphaNum1To32 length(1..32); + + } // end group usefulTextStringTypes + +} // end module LibCommon_TextStrings diff --git a/LibCommon/LibCommon_Time.ttcn b/LibCommon/LibCommon_Time.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b5a5e05ff3399ed04a2d939daa3db46b912ffbf8 --- /dev/null +++ b/LibCommon/LibCommon_Time.ttcn @@ -0,0 +1,74 @@ +/* + * @author STF 276 + * @version $Id$ + * @desc A collection of time handling functions which may be useful in + * the implementation of any TTCN-3 test suite. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_Time { + + group moduleParameters { + + /* @desc Time to control PTC.stop + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TDONE := 120.0} + + /* @desc Time to control the reception of a message + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TAC := 30.0} + + /* @desc Time to control that IUT sends nothing + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TNOAC := 10.0} + + /* @desc Time to control that IUT reacts prior to Upper Tester action + ** @remark PICS/PIXIT Reference: XXX + */ + // modulepar {float PX_TWAIT := 120.0} + + } // end group moduleParameters + + group sleeping { + + /* + * @desc The invocation of this function will cause a test component + * to sleep (or wait) for a specified amount of time. + * Defaults may interrupt this sleep if activated. + * @see LibCommon_Time.f_sleepIgnoreDef + * @param p_duration Amount of time that the test component should wait. + */ + function f_sleep ( in float p_duration ) { + timer t; + if (p_duration <= 0.0) {return} + t.start( p_duration ); + t.timeout; + } + + /* + * @desc The invocation of this function will cause a test component + * to sleep (or wait) for a specified amount of time. + * This function ignores any active defaults, i.e., the function + * will always wait the specified amount of time. + * @param p_duration Amount of time that the test component should wait. + */ + function f_sleepIgnoreDef ( in float p_duration ) { + timer t; + if (p_duration <= 0.0) {return} + t.start( p_duration ); + alt { + [] t.timeout {} + [else] {repeat} + } // end alt + } + + } // end group sleeping + + +} // end module LibCommon_Time diff --git a/LibCommon/LibCommon_VerdictControl.ttcn b/LibCommon/LibCommon_VerdictControl.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..b9dfe32910cc5c280309fd333d8915cfe03bfc45 --- /dev/null +++ b/LibCommon/LibCommon_VerdictControl.ttcn @@ -0,0 +1,101 @@ +/* + * ---------------------------------------------------------------------------- + * + * @author STF 276 + * @version $Id$ + * @desc Contains generic functions which set test component verdicts + * based on generic function return codes according to established + * test implementation practice. These functions should only be called + * from test case functions (see reusable t3 code methodology) only. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + */ + module LibCommon_VerdictControl { + + /* + * @desc Collection of all possible function return codes. + * This type should be used as a return parameter type + * in all TTCN-3 function definitions (except for + * functions invoked from in TTCN-3 start statements). + * This return value should be used to communicate a + * verdict to the caller _instead of_ literally setting + * a verdict in the function! This warrants a higher + * degree of reuse for the function. + */ + type enumerated FncRetCode { + e_success(0), + // error codes + e_error(1), + e_timeout(2) + } + with { + encode "import=com.testingtech.ttcn.tci.*;"; + } + + + /* + * @desc This function should be used for verdict + * setting after completion of, e.g., the test body + * execution. + * Sets verdicts are INCONC in case of a timeout, FAIL + * in case of an error, and PASS otherwise. + * @param p_ret Current execution status + */ + function f_setVerdict ( FncRetCode p_ret ) { + if ( p_ret == e_success ) { + setverdict(pass); + } else if ( p_ret == e_timeout ) { + setverdict(inconc); + } else { + setverdict(fail); + } + } // end function f_setVerdict + + + /* + * @desc This function should be used for verdict + * setting after completion of a preamble + * execution. + * Sets verdicts are INCONC in case of a timeout or + * an error, and PASS otherwise. + * @param p_ret Preamble execution status + */ + function f_setVerdictPreamble ( FncRetCode p_ret ) { + if ( p_ret != e_success ) { + setverdict(inconc); + } else { + setverdict(pass); + } + } // end function f_setVerdictPreamble + + + /* + * @desc This function should be used for verdict + * setting after completion of a postamble + * execution. + * Sets verdicts are INCONC in case of a timeout or + * an error, and PASS otherwise. + * @param p_ret Postamble execution status + */ + function f_setVerdictPostamble ( FncRetCode p_ret ) { + if ( p_ret != e_success ) { + setverdict(inconc); + } else { + setverdict(pass); + } + } // end function f_setVerdictPostamble + + //TODO comment + function f_getVerdict() + return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + +} // end module LibCommon_VerdictControl diff --git a/LibIms/LibIms_Interface.ttcn b/LibIms/LibIms_Interface.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1294ca63ebfb036f1d627c8d866a0a60761bc757 --- /dev/null +++ b/LibIms/LibIms_Interface.ttcn @@ -0,0 +1,44 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_Interface +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + //AtsCommon + import from SipIsup_PIXITS all; + //LibIms + import from LibIms_SIPTypesAndValues all; + + group AdressTypes + { + + //Solution for building error problem. (Important for validation) + //type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module + //With this solution TAU compiler error. + type component ImsComponent extends SipComponent + { + // general variables + var ImsInterfaceProfile vc_interfaceprofile + } // end ImsComponent + +// type address WorkaroundAddress; //Remove it later + }// end group AdressTypes + + + + +} // end module AtsIms_TestSystem diff --git a/LibIms/LibIms_PIXITS.ttcn b/LibIms/LibIms_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8fef1b56b70f70a66895cfd9200022576be55762 --- /dev/null +++ b/LibIms/LibIms_PIXITS.ttcn @@ -0,0 +1,410 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_PIXITS +{ + //LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_TextStrings all; + import from LibCommon_DataStrings all; + +group SUT { +group SUT_UE1 { + modulepar { + /** @desc charstring for SUT - PCSCF1 IP address to exchange SIP messages - connection point for UE1 + */ + charstring PX_IMS_SUT_PCSCF1_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF1 port number to exchange SIP messages - connection point for UE1 + */ + integer PX_IMS_SUT_PCSCF1_PORT := 5060; + + /** @desc charstring for SUT/PCSCF1 domain - connection point for UE1 + */ + charstring PX_IMS_SUT_PCSCF1_HOME_DOMAIN := "pcscf1.sut.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE1 + */ + charstring PX_IMS_SUT_UE1_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE1 local domain + */ + charstring PX_IMS_SUT_UE1_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE1 local user + */ + charstring PX_IMS_SUT_UE1_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 3-2-2 username of UE1 + * The name of user in the specified realm + */ + charstring PX_IMS_SUT_UE1_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3-2-2-2 passwd of UE1: A known shared secret, the password of user of the specified username + */ + charstring PX_IMS_SUT_UE1_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3-2-1 qop options of UE1: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server; the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_IMS_SUT_UE1_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE1 + */ + charstring PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net"; + + /** @desc charstring for UE1 display name + */ + charstring PX_IMS_SUT_UE1_DISPLAY := "UE1@SUT"; + } +} // end group SUT_UE1 + +group SUT_UE2 { + modulepar { + /** @desc charstring for SUT - PCSCF2 IP address to exchange SIP messages - connection point for UE2 + */ + charstring PX_IMS_SUT_PCSCF2_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT - PCSCF2 port number to exchange SIP messages - connection point for UE2 + */ + integer PX_IMS_SUT_PCSCF2_PORT := 5060; + + /** @desc charstring for SUT/PCSCF2 domain - connection point for UE2 + */ + charstring PX_IMS_SUT_PCSCF2_HOME_DOMAIN := "pcscf2.home.net"; + + /** @desc charstring for IP address used by the TS to exchange media streams for UE2 + */ + charstring PX_IMS_SUT_UE2_BEARER_IPADDR := "172.31.10.2"; + + /** @desc charstring for identity of the tester UE2 local domain + */ + charstring PX_IMS_SUT_UE2_HOME_DOMAIN := "sut.net"; + + /** @desc charstring for identity of the tester UE2 local user + */ + charstring PX_IMS_SUT_UE2_PUBLIC_USER := "2910"; + + /** @desc charstring for RFC 2617 3.2.2 username of UE2 + * The name of user in the specified realm + */ + charstring PX_IMS_SUT_UE2_PRIVAT_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3-2-2-2 passwd: A known shared secret, the password of user of the specified username of UE2 + */ + charstring PX_IMS_SUT_UE2_PRIVAT_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3-2-1 qop options UE2: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server, the + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_IMS_SUT_UE2_QOP := "auth"; + + /** @desc charstring for home(SUT) REGISTRAR domain of UE2 + */ + charstring PX_IMS_SUT_UE2_REGISTRAR := "registrar.sut.net"; + } +} // end group SUT_UE2 + + + +group SUT_unknown{ + /** @desc charstring for identity of unknown UE public user + */ + modulepar { + charstring PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007"; + } +} // end group SUT_unknown + +group EMERGENCY{ + modulepar { + /** @desc charstring for identity of emergency service local domain + */ + charstring PX_IMS_SUT_EMERGENCY_HOME_DOMAIN := "home.net"; + + /** @desc charstring for identity of the emergency service + */ + charstring PX_IMS_SUT_EMERGENCY_SERVICE := "service:sos"; + + /** @desc charstring for identity of the invalid emergency service + */ + charstring PX_IMS_SUT_EMERGENCY_SERVICE_INVALID := "service:sos.invalid"; + } +}// end group EMERGENCY service + +group SUT_IBCF { + modulepar { + /** @desc charstring for SUT/IBCF1 IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IBCF1_IPADDR := "172.31.10.5"; + + /** @desc integer for SUT/IBCF1 port number to exchange SIP messages + */ + integer PX_IMS_SUT_IBCF1_PORT := 5060; + + /** @desc charstring for SUT/IBCF1 domain + */ + charstring PX_IMS_SUT_IBCF1_HOME_DOMAIN := "ibcf1.sut.net"; + + /** @desc charstring for SUT/IBCF2 IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IBCF2_IPADDR := "172.31.10.6"; + + /** @desc integer for SUT/IBCF2 port number to exchange SIP messages + */ + integer PX_IMS_SUT_IBCF2_PORT := 5060; + + /** @desc charstring for SUT/IBCF2 domain + */ + charstring PX_IMS_SUT_IBCF2_HOME_DOMAIN := "ibcf2.sut.net"; + } +} // end group SUT_IBCF +group SUT_PCSCF { + modulepar { + /** @desc charstring for SUT/P-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_PCSCF_IPADDR := "172.31.10.2"; + + /** @desc integer for SUT/P-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_PCSCF_PORT := 5060; + + /** @desc charstring for SUT/P-CSCFdomain + */ + charstring PX_IMS_SUT_PCSCF_HOME_DOMAIN := "pcscf.sut.net"; + + /** @desc charstring for SUT/P-CSCF P_VisitedNetwork ID header (see RFC3455) + */ + charstring PX_IMS_SUT_PCSCF_VisitedNetworkID := "sut token"; + + /** @desc charstring for SUT/P-CSCF Min-SE header lower bound for the session refresh interval (see RFC4028) + */ + charstring PX_IMS_SUT_PCSCF_MinSE := "100"; + } +} // end group SUT_PCSCF +group SUT_SCSCF { + modulepar { + /** @desc charstring for SUT/S-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_SCSCF_IPADDR := "172.31.10.4"; + + /** @desc integer for SUT/S-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_SCSCF_PORT := 5060; + + /** @desc charstring for SUT/S-CSCFdomain + */ + charstring PX_IMS_SUT_SCSCF_HOME_DOMAIN := "scscf.sut.net"; + + /** @desc charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF + */ + charstring PX_IMS_SUT_SCSCF_REALM := "realm.scscf"; + } +} // end group SUT_SCSCF + +group SUT_ICSCF { + modulepar { + /** @desc charstring for SUT/I-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_ICSCF_IPADDR := "172.31.10.3"; + + /** @desc integer for SUT/I-CSCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_ICSCF_PORT := 5060; + + /** @desc charstring for SUT/I-CSCFdomain + */ + charstring PX_IMS_SUT_ICSCF_HOME_DOMAIN := "icscf.sut.net"; + } +} // end group SUT_ICSCF + +group SUT_IMGCF { + modulepar { + /** @desc charstring for SUT/I-MGCF IP address to exchange SIP messages + */ + charstring PX_IMS_SUT_IMGCF_IPADDR := "172.31.10.10"; + + /** @desc integer for SUT/I-MGCF port number to exchange SIP messages + */ + integer PX_IMS_SUT_IMGCF_PORT := 5060; + + /** @desc charstring for SUT/I-MGCFdomain + */ + charstring PX_IMS_SUT_IMGCF_HOME_DOMAIN := "imgcf.sut.net"; + } +} // end group SUT_IMGCF + +} // end group SUT +group TS { +group TS_UE1 { + modulepar { + /** @desc charstring for IP address used by the UE1 to exchange SIP messages + */ + charstring PX_IMS_TS_UE1_IPADDR := "172.31.1.240"; + + /** @desc integer for port number used by the UE1 to exchange SIP messages + */ + integer PX_IMS_TS_UE1_PORT := 5060; + + /** @desc charstring for visited(TS) REGISTRAR domain + */ + charstring PX_IMS_TS_UE1_REGISTRAR := "registrar.ts.net"; + } +} // end group TS_UE1 + +group TS_UE2 { + modulepar { + /** @desc charstring for IP address used by the UE2 to exchange SIP messages + */ + charstring PX_IMS_TS_UE2_IPADDR := "172.31.1.241"; + + /** @desc integer for port number used by the UE2 to exchange SIP messages + */ + integer PX_IMS_TS_UE2_PORT := 5060; + + /** @desc charstring for visited(TS) REGISTRAR domain + */ + charstring PX_IMS_TS_UE2_REGISTRAR := "registrar.ts.net"; + } +} // end group TS_UE2 + +group TS_IBCF { + modulepar { + /** @desc charstring for TS/IBCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_IBCF_IPADDR := "172.31.1.15"; + + /** @desc integer for TS/IBCF port number to exchange SIP messages + */ + integer PX_IMS_TS_IBCF_PORT := 5060; + + /** @desc charstring for TS/IBCF domain + */ + charstring PX_IMS_TS_IBCF_HOME_DOMAIN := "ibcf.ts.net"; + } +} // end group TS_IBCF + +group TS_ICSCF { + modulepar { + /** @desc charstring for TS/I-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_ICSCF_IPADDR := "172.31.1.13"; + + /** @desc integer for IUT/I-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_ICSCF_PORT := 5060; + + /** @desc charstring for TS/I-CSCF domain + */ + charstring PX_IMS_TS_ICSCF_HOME_DOMAIN := "icscf.ts.net"; + } +} // end group TS_ICSCF + +group TS_PCSCF { + modulepar { + /** @desc charstring for TS/P-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_PCSCF_IPADDR := "172.31.1.12"; + + /** @desc integer for IUT/P-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_PCSCF_PORT := 5060; + + /** @desc charstring for TS/P-CSCFdomain + */ + charstring PX_IMS_TS_PCSCF_HOME_DOMAIN := "pcscf.ts.net"; + } +} // end group TS_PCSCF + +group TS_SCSCF { + modulepar { + /** @desc charstring for TS/S-CSCF IP address to exchange SIP messages + */ + charstring PX_IMS_TS_SCSCF_IPADDR := "172.31.1.14"; + + /** @desc integer for TS/S-CSCF port number to exchange SIP messages + */ + integer PX_IMS_TS_SCSCF_PORT := 5060; + + /** @desc charstring for TS/S-CSCFdomain + */ + charstring PX_IMS_TS_SCSCF_HOME_DOMAIN := "scscf.ts.net"; + + /** @desc charstring public user identity for Request-URI to be rejected by IUT S-CSCF as it is barred for incoming calls + */ + charstring PX_IMS_SUT_BARRED_PUBLIC_USER; + + /** @desc charstring invalid GRUU for Request-URI to be rejected by IUT S-CSCF + */ + charstring PX_IMS_SUT_INVALID_GRUU; + + /** @desc charstring Service value in P-Asserted-Service header to be rejected by IUT S-CSCF, as service is not subscribed-to + */ + charstring PX_IMS_SUT_UNSUBSCRIBED_SERVICE; + + /** @desc charstring Service value in SDP message body to be rejected by IUT S-CSCF, as service is not subscribed-to; + ** intentionally kept as charstring to allow maximum flexibility to construct unsubscribed service ** + */ + charstring PX_IMS_SUT_UNSUBSCRIBED_SDP_SERVICE; + } +} // end group TS_SCSCF + +group TS_IMS1user { + modulepar { + /** @desc charstring for public userinfo/displayname addressing IMS1UE (simulated by the TS) + */ + charstring PX_IMS_TS_IMS1UE_PUBLIC_USER := "IMS1UE"; + + /** @desc charstring for TS/domain + */ + charstring PX_IMS_TS_IMS1UE_HOME_DOMAIN := "ts.net"; + } +} // end group TS_IMS1user + +group TS_ISUPuser { + modulepar { + /** @desc charstring for public userinfo addressing ISUPUE (simulated by the TS) + */ + charstring PX_IMS_TS_ISUP_PUBLIC_USER := "070123456"; + + /** @desc charstring for ISUP TS/domain or IPAddres + */ + charstring PX_IMS_TS_ISUP_HOME_DOMAIN := "172.27.11.80"; + } +} // end group TS_ISUPuser + + +group TS_AS { + modulepar { + /** @desc charstring for TS/AS1 IP address to exchange SIP messages + */ + charstring PX_IMS_TS_AS1_IPADDR := "172.31.1.18"; + + /** @desc integer for TS/AS1 port number to exchange SIP messages + */ + integer PX_IMS_TS_AS1_PORT := 5060; + + /** @desc charstring for TS/AS1 domain + */ + charstring PX_IMS_TS_AS1_HOME_DOMAIN := "as1.ts.net"; + + /** @desc charstring for TS/AS2 IP address to exchange SIP messages + */ + charstring PX_IMS_TS_AS2_IPADDR := "172.31.1.19"; + + /** @desc integer for TS/AS2 port number to exchange SIP messages + */ + integer PX_IMS_TS_AS2_PORT := 5060; + + /** @desc charstring for TS/AS2 domain + */ + charstring PX_IMS_TS_AS2_HOME_DOMAIN := "as2.ts.net"; + } +} // end group TS_AS +} // end group TS +} // end module AtsIms_PIXITS diff --git a/LibIms/LibIms_SIPTypesAndValues.ttcn b/LibIms/LibIms_SIPTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..5238a43a79babf39c499fb98da826fb43fa7a3f9 --- /dev/null +++ b/LibIms/LibIms_SIPTypesAndValues.ttcn @@ -0,0 +1,80 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types and constants used by the test component + * for SIP tests. + */ + +module LibIms_SIPTypesAndValues +{ + // SipAts + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + +group Constants +{ + +const integer c_ISUP_HOP_COUNT:=31; //TODO replace this value with appropriate PIXIT parameter + +group UserProfileConstants + { + // number of user profile (RESERVED: from 1-10 for SIP profile) + const integer c_userProfile_UE1atSUThome := 11; // location is SUT domain + const integer c_userProfile_UE2atSUThome := 12; // location is SUT domain + const integer c_userProfile_UE1atSUTvisiting := 21; // location is SUT domain + //const integer c_userProfile_UE2atSUTvisiting := 22; // location is SUT domain + const integer c_userProfile_IBCFwithUnknownUE := 28; // location is IMS1 domain + const integer c_userProfile_IBCFwithHomeUE := 29; // location is IMS1 domain + const integer c_userProfile_IBCFwithVisitingUE := 31; // location is IMS1 domain + const integer c_userProfile_PCSCFwithHomeUE := 41; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE := 42; // location is IMS1 domain + const integer c_userProfile_PCSCFwithVisitingUE2 := 43; // location is IMS1 domain + const integer c_userProfile_PCSCFwithUnknownVisitingUE := 44; // location is IMS1 domain + const integer c_userProfile_ICSCFwithHomeUE := 45; // location is IMS1 domain + const integer c_userProfile_SCSCFwithHomeUE := 46; // location is IMS1 domain + const integer c_userProfile_ISUP := 49; // + const integer c_userProfile_AS1 := 51; // Isc userProfile at AS1 + const integer c_userProfile_AS2 := 52; // Isc userProfile at AS2 + + + // number of interface profile + const integer c_interfaceProfile_IMS_SUT_IBCF1 := 100; // Ic interface at IBCF1 located in SUT + const integer c_interfaceProfile_IMS_SUT_IBCF2 := 101; // Ic interface at IBCF2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF1 := 110; // Gm interface towards UE1 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF2 := 111; // Gm interface towards UE2 located in SUT + const integer c_interfaceProfile_IMS_SUT_PCSCF := 112; // Mw interface at P-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_SCSCF := 113; // Mw interface at S-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_ICSCF := 114; // Mw interface at I-CSCF located in SUT + const integer c_interfaceProfile_IMS_SUT_MGCF := 115; // Mw interface at MGCF located in SUT + + // number of service profile + const integer c_serviceProfile_EMERGENCY := 911; + const integer c_serviceProfile_EMERGENCY_INVALID := 912; + + // number of SIPURL identifiers + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_domain := 1101; // c_interfaceProfile_IMS_SUT_PCSCF1 + const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_ip := 1102; // c_interfaceProfile_IMS_SUT_PCSCF1 + +} //end group UserProfileConstants + + +} //end group Constants + + + group otherTypes{ + type record ImsInterfaceProfile + { /** @desc integer for Port number to exchange SIP messages + */ + integer SUTPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring SUTIpaddr, + + /** @desc charstring for home domain to exchange SIP messages + */ + charstring SUTHomeDomain + } + } + +} // end module LibIms_SIPTypesAndValues diff --git a/LibIms/LibIms_Steps.ttcn b/LibIms/LibIms_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..eabf5bb659df6f05fb8c5da345f0dda7a8b14155 --- /dev/null +++ b/LibIms/LibIms_Steps.ttcn @@ -0,0 +1,859 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. + */ + +module LibIms_Steps +{ + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + import from LibSip_XMLTypes all; + //LibIms + import from LibIms_Templates all; + import from LibIms_Interface all; + import from LibIms_PIXITS all; + import from LibIms_SIPTypesAndValues all; + + group externalfunctions { + } + group parameterOperations { + } + group fieldOperations { + + /* + * + * @desc setting of BYE header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to send Bye + * @verdict + */ + function f_setHeadersBYE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + + }// end f_setHeadersBYE + + /** + * + * @desc function set headers for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardRequestFromAS (inout CSeq p_cSeq_s) runs on ImsComponent + { + var Request v_request; + v_request := vc_request; + + vc_via := v_request.msgHeader.via; // TODO via header need to be adapted due to standards + + vc_route := v_request.msgHeader.route; // TODO route header need to be adapted due to standards + + }// end function f_setHeadersForwardRequest + + /** + * + * @desc function set headers for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardResponseFromAS (inout CSeq p_cSeq_s) runs on ImsComponent + { + var Response v_response; + v_response := vc_response; + + vc_via:= v_response.msgHeader.via; // TODO via header need to be adapted due to standards + + if (ispresent(v_response.msgHeader.recordRoute)) { + vc_recordRoute:= v_response.msgHeader.recordRoute; // TODO recordRoute header need to be adapted due to standards + } + }// end function f_setHeadersForwardResponse + + /* + * + * @desc setting of Invite header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to be invited + * @verdict + */ + function f_setHeadersINVITE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + if (vc_boo_route) + { vc_route := valueof(m_route_interface(vc_interfaceprofile))}; + if (vc_boo_recordRoute) + { vc_recordRoute := valueof(m_recordRoute_currIpAddr(vc_userprofile))}; + + LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); + + }// end f_setHeadersINVITE + + + /* + * + * @desc setting of Message header fields (IMS addresses) + * extension of general settings from LibSip basic function + * @param p_cSeq_s current cSeq + * @param p_to_user user_profile id of the user to be invited + * @verdict + */ + function f_setHeadersMESSAGE(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent + { + vc_to := LibIms_Steps.f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + + vc_from := LibIms_Steps.f_initFromHeader(vc_userprofile.id, f_getRndTag()); // init of vc_from using userProfile identifier + + vc_requestUri := f_initSipUrl(p_to_user); // Request URI of Invite is identical with To header + + LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); + + }// end f_setHeadersMESSAGE + + function f_setHeadersReINVITE (inout CSeq p_cSeq_s) runs on ImsComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_to := vc_caller_To; + + vc_from := vc_caller_From; + + }// end function f_setHeadersReINVITE + + /** + * + * @desc function set headers for ReINVITE method on terminating side e.g. UE2 + */ + function f_setHeadersReINVITE_ (inout CSeq p_cSeq_s) runs on ImsComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_to := vc_callee_To; + + vc_from := vc_callee_From; + + //vc_requestUri := f_initSipUrl(p_to_user); //bpin need to be implemeted// Request URI of Invite is identical with To header + + }// end function f_setHeadersReINVITE + + /** + * + * @desc function for setting of component variables related to message header fields + * when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) + * (message type independent: CSeq, contact, via), function uses information from + * userprofile and interfaceprofile + * + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral_ICSCF(inout CSeq p_cSeq_s, in charstring p_method) runs on SipComponent + { + var SemicolonParam_List v_params; + + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method ; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + + vc_branch := c_brenchCookie & f_getRndTag(); + vc_branch_ICSCF := c_brenchCookie & f_getRndTag(); + + vc_via:={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), + valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) + } + }; + }// end function f_setHeadersGeneral_ICSCF + + /** + * + * @desc function sets header field for the next outgoing REGISTER message + * from the visited P-CSCF to the home I-CSCF + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_REGISTER_PCSCF(inout CSeq p_cSeq_s) runs on SipComponent + { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + + vc_requestUri:= + { + scheme := c_sipScheme, + userInfo := omit, + hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} + vc_from := {fieldName := FROM_E, + addressField :=vc_to.addressField, + fromParams := v_params + }; + + if(not vc_firstREGISTER_sent) + { + v_params := {{id:=c_expiresId, paramValue:=c_shortRegistration}}; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function + + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_empty(vc_userprofile) + } + + }// end function setHeaders_REGISTER_PCSCF + + } // end group fieldOperations + + group awaitingMessage { + } + group sendMessage { + } + group globalSteps { + + /* + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_userprofile(in integer p_user) runs on ImsComponent + { + LibSip_Steps.f_init_userprofile(p_user); + + select(p_user){ + case (c_userProfile_UE1atSUThome) { //variant c_userProfile_UE1atSUThome + vc_userprofile.currPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; + } + case (c_userProfile_UE2atSUThome) { //variant c_userProfile_UE2atSUThome + vc_userprofile.currPort := PX_IMS_TS_UE2_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE2_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE2_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE2_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE2_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE2_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_SUT_UE2_REGISTRAR; + } + case (c_userProfile_UE1atSUTvisiting) { //variant c_userProfile_UE1atSUTvisiting + vc_userprofile.currPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.currIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; + vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; + vc_userprofile.registrarDomain := PX_IMS_TS_UE1_REGISTRAR; + } +// //temporary not used and it can be deleted during validation +// case (c_userProfile_UE1atSUTvisiting) { //variant c_userProfile_UE1atSUTvisiting +// vc_userprofile.currPort := PX_IMS_TS_UE2_PORT; +// vc_userprofile.currIpaddr := PX_IMS_TS_UE2_IPADDR; +// vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; +// vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; +// vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE2_BEARER_IPADDR; +// vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; +// vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; +// vc_userprofile.qop := PX_IMS_SUT_UE2_QOP; +// vc_userprofile.privUsername := PX_IMS_SUT_UE2_PRIVAT_USERNAME; +// vc_userprofile.passwd := PX_IMS_SUT_UE2_PRIVAT_PASSWD; +// vc_userprofile.registrarDomain := PX_IMS_TS_UE2_REGISTRAR; +// } + + + case (c_userProfile_IBCFwithHomeUE) { //variant c_userProfile_IBCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_IBCF_PORT; // via (Ic interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_IBCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_IBCF_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_IBCF_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + + case (c_userProfile_IBCFwithVisitingUE) { //variant c_userProfile_IBCFwithVisitingUE + vc_userprofile.currPort := PX_IMS_TS_IBCF_PORT; // via (Ic interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_IBCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_IBCF_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_IBCF_IPADDR; // contact + //vc_userprofile.bearerIpaddr := PX_IMS_SUT_UE1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_ICSCFwithHomeUE) { //variant c_userProfile_ICSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_ICSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_ICSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_IBCFwithUnknownUE) { //variant + vc_userprofile.currPort := PX_IMS_TS_ICSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_ICSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_PCSCFwithHomeUE) { //variant c_userProfile_PCSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_TS_IMS1UE_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_PCSCFwithVisitingUE) { //variant c_userProfile_PCSCFwithVisitingUE + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + // another visting user in IMS (cp. TP_IMST2_MW_REG_15: different public id, same private id) + case (c_userProfile_PCSCFwithVisitingUE2) { //variant + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + // unknown visting user in IMS (cp. TP_IMST2_MW_REG_16) + case (c_userProfile_PCSCFwithUnknownVisitingUE) { //variant + vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_SCSCFwithHomeUE) { //variant c_userProfile_SCSCFwithHomeUE + vc_userprofile.currPort := PX_IMS_TS_SCSCF_PORT; // via (Mw interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_SCSCF_IPADDR; // via + vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT; // contact (simulated UE) + vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR; // contact + vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN; // From, To (register) + vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER; // From, To (register) + vc_userprofile.qop := PX_IMS_SUT_UE1_QOP; // Authorization + vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME; // Authorization + vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD; // Authorization + vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; // Authorization + } + + case (c_userProfile_AS1) { //variant c_userProfile_AS1 + vc_userprofile.currPort := PX_IMS_TS_AS1_PORT; // via, route(Isc interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_AS1_IPADDR; // via, route + vc_userprofile.homeDomain := PX_IMS_TS_AS1_HOME_DOMAIN; // via, route + } + + case (c_userProfile_AS2) { //variant c_userProfile_AS2 + vc_userprofile.currPort := PX_IMS_TS_AS2_PORT; // via, route(Isc interface of TS) + vc_userprofile.currIpaddr := PX_IMS_TS_AS2_IPADDR; // via, route + vc_userprofile.homeDomain := PX_IMS_TS_AS2_HOME_DOMAIN; // via, route + } + } + } + + function f_initToHeader(in integer p_user) runs on ImsComponent return To + { + var To p_to := c_empty_To; + p_to := { fieldName := TO_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := f_initSipUrl(p_user) // SipUrl + }},//end addressField + toParams := omit + }; + return(p_to) + } + + + function f_initFromHeader(in integer p_user, charstring p_tag_str) runs on ImsComponent return From + { + var From p_from := c_empty_From; + p_from := { fieldName := FROM_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := f_initSipUrl(p_user) // SipUrl + }},//end addressField + fromParams := {{id := c_tagId, paramValue := p_tag_str}} + }; + return(p_from) + } + + function f_initSipUrl(in integer p_user) runs on ImsComponent return SipUrl + { + var SipUrl p_sipUrl := { + scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := omit, + urlParameters := omit, + headers := omit}; + + select(p_user){ + case (c_userProfile_UE1atSUThome) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE1_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_UE1_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_UE2atSUThome) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_UE2_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_UE2_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_IBCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_IMS1UE_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_ICSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_IMS1UE_HOME_DOMAIN, portField :=omit} + } + case (c_userProfile_PCSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_PCSCF_IPADDR, portField :=omit} + } + case (c_userProfile_SCSCFwithHomeUE) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_IMS1UE_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_SCSCF_IPADDR, portField :=omit} + } + case (c_userProfile_ISUP) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_TS_ISUP_PUBLIC_USER, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_TS_ISUP_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_EMERGENCY) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_EMERGENCY_SERVICE, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_EMERGENCY_HOME_DOMAIN, portField :=omit} + } + case (c_serviceProfile_EMERGENCY_INVALID) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_EMERGENCY_SERVICE_INVALID, password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_EMERGENCY_HOME_DOMAIN, portField :=omit} + } + + // following setting is used for the assignment of the Path header field + case (c_interfaceProfile_IMS_SUT_PCSCF1) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_HOME_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + + // following setting is used in relation to the route headers list elements + case (c_interfaceSIPURL_IMS_SUT_PCSCF1_domain) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_HOME_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + case (c_interfaceSIPURL_IMS_SUT_PCSCF1_ip) { + p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; + p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_IPADDR, portField :=PX_IMS_SUT_PCSCF1_PORT} + } + }; + return(p_sipUrl) + } + + + /* + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + * @verdict + */ + function f_init_interfaceprofile(in integer p_interface) runs on ImsComponent + { + select(p_interface){ + case (c_interfaceProfile_IMS_SUT_IBCF1) { //variant c_interfaceProfile_IMS_SUT_IBCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_IBCF2) { //variant c_interfaceProfile_IMS_SUT_IBCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IBCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IBCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IBCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF1) { //variant c_interfaceProfile_IMS_SUT_PCSCF1 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF1_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF1_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF1_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF2) { //variant c_interfaceProfile_IMS_SUT_PCSCF2 + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF2_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF2_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF2_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_PCSCF) { //variant c_interfaceProfile_IMS_SUT_PCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_PCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_PCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_PCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_SCSCF) { //variant c_interfaceProfile_IMS_SUT_SCSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_SCSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_SCSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_SCSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_ICSCF) { //variant c_interfaceProfile_IMS_SUT_ICSCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_ICSCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_ICSCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_ICSCF_HOME_DOMAIN; + } + case (c_interfaceProfile_IMS_SUT_MGCF) { //variant c_interfaceProfile_IMS_SUT_MGCF + vc_interfaceprofile.SUTPort := PX_IMS_SUT_IMGCF_PORT; + vc_interfaceprofile.SUTIpaddr := PX_IMS_SUT_IMGCF_IPADDR; + vc_interfaceprofile.SUTHomeDomain := PX_IMS_SUT_IMGCF_HOME_DOMAIN; + } + } + } + + /* + * + * @desc retrieve HostPort value of the interface profile + * @param p_interface identifies the selected interface + * @return HostPort template + */ + function f_get_interfaceHostPort (in ImsInterfaceProfile p_interface) runs on ImsComponent return /*template*/ HostPort // STS commented out template but check why in there in first place + { + return {p_interface.SUTIpaddr,p_interface.SUTPort} + } + + /* + * + * @desc retrieve DomainPort value of the interface profile + * @param p_interface identifies the selected interface + * @return DomainPort template + */ + function f_get_interfaceDomainPort (in ImsInterfaceProfile p_interface) runs on ImsComponent return /*template*/ HostPort + { + return {p_interface.SUTHomeDomain,p_interface.SUTPort} + } + + /* + * @desc retrieve SipUrl of the interface profile + * @param p_interface identifies the selected interface + * @return SipUrl template + */ + function f_get_interfaceNameAddr(in ImsInterfaceProfile p_interface) runs on ImsComponent return template NameAddr + { + return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr,p_interface.SUTPort) + } + + + } + group registration { + + /** + * + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration_IMS(inout CSeq p_cSeq_s, in boolean p_auth) runs on SipComponent + { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip + + //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + }; + }//end function f_Registration_IMS + + /** + * + * @desc awaiting UE1 registration (with authentication) + * @param p_cSeq_s cseq parameter + */ + function f_awaitingRegistration_IMS(inout CSeq p_cSeq_s) runs on SipComponent + { + + //Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, + vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, + m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization + (PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse))) + ); + + //Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes)))); + + // 200OK to complete the request + vc_contact := vc_request.msgHeader.contact; + vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2str(3600)}}; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE))); + + }//end function f_awaitingRegistration_IMS + + } // end group registration + + group preambles { + + /* + * + * @desc Set variables and default initialization for user profile where proxy role is present + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_IMS_preamble_MGCF(in integer p_userprofile, inout CSeq p_cSeq_s) runs on ImsComponent + { + vc_boo_recordRoute := true; + vc_boo_route := true; + f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); + + f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); + } + + /* + * + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_IMS_preamble_woRegistration(in integer p_userprofile, inout CSeq p_cSeq_s) runs on ImsComponent + { + //Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + //Preamble + LibIms_Steps.f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT(PX_SIP_SDP_dyn, PX_SIP_SDP_encoding)), vc_userprofile)); + + } + + /* + * + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_IMS_preamble_withRegistration (in integer p_userprofile, inout CSeq p_cSeq_s, template REGISTER_Request p_register) runs on ImsComponent + { + + //Variables & defaults initialization + f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); + + //Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact)); + } + + } // end group preambles + + group postambles { + + function f_SIP_postamble_IMS1_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + function f_SIP_postamble_IMS1_awaitDeRegistration () runs on ImsComponent + { + //Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, + vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, + m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization + (PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse))) + ); + + //Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes)))); + + // 200OK to complete the request + vc_contact := vc_request.msgHeader.contact; + vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2str(3600)}}; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE))); + + f_terminate_component() + }; + + function f_SIP_postamble_UE1_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + function f_SIP_postamble_UE2_withoutRegistration () runs on ImsComponent + {f_terminate_component()}; + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall_IMS(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on ImsComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, vc_route)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall + + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall_UE(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on ImsComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, vc_route)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_UE + + } + group defaults { + } +} // module LibIms_Steps diff --git a/LibIms/LibIms_Templates.ttcn b/LibIms/LibIms_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..f1ee42616f9a9e5b5e3be943b5c04a001fb1f6ae --- /dev/null +++ b/LibIms/LibIms_Templates.ttcn @@ -0,0 +1,1775 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibIms_Templates +{ + //LibCommon + import from LibCommon_DataStrings all; + + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + + //LibIms + import from LibIms_SIPTypesAndValues all; + + import from LibIms_PIXITS all; + import from SipIsup_PIXITS all; + + template charstring m_international_number_format := pattern "\\+\d+";//pattern "\+\d+"; + + template NameAddr mw_SipUrl_SUTinterface(charstring p_host, integer p_port) := + { + displayName := *, + addrSpec := { + scheme := "sip:", + userInfo := *, + hostPort := {p_host, p_port}, + urlParameters := *, + headers := * + } + } + + template Addr_Union mw_UE1_Addr_display := {nameAddr:={displayName:=PX_IMS_SUT_UE1_DISPLAY,addrSpec:=?}}; + +group Subfields{ + + template SemicolonParam_List mw_semicolonParams_realm (template charstring p_realm) := + ?; //superset({"realm",p_realm},{"rand",?},{"autn",?},{"algorithm","AKAv1-MD5"},{"ik",?},{"ck",?}) // ERROR HERE! Superset operation must contain value list - no templates! + + template SemicolonParam_List m_semicolonParams_language (template charstring p_language):= + {{"language",p_language}} + + template SemicolonParam_List mw_semicolonParams_language (template charstring p_language):= + {{"language",p_language}} +} + +group HeaderFieldTemplates{ + + template MinSE m_minSE(DeltaSec p_ds):= + { + fieldName := MIN_SE_E, + deltaSec:=p_ds, + minSeParam:=omit + } + + template PathValue m_pathvalue (SipUrl p_sipUrl):= + { + nameAddr := {displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit + } + + template Path m_path (SipUrl p_sipUrl):= + { + fieldName := PATH_E, + pathValues := { + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit} + } + } + +/* + * @desc Path header field expectation with at least one path value + * @param p_sipUrl value of the last element in the list of path values + */ + template Path mw_path (SipUrl p_sipUrl):= + { + fieldName := PATH_E, + pathValues := {*,m_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl + } + + template PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := + { + fieldName := P_ACCESS_NETWORK_INFO_E, + accessType := "IEEE-802.11a", + genericParams := {{id:="extension-access-info",paramValue :="192.1.1.20"}} + }; + + template PAssertedService m_pAssertedService (PAssertedServiceValue p_pAssertedServiceValue):= + { + fieldName := P_ASSERTED_SERVICE_E, + pAssertedServiceValue := p_pAssertedServiceValue + }; + + template PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := + { + fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, + chargeAddrParams := {{id:="ccf",paramValue :="192.1.1.1"}, // value is fixed because it is deleted on proxy + {id:="ecf",paramValue :="192.1.1.2"}} // value is fixed because it is deleted on proxy + }; + + + template PChargingVector m_pChargingVector_fixedValue(charstring p_homeDomain) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := {{id:="icid-value", paramValue :="123abc"}, + {id:="icid-generated-at", paramValue :="192.1.1.10"}, + {id:="orig-ioi", paramValue := p_homeDomain}} + }; + template PChargingVector m_pChargingVector_fixedValue1(charstring p_homeDomain) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id:="icid-generated-at", paramValue :="192.1.1.10"}, + {id:="orig-ioi", paramValue := p_homeDomain}} + }; + + template PChargingVector mw_pChargingVector(template charstring p_id, template charstring p_paramValue) := + { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := superset({id := valueof(p_id), paramValue := p_paramValue}) + }; + + template PMediaAuthorization m_pMediaAuthorization_fixedValue := + { + fieldName := P_MEDIA_AUTHORIZATION_E, + pMediaAuthorizations := {"A"} // example + }; + + + template PEarlyMedia m_pEarlyMedia_sup := + {fieldName := P_EARLY_MEDIA_E, em_param := {"supported"}}; + + + template ProxyRequire m_proxyRequire_secAgree := + { + fieldName := PROXY_REQUIRE_E, + optionsTags := {"sec-agree"} + }; + + template PVisitedNetworkID mw_pVisitedNetworkID := + { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := {{vNetworkSpecToken := PX_IMS_SUT_PCSCF_VisitedNetworkID, + genericParams := *}} + } + + template RecordRoute m_recordRoute_notmatching:= + { + fieldName := RECORD_ROUTE_E, + routeBody := + {{ + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber := "unknown", password := omit}, + hostPort := + { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } } + }; + + template Require m_require_secAgree := + { + fieldName := REQUIRE_E, + optionsTags := {"sec-agree"} + }; + + template Require mw_require_path := + { + fieldName := REQUIRE_E, + optionsTags := superset("path") + }; + + template Route m_route_interface (in ImsInterfaceProfile p_interfaceprofile):= + { + fieldName := ROUTE_E, + routeBody := {{nameAddr := {displayName := omit, + addrSpec := {scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := {host:=p_interfaceprofile.SUTIpaddr, portField:= p_interfaceprofile.SUTPort}, + urlParameters := omit, + headers := omit} + }, + rrParam := omit} + }}; + + template Route m_route_notmatching:= + { + fieldName := ROUTE_E, + routeBody := + {{ + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber := "unknown", password := omit}, + hostPort := + { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } } + }; + + template SessionExpires m_se(DeltaSec p_ds):= + { + fieldName := SESSION_EXPIRES_E, + deltaSec:=p_ds, + seParam:=omit + } + + template SessionExpires mw_se:= + { + fieldName := SESSION_EXPIRES_E, + deltaSec:=?, + seParam:=omit + } + + template Supported m_supported_timer:= + { + fieldName := SUPPORTED_E, + optionsTags := {"timer"} + } + + template To m_To_targetRefreshRequest(template To p_To) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := p_To.addressField.nameAddr.displayName, + addrSpec := p_To.addressField.nameAddr.addrSpec + }},//end addressField + toParams := {{id := c_tagId, paramValue := f_getRndTag()}} + }; + + template ViaBody m_ViaBody_virtualUEinPCSCF(charstring branch_val,in SipUserProfile p_userprofile) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_userprofile.contactIpaddr, portField:= p_userprofile.contactPort}, + viaParams:={{id :=c_branchId,paramValue :=branch_val}} + } + + template Via m_via_notmatching:= + { + fieldName := VIA_E, + viaBody := + {{ + sentProtocol := valueof(m_SentProtocol("UDP")), + sentBy:={host:="unknown.domain.name", portField:= 10000}, + viaParams:={{id :=c_branchId,paramValue :="abcd0000"}} + } } + }; + + /* + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template WwwAuthenticate m_wwwAuthenticate (Challenge p_challenge):= + { + fieldName := WWW_AUTHENTICATE_E, + challenge := p_challenge + } + + /* + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template WwwAuthenticate mw_wwwAuthenticate (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := WWW_AUTHENTICATE_E, + challenge := + {digestCln := p_semicolonParam_List // set of GenericParam + } + } + + + + /* + * @desc AcceptContact header field + * @param p_acValues value + */ + template AcceptContact m_acceptContact (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := ACCEPT_CONTACT_E, + acValues := {{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam + } + } + + /* + * @desc Authenticate header field + * @param p_challenge value + */ + template AcceptContact mw_acceptContact (template SemicolonParam_List p_semicolonParam_List):= + { + fieldName := ACCEPT_CONTACT_E, + acValues := + {{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam + } + } + +} // end group HeaderFieldTemplates + +group MessageBodyTemplates { + +group XMLTemplates { + + template XmlBody m_XmlBody_ConfInfo(template Conference_info p_confInfo) := + { + conferenceInfo := p_confInfo + }; + + template XmlBody m_XmlBody_PSTNTransit(template PSTN_transit p_pstn) := + { + pstnTransit := p_pstn + }; + + template XmlBody mw_XmlBody_ConfInfo(template Conference_info p_confInfo) := + { + conferenceInfo := p_confInfo + }; + + template XmlBody mw_XmlBody_PSTNTransit(template PSTN_transit p_pstn) := + { + pstnTransit := p_pstn + }; + +}// end group XMLTemplates + +group PSTNTemplates { + + template PSTN_transit m_PSTN_transit(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi}, + Display := {p_d} + } + + template PSTN_transit m_PSTN_transit_2PI(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template ProgressIndicatorType p_pi2, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi, p_pi2}, + Display := {p_d} + } + + template PSTN_transit m_PSTN_transit_3PI(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2, + template HighLayerCompatibilityType p_hlc, + template HighLayerCompatibilityType p_hlc2, + template LowLayerCompatibilityType p_llc, + template ProgressIndicatorType p_pi, + template ProgressIndicatorType p_pi2, + template ProgressIndicatorType p_pi3, + template DisplayType p_d) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {p_hlc, p_hlc2}, + LowLayerCompatibility := p_llc, + ProgressIndicator := {p_pi, p_pi2, p_pi3}, + Display := {p_d} + } + + template PSTN_transit mw_PSTN_transit_bc(template BearerCapabilityType p_bct, + template BearerCapabilityType p_bct2) := + { + BearerInfomationElement := {p_bct, p_bct2}, + HighLayerCompatibility := {*, *}, + LowLayerCompatibility := *, + ProgressIndicator := {*}, + Display := {*} + } + + + template BearerCapabilityType m_BearerCapabilityType (template Bit5 p_InfoTrfCap):= { + BCoctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + BCoctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + BCoctet4_1 := omit, + BCoctet5 := omit, + BCoctet5a := omit, + BCoctet5bV110 := omit, + BCoctet5bV120 := omit, + BCoctet5c := omit, + BCoctet5d := omit, + BCoctet6 := omit, + BCoctet7 := omit, + BCoctet7a := omit, + BCoctet7b := omit + } + + template ProgressIndicatorType m_ProgressIndicatorType (template Bit7 p_progDesc) := { + ProgressOctet3 := {CodingStandard := bit2str('00'B), + Location := bit2str('0000'B) + }, + ProgressOctet4 := {ProgressDescription := bit2str(p_progDesc)} + } + + template LowLayerCompatibilityType m_LowLayerCompatibilityType (template Bit5 p_InfoTrfCap) := { + LLOctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + LLOctet3a := omit, + LLOctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + LLOctet4_1 := omit, + LLOctet5 := omit, + LLOctet5a := omit, + LLOctet5bV110 := omit, + LLOctet5bV120 := omit, + LLOctet5c := omit, + LLOctet5d := omit, + LLOctet6 := omit, + LLOctet6aHDLC := omit, + LLOctet6aUserSpecific := omit, + LLOctet6b := omit, + LLOctet7 := omit, + LLOctet7aUserSpecific := omit, + LLOctet7aX25 := omit, + LLOctet7bX25 := omit, + LLOctet7c := omit, + LLOctet7aTR9577 := omit, + LLOctet7bTR9577 := omit + } + + template HighLayerCompatibilityType m_HighLayerCompatibilityType + (template Bit7 p_HLOctet4):= { + HLOctet3 := { + CodingStandard :=bit2str('00'B), + Interpretation :=bit2str('100'B), + PresentationMethod := bit2str('01'B) + }, + HLOctet4 := { + HighLayerCharacteristics := bit2str(p_HLOctet4) + }, + HLOctet4aMaintenance := omit, + HLOctet4Audio := omit + } + + template BearerCapabilityType mw_BearerCapabilityType (template BCOctet3Type p_BCOctet3Type, template BCOctet4Type p_BCOctet4Type):= { + BCoctet3 := p_BCOctet3Type, + BCoctet4 := p_BCOctet4Type, + BCoctet4_1 := * , + BCoctet5 := * , + BCoctet5a := * , + BCoctet5bV110 := * , + BCoctet5bV120 := * , + BCoctet5c := * , + BCoctet5d := * , + BCoctet6 := * , + BCoctet7 := * , + BCoctet7a := * , + BCoctet7b := * + } + + template BearerCapabilityType mw_BearerCapabilityType_TrfCap (template Bit5 p_InfoTrfCap):= { + BCoctet3 := {CodingStandard := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability + BCoctet4 := {TransferMode := bit2str('00'B), //Coding standard = CCITT standardized coding + InformationTransferRate := bit2str('10000'B)}, //Information transfer rate = 64 kbit/s + BCoctet4_1 := * , + BCoctet5 := * , + BCoctet5a := * , + BCoctet5bV110 := * , + BCoctet5bV120 := * , + BCoctet5c := * , + BCoctet5d := * , + BCoctet6 := * , + BCoctet7 := * , + BCoctet7a := * , + BCoctet7b := * + } + + template ProgressIndicatorType mw_ProgressIndicatorType (template ProgressOctet3Type p_ProgressOctet3Type, template ProgressOctet4Type p_ProgressOctet4Type) := { + ProgressOctet3 := p_ProgressOctet3Type, + ProgressOctet4 := p_ProgressOctet4Type + } + + template LowLayerCompatibilityType mw_LowLayerCompatibilityType + (template LLOctet3Type p_LLOctet3, template LLOctet4Type p_LLOctet4, template LLOctet7Type p_LLOctet7) := { + LLOctet3 := p_LLOctet3, + LLOctet3a := * , + LLOctet4 := p_LLOctet4, + LLOctet4_1 := * , + LLOctet5 := * , + LLOctet5a := * , + LLOctet5bV110 := * , + LLOctet5bV120 := * , + LLOctet5c := * , + LLOctet5d := * , + LLOctet6 := * , + LLOctet6aHDLC := * , + LLOctet6aUserSpecific := * , + LLOctet6b := * , + LLOctet7 := p_LLOctet7, + LLOctet7aUserSpecific := * , + LLOctet7aX25 := * , + LLOctet7bX25 := * , + LLOctet7c := * , + LLOctet7aTR9577 := * , + LLOctet7bTR9577 := * + } + + template HighLayerCompatibilityType mw_HighLayerCompatibilityType + (template HLOctet3Type p_HLOctet3, template HLOctet4Type p_HLOctet4):= { + HLOctet3 := p_HLOctet3, + HLOctet4 := p_HLOctet4, + HLOctet4aMaintenance := *, + HLOctet4Audio := * + } + +} //end group PSTNTemplates +} // end group MessageBodyTemplates + +group MessageTemplates { + +group modified_templates { + +group request_send { + + template BYE_Request m_BYE_Request_IMS + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + route := p_route + } + } + + template BYE_Request m_BYE_Request_Reason_IMS + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route, integer p_cause) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template BYE_Request m_BYE_Request_UE + ( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_Reason_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route, integer p_cause) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template CANCEL_Request m_CANCEL_Request_UE (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Route p_route) modifies m_CANCEL_Request_Base := + { + msgHeader := + { + route := p_route + } + } + + template INVITE_Request m_INVITE_Request_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_Mime_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_IMS + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_mimeMultipart} + } + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template AcceptContact p_acceptContact, template PAssertedID p_pAssertedID, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + acceptContact := p_acceptContact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template PAssertedID p_pAssertedID, template Privacy p_privacy, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + privacy := p_privacy, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PAssertedService_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template PAssertedService p_pAssertedService) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + pAssertedService := p_pAssertedService + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_PEarlyMedia_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template RecordRoute p_recordRoute, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb ) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + pEarlyMedia := m_pEarlyMedia_sup, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template INVITE_Request m_INVITE_Request_PPreferred_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb,template PPreferredID p_pPreferredID ) + modifies m_INVITE_Request_UE + := + { + msgHeader := + { + pPreferredID := p_pPreferredID + } + } + + template INVITE_Request m_INVITE_Request_SessionExpires_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb, template SessionExpires p_se) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported, + sessionExpires := p_se + }, + messageBody := p_mb + } + + template INVITE_Request m_INVITE_Request_minSE_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template MessageBody p_mb, template MinSE p_minSE) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + /* + * + * @desc INVITE message exchanged at Mw + * + */ + template INVITE_Request m_INVITE_Request_minSE_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template Require p_require, + template Route p_route, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template MinSE p_minSE) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + template MESSAGE_Request m_MESSAGE_Request_NoBody_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PCharging_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingVector_fixedValue(PX_IMS_SUT_UE1_HOME_DOMAIN), + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PCharging_IMS + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported, + template PChargingVector p_pChargingVector) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pMediaAuthorization := m_pMediaAuthorization_fixedValue, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_PPreferred_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported, template PPreferredID p_pPreferredID) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pPreferredID := p_pPreferredID, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, template Require p_require, + template Route p_route, template Supported p_supported) + modifies m_MESSAGE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_TextPlainLength(valueof(m_MBody_longPlainText))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_plainText}, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + //securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation + supported := p_supported + }, + messageBody := m_MBody_longPlainText + } + + template REGISTER_Request m_REGISTER_Request_UE (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization, + template ProxyRequire p_proxyRequire, template Require p_require, + template SecurityClient p_securityClient, template SecurityVerify p_securityVerify, template Supported p_supported) + modifies m_REGISTER_Request_Base := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + proxyRequire := p_proxyRequire, + require := p_require, + securityClient := p_securityClient, + securityVerify := p_securityVerify, + supported := p_supported, + toField := p_to, + via := p_via + + } + } + + + template REGISTER_Request m_REGISTER_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization) + modifies m_REGISTER_Request_Base := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + + } + } + template REGISTER_Request m_REGISTER_Request_expires_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization, template DeltaSec p_deltaSec) + modifies m_REGISTER_Request_IMS := + { + msgHeader := + { + expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec} + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_UE (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact) modifies m_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + event := m_Event_reg, + expires := m_Expires_600000 + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact) modifies m_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := + { + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + event := m_Event_reg, + expires := m_Expires_600000 + } + } + +}//end group request_send + +group request_receive { + + template ACK_Request mw_ACK_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + + template ACK_Request mw_ACK_Request_PchargingVector (template CallId p_callId, template PChargingVector p_pChargingVector) + modifies mw_ACK_Request_Base + := + { + msgHeader := { pChargingVector := p_pChargingVector} + } + + template BYE_Request mw_BYE_Request_noPChargingFunction_UE(template CallId p_callId) modifies mw_BYE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template BYE_Request mw_BYE_Request_via_PChargingVector_UE(template CallId p_callId, template PChargingVector p_pChargingVector, template Via p_via) modifies mw_BYE_Request_Base + := + { + msgHeader := {pChargingVector := p_pChargingVector, + via := p_via} + } + + template INVITE_Request mw_INVITE_Request_noPChargingFunction modifies mw_INVITE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := omit} + } + template INVITE_Request mw_INVITE_Request_PChargingFunction modifies mw_INVITE_Request_Base + := + { + msgHeader := {pChargingFunctionAddresses := ?} + } + + template INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred (template PAssertedID p_pAssertedID)modifies mw_INVITE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact (template PAssertedID p_pAssertedID, template AcceptContact p_acceptContact) modifies mw_INVITE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + acceptContact := p_acceptContact + } + } + + template INVITE_Request mw_INVITE_Request_RecordRoute_Via (template RecordRoute p_recordRoute, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := {recordRoute := p_recordRoute, + via := p_via} + } + + template INVITE_Request mw_INVITE_Request_route (template Route p_route) modifies mw_INVITE_Request_Base + := + { + msgHeader := {route := p_route} + } + + + template INVITE_Request mw_INVITE_Request_SessionExpires (template SessionExpires p_sessionExpires) modifies mw_INVITE_Request_Base + := + { + msgHeader := {sessionExpires := p_sessionExpires} + } + + template INVITE_Request mw_INVITE_Request_IMS (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template INVITE_Request mw_INVITE_Request_IMS_mb (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + }, + messageBody := ? + } + + template INVITE_Request mw_INVITE_Request_IMS_pstn (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via, template PSTN_transit p_pstn ) modifies mw_INVITE_Request_Base + := + { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + }, + messageBody := (mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)))//m_MBody_PSTN(p_pstn)//PSTN_transit + } + + /* + * + * @desc Await INVITE using topology hiding + */ + template INVITE_Request mw_INVITE_Request_TH modifies mw_INVITE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + + + template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingFunctionAddresses := omit, + pChargingVector := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred (template CallId p_callId, template PAssertedID p_pAssertedID)modifies mw_MESSAGE_Request_Base + := + { + msgHeader := {pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template MESSAGE_Request mw_MESSAGE_Request_PchargingVector (template CallId p_callId,template charstring p_id, template charstring p_paramValue) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pChargingVector := mw_pChargingVector(p_id,p_paramValue)} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + + template MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization (template CallId p_callId) + modifies mw_MESSAGE_Request_Base + := + { + msgHeader := { pMediaAuthorization := omit} + } + + template PUBLISH_Request mw_PUBLISH_Request_PchargingVector(template CallId p_callId, template PChargingVector p_pChargingVector) modifies mw_PUBLISH_Request_Base := + { + msgHeader := { pChargingVector := p_pChargingVector} + } + + template REGISTER_Request mw_REGISTER_Request_IMS (template Path p_Path, template PChargingVector p_pChargingVector, template PVisitedNetworkID p_pVisitedNetworkID) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := ?, + path := p_Path, + pChargingVector := p_pChargingVector, //mw_pChargingVector(p_id,p_paramValue) + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + securityClient := omit, + securityVerify := omit + } + } + + + + template REGISTER_Request mw_REGISTER_authorizedRequest_IMS (template Authorization p_authorization) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := p_authorization + } + } + + template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS (template Authorization p_authorization) + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := p_authorization, + securityClient := omit + } + } + template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { securityVerify := omit, + securityClient := omit + } + } + + template REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS + modifies mw_REGISTER_Request_Base + := + { + msgHeader := { authorization := omit + } + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS (template From p_from, To p_to, template PAssertedID p_pAssertedID, template PChargingVector p_pChargingVector) modifies mw_SUBSCRIBE_Request_Base := + { + requestLine := + { + method := SUBSCRIBE_E + }, + msgHeader := + { fromField := p_from, + toField := p_to, + event := m_Event_reg, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + pChargingVector := p_pChargingVector + } + } + +}//end group request_receive +group response_send +{ + template Response m_Response_2xxonBYE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_18XonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + //contact := p_contact, + //maxForwards := omit, + //rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + template Response m_Response_18XonINVITE_sdp_require (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb,template Require p_require ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + require := p_require, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + }, + messageBody := p_mb + } + + template Response m_Response_18XonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + + template Response m_Response_18XonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via ) modifies m_Response_Base:= + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + + } + } + + template Response m_Response_18XonINVITE_pEearlyMedia (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PEarlyMedia p_pEarlyMedia ) modifies m_Response_Base:= + { + msgHeader := + { + pEarlyMedia := p_pEarlyMedia + } + } + + + template Response m_Response_18XonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + pPreferredID := p_pPreferredID, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + } + + template Response m_Response_18XonINVITE_recordRoute_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999},//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + recordRoute := p_recordRoute//for INVITE response + } + } + + template Response m_Response_18XonINVITE_Xml (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_xmlAplication}, + maxForwards := omit, + rSeq := {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_Mime (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_mimeMultipart}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via,MessageBody p_mb ) modifies m_Response_mbody := + { + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + + } + } + + template Response m_Response_2XXonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID, template RecordRoute p_recordRoute, template MessageBody p_mb) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + pPreferredID := p_pPreferredID, + recordRoute := p_recordRoute//for INVITE response + }, + messageBody := p_mb + } + + template Response m_Response_2xxonREGISTER_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, SipUrl p_serviceroute_sip_url) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + serviceRoute := {fieldName:=SERVICE_ROUTE_E, + routeBody:={{ nameAddr:= {displayName:=omit,addrSpec:=p_serviceroute_sip_url},rrParam:=omit}}} + } + } + + + template Response m_Response_2xxonSUBSCRIBE_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact + } + } + + + template Response m_Response_2xxonSUBSCRIBE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact + } + } + + template Response m_Response_onMESSAGE_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + contact := p_contact + } + } + + template Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a + } + } + + template Response m_Response_2xxonMESSAGE_PCharging_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingFunctionAddresses_fixedValue + } + } + + + template Response m_Response_2xxonMESSAGE_PCharging_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template Response m_Response_2xxonMESSAGE_PMediaAuth_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template Response m_Response_2xxonMESSAGE_pPreferredID_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template PPreferredID p_pPreferredID) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pPreferredID := p_pPreferredID + } + } + + template Response m_Response_2xxonUPDATE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) + modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + maxForwards := omit, + recordRoute := p_recordRoute + }, + messageBody := p_mb + } + + template Response m_Response_4XXonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_4XXonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact ) modifies m_Response_Base:= + { + msgHeader := + { + contact := p_contact, + maxForwards := omit + } + } + + template Response m_Response_WWWauthenticate_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template WwwAuthenticate p_wwwAuthenticate) modifies m_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + wwwAuthenticate := p_wwwAuthenticate + } + } + +}//end group response_send + +group response_receive +{ + + template Response mw_Response_200onINVITE_noPChargingVector_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingVector := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPCharging_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPCharging_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + + template Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAccessNetworkInfo := omit + } + } + + template Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pMediaAuthorization := omit + } + } + + template Response mw_Response_401onREGISTER_securityServer_UE(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + securityServer := ?, + wwwAuthenticate := ? + } + } + + template Response mw_Response_401onREGISTER_WWWauthenticate_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template WwwAuthenticate p_wwwAuthenticate) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + wwwAuthenticate := p_wwwAuthenticate + } + } + + template Response mw_Response_200onREGISTER_IMS(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template SipUrl p_ue_uri, template Contact p_contact, template SipUrl p_sut_scscf_uri) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAssociatedURI := {fieldName := P_ASSOCIATED_URI_E, nameAddrList:={*,{nameAddr:={displayName:=*,addrSpec:=p_ue_uri},genericParams:=*},*}}, + path := ?, + serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={displayName:=*,addrSpec:=p_sut_scscf_uri},rrParam:=*}}}, + pChargingFunctionAddresses := ?, + pChargingVector := ?, + contact := p_contact + } + } + + template Response mw_Response_PpreferredID_PassertedID(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template PPreferredID p_pPreferredID, template PAssertedID p_pAssertedID) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pAssertedID := p_pAssertedID, + pPreferredID := p_pPreferredID + } + } + + template Response mw_Response_PchargingVector(template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template PChargingVector p_chargingVector) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + pChargingVector := p_chargingVector // mw_pChargingVector(p_id,p_paramValue) + } + } + +} // end response_receive + +}//end modified_templates + +}//end Message_templates + +} // end module LibIms_Templates diff --git a/LibSip/LibSip_Interface.ttcn b/LibSip/LibSip_Interface.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..cd55e33700016aa8f414a42920e9b8c0fbf28674 --- /dev/null +++ b/LibSip/LibSip_Interface.ttcn @@ -0,0 +1,175 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibSip_Interface +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_AbstractData all; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + + import from LibSip_PIXITS all; + //AtsIms + import from SipIsup_PIXITS all; + //LibIms + import from LibIms_SIPTypesAndValues all; + + group AdressTypes + { + type record address4SIP + { + //HostPort + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } with { encode "SIPCodec" } + + type address4SIP address; + +// type address WorkaroundAddress; //Remove it later + }// end group AdressTypes + + type port SipPort message { + inout Request, + REGISTER_Request, + INVITE_Request, + OPTIONS_Request, + BYE_Request, + CANCEL_Request, + ACK_Request, + PRACK_Request, + NOTIFY_Request, + SUBSCRIBE_Request, + PUBLISH_Request, + UPDATE_Request, + REFER_Request, + MESSAGE_Request, + INFO_Request, + Response, + Raw } with { extension "address" }; + + signature s_SIP_conversation (in charstring text, out boolean answer); + signature s_SIP_ringing (in charstring text, out boolean answer); + type port operatorPort procedure {inout s_SIP_conversation; inout s_SIP_ringing}; + + // Solution for building error problem. (Important for validation) + //type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module + //With this solution TAU compiler error. +// type component ImsComponent extends SipComponent +// { +// // general variables +// var ImsInterfaceProfile vc_interfaceprofile +// } // end ImsComponent + + type component SipComponent + { + //port + port SipPort SIPP; + // used for communication with the operator + port operatorPort opPort; + + // current address to send TCP/UDP messages + var SipUserProfile vc_userprofile; // PIXIT userinformation + var address vc_sent_label := {host := PX_SIP_SUT_IPADDR, portField := PX_SIP_SUT_PORT}; + + // last incoming message + var Response vc_response; // last incoming response message + var boolean vc_boo_response := false; // to check if response received or not + var Request vc_request; // last incoming request message + var boolean vc_boo_request := false; // to check if request received or not + var Request vc_requestFor407; // last INVITE request to be authorized if 407/401 received from Proxy + + var SipUrl vc_requestUri := c_empty_RequestUri; + var charstring vc_branch := ""; + var charstring vc_branch_ICSCF := ""; + var charstring vc_branch_SCSCF := ""; + + // SIP message header fields (for building next message) + var CallId vc_callId := c_empty_CallId; + var CallId vc_callIdReg := c_empty_CallId; + var From vc_from := c_empty_From; + var To vc_to := c_empty_To; + var To vc_cancel_To := c_empty_To; // used for next CANCEL + var Via vc_via := c_empty_Via; + var Via vc_via_REG := c_empty_Via; // via used in last REGISTER + + var RecordRoute vc_recordRoute; // value of RecordRoute header + var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute + var Route vc_route; // value of Route header + var boolean vc_boo_route := false; // boolean indicates valid Route + + var Contact vc_contact; // value of Contact header + var CSeq vc_cSeq := c_empty_cSeq; // value of CSeq header + var RAck vc_rAck := { fieldName := RACK_E, responseNum := 1, seqNumber := 1, method := "INVITE"}; // value of RAck header + var HostPort vc_reqHostPort := {host:=PX_SIP_SUT_IPADDR, portField:=PX_SIP_SUT_PORT}; // address to send request + var Privacy vc_privacy; + var HistoryInfo_List vc_historyInfoList := {}; // value of history list according to RFC4244 + var SipUrl vc_confURI; // conference URI according to TS124147 ch. 5.3.1.3.2 + var SDP_Message vc_sdp_remote; // incoming SDP offers + var SDP_Message vc_sdp_local; // SDP values to be sent + var XmlBody vc_xml_remote; // incoming XML value + var XmlBody vc_xml_local; //SDP values to be sent + + var CSeq vc_iut_CSeq := c_empty_cSeq; // value of last CSeq header used by the IUT in request + // To/From header-fields to be used if the callee will release the session + var To vc_callee_To := c_empty_To; + var From vc_callee_From := c_empty_From; + // To/From header-fields to be used if the caller will release the session + var To vc_caller_To := c_empty_To; + var From vc_caller_From := c_empty_From; + var Authorization vc_authorization; + + // variables for storing default references + var default vc_default; + var default vc_def_catchSyncStop; + + // general timers + timer tc_T1 := PX_SIP_T1; + timer tc_Tf := PX_SIP_TF; + timer tc_wait := PX_SIP_TWAIT; + timer tc_ack := PX_SIP_TACK; + timer tc_resp := PX_SIP_TRESP; + timer tc_noAct := PX_SIP_TNOACT; // time for SUT to get idle state +// timer TRept; +// timer TSync := PX_SIP_TSYNC; +// timer TGuard := PX_SIP_TGUARD; + timer tc_tDelay := 32.0; + + var float vc_tcRESP := PX_SIP_TRESP; // standard value for TRESP (may be modified in particular tests) + + // indicators set/used parameter status or state handling in default + var boolean vc_sdp_remote_is_valid := false; // true if there is a value in v_SDP_remote + var boolean vc_history_is_valid := false; // true if there is a HistoryList in response message + var boolean vc_send_SDP := false; // send SDP in the next outgoing message + var boolean vc_ignore_bye := false; // enable ignore of repeated bye in default + var boolean vc_ignore_invite := false; // enable ignore invite in default + var boolean vc_ignore181 := false; // enable ignore of 181 in default + var boolean vc_ignore484 := false; // enable ignore of 484 in default + var boolean vc_ignore4xx := false; // enable ignore of 4xx in default + var boolean vc_ignore200OKinv := false; // enable ignore of 200OKinv in default + var boolean vc_supported_100rel := false; // true if the received invite contains 100rel + var boolean vc_supported_precondition:= false; // true if the received invite contains precondition + var boolean vc_MESSAGEreceived := false; // true if MESSAGE received during altstep + var boolean vc_first_recv := false; // true after receipt of first incomming SIP message + var boolean vc_firstREGISTER_sent := false; // true after sent of first REGISTER message + + // parts needed for Client/SelfSyncComp type compatibility + var StringStack v_stateStack := c_initStringStack; + port SyncPort syncSendPort; + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + +// // used for communication with the operator +// port operatorPort_SIP opPort; + + } // end SipComponent + +} // end module AtsIms_TestSystem diff --git a/LibSip/LibSip_PIXITS.ttcn b/LibSip/LibSip_PIXITS.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c664cfad9f51d896620e3accb210501b49216459 --- /dev/null +++ b/LibSip/LibSip_PIXITS.ttcn @@ -0,0 +1,364 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + * NOTE: PIXITS in folowing groups can be ignored if this information + * is provided in other modules of the ATS that uses this SIP library + * - Ports_and_addresses_of_the_SUT + * - PortsAndAddressesOfTheTS1 + * - PortsAndAddressesOfTheTS2 + * - PortsAndAddressesOfTheTS3 + * - ParametersForHTTP_Authentication + */ + +module LibSip_PIXITS +{ + //LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + +// _____________________________ PIXIT-S_______________________________ + group SIP_PIXITparameters{ + group SDPParameter { + modulepar { + + /** @desc charstring for SDP dynamic port + */ + charstring PX_SIP_SDP_dyn := "0"; + + /** @desc charstring for SDP bandwidth modifier + */ + charstring PX_SIP_SDP_b_modifier := "AS"; + + /** @desc integer for SDP bandwidth value + */ + integer PX_SIP_SDP_b_bandwidth := 64; + + /** @desc charstring for SDP media attribute encoding supported by the IUT + */ + charstring PX_SIP_SDP_encoding := "PCMU/8000"; + + /** @desc charstring for SDP media attribute encoding unavailable by the IUT + */ + charstring PX_SIP_SDP_encoding_unavail := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 + + /** @desc charstring for SDP media attribute encoding unsupported by the IUT + */ + charstring PX_SIP_SDP_encoding_unsup := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 + + /** @desc charstring for SDP media T.38 transport (used in TC2101_IS___AU__09) + */ + charstring PX_SIP_SDP_transport := "udptl"; + } // modulepar + } //group SDP Parameter + + group ISUPinterworkingParameters{ + modulepar { + /** @desc charstring for Used CPC language + */ + charstring PX_SIP_ISUP_LANGUAGE := "English"; + /** @desc charstring for Used CPC language + */ + charstring PX_SIP_ISUP_CPC_VALUE := "prison"; + }//modulepar + } // goup PSTNParameters + + group SupportedOptions{ + modulepar { + + /** @desc boolean for True if 100rel mechanism is supported in SIP + */ + boolean PX_SIP_100rel := false; + + /** @desc boolean for True if precondition mechanism is supported in SIP + */ + boolean PX_SIP_precondition := false; + + /** @desc boolean for True if UDP Transport is used by the IUT to run campaign + */ + boolean PX_SIP_UDP := true; + + /** @desc charstring for Used Transport in upper case "UDP"/"TCP" + */ + charstring PX_SIP_TRANSPORT := "UDP"; + }//modulepar + }// group SupportedOptions{ + + // PIXITS in group Ports_and_addresses_of_the_SUT can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group Ports_and_addresses_of_the_SUT{ + modulepar{ + + /** @desc integer for SUT port number to exchange SIP messages + */ + integer PX_SIP_SUT_PORT := 5060; + + /** @desc charstring for SUT IP address to exchange SIP messages + */ + charstring PX_SIP_SUT_IPADDR := "172.27.16.115"; + + /** @desc charstring for SUT domain + */ + charstring PX_SIP_SUT_HOME_DOMAIN := "172.27.16.115"; + + /** @desc charstring for unknown SUT domain + */ + charstring PX_SIP_SUT_HOME_DOMAIN_UNKNOWN := "172.88.88.88"; + + } //modulepar + } + + // PIXITS in group PortsAndAddressesOfTheTS1 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS1 { +// Ports and addresses of the TS1 (tester), first access + modulepar { + /** @desc integer for port number used by the TS1 to exchange SIP messages + */ + integer PX_SIP_TS1_PORT := 5060; + + /** @desc charstring for IP address used by the TS1 to exchange SIP messages + */ + charstring PX_SIP_TS1_IPADDR := "172.27.1.218"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS1_LOCAL_DOMAIN := "172.27.1.218"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS1_LOCAL_USER := "2910"; + + /** @desc charstring for identity of the user with active call diversion service + */ + charstring PX_SIP_TS1_LOCAL_USER_DIV := "2907"; + + /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) + */ + charstring PX_SIP_TS1_LOCAL_USER_FULL := "+ 33492941111"; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS1_BEARER_PORT := 52000; + + /** @desc charstring for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS1_BEARER_PORT2 := 62000; + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring PX_SIP_TS1_BEARER_IPADDR := "172.27.1.218"; + }//modulepar + }// group PortsAndAddressesOfTheTS + + // PIXITS in group PortsAndAddressesOfTheTS2 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS2 { +// Ports and addresses of the TS2 (tester), second access + modulepar { + + /** @desc integer for port number used by the TS2 to exchange SIP messages + */ + integer PX_SIP_TS2_PORT := 5060; + + /** @desc charstring for IP address used by the TS2 to exchange SIP messages + */ + charstring PX_SIP_TS2_IPADDR := "172.27.1.219"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS2_LOCAL_DOMAIN := "172.27.1.219"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS2_LOCAL_USER := "2911"; + + /** @desc charstring for identity of the user with active call diversion service + */ + charstring PX_SIP_TS2_LOCAL_USER_DIV := "2011"; + + /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) + */ + charstring PX_SIP_TS2_LOCAL_USER_FULL := "+ 33 4 92941111"; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS2_BEARER_PORT := 53000; + + /** @desc integer for port number used by the TS to exchange media streams + */ + integer PX_SIP_TS2_BEARER_PORT2 := 63000; + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring PX_SIP_TS2_BEARER_IPADDR := "172.27.1.218"; + + } // modulepar + }//group PortsAndAddressesOfTheTS2 + + // PIXITS in group PortsAndAddressesOfTheTS3 can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group PortsAndAddressesOfTheTS3 { +// Ports and addresses of the TS3 (tester), second access + modulepar{ + /** @desc integer for Port number used by the TS3 to exchange SIP messages + */ + integer PX_SIP_TS3_PORT := 5060; + + /** @desc charstring for IP address used by the TS3 to exchange SIP messages + */ + charstring PX_SIP_TS3_IPADDR := "172.27.1.220"; + + /** @desc charstring for identity of the tester local domain + */ + charstring PX_SIP_TS3_LOCAL_DOMAIN := "172.27.1.220"; + + /** @desc charstring for identity of the tester local user + */ + charstring PX_SIP_TS3_LOCAL_USER := "2012"; + + } //modulepar + } //group PortsAndAddressesOfTheTS3 + + group RegistrationParameters { + modulepar { + + /** @desc boolean for the SIP user if it have to register itself before executing a test case + */ + boolean PX_SIP_REGISTRATION := false; + + /** @desc integer for the minimun SIP user registration expires-value + */ + integer PX_SIP_REGISTRATION_exp_min := 3600; + + /** @desc charstring for REGISTRAR domain + */ + charstring PX_SIP_SUT_REGISTRAR_DOMAIN := "172.27.16.115"; + }// modulepar + }// group Registration parameters + + group ReleaseCause{ + modulepar { + /** @desc integer for Release cause to be used in BYE and in Failure messages + */ + integer PX_SIP_BYE_CAUSE := 16; + }//modulepar + }//group ReleaseCause + + group RTPStreamControlAndCheck{ + modulepar { + /** @desc boolean for True, if conversation check is implemented. + */ + boolean PX_SIP_CheckConversation := false; + + /** @desc boolean for True, if DTMF check is implemented. + */ + boolean PX_SIP_CheckDTMF := false; + + /** @desc boolean for True, if Announcement sending is implemented. + */ + boolean PX_SIP_SendAnnouncement := false; + + /** @desc boolean for True, if ringing check is implemented. + */ + boolean PX_SIP_CheckRinging := false; + }//modulepar + }//group RTPStreamControlAndCheck + + group SwitchToEnableAuthentication { + modulepar{ + /** @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages + */ + boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; + + /** @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages + */ + boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; + } + } + + // PIXITS in group ParametersForHTTP_Authentication can be ignored if this information is provided in other modules of the ATS that uses this SIP library + group ParametersForHTTP_Authentication { + modulepar{ + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_SIP_SUT_UE1_QOP := "auth"; + + /** @desc charstring for RFC 2617 3.2.2 username + * The name of user in the specified realm + */ + charstring PX_SIP_SUT_UE1_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring PX_SIP_SUT_UE1_PASSWD := "1234"; + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring PX_SIP_SUT_UE2_QOP := "auth"; + + /** @desc charstring for RFC 2617 3.2.2 username + * The name of user in the specified realm + */ + charstring PX_SIP_SUT_UE2_USERNAME := "abcd"; + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring PX_SIP_SUT_UE2_PASSWD := "1234"; + + }//modulepar + }//group ParametersForHTTP_Authentication + + group SIP_Timers { + modulepar { + /** @desc float for T1 RTT estimate (500 ms) + */ + float PX_SIP_T1 := 0.5; + + /** @desc float for T2 Maximum retransmit interval for non-INVITE requests and INVITE response (4000 ms) + */ + float PX_T2 := 4.0; + + /** @desc float for T4 Maximum duration a message will remain in the network + */ + float PX_T4 := 1.0; + + /** @desc float for TDELAY default value for timeout on outgoing SIP request (ie 64*T1) + */ + float PX_SIP_TF := 32.0; + + /** @desc float for TWait default value for waiting an operator action + */ + float PX_SIP_TWAIT := 30.0; + + /** @desc float for TAck default value for waiting an acknowledgement + */ + float PX_SIP_TACK := 8.0; + + /** @desc float for TResp default value for waiting for a response from the IUT + */ + float PX_SIP_TRESP := 15.0; + + /** @desc float for TNoAct default value for waiting no message from the IUT + * Value given for PX_TNOACT should be less than value of + * SHORT_REGISTRATION constant (which is currently "3" (seconds)) + */ + float PX_SIP_TNOACT := 1.0; + + /** @desc float for TSYNC default value to synchronise ptc + */ + float PX_SIP_TSYNC := 10.0; + + /** @desc float for TGUARD default value for an extra long timer to limit test execution + */ + float PX_SIP_TGUARD := 120.0; + + /** @desc float for TRespRetention minimum time that a Proxy will wait before sending a final response + */ + float PX_TRespRetention := 1.0; + }//modulepar + }//group SIP_Timers + } //group SIP_PIXITparameters +} // end module LibSip_PIXITS diff --git a/LibSip/LibSip_SDPTypes.ttcn b/LibSip/LibSip_SDPTypes.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9ee80e1fcfdcb367ae5ac2448a4b7accdbcc7b45 --- /dev/null +++ b/LibSip/LibSip_SDPTypes.ttcn @@ -0,0 +1,301 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the SDP type system for SIP tests. + * Module become from STF306 and STF334-336 + */ + +module LibSip_SDPTypes +{ + group Constants + { + group SimpleConstants + { + // SDP net_type + const charstring c_in := "IN"; + + // SDP addr_type + const charstring c_ip4 := "IP4"; + + //SDP_media_desc: media + const charstring c_audio := "audio"; + const charstring c_image := "image"; + const charstring c_video := "video"; + + //SDP_media_desc: transport + const charstring c_rtpAvp := "RTP/AVP"; + const charstring c_udptl := "Udptl"; + + //SDP_attribute_list constants: + const charstring c_local := "local"; + const charstring c_mandatory := "mandatory"; + const charstring c_none := "none"; + const charstring c_qos := "qos"; + const charstring c_remote := "remote"; + const charstring c_sendrecv := "sendrecv"; + } + } + group Types + { + group SubTypes + { + group AttributeTypes + { + type record SDP_attribute_cat { + charstring attr_value + } + + type record SDP_attribute_keywds { + charstring attr_value + } + + type record SDP_attribute_tool { + charstring attr_value + } + + type record SDP_attribute_ptime { + charstring attr_value + } + + type record SDP_attribute_recvonly { + } + + type record SDP_attribute_sendrecv { + } + + type record SDP_attribute_sendonly { + } + + type record SDP_attribute_inactive { + } + + type record SDP_attribute_orient { + charstring attr_value + } + + type record SDP_attribute_type { + charstring attr_value + } + + type record SDP_attribute_charset { + charstring attr_value + } + + type record SDP_attribute_sdplang { + charstring attr_value + } + + type record SDP_attribute_lang { + charstring attr_value + } + + type record SDP_attribute_framerate { + charstring attr_value + } + + type record SDP_attribute_quality { + charstring attr_value + } + + type record SDP_attribute_fmtp { + charstring attr_value + } + + type record SDP_attribute_curr { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_des { + charstring preconditionType, + charstring strength, + charstring statusType, + charstring direction + } + + type record SDP_attribute_conf { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_rtpmap { + charstring attr_value + } + + type record SDP_attribute_rtcp { + charstring attr_value + } + + type record SDP_attribute_unknown { + charstring name, + charstring attr_value optional + } + + + type union SDP_attribute { + SDP_attribute_cat cat, + SDP_attribute_keywds keywds, + SDP_attribute_tool tool, + SDP_attribute_ptime ptime, + SDP_attribute_recvonly recvonly, + SDP_attribute_sendrecv sendrecv, + SDP_attribute_sendonly sendonly, + SDP_attribute_inactive inactive, + SDP_attribute_orient orient, + SDP_attribute_type sdp_type, + SDP_attribute_charset charset, + SDP_attribute_sdplang sdplang, + SDP_attribute_lang lang, + SDP_attribute_framerate framerate, + SDP_attribute_quality quality, + SDP_attribute_fmtp fmtp, + SDP_attribute_curr curr, + SDP_attribute_des des, + SDP_attribute_conf conf, + SDP_attribute_rtpmap rtpmap, + SDP_attribute_rtcp rtcp, + + // unknown has to be the last else encoding/decoding won't work! + SDP_attribute_unknown unknown + } + } // group AttributeTypes + + type set of SDP_attribute SDP_attribute_list; + + type record SDP_bandwidth { + charstring modifier, + integer bandwidth + } + + type set of SDP_bandwidth SDP_bandwidth_list; + + type record SDP_connection { + charstring net_type, + charstring addr_type, + SDP_conn_addr conn_addr + } + + type record SDP_conn_addr { + charstring addr, + integer ttl optional, + integer num_of_addr optional + } + + type set of SDP_connection SDP_connection_list; + + type record SDP_contact { + charstring addr_or_phone, + charstring disp_name optional + } + + type SDP_contact SDP_contact_tel; + + type SDP_contact SDP_contact_email; + + type set of SDP_contact_email SDP_email_list; + + type record of charstring SDP_fmt_list ; + + type record SDP_key { + charstring method, + charstring key optional + } + + type record SDP_media_desc { + SDP_media_field media_field, + charstring information optional, + SDP_connection_list connections optional, + SDP_bandwidth bandwidth optional, + SDP_key key optional, + SDP_attribute_list attributes optional + } + + type set of SDP_media_desc SDP_media_desc_list; + + type record SDP_media_port { + integer port_number, + integer num_of_ports optional + } + + type record SDP_media_field { + charstring media, + SDP_media_port ports, + charstring transport, + SDP_fmt_list fmts + } + + type record SDP_time{ + SDP_time_field time_field, + SDP_repeat_list time_repeat optional + } + + type record SDP_time_field{ + // due to the limitation of integer value a charstring shall be used + // to represent 32 bit long unsigned int + charstring start_time, + charstring stop_time + } + + type record SDP_repeat{ + SDP_typed_time repeat_interval, + SDP_typed_time active, + SDP_typed_time_list offsets + } + + type set of SDP_repeat SDP_repeat_list; + + type record SDP_typed_time{ + integer time, + charstring unit optional + } + + type set of SDP_typed_time SDP_typed_time_list; + + type set of SDP_time SDP_time_list; + + type record SDP_timezone{ + charstring adjustment_time, + SDP_typed_time offset + } + + type set of SDP_timezone SDP_timezone_list; + + type record SDP_Origin{ + charstring user_name, +// the following 2 fields are numeric strings that may not fit into 32-bit signed int + charstring session_id, + charstring session_version, + charstring net_type, + charstring addr_type, + charstring addr + } + + type set of SDP_contact_tel SDP_phone_list; + } // group SubTypes + + + group MessageTypes + { + type record SDP_Message{ + integer protocol_version, + SDP_Origin origin, + charstring session_name, + charstring information optional, + charstring uri optional, + SDP_email_list emails optional, + SDP_phone_list phone_numbers optional, + SDP_connection connection optional, + SDP_bandwidth_list bandwidth optional, + SDP_time_list times, + SDP_timezone_list timezone_adjustments optional, + SDP_key key optional, + SDP_attribute_list attributes optional, + SDP_media_desc_list media_list optional + }// with { encode "SDPCodec" } + } // group MessageTypes + } // group Types + + +} //end module LibSip_SDPTypes diff --git a/LibSip/LibSip_SIPTypesAndValues.ttcn b/LibSip/LibSip_SIPTypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..290de8c896725aa346eb52c33523d03f024dd0ac --- /dev/null +++ b/LibSip/LibSip_SIPTypesAndValues.ttcn @@ -0,0 +1,1658 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types and constants used by the test component + * for SIP tests. Module become from STF306 and STF334-336 + */ + +module LibSip_SIPTypesAndValues +{ + // SipAts + import from LibSip_SDPTypes all; + import from LibSip_XMLTypes all; + +group Constants +{ +group SimpleConstants + { + // SIP name protocol plus version + const charstring c_sipNameVersion := "SIP/2.0"; + + // SIP name protocol + const charstring c_sipName := "SIP"; + + // SIP version + const charstring c_sipVersion := "2.0"; + + // SIP scheme + const charstring c_sipScheme := "sip"; + + // TEL scheme + const charstring c_telScheme := "tel"; + + // TAG_ID + const charstring c_tagId := "tag"; + + // BRANCH_ID + const charstring c_branchId := "branch"; + + // BRANCH_COOKIE + const charstring c_brenchCookie := "z9hG4bK"; + + // EXPIRES_ID + const charstring c_expiresId := "expires"; + + // MADDR_ID + const charstring c_maddrId := "maddr"; + + // METHOD_ID + const charstring c_methodId := "method"; + + // RECEIVED_ID + const charstring c_receivedId := "received"; + + // TTL_ID + const charstring c_ttlId := "ttl"; + + // USER_ID + const charstring c_userId := "user"; + + // SDP name application + const charstring c_sdpAplication := "application/sdp"; + + // XML name application + const charstring c_xmlAplication := "application/xml"; + + // MIME name application + const charstring c_mimeMultipart := "multipart/mixed"; + + // OCTET-STREAM name application + const charstring c_octetAplication := "application/octet-stream"; + + // PLAIN-TEXT name application + const charstring c_plainText := "text/plain"; + + //text content of 1300 bytes for messages with message body + const charstring c_longMessageContent_1300Bytes := + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; + + + // Default SIP port number : 5060 + const integer c_defaultSipPort := 5060; + + // Default SIP protocol : UDP + const charstring c_defaultSipProt := "UDP"; + + // Fixed IP multicast address + const charstring c_mcastSipIpaddr := "224.0.1.75"; + + // Short delta-second used in expires parameter to acknowledge a registration + const charstring c_shortRegistration := "3600"; + + // option tag 100rel (reliable provisional response [RFC3262]) + const charstring c_tag100rel := "100rel"; + + // option tag precondition (ch.11 [RFC3312]) + const charstring c_tagPrecond := "precondition"; + + // due to problem with TAU compiler because hardcoded return statement constant is created + const HostPort c_hostport_dummy := {host:="", portField:=c_defaultSipPort}; + + // CLIP/CLIR information + const PrivacyValue c_privacy_none := "none"; + const PrivacyValue c_privacy_id := "id"; + const PrivacyValue c_privacy_header := "header"; + const PrivacyValue c_privacy_user := "user"; + + // @ (at) sign + const charstring c_AT := "@"; + + // * (wildchard) sign + const charstring c_WILDCARD := "*"; + + const integer c_CRlen := 2; // length of new line (0d0a) + + const GenericParam c_Integrity_protected_yes := {"Integrity protected","yes"} + const GenericParam c_Integrity_protected_no := {"Integrity protected","no"} + +} //end group SimpleConstants + +group AuthorizationConstants { + + const charstring c_ik := ""; + const charstring c_ck := ""; + const charstring c_algorithm := "MD5"; + const charstring c_nonce := "" + +} //end group AuthorizationConstants + +group HeaderFieldConstants { + + const CallId c_empty_CallId := + { + fieldName := CALL_ID_E, + callid := "" + }; + + const CSeq c_empty_cSeq := { + fieldName := CSEQ_E, + seqNumber:=0, + method:="" }; + + const From c_empty_From := { + fieldName := FROM_E, + addressField := {nameAddr := + {displayName := omit, + addrSpec := { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + } + } + }, + fromParams := omit + }; + + const MaxForwards c_maxForwards70 := {fieldName:=MAX_FORWARDS_E, forwards:=70} + + const SipUrl c_empty_RequestUri := + { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + }; + + const To c_empty_To := + { // value of To header + fieldName := TO_E, + addressField := + { + nameAddr := + { + displayName := omit, + addrSpec := + { + scheme := c_sipScheme, + userInfo := omit , + hostPort := {host:="", portField:=c_defaultSipPort}, + urlParameters := omit, + headers := omit + } + } + }, + toParams := omit + }; + + const Via c_empty_Via := { + fieldName := VIA_E, + viaBody :={ + {sentProtocol := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := c_defaultSipProt + }, + sentBy := {host:="", portField:=c_defaultSipPort}, + viaParams:= omit + } + }}; + + +} + + +group UserProfileConstants +{ + // number of user profile from 1-10 for SIP profile + const integer c_userProfile_SIP1_home := 1; + const integer c_userProfile_SIP2_home := 2; + +} //end group UserProfileConstants + +group StatusLines + { + const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; + const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; + const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call is Being Forwarded"}; + const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; + const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; + + const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; + + const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multible Choices"}; + const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; + const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Move Temporarily"}; + const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; + const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; + + const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; + const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorised"}; + const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; + const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; + const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; + const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Alllowed"}; + const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Accetable"}; + const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy authentication required"}; + const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; + const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; + const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity too long"}; + const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-uri too long"}; + const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media type"}; + const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI scheme"}; + const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; + const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension required"}; + const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; + const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; + const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporatily Unavailable"}; + const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction doesnot exist"}; + const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; + const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too many hops"}; + const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; + const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; + const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; + const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; + const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not acceptable here"}; + const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; + const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal error"}; + const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; + const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; + const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; + const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server timeout"}; + const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version not supported"}; + const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message too long"}; + const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition failure"}; + const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; + const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; + const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does not exist anywhere"}; + const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not acceptable"}; + +} //end StatusLines +} //end group Constants + +group Types { +group SubTypes{// Subtypes + + group TokenTypes // TokensTypes + { + // [20] + type enumerated FieldName + { + ACCEPT_E, + ACCEPT_ENCODING_E, + ACCEPT_LANGUAGE_E, + ALERT_INFO_E, + ALLOW_E, + AUTHENTICATION_INFO_E, + AUTHORIZATION_E, + CALL_ID_E, + CALL_INFO_E, + CONTACT_E, + CONTENT_DISPOSITION_E, + CONTENT_ENCODING_E, + CONTENT_LANGUAGE_E, + CONTENT_LENGTH_E, + CONTENT_TYPE_E, + CSEQ_E, + DATE_E, + ERROR_INFO_E, + EXPIRES_E, + FROM_E, + IN_REPLY_TO_E, + MAX_FORWARDS_E, + MIME_VERSION_E, + MIN_EXPIRES_E, + ORGANIZATION_E, + PRIORITY_E, + PROXY_AUTHENTICATE_E, + PROXY_AUTHORIZATION_E, + PROXY_REQUIRE_E, + RECORD_ROUTE_E, + REPLY_TO_E, + REQUIRE_E, + RETRY_AFTER_E, + ROUTE_E, + SERVER_E, + SUBJECT_E, + SUPPORTED_E, + TIMESTAMP_E, + TO_E, + UNSUPPORTED_E, + USER_AGENT_E, + VIA_E, + WARNING_E, + WWW_AUTHENTICATE_E, + + // [3262/7.1] + RACK_E, + RSEQ_E, + + // [3265/7.2] + ALLOW_EVENTS_E, + EVENT_E, + SUBSCRIPTION_STATE_E, + + // [3313] + P_MEDIA_AUTHORIZATION_E, + + // [3323] + PRIVACY_E, + + // [3325] + P_ASSERTED_ID_E, + P_PREFERRED_ID_E, + + // [3326] + REASON_E, + + // [3515] - REFER method + REFER_TO_E, + + // [3892] - REFER method + REFERRED_BY_E, + + // [4244] + HISTORY_INFO_E, + + // [3313] + P_MEDIA_AUTH_E, + + // [3327] + PATH_E, + + // [3329] + SECURITY_CLIENT_E, + SECURITY_SERVER_E, + SECURITY_VERIFY_E, + + // [3455] + P_ACCESS_NETWORK_INFO_E, + P_ASSOCIATED_URI_E, + P_CALLED_PARTY_E, + P_CHARGING_FUNCTION_ADDRESSES_E, + P_CHARGING_VECTOR_E, + P_VISITED_NETWORK_E, + + // [3608] + SERVICE_ROUTE_E, + + // [3841] + ACCEPT_CONTACT_E, + + // [4028] + MIN_SE_E, + SESSION_EXPIRES_E, + + P_ASSERTED_SERVICE_E, + + //[5009] + P_EARLY_MEDIA_E + + } + + // [7.1] + type enumerated Method { + ACK_E, + BYE_E, + CANCEL_E, + INVITE_E, + OPTIONS_E, + REGISTER_E, + PRACK_E, // Note: this element is not defined in [5] + SUBSCRIBE_E, NOTIFY_E, // [3265] + PUBLISH_E, // [3903/12] + REFER_E, // [3515] + UPDATE_E, // [3311] + MESSAGE_E, // [3428] + INFO_E // [2976] + } + + // [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, + // 20.33, 20.34, 20.39, 20.42, 20.44] + type record GenericParam + { + charstring id, + charstring paramValue optional + } + + // [?] + type set of GenericParam SemicolonParam_List; + + // [?] + type set of GenericParam AmpersandParam_List; + + // [?] + type set of GenericParam CommaParam_List; + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43] + type record HostPort + { + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record UserInfo + { + charstring userOrTelephoneSubscriber, + charstring password optional + } + + // [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record SipUrl + { + charstring scheme, // contains "sip:" + UserInfo userInfo optional, + HostPort hostPort optional, + SemicolonParam_List urlParameters optional, + AmpersandParam_List headers optional + } + + // [20.1, RFC2616 14.1] + type record AcceptBody + { + charstring mediaRange, + SemicolonParam_List acceptParam optional + } + + // [20.1, RFC2616 14.1] + type set of AcceptBody AcceptBody_List; + + // [20.4] + type record AlertInfoBody + { + charstring url, // any URI + SemicolonParam_List genericParams optional + } + + // [20.4] + type set of AlertInfoBody AlertInfoBody_List; + + // [20.8] + type charstring CallidString; // token ["@" token] + + // [20.8] + type set of CallidString CallidString_List; + + // [20.9] + type record CallInfoBody + { + charstring url, // any URI + SemicolonParam_List infoParams optional + } + + // [20.9] + type set of CallInfoBody CallInfoBody_List; + + // [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2] + type union Challenge + { + CommaParam_List digestCln, + OtherAuth otherChallenge + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] + type record NameAddr + { + charstring displayName optional, + SipUrl addrSpec + } + + // [20.10, 20.20, 20.31, 20.39] + type union Addr_Union + { + NameAddr nameAddr, + SipUrl addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field + } + + // [20.10] + type record ContactAddress + { + Addr_Union addressField, + SemicolonParam_List contactParams optional + } + + // [20.10] + type set of ContactAddress ContactAddress_List; // 1 or more elements + + // [20.10] + type union ContactBody + { + charstring wildcard, + ContactAddress_List contactAddresses + } + + // [20.2, 20.12; RFC2616 14.3, 14.11] + type charstring ContentCoding; + + // [20.2, 20.12; RFC2616 14.3, 14.11] + type set of ContentCoding ContentCoding_List; + + // [20.7, 20.28; RFC2616 14.35 RFC2617 1.2] + type union Credentials + { + CommaParam_List digestResponse, + OtherAuth otherResponse + } + + // [20.19, 20.23, 20.33] + type charstring DeltaSec; // an external operation can handle this field + + // [20.18] + type record ErrorInfoBody + { + charstring uri, // any URI + SemicolonParam_List genericParams optional + } + + // [20.18] + type set of ErrorInfoBody ErrorInfoBody_List; + + // [20.3 RFC2616 14.4] + type record LanguageBody + { + charstring languageRange, + SemicolonParam_List acceptParam optional + } + + // [20.3 RFC2616 14.4] + type set of LanguageBody LanguageBody_List; + + // [20.13; RFC2616 14.12] + type charstring LanguageTag; + + // [20.13; RFC2616 14.12] + type set of LanguageTag LanguageTag_List; + + // [20.5] + type set of charstring Method_List; + + + // [20.29, 20.32, 20.37, 20.40] + type charstring OptionTag; + + // [20.29, 20.32, 20.37, 20.40] + type set of OptionTag OptionTag_List; + + + // [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2] + type record OtherAuth + { + charstring authScheme, + CommaParam_List authParams + } + + type record Payload + { + integer payloadlength, + charstring payloadvalue + } + + // [20.30,20.34] + type record RouteBody + { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + // [20.30,20.34] + type record of RouteBody RouteBody_List; + + // [20.42] + type record SentProtocol + { + charstring protocolName, + charstring protocolVersion, + charstring transport + } + + // [20.35, 20.41; RFC2616 14.43] + type charstring ServerVal; + + // [20.35, 20.41; RFC2616 14.43] + type set of ServerVal ServerVal_List; + + // [20.38] + type record TimeValue + { + integer majorDigit, // represented as an integer + integer minorDigit optional // represented as an integer + } + + // [20.42] + type record ViaBody + { + SentProtocol sentProtocol, + HostPort sentBy, + SemicolonParam_List viaParams optional + } + + // [20.42] + type record of ViaBody ViaBody_List; + + // [20.43] + type union WarnAgent + { + HostPort hostPort, + charstring pseudonym + } + + // [20.43] + type record WarningValue + { + integer warnCode, // represented as an integer + WarnAgent warnAgent, + charstring WarnText + } + + // [20.43] + type set of WarningValue WarningValue_List; + + type Addr_Union PAssertedIDValue; + + type record of PAssertedIDValue PAssertedIDValue_List; + + type charstring PAssertedServiceValue; + + type Addr_Union PPreferredIDValue; + + type record of PPreferredIDValue PPreferredIDValue_List; + + type charstring PrivacyValue; + + type record of PrivacyValue PrivacyValue_List; + + + } // end group TokensType + + + group HeaderFieldTypes // Header Fields + { + group CommonHeaderFieldTypes + { + // [20.1, RFC2616 14.1] + type record Accept + { + FieldName fieldName (ACCEPT_E), + AcceptBody_List acceptArgs optional + } + + // [20.2, RFC2616 14.3] + type record AcceptEncoding + { + FieldName fieldName (ACCEPT_ENCODING_E), + ContentCoding_List contentCoding optional + } + + // [20.3, RFC2616 14.4] + type record AcceptLanguage + { + FieldName fieldName (ACCEPT_LANGUAGE_E), + LanguageBody_List languageBody optional + } + + // [20.4] + type record AlertInfo + { + FieldName fieldName (ALERT_INFO_E), + AlertInfoBody_List alertInfoBody optional + } + + // [20.5] + type record Allow + { + FieldName fieldName (ALLOW_E), + Method_List methods optional + } + + // [20.6] + type record AuthenticationInfo + { + FieldName fieldName (AUTHENTICATION_INFO_E), + CommaParam_List ainfo + } + + // [20.7 RFC2617 3.2.2] + type record Authorization + { + FieldName fieldName (AUTHORIZATION_E), + Credentials body + } + + // [20.8] + type record CallId + { + FieldName fieldName (CALL_ID_E), + CallidString callid + } + + // [20.9] + type record CallInfo + { + FieldName fieldName (CALL_INFO_E), + CallInfoBody_List callInfoBody optional + } + + // [20.10] + type record Contact + { + FieldName fieldName (CONTACT_E), + ContactBody contactBody + } + + // [20.11] + type record ContentDisposition + { + FieldName fieldName (CONTENT_DISPOSITION_E), + charstring dispositionType, + SemicolonParam_List dispositionParams optional + } + + // [20.12 RFC2616 14.11] + type record ContentEncoding + { + FieldName fieldName (CONTENT_ENCODING_E), + ContentCoding_List contentCoding + } + + // [20.13 RFC2616 14.12] + type record ContentLanguage + { + FieldName fieldName (CONTENT_LANGUAGE_E), + LanguageTag_List languageTag + } + + // [20.14] + type record ContentLength + { + FieldName fieldName (CONTENT_LENGTH_E), + integer len // this field is represented as an integer + } + + // [20.15] + type record ContentType + { + FieldName fieldName (CONTENT_TYPE_E), + charstring mediaType + } + + // [20.16] + type record CSeq + { + FieldName fieldName (CSEQ_E), + integer seqNumber, // this field is represented as an integer + charstring method + } + + // [20.17] + type record Date + { + FieldName fieldName (DATE_E), + charstring sipDate + } + + // [20.18] + type record ErrorInfo + { + FieldName fieldName (ERROR_INFO_E), + ErrorInfoBody_List errorInfo optional + } + + // [20.19] + type record Expires + { + FieldName fieldName (EXPIRES_E), + DeltaSec deltaSec + } + + // [20.20] + type record From + { + FieldName fieldName (FROM_E), + Addr_Union addressField, + SemicolonParam_List fromParams optional + } + + // [20.21] + type record InReplyTo + { + FieldName fieldName (IN_REPLY_TO_E), + CallidString_List callids + } + + // [20.22] + type record MaxForwards + { + FieldName fieldName (MAX_FORWARDS_E), + integer forwards // this field is represented as an integer + } + + // [20.23] + type record MinExpires + { + FieldName fieldName (MIN_EXPIRES_E), + DeltaSec deltaSec + } + + // [20.24 RFC2616 19.4.1] + type record MimeVersion + { + FieldName fieldName (MIME_VERSION_E), + integer majorNumber, // this field is represented as an integer + integer minorNumber // this field is represented as an integer + } + + // [20.25] + type record Organization + { + FieldName fieldName (ORGANIZATION_E), + charstring organization + } + + // [20.26] + type record Priority + { + FieldName fieldName (PRIORITY_E), + charstring priorityValue + } + + // [20.27 RFC2616 14.33 RFC2617 1.2] + type record ProxyAuthenticate + { + FieldName fieldName (PROXY_AUTHENTICATE_E), + Challenge challenge + } + + // [20.28 RFC2616 14.35 RFC2617 1.2] + type record ProxyAuthorization + { + FieldName fieldName (PROXY_AUTHORIZATION_E), + Credentials credentials + } + + // [20.29] + type record ProxyRequire + { + FieldName fieldName (PROXY_REQUIRE_E), + OptionTag_List optionsTags + } + + // [20.30] + type record RecordRoute + { + FieldName fieldName (RECORD_ROUTE_E), + RouteBody_List routeBody + } + + // [20.31] + type record ReplyTo + { + FieldName fieldName (REPLY_TO_E), + Addr_Union addressField, + SemicolonParam_List replyToParams optional + } + + // [20.32] + type record Require + { + FieldName fieldName (REQUIRE_E), + OptionTag_List optionsTags + } + + // [20.33] + type record RetryAfter + { + FieldName fieldName (RETRY_AFTER_E), + DeltaSec deltaSec, + charstring comment optional, + SemicolonParam_List retryParams optional + } + + // [20.34] + type record Route + { + FieldName fieldName (ROUTE_E), + RouteBody_List routeBody + } + + // [20.35 RFC2616 14.38] + type record Server + { + FieldName fieldName (SERVER_E), + ServerVal_List serverBody + } + + // [20.36] + type record Subject + { + FieldName fieldName (SUBJECT_E), + charstring summary + } + + // [20.37] + type record Supported + { + FieldName fieldName (SUPPORTED_E), + OptionTag_List optionsTags optional + } + + // [20.38] + type record Timestamp + { + FieldName fieldName (TIMESTAMP_E), + TimeValue timeValue optional, + TimeValue delay optional + } + + // [20.39] + type record To + { + FieldName fieldName (TO_E), + Addr_Union addressField, + SemicolonParam_List toParams optional + } + + // [20.40] + type record Unsupported + { + FieldName fieldName (UNSUPPORTED_E), + OptionTag_List optionsTags + } + + // Undefined header field + type record UndefinedHeader + { + charstring headerName, + charstring headerValue + } + + type set of UndefinedHeader UndefinedHeader_List; + + // [20.41 RFC2616 14.43] + type record UserAgent + { + FieldName fieldName (USER_AGENT_E), + ServerVal_List userAgentBody + } + + // [20.42] + type record Via + { + FieldName fieldName (VIA_E), + ViaBody_List viaBody + } + + // [20.43] + type record Warning + { + FieldName fieldName (WARNING_E), + WarningValue_List warningValue + } + + // [20.44 RFC2616 14.47 RFC2617 1.2] + type record WwwAuthenticate + { + FieldName fieldName (WWW_AUTHENTICATE_E), + Challenge challenge + } + }//end group CommonHeaderFieldTypes + group RFC3262HeaderFieldTypes + { + // [3262/7.1] + type record RSeq { + FieldName fieldName(RSEQ_E), + integer responseNum + } + + // [3262/7.2] + type record RAck { + FieldName fieldName(RACK_E), + integer responseNum, + integer seqNumber, + charstring method + } + }//end group RFC3262HeaderFieldTypes + + group RFC3265HeaderFieldTypes + { + // [3265/7.2] + type record AllowEvents { + FieldName fieldName(ALLOW_EVENTS_E), + EventType_List eventTypes + } + + type set of EventType EventType_List; + type charstring EventType; + + // [3265/7.2] + type record Event { + FieldName fieldName(EVENT_E), + EventType eventType, + SemicolonParam_List eventParams optional + } + + // [3265/7.2] + type record SubscriptionState { + FieldName fieldName(SUBSCRIPTION_STATE_E), + SubState subState, + SemicolonParam_List substateParams optional + } + + type charstring SubState; + }//end group RFC3265HeaderFieldTypes + + group RFC3313HeaderFieldTypes + { + // [3313/5] + type record PMediaAuthorization { + FieldName fieldName(P_MEDIA_AUTHORIZATION_E), + PMediaAuthorization_List pMediaAuthorizations + } + + type charstring PMediaAuthValue; //HEXDIG "0"-"9", "A"-"F" + + type record of PMediaAuthValue PMediaAuthorization_List; + + }//end group RFC3265HeaderFieldTypes + + group RFC3323HeaderFieldTypes + { + // [3323] + type record Privacy { + FieldName fieldName(PRIVACY_E), + PrivacyValue_List privValueList + } + }//end group RFC3323HeaderFieldTypes + + group RFC3325HeaderFieldTypes + { + // [3325] + type record PAssertedID { + FieldName fieldName(P_ASSERTED_ID_E), + PAssertedIDValue_List pAssertedIDValueList + } + + // [3325] + type record PPreferredID { + FieldName fieldName(P_PREFERRED_ID_E), + PPreferredIDValue_List pPreferredIDValueList + } + }//end group RFC3325HeaderFieldTypes + + group RFC3326HeaderFieldTypes + { + //[3326] + type record of ReasonValue ReasonValues; + + type record ReasonValue { + charstring token, + SemicolonParam_List reasonParams optional + } + + type record Reason { + FieldName fieldName(REASON_E), + ReasonValues reasonValues + } + }//end group RFC3326HeaderFieldTypes + + group RFC3327HeaderFieldTypes + { + // [3327] + type record Path { + FieldName fieldName(PATH_E), + PathValues pathValues + } + + type record of PathValue PathValues; + + type record PathValue { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + }//end group RFC3515HeaderFieldTypes + + group RFC3329HeaderFieldTypes + { + // [RFC3329/2.2] + type record SecurityMechanism { + charstring mechName, + SemicolonParam_List mechParams optional + } + + type set of SecurityMechanism SecurityMechanism_List; + + type record SecurityClient { + FieldName fieldName(SECURITY_CLIENT_E), + SecurityMechanism_List securityMech + } + + type record SecurityServer { + FieldName fieldName(SECURITY_SERVER_E), + SecurityMechanism_List securityMech + } + + type record SecurityVerify { + FieldName fieldName(SECURITY_VERIFY_E), + SecurityMechanism_List securityMech + } + }//end group RFC3329HeaderFieldTypes + + group RFC3455HeaderFieldTypes + { + type record of NameAddrParam NameAddrParam_List; + + type record NameAddrParam { + NameAddr nameAddr, + SemicolonParam_List genericParams optional + } + //[3455/5.1] + type record PAssociatedURI { + FieldName fieldName(P_ASSOCIATED_URI_E), + NameAddrParam_List nameAddrList + } + //[3455/5.2] + type record PCalledPartyID { + FieldName fieldName(P_CALLED_PARTY_E), + NameAddrParam nameAddParams + } + + type record of VnetworkSpec VnetworkSpec_List; + + type record VnetworkSpec { + charstring vNetworkSpecToken, + SemicolonParam_List genericParams optional + } + + //[3455/5.3] + type record PVisitedNetworkID { + FieldName fieldName(P_VISITED_NETWORK_E), + VnetworkSpec_List vNetWorkSpec + } + + //[3455/5.4] + type record PAccessNetworkInfo { + FieldName fieldName(P_ACCESS_NETWORK_INFO_E), + charstring accessType, + SemicolonParam_List genericParams optional + } + + //[3455/5.5] + type record PChargingFunctionAddresses { + FieldName fieldName(P_CHARGING_FUNCTION_ADDRESSES_E), + SemicolonParam_List chargeAddrParams optional + } + + //[3455/5.6] + type record PChargingVector { + FieldName fieldName(P_CHARGING_VECTOR_E), + SemicolonParam_List chargeParams optional + } + }//end group RFC33455HeaderFieldTypes + + group RFC3515HeaderFieldTypes + { + // [3515] + type record ReferTo { + FieldName fieldName(REFER_TO_E), + NameAddr nameAddr, + SemicolonParam_List referToParams optional + } + }//end group RFC3515HeaderFieldTypes + + group RFC3608HeaderFieldTypes + { + // [3608] + type record ServiceRoute { + FieldName fieldName(SERVICE_ROUTE_E), + RouteBody_List routeBody + } + }//end group RFC33608HeaderFieldTypes + + + group RFC3841HeaderFieldTypes + { + // [3841] + type record AcceptContact { + FieldName fieldName(ACCEPT_CONTACT_E), + AcRcValue_List acValues + } + + type set of AcRcValue AcRcValue_List; + + type record AcRcValue { + charstring wildcard(c_WILDCARD), + SemicolonParam_List acRcParams optional + } + }// end group RFC3841HeaderFieldTypes + + group RFC3892HeaderFieldTypes + { + // [3892] + type record ReferredBy { + FieldName fieldName(REFERRED_BY_E), + NameAddr nameAddr, + SemicolonParam_List referredbyIdParams optional + } + }//end group RFC3892HeaderFieldTypes + + group RFC4028HeaderFieldTypes + { + // [4028] + type record MinSE { + FieldName fieldName(MIN_SE_E), + DeltaSec deltaSec, + SemicolonParam_List minSeParam optional + } + // [4028] + type record SessionExpires { + FieldName fieldName(SESSION_EXPIRES_E), + DeltaSec deltaSec, + SemicolonParam_List seParam optional + } + }//end group RFC4028HeaderFieldTypes + + group RFC4244HeaderFieldTypes + { + // [4244] + type record HistoryInfo { + FieldName fieldName(HISTORY_INFO_E), + HistoryInfo_List historyInfoList + } + + type record of HistoryInfoEntry HistoryInfo_List; + + type record of integer IntegerList; + + type record HistoryInfoEntry { + NameAddr nameAddr, + IntegerList hiIndex optional, + SemicolonParam_List hiExtention optional + } + }//end group RFC4244HeaderFieldTypes + + group RFC5009PEarlyMediaHeader + { + // [5009] + type record PEarlyMedia { + FieldName fieldName(P_EARLY_MEDIA_E), + record of charstring em_param + } + }//end group RFC5009PEarlyMediaHeader + + type record PAssertedService { + FieldName fieldName(P_ASSERTED_SERVICE_E), + PAssertedServiceValue pAssertedServiceValue + } + + } // end group HeaderFieldTypes + + group MessageHeaderTypes + { + + // Message-Header for all SIP requests and responses [20] + type set MessageHeader + { + Accept accept optional, + AcceptContact acceptContact optional, + AcceptEncoding acceptEncoding optional, + AcceptLanguage acceptLanguage optional, + AlertInfo alertInfo optional, + Allow allow optional, + AllowEvents allowEvents optional, // 3265/7.2 + AuthenticationInfo authenticationInfo optional, // only in responses + Authorization authorization optional, // only in requests + CallId callId optional, // optional only in Invalid test cases mandatory otherwise + CallInfo callInfo optional, + Contact contact optional, // optional in response and all requests except INVITE where mandatory + ContentDisposition contentDisposition optional, + ContentEncoding contentEncoding optional, + ContentLanguage contentLanguage optional, + ContentLength contentLength optional, // optional in responses and all requests except ACK where mandatory + ContentType contentType optional, + CSeq cSeq optional, // optional only in Invalid test cases mandatory otherwise + Date date optional, + ErrorInfo errorInfo optional, // only in responses + Event event optional, // 3265/7.2 + Expires expires optional, + From fromField, + HistoryInfo historyInfo optional, // 4244 + InReplyTo inReplyTo optional, // only in requests + MaxForwards maxForwards optional, // mandatory in requests not required in responses! + MimeVersion mimeVersion optional, + MinExpires minExpires optional, // only in responses + MinSE minSE optional, // 4028 + Organization organization optional, + PAccessNetworkInfo pAccessNetworkInfo optional, // 3455 + PAssertedID pAssertedID optional, // 3325 + PAssertedService pAssertedService optional, + PAssociatedURI pAssociatedURI optional, // 3455 + Path path optional, // 3327 + PCalledPartyID pCalledPartyID optional, // 3455 + PChargingFunctionAddresses pChargingFunctionAddresses optional, // 3455 + PChargingVector pChargingVector optional, // 3455 + PEarlyMedia pEarlyMedia optional, // 5009 + PMediaAuthorization pMediaAuthorization optional, // 3313 + PPreferredID pPreferredID optional, // 3325 + Priority priority optional, // only in requests + Privacy privacy optional, // 3323 + ProxyAuthenticate proxyAuthenticate optional, // only in responses + ProxyAuthorization proxyAuthorization optional, // only in requests + ProxyRequire proxyRequire optional, // only in requests + PVisitedNetworkID pVisitedNetworkID optional, // 3455 + RAck rAck optional, // 3262/7.1 + RSeq rSeq optional, // 3262/7.1 + Reason reason optional, // 3326 + RecordRoute recordRoute optional, + ReferredBy referredBy optional, // 3892 - REFER method + ReferTo referTo optional, // 3515 - REFER method + ReplyTo replyTo optional, // optional in responses and INVITE requests + Require require optional, + RetryAfter retryAfter optional, // only in responses + Route route optional, // only in requests + SecurityClient securityClient optional, // 3329 + SecurityServer securityServer optional, // 3329 + SecurityVerify securityVerify optional, // 3329 + Server server optional, // only in responses + ServiceRoute serviceRoute optional, // 3608 + SessionExpires sessionExpires optional, // 4028 + Subject subject optional, // only in requests + SubscriptionState subscriptionState optional, // 3265/7.2 + Supported supported optional, + Timestamp timestamp optional, + To toField, + Unsupported unsupported optional, // only in responses + UserAgent userAgent optional, + Via via, + Warning warning optional, // only in responses + WwwAuthenticate wwwAuthenticate optional, // only in responses + UndefinedHeader_List undefinedHeader_List optional + } + + } // end group MessageHeaderTypes + + group StartLineTypes + { + // Request-Line [7.1] + type record RequestLine + { + Method method, + SipUrl requestUri, + charstring sipVersion + } + + // Status-Line [7.2] + type record StatusLine + { + charstring sipVersion, + integer statusCode, + charstring reasonPhrase + } + + } // end group StartLineTypes + + + group otherTypes{ + + type record SipUserProfile + { + /** @desc integer for the userprofile identifier + */ + integer id, + + /** @desc integer for Port number to exchange SIP messages + */ + integer currPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring currIpaddr, + + /** @desc integer for Port number to exchange SIP messages + */ + integer contactPort, + + /** @desc charstring for IP address to exchange SIP messages + */ + charstring contactIpaddr, + + /** @desc charstring for IP address used by the TS to exchange media streams + */ + charstring bearerIpaddr, + + /** @desc charstring for identity of the tester local domain + */ + charstring homeDomain, + + /** @desc charstring for identity of the tester local user + */ + charstring publUsername, + + /** @desc charstring for RFC 2617 3.2.1 qop options: + * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The + * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring qop, + + /** @desc charstring for RFC 2617 3.2.2 username for authentication + * The name of user in the specified realm + */ + charstring privUsername, + + /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring passwd, + + /** @desc charstring for registrar domain for authentication and request line + */ + charstring registrarDomain + + } + + + } // end group otherTypes + + }// end group Subtypes + + + + group MSGtypes{ + + group RequestTypes + { + // [7.1] + type record Request + { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record REGISTER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INVITE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record OPTIONS_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record BYE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record CANCEL_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record ACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3262/7.1] + type record PRACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1] + type record NOTIFY_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1] + type record SUBSCRIBE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3903/11.1] + type record PUBLISH_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3311/7] + type record UPDATE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record REFER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record MESSAGE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // + type record INFO_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + } with { encode "SIPCodec" }// end group RequestTypes + + group ResponseTypes + { + // [7.2] + type record Response + { + StatusLine statusLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + } with { encode "SIPCodec" }// end group ResponseTypes + + // This MSG type is defined for sending synctactic variations, ans syntactically + // erroneous messages, and receving messages failed parsing. + group SyntacticTypes + { + type charstring Raw; + } // end group SyntacticTypes + + // This type is defined for particular SIP message body types like SDP + + group MessageBodyTypes + { + type union MessageBody{ + SDP_Message sdpMessageBody, // if there is only SDP part + XmlBody xmlBody, // if there is XML message body + MIME_Message mimeMessageBody, //if there is SDP and encapsulated ISUP part + charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) + charstring textplain // if content type is text/plain (for testing long messages) + }; + + } // end group MessageBodyTypes + + group MIMETypes + { + group SubTypes + { + + type union MIME_Encapsulated_Parts { + SDP_Message sdpMessageBody, + XmlBody xmlBody // if there is XML message body + } + + type record MIME_Encapsulated_Part { + charstring content_type, + charstring content_disposition optional, + MIME_Encapsulated_Parts mime_encapsulated_part + } + } + + group MessageTypes { + + type record MIME_Message { + charstring boundary, // len: + MimeEncapsulatedList mimeEncapsulatedList + } + + type record of MIME_Encapsulated_Part MimeEncapsulatedList; + + } // group MessageTypes + } // group MIMETypes + + }// end group MSGTypes +}// end group Types + +} // end module LibSip_TypesAndValues diff --git a/LibSip/LibSip_Steps.ttcn b/LibSip/LibSip_Steps.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bbb8e22fb8b65237bcd71902aa2f1545cb5d59a6 --- /dev/null +++ b/LibSip/LibSip_Steps.ttcn @@ -0,0 +1,3236 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. + */ + +module LibSip_Steps +{ + //LibCommon + import from LibCommon_Sync all ; + import from LibCommon_VerdictControl all ; + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + +group externalfunctions { + + //Return random charstring + external function fx_rndStr() return charstring; + // Return the equivalent string in lower case + external function fx_putInLowercase(charstring par_string) return charstring; + + external function fx_getIpAddr(charstring host_name) return charstring; + + // External function to generate a digest response. + // References: + // * RFC 2617 HTTP Authentication: Basic and Digest Access + // Authentication, and + // * RFC 1321 The MD5 Message-Digest Algorithm + // See RFC 2617, chapter 5 Sample implementation, for example usage, as + // the signature of calculateDigestResponse is according to the example + // given in the RFC. + // + external function fx_calculateDigestResponse( + charstring nonce, + charstring cnonce, + charstring user, + charstring realm, + charstring passwd, + charstring alg, + charstring nonceCount, + charstring method, + charstring qop, + charstring URI, + charstring HEntity) return charstring; + +} + +group ParameterOperations { + + /** + * + * @desc function to generate a 32 bits random number as a charstring for tag field + * (used as e.g.: tag in from-header field, or branch parameter in via header) + * @return random value with at least 32 bits of randomness + * + */ + function f_getRndTag() return charstring + { + var charstring tag_value; + //tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + tag_value := fx_rndStr()&fx_rndStr(); + return(tag_value); + } + + /** + * + * @desc Function to prepare credentials for request that has an empty + * entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @return Credentials field + */ + function f_calculatecCredentials_empty(in SipUserProfile p_userprofile) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm := p_userprofile.registrarDomain; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + var charstring v_response := ""; + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "uri", paramValue := v_uri }, + { id := "nonce=""""", paramValue := omit }, // already enclosed to " characters + { id := "response=""""", paramValue := omit } // already enclosed to " characters + } + }; + + return v_result; + } + + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, + { id := "response", paramValue := v_response }, + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message. NO RESPONSE value to cause an error! + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials_wo_response(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := v_username }, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, +// { id := "response", paramValue := v_response }, // not included to cause an error + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_challenge parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorization(in charstring p_qop, in CommaParam_List p_challenge) return Challenge + { + var Challenge v_result; + + var charstring v_realm; + + var charstring v_qop := p_qop; + + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestCln := + { + { id := "Digest realm", paramValue := v_realm }, + { id := "nonce=", paramValue := c_nonce }, + { id := "algorithm=", paramValue := c_algorithm }, // algorithm is not enclosed to " characters + { id := "ck=", paramValue := c_ck }, + { id := "ik=", paramValue := c_ik }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit }//qop + + } + }; + + return v_result; + } + + /** + * + * @desc Function to calculate credentials for request that has an empty + * entity body such as a REGISTER message and at the end put different private name + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentialsAndChangeUserName(in SipUserProfile p_userprofile, in charstring p_method, + in CommaParam_List p_challenge) return Credentials + { + var Credentials v_result; + + var charstring v_nonce := ""; + + // Use a fixed client nonce. + var charstring v_cnonce := "1317265"; + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + + var charstring v_algorithm; + + // Use a fixed nonce count. + const charstring c_nonceCount := "00000002"; + + var charstring v_qop := p_userprofile.qop; + + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + + var charstring v_response; + var charstring v_opaque; + + + // extract nonce, realm, algorithm, and opaque from challenge + + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse( + v_nonce, + v_cnonce, + v_username, + v_realm, + v_passwd, + v_algorithm, + c_nonceCount, + p_method, + v_qop, + v_uri, + c_hEntity); + + // Construct credentials for an Authorization field of a request. + v_result := + { + digestResponse := + { + { id := "Digest username", paramValue := "DifferentToPrivateUser"}, + { id := "realm", paramValue := v_realm }, + { id := "nonce", paramValue := v_nonce }, + { id := "uri", paramValue := v_uri }, + { id := "response", paramValue := v_response }, + { id := "algorithm=md5", paramValue := omit }, // algorithm is not enclosed to " characters + { id := "cnonce", paramValue := v_cnonce }, + { id := "opaque=""""", paramValue := omit }, // already enclosed to " characters + { id := "qop="&v_qop, paramValue := omit },//qop + { id := "nc="&c_nonceCount, paramValue := omit }//nonceCount + } + }; + + return v_result; + } + + + /** + * + * @desc Function to check if param related to id from CommanParam_List exist + * containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm", "ck", "ik"...) + * @return parameter p_id value + */ + function f_checkParamValueFromChallengeIfPresent(in CommaParam_List p_challenge, in charstring p_id) return boolean + { + var boolean v_result := false; + var integer v_len := sizeof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + + for (var integer i := 0; i < v_len; i := i + 1) + { + if (fx_putInLowercase(p_challenge[i].id) == v_id) + { + v_result := true; + } + } + + return v_result; + } + + /** + * + * @desc Function to check if tag is present in SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return boolean true if tag is present + */ + function f_checkTagPresent(SemicolonParam_List p_param_l) runs on SipComponent return boolean { + var integer v_numberOfParams; + var integer i := 0; + + v_numberOfParams := sizeof (p_param_l); + while (i < v_numberOfParams) { + if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { + return (true); + } + i := i + 1; + } + return (false); + } + + /** + * + * @desc Function to extract paramValue related to id from CommanParam_List + * containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm",...) + * @return parameter p_id value + */ + function f_extractParamValueFromChallenge(in CommaParam_List p_challenge, in charstring p_id) return charstring + { + var charstring v_result := ""; + var integer v_len := sizeof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + + for (var integer i := 0; i < v_len; i := i + 1) + { + if (fx_putInLowercase(p_challenge[i].id) == v_id) + { + v_result := p_challenge[i].paramValue; + } + } + + if (v_result == "") + { + if(match(p_id,"algorithm")) + { + v_result := "MD5" + } + else if(match(p_id,"opaque")) + { + v_result := "" + } + else + { + var charstring v_tmpchar := "Cannot acquire value from credentials."; + log ("Cannot acquire value from credentials."); + setverdict(inconc); + stop; + } + } + + return v_result; + } + +}//end group ParameterOperations + +group FieldOperations { + + /** + * + * @desc function adds "Tag"-parameter in "To"-headerfield + * @param p_to To header field that should get a Tag parameter + * + */ + function f_addTagInTo(inout To p_to) runs on SipComponent + { + f_addParameterTagIfNotPresent(c_tagId, f_getRndTag(), p_to); + } + + /** + * + * @desc addition of a single parameter in the via header field + * @param p_parameter_name name of parameter to be added + * @param p_parameter_value value of parameter to be added + * @param p_viaBody the via parameter to be extended + * @verdict + */ + function f_addParameterIfNotPresent( + in charstring p_parameter_name, + in charstring p_parameter_value, + inout ViaBody p_viaBody) + + { + if (ispresent (p_viaBody.viaParams)) { + return; + } + p_viaBody.viaParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * + * @desc function to addd a parameter to the "To" header field (if there is not any parameter) + * @param p_parameter_name name of the parameter to be added + * @param p_parameter_value value of the paramter to be added + * @param p_to "To" header field to be extended + * @verdict + */ + function f_addParameterTagIfNotPresent( + in charstring p_parameter_name, + in charstring p_parameter_value, + inout To p_to) + + { + if (ispresent (p_to.toParams)) { + return; + } + p_to.toParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * + * @desc function compares the IP address of two hosts + * @param p_host1 hostname + * @param p_host2 hostname + * @return boolean value that is true if the IP addresses are identical + * @verdict + */ + function f_equivalentHostAddr(in charstring p_host1, in charstring p_host2) return boolean + { + //A DNS server may be used + return(fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); + } + + + /** + * + * @desc function checks if Require contains Precondition + * @param p_message (request or response) SIP message to be analysed + * @return true if p_id parameter exist + */ + function f_checkRequirePrecondition(in Request p_message) + { + if (ispresent(p_message.msgHeader.require.optionsTags)) + { + var boolean v_precondition_found:=false; + for (var integer v_i:=0; v_i) or omit + */ + function f_getPathHeaderTop(inout Request p_Request) return NameAddr + { + if (ispresent(p_Request.msgHeader.path)) { + if (sizeof(p_Request.msgHeader.path.pathValues)>0) { + return(p_Request.msgHeader.path.pathValues[0].nameAddr)} + }; + return(omit) + } + + /** + * + * @desc function updates first element of a Via headerfield list + * @param p_viaBody_List address list of a Via header field + * @param p_source_address address to be inserted in the top element + */ + function f_getViaReplyAddr(inout ViaBody_List p_viaBody_List, inout address4SIP p_source_address) + runs on SipComponent + { + var ViaBody v_viaBody; + var HostPort v_locAddr; + // The address to send message shall be updated after getting information + // in the Via header fied and according to 18.2.2 + v_viaBody := p_viaBody_List[0]; + + // received parameter has to be addded to the via hader field + // Be careful it could be an Host name and not an IP Address + + if (not f_equivalentHostAddr(valueof (v_viaBody.sentBy.host), + valueof (p_source_address.host))) { + f_addParameterIfNotPresent( + c_receivedId, + valueof (p_source_address.host), + v_viaBody); + } + if (ispresent(v_viaBody.sentBy.portField)) + { + p_source_address.portField := valueof(v_viaBody.sentBy.portField); + } + else + { + p_source_address.portField := c_defaultSipPort; + } + } + + /** + * + * @desc functions give access to an element of the Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of Route record element to be retrieved + * @return HostPort value of the Route element or omit + */ + function f_getRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.route)) { + if (sizeof(p_message.msgHeader.route.routeBody)>p_index) { + return(p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.recordRoute)) { + if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { + return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromResponse(in Response p_message, in integer p_index) return HostPort + { + if (ispresent(p_message.msgHeader.recordRoute)) { + if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { + return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.hostPort)} + }; + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Via header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPort(in Request p_message, in integer p_index) return HostPort + { + + if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { + return(p_message.msgHeader.via.viaBody[p_index].sentBy)} + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc functions give access to an element of the Via header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ function f_getViaHeaderElementHostPortResponse(in Response p_message, in integer p_index) return HostPort + { + + if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { + return(p_message.msgHeader.via.viaBody[p_index].sentBy)} + setverdict(fail); + return(c_hostport_dummy) + } + + /** + * + * @desc function checks indicators if topology hiding (TH) has been applied: + * - second element in via-header record has tokenized-by parameter + * @param p_Request SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHiding(inout Request p_request) runs on SipComponent return boolean + { + var GenericParam v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; // second element + if (not v_viaParameter.id == "tokenized-by") + {return(false)}; + return(true) + } + + /** + * + * @desc function checks indicators if topology hiding (TH) has been applied: + * - any element in via-header record has tokenized-by parameter + * @param Response SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHidingResponse(inout Response p_response) runs on SipComponent return boolean + { + var GenericParam v_viaParameter; + + for (var integer v_i := 0; v_i < sizeof(p_response.msgHeader.via.viaBody); v_i := v_i + 1) { + + v_viaParameter := p_response.msgHeader.via.viaBody[v_i].viaParams[0]; // first parameter + + if (not v_viaParameter.id == "tokenized-by") + {return(false)} + } + return(true); + + } + + + +group SetHeaders { + + + /** + * + * @desc function for setting of component variables related to message header fields + * (message type independent: CSeq, contact, via), function uses information from userprofile + * + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral(inout CSeq p_cSeq_s, in charstring p_method) runs on SipComponent + { + var SemicolonParam_List v_params; + + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method ; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + vc_branch := c_brenchCookie & f_getRndTag(); + vc_via:={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + }// end function f_setHeadersGeneral + + /** + * + * @desc setting of general and basic Bye header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersBYE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + f_addTagInTo(vc_to); + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersBYE + + /** + * + * @desc function sets header field for the next outgoing REGISTER message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_REGISTER(inout CSeq p_cSeq_s) runs on SipComponent + { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + + vc_requestUri:= + { + scheme := c_sipScheme, + userInfo := omit, + hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.hostPort; + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} + vc_from := {fieldName := FROM_E, + addressField :=vc_to.addressField, + fromParams := v_params + }; + + if(not vc_firstREGISTER_sent) + { + v_params := {{id:=c_expiresId, paramValue:=c_shortRegistration}}; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function + + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_empty(vc_userprofile) + } + + + }// end function setHeaders_REGISTER + + /** + * + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER + + /** + * + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * NO response in Authorization header to cause an error + * @verdict + */ + function f_setHeaders_2ndREGISTER_wo_response() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER_wo_response + + /** + * + * @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName() runs on SipComponent + { + var CommaParam_List v_challenge; + + vc_branch := c_brenchCookie & f_getRndTag(); + + vc_via_REG :={ + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := + { + fieldName := AUTHORIZATION_E, + body := f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge) + } + + }// end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName + + + /** + * + * @desc function sets header fields for the next outgoing REGISTER (de-registration) + * @param p_cSeq_s cSeq to be used + * @verdict + */ + function f_setHeaders_deREGISTER(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeaders_REGISTER(p_cSeq_s); + vc_contact := + { + fieldName := CONTACT_E, + contactBody := {wildcard := "*" } + }; + } // end function f_setHeaders_deREGISTER + + + /** + * + * @desc setting of general and basic Invite header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersINVITE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersINVITE + + /** + * + * @desc setting of general and basic Message header fields + * in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersMESSAGE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via + + vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.hostPort; + + }// end function f_setHeadersMESSAGE + + /** + * + * @desc function sets header field for the next outgoing SUBSCRIBE message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_SUBSCRIBE(inout CSeq p_cSeq_s) runs on SipComponent + { + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + + vc_requestUri:=valueof(m_SipUrl_currDomain(vc_userprofile)) + + }// end function setHeaders_SUBSCRIBE + + /** + * + * @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer + * @param p_Request REGISTER that has been received + */ + function f_setHeadersOnReceiptOfREGISTER(Request p_Request) + runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + } // end f_setHeadersOnReceiptOfREGISTER + + /** + * + * @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer + * @param p_Request SUBSCRIBE that has been received + */ + function f_setHeadersOnReceiptOfSUBSCRIBE(Request p_Request) + runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + } // end f_setHeadersOnReceiptOfSUBSCRIBE + + /** + * + * @desc function reads all necessary headers from + * the received INVITE message and generate the tag for the answer + * @param p_Request received INVITE message + * @verdict + */ + function f_setHeadersOnReceiptOfINVITE(Request p_Request) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + f_addTagInTo(vc_to); + vc_caller_From := vc_from; + vc_caller_To := vc_to; + + if (ispresent(p_Request.msgHeader.contact)) { + vc_reqHostPort := + f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + }; + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := {fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From := {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + if (ispresent(p_Request.msgHeader.privacy)) { + vc_privacy := p_Request.msgHeader.privacy; + }; + + if (ispresent(p_Request.messageBody)) { + //cleaning of attributes before assignment + if (ispresent(vc_sdp_remote.media_list)) + { + for (var integer i:=0; i0; i:=i-1) + { + if (p_Request.msgHeader.supported.optionsTags[i-1]=="100rel") + { vc_supported_100rel := true }; + if (p_Request.msgHeader.supported.optionsTags[i-1]=="precondition") + { vc_supported_precondition := true } + } + }; + + } // end f_setHeadersOnReceiptOfINVITE + + /** + * + * @desc function reads header field of a received BYE message + * @param p_Request received BYE + */ + function f_setHeadersOnReceiptOfBYE(Request p_BYE_Request) + runs on SipComponent + { + + f_setHeadersOnReceiptOfRequest(p_BYE_Request); + vc_callId := p_BYE_Request.msgHeader.callId; + + } // end f_setHeadersOnReceiptOfBYE + + /** + * + * @desc function reads header field from an incoming Request message + * @param p_Request received Request message + */ + function f_setHeadersOnReceiptOfRequest(Request p_Request) runs on SipComponent { + vc_request := p_Request; + vc_cSeq := p_Request.msgHeader.cSeq; + vc_iut_CSeq := p_Request.msgHeader.cSeq; + vc_from := p_Request.msgHeader.fromField; + vc_to := p_Request.msgHeader.toField; + vc_via := p_Request.msgHeader.via; + // update sent_label according to received via header field + f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); + + // Catch route + vc_boo_recordRoute:=false; + + if (ispresent(p_Request.msgHeader.recordRoute)) + { + vc_boo_recordRoute:=true; + vc_recordRoute := p_Request.msgHeader.recordRoute; + } + } // end f_setHeadersOnReceiptOfRequest + + /** + * + * @desc functions reads header fields from an incoming Response message + * @param p_cSeq + * @param p_response received response message + * @verdict + */ + function f_setHeadersOnReceiptOfResponse(inout CSeq p_cSeq, Response p_response) runs on SipComponent + { + var integer v_i, v_j, v_nbroute; + var Contact v_contact; //only for local purpose + + vc_response := p_response; + //vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq + vc_to :=p_response.msgHeader.toField; + vc_from :=p_response.msgHeader.fromField; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + if (ispresent(p_response.msgHeader.contact)) + { + v_contact := p_response.msgHeader.contact; + if (ischosen(v_contact.contactBody.contactAddresses)) + { + vc_reqHostPort := f_getContactAddr(v_contact.contactBody.contactAddresses[0]); + } + } + else + { + if (ischosen(vc_to.addressField.nameAddr)) + { + vc_reqHostPort := vc_to.addressField.nameAddr.addrSpec.hostPort; + } + else + { + vc_reqHostPort := vc_to.addressField.addrSpecUnion.hostPort; + } + } + + vc_callee_To:={fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams}; + + vc_callee_From:= {fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams}; + + vc_via:= p_response.msgHeader.via; + + // Route Management + if (ispresent(p_response.msgHeader.recordRoute)) + { + vc_recordRoute := p_response.msgHeader.recordRoute; + v_nbroute := sizeof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (v_i:=0; v_i<=(v_nbroute - 1); v_i:=v_i+1) + { + v_j:= v_nbroute - 1 - v_i; + vc_route.routeBody[v_j]:=vc_recordRoute.routeBody[v_i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else + { + vc_boo_recordRoute := false; + vc_boo_route := false; + }; + + + // extentions due to new fields in PRACK and UPDATE messages + if (ispresent(p_response.msgHeader.rSeq)) { + vc_rAck := + { fieldName := RACK_E, + responseNum := valueof(p_response.msgHeader.rSeq.responseNum), + seqNumber := valueof(p_response.msgHeader.cSeq.seqNumber), + method := valueof(p_response.msgHeader.cSeq.method) + }; + }; + + // extentions due to new HistoryInfo fields 180 or 200OK messages + if (ispresent(p_response.msgHeader.historyInfo)) { + vc_historyInfoList := valueof(p_response.msgHeader.historyInfo.historyInfoList); + vc_history_is_valid := true + } + else {vc_history_is_valid := false}; + + //sdpMessageBody answer + if (ispresent(p_response.messageBody)) { + if ( ischosen(p_response.messageBody.sdpMessageBody)) + { + vc_sdp_remote := p_response.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + } + + if ( ischosen(p_response.messageBody.xmlBody)) + { + vc_xml_remote := p_response.messageBody.xmlBody; + } + + if ( ischosen(p_response.messageBody.mimeMessageBody)) + { + + for (var integer j:=0; j1) + { + // select the first one + v_PT := vc_sdp_local.media_list[i].media_field.fmts[0]; + vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; + for (j :=0; j 0) //specific media requested + { + if (not(loc_medianum > mn)) {mn := loc_medianum} + }; + for (i :=0; i < mn; i := i+1) + { + //for every single media (that is not omit) + cn := 0; + + if (ispresent(vc_sdp_local.media_list[i].media_field)) + { + + log("vc_sdp_local.media_list[i] ",vc_sdp_local.media_list[i]); +// if (valueof(vc_sdp_local.media_list[i]) != omit) +// { + if (ispresent(vc_sdp_local.media_list[i].attributes)) + { + cn := sizeof(vc_sdp_local.media_list[i].attributes); + }; +// }; + var boolean v_set_direction := false; + //if (sizeof(vc_sdp_local.media_list[i].media_field.fmts)>1) + // select the first one + for (j :=0; j 0) //specific media requested + { + if (loc_medianum > mn) {return false} + else {mn := loc_medianum} + }; + for (i :=loc_medianum-1; i < mn; i := i+1) + { + //for every single media + if (ispresent(vc_sdp_remote.media_list[i].attributes)) + { + cn := sizeof(vc_sdp_remote.media_list[i].attributes); + log (cn); + }; + if (sizeof(vc_sdp_remote.media_list[i].attributes)>0) + { + // select the first one + log(vc_sdp_remote.media_list[i].attributes); + for (j :=0; j value v_request sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfREGISTER(v_request); + } + } + } + + /** + * + * @desc function awaits SUBSCRIBE + * @param p_register expected SUBSCRIBE request + */ + function f_awaitingSUBSCRIBE(in template SUBSCRIBE_Request p_register) runs on SipComponent + { + var Request v_request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_register)-> value v_request sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + } + } + } + + /** + * + * @desc function awaits REGISTER and sends a 200 OK response + * @param p_reply flag used to avoid the 200OK response sending + */ + function f_awaitingREGISTER_sendReply(in template REGISTER_Request p_register, in boolean p_reply) runs on SipComponent + { + var Request v_request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_register)-> value v_request sender vc_sent_label + { + tc_resp.stop; + vc_request := v_request; + f_setHeadersOnReceiptOfREGISTER(v_request); + //Answer to the Request + if (p_reply) {f_send200OK();}; + } + } + } + + + /** + * + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponse(inout CSeq p_cSeq_s) runs on SipComponent + { + + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + setverdict(pass) + } + } + } //end awaitingOkResponse + + /** + * + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponse(in template Response p_Response) runs on SipComponent + { + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (p_Response) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + setverdict(pass) + } + } + } //end f_awaitingResponse + + /** + * + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponsePassOnTimeout(in template Response p_Response) runs on SipComponent + { + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (p_Response) -> value vc_response + { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); + vc_boo_response:=true; + //setverdict(pass) + } + [] tc_ack.timeout + { + vc_boo_response:=false; + //setverdict (pass) + } + } + } //end f_awaitingResponsePassOnTimeout + + /** + * + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE(template INVITE_Request p_request) runs on SipComponent + { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt + { + []SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label + { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv:= true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + } + } //end f_awaitingInviteRequest + + /** + * + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_PassOnTimeout(template INVITE_Request p_request) runs on SipComponent + { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt + { + []SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label + { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv:= true; // communication has started + vc_boo_request := true; + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + []tc_wait.timeout + { + vc_boo_request := false; + } + } + } //end f_awaitingInviteRequest + + /** + * + * @desc function awaiting ACK request + */ + function f_awaitingACK(in template ACK_Request p_ACK) runs on SipComponent + { + var Request v_ACK_Request; + tc_ack.start(PX_SIP_TACK); + + alt + { + [] SIPP.receive(p_ACK) -> value v_ACK_Request + { + tc_ack.stop; + } + // INVITE may be repeated and shall be ignored + []SIPP.receive(mw_INVITE_Request_Base) + { + repeat; + } + // Ignore othe message + [] SIPP.receive + { + repeat; + } + } + } //end f_awaitingAckRequest + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE(in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + //f_send200OK(); + } + } + } // end f_awaitingBYE + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply + (in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + } + } // end f_awaitingBYE_sendReply + + /** + * + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply_PassOnTimeout(in template BYE_Request p_BYE) runs on SipComponent + { + var BYE_Request v_BYE_Request; + + tc_resp.start(PX_SIP_TRESP); + alt + { + []SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label + { + tc_resp.stop; + vc_ignore_bye:= true; + vc_boo_request := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + []tc_resp.timeout + { + vc_boo_request := false; + } + + } + } // end f_awaitingBYE_sendReply_PassOnTimeout + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE(in template MESSAGE_Request p_MSG) runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + //f_send200OK(); + } + } + } // end of f_awaitingMESSAGE + + /** + * @desc await MESSAGE request + * reply with 200 OK + */ + function f_awaitingMESSAGE_sendReply() runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(mw_MESSAGE_Request_Base(vc_callId))-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + f_send200OK(); + } + } + + } // end of f_awaitingMESSAGE_sendReply + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE_sendReply_PassOnTimeout(in template MESSAGE_Request p_MSG) runs on SipComponent + { + var MESSAGE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the MESSAGE + //f_send200OK(); + vc_boo_request := true; + f_send200OK(); + //setverdict (pass); + } + [] tc_resp.timeout + { + vc_boo_request := false; + //setverdict (pass); + } + } + } // end of f_awaitingMESSAGE_PassOnTimeout + + /** + * @desc await NOTIFY request + * reply with 200 OK + */ + function f_awaitingNOTIFY_sendReply(in template NOTIFY_Request p_MSG) runs on SipComponent + { + var NOTIFY_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the NOTIFY + f_send200OK(); + } + } + } // end of f_awaitingNOTIFY_sendReply + + /** + * @desc await PRACK request + * reply with 200 OK + */ + function f_awaitingPRACK_sendReply(in template PRACK_Request p_MSG) runs on SipComponent + { + var PRACK_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the PRACK + f_send200OK(); + } + } + + } // end of f_awaitingPRACK_sendReply + + /** + * @desc await PUBLISH request + * reply with 200 OK + */ + function f_awaitingPUBLISH_sendReply(in template PUBLISH_Request p_MSG) runs on SipComponent + { + var PUBLISH_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the PUBLISH + f_send200OK(); + } + } + + } // end of f_awaitingPUBLISH_sendReply + + /** + * @desc await UPDATE request + */ + function f_awaitingUPDATE(in template UPDATE_Request p_MSG) runs on SipComponent + { + var UPDATE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingUPDATE + + /** + * @desc await UPDATE request + * reply with 200 OK + */ + function f_awaitingUPDATE_sendReply(in template UPDATE_Request p_MSG) runs on SipComponent + { + var UPDATE_Request v_MSG; + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label + { + tc_resp.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + //Answer to the UPDATE + f_send200OK(); + } + } + + } // end of f_awaitingUPDATE_sendReply + +} // end AwaitingMessage + +group SendMessage { + + /** + * + * @desc send ACK message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendACK(template ACK_Request p_request) runs on SipComponent + { + p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + // n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send BYE message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendBYE(template BYE_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "BYE"); // cseq, contact, branch, via + p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send CANCEL message + * @param p_request template of the message to be sent + */ + function f_SendCANCEL(template CANCEL_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "CANCEL"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send INVITE message + * @param p_request template of the message to be sent + */ + function f_SendINVITE(template INVITE_Request p_request) runs on SipComponent + { + vc_requestFor407 := valueof(p_request); + SIPP.send(p_request) to vc_sent_label; + if(PX_SIP_INVITE_AUTHENTICATION_ENABLED) {a_altstep_401or407();}; + } + + /** + * + * @desc send PRACK message + * @param p_request template of the message to be sent + */ + function f_SendPRACK(template PRACK_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send PUBLISH message + * @param p_request template of the message to be sent + */ + function f_SendPUBLISH(template PUBLISH_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send REGISTER message + * @param p_request template of the message to be sent + */ + function f_SendREGISTER(template REGISTER_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send SUBSCRIBE message + * @param p_request template of the message to be sent + */ + function f_SendSUBSCRIBE(template SUBSCRIBE_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send UPDATE message + * @param p_request template of the message to be sent + */ + function f_SendUPDATE(template UPDATE_Request p_request) runs on SipComponent + { + f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc function send MESSAGE message + * @param p_request template of the message to be sent + */ + function f_SendMESSAGE(template MESSAGE_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc function send NOTIFY message + * @param p_request template of the notify to be sent + */ + function f_SendNOTIFY(template NOTIFY_Request p_request) runs on SipComponent + { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * + * @desc send 200 OK + */ + function f_send200OK() runs on SipComponent + { + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + } + + /** + * + * @desc send response + * @param p_request template of the message to be sent + */ + function f_sendResponse(template Response p_response) runs on SipComponent + { + p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_response) to vc_sent_label; + } + +} // end SendMessage + +group GlobalSteps { + /** + * + * @desc component initialization + * @param p_cSeq_s cSeq value to be assigned to the component variable + */ + function f_init_component(inout CSeq p_cSeq_s) runs on SipComponent + { + //Variables + vc_cSeq := p_cSeq_s; + + //Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate (a_clearRegistration()); + } + + /** + * + * @desc component termination + */ + function f_terminate_component() runs on SipComponent + { + deactivate; + stop; + } + + /** + * + * @desc setting of user parameters with PIXIT values + * @param p_user identifies the selected user configuration and location + */ + function f_init_userprofile(in integer p_user) runs on SipComponent + { + vc_userprofile.id := p_user; + + select(p_user){ + case (c_userProfile_SIP1_home) { //variant c_userProfile_SIP1_home + vc_userprofile.currPort := PX_SIP_TS1_PORT; + vc_userprofile.currIpaddr := PX_SIP_TS1_IPADDR; + vc_userprofile.contactPort := PX_SIP_TS1_PORT; + vc_userprofile.contactIpaddr := PX_SIP_TS1_IPADDR; + vc_userprofile.bearerIpaddr := PX_SIP_TS1_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_SIP_TS1_LOCAL_DOMAIN; + vc_userprofile.publUsername := PX_SIP_TS1_LOCAL_USER; + vc_userprofile.qop := PX_SIP_SUT_UE1_QOP; + vc_userprofile.privUsername := PX_SIP_SUT_UE1_USERNAME; + vc_userprofile.passwd := PX_SIP_SUT_UE1_PASSWD; + vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; + } + case (c_userProfile_SIP2_home) { //variant c_userProfile_SIP2_home + vc_userprofile.currPort := PX_SIP_TS2_PORT; + vc_userprofile.currIpaddr := PX_SIP_TS2_IPADDR; + vc_userprofile.contactPort := PX_SIP_TS2_PORT; + vc_userprofile.contactIpaddr := PX_SIP_TS2_IPADDR; + vc_userprofile.bearerIpaddr := PX_SIP_TS2_BEARER_IPADDR; + vc_userprofile.homeDomain := PX_SIP_TS2_LOCAL_DOMAIN; + vc_userprofile.publUsername := PX_SIP_TS2_LOCAL_USER; + vc_userprofile.qop := PX_SIP_SUT_UE2_QOP; + vc_userprofile.privUsername := PX_SIP_SUT_UE2_USERNAME; + vc_userprofile.passwd := PX_SIP_SUT_UE2_PASSWD; + vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; + } + + } + } + + /** + * + * @desc function waits for particular time that allows the SUT to return to idle state + */ + function f_awaitSUTidle() runs on SipComponent + { + vc_ignore4xx := true; // allow 4xx in default + tc_noAct.start; + alt { + [] tc_noAct.timeout{} + } + } + + /** + * + * @desc function waits for particular time before next expected message + */ + function f_wait(float p_time) runs on SipComponent + { + tc_noAct.start(p_time); + alt { + [] tc_noAct.timeout{} + } + } + + /** + * + * @desc function cause termination of a PTC + * @param p_syncPoint dummy parameter (copied from the common lib) + */ + function f_check2Null(in charstring p_syncPoint) runs on SipComponent + { + //!= pass does not work, because in case of "none" execution shall continue + if (getverdict == inconc or getverdict == fail){ + log("**** f_check2Null: Verdict evaluated to fail or inconc. Stopping test execution now "); + f_selfOrClientSyncAndVerdict (p_syncPoint, e_error) ; + }//end if + } + +}// end group GlobalSteps + +group Registration { + + /** + * + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration(inout CSeq p_cSeq_s, template REGISTER_Request p_register, in boolean p_auth) runs on SipComponent + { + var REGISTER_Request v_request := valueof(p_register); + + if (PX_SIP_REGISTRATION) + { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(v_request); //LibSip + + //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + // Re-send protected REGISTER + f_SendREGISTER(v_request);//LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); + } + + }; + }//end function f_Registration + + + /** + * + * @desc remove registration + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration(inout CSeq p_cSeq) runs on SipComponent + { + var CommaParam_List v_challenge; + var Credentials v_credentials; + var REGISTER_Request v_request := valueof(m_REGISTER_Request_expires(vc_requestUri, vc_callId, + p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0")); + + if (PX_SIP_REGISTRATION) + { + f_setHeaders_deREGISTER(p_cSeq); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) + { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start(PX_SIP_TACK); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq)) -> value vc_response + { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(); + // Re-send protected REGISTER + f_SendREGISTER(v_request);//LibSip + + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq); + f_getServiceRouteMapIntoRouteInRegistration(p_cSeq, vc_response); + } + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq)) + { + tc_ack.stop; + log ("Authorization was not requested as expected"); + setverdict(inconc) + } + } + } + else + { + f_awaitingOkResponse(p_cSeq); + } + } + } // end f_RemoveRegistration + + /** + * + * @desc remove registration without authorization + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration_wo_authorization(inout CSeq p_cSeq) runs on SipComponent + { + var SemicolonParam_List tmp_params; + if (PX_SIP_REGISTRATION) + { + f_setHeaders_deREGISTER(p_cSeq); + f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, + vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0" )); + f_awaitingOkResponse(p_cSeq); + } + } // end f_RemoveRegistration_wo_authorization + +}//end group Registration + + group Subscription { + + /** + * + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_register subscribe template + */ + function f_Subscription(inout CSeq p_cSeq_s, template SUBSCRIBE_Request p_subscribe) runs on SipComponent + { + f_setHeaders_SUBSCRIBE(p_cSeq_s); + //send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + f_awaitingOkResponse(p_cSeq_s); + + //await NOTIFY and send reply 200 OK + f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(vc_callId)); + + }//end function f_Subscription + + }//end group Subscription + +group Preambles { + + /** + * + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_SIP_preamble_woREG(in integer p_userprofile, inout CSeq p_cSeq_s) runs on SipComponent + { + //varables and altsteps + f_init_component(p_cSeq_s); + + //Preamble + f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT(PX_SIP_SDP_dyn, PX_SIP_SDP_encoding)), vc_userprofile)); + } + + /** + * + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_SIP_preamble_withREG(in integer p_userprofile, inout CSeq p_cSeq_s, template REGISTER_Request p_register) runs on SipComponent + { + //preamble + f_SIP_preamble_woREG(p_userprofile, p_cSeq_s); + + //Registration, Awaiting + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + } + +}// end group Preambles + +group Postambles { + + /** + * + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + */ + function f_terminateCall(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, + template To p_to) runs on SipComponent + { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, PX_SIP_BYE_CAUSE)); + + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) + { + repeat; + } + [] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) + { + tc_resp.stop; + } + [] tc_resp.timeout + { + stop + } + } + } // end function f_terminateCall + + function f_cancelCall(template CANCEL_Request p_request) + runs on SipComponent + { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + + // Sending of a CANCEL request with the same Cseq + f_SendCANCEL(p_request); + tc_resp.start(PX_SIP_TRESP); + alt + { + [] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) + { + tc_resp.stop; + } + } + } + +} // end group Postambles + +group SipChecks +{ + + + /* + * @desc check the presence of conversation at SIP side + * + */ + function f_check_Conversation() runs on SipComponent + { + var boolean v_result; + var charstring v_question := "confirm if conversation at SIP port"; + + if (PX_SIP_CheckConversation) { + opPort.call(s_SIP_conversation:{v_question, -}) + {[] opPort.getreply(s_SIP_conversation:{-, true}) {} + [] opPort.getreply(s_SIP_conversation:{-, false}) + {all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop;} + } + } + + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies + + return + } // end of f_check_Conversation + + /* + * @desc check the presence of conversation at SIP side + * + */ + function f_check_Ringing() runs on SipComponent + { + var boolean v_result; + var charstring v_question := "confirm if ringing at SIP port"; + + if (PX_SIP_CheckRinging) { + opPort.call(s_SIP_ringing:{v_question, -}) + {[] opPort.getreply(s_SIP_ringing:{-, true}) {} + [] opPort.getreply(s_SIP_ringing:{-, false}) + {all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop;} + } + } + + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return + } // end of f_check_Ringing + +} + +group DefaultsTestStep +{ + + + /** + * @desc This default handles receiving of the sync server + * STOP message and calls the RT HUT postamble. (copy from common lib) + */ + altstep a_Sip_catchSyncStop() runs on SipComponent + { + [] syncPort.receive(m_syncServerStop) + { + tc_sync.stop ; + log("**** a_Sip_catchSyncStop: Test component received STOP signal from MTC - going to IDLE state **** "); + //TODO complete postamble + f_terminate_component(); + log("**** a_Sip_catchSyncStop: TEST COMPONENT NOW STOPPING ITSELF! **** ") ; + setverdict(inconc); + stop ; + } + } + + + /** + * + * @desc main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration() runs on SipComponent + { + var Response v_response; + var Request v_request; + + [] any timer.timeout + { + setverdict(fail); + all timer.stop; + //TODO check how to solve release of call + //f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration state or transaction state + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) + { + repeat + } + + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive (mw_BYE_Request_Base(?)) + { + repeat + } + + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)) + { + repeat + } + + // ignore 181 if flag is set (following TS 183004 §4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181,vc_callId, vc_cSeq))-> value v_response sender vc_sent_label + { + f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); + repeat; + } + + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183,vc_callId, vc_cSeq)) + { + repeat; + } + + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484,vc_callId, vc_cSeq)) + { + repeat + } + + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx,vc_callId, ?))-> value v_response sender vc_sent_label + { + f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat + } + + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) + { + repeat + } + + [] SIPP.receive(mw_INFO_Request_Base(vc_callId))->value v_request sender vc_sent_label + { + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + repeat + } + + //awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base)->value v_request sender vc_sent_label + { + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via + f_SendNOTIFY(m_NOTIFY_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + f_awaitingOkResponse(vc_cSeq); + repeat + } + + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?))-> value v_request sender vc_sent_label + { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_request); + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?))-> value v_request sender vc_sent_label + { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_request); + //Answer to the CANCEL + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + [] SIPP.receive + { + setverdict(fail); + all timer.stop; + f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between registration state or transaction state + f_RemoveRegistration(vc_cSeq); + f_check2Null(""); + } + } + + /** + * + * @desc altstep handle authentication for INVITE message + */ + altstep a_altstep_401or407() runs on SipComponent { + [] any port.check (receive) { + var CommaParam_List v_challenge; + var Credentials v_Credentials; + var Response v_Response; + var Request v_Request := valueof (vc_requestFor407); + + tc_ack.start (PX_SIP_TACK); + alt { + [] SIPP.receive (mw_Response_Base((c_statusLine401,c_statusLine407), + vc_callId, + vc_cSeq)) -> value v_Response { + tc_ack.stop; + // get tag from To header if available + vc_to := v_Response.msgHeader.toField; + if (vc_cSeq.method == "INVITE"){ + // send ACK + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + // resent the INVITE message with Proxyauthorization header include + // Extract challenge and calculate credentials for a response. + if (ischosen (v_Response + .msgHeader + .proxyAuthenticate + .challenge + .otherChallenge // instead of digestCln (changed by axr to comply to alcatel) + )) { + v_challenge := + v_Response + .msgHeader + .proxyAuthenticate + .challenge + .otherChallenge.authParams; + v_Credentials := + f_calculatecCredentials(vc_userprofile, + vc_requestFor407.msgHeader.cSeq.method, + v_challenge); + } else { + log ("No scheme in Proxy Authenticate header!!"); + setverdict (inconc); + stop; + } + + vc_branch := c_brenchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := { + valueof (m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + v_Request.msgHeader.via := vc_via; + // Increment CSeq sequence number of and add the credentials + // to the original saved INVITE message. + vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + v_Request.msgHeader.cSeq.seqNumber := + vc_cSeq.seqNumber; + v_Request.msgHeader.proxyAuthorization.fieldName := + PROXY_AUTHORIZATION_E; + v_Request.msgHeader.proxyAuthorization.credentials := + v_Credentials; + + // Re-send the saved INVITE with Authorization header + // included. + SIPP.send (v_Request) to vc_sent_label; + } + } + } + } + + +} // end of group DefaultsTestStep +} // end module LibSip_Steps diff --git a/LibSip/LibSip_Templates.ttcn b/LibSip/LibSip_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7335e665a566ee7e8a5b5cfb6e6e9fadb3170ea9 --- /dev/null +++ b/LibSip/LibSip_Templates.ttcn @@ -0,0 +1,2323 @@ +/* + * @author STF 346 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-IMS tests. Module become from STF306 and STF334-336 + */ + +module LibSip_Templates +{ + //LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + + + group SubFields + { + + template Addr_Union m_AddrUnion_NameAddr(template NameAddr p_nameAddr) := + { + nameAddr := p_nameAddr + } + + template Addr_Union m_AddrUnion_DisplayAndSipUrl(in charstring p_displayName, template SipUrl p_addrSpec) := + { + nameAddr := m_CallingAddr(p_displayName, p_addrSpec) + } + + template NameAddr m_CallingAddr(template charstring p_displayName, template SipUrl p_addrSpec) := + { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template CommaParam_List mw_digestResponse(in GenericParam p_genericParam) := + { + *,p_genericParam,* // c_Integrity_protected_yes + } + + template SemicolonParam_List m_cpc := + {{"cpc",PX_SIP_ISUP_CPC_VALUE}}; + + template SemicolonParam_List m_ReasonParams + (template charstring p_cause, template charstring p_text) := + {m_Cause(p_cause),m_Text(p_text)}; + + template ReasonValue m_ReasonValue + (template charstring p_cause, template charstring p_text) := + { + token := "Q.850", + reasonParams := m_ReasonParams(p_cause,p_text) + }; + + template RouteBody mw_routeBody (template SipUrl p_sipurl):= + { + nameAddr := + { + displayName := *, + addrSpec := p_sipurl + }, + rrParam := * + } + + template SentProtocol m_SentProtocol (charstring p_protocol) := + {protocolName := c_sipName, + protocolVersion:= c_sipVersion, + transport:= p_protocol}; + + template SipUrl m_SipUrl_currDomain(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.homeDomain, // hostname, IPv4 or IPv6 as a charstring + portField := omit //p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_contactIpaddr(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.contactIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.contactPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_contactIpaddrAndCpc(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername & "; cpc=" & PX_SIP_ISUP_CPC_VALUE,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.contactIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.contactPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_currIpaddr(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := p_userprofile.currIpaddr, // hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl m_SipUrl_Anonymous := // SIP-URL with a calles party number + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := "Anonymous",// charstring + password := omit // optional charstring + }, + hostPort := + { + host := "Anonymous.invalid", // hostname, IPv4 or IPv6 as a charstring + portField := omit //optional integer + }, + urlParameters := omit, + headers := omit + }; + + template SipUrl m_TelUrl_publUser(in SipUserProfile p_userprofile) := // SIP-URL of the test system on SIP side + { + scheme := c_telScheme, // contains "tel" + userInfo := // optional + { + userOrTelephoneSubscriber := p_userprofile.publUsername,// charstring + password := omit // optional charstring + }, + hostPort := + { + host := omit, // hostname, IPv4 or IPv6 as a charstring + portField := omit //p_userprofile.currPort //optional integer + }, + urlParameters := omit, + headers := omit + } + + template SipUrl mw_SipUrl_Number(charstring p_number) := // SIP-URL with a calling party number + { + scheme := c_sipScheme, // contains "sip" + userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, + hostPort := ?, + urlParameters := *, + headers := * + }; + + template SipUrl mw_SipUrl_Anonymous := // SIP-URL with a calles party number + { + scheme := c_sipScheme, // contains "sip" + userInfo := // optional + { + userOrTelephoneSubscriber := "Anonymous",// charstring + password := omit // optional charstring + }, + hostPort := + { + host := "anonymous.invalid", // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := *, + headers := * + }; + + template SipUrl mw_SipUrl_urlParam(template SemicolonParam_List p_urlParameters) := // SIP-URL with a calling party number + { + scheme := c_sipScheme, // contains "sip" + userInfo:= *, + hostPort := *, + urlParameters := p_urlParameters, + headers := * + }; + + template ContactAddress mw_ContactAddress := + { + addressField := ?, + contactParams := * + }; + + template StatusLine mw_statusLine1xx := {sipVersion := c_sipNameVersion, statusCode := (100..199), reasonPhrase := ?}; + template StatusLine mw_statusLine4xx := {sipVersion := c_sipNameVersion, statusCode := (400..499), reasonPhrase := ?}; + template StatusLine mw_statusLineFinal := {sipVersion := c_sipNameVersion, statusCode := (200..699), reasonPhrase := ?}; + + template NameAddr mw_NameAddr_DispName_User_Host(template charstring p_dn, template charstring p_user, template charstring p_host) := + { + displayName := p_dn, + addrSpec := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, + hostPort := + { + host := p_host, // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := {m_UserPhone}, + headers := * + } + } + + template Addr_Union mw_AddrUnion_Nameaddr(template charstring p_dn, template charstring p_user, template charstring p_host):= + { + nameAddr:=mw_NameAddr_DispName_User_Host(p_dn,p_user,p_host) + } + + template SipUrl mw_SipUrl_User_Host(template charstring p_user, template charstring p_host) := + { + scheme := c_sipScheme, // contains "sip" + userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, + hostPort := + { + host := p_host, // hostname, IPv4 or IPv6 as a charstring + portField := * //optional integer + }, + urlParameters := {m_UserPhone}, + headers := * + } + template Addr_Union mw_AddrUnion_SipUrl(template charstring p_user, template charstring p_host):= + { + addrSpecUnion:=mw_SipUrl_User_Host(p_user,p_host) + } + + + } //end group Subfields + + + + + + group HeaderFieldTemplates { + + template GenericParam m_Cause (template charstring p_cause):= + {id:="cause", paramValue:=p_cause} + + template Authorization m_Authorization (template Credentials p_Credentials):= + { + fieldName := AUTHORIZATION_E, + body := p_Credentials + } + + template Authorization m_Authorization_digest (template CommaParam_List p_CommaParam_List):= + { + fieldName := AUTHORIZATION_E, + body := {digestResponse := p_CommaParam_List} + } + + template Authorization m_add_Authorization_digest (in Authorization p_auth, template CommaParam_List p_CommaParam_List):= + { + fieldName := AUTHORIZATION_E, + body := {digestResponse := f_merge_CommaParam_List(p_auth.body.digestResponse,valueof(p_CommaParam_List))} + } + + template Authorization m_Authorization_other := + { + fieldName := AUTHORIZATION_E, + body := {otherResponse := ?} + } + + template Contact m_Contact(template SipUrl p_sipUrl) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := p_sipUrl}, + contactParams := omit + } + } + } //end contactBody + }//end m_Contact + + template Contact m_Contact_profile(in SipUserProfile p_userprofile) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := omit + } + } + } //end contactBody + }//end m_Contact + + + template Contact m_Contact_profile_expires(in SipUserProfile p_userprofile, in charstring p_expires) := + { + fieldName := CONTACT_E, + contactBody := + { + contactAddresses := + { + { + addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := {{"expires",p_expires}} + } + } + } //end contactBody + }//end m_Contact + + template From m_From(template NameAddr p_nameAddr, charstring p_tag_str) := + { + fieldName := FROM_E, + addressField := + {nameAddr := p_nameAddr},//end addressField + fromParams := {{id := c_tagId, paramValue := p_tag_str}} + }; + + template Event m_Event_conference := + { + fieldName := EVENT_E, + eventType := "conference", + eventParams := omit + }; + + template Event m_Event_presence := + { + fieldName := EVENT_E, + eventType := "presence", + eventParams := omit + }; + + template Event m_Event_reg := + { + fieldName := EVENT_E, + eventType := "reg", + eventParams := omit + }; + + template Expires m_Expires_600000 := + { + fieldName := EXPIRES_E, + deltaSec := "600000" + }; + + template Expires m_Expires (charstring p_deltaSec):= + { + fieldName := EXPIRES_E, + deltaSec := p_deltaSec + }; + + template PAssertedID m_PAssertedID(template Addr_Union p_pAssertedIDValue) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + }; + + template PAssertedID m_PAssertedID_2x(template Addr_Union p_pAssertedIDValue1, template Addr_Union p_pAssertedIDValue2) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue1, p_pAssertedIDValue2} + }; + + template PAssertedID mw_PAssertedID(template PAssertedIDValue p_pAssertedIDValue) := + { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + }; + + template PAssertedIDValue mw_PAssertedIDValue(template SipUrl p_SipUrl) := + { + addrSpecUnion := p_SipUrl + }; + + template PPreferredID m_PPreferredID(template Addr_Union p_pPreferredIDValue) := + { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := {p_pPreferredIDValue} + }; + + template Privacy m_Privacy(PrivacyValue p_privacy) := + { + fieldName := PRIVACY_E, + privValueList := {p_privacy} + }; + + template RAck m_RAck(integer p_responseNum, integer p_seqNumber, charstring p_method) := + { + fieldName := RACK_E, + responseNum := p_responseNum, + seqNumber := p_seqNumber, + method := p_method + }; + + template Reason m_Reason(integer p_cause) := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(p_cause),"dummy")} + }; + + template Reason m_Reason21 := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(21),"call reject")} + }; + + template RecordRoute m_recordRoute_currIpAddr (in SipUserProfile p_userprofile):= + { + fieldName := RECORD_ROUTE_E, + routeBody := {{nameAddr := {displayName := omit, + addrSpec := {scheme := c_sipScheme, // contains "sip" + userInfo := omit, + hostPort := {host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}, + urlParameters := omit, + headers := omit} + }, + rrParam := omit} + }}; + + template ReferredBy m_ReferredBy_SipUrl(template SipUrl p_sipUrl) := + { + fieldName := REFERRED_BY_E, + nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, + referredbyIdParams := omit + } + + template ReferTo m_ReferTo_SipUrl(template SipUrl p_sipUrl) := + { + fieldName := REFER_TO_E, + nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, + referToParams := {{id:="method",paramValue :="INVITE"}} + } + + template Require m_Require_100rel := + { + fieldName := REQUIRE_E, + optionsTags := {c_tag100rel} + }; + + template Require m_Require_prec := + { + fieldName := REQUIRE_E, + optionsTags := {c_tagPrecond} + }; + + template Supported m_Supported_prec := + { + fieldName:=SUPPORTED_E, + optionsTags:={c_tagPrecond} + } + + template Supported m_Supported_100rel_prec := + { + fieldName:=SUPPORTED_E, + optionsTags:={c_tag100rel, c_tagPrecond} + } + + template GenericParam m_Text (template charstring p_text):= + {id:="text", paramValue:=p_text} + + template GenericParam m_UserPhone := + { + id := "user", + paramValue := "phone" + } + + template To m_To(template SipUrl p_sipUrl) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := "ETSI Tester", // optional charstring + addrSpec := p_sipUrl // SipUrl + }},//end addressField + toParams := omit + }; + + template To m_To_SipUrl(SipUrl p_sipUrl) := + { + fieldName := TO_E, + addressField := + {nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }},//end addressField + toParams := omit + }; + + template To mw_To_NameAddr_SipUrl(template charstring p_dn, template charstring p_user, template charstring p_host) := + { + fieldName := TO_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn,p_user,p_host),mw_AddrUnion_SipUrl(p_user,p_host)), + toParams := omit + } + + template From mw_From(template SipUrl p_sipUrl) := { + fieldName := FROM_E, + addressField := { addrSpecUnion := p_sipUrl}, + fromParams:= * + } + + template ViaBody m_ViaBody_currIpaddr(charstring branch_val,in SipUserProfile p_userprofile) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}, + viaParams:={{id :=c_branchId,paramValue :=branch_val}} + } + + template ViaBody mw_ViaBody_interface(HostPort p_hostport) := + { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy:={host:=p_hostport.host, portField:= p_hostport.portField}, + viaParams:=* + } + + template Via mw_Via(template ViaBody p_viabody) := + { + fieldName := VIA_E, + viaBody:= ? // superset(p_viabody) + } + + template CallId mw_CallId_any := + { + fieldName := CALL_ID_E, + callid := ? + } + + template Privacy mw_Privacy_id := + { + fieldName := PRIVACY_E, + privValueList := {*,"id",*} + }; + + template Privacy mw_Privacy_user := + { + fieldName := PRIVACY_E, + privValueList := {*,"user",*} + }; + + template Reason mw_Reason(integer p_cause) := + { + fieldName := REASON_E, + reasonValues := {m_ReasonValue(int2str(p_cause),?)} + }; + + template RecordRoute mw_recordroute (template RouteBody p_routeBody):= + { + fieldName := RECORD_ROUTE_E, + routeBody := ? // superset(p_routeBody) + }; + + template Route mw_route (template RouteBody_List p_routeBody):= + { + fieldName := ROUTE_E, + routeBody := p_routeBody + }; + + } // end of group HeaderFieldTemplates + + +group MessageTemplates { +group dummy_templates { + group dummy_parameter_send { + + template RequestLine m_requestLine_dummy := + { + method := ACK_E, + requestUri := c_empty_RequestUri, + sipVersion := c_sipNameVersion + } + + template MessageHeader m_msgHeader_dummy := + { + accept := omit, + acceptContact := omit, + acceptEncoding := omit, + acceptLanguage := omit, + alertInfo := omit, + allow := omit, + allowEvents := omit, // RFC3265 + authenticationInfo := omit, + authorization := omit, + callId := c_empty_CallId, + callInfo := omit, + contact := omit, + contentDisposition := omit, + contentEncoding := omit, + contentLanguage := omit, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= 0}, + contentType := omit, //if message body present m, else not present + cSeq := c_empty_cSeq, + date := omit, + errorInfo := omit, + event := omit, // RFC3265 + expires := omit, + fromField := c_empty_From, + historyInfo := omit, // RFC4244 + inReplyTo := omit, + maxForwards := c_maxForwards70, + mimeVersion := omit, + minExpires := omit, + minSE := omit, // RFC4028 + organization := omit, + pAccessNetworkInfo := omit, // RFC3455 + pAssertedID := omit, + pAssertedService := omit, + pAssociatedURI := omit, + path := omit, // RFC3327 + pCalledPartyID := omit, // RFC3455 + pChargingFunctionAddresses := omit, // RFC3455 + pChargingVector := omit, // RFC3455 + pEarlyMedia := omit, // RFC5009 + pMediaAuthorization := omit, // RFC3313 + pPreferredID := omit, + priority := omit, + privacy := omit, + proxyAuthenticate := omit, + proxyAuthorization := omit, + proxyRequire := omit, + pVisitedNetworkID := omit, // RFC3455 + rAck := omit, + rSeq := omit, + reason := omit, + recordRoute := omit, + referredBy := omit, // RFC3892 - REFER method + referTo := omit, // RFC3515 - REFER method + replyTo := omit, + require := omit, + retryAfter := omit, + route := omit, + securityClient := omit, // RFC3329 + securityServer := omit, // RFC3329 + securityVerify := omit, // RFC3329 + server := omit, + serviceRoute := omit, // RFC3608 + sessionExpires := omit, // RFC4028 + subject := omit, + subscriptionState := omit, // RFC3265 + supported := omit, + timestamp := omit, + toField := c_empty_To, + unsupported := omit, + userAgent := omit, + via := c_empty_Via, + warning := omit, + wwwAuthenticate := omit, + undefinedHeader_List := omit + } + } // group dummy_parameter_send + + group dummy_parameter_receive { + + template RequestLine mw_requestLine_dummy := + { + method := ACK_E, + requestUri := ?, + sipVersion := c_sipNameVersion + } + + template MessageHeader mw_msgHeader_dummy := + { + accept := *, + acceptContact := *, + acceptEncoding := *, + acceptLanguage := *, + alertInfo := *, + allow := *, + allowEvents := *, // RFC3265 + authenticationInfo := *, + authorization := *, + callId := ?, + callInfo := *, + contact := *, + contentDisposition := *, + contentEncoding := *, + contentLanguage := *, + contentLength := ?, + contentType := *, + cSeq := ?, + date := *, + errorInfo := *, + event := *, // RFC3265 + expires := *, + fromField := ?, + historyInfo := *, // RFC4244 + inReplyTo := *, + maxForwards := ?, + mimeVersion := *, + minExpires := *, + minSE := *, // RFC4028 + organization := *, + pAccessNetworkInfo := *, // RFC3455 + pAssertedID := *, + pAssertedService := *, + pAssociatedURI := *, + path := *, // RFC3327 + pCalledPartyID := *, // RFC3455 + pChargingFunctionAddresses := *, // RFC3455 + pChargingVector := *, // RFC3455 + pEarlyMedia := *, // RFC5009 + pMediaAuthorization := *, // RFC3313 + pPreferredID := *, + priority := *, + privacy := *, + proxyAuthenticate := *, + proxyAuthorization := *, + proxyRequire := *, + pVisitedNetworkID := *, // RFC3455 + rAck := *, + rSeq := *, + reason := *, + recordRoute := *, + referredBy := *, // RFC3892 - REFER method + referTo := *, // RFC3515 - REFER method + replyTo := *, + require := *, + retryAfter := *, + route := *, + securityClient := *, // RFC3329 + securityServer := *, // RFC3329 + securityVerify := *, // RFC3329 + server := *, + serviceRoute := *, // RFC3608 + sessionExpires := *, // RFC4028 + subject := *, + subscriptionState := *, // RFC3265 + supported := *, + timestamp := *, + toField := ?, + unsupported := *, + userAgent := *, + via := ?, + warning := *, + wwwAuthenticate := *, + undefinedHeader_List := * + } + }//end group dummy_parameter_receive + + group dummy_request_templates_send { + + template ACK_Request m_ACK_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template BYE_Request m_BYE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template CANCEL_Request m_CANCEL_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template INVITE_Request m_INVITE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template MESSAGE_Request m_MESSAGE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template NOTIFY_Request m_NOTIFY_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template PRACK_Request m_PRACK_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template PUBLISH_Request m_PUBLISH_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template REGISTER_Request m_REGISTER_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template REFER_Request m_REFER_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template UPDATE_Request m_UPDATE_Dummy := + { + requestLine := m_requestLine_dummy, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + }//end group dummy_request_templates_send + group dummy_request_templates_receive{ + + template ACK_Request mw_ACK_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template BYE_Request mw_BYE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template CANCEL_Request mw_CANCEL_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template INFO_Request mw_INFO_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template INVITE_Request mw_INVITE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template MESSAGE_Request mw_MESSAGE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template NOTIFY_Request mw_NOTIFY_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template PRACK_Request mw_PRACK_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template PUBLISH_Request mw_PUBLISH_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template REFER_Request mw_REFER_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template REGISTER_Request mw_REGISTER_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template UPDATE_Request mw_UPDATE_Dummy := + { + requestLine := mw_requestLine_dummy, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + }//end group dummy_request_templates_receive + + group dummy_response_templates_send{ + + template Response m_Response_Dummy := + { + statusLine := c_statusLine100, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + } // group dummy_response_templates_send + + group dummy_response_templates_receive{ + template Response mw_Response_Dummy := + { + statusLine := ?, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + } // group dummy_response_templates_receive +} + +group base_templates{ + + group request_send { + + + template ACK_Request m_ACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_ACK_Dummy := + { + requestLine := + { + method := ACK_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "ACK"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template BYE_Request m_BYE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via) modifies m_BYE_Dummy := + { + requestLine := + { + method := BYE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template CANCEL_Request m_CANCEL_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via) modifies m_CANCEL_Dummy := + { + requestLine := + { + method := CANCEL_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template INVITE_Request m_INVITE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact) modifies m_INVITE_Dummy := + { + requestLine := + { + method := INVITE_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template MESSAGE_Request m_MESSAGE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_MESSAGE_Dummy := + { + requestLine := + { + method := MESSAGE_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template NOTIFY_Request m_NOTIFY_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_NOTIFY_Dummy := + { + requestLine := + { + method := NOTIFY_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + //contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + //contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "NOTIFY"}, + fromField := p_from, + toField := p_to, + via := p_via + }//, + //messageBody := p_mb + } + + template PRACK_Request m_PRACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, RAck p_RAck) + modifies m_PRACK_Dummy := + { + requestLine := + { + method := PRACK_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PRACK"}, + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := omit + } + + //in reality PUBLISH request contain xml in content + template PUBLISH_Request m_PUBLISH_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, template Event p_event, template RAck p_RAck, template MessageBody p_mb) + modifies m_PUBLISH_Dummy := + { + requestLine := + { + method := PUBLISH_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PUBLISH"}, + event := p_event, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template REFER_Request m_REFER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, Contact p_contact, + From p_from, template To p_to, Via p_via, template ReferTo p_referTo, template ReferredBy p_referredBy) + modifies m_REFER_Dummy := + { + requestLine := + { + method := REFER_E, + requestUri := p_requestUri + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "REFER"}, + fromField := p_from, + referTo := p_referTo, + referredBy := p_referredBy, + toField := p_to, + via := p_via + } + } + + template REGISTER_Request m_REGISTER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization) modifies m_REGISTER_Dummy := + { + requestLine := + { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := + { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + + } + } + + template SUBSCRIBE_Request m_SUBSCRIBE_Request_Base (SipUrl p_requestUri, CallId p_callId, + CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_SUBSCRIBE_Dummy := + { + requestLine := + { + method := SUBSCRIBE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template UPDATE_Request m_UPDATE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, template MessageBody p_mb) modifies m_UPDATE_Dummy := + { + requestLine := + { + method := UPDATE_E, + requestUri := + { + hostPort:= p_requestUri.hostPort + } + }, + msgHeader := + { + callId := p_callId, + contact := p_contact, + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, + cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "UPDATE"}, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + } // end of group message_send + + group request_receive { + + template ACK_Request mw_ACK_Request_Base (template CallId p_callId) modifies mw_ACK_Dummy := + { + requestLine := + { + method := ACK_E + }, + msgHeader := + { + callId := p_callId + } + } + + template BYE_Request mw_BYE_Request_Base(template CallId p_callId) modifies mw_BYE_Dummy := + { + requestLine := + { + method := BYE_E + }, + msgHeader := + { + callId := p_callId + } + } + + template CANCEL_Request mw_CANCEL_Request_Base (template CallId p_callId) modifies mw_CANCEL_Dummy := + { + requestLine := + { + method := CANCEL_E + }, + msgHeader := + { + callId := p_callId + } + } + + template INFO_Request mw_INFO_Request_Base(template CallId p_callId) modifies mw_INFO_Dummy := + { + requestLine := + { + method := INFO_E + }, + msgHeader := + { + callId := p_callId + } + } + + template INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := + { + requestLine := + { + method := INVITE_E + } + } + + template MESSAGE_Request mw_MESSAGE_Request_Base(template CallId p_callId) modifies mw_MESSAGE_Dummy := + { + requestLine := + { + method := MESSAGE_E + }, + msgHeader := + { + callId := p_callId, + contact := omit + } + } + + template NOTIFY_Request mw_NOTIFY_Request_Base (CallId p_callId) modifies mw_NOTIFY_Dummy := + { + requestLine := + { + method := NOTIFY_E + }, + msgHeader := + { + callId := p_callId + } + } + + template PRACK_Request mw_PRACK_Request_Base(template CallId p_callId) modifies mw_PRACK_Dummy := + { + requestLine := + { + method := PRACK_E + }, + msgHeader := + { + callId := p_callId + } + } + + template PUBLISH_Request mw_PUBLISH_Request_Base(template CallId p_callId) modifies mw_PUBLISH_Dummy := + { + requestLine := + { + method := PUBLISH_E + }, + msgHeader := + { + callId := p_callId + } + } + + template REFER_Request mw_REFER_Request_Base (CallId p_callId) modifies mw_REFER_Dummy := + { + requestLine := + { + method := REFER_E + }, + msgHeader := + { + callId := p_callId + } + } + + template REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := + { + requestLine := + { + method := REGISTER_E + } + } + + template SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := + { + requestLine := + { + method := SUBSCRIBE_E + } + } + + template UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := + { + requestLine := + { + method := UPDATE_E + }, + msgHeader := + { + callId := p_callId + } + } + + } // end group request_receive + + group response_send { + + template Response m_Response_Base (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Dummy:= + { + statusLine := p_statusLine, + msgHeader := + { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + + + } // end group response_send + + group response_receive { + + template Response mw_Response_Base (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq) modifies mw_Response_Dummy:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + } // end group message_receive + +} // end group full_templates + +group modified_templates { + +group request_send { + + template ACK_Request m_ACK_Request_route (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Route p_route) + modifies m_ACK_Request_Base + := + { + msgHeader := + { + route := p_route + } + } + + template ACK_Request m_ACK_Request_sdp (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via,template MessageBody p_mb ) + modifies m_ACK_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + + template BYE_Request m_BYE_Request_cause + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via, integer p_cause) + modifies m_BYE_Request_Base + := + { + msgHeader := + { + reason := m_Reason(p_cause) // PIXIT value + } + } + + template INVITE_Request m_INVITE_Request_sdp + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, + Via p_via, Contact p_contact, template MessageBody p_mb) + modifies m_INVITE_Request_Base + := + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + + template REGISTER_Request m_REGISTER_Request_expires + (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, Contact p_contact, + template Authorization p_authorization, charstring p_expires) + modifies m_REGISTER_Request_Base + := + { + msgHeader := + { + authorization := p_authorization, + expires := { + fieldName := EXPIRES_E, + deltaSec := p_expires } + } + } + + + + +} // end group request_send + + +group request_receive { + + template BYE_Request mw_BYE_Request_Reason(template CallId p_callId, integer p_cause) modifies mw_BYE_Request_Base := + { + msgHeader := + { + reason := mw_Reason(p_cause) + } + } + + template INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base + := + { + msgHeader := {expires := ?} + } + + template INVITE_Request mw_INVITE_Request_callid(CallId p_callid) modifies mw_INVITE_Request_Base + := + { + msgHeader := {callId := p_callid} + } + + template INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo (template CallId p_callId) + modifies mw_INVITE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := omit} + } + template INVITE_Request mw_INVITE_Request_PaccessNetworkInfo (template CallId p_callId) + modifies mw_INVITE_Request_Base + := + { + msgHeader := { pAccessNetworkInfo := ?} + } + + template REGISTER_Request mw_REGISTER_Request_ISC (template PAccessNetworkInfo p_access , template PVisitedNetworkID p_visited )modifies mw_REGISTER_Request_Base := + { + msgHeader := { + pAccessNetworkInfo := p_access, + pVisitedNetworkID := p_visited + } + + } + + + +} // end group request_receive + +group response_send { + + template Response m_Response_ext (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via) modifies m_Response_Base:= + { + msgHeader :={ + route := f_route(), + recordRoute := f_recordroute() + } + } + template Response m_Response_mbody (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, + From p_from, To p_to, Via p_via, MessageBody p_mb) modifies m_Response_ext:= + { + msgHeader := + { + contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, + contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} + }, + messageBody := p_mb + } + +} // end group response_send + + +group response_receive { + + template Response mw_Response_Expires (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template DeltaSec p_deltaSec) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec} + } + } + + template Response mw_Response_Reason (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, integer p_cause) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + reason := mw_Reason(p_cause) + } + } + + template Response mw_Response_RecordRoute (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template RecordRoute p_recordRoute) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + recordRoute := p_recordRoute + } + } + + template Response mw_Response_Via (template StatusLine p_statusLine, template CallId p_callId, + template CSeq p_cSeq, template Via p_via) modifies mw_Response_Base:= + { + statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, + msgHeader := + { + via := p_via + } + } + +} // end group response_receive + + +} // end group modified_templates + +} // end group MessageTemplates + +group SDP_Templates { + + group SDP_Messages { + + group base_templates { + + template SDP_Message m_SDP(SDP_media_desc p_media, in SipUserProfile p_userprofile) := { + protocol_version := 0, // v=0 + origin := { + user_name := "voicesession", + session_id := "30000", + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := p_userprofile.contactIpaddr }, + // o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", // s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } + }, //c=IN IP4 172.27.1.219 + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := {p_media} + }; + + template SDP_Message m_SDP_mediaList(SDP_media_desc_list p_media_list, in SipUserProfile p_userprofile) + := { + protocol_version := 0, // v=0 + origin := { + user_name := "voicesession", + session_id := "30000", + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := p_userprofile.contactIpaddr }, + // o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", // s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } + }, //c=IN IP4 172.27.1.219 + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := p_media_list + }; + + template SDP_Message m_SDP_media_attr_preconditions(SDP_media_desc p_media, in SipUserProfile p_userprofile, SDP_attribute_list p_atribute_list) + modifies m_SDP + := { + media_list := { + { + media_field := { + media := c_audio, + ports := { port_number := 8500, num_of_ports:=omit }, + transport := c_rtpAvp, + fmts := { "0" } + }, //m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := p_atribute_list + }} + } + + template SDP_Message mw_SDP := { + protocol_version := 0, // v=0 + origin := ?, + session_name := ?, + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := ?, + bandwidth := omit, + times := { { time_field := { "0", "0" }, time_repeat:=omit + } + }, // t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := ? + }; + + + }//end group base_templates + + group modified_templates{ + template SDP_Message m_SDP_bandwidth(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + + template SDP_Message m_SDP_unacceptable(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + protocol_version := 1, // v=1 unacceptable version of SDP + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + + template SDP_Message m_SDP_encrypted(SDP_media_desc p_media, in SipUserProfile p_userprofile) + modifies m_SDP + := { + protocol_version := 1, // v=1 unacceptable version of SDP + bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} + }; + }//end group modified_templates + + } // end group SDP_Messages + + group SDP_Fields { + + template SDP_media_desc m_media(template SDP_media_field p_mf) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + }; + + template SDP_media_desc m_mediaFieldBandwdthAtributes(template SDP_media_field p_mf, template SDP_bandwidth p_bw, template SDP_attribute_list p_attributes) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := p_bw, + key := omit, + attributes := p_attributes + }; + + template SDP_media_desc m_media_dynPT(charstring p_PT, charstring p_encod) := { + media_field := { + media := c_audio,//"audio", + ports := { port_number := 8500, num_of_ports:=omit }, + transport := c_rtpAvp,//"RTP/AVP", + fmts := { p_PT } + }, //m=audio 8500 RTP/AVP 8 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := { { rtpmap := { attr_value := p_PT & " " & p_encod } + } + } //a=rtpmap:8 PCMA/8000 + }; + + template SDP_media_desc m_media_unsupported := { + media_field := { + media := "video", + ports := { port_number := 11500, num_of_ports:=omit }, + transport := "RTP/AVP", + fmts := { "99" } + }, //m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := { { + rtpmap := { attr_value := "99 X-Experimental/180000"} + }} + }; + + template SDP_bandwidth m_bandwidth(template charstring loc_m, template integer loc_b) := { + modifier:=loc_m, + bandwidth:=loc_b + }; + + template SDP_bandwidth m_bandwidth_as_64:= + { + modifier:="AS", + bandwidth:=64 + } + + template SDP_bandwidth mw_bandwidth_rs:= + { + modifier:="RS", + bandwidth:=? + } + + template SDP_bandwidth mw_bandwidth_rr:= + { + modifier:="RR", + bandwidth:=? + } + + template SDP_media_field m_media_field(charstring p_media, integer p_portNum, charstring p_transport, charstring p_fmts) := + { + media := p_media, + ports := { port_number := p_portNum, num_of_ports:=omit }, + transport := p_transport, + fmts := { p_fmts } + } + + template SDP_media_field mw_media_PCMU := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { "0" } + } + + template SDP_media_field mw_media_PCMA := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { "8" } + } + + template SDP_media_field mw_media_PCMA_U_DPT := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { * } + } + + template SDP_media_field mw_media_T38 := + { + media := c_image, + ports := { port_number := ?, num_of_ports:=* }, + transport := pattern "*ptl", //udptl,tcptl + fmts := { "t38" } + } + + template SDP_media_field mw_media_G722 := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := "RTP/AVP", + fmts := { "9" } + } + + template SDP_media_field mw_media_AMR_DPT := + { + media := c_audio, + ports := { port_number := ?, num_of_ports:=* }, + transport := c_rtpAvp, + fmts := { * } + } + + + template SDP_attribute m_attribute_sendonly := {sendonly:={}}; + template SDP_attribute mw_attribute_sendonly := {sendonly:=*}; + template SDP_attribute m_attribute_recvonly := {recvonly:={}}; + template SDP_attribute mw_attribute_recvonly := {recvonly:=*}; + template SDP_attribute m_attribute_sendrecv := {sendrecv:={}}; + template SDP_attribute mw_attribute_sendrecv := {sendrecv:=*}; + template SDP_attribute m_attribute_inactive := {inactive:={}}; + template SDP_attribute mw_attribute_inactive := {inactive:=*}; + template SDP_attribute m_attribute_AMR_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " AMR" }}; + template SDP_attribute m_attribute_CLEARMODE_DPT := {rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " CLEARMODE/8000" }}; + template SDP_attribute m_attribute_G722 := { rtpmap := { attr_value := "9 G722/8000" }}; + template SDP_attribute m_attribute_PCMU := { rtpmap := { attr_value := "0 PCMU/8000" }}; + template SDP_attribute m_attribute_PCMU_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMU/8000" }}; + template SDP_attribute m_attribute_PCMA := { rtpmap := { attr_value := "8 PCMA/8000" }}; + template SDP_attribute m_attribute_PCMA_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMA/8000" }}; + template SDP_attribute m_attribute_T38 := { unknown := { name:=?, attr_value := pattern "*t38*" }}; + + template SDP_attribute m_attribute_curr (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= + { + curr:={preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction} + }; + template SDP_attribute m_attribute_des (charstring p_preconditionType, charstring p_strength, charstring p_statusType, charstring p_direction):= + { + des:={preconditionType := p_preconditionType, + strength := p_strength, + statusType := p_statusType, + direction := p_direction} + }; + template SDP_attribute m_attribute_conf (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= + { + conf:={preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction} + }; + + } // end group SDP_Fields + +} // end group SDP_Templates + +group MessageBodies { + + template MessageBody m_MBody_SDP(template SDP_Message p_SDP):= + { + sdpMessageBody := p_SDP + }; + + template MessageBody m_MBody_XML(template XmlBody p_xmlBody):= + { + xmlBody := p_xmlBody + }; + + template MessageBody m_MBody_longPlainText:= + { + textplain := c_longMessageContent_1300Bytes + }; + + template MessageBody m_mBody_plainText(charstring p_plaitext):= + { + textplain := p_plaitext + }; + + template MessageBody m_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= + { + mimeMessageBody := {boundary:="PX_SIP_MIME_Boundary", + mimeEncapsulatedList:= { + {content_type:="PX_SIP_SDP_ContentType", + content_disposition:=omit, + mime_encapsulated_part:={sdpMessageBody := p_sdp}}, + {content_type:="PX_SIP_ISUP_ContentType", + content_disposition:=omit, + mime_encapsulated_part:={xmlBody := p_xmlBody}} + } + } + } + + template MessageBody mw_MBody_SDP(template SDP_Message p_SDP):= + { + sdpMessageBody := p_SDP + }; + + template MessageBody mw_MBody_XML(template XmlBody p_xmlBody):= + { + xmlBody := p_xmlBody + }; + + template MessageBody mw_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= + { + mimeMessageBody := {boundary:=?, + mimeEncapsulatedList:= { + {content_type:=?, + content_disposition:=*, + mime_encapsulated_part:={sdpMessageBody := p_sdp}}, + {content_type:=?, + content_disposition:=*, + mime_encapsulated_part:={xmlBody := p_xmlBody}} + } + } + } +} +/* + * + * @desc group TemplatePreparationFunctions contain functions which are used for templates + */ +group TemplatePreparationFunctions { + + group SDPlen_calculation { + /** + * + * @desc Calculation of SDP length + * @param p_mb contain sdp message + * @return sdp_lenght + */ + function f_SDPlength(SDP_Message p_mb) return integer + { + var integer v_result:=2; // due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2+c_CRlen + lengthof(int2str(p_mb.protocol_version)); // "v=" + v_result := v_result + 2+c_CRlen + lengthof(p_mb.origin.user_name & " " & + p_mb.origin.session_id & " " & + p_mb.origin.session_version & " " & + p_mb.origin.net_type & " " & + p_mb.origin.addr_type & " " & + p_mb.origin.addr + ); // "o=" + v_result := v_result + 2+c_CRlen + lengthof(p_mb.session_name); // "s=" + if (ispresent(p_mb.information)) + {v_auxstring:=p_mb.information; v_result := v_result + 2+c_CRlen + lengthof(v_auxstring);}; // "i= " + if (ispresent(p_mb.uri)) + {v_auxstring:=p_mb.uri; v_result := v_result + 2+c_CRlen + lengthof(v_auxstring);}; // "u=" + + if (ispresent(p_mb.emails)) { + for (var integer i:=0; i 3600)) // received expires value should be higher than in 200OK - {setverdict(fail)}; - - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_REG_14_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_14_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_14_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //await subscribe from UE - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_SCSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_14_IMSS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_15_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_15_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_Registration_IMS(vc_cSeq,true); - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of UE in home - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE2); - f_Registration_IMS(vc_cSeq,true); - - // await NOTIFY (network initiated deregistration) - f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_15_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_16_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_16_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization_digest({c_Integrity_protected_no}))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_16_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_17_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_17_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_callId1; - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_Registration_IMS(vc_cSeq,false); - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - v_callId1 := vc_callId; - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of UE in home - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE2); - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization(f_calculatecCredentials_empty(vc_userprofile)))); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - // await NOTIFY (network initiated deregistration) - f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(v_callId1)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_17_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_18_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_18_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - //f_Registration_IMS(vc_cSeq,false); - - - //f_setHeaders_REGISTER_IMSVisited(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));//m_Authorization_digest({c_Integrity_protected_yes}))); //LibSip - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}) - - //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER - - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - - f_awaitingResponse(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)); - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq,mw_pChargingVector("term-ioi",?))); - - //f_setHeaders_SUBSCRIBE(p_cSeq_s); - //f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of the UE in home - f_setHeaders_2ndREGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization(f_calculatecCredentials_empty(vc_userprofile)))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_18_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_19_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_19_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - //f_Registration_IMS(vc_cSeq,false); - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}) - - //awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER - - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - - f_awaitingResponse(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)); - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); //for security association: m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}) - - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq,mw_pChargingVector("term-ioi",?))); - - - //f_setHeaders_SUBSCRIBE(p_cSeq_s); - //f_Subscription(vc_cSeq, m_SUBSCRIBE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //another registration of the UE in home - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, omit)); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingOkResponse(vc_cSeq); - f_getServiceRouteMapIntoRouteInRegistration(vc_cSeq, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_19_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_20_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_20_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - vc_contact.contactBody.contactAddresses[0].contactParams:=omit; - f_SendREGISTER(m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization,int2str(360/*PX_SIP_REGISTRATION_exp_min-1*/))); //LibSip - - f_awaitingResponse(mw_Response_Expires(c_statusLine423, vc_callId, p_cSeq_s, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_20_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_21_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_21_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - f_setHeaders_REGISTER(p_cSeq_s); - //f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, m_Authorization_digest({c_Integrity_protected_no}))); //LibSip - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_21_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_22_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_22_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 200 OK REGISTER - f_awaitingResponse(mw_Response_200onREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, f_initSipUrl(c_userProfile_PCSCFwithVisitingUE), vc_contact, f_initSipUrl(c_interfaceProfile_IMS_SUT_SCSCF))); - f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_22_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_23_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_23_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_callId; - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - v_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s)}; - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, v_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 403 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine403,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_23_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_24_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_24_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes,{"auts","invalid SQN"}}))); //LibSip - - // awaiting 401 or 403 response - f_awaitingResponse(mw_Response_PchargingVector(mw_statusLine((401,403)),vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_24_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_25_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_25_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var SipUrl v_sipUrl_To; - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, m_To(v_sipUrl_To), vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip - - // awaiting 500 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine500,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_25_IMS - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_REG_26_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_REG_26_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - // Request-Uri refers to home network (SUT) - // UE1 registers its public sip-url in home network (SUT) - // UE contact is in visited network (TS) - // UE authorizaton data is in home network (SUT) - LibSip_Steps.f_init_component(p_cSeq_s); - - LibIms_Steps.f_init_userprofile(c_userProfile_PCSCFwithVisitingUE); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - // registration of UE (visiting IMS) in home (SUT) - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip - f_awaitingResponse(mw_Response_401onREGISTER_WWWauthenticate_IMS(c_statusLine401, vc_callId, p_cSeq_s, mw_wwwAuthenticate(mw_semicolonParams_realm(PX_IMS_SUT_SCSCF_REALM)))); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //protected registration of UE in home (unknown CallID) - - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER_wo_response(); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes,{"auts","no error indicator"}}))); //LibSip - - // awaiting 403 response - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine403,vc_callId, vc_cSeq,mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_REG_26_IMS - -} // end group Registration - - group InitialRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUTvisiting, p_cSeq_s, v_register); - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_IMSI(in CSeq p_cSeq_s) runs on ImsComponent { - - var float v_expires; - timer t_subscribtion; - var template SipUrl v_sipUrl_From, v_sipUrl_To; - var boolean v_refresh_subscribe_received; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //Awaiting UE1 registration - f_awaitingRegistration_IMS(vc_cSeq); - - // preparation of from and to headers - v_sipUrl_From := f_initSipUrl(c_interfaceProfile_IMS_SUT_PCSCF1); - v_sipUrl_From.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - v_sipUrl_To.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - - // await SUBSCRIBE from P-CSCF - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), m_PAssertedID(m_AddrUnion_NameAddr(vc_request.msgHeader.path.pathValues[0].nameAddr)), mw_pChargingVector("icid-value",?))); - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - v_expires := str2float(vc_request.msgHeader.expires.deltaSec); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - - if (not(v_expires > 1200.0)) // received expires value should be higher than 1200 - {setverdict(inconc)}; - - // TESTBODY - v_refresh_subscribe_received:=false; - // await subscribtion refresh - t_subscribtion.start(v_expires-600.0); - alt - { - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - [] SIPP.receive(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *))-> value vc_request sender vc_sent_label - { - t_subscribtion.stop; - f_setHeadersOnReceiptOfSUBSCRIBE(vc_request); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - v_refresh_subscribe_received:=true; - } - [] t_subscribtion.timeout{ - //setverdict(inconc); - } - } - - // await subscribtion refresh - in case that wait timer expires before refresh, wait default receive time - PX_SIP_TWAIT - if(not (v_refresh_subscribe_received)){ - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_INI_01_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_01_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //await subscribe from UE - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - //Send NOTIFY - LibIms_Steps.f_setHeadersNOTIFY(p_cSeq_s, c_userProfile_SCSCFwithHomeUE); - f_SendNOTIFY(m_NOTIFY_Request_contact(vc_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_01_IMSS - - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUTvisiting, p_cSeq_s, v_register); - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_02_IMSI - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_IMSI(in CSeq p_cSeq_s) runs on ImsComponent { - - var float v_expires; - timer t_subscribtion; - var template SipUrl v_sipUrl_From, v_sipUrl_To; - var boolean v_refresh_subscribe_received; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - //Awaiting UE1 registration - f_awaitingRegistration_IMS(vc_cSeq); - - // preparation of from and to headers - v_sipUrl_From := f_initSipUrl(c_interfaceProfile_IMS_SUT_PCSCF1); - v_sipUrl_From.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - v_sipUrl_To := f_initSipUrl(c_userProfile_ICSCFwithHomeUE); - v_sipUrl_To.userInfo := *;//{userOrTelephoneSubscriber:=*, password:=*}; - - // await SUBSCRIBE from P-CSCF - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), m_PAssertedID(m_AddrUnion_NameAddr(vc_request.msgHeader.path.pathValues[0].nameAddr)), mw_pChargingVector("icid-value",?))); - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - v_expires := str2float(vc_request.msgHeader.expires.deltaSec); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - - if (not(v_expires <= 1200.0)) // received expires value should not be higher than 1200 - {setverdict(inconc)} - // TESTBODY - else{ - v_refresh_subscribe_received:=false; - // await subscribtion refresh - t_subscribtion.start(v_expires * 0.50); - alt - { - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - [] SIPP.receive(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *))-> value vc_request sender vc_sent_label - { - t_subscribtion.stop; - f_setHeadersOnReceiptOfSUBSCRIBE(vc_request); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - v_refresh_subscribe_received:=true; - } - [] t_subscribtion.timeout{ - //setverdict(inconc); - } - } - - // await subscribtion refresh - in case that wait timer expires before refresh, wait default receive time - PX_SIP_TWAIT - if(not (v_refresh_subscribe_received)){ - f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_IMS(mw_From(v_sipUrl_From), mw_To(v_sipUrl_To), *, *)); - f_sendResponse(m_Response_2xxonSUBSCRIBE_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact)); - } - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_awaitDeRegistration (); - - } // end function f_TC_IMST2_MW_INI_02_IMSI - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_02_IMSS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_02_IMSS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_01_IMSS(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_02_IMSS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, v_notMatchingRoute, omit, m_MBody_SDP(vc_sdp_local))); - - - //await response - 400 or 100 ... - if (PC_PCSCF_handle_initial_request_with_mismatching_Route_header) - { - - f_awaitingResponseSendACK(mw_Response_Base(c_statusLine400,vc_callId, vc_cSeq)); - // send ACK - //LibSip_Steps.f_setHeadersACK(); - //f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)); - //send CANCEL of REQUEST - LibIms_Steps.f_setHeadersCANCEL(vc_cSeq,c_userProfile_ICSCFwithHomeUE); - f_SendCANCEL(m_CANCEL_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, v_notMatchingRoute)); - f_awaitingOkResponse(p_cSeq_s); - // await response - 487 - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - if (not PC_PCSCF_handle_initial_request_with_mismatching_Route_header) { - // await INVITE UE1@SUT - - f_awaitingINVITE(mw_INVITE_Request_route(mw_route({mw_routeBody(f_initSipUrl(c_interfaceProfile_IMS_SUT_SCSCF))}))); // route header from 200OK-serviceroute to UE1 - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - if (not PC_PCSCF_handle_initial_request_with_mismatching_Route_header) { - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - } - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_IMS( - mw_pChargingVector("icid-value",?), - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - mw_route({mw_routeBody(f_initSipUrl(c_userProfile_SCSCFwithHomeUE))}), - mw_Via(mw_ViaBody_interface(f_get_interfaceHostPort(vc_interfaceprofile))) // interfaceProfile_IMS_SUT_PCSCF - )); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_PAsserted_noPPreferred(m_PAssertedID(mw_UE1_Addr_display))); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - //TODO check for Record Route header when sec. association will be known - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 180 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - //TODO check for Record Route header when sec. association will be known - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send BYE await response - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with PPreferred header - f_sendResponse(m_Response_18XonINVITE_pPreferred_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact,f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // TESTBODY - - //await response - 180 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine180,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2XXonINVITE_pPreferred_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))), - vc_recordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_09_UE1 - - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // TESTBODY - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_09_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - timer t; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with not matching via header - f_sendResponse(m_Response_18XonINVITE_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - t.start(1.0); - alt{ - []t.timeout; - } - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - //await response - 180 - f_awaitingResponse(mw_Response_Via(c_statusLine180,vc_callId, vc_cSeq, vc_via)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_awaitingResponse(mw_Response_Base(c_statusLine480, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_10_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_11_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_11_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - timer t; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact, - vc_recordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - } - else - { - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - t.start(1.0); - alt{ - []t.timeout; - } - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_11_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_11_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_11_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - timer t; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - t.start(5.0); - alt{ - []t.timeout; - } - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header) { - //await response - 200 - f_awaitingResponse(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - } - // POSTAMBLE - - else - { - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - f_awaitingResponse(mw_Response_Base(c_statusLine480, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - - vc_boo_route := true; - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } - - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_11_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_12_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_12_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var RecordRoute v_notMatchingRecordRoute := valueof(m_recordRoute_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 180 with not matching via header - f_sendResponse(m_Response_18XonINVITE_recordRoute_UE(c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, v_notMatchingRecordRoute)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_12_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_12_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_12_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - //await response - 180 - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - //180 - check of parameters - if ((not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,0),f_get_interfaceHostPort(vc_interfaceprofile)) - or not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,1),f_get_interfaceHostPort(vc_interfaceprofile)))) // IUT_PCSCF - {setverdict(fail)}; - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_12_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_13_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_13_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var RecordRoute v_notMatchingRecordRoute := valueof(m_recordRoute_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 with PPreferred header - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, - v_notMatchingRecordRoute, valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_13_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_13_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_13_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - //await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - //200 - check of parameters - if ((not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,0),f_get_interfaceHostPort(vc_interfaceprofile)) - or not match(f_getRecordRouteHeaderElementAddressFromResponse(vc_response,1),f_get_interfaceHostPort(vc_interfaceprofile)))) // IUT_PCSCF - {setverdict(fail)}; - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - if (PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header) { - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } else { - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - } - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_13_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_14_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_14_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE from UE@TS - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 480 with not matching via header - f_sendResponse(m_Response_4XXonINVITE_UE(c_statusLine480, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - if (PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - //await CANCEL procedure - f_awaitingCANCEL(mw_CANCEL_Request_Base(vc_callId)); - f_send200OK(); -// vc_cSeq.method := "INVITE"; -// f_sendResponse(m_Response_4XXonINVITE_UE(c_statusLine487, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit)); -// // await ACK -// f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } else - { - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - } - - - - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_14_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_14_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_14_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CSeq v_cseq_invite; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - v_cseq_invite := vc_cSeq; // store CSeq for postamble - - // TESTBODY - - if (not PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - //await response - 480 - f_awaitingResponse(mw_Response_Via(c_statusLine480,vc_callId, vc_cSeq, vc_via)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - if (PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header) { - // send CANCEL await 200 on CANCEL and 487 on INV - f_cancelCall(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, v_cseq_invite)); // on INVITE - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } else { - //send ACK for 4xx reponse - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - } - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_14_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_15_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_15_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - //Send INVITE without Session expires header field - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_15_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_15_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_15_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_15_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_16_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_16_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - //Send INVITE without Session expires header and with Min-SE header field - f_SendINVITE(m_INVITE_Request_minSE_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), m_minSE(PX_IMS_SUT_PCSCF_MinSE))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - f_awaitingResponse(?); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_16_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_16_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_16_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - if (str2int(vc_response.msgHeader.sessionExpires.deltaSec) < str2int(PX_IMS_SUT_PCSCF_MinSE)) - { setverdict (fail);} - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_16_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_18_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_18_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send 480 to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_18_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for f_TC_IMST2_MW_INI_18_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_18_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_18_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_19_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_19_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_SessionExpires(mw_se)); - if(ispresent(vc_response.msgHeader.sessionExpires.deltaSec)) { - if (str2int(vc_response.msgHeader.sessionExpires.deltaSec) < str2int(PX_IMS_SUT_PCSCF_MinSE)) - { setverdict (fail);} - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send 480 to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_19_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for f_TC_IMST2_MW_INI_19_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_19_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_minSE_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)), m_minSE(PX_IMS_SUT_PCSCF_MinSE))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_19_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_20_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_20_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // any response to complete the request - f_sendResponse(m_Response_Base(c_statusLine480,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE2_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_20_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_20_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_20_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - f_awaitingResponse(mw_Response_Base(c_statusLine100,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 480 - f_awaitingResponse(mw_Response_Base(c_statusLine480,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_20_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_21_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_21_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_200onINVITE_noPChargingVector_UE(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send BYE await response - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_21_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_INI_21_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_21_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE_PchargingVector(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_route, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)), vc_contact, m_pChargingVector_termIoi_fixedValue(vc_userprofile.homeDomain))); - //f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq, m_pChargingVector_termIoi_fixedValue(vc_userprofile.homeDomain))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_INI_21_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_22_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_22_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - -// v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting -// f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY is empty, only registration of UE1 to IUT is necessary - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - // send REGISTER, await 401, send REGISTER, await 200 OK -// f_RemoveRegistration(vc_cSeq); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_22_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_22_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_22_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var UserInfo v_barredUserInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_BARRED_PUBLIC_USER, password:=omit}; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - vc_requestUri.userInfo := v_barredUserInfo; - vc_to.addressField.nameAddr.addrSpec.userInfo := v_barredUserInfo; - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 404 - f_awaitingResponse(mw_Response_Base(c_statusLine404,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(/*m_ACK_Request_Base*/m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via,vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_22_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_23_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_23_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_23_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_23_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_23_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - vc_requestUri.userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_INVALID_GRUU, password:=omit}; - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 4xx - f_awaitingResponse(mw_Response_Base((mw_statusLine4xx),vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_23_IMS - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_24_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_24_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_24_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_24_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_24_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_PAssertedService_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)), m_pAssertedService(PX_IMS_SUT_UNSUBSCRIBED_SERVICE))); - - //await response - 403 - f_awaitingResponse(mw_Response_Base(c_statusLine403,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_24_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_INI_25_UE1 - * @param loc_CSeq_s - */ - function f_TC_IMST2_MW_INI_25_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_INI_25_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for f_TC_IMST2_MW_INI_25_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_INI_25_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - // TESTBODY - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_mBody_plainText("PX_IMS_SUT_UNSUBSCRIBED_SDP_SERVICE")))); - - //await response - 403 - f_awaitingResponse(mw_Response_Base(c_statusLine403,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_INI_25_IMS - - } // end group InitialRequest - - group StandaloneRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_NoBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, v_notMatchingRoute, omit)); - - - //await response - 400 or 100 ... - if (PC_PCSCF_handle_standalone_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base(c_statusLine400,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else{ //if UE2 receive MESSAGE we wait for 200 Ok - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE_sendReply_PassOnTimeout(mw_MESSAGE_Request_Base); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(PX_IMS_SUT_UE1_DISPLAY/*vc_userprofile.publUsername*/, m_SipUrl_currDomain(vc_userprofile))))); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_PAsserted_noPPreferred(vc_callId, m_PAssertedID(mw_UE1_Addr_display))); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //prepare and send MESSAGE to UE@TS - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendMESSAGE(m_MESSAGE_Request_NoBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit)); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_PchargingVector("icid-value",?)); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_STA_03_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_STA_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_STA_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //Awaiting MESSAGE - f_awaitingMESSAGE(mw_MESSAGE_Request_Base); - // Answer to the MESSAGE - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE); - // TODO check for Via header when sec. association will be known - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - // await response - 200 OK ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - // await response - 200 OK ... - f_awaitingResponsePassOnTimeout(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_STA_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - //receive MESSAGE from UE@TS - f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE); - - //send response - 200 OK with PPreferred header - f_sendResponse(m_Response_2xxonMESSAGE_pPreferredID_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_STA_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_STA_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send MESSAGE UE1_SUThome - LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_STA_07_IMS - - } // end group StandaloneRequest - - group SubsequentRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var CallId v_orig_callId; - var CSeq v_CSeq; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request with wrong Call-ID - v_orig_callId := vc_callId; - - vc_callId.callid:=f_getRndCallId(p_cSeq_s); - v_CSeq := vc_cSeq; - v_CSeq.seqNumber := p_cSeq_s.seqNumber + 10; - v_CSeq.method := "BYE"; - - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, v_CSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 403 ... - f_awaitingResponse(mw_Response_Base(c_statusLine403, ?, vc_cSeq)); - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, v_orig_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_SUB_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request not matching Route header - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, v_notMatchingRoute)); - - //await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_via_PChargingVector_UE(vc_callId,*, vc_via)); - - f_SIP_postamble_IMS1_withoutRegistration (); - - } // end function f_TC_IMST2_MW_SUB_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - // await SUBSCRIBE - - //UE2 has established a SUBSCRIBE dialog with UE1 - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - //f_sendResponse(m_Response_2xxonSUBSCRIBE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); - - //send PUBLISH - LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendPUBLISH(m_PUBLISH_Request_UE(vc_requestUri, vc_callId, vc_cSeq, - vc_from, vc_to, vc_via, m_Event_presence, omit, m_mBody_plainText("I'M PRESENT!"),vc_route_REG)); - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await PUBLISH - f_awaitingPUBLISH_sendReply(mw_PUBLISH_Request_PchargingVector(vc_callId,mw_pChargingVector(c_icid,?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - // POSTAMBLE - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SUB_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_orig_callId; - var CSeq v_CSeq; - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request with wrong Call-ID - v_orig_callId := vc_callId; - - vc_callId.callid:=f_getRndCallId(p_cSeq_s); - v_CSeq := vc_cSeq; - v_CSeq.seqNumber := p_cSeq_s.seqNumber + 10; - v_CSeq.method := "BYE"; - - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, v_CSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 403 ... - f_awaitingResponse(mw_Response_Base(c_statusLine403, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - // send original BYE await response to clean the session - f_terminateCall_IMS(vc_requestUri, v_orig_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_headerfieldlist(vc_callId,?,vc_to,vc_from,?,*,f_recordroute(),*)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - var CallId v_orig_callId; - var CSeq v_CSeq; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request not matching Route header - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq/*v_CSeq*/, vc_from, vc_to, vc_via, v_notMatchingRoute)); - - //await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - // await SUBSCRIBE - - //UE2 has established a SUBSCRIBE dialog with UE1 - //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base); - //f_sendResponse(m_Response_2xxonSUBSCRIBE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); - - //await PUBLISH with P-Charging-Vector header and send reply - f_awaitingPUBLISH_sendReply(mw_PUBLISH_Request_PchargingVector(vc_callId, mw_pChargingVector("orig-ioi",?))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - //send PUBLISH - LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; - f_SendPUBLISH(m_PUBLISH_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, - vc_from, vc_to, vc_via, m_Event_presence, omit, m_mBody_plainText("I'M PRESENT!"),vc_route,vc_recordRoute, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain))); - - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - // POSTAMBLE - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SUB_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1); - - //TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_via_PChargingVector_UE( - vc_callId, - mw_pChargingVector(complement("icid-value"),?) ifpresent, - mw_Via(mw_ViaBody_interface(mw_hostPort((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN), *)) - ) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 200 - f_awaitingResponse(mw_Response_Base(c_statusLine200, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE - f_awaitingBYE(mw_BYE_Request_Base(vc_callId)); - - // send response - 200 OK with not matching Via header - f_sendResponse(m_Response_2xxonBYE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SUB_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // prepare and send INVITE UE1 - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 200 OK ... - f_awaitingResponsePassOnTimeout(mw_Response_Via(c_statusLine200,vc_callId, vc_cSeq, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK (if alternative b) - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - // Sending of a BYE request - LibSip_Steps.f_setHeadersBYE(vc_cSeq); - f_SendBYE(m_BYE_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - // await response - 481 - f_awaitingResponse(mw_Response_Base(c_statusLine481, ?, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_09_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_SUB_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - timer t_regExpires; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict()); - - // registration timer expires - t_regExpires.start(3598.0); - alt - { - [] SIPP.receive(?) - { - t_regExpires.stop; - setverdict(fail); - - } - [] t_regExpires.timeout{ - //setverdict(inconc); - } - } - - // await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SUB_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_SUB_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SUB_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - - timer t_regExpires; - - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); - - // Testbody - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict()); - - // registration timer expires - t_regExpires.start(3598.0); - alt - { - [] SIPP.receive(?) - { - t_regExpires.stop; - setverdict(fail); - - } - [] t_regExpires.timeout{ - //setverdict(inconc); - } - } - - //await BYE and send 200OK TODO parameter expectations - f_awaitingBYE_sendReply(mw_BYE_Request_headerfieldlist(vc_callId,?,?,?,?,*,?,?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); - //Postamble - - f_SIP_postamble_IMS1_withoutRegistration (); - } // end function f_TC_IMST2_MW_SUB_10_IMS - - } // end group SubsequentRequest - - group TargetRefreshRequest { - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - - //Target refresh request - f_setHeadersGeneral(vc_cSeq, "UPDATE"); - f_SendUPDATE(m_UPDATE_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, m_MBody_SDP(vc_sdp_local))); - - // awaiting 403 response - f_awaitingResponse(mw_Response_Base(c_statusLine403, vc_callId, p_cSeq_s)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - f_awaitingNonePassOnTimeout(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_01_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Route v_notMatchingRoute := valueof(m_route_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, v_notMatchingRoute, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingResponse(mw_Response_Base((c_statusLine400),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - } - else - { - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - - // await response - 200 or 400 ... - if (PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header) - { - f_awaitingINVITE_PassOnTimeout(mw_INVITE_Request_Base); - } - else - { - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - f_send200OK(); - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_02_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_IMS( - ?, - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - *, - * - )); - f_send200OK(); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_03_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 200 - f_awaitingResponse(mw_Response_RecordRoute((c_statusLine200), - vc_callId, - vc_cSeq, - mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await REINVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_04_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1); - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE UE@TS - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_ICSCFwithHomeUE); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local))); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // await reINVITE with Via and Record-Route - f_awaitingINVITE(mw_INVITE_Request_RecordRoute_Via(mw_recordroute(mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))), - mw_Via(mw_ViaBody_interface(mw_hostPort((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN), *))) - )); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send response - 200 - f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, f_route(), f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // Sending of a BYE request - f_SendBYE(m_BYE_Request_UE(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT S-CSCF) for TC_IMST2_MW_TAR_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_ICSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // await INVITE UE1@SUT - f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - //send response - 200 - f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - // Send reINVITE - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_05_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - //f_awaitingACK(mw_ACK_Request_Base(vc_callId)); do we need to wait, due to mismatcihng VIA in 200 OK - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_06_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 200 OK - f_sendResponse(m_Response_Base(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_PchargingVector(c_statusLine200,vc_callId, vc_cSeq, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_07_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - var Via v_notMatchingVia := valueof(m_via_notmatching); - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 403 - f_sendResponse(m_Response_Base(c_statusLine403,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, v_notMatchingVia)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - //f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponsePassOnTimeout(mw_Response_Via(mw_statusLine4xx, vc_callId, p_cSeq_s, vc_via)); -// if (vc_boo_response){ -// //send ACK -// LibSip_Steps.f_setHeadersACK(); -// f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); -// } - - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_08_IMS - - /* - * @desc This is the test case function for f_TC_IMST2_MW_TAR_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - // TODO security association - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via, vc_contact, f_recordroute(), valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send response - 403 - f_sendResponse(m_Response_Base(c_statusLine403,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply_PassOnTimeout(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_TAR_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_TAR_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_TAR_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 200 - f_awaitingResponse(mw_Response_PpreferredID_PassertedID(c_statusLine200,vc_callId, vc_cSeq, omit,m_PAssertedID(mw_UE1_Addr_display))); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, vc_recordRoute, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingResponse(mw_Response_RecordRoute(mw_statusLine4xx, vc_callId, p_cSeq_s, mw_recordroute( mw_routeBody(mw_SipUrl_Host((PX_IMS_SUT_PCSCF1_IPADDR,PX_IMS_SUT_PCSCF1_HOME_DOMAIN)))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - //send BYE and await 200OK - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_TAR_09_IMS - - } // end group TargetRefreshRequest - - group Emergency { - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - //var REGISTER_Request v_register; - - //v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - f_IMS_preamble_woRegistration(c_userProfile_UE1atSUThome, p_cSeq_s); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), omit)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_requestLine(?, ?, v_route, ?, v_url)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_01_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, ?)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_02_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_requestLine(?, ?, v_route, ?, v_url)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_03_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_SipUrl_currDomain(vc_userprofile))))); - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_SipUrl), mw_PAssertedIDValue(mw_TelUrl)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_04_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_TelUrl_publUser(vc_userprofile))))); - - //await response - 486 ... - f_awaitingResponse(mw_Response_Base((c_statusLine486),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?,v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_TelUrl), mw_PAssertedIDValue(mw_SipUrl)))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_05_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_06_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_06_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - //preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), - m_PPreferredID(m_AddrUnion_DisplayAndSipUrl(vc_userprofile.publUsername, m_TelUrl_publUser(vc_userprofile))))); - - //await response - 100 ... - f_awaitingResponse(mw_Response_Base((c_statusLine100),vc_callId, vc_cSeq)); - - // await response - 180 ... - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // Send reINVITE - definition for GRUU in RequestURI is not defined in draft-ietf-sip-gruu-14 - LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true); - f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local))); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // await response - 200 ... - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send original BYE await response to clean the session - f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To); - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_06_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_06_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_06_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - var template SipUrl v_url := mw_SipUrl_Host(PX_IMS_SUT_EMERGENCY_HOME_DOMAIN); - var template Route v_route := mw_route({mw_routeBody(v_url)}); - v_url.scheme := "urn"; - - f_IMS_preamble_woRegistration(c_userProfile_ECSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - f_awaitingINVITE(mw_INVITE_Request_Base); - f_send200OK(); - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1 - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_IMS_PAsserted_noPPreferred(?, ?, v_route, ?, v_url, m_PAssertedID_2x(mw_PAssertedIDValue(mw_TelUrl), mw_PAssertedIDValue(mw_SipUrl)))); - f_send200OK(); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_SIP_postamble_UE1_withoutRegistration(); - } // end function f_TC_IMST2_MW_EME_06_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_07_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_07_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_EME_03_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_07_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_07_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_07_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_03_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_07_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_08_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_08_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_04_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_08_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_08_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_08_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_04_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_08_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_09_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_09_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_05_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_09_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_09_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_09_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_05_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_09_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_10_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_10_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - f_TC_IMST2_MW_EME_06_UE1(p_cSeq_s); - - } // end function f_TC_IMST2_MW_EME_10_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT P-CSCF) for TC_IMST2_MW_EME_10_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_10_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_TC_IMST2_MW_EME_06_IMS(p_cSeq_s); - } // end function f_TC_IMST2_MW_EME_10_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_EME_11_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_EME_11_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - //var REGISTER_Request v_register; - - //v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - - f_IMS_preamble_woRegistration(c_userProfile_UE1atSUThome, p_cSeq_s); - // TESTBODY - - // prepare and send INVITE EMERGENCY@SUT - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_serviceProfile_EMERGENCY); - f_SendINVITE(m_INVITE_Request_PPreferred_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local), omit)); - - //await response - 380 ... - f_awaitingResponse(mw_Response_Base((c_statusLine380),vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_EME_11_UE1 - } // end group Emergency - - group SDP { - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_01_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_01_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_01_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_01_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_01_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - // PREAMBLE - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 488 - f_awaitingResponse(mw_Response_Base(c_statusLine488,vc_callId, vc_cSeq)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_01_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_02_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_02_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - f_awaitingINVITE_PassOnTimeout(mw_INVITE_Request_Base); - - if(vc_boo_request) { - // send response - 486 - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - } - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_02_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_02_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_02_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - // PREAMBLE - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // TESTBODY - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - //await response - 4xx or timeout - f_awaitingResponse(mw_Response_Base({c_sipNameVersion, (400..499), ?},vc_callId, vc_cSeq)); - //send ACK - LibSip_Steps.f_setHeadersACK(); - vc_boo_route := true; - f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_route)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_02_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_03_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_03_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - vc_sdp_local:=valueof(m_SDP_unacceptable(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_sendResponse(m_Response_18XonINVITE_sdp_UE(c_statusLine180,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact,valueof(m_MBody_SDP(vc_sdp_local)))); - - f_sendResponse(m_Response_Base(c_statusLine486,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_03_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_03_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_03_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine180,vc_callId, vc_cSeq)); - - f_awaitingResponse(mw_Response_Base(c_statusLine486,vc_callId, vc_cSeq)); - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_03_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_04_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_04_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - //send 200OK with unacceptable media parameter - vc_sdp_local:=valueof(m_SDP_unacceptable(valueof(m_media_dynPT("45", "UNKNOWN")), vc_userprofile)); - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact, f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - // await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_04_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_04_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_04_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_04_IMS - - /* - * @desc This is the test case function (SIP originating side - UE1) for TC_IMST2_MW_SDP_05_UE1 - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_05_UE1(in CSeq p_cSeq_s) runs on ImsComponent { - - var REGISTER_Request v_register; - - v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); - // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting - f_IMS_preamble_withRegistration(c_userProfile_UE1atSUThome, p_cSeq_s, v_register); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - // TESTBODY - - // Awaiting INVITE - f_awaitingINVITE(mw_INVITE_Request_Base); - - /*TODO need to define MIME type application/pkcs7-mime .... - need to change header fields of message - now is just defined usual SDP_template with name m_SDP_encrypted - need to define new template - Reference RFC4568 - */ - - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact, f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local)))); - //await ACK - f_awaitingACK(mw_ACK_Request_Base(vc_callId)); - - //await BYE and send 200OK - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - // send REGISTER, await 401, send REGISTER, await 200 OK - f_RemoveRegistration(vc_cSeq); // deregistration in SUT - - f_SIP_postamble_UE1_withoutRegistration(); - - } // end function f_TC_IMST2_MW_SDP_05_UE1 - - /* - * @desc This is the test case function (Mw interface - IUT I-CSCF) for TC_IMST2_MW_SDP_05_IMS - * @param p_cSeq_s - */ - function f_TC_IMST2_MW_SDP_05_IMS(in CSeq p_cSeq_s) runs on ImsComponent { - f_IMS_preamble_woRegistration(c_userProfile_SCSCFwithHomeUE, p_cSeq_s); - f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); - f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done - - // INVITE UE1 (registered at SUT) - LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, c_userProfile_UE1atSUThome); - f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, omit, m_pChargingVector_origIoi_fixedValue(vc_userprofile.homeDomain), valueof(m_MBody_SDP(vc_sdp_local)))); - - // await response - f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq)); - - // send ACK - vc_sdp_local:=valueof(m_SDP_encrypted(valueof(m_media_dynPT("0", "PCMU/8000")), vc_userprofile)); - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, valueof(m_MBody_SDP(vc_sdp_local)))); - - f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); - - f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done - // POSTAMBLE - - f_SIP_postamble_IMS1_withoutRegistration(); - } // end function f_TC_IMST2_MW_SDP_05_IMS - - } // end group SDP - -} // end module AtsIms_Mw_TCFunctions \ No newline at end of file diff --git a/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn b/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn deleted file mode 100644 index 4401461a050ba6f94344d0e44a99dfcbe0310db1..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_Mw_Testcases.ttcn +++ /dev/null @@ -1,2416 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_Mw_Testcases -{ - //LibCommon - import from LibCommon_Sync all ; - import from LibCommon_VerdictControl all; - //LibSip - import from LibSip_Interface all; - import from LibSip_SIPTypesAndValues all; - //LibIms - import from LibIms_Interface all; - //AtsIms - import from AtsIms_TestConfiguration all; - import from AtsIms_TestSystem all; - import from AtsIms_Mw_TCFunctions all; - import from AtsIms_PICS all; - import from AtsIms_PIXITS all; - - group General { - - /* - * @desc TC_IMST2_MW_GEN_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_01 - - /* - * @desc TC_IMST2_MW_GEN_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_02 - - /* - * @desc TC_IMST2_MW_GEN_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_03 - - /* - * @desc TC_IMST2_MW_GEN_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_04 - - /* - * @desc TC_IMST2_MW_GEN_05 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_05 - - /* - * @desc TC_IMST2_MW_GEN_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_06 - - /* - * @desc TC_IMST2_MW_GEN_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_07 - - /* - * @desc TC_IMST2_MW_GEN_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_08 - - /* - * @desc TC_IMST2_MW_GEN_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_09 - - /* - * @desc TC_IMST2_MW_GEN_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_10 - - /* - * @desc TC_IMST2_MW_GEN_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_11 - - /* - * @desc TC_IMST2_MW_GEN_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_12 - - /* - * @desc TC_IMST2_MW_GEN_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_13 - - /* - * @desc TC_IMST2_MW_GEN_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_14_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_14 - - /* - * @desc TC_IMST2_MW_GEN_15 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_15_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_15 - - /* - * @desc TC_IMST2_MW_GEN_16 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_16_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_16 - - /* - * @desc TC_IMST2_MW_GEN_17 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_GEN_17(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_GEN_17_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_GEN_17_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_GEN_17 - - } // end group General - - group Registration { - - /* - * @desc TC_IMST2_MW_REG_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_01 - - /* - * @desc TC_IMST2_MW_REG_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_02 - - /* - * @desc TC_IMST2_MW_REG_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_03 - - /* - * @desc TC_IMST2_MW_REG_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_04 - - /* - * @desc TC_IMST2_MW_REG_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_05 - - /* - * @desc TC_IMST2_MW_REG_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_06 - - /* - * @desc TC_IMST2_MW_REG_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_07 - - /* - * @desc TC_IMST2_MW_REG_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_08 - - /* - * @desc TC_IMST2_MW_REG_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_09 - - /* - * @desc TC_IMST2_MW_REG_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_10 - - /* - * @desc TC_IMST2_MW_REG_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_11 - - /* - * @desc TC_IMST2_MW_REG_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_12 - - /* - * @desc TC_IMST2_MW_REG_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_13 - - /* - * @desc TC_IMST2_MW_REG_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_REG_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_REG_14_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_REG_14_IMSS(p_cSeq_s)); - - // synchronize PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_REG_14 - - /* - * @desc TC_IMST2_MW_REG_15 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_15 - - /* - * @desc TC_IMST2_MW_REG_16 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_16 - - /* - * @desc TC_IMST2_MW_REG_17 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_17(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_17_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_17 - - /* - * @desc TC_IMST2_MW_REG_18 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_18(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_18_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_18 - - /* - * @desc TC_IMST2_MW_REG_19 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_19(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_19_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_19 - - /* - * @desc TC_IMST2_MW_REG_20 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_20(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_20_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_20 - - /* - * @desc TC_IMST2_MW_REG_21 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_21(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_21_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_21 - - /* - * @desc TC_IMST2_MW_REG_22 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_22(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_22_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_22 - - /* - * @desc TC_IMST2_MW_REG_23 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_23(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_23_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_23 - - /* - * @desc TC_IMST2_MW_REG_24 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_24(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_24_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_24 - - /* - * @desc TC_IMST2_MW_REG_25 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_25(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_25_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_25 - - /* - * @desc TC_IMST2_MW_REG_26 / Config Ref: CF_1Mw UserProfileRef: M1 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_REG_26(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_mw; - f_cf_1Mwp_M1M2Up(v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_REG_26_IMS(p_cSeq_s)); - - // synchronize both PTCs on 1 sychronization point - f_serverSync1Client({c_prDone, c_tbDone}); - - f_cf_1Mwp_M1M2Down(v_imsComponent_mw); - - } // end TC_IMST2_MW_REG_26 - - } // end group Registration - - group InitialRequest { - - /* @desc TC_IMST2_MW_INI_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_INI_01_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_INI_01_IMSS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_INI_01 - - /* @desc TC_IMST2_MW_INI_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws; - f_cf_1Mwi1Mws1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mwi.start(f_TC_IMST2_MW_INI_02_IMSI(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mws.start(f_TC_IMST2_MW_INI_02_IMSS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync3Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Mws1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mwi, v_imsComponent_mws); - - } // end TC_IMST2_MW_INI_02 - - /* @desc TC_IMST2_MW_INI_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_03 - - /* @desc TC_IMST2_MW_INI_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_04 - - /* @desc TC_IMST2_MW_INI_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_05 - - /* @desc TC_IMST2_MW_INI_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_06 - - /* @desc TC_IMST2_MW_INI_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_07 - - /* @desc TC_IMST2_MW_INI_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_08 - - /* @desc TC_IMST2_MW_INI_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_09 - - /* @desc TC_IMST2_MW_INI_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_10 - - /* @desc TC_IMST2_MW_INI_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_11_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_11_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_11 - - /* @desc TC_IMST2_MW_INI_12 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_12(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_12_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_12_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_12 - - /* @desc TC_IMST2_MW_INI_13 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_13(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_13_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_13_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_13 - - /* @desc TC_IMST2_MW_INI_14 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_14(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_14_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_14_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_14 - - /* @desc TC_IMST2_MW_INI_15 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_15(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - - if (PC_PCSCF_periodic_refreshment_originating) - {//Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_15_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_15_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-originated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_originating to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_15 - - /* @desc TC_IMST2_MW_INI_16 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_16(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if (PC_PCSCF_periodic_refreshment_originating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_16_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_16_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-originated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_originating to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_16 - - /* @desc TC_IMST2_MW_INI_18 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_18(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PC_PCSCF_periodic_refreshment_terminating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_18_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_18_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-terminated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_terminating to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_18 - - /* @desc TC_IMST2_MW_INI_19 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_19(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if (PC_PCSCF_periodic_refreshment_terminating) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_19_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_19_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/P-CSCF is NOT configured for application of periodic session refreshment on receipt of UE-terminated INVITE requests. Set PICS item PC_PCSCF_periodic_refreshment_terminating to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_19 - - /* @desc TC_IMST2_MW_INI_20 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_20(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_20_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_20_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_20 - - /* @desc TC_IMST2_MW_INI_21 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_21(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_21_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_21_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_21 - - /* @desc TC_IMST2_MW_INI_22 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_22(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_22_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_22_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_22 - - /* @desc TC_IMST2_MW_INI_23 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_23(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_23_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_23_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_INI_23 - - /* @desc TC_IMST2_MW_INI_24 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_24(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PX_SCSCF_reject_unsubscribed_service) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_24_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_24_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/S-CSCF is NOT configured to reject INVITE requests indicating services that are not subscribed to by the called subscriber. Set PIXIT item PX_SCSCF_reject_unsubscribed_service to TRUE before running this test!"); - } - - } // end TC_IMST2_MW_INI_24 - - /* @desc TC_IMST2_MW_INI_25 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_INI_25(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - if(PX_SCSCF_reject_unsubscribed_service) - { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_INI_25_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_INI_25_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - } - else - { - log("The IUT/S-CSCF is NOT configured to reject INVITE requests indicating services that are not subscribed to by the called subscriber. Set PIXIT item PX_SCSCF_reject_unsubscribed_service to TRUE before running this test!"); - } - } // end TC_IMST2_MW_INI_25 - - } // end group InitialRequest - - group StandaloneRequest { - - /* @desc TC_IMST2_MW_STA_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_01 - - /* @desc TC_IMST2_MW_STA_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_02 - - /* @desc TC_IMST2_MW_STA_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_03 - - /* @desc TC_IMST2_MW_STA_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_04 - - /* @desc TC_IMST2_MW_STA_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_05 - - /* @desc TC_IMST2_MW_STA_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_06 - - /* @desc TC_IMST2_MW_STA_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_STA_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_STA_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_STA_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_STA_07 - - } // end group StandaloneRequest - - group SubsequentRequest { - - /* @desc TC_IMST2_MW_SUB_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_01 - - /* @desc TC_IMST2_MW_SUB_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_02 - - /* @desc TC_IMST2_MW_SUB_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_03 - - /* @desc TC_IMST2_MW_SUB_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_04 - - /* @desc TC_IMST2_MW_SUB_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_05 - - /* @desc TC_IMST2_MW_SUB_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_06 - - /* @desc TC_IMST2_MW_SUB_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_07 - - /* @desc TC_IMST2_MW_SUB_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_08 - - /* @desc TC_IMST2_MW_SUB_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_09 - - /* @desc TC_IMST2_MW_SUB_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SUB_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SUB_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SUB_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 3 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SUB_10 - - } // end group SubsequentRequest - - group TargetRefreshRequest { - - /* @desc TC_IMST2_MW_TAR_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_01 - - /* @desc TC_IMST2_MW_TAR_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_02 - - /* @desc TC_IMST2_MW_TAR_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_03 - - /* @desc TC_IMST2_MW_TAR_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_04 - - /* @desc TC_IMST2_MW_TAR_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4a - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M4aUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mwi1Gm_M4aDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_05 - - /* @desc TC_IMST2_MW_TAR_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_06 - - /* @desc TC_IMST2_MW_TAR_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_07 - - /* @desc TC_IMST2_MW_TAR_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_08 - - /* @desc TC_IMST2_MW_TAR_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_TAR_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_TAR_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_TAR_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_sync1, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_TAR_09 - - - } // end group TargetRefreshRequest - - group Emergency { - - /* @desc TC_IMST2_MW_EME_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_01 - - /* @desc TC_IMST2_MW_EME_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_02 - - /* @desc TC_IMST2_MW_EME_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_03 - - /* @desc TC_IMST2_MW_EME_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_04 - - /* @desc TC_IMST2_MW_EME_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_05 - - /* @desc TC_IMST2_MW_EME_06 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_06(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_06_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_06_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_06 - - /* @desc TC_IMST2_MW_EME_07 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_07(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_07_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_07_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_07 - - /* @desc TC_IMST2_MW_EME_08 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_08(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_08_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_08_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_08 - - /* @desc TC_IMST2_MW_EME_09 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_09(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_09_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_09_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_09 - - /* @desc TC_IMST2_MW_EME_10 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_10(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_10_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_EME_10_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_10 - - /* @desc TC_IMST2_MW_EME_11 / Config Ref: CF_1Mw1Gm UserProfileRef: M3 - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_EME_11(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mwi1Gm_M3Up(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_EME_11_UE1(p_cSeq_s)); - - f_cf_1Mwi1Gm_M3Down(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_EME_11 - - } // end group Emergency - - group SDP { - - /* @desc TC_IMST2_MW_SDP_01 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_01(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_01_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_01_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_01 - - /* @desc TC_IMST2_MW_SDP_02 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_02(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_02_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_02_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_02 - - /* @desc TC_IMST2_MW_SDP_03 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_03(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_03_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_03_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_03 - - /* @desc TC_IMST2_MW_SDP_04 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_04(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_04_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_04_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_04 - - /* @desc TC_IMST2_MW_SDP_05 / Config Ref: CF_1Mw1Gm UserProfileRef: M4b - * @param p_cSeq_s Transaction Id - */ - testcase TC_IMST2_MW_SDP_05(inout CSeq p_cSeq_s) - runs on ServerSyncComp - system TestAdapter { - //Variables - var ImsComponent v_imsComponent_ue1, v_imsComponent_mw; - f_cf_1Mws1Gm_M4bUp(v_imsComponent_ue1, v_imsComponent_mw); - - //Start - f_IncCSeq(p_cSeq_s); v_imsComponent_ue1.start(f_TC_IMST2_MW_SDP_05_UE1(p_cSeq_s)); - f_IncCSeq(p_cSeq_s); v_imsComponent_mw.start(f_TC_IMST2_MW_SDP_05_IMS(p_cSeq_s)); - - // synchronize both PTCs on 2 sychronization points - f_serverSync2Clients({c_prDone, c_tbDone}); - - f_cf_1Mws1Gm_M4bDown(v_imsComponent_ue1, v_imsComponent_mw); - - } // end TC_IMST2_MW_SDP_05 - - } // end group SDP - -} // end module AtsIms_Mw_Testcases diff --git a/ats/ttcn/AtsIms/AtsIms_PICS.ttcn b/ats/ttcn/AtsIms/AtsIms_PICS.ttcn deleted file mode 100644 index dd172692eecf6595d5bdbf508048210b291bfd14..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_PICS.ttcn +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the PICS used for the SIP-IMS tests. -*/ - -module AtsIms_PICS -{ -modulepar { - - /* **************************************************************************************************** - PICS used for test case selection - *************************************************************************************************** */ - - /** @desc boolean PICS ref: A-3/12-1-1 - True, if SUT/P-CSCF requires application of periodic session refreshment on receipt of UE-originated INVITE requests - */ - boolean PC_PCSCF_periodic_refreshment_originating; - - /** @desc boolean PICS ref: A-3/12-2-1 - True, if SUT/P-CSCF requires application of periodic session refreshment on receipt of UE-terminated INVITE requests - */ - boolean PC_PCSCF_periodic_refreshment_terminating; - - /** @desc boolean PICS ref: A-3/18-1-1 - True, if SUT/P-CSCF requires rejection of requests including encrypted SDP offers - */ - boolean PC_PCSCF_reject_encrypted_SDP_offer_in_request; - - /** @desc boolean PICS ref: A-3/18-3-1 - True, if SUT/P-CSCF requires session termination on receipt of encrypted SDP offers in 200OK responses - */ - boolean PC_PCSCF_session_termination_on_encrypted_SDP_offer_in_200OK_response; - - /** @desc boolean PICS ref: A-8/11-1 - True, if SUT/IBCF requires application of periodic session refreshment on receipt of INVITE requests when acting as entry point - */ - boolean PC_IBCF_periodic_refreshment_entry_point; - - /* **************************************************************************************************** - PICS used for branching within test cases - *************************************************************************************************** */ - - /** @desc boolean PICS ref: A-3/10-1-1 - Handling of initial requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_initial_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-3-1 - Handling of target refresh requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_target_refresh_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-5-1 - Handling of standalone requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_standalone_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/10-7-1 - Handling of subsequent (other than target refresh) requests in case of failure of the verification of the URIs in the Route headers - True, if SUT/P-CSCF rejects the request with a 400 response - False, if SUT/P-CSCF replaces the Route headers with stored values - */ - boolean PC_PCSCF_handle_subsequent_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/11-2-1 - Handling of 1xx and 2xx responses to initial requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-2-2 - Handling of 1xx and 2xx responses to initial requests in case of failure of the verification of the Route headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_initial_request_with_mismatching_Route_header; - - /** @desc boolean PICS ref: A-3/11-3-1 - Handling of responses (other than 1xx and 2xx) to initial requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_other_response_to_initial_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-5-1 - Handling of 1xx and 2xx responses to target refresh requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_1xx_2xx_response_to_target_refresh_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-6-1 - Handling of responses (other than 1xx and 2xx) to target refresh requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_other_response_to_target_refresh_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-8-1 - Handling of all responses to requests for standalone transactions or unknown methods in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_any_response_to_standalone_request_with_mismatching_Via_header; - - /** @desc boolean PICS ref: A-3/11-10-1 - Handling of all responses to subsequent requests in case of failure of the verification of the Via headers - True, if SUT/P-CSCF discards the response - False, if SUT/P-CSCF replaces the Via headers with stored values - */ - boolean PC_PCSCF_handle_any_response_to_subsequent_request_with_mismatching_Via_header; - -} -} // end module AtsIms_PICS diff --git a/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn b/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn deleted file mode 100644 index 7597eea1b2cac4d4c621f9248f78b17037661107..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_PIXITS.ttcn +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the PIXIT used for the SIP-IMS tests. - */ - -module AtsIms_PIXITS -{ - -// SUT specific implementation variants - -modulepar { - - /** @desc boolean (This is an operator option, not a protocol option), - True, if SUT/S-CSCF rejects INVITE requests indicating services that are not subscribed to by the called subscriber, - service may be requested in SDP or in a P-Asserted-Service header - Ref: ES 283 033 5-4-3-3 - */ - boolean PX_SCSCF_reject_unsubscribed_service := true; -} - -} // end module AtsIms_PIXITS diff --git a/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn b/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn deleted file mode 100644 index b49283aab931c9b0b908fc7abe2b612ee542b44a..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_TestCases.ttcn +++ /dev/null @@ -1,16 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestCases -{ - // Testcases of individual test cases related to interface - import from AtsIms_Gm_Testcases all; - import from AtsIms_Mw_Testcases all; - import from AtsIms_Ic_Testcases all; - import from AtsIms_Isc_Testcases all; - -} // end module AtsIms_TestCases diff --git a/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn b/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn deleted file mode 100644 index f528ff2efe68d3ab832764d42570536501657a95..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_TestConfiguration.ttcn +++ /dev/null @@ -1,759 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides test component configurations - * for SIP-IMS tests. - */ - -module AtsIms_TestConfiguration -{ - //LibCommon - import from LibCommon_Sync all ; - import from LibCommon_VerdictControl all; - //LibSip - import from LibSip_Interface all; - import from LibSip_SIPTypesAndValues all; - import from LibSip_PIXITS all; - //LibIms - import from LibIms_SIPTypesAndValues all; - import from LibIms_Interface all; - //AtsIms - import from AtsIms_TestSystem all; - import from AtsIms_PIXITS all; - -group auxSipFunction { - - /* - ** @desc f_IncCSeq returns an input parameter incremented by 1000 - ** reason is to run the next testcase with a higher CSeq value - */ - function f_IncCSeq(inout CSeq loc_CSeq) - runs on ServerSyncComp - { loc_CSeq.seqNumber := loc_CSeq.seqNumber + 1000; - return - }; - // end f_IncCSeq - -}//end group auxSipFunction - - group cfUp { - - /** - * - * @desc Creates test configuration of CF_1Gm - * @param p_imsComponent_ue1 first ue1 component - */ - function f_cf_1GmUp(out ImsComponent p_imsComponent_ue1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1GmUp - - /** - * - * @desc Creates test configuration of CF_2Gm -Ref:DTS 06035-2 - * @param p_imsComponent_ue1 first ue1 component - * @param p_imsComponent_ue2 second ue2 component - */ - function f_cf_2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2GmUp - - /** - * - * @desc Creates test configuration of CF_1Mwp_M1M2: UserProfileRef: M1, M2 - * @param p_imsComponent_mwp1 mwp1 component - */ - function f_cf_1Mwp_M1M2Up( out ImsComponent p_imsComponent_mwp1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_mwp1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_mwp1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_mwp1:SIPP, system:MW_I1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1MwiUp - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - PCSCF from SUT conected with component ICSCF from TS - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M3Up(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi1:SIPP, system:MW_P1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Gm_M3Up - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - PCSCF from SUT conected with component ICSCF and SCSCF from TS - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_mws1 mws1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Mws1Gm_M3Up(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi1, - out ImsComponent p_imsComponent_mws1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi1 := ImsComponent.create ; - p_imsComponent_mws1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi1:syncPort, self:syncPort) ; - connect(p_imsComponent_mws1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi1:SIPP, system:MW_P1);// Init test Configuration - map(p_imsComponent_mws1:SIPP, system:MW_P2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Mws1Gm_M3Up - - /** - * - * @desc Creates test configuration of CF_1Mwi1Gm_M4a: UserProfileRef: M4a - SCSCF from SUT conected with component ICSCF from TS - * @param p_imsComponent_mwi2 mwsicomponent - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M4aUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mwi2 - ) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mwi2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mwi2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mwi2:SIPP, system:MW_S2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mwi1Gm_M4aUp - - /** - * - * @desc Creates test configuration of CF_1Mws1Gm_M4b: UserProfileRef: M4b - ICSCF from SUT conected with component SCSCF from TS - * @param p_imsComponent_mws2 mws2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mws1Gm_M4bUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_mws2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_mws2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_mws2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_mws2:SIPP, system:MW_I2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Mws1Gm_M4bUp - - /** - * - * @desc Creates test configuration of CF_1Ic - * @param p_imsComponent_ic1 first ic1 component - */ - function f_cf_1IcUp(out ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ic1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1IcUp - - /** - * - * @desc Creates test configuration of CF_1Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - */ - function f_cf_1Ic1GmUp( out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ic1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Ic1GmUp - - /** - * - * @desc Creates test configuration of CF_2Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - * @param p_imsComponent_ic2 - ic2 component - */ - function f_cf_2Ic1GmUp( out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ic1, - out ImsComponent p_imsComponent_ic2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ic1 := ImsComponent.create ; - p_imsComponent_ic2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic1:syncPort, self:syncPort) ; - connect(p_imsComponent_ic2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ic1:SIPP, system:IC1);// Init test Configuration - map(p_imsComponent_ic2:SIPP, system:IC2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2Ic1GmUp - - /** - * - * @desc Creates test configuration of CF_1Isc1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_as1 - as1 component - */ - function f_cf_1Isc1GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_as1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Isc1GmUp - - /** - * - * @desc Creates test configuration of CF_1Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_as1 - as1 component - */ - function f_cf_1Isc2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2, - out ImsComponent p_imsComponent_as1) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_1Isc2GmUp - - /** - * - * @desc Creates test configuration of CF_2Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_as1 - as1 component - * @param p_imsComponent_as2 - as2 component - */ - function f_cf_2Isc2GmUp(out ImsComponent p_imsComponent_ue1, - out ImsComponent p_imsComponent_ue2, - out ImsComponent p_imsComponent_as1, - out ImsComponent p_imsComponent_as2) - runs on ServerSyncComp - { - //Variables - var FncRetCode v_ret := e_success; - - //Create - p_imsComponent_ue1 := ImsComponent.create ; - p_imsComponent_ue2 := ImsComponent.create ; - p_imsComponent_as1 := ImsComponent.create ; - p_imsComponent_as2 := ImsComponent.create ; - - //Connect - connect(p_imsComponent_ue1:syncPort, self:syncPort) ; - connect(p_imsComponent_ue2:syncPort, self:syncPort) ; - connect(p_imsComponent_as1:syncPort, self:syncPort) ; - connect(p_imsComponent_as2:syncPort, self:syncPort) ; - //Map - map(p_imsComponent_ue1:SIPP, system:UE1);// Init test Configuration - map(p_imsComponent_ue2:SIPP, system:UE2);// Init test Configuration - map(p_imsComponent_as1:SIPP, system:ISC1);// Init test Configuration - map(p_imsComponent_as2:SIPP, system:ISC2);// Init test Configuration - - f_setVerdict(v_ret); - }//end f_cf_2Isc2GmUp - - }//end group cfUp - - group cfDown { - - /** - * - * @desc Deletes configuration of CF_1Gm - * @param p_imsComponent_ue1 first ue1 component - */ - function f_cf_1GmDown(in ImsComponent p_imsComponent_ue1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - }//end f_cf_1GmDown - - /** - * - * @desc Deletes configuration of CF_2Gm - * @param p_imsComponent_ue1 first ue1 component - * @param p_imsComponent_ue2 second ue2 component - */ - function f_cf_2GmDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - }//end f_cf_2GmDown - - /** - * - * @desc Deletes configuration of CF_1Mwp_M1M2: UserProfileRef: M1, M2 - * @param p_imsComponent_mwp1 mwp1 component - */ - function f_cf_1Mwp_M1M2Down(in ImsComponent p_imsComponent_mwp1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_mwp1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_mwp1:SIPP, system:MW_I1); - }//end f_cf_1MwpDown - - /** - * - * @desc Deletes configuration of CF_1Mwi1Gm_M3: UserProfileRef: M3 - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M3Down( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi1 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi1:SIPP, system:MW_P1); - }//end f_cf_1Mwi1Gm_M3Down - - /** - * - * @desc Deletes configuration of CF_1Mwi1Mws1Gm_M3: UserProfileRef: M3 - * @param p_imsComponent_mwi1 mwi1 component - * @param p_imsComponent_mws1 mws1 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Mws1Gm_M3Down( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi1, - in ImsComponent p_imsComponent_mws1 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi1:syncPort, self:syncPort); - disconnect(p_imsComponent_mws1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi1:SIPP, system:MW_P1); - unmap(p_imsComponent_mws1:SIPP, system:MW_P2); - }//end f_cf_1Mwi1Mws1Gm_M3Down - - /** - * - * @desc Deletes configuration of CF_1Mwi1Gm_M4a: UserProfileRef: M4a - * @param p_imsComponent_mwi2 mwi2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mwi1Gm_M4aDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mwi2 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mwi2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mwi2:SIPP, system:MW_S2); - }//end f_cf_1Mwi1Gm_M4aDown - - /** - * - * @desc Deletes configuration of CF_1Mws1Gm_M4b: UserProfileRef: M4b - * @param p_imsComponent_mws2 mws2 component - * @param p_imsComponent_ue1 ue1 component - */ - function f_cf_1Mws1Gm_M4bDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_mws2 - ) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_mws2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_mws2:SIPP, system:MW_I2); - }//end f_cf_1Mws1Gm_M4bDown - - /** - * - * @desc Deletes configuration of CF_1Ic - * @param p_imsComponent_ic1 first ic1 component - */ - function f_cf_1IcDown(in ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ic1:syncPort, self:syncPort) ; - //Unmap - unmap(p_imsComponent_ic1:SIPP, system:IC1); - }//end f_cf_1IcDown - - /** - * - * @desc Deletes configuration of CF_1Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - */ - function f_cf_1Ic1GmDown(in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ic1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ic1:SIPP, system:IC1); - }//end f_cf_1Ic1GmDown - - /** - * - * @desc Deletes configuration of CF_2Ic1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ic1 - ic1 component - * @param p_imsComponent_ic2 - ic2 component - */ - function f_cf_2Ic1GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ic1, - in ImsComponent p_imsComponent_ic2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic1:syncPort, self:syncPort); - disconnect(p_imsComponent_ic2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ic1:SIPP, system:IC1); - unmap(p_imsComponent_ic2:SIPP, system:IC2); - }//end f_cf_2Ic1GmDown - - /** - * - * @desc Deletes configuration of CF_1Isc1Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_isc1- isc1 component - */ - function f_cf_1Isc1GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_isc1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - }//end f_cf_1Isc1GmDown - - /** - * - * @desc Deletes configuration of CF_1Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_isc1- isc1 component - */ - function f_cf_1Isc2GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2, - in ImsComponent p_imsComponent_isc1) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - }//end f_cf_1Isc2GmDown - - /** - * - * @desc Deletes configuration of CF_2Isc2Gm - * @param p_imsComponent_ue1 - ue1 component - * @param p_imsComponent_ue2 - ue2 component - * @param p_imsComponent_isc1- isc1 component - * @param p_imsComponent_isc2- isc2 component - */ - function f_cf_2Isc2GmDown( in ImsComponent p_imsComponent_ue1, - in ImsComponent p_imsComponent_ue2, - in ImsComponent p_imsComponent_isc1, - in ImsComponent p_imsComponent_isc2) - runs on ServerSyncComp - { - f_serverWaitForAllClientsToStop(); - - //Disconnect - disconnect(p_imsComponent_ue1:syncPort, self:syncPort); - disconnect(p_imsComponent_ue2:syncPort, self:syncPort); - disconnect(p_imsComponent_isc1:syncPort, self:syncPort); - disconnect(p_imsComponent_isc2:syncPort, self:syncPort); - //Unmap - unmap(p_imsComponent_ue1:SIPP, system:UE1); - unmap(p_imsComponent_ue2:SIPP, system:UE2); - unmap(p_imsComponent_isc1:SIPP, system:ISC1); - unmap(p_imsComponent_isc2:SIPP, system:ISC2); - }//end f_cf_2Isc2GmDown - - } //end group cfDown - - group syncNoStop // Same functions as in LibCommon but without call of f_serverWaitForAllClientsToStop() - { - /* @desc Implements synchronization of client from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to client. - * Waits for PX_TSYNC_TIME_LIMIT to let client - * finish executing behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync1Client( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(1,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 2 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync2Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 3 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync3Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(3,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - - /* @desc Implements synchronization of 4 clients from server side - * on one or more synchronization points. - * If problem occurs, then server sends STOP to all clients. - * Waits for PX_TSYNC_TIME_LIMIT to let clients - * finish executing their behavior until this - * synchronization point. - * @remark The use of this function requires prior connection of - * the server sync ports! - * @param p_syncPointIds list of synchronization point name/ids - * @return execution status - */ - function f_serverSync4Clients( in SyncPointList p_syncPointIds ) - runs on ServerSyncComp { - var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); - for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { - f_serverSyncClientsTimed(4,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT); - } - } - } //end group syncNoStop -} // end module AtsIms_TestConfiguration diff --git a/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn b/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn deleted file mode 100644 index 0f596719b00feb1968f4c37c394e397f33e05fc4..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_TestExecutions.ttcn +++ /dev/null @@ -1,11 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestExecutions -{ - -} // end module AtsIms_TestExecutions diff --git a/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn b/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn deleted file mode 100644 index 8bc9dce58abc6df40dc8321aff1d634cece8f937..0000000000000000000000000000000000000000 --- a/ats/ttcn/AtsIms/AtsIms_TestSystem.ttcn +++ /dev/null @@ -1,63 +0,0 @@ -/* - * @author STF 346 - * @version $Id$ - * @desc This module provides the types used by the test component - * for SIP-IMS tests. Module become from STF306 and STF334-336 - */ - -module AtsIms_TestSystem -{ - //LibCommon - import from LibCommon_Sync all; - import from LibCommon_AbstractData all; - import from LibCommon_BasicTypesAndValues all; - import from LibCommon_DataStrings all; - //LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_SDPTypes all; - import from LibSip_Templates all; - import from LibSip_PIXITS all; - import from LibSip_Interface all; - //AtsIms - import from AtsIms_PIXITS all; - - group CMTypes { - type charstring CM_Message; - } // end group CMTypes - - group Signatures { - signature s_SIP_conversation (in charstring text, out boolean answer); - signature s_SIP_ringing (in charstring text, out boolean answer); - } // end group Signatures - - group SystemConfiguration { - group Ports { - - type port operatorPort_SIP procedure { - inout s_SIP_conversation; - inout s_SIP_ringing}; - -// configured in LibSip_Interface.ttcn and it should not be configured multiple times -// type port SipPort message { -// inout Request, Response, Raw } with { extension "address" }; - - type port Coordination message { - inout CM_Message} with {extension "internal"}; - } // End Group Ports - - group TestComponents { - group TestSystemInterfaces { - /* - ** @desc The test system interface - */ - type component TestAdapter { - port SipPort UE1, UE2, MW_P1, MW_P2, MW_I1, MW_S1, MW_I2, MW_S2, IC1, IC2, ISC1, ISC2; - port operatorPort_SIP opPortS; - } - } // end Group TestSystemInterfaces - - - }// end group TestComponents - } //end group SystemConfiguration - -} // end module AtsIms_TestSystem diff --git a/ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc b/ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc deleted file mode 100644 index d39ea0f1a883bec57eee5cec7defa5383ad7e4f6..0000000000000000000000000000000000000000 Binary files a/ats/ttcn/STFoutput/DTS_TISPAN-06035-2 V002f.doc and /dev/null differ diff --git a/ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc b/ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc deleted file mode 100644 index 8eb31d978af9fb48b30b692e049433cb649683c0..0000000000000000000000000000000000000000 Binary files a/ats/ttcn/STFoutput/DTS_TISPAN-06035-3 V003.doc and /dev/null differ diff --git a/model/ims.cqa b/model/ims.cqa deleted file mode 100644 index 163963e3c528be26cf45f8f557bb0b4d721ced16..0000000000000000000000000000000000000000 --- a/model/ims.cqa +++ /dev/null @@ -1,3956 +0,0 @@ - -class Ims extends StateMachine { - - /** - * In the constructor sets the IUT to a state where all variables - * are false. These are then changed through a configuration - * message on the first transitions of the model. - */ - public Ims(Connection[] eqs) { - connections = eqs; - iut_security_association = false; - iut_topology_hiding = false; - iut_configured_entry_point_to_ims = false; - iut_ims_in_same_trust_domain = false; - iut_forward_message_ini02 = false; - iut_forward_message_ini06 = false; - iut_forward_message_sta01 = false; - iut_forward_message_sub02 = false; - iut_forward_message_sub03 = false; - iut_forward_message_sub08 = false; - iut_forward_message_sub09 = false; - iut_forward_message_tar11 = false; - iut_forward_message_tar02 = false; - iut_respond_408_reg09 = false; - iut_reject_encrypted_SDP_offer = false; - iut_respond_401_mwreg24 = false; - iut_forward_mwini03 = false; - iut_has_stored_display_name = false; - iut_forward_mwini11 = false; - iut_stored_record_route_header = false; - iut_forward_mwini12 = false; - iut_forward_mwini13 = false; - iut_forward_mwini14 = false; - iut_requiring_periodic_refresh = false; - iut_forward_mwsta01 = false; - iut_stored_service_route_header = false; - iut_forward_mwsta06 = false; - iut_forward_mwsub02 = false; - iut_forward_mwsub05 = false; - iut_forward_mwsub08 = false; - iut_forward_mwtar02 = false; - mw_refresh_invite_sent = false; - iut_forward_mwtar06 = false; - iut_forward_mwtar08 = false; - iut_stored_display_name = false; - iut_configured_entry_point_to_home_net = false; - iut_conf_two_entry_points_to_home_net = false; - iut_send_408_icreg04 = false; - iut_send_408_icreg05 = false; - iut_send_408_icreg06 = false; - ic_invite_sent = false; - invite_contact_header_with_gruu = false; - iut_ifc_contact_as1_for_message = false; - iut_ifc_contact_as1_for_invite = false; - iut_ifc_contact_as2_for_invite = false; - iut_sent_message_to_as1 = false; - iut_and_as1_in_same_trust_domain = false; - as1_indicated_iut_handles_dialog = false; - iut_sent_invite_to_as1 = false; - as1_and_iut_in_same_net = false; - iut_ifc_session_continued = false; - iut_forward_iscsta05 = false; - iut_forward_iscsta06 = false; - iut_as1_indicated_handling_whole_dialog = false; - iut_forwarded_target_refresh_invite = false; - iut_forward_message_to_as1 = false; - - ue1 = 0; - ue2 = 1; - current_ue = -1; - } - - - public void unprotectedLocalRegister(SIPRegisterReq p) { - - require p.recipient == IUT; - current_ue = getUENro(p.sender); - - // from here on UEs are not yet registered - if (current_ue == ue1) { - requirement "Conformiq/UnprotectedReg/UE1 starting unprotected reg."; - if (connections[ue2].registered) - requirement "Conformiq/UnprotectedReg/...and UE2 already registered."; - } - if (current_ue == ue2) { - requirement "Conformiq/UnprotectedReg/UE2 starting unprotected reg."; - if (connections[ue1].registered) - requirement "Conformiq/UnprotectedReg/... and UE1 already registered."; - } - - // local UE not yet registered - if (iut_security_association) { - - // because the IUT has security association set, after - // this initial unprotected registration the UE should - // have its security association set too. - connections[current_ue].security_association = true; - - // unprotected REGISTER, iut and current_ue have security - // associations but register is missing security - // client header -> send respond 4xx on Gm - if (p.security_client_header.present == OMIT) { - SIP4xxResp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("4xx"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_04"; - - // TODO 23.12.-08: GM_REG_01 talks about "the REGISTER request - // was received without protection" - what does this - // mean? - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_01"; - GmOut.send(resp); - } - - // unprotected REGISTER in security environment is - // responded with 401 - else { - SIP401Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("401"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_07"; - connections[current_ue].registering = true; - connections[current_ue].unauthorized = true; - GmOut.send(resp); - } - - // P-CSCF does not respond to unprotected REGISTER from UE - // if Security-Client header that does not specify UDP - // tunneling support - if (current_ue == ue1 && - p.security_client_header.value == "||UDP-enc-tun support" && - p.topmost_via_header.value == "IP address different from IP source address") { - if (current_ue == ue1) - requirement "TP_IMST2_GM_NAT_01"; - return; - } - } - - // if no security association is required by the IUT then an - // unprotected REGISTER request is responded with 200 - // OK. - else { // if (!iut_security_association) { - SIP200Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("200"); - if (current_ue == ue1) - requirement "TP_IMST2_GM_REG_10"; - //TODO 31.12.08: is it correct to change the UE's state to - //registered? - connections[current_ue].registered = true; - GmOut.send(resp); - return; - } - - } - - /* - * Start registration cycle for a UE that is visiting the current - * IUT - */ - public void unprotectedVisitingRegister(SIPRegisterReq p) { - require p.recipient == IUT; - - current_ue = getUENro(p.sender); - - requireUENotRegistered(current_ue); - - if (iut_topology_hiding) { - unprotectedRegistrationWithTopologyHandling(p, current_ue); - } - else { - unprotectedRegistrationWithoutTopologyHandling(p, current_ue); - } - return; - } - - - // when IUT configured with topology hiding, no entry point to IMS - // and not configured for establishing security association - // receives a REGISTER request, depending on configuration a 408 - // or 504 response is replied - public void unprotectedRegistrationWithTopologyHandling(SIPRegisterReq p, int ue) { - if (ue == ue1) { - if (!iut_configured_entry_point_to_ims) { - if (iut_respond_408_reg09) { - SIP408Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_GM_REG_09/Send 408"; - } - else { - SIP504Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_GM_REG_09/Send 504"; - } - return; - } - - // When a SIP REGISTER is received by the IBCF from withing - // own network, the packet is updated and forwarded. - if (iut_configured_entry_point_to_home_net) { - p.sender = IUT; - p.topmost_path_header.present = PRESENT; - p.topmost_path_header.value = SIP_URI_OF_IUT_IBCF; - Ic1Out.send(p); - requirement "TP_IMST2_IC_GEN_01"; - return; - } - requirement "Conformiq/UnprotectedReg/UE1 visiting and iut_topology_hiding"; - } - else - requirement "Conformiq/UnprotectedReg/UE2 visiting and iut_topology_hiding"; - } - - - public void unprotectedRegistrationWithoutTopologyHandling(SIPRegisterReq p, int ue) { - if (ue == ue1) { - if (iut_configured_entry_point_to_ims) { - // unprotected REGISTER received on Gm interface _without_ - // security association - if (p.security_client_header.present == PRESENT) { - requirement "Conformiq/SecurityClient/present"; - p.sender = IUT; - p.recipient = IMS; - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = NO; - p.security_client_header.present = OMIT; - requirement "TP_IMST2_MW_REG_04"; - MwOut.send(p); - return; - } - - // an unprotected REGISTER without security_client_header - else if (p.security_client_header.present == OMIT) { - requirement "Conformiq/SecurityClient/omitted"; - // nothing is sent to Mw interface - // 4xx response to Gm interface - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_05"; - GmOut.send(resp); - return; - } - - // security_client_header can be whatever (== empty) - else { - requirement "Conformiq/SecurityClient/empty"; - // in a normal case the unprotected REGISTER is - // forwarded with modified header fields - p.path_header.present = PRESENT; - p.path_header.value = SIP_URI_OF_IMS +" P-CSCF"; - p.require_header.present = PRESENT; - p.require_header.path_tag_parameter.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.value = "type1 of the sending network"; - p.p_charging_vector_header.term_ioi_parameter.present = OMIT; - p.p_charging_vector_header.term_ioi_parameter.value = "type 1"; - p.p_visited_network_id_header.present = PRESENT; - p.p_visited_network_id_header.visited_network_pre_provisioned_string.present = PRESENT; - p.sender = IUT; - p.recipient = IMS; - - MwOut.send(p); - requirement "TP_IMST2_MW_REG_01"; - return; - } - } - else { // iut has no configured entry point to ims - // an initial unprotected REGISTER with security association - // from visiting UE on Gm interface is forwarded to Mw - // interface and UE status changes to "registering" - p.recipient = IMS; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_GEN_04"; - MwOut.send(p); - connections[ue].registering = true; - return; - } - } - else { // ue == ue2 - requirement "Conformiq/UnprotectedReg/UE2 and no iut_topology_hiding"; - } - } - - - /** - * A local user has already sent a register request and received a - * 401 unauthorized response. Now a second protected register - * request is handled. - */ - public void protectedLocalRegister(SIPRegisterReq p) { - - if (current_ue == ue1) - require connections[current_ue].unauthorized; - require p.recipient == IUT; - require connections[current_ue].security_association; - - if (current_ue == ue1) - requirement "Conformiq/ProtectedReg/UE1 starting local protected reg."; - if (current_ue == ue2) { - requirement "Conformiq/ProtectedReg/UE2 starting local protected reg."; - } - - - if (iut_ifc_contact_as1_for_message && current_ue == ue1) { - SIPRegisterReq reg = p; - reg.p_access_network_info_header.present = PRESENT; - reg.p_visited_network_id_header.present = PRESENT; - reg.request_uri.present = PRESENT; - reg.request_uri.value = "-> SIP URI of AS1"; - reg.to.present = PRESENT; - reg.to.value = "a non barred IMPU from the service profile of the processed iFC"; - reg.from.present = PRESENT; - reg.from.value = SIP_URI_OF_IUT_SCSCF; - reg.contact_header.present = PRESENT; - reg.contact_header.value = SIP_URI_OF_IUT_SCSCF; - reg.p_charging_vector_header.present = PRESENT; - reg.p_charging_vector_header.value = "a type3 orig-ioi parameter before the received orig-ioi parameter"; - reg.p_charging_function_addresses_header.present = PRESENT; - reg.sender = IUT; - reg.recipient = AS1; - IscOut.send(reg); - requirement "TP_IMST2_ISC_REG_02"; - if (iut_and_as1_in_same_trust_domain) - requirement "TP_IMST2_ISC_REG_01"; - else - requirement "Conformiq/IUT and AS1 different trust domains"; - } - - // iut and current_ue have security associations set but - // security client header is missing - if (p.security_client_header.present == OMIT && - current_ue == ue1) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_REG_03"; - GmOut.send(resp); - } - - // protected REGISTER, message missing security header - else if (p.security_verify_header.present == OMIT && - current_ue == ue1) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_REG_02"; - GmOut.send(resp); - } - - // protected REGISTER with wrong authorization header -> - // respond 403 - else if (p.authorization_header.value == INVALID_USER_ID && - current_ue == ue1) { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("403"); - // TO_CHECK: does the user state change?? - requirement "TP_IMST2_GM_REG_05"; - GmOut.send(resp); - } - - // protected REGISTER without errors is responded with 200 - else { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("200"); - connections[current_ue].registered = true; - if (current_ue == ue1) { - requirement "TP_IMST2_GM_REG_08"; - requirement "Conformiq/ProtectedReg/UE1 Local Registered"; - } - if (current_ue == ue2) requirement "Conformiq/ProtectedReg/UE2 Local Registered"; - if (connections[current_ue].registered && - connections[1-current_ue].registered) - requirement "Conformiq/ProtectedReg/Both UEs Registered"; - GmOut.send(resp); - } - - } - - - /** - * When an already registered UE sends a second REGISTER message - * for some purpose. - */ - public void protectedDuplicateLocalRegister(SIPRegisterReq p){ - int ue = getUENro(p.sender); - - // TPs have scenario for only UE1 doing a duplicate - // registration - if (ue == ue1) { - // UE1 has already successfully registered on IUT but does a - // duplicate registration. - if (p.authorization_header.value == INVALID_USER_ID) { - SIP403Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("403"); - requirement "TP_IMST2_GM_REG_06"; - GmOut.send(resp); - return; - } - - // protected REGISTER received from registered UE, with - // register message Expires header set to 0 is an - // UNREGISTER. IUT replies with 200 OK with same expire header - // value and the UE is unregistered. - if (p.expire_header.isPresent() && p.expire_header.value == "0") { - if (iut_and_as1_in_same_trust_domain) { - p.p_access_network_info_header.present = PRESENT; - p.p_visited_network_id_header.present = PRESENT; - p.request_uri.present = PRESENT; - p.request_uri.value = "-> SIP URI of AS1"; - p.to.present = PRESENT; - p.to.value = "a non barred IMPU from the service profile of the processed iFC"; - p.from.present = PRESENT; - p.from.value = SIP_URI_OF_IUT_SCSCF; - p.contact_header.present = PRESENT; - p.contact_header.value = SIP_URI_OF_IUT_SCSCF; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.value = "a type3 orig-ioi parameter before the received orig-ioi parameter"; - p.p_charging_function_addresses_header.present = PRESENT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_REG_03"; - } - - SIP200Resp resp; - resp.sender = p.recipient; - resp.recipient = p.sender; - resp.method = respond("200"); - GmOut.send(resp); - resp.expire_header = p.expire_header; - connections[ue].registering = false; - connections[ue].registered = false; - requirement "Conformiq/Registered/UE1 unREGISTER"; - return; - } - } - else { - return; - } - } - - - /** - * After having received an unprotected registering message a - * protected register message is received that is handled here. - * - * After this state a connection that has a protected registration - * and has NOT security assocition set is changed to a registered - * state. - * - * This function was 'public void - * protectedRegistrationWithoutTopologyHandling(SIPRegisterReq p)' - */ - public void protectedVisitingRegister(SIPRegisterReq p) { - - // an unprotected registration has been done, and now starting - // protected registration to IUT - require p.recipient == IUT; - - // if the register message is sent forward we update here - // sender and recipient - p.sender = IUT; - p.recipient = IMS; - - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = p.sender; - // a protected REGISTER is received (UE was sent a 401 - // response in between). - - if (current_ue == ue1) { - requirement "Conformiq/ProtectedReg/UE1 starts"; - // TODO 08.01.-09: What is TEMPORARY security association for UE1? - if (connections[current_ue].temporary_security_association) { - if (p.security_verify_header.present == OMIT) { - // nothing is sent to Mw interface - // 4xx is sent to Gm interface - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_06"; - GmOut.send(resp); - } - - // a protected REGISTER is received on Gm and TEMPORARY - // security association; depending on the header values either - // a 4xx response is sent back on Gm or the register is - // forwarded to IMS on Mw interface - if (p.security_verify_header.present == PRESENT) { - if (p.security_client_header.present == PRESENT) { - // security_verify_header IS present - if (p.security_client_header.value == "header equals to Security-Client header of unprotected REGISTER" ) { - - if (p.security_verify_header.value == "header IS DIFFERENT to Security-Server header of 401 response") { - // nothing is sent on Mw - // 4xx sent to Gm interface - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_07"; - GmOut.send(resp); - } - if (p.security_verify_header.value == "header IS EQUAL to Security-Server header of 401 response") { - requirement "TP_IMST2_MW_REG_08"; - // forward the received request to IMS - p.security_verify_header.present = OMIT; - p.security_client_header.present = OMIT; - MwOut.send(p); - } - } - } - } - return; - } // end of temporary security association - - // protected REGISTER with security association - if (connections[current_ue].security_association) { - // a protected REGISTER from Gm interface with UE having - // security association and the register having specific - // headers present the REGISTER is forwarded on the Mw - // interface after specific headers are removed - if (p.security_verify_header.present == PRESENT && - p.security_client_header.present == PRESENT) { - - p.security_verify_header.present = OMIT; - p.security_client_header.present = OMIT; - requirement "TP_IMST2_MW_REG_09"; - MwOut.send(p); - } - - // if the protected REGISTER is missing the security client header, - // nothing is sent to Mw interface but a 4xx response is - // sent back to UE - else if (p.security_client_header.present == OMIT) { - resp.method = respond("4xx"); - requirement "TP_IMST2_MW_REG_10"; - GmOut.send(resp); - } - - // a protected REGISTER received that has specific headers - // and the UE has security association. A 403 response is - // sent back to the UE. - else if (p.authorization_header.present == PRESENT && - p.authorization_header.private_user_identity == "different to private user identity of unprotected REGISTER") { - // nothing is sent to Mw - // 403 is sent back to Gm - SIP403Resp r; - r.sender = IUT; - r.recipient = p.sender; - r.method = respond("403"); - requirement "TP_IMST2_MW_REG_11"; - GmOut.send(r); - } - - // if the REGISTER is received protected with security - // association and it includes an authentication challenge - // response, the REGISTER headers are updated and request - // is forwarded. - else if (p.auth_challenge_resp_param.present == PRESENT) { - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = YES; - p.recipient = IMS; - p.sender = IUT; - - requirement "TP_IMST2_MW_REG_02"; - MwOut.send(p); - } - else { - p.authorization_header.present = PRESENT; - p.authorization_header.integrity_protected_parameter = YES; - requirement "TP_IMST2_MW_REG_03"; - MwOut.send(p); - } - - return; - } // end of "has security association" - - // protected REGISTER _without_ security association - else { - p.path_header.present = PRESENT; - p.sip_uri.present = PRESENT; - p.require_header.present = PRESENT; - p.require_header.path_tag_parameter.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - p.p_charging_vector_header.orig_ioi_parameter.value = TYPE1 + " of the sending network"; - p.p_charging_vector_header.term_ioi_parameter.value = "[OMIT type1]"; - p.p_visited_network_id_header.present = PRESENT; - p.p_visited_network_id_header.visited_network_pre_provisioned_string.present = PRESENT; - requirement "TP_IMST2_MW_REG_13"; - MwOut.send(p); - connections[current_ue].registering = true; - } - } - else - requirement "Conformiq/ProtectedReg/UE2 starts"; - } - - /** - * A remote UE registers on this IUT, register request was - * received from Mw interface and the registration response is - * sent back. - * - * For connections that come through the Mw interface we don't - * care about the remote device's status. - */ - public void handleMwRegister(SIPRegisterReq req) { - - // by requiring that UE2 is not registered here we force ue2 - // to do a remote registration through the mw interface in - // some test case - // requireUENotRegistered(ue2); // this is required on the transition - require !connections[ue2].is_home_net; - - if (!iut_topology_hiding) { - if (req.to.present == PRESENT && - req.to.value == "[a not registered public identity]" && - req.authorization_header.integrity_protected_parameter == NO && - req.authorization_header.present == PRESENT) { - SIP401Resp resp; - resp.sender = req.recipient; - resp.recipient = req.sender; - resp.www_authenticate_header.present = PRESENT; - resp.method = respond("401"); - - resp.www_authenticate_header.realm_parameter = "[a globally unique name of the IUT S-CSCF]"; - resp.www_authenticate_header.RAND = PRESENT; - resp.www_authenticate_header.AUTN = PRESENT; - resp.www_authenticate_header.algorithm_parameter = AKAV1_MD5; - resp.www_authenticate_header.ik_parameter.present = PRESENT; - resp.www_authenticate_header.ck_parameter.present = PRESENT; - requirement "TP_IMST2_MW_REG_16"; - connections[ue2].registering = true; - MwOut.send(resp); - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == OMIT && - connections[ue2].registered_user_id) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_18"; - trace("UE2 registered public user identity with current private user identity in IUT"); - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == YES && - req.to.value == "a not registered public user identity") { - SIP401Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.www_authenticate_header.present = PRESENT; - resp.www_authenticate_header.realm_parameter = "globally unique name"; - resp.www_authenticate_header.RAND = PRESENT; - resp.www_authenticate_header.AUTN = PRESENT; - resp.www_authenticate_header.algorithm_parameter = AKAV1_MD5; - resp.www_authenticate_header.ik_parameter.present = PRESENT; - resp.www_authenticate_header.ck_parameter.value = PRESENT; - requirement "TP_IMST2_MW_REG_21"; - MwOut.send(resp); - return; - } - - if (req.authorization_header.present == OMIT && - connections[ue2].registered_user_id) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - requirement "TP_IMST2_MW_REG_19"; - MwOut.send(resp); - trace("UE2 registered public user identity with current private user identity in IUT"); - return; - } - - if (req.expire_header.isPresent() && - req.expire_header.value == "duration smaller than minimum") { - SIP423Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.min_expire_header.present = PRESENT; - requirement "TP_IMST2_MW_REG_20"; - MwOut.send(resp); - } - - // moved here from protectedMwRegister() - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.contact_header.present == PRESENT && - req.contact_header.registered_public_user_identities == NO ) { - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - - SIPNotifyResp r; - r.sender = IUT; - r.recipient = IMS; - r.method = NOTIFY; - r.notify_body.present = PRESENT; - r.notify_body.registered_public_user_identity.present = PRESENT; - - requirement "TP_IMST2_MW_REG_17"; - MwOut.send(r); - - // TODO 08.01.: This was as below, but shouldn't the UE2 on - // the IMS become registered after two successful REGISTER - // calls and this NOTIFY message? - -// // after this UE2 should become unregistered -// connections[ue2].registered = false; - connections[ue2].registered = true; - return; - } - - - } // end of !iut_topology_hiding - else { - requirement "Conformiq/UnprotectedReg/UE2 - IMS and iut_topology_hiding"; - // there is no TP for case where UE2 behind IMS is - // registering and has iut_topology_handling enabled - - // continue unprotected registration. - SIP401Resp resp; - resp.recipient = UE2; - resp.sender = IUT; - resp.method = respond("401"); - MwOut.send(resp); - connections[ue2].registering = true; - } - } - - /** - * For a remote UE that has started registration through Mw on - * this IUT after successful registration a NOTIFY request is sent - * back onto the Mw interface and the connection is set as - * registered. - */ - public void protectedMwRegister(SIPRegisterReq req) { - - if (iut_topology_hiding) { - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - requirement "Conformiq/ProtectedReg/iut_topology_hiding/Successful remote register"; - connections[ue2].registered = true; - return; - } - else { - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.authorization_header.algorithm_parameter == AKAV1_MD5 && - req.authorization_header.private_user_identity == PRESENT && - req.authorization_header.response_parameter == PRESENT && - req.callid_parameter == "initial CallID parameter") { - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.path_header.present = PRESENT; - resp.p_associated_uri_header.present = PRESENT; - resp.p_associated_uri_header.registered_public_user_identity.present = PRESENT; - resp.service_route_header.present = PRESENT; - resp.service_route_header.sip_uri = "IUT S_CSCF"; - resp.p_charging_function_addresses_header.present = PRESENT; - resp.p_charging_vector_header.present = PRESENT; - resp.contact_header.present = PRESENT; - resp.contact_header.address_of_public_user_identity = PRESENT; - - requirement "TP_IMST2_MW_REG_22"; - MwOut.send(resp); - return; - } - - if (req.authorization_header.present == PRESENT && - req.authorization_header.integrity_protected_parameter == YES && - req.callid_parameter == "unknown CallID parameter") { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_23"; - return; - } - - if (req.authorization_header.present == PRESENT && - req.authorization_header.AUTS_parameter == "invalid SQN parameter") { - - if (iut_respond_401_mwreg24) { - SIP401Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_REG_24/401 response"; - MwOut.send(resp); - trace("IUT was configured such that 401 is replied here."); - } - else { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - requirement "TP_IMST2_MW_REG_24/403 response"; - MwOut.send(resp); - trace("IUT was configured such that 403 is replied here."); - } - - return; - } - - if (req.authorization_header.isPresent() && - req.authorization_header.integrity_protected_parameter == YES && - req.authorization_header.private_user_identity == "matching previous registered public user identity" && - req.to.isPresent() && - req.to.value == "public user identity not matching previous registered public user identity") { - - SIP500Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_25"; - return; - } - - if (req.authorization_header.isPresent() && - req.auth_challenge_resp_param.isOmit() && - req.authorization_header.AUTS_parameter == "invalid MAC parameter") { - - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = TYPE1; - - MwOut.send(resp); - requirement "TP_IMST2_MW_REG_26"; - return; - } - - // there is no TP where visiting UE2 behind IMS would - // register successfully - it's done here. - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("200"); - MwOut.send(resp); - requirement "Conformiq/ProtectedReg/no iut_topology_hiding/Successful remote register"; - connections[ue2].registered = true; - return; - } - } - - - /** - * A visiting UE that has sent an unprotected register, will - * receive a 401 from Mw that is forwarded to the Gm interface - */ - public void mw401RegisterResponse(SIP401Resp resp) { - - // if sender of request was ue1 this is response to that - // request and should be destined to ue1 - requireCurrentRecipient(resp.recipient); - if (iut_topology_hiding) { - if (current_ue == ue1) - requirement "Conformiq/UnprotectedReg/UE1 reg resp with iut_topology_hiding"; - if (current_ue == ue2) - requirement "Conformiq/UnprotectedReg/UE2 reg resp with iut_topology_hiding"; - } - else { - resp.www_authenticate_header.present = PRESENT; - resp.www_authenticate_header.ck_parameter.present = OMIT; - resp.www_authenticate_header.ik_parameter.present = OMIT; - resp.security_server_header.present = PRESENT; - resp.security_server_header.pcscf = SECURITY_LIST_PARAMETERS; - resp.sender = IUT; - resp.method = resp.method; - GmOut.send(resp); - if (current_ue == ue1) - requirement "TP_IMST2_MW_REG_12"; - connections[current_ue].unauthorized = true; - // if NO iut_topology_hiding set then the following - // registers have to have security association set! - connections[current_ue].security_association = true; - } - } - - /** - * A protected registration that comes through the Mw interface. - * When registration is successful UE will answer a 200 - * response. This response needs to be forwarded to the Gm - * interface of the visiting UE. - */ - public void mw200RegisterResponse(SIP200Resp resp) { - // if the original request was sent by UE1 then this response - // coming from MW interface has to be from UE2 and vice versa. - requireCurrentRecipient(resp.recipient); - - // update sender to IUT - resp.sender = IUT; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.value = TYPE1; - GmOut.send(resp); - - if (!iut_topology_hiding) { - if (current_ue == ue1) - { - requirement "TP_IMST2_MW_GEN_05"; - } - else { // initial register originating from UE2 - // Upon receipt of a SIP 200 (OK) response to the - // initial (protected) SIP REGISTER request the P-CSCF - // located in the visited network (== this IUT) shall - // send a SIP SUBSCRIBE request to the entry point of - // the home network (== to the Mw interface). - SIPSubscribeReq req; - req.method = SUBSCRIBE; - req.sender = IUT; - req.recipient = IMS; - req.request_uri.present = PRESENT; - req.sip_uri.value = "[public user identity]"; - req.event_header.present = PRESENT; - req.event_header.reg_parameter = PRESENT; - req.expire_header.value = "[a value higher than the value in the 200 response]"; - req.p_asserted_identity_header.sip_uri = "[SIP URI of IUT P-CSCF inserted into the Path header during registration of UE1]"; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.icid_parameter.present = PRESENT; - requirement "TP_IMST2_MW_REG_14"; - MwOut.send(req); - } - } - else { - if (current_ue == ue1) - requirement "Conformiq/ProtectedReg/UE1 and iut_topology_hiding"; - else - requirement "Conformiq/ProtectedReg/UE2 and iut_topology_hiding"; - } - // update UE's status - connections[current_ue].registered = true; - } - - - /** - * IUT has received REGISTER on Gm from UE1 and has forwarded this - * via Ic1. Now IUT received 3xx response and resending REGISTER - * to Ic2 or error code to registering UE. - */ - public void ic3xxRegisterResponse(SIP3xxResp resp) { - require iut_topology_hiding; - - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg04) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_04/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_04/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_01"; - return; - } - } - - /** - * IUT has received REGISTER from UE1 and has sent REGISTER via - * Ic1 to IMS. Now IUT receives 480 which is replied with a new - * REGISTER. - */ - public void ic480RegisterResponse(SIP480Resp resp) { - require iut_topology_hiding; - - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg05) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_05/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_05/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_02"; - return; - } - } - - - /** - * Sends a REGISTER message to Ic2 interface - */ - public void sendIc2Register() { - if (iut_configured_entry_point_to_home_net) { - if (iut_send_408_icreg06) { - SIP408Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_06/Send 408 response"; - trace("IUT configured to send 408 response"); - } - else { - SIP504Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("504"); - GmOut.send(resp); - requirement "TP_IMST2_IC_REG_06/Send 504 response"; - trace("IUT configured to send 504 response"); - } - return; - } - - if (iut_conf_two_entry_points_to_home_net) { - SIPRegisterReq req; - req.sender = IUT; - req.recipient = IMS; - req.method = REGISTER; - Ic2Out.send(req); - requirement "TP_IMST2_IC_REG_03"; - return; - } - } - - public void send403ResponseToIc1() { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = IMS; - resp.method = respond("403"); - Ic1Out.send(resp); - requirement "TP_IMST2_IC_REG_07"; - return; - } - - public void send408ResponseToGm() { - SIP408Resp resp; - resp.recipient = UE1; - resp.sender = IUT; - resp.method = respond("408"); - GmOut.send(resp); - requirement "TP_IMST2_ISC_INI_05"; - } - - /** - * An emergency INVITE request is received (by UE1) before the UE - * has even registered. - * - * TPs talk about "emergency registered in IUT". When is a UE - * emergency registered? - */ - public void emergencyInviteNotRegistered(SIPInviteReq r) { - int gm_nro = getUENro(r.sender); - - if (senderAndRecipient(r, UE1, UE2)) - { - if (r.request_uri.value == EMERGENCY_SERVICE_ID) { - // configured for emergency sessions - if (iut_configured_for_emergency_sessions) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - // does not send any 4xx out - requirement "TP_IMST2_GM_EME_02"; - } - else { // NOT configured for emergency sessions - SIP380Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("380"); - resp.content_type_header.value = "[3GPP IMX XML body]"; - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_01"; - } - // calling connection is registered for emergency calls - // and has an emergency service ID - if (connections[gm_nro].emergency_registered) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_04"; - } - } - - // if the connection is emergency registered but it has no service ID - if (connections[gm_nro].emergency_registered && - r.request_uri.value == "||" + EMERGENCY_SERVICE_ID) - { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_03"; - } - return; - } - - if (senderAndRecipient(r, UE1, IMS) && - iut_configured_entry_point_to_ims && - iut_configured_for_emergency_sessions) { - if (r.request_uri.isPresent() && - r.request_uri.value == REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID) { - - if (iut_stored_display_name && - r.second_p_asserted_id_header.tel == TEL_URI_OF_EMERGENCY_PUB_USER_ID) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.emergency_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_EMERGENCY_PUB_USER_ID; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_05"; - return; - } - - // these are only for EME_04, EME_03 does not fill any - // of these values - if (connections[ue1].emergency_registered && - r.p_preferred_identity_header.isPresent() && - r.p_preferred_identity_header.emergency_public_user_identity.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_preferred_identity_header.emergency_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_EMERGENCY_PUB_USER_ID; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_04"; - return; - } - - if (connections[ue1].emergency_registered) { - r.route_header.present = PRESENT; - r.topmost_route_header.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_03"; - return; - } - - r.request_uri.value = "-> emergency service URN"; - r.route_header.present = PRESENT; - r.topmost_route_header.present = PRESENT; - r.topmost_route_header.value = "topmost SIP URI of IUT E-CSCF"; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_01"; - return; - } - - if (r.p_preferred_identity_header.isPresent()) { - r.p_preferred_identity_header.present = PRESENT; - r.p_asserted_identity_header.present = OMIT; - r.request_uri.present = PRESENT; - r.request_uri.value = "-> emergency service URN"; - r.route_header.present = PRESENT; - r.route_header.topmost.present = PRESENT; - r.route_header.topmost.value = "SIP URI of IUT E-CSCF"; - r.sender = IUT; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_02"; - return; - } - - return; - } - } - - - - /** - * Local registered UE1 and visiting UE2. UE1 sends an emergency - * INVITE call to UE2. - */ - public void emergencyInviteMwRegistered(SIPInviteReq r) { - - require iut_configured_for_emergency_sessions; - require iut_configured_entry_point_to_ims; - require iut_stored_display_name; - require !iut_topology_hiding; - require r.request_uri.isPresent(); - - if (r.request_uri.value == REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID) { - r.sender = IUT; - r.request_uri.value = "-> emergency service URN"; - MwOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_07"; - return; - } - - if (r.request_uri.value == "emergency service URN" && - r.p_preferred_identity_header.isPresent()) { - - if (r.p_preferred_identity_header.registered_public_user_identity.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.registered_public_user_identity.present = PRESENT; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.tel = TEL_URI_OF_PUB_UID; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_08"; - return; - } - - if (r.p_preferred_identity_header.tel == TEL_URI_OF_PUB_UID) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.value = TEL_URI_OF_PUB_UID; - r.second_p_asserted_id_header.present = PRESENT; - r.second_p_asserted_id_header.value = "registered public user identity"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_09"; - return; - } - } - - if (r.request_uri.emergency_service_urn.isPresent()) { - SIP380Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("380"); - GmOut.send(resp); - requirement "TP_IMST2_MW_EME_11"; - return; - } - } - - - /** - * UE1 can send an INVITE to UE2 even if this is not registered yet - */ - public void handleUE1AloneInvite(SIPInviteReq msg) { - if (msg.supported_header.value == TIMER_OPTION_TAG && - msg.session_expires_header.value == WRONG_EXPIRATION) { - SIP422Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("422"); - resp.min_se_header.present = PRESENT; - requirement "TP_IMST2_GM_INI_07"; - GmOut.send(resp); - return; - } - if (msg.sdpOffer.isPresent() && - msg.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - SIP488Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("488"); - resp.sdpOffer.present = PRESENT; - requirement "TP_IMST2_GM_SDP_01"; - GmOut.send(resp); - return; - } - if (msg.encryptedSDPOffer.isPresent()) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("4xx"); - requirement "TP_IMST2_GM_SDP_02"; - GmOut.send(resp); - return; - } - } - - - /** - * INVITE received from within own network but that has - * iut_topology_hiding set is forwarded to Ic interface. - */ - public void gmToIcInvite(SIPInviteReq msg) { - if (iut_requiring_periodic_refresh) { - msg.session_expires_header.present = PRESENT; - } - msg.topmost_via_header.present = PRESENT; - msg.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - msg.encrypted_sip_uri.present = PRESENT; - msg.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - msg.p_charging_vector_header.present = OMIT; - msg.p_charging_function_addresses_header.present = OMIT; - Ic1Out.send(msg); - ic_invite_sent = true; - requirement "TP_IMST2_IC_INI_01"; - if (iut_requiring_periodic_refresh) - requirement "TP_IMST2_IC_STA_02"; - return; - } - - /** - * Forward an INVITE received from the Gm interface to the Mw - * interface. This is the case where UE2 is on IMS. - */ - public void gmToMwInvite(SIPInviteReq msg) { - current_ue = getUENro(msg.sender); - if (msg.route_header.isPresent() && - msg.route_header.value == "Route header not matching stored Service Route header") { - - if (iut_forward_mwini03) { - msg.route_header.value = "Route header from 200 response of last registration"; - msg.sender = IUT; - MwOut.send(msg); - requirement "TP_IMST2_MW_INI_03/Forward INVITE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_03/Respond 400"; - } - return; - } - - if (msg.topmost_route_header.isPresent() && - msg.topmost_route_header.value == IMS) { - - if (iut_has_stored_display_name && - msg.p_preferred_identity_header.present == PRESENT) { - - msg.p_preferred_identity_header.present = OMIT; - msg.p_asserted_identity_header.present = PRESENT; - msg.p_asserted_identity_header.stored_display_name.present = PRESENT; - msg.sender = IUT; - msg.recipient = IMS; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_05"; - return; - } - - msg.via_header.present = PRESENT; - msg.via_header.value = "address of IUT P-CSCF"; - msg.record_route_header.present = PRESENT; - msg.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF" + - "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.icid_parameter.present = PRESENT; - msg.sender = IUT; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - - GmOut.send(resp); - - requirement "TP_IMST2_MW_INI_04"; - return; - } - - if (msg.session_expires_header.isOmit() && - iut_requiring_periodic_refresh) { - - if (msg.min_se_header.isPresent()) { - msg.session_expires_header.present = PRESENT; - msg.session_expires_header.duration_parameter.present = PRESENT; - msg.session_expires_header.duration_parameter.value = "greater than Min-SE header"; - requirement "TP_IMST2_MW_INI_16"; - - } - else { - msg.session_expires_header.present = PRESENT; - msg.session_expires_header.refresh_parameter.present = OMIT; - requirement "TP_IMST2_MW_INI_15"; - } - - msg.sender = IUT; - msg.recipient = IMS; - MwOut.send(msg); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - return; - } - - - MwOut.send(msg); - // send a 100 response to caller UE1 - SIP100Resp resp; - resp.method = respond("100"); - resp.sender = IUT; - resp.recipient = msg.sender; - GmOut.send(resp); - connections[current_ue].calling = true; - requirement "Conformiq/Invite/Gm to Mw invite received"; - return; - } - - - /** - * If both UEs are local then the INVITE call is routed back to - * the Gm interface with some special handling conditions - */ - public void gmToGmInvite(SIPInviteReq msg) { - current_ue = getUENro(msg.sender); - - // TODO 02.01.09: the TPs don't require the UEs to be - // registered or anything for GM_EME_05 - I wonder if this is - // correct? - - // if the INVITE request has specific fields then it is an - // emergency call that can be handled here - if (msg.request_uri.value == EMERGENCY_SERVICE_ID) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_GM_EME_05"; - return; - } - - if (msg.service_route_header.value == ROUTE_HEADER_NOT_MATCHING) { - if (iut_forward_message_ini02) { - // invite is forwarded - trace("The IUT was configured initially such that it sends an INVITE to UE2 in this case"); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - GmOut.send(msg); - requirement "TP_IMST2_GM_INI_02/Forward INVITE"; - connections[current_ue].calling = true; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("400"); - GmOut.send(resp); - // nothing is sent to the UE2! - trace("The IUT was configured initially such that nothing is sent to UE2 in this case"); - requirement "TP_IMST2_GM_INI_02/400 Response"; - } - return; - } - - if (msg.supported_header.value == TIMER_OPTION_TAG && - msg.session_expires_header.value == ACCEPTABLE_EXPIRATION) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - msg.session_expires_header.present = PRESENT; - requirement "TP_IMST2_GM_INI_08"; - GmOut.send(msg); - return; - } - - if (iut_ifc_contact_as1_for_message && - iut_and_as1_in_same_trust_domain && - as1_indicated_iut_handles_dialog) { - SIPInviteReq req; - req.recipient = AS1; - req.sender = IUT; - IscOut.send(req); - iut_sent_invite_to_as1 = true; - requirement "Conformiq/Invite/iut sent invite to AS1"; - } - - // send response 100 to inviter i.e. UE1 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = msg.sender; - resp.method = respond("100"); - GmOut.send(resp); - - // forward invite to callee i.e. UE2 - msg.sender = IUT; - msg.record_route_header.value = PCSCF_OR_FQDN_ADDRESS; - msg.via_header.value = PCSCF_OR_FQDN_ADDRESS; - msg.p_charging_vector_header.present = OMIT; - msg.p_charging_vector_header.icid_parameter.present = PRESENT; - msg.p_charging_function_addresses_header.present = OMIT; - GmOut.send(msg); - - // change the status of the caller - connections[current_ue].calling = true; - requirement "TP_IMST2_GM_INI_01"; - - return; - } - - /** - * If the remote user (UE2) sends an invite through the Mw - * interface it is simply forwarded to the Gm interface to the - * recipient. - */ - public void mwHandleInvite(SIPInviteReq r) { - - if (iut_topology_hiding) { - requirement "Conformiq/Invite/MW invite with iut_topology_hiding"; - } - else { - if (iut_requiring_periodic_refresh && - r.session_expires_header.isOmit()) { - - if (r.min_se_header.isPresent()) { - r.session_expires_header.present = PRESENT; - r.session_expires_header.duration_parameter.present = PRESENT; - r.session_expires_header.duration_parameter.value = "greater than Min-SE header"; - r.sender = IUT; - GmOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_19"; - return; - } - - r.session_expires_header.present = PRESENT; - r.session_expires_header.refresh_parameter.present = OMIT; - r.sender = IUT; - GmOut.send(r); - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_18"; - return; - } - - if (r.request_uri.isPresent() && - r.request_uri.barred_public_user_id.isPresent()){ - SIP404Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_22"; - return; - } - - - if (r.request_uri.isPresent() && - r.request_uri.invalid_GRUU_parameter.isPresent()){ - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_23"; - return; - } - - if (r.p_asserted_service_header.isPresent() && - r.p_asserted_service_header.value == "unsubscribed service"){ - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_24"; - return; - } - - if (r.p_asserted_service_header.isOmit() && - r.sdpOffer.isPresent() && - r.sdpOffer.value == "unsubscribed service") { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_25"; - return; - } - - if (r.sdpOffer.isPresent() && - r.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - SIP488Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.sdpOffer.present = PRESENT; - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_01"; - return; - } - - if (r.encryptedSDPOffer.isPresent() && - iut_configured_entry_point_to_ims && - iut_reject_encrypted_SDP_offer) { - SIP4xxResp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("4xx"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_02"; - // no INVITE is sent to UE1 - return; - } - - // if no special case then a 100 response is returned and the - // INVITE is forwarded - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - MwOut.send(resp); - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_INI_20"; - requirement "Conformiq/Invite/MW invite without iut_topology_hiding"; - } - } - - - public void icHandleInvite(SIPInviteReq r) { - require iut_topology_hiding; - - if (r.via_header.isPresent() && - r.via_header.topmost.isPresent() && - r.via_header.topmost.value == "topmost "+ SIP_URI_OF_IMS && - r.encrypted_sip_uri.isPresent() && - r.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - Ic1Out.send(resp); - r.any_header.present = OMIT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_IC_INI_05"; - return; - } - - if (iut_requiring_periodic_refresh) { - r.session_expires_header.present = PRESENT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_IC_INI_06"; - return; - } - - if (r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent()) { - // influences the 200 response message that can be - // received later - invite_contact_header_with_gruu = true; - return; - } - } - - - /** - * A MESSAGE is received on the Ic interface, when IUT has - * topology hiding and is in same trust domain with IMS. - */ - public void icHandleMessage(SIPMessageReq req) { - if (req.topmost_via_header.isPresent() && - req.topmost_via_header.value == SIP_URI_OF_IMS && - req.encrypted_sip_uri.isPresent() && - req.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - req.any_header.present = OMIT; - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_STA_03"; - return; - } - - if (req.to.isPresent() && - req.to.value == "GRUU of IUT IBCF") { - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_STA_04"; - return; - } - } - - - /** - * UEs are local to the IUT, and UE1 has sent INVITE to UE2. UE2 - * sends 180 response that is forwarded. - */ - public void forwardGmToGm180Response(SIP180Resp resp) { - int ue = getUENro(resp.sender); - resp.sender = IUT; - if (connections[1-ue].calling) { - requirement "TP_IMST2_GM_INI_03"; - // forward the 180 response to UE1 - GmOut.send(resp); - connections[ue].ringing = true; - - if (iut_sent_invite_to_as1) { - if (as1_and_iut_in_same_net) { - resp.p_charging_function_addresses_header.present = PRESENT; - resp.recipient = AS1; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_01"; - return; - } - if (!as1_and_iut_in_same_net && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.recipient = AS1; - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_03"; - return; - } - } - } - } - - /** - * P-CSCF forwards SIP 180 response with unacceptable SDP media - * parameter offer to originating UE (who initiated INVITE seq.). - */ - public void gm180SDPResponse(SIP180Resp msg) { - if (msg.sdpOffer.isPresent() && msg.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - msg.sender = IUT; - GmOut.send(msg); - requirement "TP_IMST2_GM_SDP_03"; - } - } - - - /** - * INVITE was sent to Ic interface and now a 180 response was - * received on Ic. - */ - public void icToGm180InviteResponse(SIP180Resp p) { - require iut_topology_hiding; - - p.any_header.present = OMIT; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - GmOut.send(p); - requirement "TP_IMST2_IC_INI_02"; - } - - /** - * INVITE was sent to Ic interface and now a 200 response was - * received on Ic. - */ - public void icToGm200InviteResponse(SIP200Resp p) { - require iut_topology_hiding; - - p.any_header.present = OMIT; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - GmOut.send(p); - requirement "TP_IMST2_IC_INI_03"; - } - - public void gmToIc180InviteResponse(SIP180Resp resp) { - require iut_topology_hiding; - - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_07"; - return; - } - - public void gmToIc200InviteResponse(SIP200Resp resp) { - require iut_topology_hiding; - - if (invite_contact_header_with_gruu) { - resp.contact_header.present = PRESENT; - resp.contact_header.value = "GRUU"; - resp.sender = IUT; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_09"; - return; - } - - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_INI_08"; - return; - } - - /** - * P-CSCF initiates call release due to wrong SDP offer in SIP 200 - * response. - * - * Happened so far: UE1 has sent INVITE to UE2, IUT has forwarded - * this message. Now UE2 responds with a 200 response message. - */ - public void gm200SDPResponse(SIP200Resp r) { - boolean exc_01 = false; - boolean exc_02 = false; - - // if SDP info is unacceptable send 200 message to UE1 - if (r.sdpOffer.value == "unacceptable SDP offer" && - r.sdpOffer.isPresent()) { - requirement "Conformiq/EXC/exc_01"; - exc_01 = true; - } - - if (r.encryptedSDPOffer.isPresent() && - iut_reject_encrypted_SDP_offer) { - requirement "Conformiq/EXC/exc_02"; - exc_02 = true; - } - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - - // IUT receives a SIP ACK request - AnyRecord a = GmIn.receive(-1); - require (a instanceof SIPAckReq); - SIPAckReq req = (SIPAckReq) a; - require senderAndRecipient(req, UE1, UE2); - - /** - * UE1 has sent invite to UE2, IUT successfully forwarded this - * INVITE. UE2 answered with message 200 with wrong SDP offer - * values and now UE1 has sent a request ACK. - */ - - if (req.sdpAnswer.present == PRESENT) { - SIPByeResp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.reason.present = PRESENT; - resp.reason.value = RESPONSE_503_OR_488; - GmOut.send(resp); - - // forward the ACK request - req.sender = IUT; - GmOut.send(req); - - // and send a BYE request - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = UE2; - bye.reason.present = PRESENT; - bye.reason.value = RESPONSE_503_OR_488; - - requirement "Conformiq/EXC/SDP answer is present"; - - if (exc_01) - requirement "TP_IMST2_GM_EXC_01"; - if (exc_02) - requirement "TP_IMST2_GM_EXC_02"; - } - - } - - /** - * Function that handles a received 100 response on the Mw - * interface after e.g. an INVITE request. - */ - public void mw100Response(SIP100Resp p){ - // IUT simply consumes the received 100 response message - requirement "Conformiq/Responses/Mw received response 100"; - } - - /** - * UE1 registered to IUT, UE2 on remote IMS. UE1 has sent MESSAGE - * to UE2 and IUT has forwarded it. Now UE2 through Mw responds - * with 3xx redirect response that is not followed by any other - * message. NOTE 3xx is different from 305 response - */ - public void mw3xxResponse(SIP3xxResp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - require r.contact_header.isPresent(); - require r.contact_uri.value == "Contact URI"; - - requirement "TP_IMST2_MW_GEN_17"; - } - - /* - * UE1 is local but UE2 is on other IMS. UE1 has sent INVITE to - * UE2. IMS (UE2) sends 180 response. - */ - public void forwardMwToGm180Response(SIP180Resp resp) { - - // It is assumed here that IUT has sent a 100 response earlier - // to UE1 caller, and this comes only after this. - resp.sender = IUT; - resp.record_route_header.present = PRESENT; - resp.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF for security association" + - "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_06"; - } - - - - /** - * A 200 response received on the Gm interface because of sent - * MESSAGE is forwarded to recipient on Gm interface - */ - public void forwardGmToGm200MessageResponse(SIP200Resp resp) { - resp.sender = IUT; - // forward UE2 response to UE1 - requirement "TP_IMST2_GM_STA_03"; - GmOut.send(resp); - - // if received MESSAGE was sent to AS1 then forward also the - // 200 answer - if (iut_ifc_contact_as1_for_message && - iut_sent_message_to_as1) { - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.present = PRESENT; - resp.p_charging_vector_header.ioi_parameter.value = TYPE3; - resp.recipient = AS1; - IscOut.send(resp); - requirement "TP_IMST2_ISC_GEN_02"; - } - } - - /** - * A 200 response received on the Gm interface because of a sent - * INVITE message is forwarded to recipient on Gm interface - */ - public void forwardGmToGm200Response(SIP200Resp resp) { - - if (iut_sent_invite_to_as1 && - !as1_and_iut_in_same_net && - as1_indicated_iut_handles_dialog && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.sender = IUT; - resp.recipient = AS1; - if (iut_forwarded_target_refresh_invite) - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - if (iut_forwarded_target_refresh_invite) - requirement "TP_IMST2_ISC_TAR_04"; - else requirement "TP_IMST2_ISC_TAR_05"; - } - - resp.sender = IUT; - // forward UE2 response to UE1 - requirement "TP_IMST2_GM_INI_04"; - GmOut.send(resp); - - if (iut_sent_invite_to_as1) { - if (as1_and_iut_in_same_net) { - resp.recipient = AS1; - resp.p_charging_function_addresses_header.present = PRESENT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_02"; - return; - } - if (!as1_and_iut_in_same_net && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.access_net_charging_info_param.isPresent()) { - resp.recipient = AS1; - resp.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - IscOut.send(resp); - requirement "TP_IMST2_ISC_INI_04"; - return; - } - } - } - - - /** - * A 200 response received on the Mw interface is forwarded to - * recipient on Gm interface - * - * NB! It here assumed that the response messages 100 Trying and - * 180 Ringing have already been received and forwarded before the - * 200 Ok is received. - */ - public void forwardMwToGm200Response(SIP200Resp resp) { - - if (!iut_topology_hiding && - resp.p_charging_vector_header.isPresent() && - resp.p_charging_vector_header.ioi_parameter.isPresent()) { - resp.p_charging_vector_header.present = OMIT; - resp.sender = IUT; - - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_21"; - return; - } - - - resp.sender = IUT; - resp.record_route_header.present = PRESENT; - resp.record_route_header.SIP_URI_of_IUT_P_CSCF = "port number of IUT P-CSCF for security association" + - "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - GmOut.send(resp); - requirement "TP_IMST2_MW_INI_07"; - } - - /** - * A 200 response received on the Gm interface, as response to - * INVITE sent from Mw interface, is forwarded to recipient on Mw - * interface - */ - public void forwardGmToMw200Response(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (iut_has_stored_display_name && - r.p_preferred_identity_header.present == PRESENT) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.stored_display_name.present = PRESENT; - r.sender = IUT; - - MwOut.send(r); - requirement "TP_IMST2_MW_INI_09"; - return; - } - - if (iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwini11) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_INI_11/Forward 200"; - } - else { - requirement "TP_IMST2_MW_INI_11/No response"; - } - return; - } - - if (iut_stored_record_route_header && - r.record_route_header.isPresent() && - r.record_route_header.value == "header not matching stored Record-Route header") { - - if (iut_forward_mwini13) { - r.record_route_header.value = "stored Record-Route header" + - " + port number of Record-Route header of IUT P-CSCF" + - " + SIP URI port number of IUT P-CSCF" + - " + FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - r.record_route_header.comp_parameter.present = OMIT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_INI_13/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_13/No response"; - } - - return; - } - - if (r.sdpOffer.isPresent() && - r.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - // forward 200 to IMS - r.sender = IUT; - MwOut.send(r); - // get ACK back with SDP answer - AnyRecord a = MwIn.receive(-1); - require a instanceof SIPAckResp; - SIPAckResp ack = (SIPAckResp) a; - require ack.sdpAnswer.isPresent(); - require senderAndRecipient(ack, IMS, UE1); - - // send back BYE - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = IMS; - bye.method = BYE; - MwOut.send(bye); - - bye.recipient = UE1; - GmOut.send(bye); - requirement "TP_IMST2_MW_SDP_04"; - return; - } - - if (r.encryptedSDPOffer.isPresent()) { - // forward 200 to IMS - r.sender = IUT; - MwOut.send(r); - // get ACK back with SDP answer - AnyRecord a = MwIn.receive(-1); - require a instanceof SIPAckResp; - SIPAckResp ack = (SIPAckResp) a; - require ack.encryptedSDPAnswer.isPresent(); - require senderAndRecipient(ack, IMS, UE1); - - // send back BYE - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = IMS; - bye.method = BYE; - MwOut.send(bye); - - bye.recipient = UE1; - GmOut.send(bye); - requirement "TP_IMST2_MW_SDP_05"; - return; - } - - r.recipient = r.recipient; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.ioi_parameter.value = TYPE2; - r.p_charging_vector_header.orig_ioi_parameter.value = "[parameter of initial INVITE]"; - r.sender = IUT; - - MwOut.send(r); - requirement "TP_IMST2_MW_GEN_07"; - } - - - /** - * Visiting UE2 behind remote IMS has sent INVITE to UE1. IUT - * received this on the Mw interface and forwarded it to the Gm - * interface. Now UE1 answers through the Gm interface with 180 - * (ringing) which is forwarded to Mw interface. - */ - public void forwardGmToMw180Response(SIP180Resp resp) { - if (iut_has_stored_display_name && - resp.p_preferred_identity_header.present == PRESENT) { - resp.p_preferred_identity_header.present = OMIT; - resp.p_asserted_identity_header.present = PRESENT; - resp.p_asserted_identity_header.stored_display_name.present = PRESENT; - resp.sender = IUT; - - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_08"; - return; - } - - if (iut_stored_via_header && - resp.via_header.isPresent() && - resp.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwini10) { - resp.via_header.value = "stored Via header"; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_10/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_10/No response"; - } - return; - } - - if (iut_stored_record_route_header && - resp.record_route_header.isPresent() && - resp.record_route_header.value == "header not matching stored Record-Route header") { - - if (iut_forward_mwini12) { - resp.record_route_header.value = "stored Record-Route header" + - " + port number of Record-Route header of IUT P-CSCF" + - " + SIP URI port number of IUT P-CSCF" + - " + FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - resp.record_route_header.comp_parameter.present = OMIT; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_12/Forward 180"; - } - else { - requirement "TP_IMST2_MW_INI_12/No response"; - } - return; - } - - // TODO, 20.01.09: in the TP documentation the arrows and - // interfaces seem wrong. - if (resp.sdpOffer.isPresent() && - resp.sdpOffer.value == UNACCEPTABLE_MEDIA_PARAM) { - // don't send 4xx response back to IMS - - // forward 180 to IMS - MwOut.send(resp); - requirement "TP_IMST2_MW_SDP_03"; - return; - } - } - - - /** - * Remote UE2 has sent INVITE through Mw that has been forwarded - * to UE1 through Gm by the IUT. Now a 4xx response is received - * from Gm, sent by UE1 to UE2 behind Mw interface. - */ - public void forwardGmToMw4xxResponse(SIP4xxResp resp) { - - if (iut_stored_via_header && - resp.via_header.isPresent() && - resp.via_header.value == "not matching stored Via header") { - if (iut_forward_mwini14) { - resp.via_header.value = "stored Via header"; - resp.sender = IUT; - MwOut.send(resp); - requirement "TP_IMST2_MW_INI_14/Forward 4xx"; - } - else { - requirement "TP_IMST2_MW_INI_14/No response"; - } - return; - } - } - - /** - * Remote UE (UE2) has sent a message to local UE. Now recipient - * (UE1) sends a 200 OK response back to the sender (200 received - * on Gm and sent to Mw). - */ - public void forwardGmToMw200MessageResponse(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - /** - * if a MESSAGE has been received by the local user from the - * remote user, it is responded with a 200 response and header - * fields are manipulated! - */ - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_vector_header.value == "[headers of UE1]" && - r.p_charging_function_addresses_header.present == PRESENT && - r.p_charging_function_addresses_header.value == "[header of UE1]") { - - // the headers are removed! - r.p_charging_vector_header.present = OMIT; - r.p_charging_vector_header.value = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - r.p_charging_function_addresses_header.value = OMIT; - requirement "TP_IMST2_MW_GEN_12"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (r.p_access_network_info_header.present == PRESENT && - r.p_access_network_info_header.network_provide_parameter == PRESENT) { - r.p_access_network_info_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_14"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (r.p_media_authorization_header.present == PRESENT) { - r.p_media_authorization_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_16"; - r.sender = IUT; - MwOut.send(r); - return; - } - - if (iut_configured_entry_point_to_ims && - iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - if (iut_forward_mwsta06) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_STA_06/Forward 200 response"; - } - else { - requirement "TP_IMST2_MW_STA_06/Nothing sent"; - } - return; - } - - // TODO 15.01.09: condition that IUT has stored public user - // identity from P-Called-Party-ID header is missing here - if (iut_configured_entry_point_to_ims && - r.p_preferred_identity_header.isPresent()) { - r.p_preferred_identity_header.present = OMIT; - r.p_asserted_identity_header.present = PRESENT; - r.p_asserted_identity_header.stored_public_uid.present = PRESENT; - r.p_asserted_identity_header.stored_display_name.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_STA_07"; - return; - } - } - - /** - * UE1 has sent an INVITE request to UE2 to which UE2 now responds - * with an error message. - */ - public void forwardUE2Error4xxResponse(SIP4xxResp resp) { - - resp.sender = IUT; - - if (resp.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_ini06) { - resp.via_header.value = STORED_VIA_HEADER; - resp.sender = IUT; - GmOut.send(resp); - requirement "TP_IMST2_GM_INI_06/4xx Response"; - } - else { - requirement "TP_IMST2_GM_INI_06/no message"; - } - } - else { - // forward 4xx response from UE2 to UE1 - requirement "TP_IMST2_GM_INI_05"; - GmOut.send(resp); - } - - } - - // receiving a 4xx response from callee (UE2) to caller (UE1) - // after a MESSAGE has been sent from caller to callee (e.g. UE1 - // -> UE2) - public void forwardGmToGm4xxMessageResponse(SIP4xxResp p) { - p.sender = IUT; - requirement "TP_IMST2_GM_STA_04"; - GmOut.send(p); - } - - - /** - * Local caller UE (UE1) has sent a message to remote UE (UE2 on - * IMS), that now responds with a 200 OK to the sent message. - * - * It is not cared for what are the statuses of the UE2 equipment - * behind the Mw interface, thus no requirement for it e.g. to be - * registered. - */ - public void forwardMwToGm200MessageResponse(SIP200Resp r) { - require iut_configured_entry_point_to_ims; - require !iut_topology_hiding; - - // forwarding of the 200 response received after a MESSAGE has - // been sent from remote callee to local caller - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_function_addresses_header.present == PRESENT) { - // remove headers from response before forwarding - r.p_charging_vector_header.present = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_GEN_10"; - return; - } - - GmOut.send(r); - requirement "TP_IMST2_MW_STA_04"; - } - - - /* - * Sending ACK by the caller to the callee (UE1->UE2). Two - * possible cases: UEs are both local or UE1 is local and UE2 is - * visiting (on other IMS). - */ - public void handleAck(SIPAckReq req) { - current_ue = getUENro(req.sender); - - // LOCAL UEs - if (localConnections() && callingUE1RingingUE2()) { - connections[current_ue].connected = true; - connections[1-current_ue].connected = true; - GmOut.send(req); - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - !iut_and_as1_in_same_trust_domain) { - req.p_access_network_info_header.present = OMIT; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - req.sender = IUT; - req.recipient = AS1; - IscOut.send(req); - requirement "TP_IMST2_ISC_SUB_01"; - } - - // TODO 31.12.08 - the below TP seems to be outdated, not - // in TP doc - //requirement "TP_IMST2_GM_INI_04"; - } - - // LOCAL caller UE1 and remote callee UE2 - // forward ACK from local UE1 to neighbour UE2 behind Mw - // interface - else if (localUE1VisitingUE2() && current_ue == ue1) { - // TPs MW_GEN_06 and 08 have the same preconditions but - // TPs check different things at response (sent response - // is different) - req.recipient = IMS; - req.p_charging_function_addresses_header.present = OMIT; - req.p_charging_function_addresses_header.value = "[CDF addresses OR OCF addresses]"; - requirement "TP_IMST2_MW_GEN_08"; - req.p_charging_vector_header.present = PRESENT; - req.p_charging_vector_header.ioi_parameter.value = TYPE2; - requirement "TP_IMST2_MW_GEN_06"; - MwOut.send(req); - // a successful call created over IUT to UE2 on remote IMS - connections[current_ue].connected = true; - connections[1-current_ue].connected = true; - } - } - - public void forwardGmToGmMessage(SIPMessageReq p) { - - if (p.message_body == LARGE_BODY) { - requirement "TP_IMST2_GM_GEN_01"; - GmOut.send(p); - return; - } - - // if the IUT configured with an iFC designed to contact AS1 - // for MESSAGE, then do so. Update local variable to true; - if (iut_ifc_contact_as1_for_message) { - if (iut_and_as1_in_same_trust_domain) { - p.p_asserted_service_header.present = PRESENT; - p.topmost_route_header.present = PRESENT; - p.topmost_route_header.value = "SIP URI of AS1"; - p.second_route_header.present = PRESENT; - p.second_route_header.value = SIP_URI_OF_IUT_SCSCF; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.value = "type3 orig-ioi parameter before the received orig-ioi parameters"; - p.sender = IUT; - Isc1Out.send(p); - requirement "TP_IMST2_ISC_STA_01"; - iut_sent_message_to_as1 = true; - saved_message_req = p; - } - else { - SIPMessageReq msg = p; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.value = TYPE3; - msg.sender = IUT; - msg.recipient = AS1; - IscOut.send(msg); - requirement "TP_IMST2_ISC_GEN_01"; - iut_sent_message_to_as1 = true; - } - } - - if (iut_sent_message_to_as1) { - SIPMessageReq msg = p; - msg.p_charging_vector_header.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.present = PRESENT; - msg.p_charging_vector_header.ioi_parameter.value = TYPE3; - msg.sender = IUT; - msg.recipient = AS1; - IscOut.send(msg); - requirement "TP_IMST2_ISC_GEN_03"; - } - - if (iut_forward_message_to_as1) { - if (p.p_charging_vector_header.isPresent()) { - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - if (p.p_charging_vector_header.icid_parameter.isPresent()) - requirement "TP_IMST2_ISC_STA_10"; - if (p.p_charging_vector_header.icid_parameter.isOmit()) - requirement "TP_IMST2_ISC_STA_11"; - } - } - - // UE1 sends MESSAGE to IUT, depending on header fields 400 or - // 100 response is sent back on Gm interface - if (p.record_route_header.value == ROUTE_HEADER_NOT_MATCHING) { - if (iut_forward_message_sta01) { - // respond 100 to UE1 and forward message to UE2 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("100"); - requirement "TP_IMST2_GM_STA_01/Forward message"; - trace("The IUT was initially configured initially to forward message to UE2"); - GmOut.send(resp); - - // forwarding received - p.sender = IUT; - GmOut.send(p); - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("400"); - requirement "TP_IMST2_GM_STA_01/Answer 400"; - GmOut.send(resp); - // respond 400 to UE1 and send nothing to UE2 - } - return; - } - - // if the received message has nothing special then forward it - // to UE2 and send response 100 to sender UE1 - { - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - resp.method = respond("100"); - requirement "TP_IMST2_GM_STA_02"; - GmOut.send(resp); - - // forwarding received - p.sender = IUT; - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - return; - } - } - - /** - * UE1 has sent MESSAGE on Gm and IUT has forwarded this to - * Isc1. Now received 5xx response so forwarding MESSAGE again but - * now to Isc2. - */ - public void iscHandle5xxResponse(SIP5xxResp resp){ - if (iut_forward_iscsta05) { - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_05"; - return; - } - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_02"; - return; - } - - public void iscHandle408Response(SIP408Resp resp){ - if (iut_forward_iscsta06) { - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_06"; - return; - } - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_03"; - return; - } - - public void iscHandleTimeoutResponse() { - saved_message_req.recipient = AS2; - Isc2Out.send(saved_message_req); - requirement "TP_IMST2_ISC_STA_04"; - return; - } - - public void iscHandle200Response(SIP200Resp resp) { - if (iut_as1_indicated_handling_whole_dialog) { - resp.sender = IUT; - resp.recipient = AS1; - resp.p_charging_vector_header.present = PRESENT; - resp.p_charging_vector_header.orig_ioi_parameter.value = "type3 orig-ioi parameter from the initial MESSAGE"; - resp.p_charging_vector_header.term_ioi_parameter.value = "type3 term-ioi parameter"; - Isc1Out.send(resp); - requirement "TP_IMST2_ISC_STA_08"; - return; - } - resp.sender = IUT; - resp.recipient = UE1; - GmOut.send(resp); - requirement "TP_IMST2_ISC_STA_07"; - return; - } - - /** - * When a local UE (UE1) sends a MESSAGE to the remote UE - * (i.e. the IMS) the message is forwarded from Gm to Mw interface - * with some message content varied. - */ - public void forwardGmToMwMessage(SIPMessageReq p) { - require iut_configured_entry_point_to_ims; - - if (p.route_header.isPresent() && - p.route_header.value == "Route header not matching stored Service-Route header") { - if (iut_forward_mwsta01) { - p.route_header.value = "stored Record-Route header"; - p.sender = IUT; - p.recipient = IMS; - MwOut.send(p); - requirement "TP_IMST2_MW_STA_01/Forward MESSAGE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_STA_01/Respond 400"; - } - return; - } - - if (p.p_preferred_identity_header.isPresent()){ - p.p_preferred_identity_header.present = OMIT; - p.p_asserted_identity_header.present = PRESENT; - p.p_asserted_identity_header.stored_display_name.present = PRESENT; - p.p_asserted_identity_header.stored_display_name.value = "stored display name parameter"; - p.sender = IUT; - MwOut.send(p); - requirement "TP_IMST2_MW_STA_02"; - return; - } - - if (p.p_charging_vector_header.present == PRESENT && - p.p_charging_vector_header.value == "[headers of UE1]" && - p.p_charging_function_addresses_header.present == PRESENT && - p.p_charging_function_addresses_header.value == "[header of UE1]") { - // remove the header fields - p.p_charging_vector_header.present = OMIT; - p.p_charging_function_addresses_header.present = OMIT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_11"; - return; - } - - if (p.p_media_authorization_header.present == PRESENT) { - p.p_media_authorization_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_15"; - MwOut.send(p); - return; - } - - if (p.p_access_network_info_header.present == PRESENT && - p.p_access_network_info_header.network_provide_parameter == PRESENT) { - - p.p_access_network_info_header.present = OMIT; - requirement "TP_IMST2_MW_GEN_13"; - MwOut.send(p); - return; - } - - if (p.message_body == LARGE_BODY) { - requirement "TP_IMST2_MW_GEN_01"; - } - // IMS not configured for being in the same trust domain as IUT. - if (!iut_ims_in_same_trust_domain) { - p.p_access_network_info_header.present = OMIT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_02"; - return; - } - - - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.icid_parameter.present = PRESENT; - MwOut.send(p); - requirement "TP_IMST2_MW_GEN_03"; - - if (iut_stored_service_route_header) { - requirement "TP_IMST2_MW_STA_03"; - } - return; - } - - /** - * Received a MESSAGE on Gm interface, topology hiding is set so - * message is forwarded to the Ic interface. - */ - public void forwardGmToIcMessage(SIPMessageReq p) { - p.topmost_via_header.present = PRESENT; - p.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - p.encrypted_sip_uri.present = PRESENT; - p.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - p.p_charging_vector_header.present = OMIT; - p.p_charging_function_addresses_header.present = OMIT; - p.sender = IUT; - Ic1Out.send(p); - requirement "TP_IMST2_IC_STA_01"; - return; - } - - /** - * IUT has established an INVITE dialog for UE1 through Ic - * interface. - */ - public void forwardGmToIcBye(SIPByeReq bye) { - bye.topmost_via_header.present = PRESENT; - bye.topmost_via_header.value = "SIP URI of IBCF"; - bye.encrypted_sip_uri.present = PRESENT; - bye.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - bye.sender = IUT; - Ic1Out.send(bye); - requirement "TP_IMST2_IC_SUB_01"; - return; - } - - /** - * BYE received from IMS on Ic interface. - */ - public void forwardIcToGmBye(SIPByeReq bye) { - if (bye.topmost_via_header.isPresent() && - bye.topmost_via_header.value == "-> SIP URI of IBCF" && - bye.encrypted_sip_uri.isPresent() && - bye.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - bye.any_header.present = OMIT; - bye.sender = IUT; - GmOut.send(bye); - requirement "TP_IMST2_IC_SUB_04"; - return; - } - } - - /** - * Response to an BYE initiated by the UE1 and sent to Ic1 - * interface. - */ - public void forwardIcToGm200ByeResponse(SIP200Resp resp) { - resp.any_header.present = OMIT; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - resp.sender = IUT; - GmOut.send(resp); - requirement "TP_IMST2_IC_SUB_02"; - return; - } - - public void forwardGmToIc200ByeResponse(SIP200Resp resp) { - resp.topmost_via_header.present = PRESENT; - resp.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - resp.encrypted_sip_uri.present = PRESENT; - resp.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - resp.sender = IUT; - Ic1Out.send(resp); - requirement "TP_IMST2_IC_SUB_05"; - return; - } - - /** - * SIP MESSAGE is received during ongoing dialog from Ic - * interface, it is then forwarded to UE1 through Gm interface. - */ - public void forwardIcToGmMessage(SIPMessageReq msg) { - if (msg.topmost_via_header.isPresent() && - msg.topmost_via_header.value == SIP_URI_OF_IMS && - msg.encrypted_sip_uri.isPresent() && - msg.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - msg.any_header.present = OMIT; - msg.sender = IUT; - GmOut.send(msg); - requirement "TP_IMST2_IC_SUB_03"; - return; - } - } - - /** - * A message received from the remote UE on the Mw interface is - * forwarded onto the Gm interface and stripped off of some header - * field values. - * - * Here it is assumed that the message recipient is UE1 as local - * and the remote user UE2 sends the message. - */ - public void forwardMwToGmMessage(SIPMessageReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (r.p_charging_vector_header.present == PRESENT && - r.p_charging_function_addresses_header.present == PRESENT) { - - r.p_charging_vector_header.present = OMIT; - r.p_charging_function_addresses_header.present = OMIT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_GEN_09"; - return; - } - - int sender_ue = getUENro(r.recipient); // UE1 should be the recipient - if (connections[sender_ue].security_association) { - r.via_header.present = PRESENT; - r.via_header.port_number.present = PRESENT; - r.via_header.fqdn_address.present = PRESENT; - r.via_header.fqdn_address.value = "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF for security association"; - r.p_charging_vector_header.present = OMIT; - r.p_charging_vector_header.icid_parameter.present = PRESENT; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_STA_05"; - return; - } - } - - - /** - * The sender and recipient of a BYE message are set into the - * "disconnecting" state if the BYE message is forwarded by the - * IUT to the recipient. - */ - public void gmSendsByeToGm(SIPByeReq p) { - current_ue = getUENro(p.sender); - - SIP400Resp resp; - resp.sender = IUT; - - if (current_ue == ue1) { - resp.recipient = UE2; - // upon getting a bye before call has been setup the caller is - // sent a 403 response and nothing to the callee. - if (p.record_route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - resp.method = respond("400"); - requirement "TP_IMST2_GM_SUB_02/Respond 400"; - GmOut.send(resp); - - if (iut_forward_message_sub02) { - p.sender = IUT; - requirement "TP_IMST2_GM_SUB_02/Forward BYE"; - trace("IUT was initially configured to forward BYE request"); - GmOut.send(p); - } - } - else { - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - - connections[current_ue].disconnecting = true; - connections[1-current_ue].disconnecting = true; - requirement "TP_IMST2_GM_SUB_04"; - if (connections[current_ue].disconnecting && - connections[1-current_ue].disconnecting) - requirement "Conformiq/Gm/UE1 sent BYE, UEs disconnecting"; - } - } - - else { // UE2 is sender - // BYE message with mismatching Route-Header: a 400 - // response is sent back to sender (UE2) and either - // nothing is sent to recipient (UE1) or the BYE is - // forwarded - if (p.record_route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - if (iut_forward_message_sub03) { - p.sender = IUT; - GmOut.send(p); - trace("IUT was initially configured to forward BYE request if Route-Header is mismatching"); - requirement "TP_IMST2_GM_SUB_03/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = UE2; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_GM_SUB_03/Return response 400"; - // nothing is sent to UE1 - } - } - else { - p.p_charging_vector_header.present = OMIT; - GmOut.send(p); - - requirement "TP_IMST2_GM_SUB_05"; - connections[current_ue].disconnecting = true; - connections[1-current_ue].disconnecting = true; - if (connections[current_ue].disconnecting && - connections[1-current_ue].disconnecting) - requirement "Conformiq/Gm/UE2 sent BYE, UEs disconnecting"; - } - } - } - - - /** - * UE2 behing Mw on remote IMS sends a BYE request to UE1 on local - * IUT. - */ - public void mwSendsByeToGm(SIPByeReq b) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (b.callid_header.isPresent() && - b.callid_header.value == "|| existent dialog") { - // nothing is forwarded to Gm interface but 403 sent back - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("403"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_04"; - return; - } - - if (iut_stored_record_route_header && - b.record_route_header.isPresent() && - b.record_route_header.value == "Record-Route header not matching stored Record.Route header") { - if (iut_forward_mwsub05) { - b.record_route_header.value = "stored Record-Route header"; - b.recipient = b.sender; - b.sender = IUT; - MwOut.send(b); - requirement "TP_IMST2_MW_SUB_05/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("400"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_05/Respond 400"; - } - return; - } - - if (connections[ue1].security_association) { - b.via_header.present = PRESENT; - b.via_header.port_number.present = PRESENT; - b.via_header.fqdn_address.present = PRESENT; - b.via_header.fqdn_address.value = "FQDN address of IUT P-CSCF or IP address of IUT P-CSCF for security association"; - b.p_charging_vector_header.present = OMIT; - b.p_charging_vector_header.icid_parameter.present = PRESENT; - b.sender = IUT; - GmOut.send(b); - requirement "TP_IMST2_MW_SUB_07"; - connections[ue2].disconnecting = true; - // lets set the current UE as -1 to indicate that the IMS (UE2 - // behind an IMS) is requesting BYE and not UE1 or UE2 - // directly on this IUT. - current_ue = -1; - } - } - - /** - * UE1 locally registered on IUT and UE2 registered on remote - * IMS. UE1 has sent BYE on Gm interface to UE2 behind Mw. - */ - public void gmSendsByeToMw(SIPByeReq b) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (b.callid_header.isPresent() && - b.callid_header.value == "||existent dialog") { - // don't forward BYE on MW but reply 403 on Gm - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_MW_SUB_01"; - return; - } - - if (b.route_header.isPresent() && - b.route_header.value == "Route header not mathing stored Record-Route header") { - if (iut_forward_mwsub02) { - b.route_header.present = PRESENT; - b.route_header.value = "stored Record-Route header"; - b.sender = IUT; - MwOut.send(b); - requirement "TP_IMST2_MW_SUB_02/Forward BYE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = b.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_SUB_02/Respond 400"; - } - return; - } - - MwOut.send(b); - connections[ue1].disconnecting = true; - current_ue = getUENro(b.sender); - requirement "Conformiq/Bye/Gm to Mw BYE request"; - } - - /** - * For two UE that have registered to the IUT, but that are have - * not a session setup or in the phase of creating one. It is - * still possible to receive a BYE from other UE and this should - * be handled. It is assumed that this happens only with local - * connections. - */ - public void byeToRegisteredConnection(SIPByeReq p) { - - // UE1 and UE2 are registered but have not a dialog - if (p.sender == UE1) { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("403"); - requirement "TP_IMST2_GM_SUB_01"; - GmOut.send(resp); - } - } - - public void byeWhenAlreadyDisconnecting(SIPByeReq p, boolean localconnections) { - - if (localconnections) { - // if UE1 sends a second BYE once UE1 and UE2 are already in a - // disconnecting state. A 481 response is sent back to UE1 and - // 200 sent again to UE2. - if (senderAndRecipient(p, UE1, UE2) && - bothUEsDisconnecting()) { - SIP481Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("481"); - GmOut.send(resp); - SIP200Resp resp2; - resp2.recipient = UE2; - resp2.method = respond("200"); - GmOut.send(resp2); - requirement "TP_IMST2_GM_SUB_10"; - } - } - - else { // localUE1VisitingUE2 - if (iut_configured_entry_point_to_ims && - !iut_topology_hiding && - senderAndRecipient(p, IMS, UE1)) { - SIP481Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("481"); - MwOut.send(resp); - requirement "TP_IMST2_MW_SUB_09"; - } - } - return; - } - - public void gmBye200Response(SIP200Resp p) { - - if (p.sender == UE1) { - if (localUE1VisitingUE2()) { - gmBye200ResponseToMw(p); - return; - } - - // this has to have both UEs as local - else if (p.via_header.value == NOT_MATCHING_VIA_HEADER && localConnections()) { - if (iut_forward_message_sub09) { - p.sender = IUT; - p.via_header.value = STORED_VIA_HEADER; - GmOut.send(p); - trace("IUT was initially configured to forward BYE if Via Header value equals stored."); - requirement "TP_IMST2_GM_SUB_09/Forward 200"; - } - - else { // nothing is sent out - requirement "TP_IMST2_GM_SUB_09/no message"; - } - } - - else - requirement "TP_IMST2_GM_SUB_07"; - } - - else { // sender is UE2 on IUT (not behind IMS) - if (p.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_sub08) { - p.sender = IUT; - p.via_header.value = STORED_VIA_HEADER; - GmOut.send(p); - trace("IUT was initially configured to forward BYE if Via Header does not match."); - requirement "TP_IMST2_GM_SUB_08/Forward 200"; - } - else { - // do not forward anything - requirement "TP_IMST2_GM_SUB_08/no message"; - } - } - - else { - requirement "TP_IMST2_GM_SUB_06"; - } - } - } - - - /** - * UE1 local, UE2 remote. UE2 has sent BYE to UE1 on IUT and now - * UE1 responds with 200 OK - */ - public void gmBye200ResponseToMw(SIP200Resp r) { - if (r.via_header.isPresent() && - r.via_header.value == "Via header not matching stored Via header") { - r.sender = IUT; - if (iut_forward_mwsub08) { - r.via_header.value = "stored Via header"; - MwOut.send(r); - requirement "TP_IMST2_MW_SUB_08/Forward 200"; - } - else { - requirement "TP_IMST2_MW_SUB_08/Nothing sent"; - } - } - } - - - /** - * A secondary invite is received after initial INIVITE was sent - * and a response 100 was received. - */ - // if an INVITE request is received when session is NOT ongoing - public void targetRefreshInviteNoSession(SIPInviteReq p) { - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - !iut_and_as1_in_same_trust_domain) { - p.p_access_network_info_header.present = OMIT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - SIP100Resp r; - r.sender = IUT; - r.recipient = UE1; - r.method = respond("100"); - GmOut.send(r); - requirement "TP_IMST2_ISC_TAR_01"; - return; - } - - if (as1_indicated_iut_handles_dialog && - iut_sent_invite_to_as1 && - iut_and_as1_in_same_trust_domain) { // this is not - // explicitly required - // but putting here to - // distinguish from - // previous condition - if (as1_and_iut_in_same_net) { - p.p_access_network_info_header.present = PRESENT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = PRESENT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_TAR_02"; - } - else { - p.p_access_network_info_header.present = OMIT; - p.p_charging_vector_header.present = PRESENT; - p.p_charging_vector_header.access_net_charging_info_param.present = OMIT; - p.sender = IUT; - p.recipient = AS1; - IscOut.send(p); - requirement "TP_IMST2_ISC_TAR_03"; - } - SIP100Resp r; - r.sender = IUT; - r.recipient = UE1; - r.method = respond("100"); - GmOut.send(r); - } - - if (p.route_header.value == NOT_MATCHING_STORED_ROUTE_HEADER) { - if (iut_forward_message_tar02) { - // respond 100 to UE1 and forward INVITE - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("100"); - GmOut.send(resp); - p.sender = IUT; - GmOut.send(p); - requirement "TP_IMST2_GM_TAR_02/Forward INVITE"; - iut_forwarded_target_refresh_invite = true; - } - - // INVITE not forwarded but sender is replied with error - // message - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = p.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_GM_TAR_02/Respond 400"; - } - - // these are added here to force generation of both - // branches since the else branch is needed later to cover - // isc_tar_04. - if (iut_forwarded_target_refresh_invite) - requirement "Conformiq/Refresh/iut forwarded refresh invite"; - else - requirement "Conformiq/Refresh/iut did NOT forward refresh invite"; - } - - // refresh INVITE request for non existing dialog is sent - // response 403 - else { - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = UE1; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_GM_TAR_01"; - } - } - - - - - // target refresh INVITE request while session is already up - public void targetRefreshInviteSessionUp(SIPInviteReq p) { - current_ue = getUENro(p.sender); // used to check responses - - SIP100Resp resp; - resp.sender = IUT; - - if (p.sender == UE1) { - resp.recipient = UE1; - requirement "TP_IMST2_GM_TAR_03"; - } - - else { // sender == UE2 - resp.recipient = UE2; - requirement "TP_IMST2_GM_TAR_04"; - } - resp.method = respond("100"); - GmOut.send(resp); - p.sender = IUT; - GmOut.send(p); - } - - /** - * UE1 local sends refresh UPDATE to UE2 visiting on remote IMS. - */ - public void targetRefreshUpdateMwSessionUp(SIPUpdateReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - // nothing is forwarded - SIP403Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("403"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_01"; - return; - } - - /** - * UE1 local sends a refresh INVITE to UE2 on remote IMS. - */ - public void targetRefreshInviteMwSessionUp(SIPInviteReq r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (r.sender == UE1) { - if (r.route_header.isPresent() && - r.route_header.value == "Route header not matching stored Record-Route header") { - r.sender = IUT; - if (iut_forward_mwtar02) { - r.route_header.value = "stored Record-Route header"; - MwOut.send(r); - - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_02/Forward INVITE"; - } - else { - SIP400Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("400"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_02/Respond 400"; - } - return; - } - - // emergency refresh INVITE - if (r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent() && - connections[ue1].emergency_registered && - iut_configured_for_emergency_sessions) { - r.request_uri.value = "UE1 IP address protected server port number"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_06"; - return; - } - - if (iut_configured_for_emergency_sessions - /* && UE1 has established an emergency session */ && - r.request_uri.isPresent() && - r.request_uri.GRUU_parameter.isPresent()) { - r.request_uri.value = "UE1 IP address protected server port number"; - r.recipient = r.sender; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_EME_10"; - return; - } - - - // successful refresh INVITE - r.via_header.present = PRESENT; - r.via_header.port_number.value = "port number of IUT P-CSCF"; - r.via_header.ip_address.value = "IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - r.record_route_header.present = PRESENT; - r.record_route_header.SIP_URI_of_IUT_P_CSCF = "-> port number of IUT P-CSCF" + - "->FQDN address of IUT P-CSCF or IP address of IUT P-CSCF"; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.update_access_network_charging_info_parameter.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - mw_refresh_invite_sent = true; - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - GmOut.send(resp); - requirement "TP_IMST2_MW_TAR_03"; - return; - } - - // successful refresh INVITE by UE2 - if (r.sender == IMS) { - r.via_header.present = PRESENT; - r.via_header.port_number.value = "port number of IUT P-CSCF for security association"; - r.via_header.ip_address.value = "as topmost the IP address of IUT P-CSCF or FQDN address of IUT P-CSCF"; - r.record_route_header.present = PRESENT; - r.record_route_header.SIP_URI_of_IUT_P_CSCF = "-> as topmost the SIP URI of IUT P-CSCF"; - r.sender = IUT; - GmOut.send(r); - mw_refresh_invite_sent = true; - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = r.sender; - resp.method = respond("100"); - MwOut.send(resp); - requirement "TP_IMST2_MW_TAR_05"; - return; - } - } - - - public void targetRefreshInviteIcSessionUp(SIPInviteReq req) { - require iut_topology_hiding; - - if (req.sender == UE1) { - // respond 100 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.method = respond("100"); - GmOut.send(resp); - - req.sender = IUT; - req.topmost_via_header.present = PRESENT; - req.topmost_via_header.value = SIP_URI_OF_IUT_IBCF; - req.encrypted_sip_uri.present = PRESENT; - req.encrypted_sip_uri.value = TOKENIZED_BY_PARAMETER; - Ic1Out.send(req); - requirement "TP_IMST2_IC_TAR_01"; - return; - } - - if (req.sender == IMS && - req.topmost_via_header.isPresent() && - req.topmost_via_header.value == SIP_URI_OF_IUT_IBCF && - req.encrypted_sip_uri.isPresent() && - req.encrypted_sip_uri.value == TOKENIZED_BY_PARAMETER) { - // respond 100 - SIP100Resp resp; - resp.sender = IUT; - resp.recipient = req.sender; - resp.method = respond("100"); - Ic1Out.send(resp); - - // forward refresh INVITE - req.any_header.present = OMIT; - req.sender = IUT; - GmOut.send(req); - requirement "TP_IMST2_IC_TAR_02"; - return; - } - } - - public void targetRefresh180Response(SIP180Resp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_06"; - } - if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_05"; - } - p.sender = IUT; - GmOut.send(p); - } - - public void targetRefresh200Response(SIP200Resp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - SIPAckResp aresp; - aresp.sender = IUT; - aresp.recipient = p.sender; - GmOut.send(aresp); - - SIP200Resp resp; - resp.sender = IUT; - resp.recipient = p.recipient; - GmOut.send(p); - - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_08"; - } - if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_07"; - } - } - - - /** - * local UE1 sent refresh INVITE to remote UE2. Now remote UE2 - * answers with 200 OK. - */ - public void targetRefreshMw200Response(SIP200Resp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - require connections[ue1].security_association; - - if (r.sender == IMS) { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "Record Route header of IUT P-CSCF -> same address same port number of IUT P-CSCF of response to initial INVITE"; - r.sender = IUT; - GmOut.send(r); - requirement "TP_IMST2_MW_TAR_04"; - return; - } - - // target refresh was sent by UE2 on remote IMS and now UE1 - // sends 200 response - if (r.sender == UE1) { - if (r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header" && - iut_stored_via_header) { - if (iut_forward_mwtar06) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_06/Forward 200"; - } - else { - requirement "TP_IMST2_MW_TAR_06/Nothing sent"; - } - } - - if (connections[ue1].security_association && - iut_stored_record_route_header) { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "-> stored Record-Route header"; - r.p_charging_vector_header.present = PRESENT; - r.p_charging_vector_header.update_access_network_charging_info_parameter.present = PRESENT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_07"; - } - } - } - - /** - * During dialog ongoing a target refresh INVITE was received with - * special header values. - */ - public void targetRefresh4xxResponse(SIP4xxResp p) { - // the sender of the response has to be the recipient of the - // INVITE message - int ue = getUENro(p.sender); - require current_ue == 1-ue; - - if (p.via_header.value == NOT_MATCHING_VIA_HEADER) { - if (iut_forward_message_tar11) { - if (senderAndRecipient(p, UE2, UE1)) - requirement "TP_IMST2_GM_TAR_11/Forward 4xx"; - else - requirement "TP_IMST2_GM_TAR_12/Forward 4xx"; - - // forward modified response - p.via_header.value = STORED_VIA_HEADER; - p.sender = IUT; - GmOut.send(p); - } - - // no message is forwarded - else { - if (senderAndRecipient(p, UE2, UE1)) - requirement "TP_IMST2_GM_TAR_11/No message"; - else - requirement "TP_IMST2_GM_TAR_12/No message"; - } - } - - else { - GmOut.send(p); - if (senderAndRecipient(p, UE1, UE2)){ - requirement "TP_IMST2_GM_TAR_10"; - } - else if (senderAndRecipient(p, UE2, UE1)) { - requirement "TP_IMST2_GM_TAR_09"; - } - } - } - - - /** - * UE2 on remote IMS has sent target refresh to UE1 on local - * IUT. Now IUT receives a 4xx response to this refresh. - */ - public void targetRefreshMw4xxResponse(SIP4xxResp r) { - require !iut_topology_hiding; - require iut_configured_entry_point_to_ims; - - if (iut_stored_via_header && - r.via_header.isPresent() && - r.via_header.value == "not matching stored Via header") { - - if (iut_forward_mwtar08) { - r.via_header.value = "stored Via header"; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_08/Forward 4xx"; - } - else { - requirement "TP_IMST2_MW_TAR_08/Nothing sent"; - } - } - else { - r.record_route_header.present = PRESENT; - r.record_route_header.value = "-> IP address of IUT P-CSCF\n"+ - "-> port number of IUT P-CSCF"; - r.record_route_header.comp_parameter.present = OMIT; - r.sender = IUT; - MwOut.send(r); - requirement "TP_IMST2_MW_TAR_09"; - } - return; - } - - - /** - * If the registration timeout of UE1 timeouts when UE2 is remote - * on IMS. IUT then sends BYE to UE1 and UE2 to end dialog. - */ - public void ue1RegistrationTimeout() { - SIPByeReq bye; - bye.sender = IUT; - bye.recipient = UE1; - GmOut.send(bye); - bye.recipient = UE2; - bye.request_uri.present = PRESENT; - bye.request_uri.value = "stored Contact header from initial INVITE"; - bye.to.present = PRESENT; - bye.to.value = "To header from 200 response"; - bye.from.present = PRESENT; - bye.from.value = "From header from initial INVITE"; - bye.callid_header.present = PRESENT; - bye.callid_header.value = "From header from initial INVITE"; - bye.cseq.present = PRESENT; - bye.cseq.value = "CSeq header is stored for direction calling to called"; - bye.route_header.present = PRESENT; - bye.route_header.value = "as stored for dialog"; - bye.reason.present = PRESENT; - MwOut.send(bye); - requirement "TP_IMST2_MW_SUB_10"; - } - -// ---xxx---- helper functions follow --- - - - private boolean callingUE1RingingUE2() { - return connections[ue1].calling && connections[ue2].ringing; - } - - - private boolean localConnections() { - return connections[ue1].is_home_net && connections[ue2].is_home_net; - } - - private boolean localUE1VisitingUE2() { - return connections[ue1].is_home_net && !connections[ue2].is_home_net; - } - - private boolean isVisiting(SIPPacket p) { - require p.sender == UE1 || p.sender == UE2; - int i = getUENro(p.sender); - return !connections[i].is_home_net; - } - - private boolean registered(String ue) { - int i = getUENro(ue); - return connections[i].registered; - } - - private boolean bothUEsDisconnecting() { - return (connections[ue1].disconnecting && - connections[ue2].disconnecting); - } - - private boolean bothUEsConnected() { - return (connections[ue1].connected && - connections[ue2].connected); - } - - private boolean bothUEsRegistered() { - return (connections[ue1].registered && - connections[ue2].registered); - } - - private String respond(String str) { - return "["+ str + " response]"; - } - - public int getUENro(String ue) { - assert (ue == UE1 || ue == UE2); - // UE1 has place holder 0 in the connections table - return ue == UE1 ? 0 : 1; - } - - // the variable current_ue is set at first registration message - // received by the IUT. If UE1 started registration then it needs - // to be the recipient of the following response - // message. - public void requireCurrentRecipient(String recipient) { - if (current_ue == ue1) - require recipient == UE1; - if (current_ue == ue2) - require recipient == UE2; - } - - // don't allow registration of UE if it is already registered or - // that is in the process of registering - public void requireUENotRegistered(int ue) { - if (connections[ue].registered || connections[ue].registering) - require false; - } - - // return the UE's name that has initiated e.g. a registration - // sequence - public String initiatingUE() { - return current_ue == ue1 ? UE1 : UE2; - } - - public boolean senderAndRecipient(SIPPacket msg, String ueA, String ueB) { - return msg.sender == ueA && msg.recipient == ueB; - } - - public void saveConfiguration(configSystemReq c) { - // save network configuration settings - saveIMSConfiguration(c.net); - // save UE1 configuration settings - setUEConfiguration(c.ue1, ue1); - setUEConfiguration(c.ue2, ue2); - } - - - public void saveIMSConfiguration(configNetworkReq c) { - iut_security_association = c.security_association; - iut_topology_hiding = c.topology_hiding; - iut_configured_entry_point_to_ims = c.configured_entry_point_to_ims; - iut_configured_for_emergency_sessions = c.configured_for_emergency_sessions; - iut_ims_in_same_trust_domain = c.same_trust_domain; - iut_forward_message_ini02 = c.forward_ini02; - iut_forward_message_ini06 = c.forward_ini06; - iut_forward_message_sta01 = c.forward_sta01; - iut_forward_message_sub02 = c.forward_sub02; - iut_forward_message_sub03 = c.forward_sub03; - iut_forward_message_sub08 = c.forward_sub08; - iut_forward_message_sub09 = c.forward_sub09; - iut_forward_message_tar11 = c.forward_tar11; - iut_forward_message_tar02 = c.forward_tar02; - iut_respond_408_reg09 = c.response_reg09; - iut_reject_encrypted_SDP_offer = c.encrypted_sdp_offer; - iut_respond_401_mwreg24 = c.respond_401_mwreg24; - iut_forward_mwini03 = c.forward_mwini03; - iut_has_stored_display_name = c.stored_display_name; - iut_forward_mwini10 = c.forward_mwini10; - iut_stored_via_header = c.stored_via_header; - iut_forward_mwini11 = c.forward_mwini11; - iut_forward_mwini12 = c.forward_mwini12; - iut_forward_mwini13 = c.forward_mwini13; - iut_stored_record_route_header = c.stored_record_route_header; - iut_forward_mwini14 = c.forward_mwini14; - iut_requiring_periodic_refresh = c.requiring_periodic_refresh; - iut_forward_mwsta01 = c.forward_mwsta01; - iut_stored_service_route_header = c.stored_service_route_header; - iut_forward_mwsta06 = c.forward_mwsta06; - iut_forward_mwsub02 = c.forward_mwsub02; - iut_forward_mwsub05 = c.forward_mwsub05; - iut_forward_mwsub08 = c.forward_mwsub08; - iut_forward_mwtar02 = c.forward_mwtar02; - iut_forward_mwtar06 = c.forward_mwtar06; - iut_forward_mwtar08 = c.forward_mwtar06; - iut_stored_display_name = c.stored_display_name; - iut_configured_entry_point_to_home_net= c.configured_entry_point_to_home_net; - iut_conf_two_entry_points_to_home_net = c.conf_two_entry_points_to_home_net; - iut_send_408_icreg04 = c.send_408_icreg04; - iut_send_408_icreg05 = c.send_408_icreg05; - iut_send_408_icreg06 = c.send_408_icreg06; - iut_ifc_contact_as1_for_message = c.contact_as1_for_message; - iut_ifc_contact_as1_for_invite = c.contact_as1_for_invite; - iut_ifc_contact_as2_for_invite = c.contact_as2_for_invite; - iut_and_as1_in_same_trust_domain = c.iut_and_as1_in_same_trust_domain; - as1_indicated_iut_handles_dialog = c.as1_indicated_iut_handles_dialog; - as1_and_iut_in_same_net = c.as1_and_iut_in_same_net; - iut_ifc_session_continued = c.ifc_session_continued; - iut_forward_iscsta05 = c.forward_iscsta05; - iut_forward_iscsta06 = c.forward_iscsta06; - iut_as1_indicated_handling_whole_dialog = c.as1_indicated_iut_handles_dialog; - iut_forward_message_to_as1 = c.forward_message_to_as1; - - } - - /** - * The UEs are configured by a configuration message at the - * begining of the model. The security association parameter is - * dependent on the way the IUT (IMS) has been configured and - * because of this the conditions here below. - */ - public void setUEConfiguration(configUserReq conf, int ue) { - connections[ue].security_association = false; - connections[ue].emergency_registered = conf.init_emergency_registered; - connections[ue].is_home_net = conf.ue_is_home_net; - connections[ue].temporary_security_association = conf.init_temporary_security_association; - connections[ue].registered_user_id = conf.init_registered_user_id; - } - - - // the IMS configuratin options - public boolean iut_security_association; - public boolean iut_topology_hiding; - public boolean iut_configured_entry_point_to_ims; - public boolean iut_configured_for_emergency_sessions; - public boolean iut_ims_in_same_trust_domain; - public boolean iut_forward_messages; - public boolean iut_forward_message_ini02; - public boolean iut_forward_message_ini06; - public boolean iut_forward_message_sta01; - public boolean iut_forward_message_sub02; - public boolean iut_forward_message_sub03; - public boolean iut_forward_message_sub08; - public boolean iut_forward_message_sub09; - public boolean iut_forward_message_tar02; - public boolean iut_forward_message_tar11; - public boolean iut_respond_408_reg09; - public boolean iut_reject_encrypted_SDP_offer; - public boolean iut_respond_401_mwreg24; - public boolean iut_forward_mwini03; - public boolean iut_has_stored_display_name; - public boolean iut_forward_mwini10; - public boolean iut_forward_mwini11; - public boolean iut_forward_mwini12; - public boolean iut_forward_mwini13; - public boolean iut_stored_record_route_header; - public boolean iut_forward_mwini14; - public boolean iut_stored_via_header; - public boolean iut_requiring_periodic_refresh; - public boolean iut_forward_mwsta01; - public boolean iut_stored_service_route_header; - public boolean iut_forward_mwsta06; - public boolean iut_forward_mwsub02; - public boolean iut_forward_mwsub05; - public boolean iut_forward_mwsub08; - public boolean iut_forward_mwtar02; - public boolean iut_forward_mwtar06; - public boolean iut_forward_mwtar08; - public boolean iut_stored_display_name; - public boolean iut_configured_entry_point_to_home_net; - public boolean iut_conf_two_entry_points_to_home_net; - public boolean iut_send_408_icreg04; - public boolean iut_send_408_icreg05; - public boolean iut_send_408_icreg06; - public boolean iut_ifc_contact_as1_for_message; - public boolean iut_ifc_contact_as1_for_invite; - public boolean iut_ifc_contact_as2_for_invite; - public boolean iut_and_as1_in_same_trust_domain; - public boolean as1_indicated_iut_handles_dialog; - public boolean as1_and_iut_in_same_net; // AS1 configured for - // being in within same - // IMS network as IUT - // S-CSCF - - - public boolean mw_refresh_invite_sent; - public boolean ic_invite_sent; - public boolean invite_contact_header_with_gruu; - public boolean iut_sent_message_to_as1; - public boolean iut_sent_invite_to_as1; - public boolean iut_forward_message_to_as1; - public boolean iut_ifc_session_continued; - public boolean iut_forward_iscsta05; - public boolean iut_forward_iscsta06; - public boolean iut_as1_indicated_handling_whole_dialog; - public boolean iut_forwarded_target_refresh_invite; - - public Connection[] connections; - private int ue1 = 0; - private int ue2 = 1; - private int current_ue; - private SIPMessageReq saved_message_req; - - -} // end of class - - - -class Connection { - public Connection() {} - - // connection properties - public boolean security_association; - public boolean temporary_security_association; - public boolean emergency_registered; - public boolean is_home_net; // IUT is home network - public boolean registered_user_id; // "UE2 registered public user - // identity with current - // private user identity in IUT - - // possible connection states - public boolean registering; - public boolean unauthorized; - public boolean registered; - public boolean calling; - public boolean ringing; - public boolean connected; - public boolean disconnecting; - -} diff --git a/model/ims.qml b/model/ims.qml deleted file mode 100644 index a648ce006170c4f99fade7cb1a5f5eb1b27799fc..0000000000000000000000000000000000000000 --- a/model/ims.qml +++ /dev/null @@ -1,4 +0,0 @@ -ims.xmi -ims.cqa -ims_records.cqa -ims_main.cqa diff --git a/model/ims.qtr b/model/ims.qtr deleted file mode 100644 index 488516330faa6f67d4fc5bc659edc6f029b6f8e9..0000000000000000000000000000000000000000 Binary files a/model/ims.qtr and /dev/null differ diff --git a/model/ims.xmi b/model/ims.xmi deleted file mode 100644 index 471d0ecbd7e70d51e76afe96030fc5a531000e1f..0000000000000000000000000000000000000000 --- a/model/ims.xmi +++ /dev/null @@ -1,1261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/model/ims_main.cqa b/model/ims_main.cqa deleted file mode 100644 index 2f7d153ed3e5894c7d1100037d7d7004d86eeb31..0000000000000000000000000000000000000000 --- a/model/ims_main.cqa +++ /dev/null @@ -1,35 +0,0 @@ -system { - Inbound ConfIn : configSystemReq; - Outbound ConfOut : configSystemResp; - - Inbound GmIn : SIPPacket; - Outbound GmOut : SIPPacket; - - Inbound MwIn : SIPPacket; - Outbound MwOut : SIPPacket; - - Inbound Ic1In : SIPPacket; - Outbound Ic1Out : SIPPacket; - - Outbound Ic2Out : SIPPacket; - - Inbound IscIn : SIPPacket; - Outbound IscOut: SIPPacket; - - Inbound Isc1In : SIPPacket; - Outbound Isc1Out: SIPPacket; - - Inbound Isc2In : SIPPacket; - Outbound Isc2Out: SIPPacket; -} - - -void main() { - - Connection ue1 = new Connection(); - Connection ue2 = new Connection(); - - Ims ims = new Ims({ue1, ue2}); - - ims.start(); -} diff --git a/model/ims_records.cqa b/model/ims_records.cqa deleted file mode 100644 index 1cbb0edcc99b3a216c41ff90085c76662a375747..0000000000000000000000000000000000000000 --- a/model/ims_records.cqa +++ /dev/null @@ -1,396 +0,0 @@ - -// general SIPPacket that contains all used fields -record SIPPacket { - String method; - String sender; - String recipient; - String message_body; - - AuthenticationChallengeResponseParameter auth_challenge_resp_param; - AuthorizationHeader authorization_header; - CSeqHeader cseq; - CallIdHeader callid_header; // MW_SUB_01 - ContactHeader contact_header; - ContactUri contact_uri; - ContentTypeHeader content_type_header; - EncryptedSDPAnswer encryptedSDPAnswer; - EncryptedSDPOffer encryptedSDPOffer; - EventHeader event_header; - ExpireHeader expire_header; - FromHeader from; - MinExpireHeader min_expire_header; - MinSEHeader min_se_header; - NotifyBody notify_body; - PAccessNetInfoHeader p_access_network_info_header; - PAssertedIdHeader p_asserted_identity_header; - PAssertedServiceHeader p_asserted_service_header; - PAssociatedURIHeader p_associated_uri_header; - PChargingFuncAddrHeader p_charging_function_addresses_header; - PChargingVectorHeader p_charging_vector_header; - PMediaAuthorizationHeader p_media_authorization_header; - PPreferredIndentityHeader p_preferred_identity_header; - PVisitedNetworkIdHeader p_visited_network_id_header; - PathHeader path_header; - ReasonHeader reason; - RecordRouteHeader record_route_header; - RequestUri request_uri; - RequireHeader require_header; - RouteHeader route_header; - SDPAnswer sdpAnswer; - SDPOffer sdpOffer; - SecondPAssertedIDHeader second_p_asserted_id_header; - SecurityClientHeader security_client_header; - SecurityServerHeader security_server_header; - SecurityVerifyHeader security_verify_header; - ServiceRouteHeader service_route_header; - SessionExpiresHeader session_expires_header; - SipUriHeader sip_uri; - String callid_parameter; // MW_REG_22 & MW_REG_23 - SupportedHeader supported_header; - ToHeader to; - TopmostRouteHeader topmost_route_header; - TopmostPathHeader topmost_path_header; - ViaHeader topmost_via_header; - ViaHeader via_header; - WwwAuthenticateHeader www_authenticate_header; - EncryptedSIPUri encrypted_sip_uri; - AnyHeader any_header; - SecondRouteHeader second_route_header; -} - -// additional typedefs for sip messages -record SIPInvite extends SIPPacket{} -record SIPInviteReq extends SIPPacket{} - -//record SIPBye extends SIPPacket{} -record SIPByeResp extends SIPPacket{} -record SIPByeReq extends SIPPacket{} - -record SIPAckReq extends SIPPacket{} -record SIPAckResp extends SIPPacket{} - -record SIPNotifyResp extends SIPPacket{} - -record SIPRegisterReq extends SIPPacket{} - -record SIPSubscribeReq extends SIPPacket{} - -record SIPMessage extends SIPPacket{} -record SIPMessageReq extends SIPPacket{} - -record SIP100Resp extends SIPPacket{} -record SIP180Resp extends SIPPacket{} -record SIP200Resp extends SIPPacket{} -record SIP380Resp extends SIPPacket{} -record SIP3xxResp extends SIPPacket{} -record SIP4xxResp extends SIPPacket{} -record SIP400Resp extends SIPPacket{} -record SIP401Resp extends SIPPacket{} -record SIP402Resp extends SIPPacket{} -record SIP403Resp extends SIPPacket{} -record SIP404Resp extends SIPPacket{} -record SIP408Resp extends SIPPacket{} -record SIP422Resp extends SIPPacket{} -record SIP423Resp extends SIPPacket{} -record SIP480Resp extends SIPPacket{} -record SIP481Resp extends SIPPacket{} -record SIP488Resp extends SIPPacket{} -record SIP5xxResp extends SIPPacket{} -record SIP500Resp extends SIPPacket{} -record SIP504Resp extends SIPPacket{} - -record SIPUpdateReq extends SIPPacket{} - -record HeaderInfo { - String present; - String value; - - public boolean isPresent() { - return present == PRESENT; - } - - public boolean isOmit() { - return present == OMIT; - } -} - -record SecondRouteHeader extends HeaderInfo {} -record AnyHeader extends HeaderInfo {} -record EncryptedSIPUri extends HeaderInfo {} -record CallIdHeader extends HeaderInfo {} -record CSeqHeader extends HeaderInfo{} -record PPreferredIndentityHeader extends HeaderInfo { - EmergencyPublicUID emergency_public_user_identity; - RegisteredPubUserIdentity registered_public_user_identity; - String tel; -} - -record EmergencyPublicUID extends HeaderInfo {} -record TopmostRouteHeader extends HeaderInfo { - OrigIOParam orig_io_param; -} -record OrigIOParam extends HeaderInfo {} -record ReasonHeader extends HeaderInfo {} -record MinSEHeader extends HeaderInfo {} -record SDPOffer extends HeaderInfo {} -record EncryptedSDPOffer extends HeaderInfo {} -record EncryptedSDPAnswer extends HeaderInfo {} -record SDPAnswer extends HeaderInfo {} -record PAssertedIdHeader extends HeaderInfo { - String sip_uri; - StoredDisplayName stored_display_name; - StoredPublicUID stored_public_uid; - EmergencyPublicUID emergency_public_user_identity; - RegisteredPubUserIdentity registered_public_user_identity; -} - -record SecondPAssertedIDHeader extends HeaderInfo { - String tel; -} -record StoredPublicUID extends HeaderInfo {} -record PAssertedServiceHeader extends HeaderInfo{} -record StoredDisplayName extends HeaderInfo {} -record EventHeader extends HeaderInfo { - String reg_parameter; -} -record RequireHeader extends HeaderInfo { - PathTagParam path_tag_parameter; -} -record PChargingVectorHeader extends HeaderInfo { - IcidParameter icid_parameter; - OrigIoiParameter orig_ioi_parameter; - TermIoiParameter term_ioi_parameter; - IoiParameter ioi_parameter; - Update update_access_network_charging_info_parameter; - AccessNetChargingInfoParam access_net_charging_info_param; -} -record AccessNetChargingInfoParam extends HeaderInfo {} -record Update extends HeaderInfo {} -record PVisitedNetworkIdHeader extends HeaderInfo { - VisitedNetPreProvisionedStr visited_network_pre_provisioned_string; -} -record NotifyBody extends HeaderInfo { - RegisteredPubUserIdentity registered_public_user_identity; -} -record RegisteredPubUserIdentity extends HeaderInfo {} -record AuthorizationHeader extends HeaderInfo { - String integrity_protected_parameter; - String private_user_identity; - String algorithm_parameter; - String response_parameter; - String AUTS_parameter; -} -record ContactHeader extends HeaderInfo { - String registered_public_user_identities; - String contact_uri; - String address_of_public_user_identity; -} - -record PAssociatedURIHeader extends HeaderInfo { - RegisteredPubUserIdentity registered_public_user_identity; -} -record ContactUri extends HeaderInfo {} -record SecurityServerHeader extends HeaderInfo { - String pcscf; -} -record WwwAuthenticateHeader extends HeaderInfo { - IkParameter ik_parameter; - CkParameter ck_parameter; - String realm_parameter; - String RAND; - String AUTN; - String algorithm_parameter; -} -record AuthenticationChallengeResponseParameter extends HeaderInfo {} -record PAccessNetInfoHeader extends HeaderInfo { - String network_provide_parameter; -} - -record ContentTypeHeader extends HeaderInfo {} -record PMediaAuthorizationHeader extends HeaderInfo {} -record RouteHeader extends HeaderInfo { - Topmost topmost; -} - -record Topmost extends HeaderInfo {} -record CkParameter extends HeaderInfo {} -record ExpireHeader extends HeaderInfo {} -record FromHeader extends HeaderInfo {} -record IcidParameter extends HeaderInfo {} -record IkParameter extends HeaderInfo {} -record IoiParameter extends HeaderInfo {} -record OrigIoiParameter extends HeaderInfo {} -record PChargingFuncAddrHeader extends HeaderInfo {} -record PathHeader extends HeaderInfo {} -record TopmostPathHeader extends HeaderInfo {} -record PathTagParam extends HeaderInfo {} -record RecordRouteHeader extends HeaderInfo { - String SIP_URI_of_IUT_P_CSCF; - CompParam comp_parameter; -} - -record CompParam extends HeaderInfo {} -record RequestUri extends HeaderInfo { - BarredPublicUserId barred_public_user_id; - EmergencyServiceURN emergency_service_urn; - GruuParam GRUU_parameter; - GruuParam invalid_GRUU_parameter; -} - -record EmergencyServiceURN extends HeaderInfo {} -record GruuParam extends HeaderInfo {} -record BarredPublicUserId extends HeaderInfo {} -record SecurityClientHeader extends HeaderInfo {} -record SecurityVerifyHeader extends HeaderInfo {} -record ServiceRouteHeader extends HeaderInfo { - String sip_uri; -} -record SessionExpiresHeader extends HeaderInfo { - RefreshParam refresh_parameter; - DurationParam duration_parameter; -} - -record DurationParam extends HeaderInfo {} -record RefreshParam extends HeaderInfo {} -record SipUriHeader extends HeaderInfo {} -record SupportedHeader extends HeaderInfo {} -record TermIoiParameter extends HeaderInfo {} -record ToHeader extends SipUriHeader {} -record ViaHeader extends HeaderInfo{ - PortNumber port_number; - FQDNAddress fqdn_address; - IPAddress ip_address; - Topmost topmost; -} -record IPAddress extends HeaderInfo {} -record FQDNAddress extends HeaderInfo {} -record PortNumber extends HeaderInfo {} -record ViaRecord extends HeaderInfo {} -record VisitedNetPreProvisionedStr extends HeaderInfo {} -record MinExpireHeader extends HeaderInfo{} - - -// CONFIGURATION MESSAGES FOR UEs and IUT - -record configSystemReq { - configNetworkReq net; - configUserReq ue1; - configUserReq ue2; -} -record configSystemResp {} - -record configNetworkReq { // was IUTConfiguration - boolean security_association; - - boolean forward_message; // TP_IMST2_GM_STA_01 - boolean topology_hiding; - boolean configured_entry_point_to_ims; - boolean configured_for_emergency_sessions; - boolean same_trust_domain; - - boolean forward_ini02; // defines the behavior of the IMS for - // TP_IMST2_GM_INI_02 - boolean forward_ini06; - boolean forward_sta01; - boolean forward_sub02; - boolean forward_sub03; - boolean forward_sub08; - boolean forward_sub09; - boolean forward_tar11; - boolean forward_tar02; - boolean response_reg09; - boolean encrypted_sdp_offer; - boolean respond_401_mwreg24; - boolean forward_mwini03; - boolean stored_display_name; - boolean forward_mwini10; - boolean stored_via_header; - boolean forward_mwini11; - boolean stored_record_route_header; - boolean forward_mwini12; - boolean forward_mwini13; - boolean forward_mwini14; - boolean requiring_periodic_refresh; - boolean forward_mwsta01; - boolean stored_service_route_header; - boolean forward_mwsta06; - boolean forward_mwsub02; - boolean forward_mwsub05; - boolean forward_mwsub08; - boolean forward_mwtar02; - boolean forward_mwtar06; - boolean forward_mwtar08; - boolean configured_entry_point_to_home_net; - boolean conf_two_entry_points_to_home_net; - boolean send_408_icreg04; - boolean send_408_icreg05; - boolean send_408_icreg06; - boolean contact_as1_for_message; - boolean contact_as1_for_invite; - boolean contact_as2_for_invite; - boolean iut_and_as1_in_same_trust_domain; - boolean as1_indicated_iut_handles_dialog; - boolean as1_and_iut_in_same_net; - boolean ifc_session_continued; - boolean forward_iscsta05; - boolean forward_iscsta06; - boolean as1_indicated_handling_whole_dialog; - boolean forward_message_to_as1; -} - -record configUserReq { // was UEConfiguration - String sender; - boolean init_emergency_registered; - boolean ue_is_home_net; - boolean init_temporary_security_association; - boolean init_registered_user_id; -} - - -// constants -final String UE1 = "[UE1]"; -final String UE2 = "[UE2]"; -final String IUT = "[IUT]"; -final String IMS = "[IMS]"; -final String AS1 = "[AS1]"; -final String AS2 = "[AS2]"; -final String OMIT = "[omit]"; -final String PRESENT = "[present]"; -final String INVALID_USER_ID = "[invalid private user identity]"; -final String INVITE = "INVITE"; -final String ACK = "ACK"; -final String REGISTER = "REGISTER"; -final String SUBSCRIBE = "SUBSCRIBE"; -final String NOTIFY = "NOTIFY"; -final String BYE = "BYE"; -final String MESSAGE = "MESSAGE"; -final String UPDATE = "UPDATE"; -final String STORED_VIA_HEADER = "[stored Via header]"; -final String NOT_MATCHING_STORED_ROUTE_HEADER = "[Route Header not matching stored Record-Route header]"; -final String ROUTE_HEADER_NOT_MATCHING = "[Route header not matching stored Service-Route header]"; -final String PCSCF_OR_FQDN_ADDRESS = "[address of IUT P-CSCF or FQDN address of IUT P-CSCF]"; -final String NOT_MATCHING_VIA_HEADER = "[Via header not matching stored Via header]"; -final String TIMER_OPTION_TAG = "[timer option tag]"; -final String WRONG_EXPIRATION = "[||acceptable expiration]"; -final String ACCEPTABLE_EXPIRATION = "[acceptable expiration]"; -final String TYPE1 = "[type1]"; -final String TYPE2 = "[type2]"; -final String TYPE3 = "[type3]"; -final String YES = "[YES]"; -final String NO = "[NO]"; -final String SECURITY_LIST_PARAMETERS = "[P-CSCF security list the parameters needed for the security association setup]"; -final String LARGE_BODY = "[Message Body greater than 1300 bytes]"; -final String EMERGENCY_SERVICE_ID = "[emergency service identifier]"; -final String RESPONSE_503_OR_488 = "[503 response code OR 488 response code]"; -final String UNACCEPTABLE_MEDIA_PARAM = "[unacceptable media parameter]"; -final String AKAV1_MD5 = "[AKAv1-MD5]"; -final float UE1RegistrationTimeout = 1.0; -final String REQUEST_URI_MATCHING_EMERGENCY_SERVICE_ID = "[Request-URI matching an emergency service identifier]"; -final String TEL_URI_OF_EMERGENCY_PUB_USER_ID = "[tel URI of emergency public user identity]"; -final String TEL_URI_OF_PUB_UID = "[tel URI of public user identity]"; -final String TOKENIZED_BY_PARAMETER = "[-> tokenized-by parameter]"; -final String SIP_URI_OF_IUT_IBCF = "-> SIP URI of IUT IBCF"; -final String SIP_URI_OF_IMS = "-> SIP URI of IMS"; -final String SIP_URI_OF_IUT_SCSCF = "-> SIP URI of IUT S-CSCF"; -final float timeout_iscini05 = 1.0; -final float timeout_iscsta04 = 1.0; diff --git a/tp/tplan/IMS_CTS_1Gm.tplan b/tp/tplan/IMS_CTS_1Gm.tplan deleted file mode 100644 index ad43c54fcc4368f917942024ed06da34043621b0..0000000000000000000000000000000000000000 --- a/tp/tplan/IMS_CTS_1Gm.tplan +++ /dev/null @@ -1,1443 +0,0 @@ -TSS : NGN-IMS -Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' -Version : 1.0.1 -Date : 27.08.2008 -Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- If not mentioned differently in the "with" statement of a test purpose --- both UE1 and UE2 are in their home network - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1 'Gm focused behaviour' -Group 1.1 'General Capabilities' - -TP id : TP_IMST2_GM_GEN_01 -summary : 'All IMS CN components shall support SIP messages which are greater than 1300 bytes in length' -clause ref: '4.2A paragraph 1 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_4002 -role : IMS -- General -config ref: CF_2Gm - -with { - UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - containing Message_Body greater than 1300 bytes - } - then { - IUT sends MESSAGE to UE2 - } -} - -End group 1.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.2 'Registration Procedures' - -TP id : TP_IMST2_GM_REG_01 -summary : 'When a P-CSCF receives a REGISTER request from the UE and the REGISTER request was received without protection, - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 5)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_02 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE - and the Security-Verify header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 6)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { IUT receives protected REGISTER - not containing Security-Verify_header - } - then { IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_03 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -TP type : conformance -clause ref: '5.2.2 first numbered list 6)a' -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_04 -summary : 'When a P-CSCF receives a unprotected REGISTER request from the UE - and the Security-Client header is not present, then the P-CSCF shall return a suitable SIP 4xx response.' -clause ref: '5.2.2 first numbered list 6)b' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - not containing Security-Client_header - } - then { - IUT sends 4xx_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_05 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE and the private user identity conveyed in the - Authorization header of the request are different from the ones previously challenged or authenticated, the - P-CSCF shall reject the REGISTER request by returning a SIP 403 (Forbidden) response.' -clause ref: '5.2.2 first numbered list 6)c' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - containing Authorization_header indicating invalid private_user_identity - } - then { - IUT sends 403_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_06 -summary : 'When a P-CSCF receives a protected REGISTER request from the UE and the private user identity conveyed in the - Authorization header of the request are different from the ones previously challenged or authenticated, the - P-CSCF shall reject the REGISTER request by returning a SIP 403 (Forbidden) response.' -clause ref: '5.2.2 first numbered list 6)c' -TP type : conformance -RQ ref : RQ_003_5011 - role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - containing Authorization_header indicating invalid private_user_identity - } - then { - IUT sends 403_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_07 -summary : 'When a P-CSCF receives a unprotected REGISTER request from a non-registered UE it accepts it and returns a SIP 401 response' -clause ref: '5.2.2 second numbered list' -TP type : conformance -RQ ref : RQ_003_5023 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - } - then { - IUT sends 401_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_08 -summary : 'When a P-CSCF receives a SIP 200 (OK) response to a REGISTER request and the value of the Expires header - field and/or the Expires parameter in the Contact header in the 200 (OK) response is not set to zero - it passes the 200 (OK) to the UE.' -clause ref: '5.2.2 third numbered list' -TP type : conformance -RQ ref : RQ_003_5028 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives protected REGISTER - } - then { - IUT sends 200_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_09 -summary : 'If local policy requires the application of IBCF capabilities in the visited network and a P-CSCF fails to forward - a REGISTER request from a UE to any IBCF, it shall return a SIP 408 (Request Timeout) response or SIP 504 - (Server Time-out) response to the UE' -clause ref: '5.2.2A first numbered list 6)' -TP type : conformance -RQ ref : RQ_003_5223 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 is visiting IUT and - IUT not configured_for_establishing_security_association and - IUT configured_for_topology_hiding and - IUT not configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER - } - then { - IUT sends 408_response or 504_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_10 -summary : 'When a P-CSCF receives a REGISTER request from a non-registered UE and no security association - is set-up it accepts it and returns a SIP 200 response' -clause ref: '5.2.2A' -TP type : conformance -RQ ref : None -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 not registered in IUT and - IUT not configured_for_establishing_security_association -} -ensure that { - when { - IUT receives REGISTER - } - then { - IUT sends 200_response - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_REG_11 -summary : 'When a P-CSCF receives a REGISTER request from a registered UE and the value of the Expires header - field and/or the Expires parameter in the Contact header is set to zero it sends a 200 (OK) to the UE.' -clause ref: '5.2.5.1' -TP type : conformance -RQ ref : None -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { - UE1 registered in IUT -} -ensure that { - when { - IUT receives REGISTER - containing Expires_header indicating 0 - } - then { - IUT sends 200_response - containing Expires_header indicating 0 - } -} - -End group 1.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.3 'initial requests' - -TP id : TP_IMST2_GM_INI_01 -summary : 'When a P-CSCF receives an initial request for a dialogue from a UE then it forwards the request to destination UE and returns a SIP 100 (Trying) response to the originating UE.' -clause ref: '5.2.6.3 first numbered list, 5.2.6.4 first numbered list' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5054, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Record-Route_header indicating address of IUT_P-CSCF or FQDN_address of IUT_P-CSCF - and containing Via_header indicating address of IUT_P-CSCF or FQDN_address of IUT_P-CSCF - and not containing P-Charging-Vector_header including icid_parameter - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_02 -summary : 'When a P-CSCF receives an initial request for a dialogue from a UE but with preloaded Route not matching the stored Service-Route header then it either returns a SIP 400 response to the UE or forwards the request to destination UE with an updated Route header and returns a SIP 100 (Trying) response to the originating UE.' -clause ref: '5.2.6.3 first numbered list 1), 5.2.6.4 first numbered list' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5054, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 for UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Route_header matching stored Service-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_03 -summary : 'When a P-CSCF receives any valid SIP 1xx response as a result of a forwarded request for an initial dialogue it forwards the response to originating UE' -clause ref: '5.2.6.3 second numbered list, 5.2.6.4 second numbered list' -TP type : conformance -RQ ref : RQ_003_5047, RQ_003_5055 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - } - then { - IUT sends 180_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_04 -summary : 'When a P-CSCF receives any valid SIP 2xx response as a result of a forwarded request for an initial dialogue, - it forwards the response to the originating UE' -clause ref: '5.2.6.3 second numbered list, 5.2.6.4 second numbered list' -TP type : conformance -RQ ref : RQ_003_5047, RQ_003_5055 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_05 -summary : 'When a P-CSCF receives any other response other than a SIP 1xx or a 2xx to an initial request to a UE for a dialog it forwards it to the originating UE' -clause ref: '5.2.6.4 third numbered list' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_06 -summary : 'WWhen a P-CSCF receives any other response other than a SIP 1xx or a 2xx to an initial request to a UE for a dialog and if the list of Via headers does not match the saved list of Via headers received in the request corresponding to the same dialog, it either sends no message or forwards it to the originating UE' -clause ref: '5.2.6.4 third numbered list' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 4xx_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_07 -summary : 'If a P-CSCF requires periodic refreshment of a session established after receiving a SIP INVITE request from a UE - and the Session-Expires header indicates a too low refresh frequence, it shall reject the INVITE.' -clause ref: '5.2.7.2, RFC4028' -TP type : conformance -RQ ref : RQ_003_5064 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Supported_header indicating timer_option_tag - and containing Session-Expires_header not indicating acceptable_expiration - } - then { - IUT sends 422_response - containing Min-SE_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_INI_08 -summary : 'When a P-CSCF requires periodic refreshment of a session established after receiving a SIP INVITE request from a UE - and the Session-Expires header of the INVITE request indicates acceptable refresh frequence then it forwards the request to the destination UE and returns a 100 (Trying) to the originating UE.' -clause ref: '5.2.7.2, 5.2.8.3, RFC4028' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5068, RQ_003_5065 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Supported_header indicating timer_option_tag - and containing Session-Expires_header indicating acceptable_expiration - } - then { - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Session-Expires_header - } -} - -End group 1.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.4 'Standalone Requests' - -TP id : TP_IMST2_GM_STA_01 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE with preloaded Route not matching the stored Service-Route header then it either returns a SIP 400 response to the UE or forwards the request to destination UE with an updated Route header and returns a SIP 100 (Trying) response to the originating UE' -clause ref: '5.2.6.3 fifth numbered list 1)' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends MESSAGE to UE2 - containing Route_header matching stored Service-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_02 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE with preloaded Route matching the stored Service-Route header then it forwards the request to destination UE without a P-Charging-Vector header and returns a SIP 100 (Trying) response to the originating UE' -clause ref: '5.2.6.3 fifth numbered list, 5.2.6.4 seventh numbered list' -TP type : conformance -RQ ref : RQ_003_5050, RQ_003_5060 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends MESSAGE to UE2 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_03 -summary : 'When a P-CSCF receives a SIP 200 response to a forwarded request for a standalone transaction then it forwards the request to the originating UE.' -clause ref: '5.2.6.3 sixth numbered list, 5.2.6.4 eigth numbered list' -TP type : conformance -RQ ref : RQ_003_5051, RQ_003_5061 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_MESSAGE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_STA_04 -summary : 'When a P-CSCF receives any 4xx response to a forwarded request for a standalone transaction then it forwards the request to the originating UE.' -clause ref: '5.2.6.3 sixth numbered list, 5.2.6.4 eigth numbered list' -TP type : conformance -RQ ref : RQ_003_5051, RQ_003_5061 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_sent_MESSAGE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - -End group 1.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.5 'Subsequent Requests' - -TP id : TP_IMST2_GM_SUB_01 -summary : 'When the P-CSCF receives a subsequent request for non-existing dialog it rejects it with a SIP 403 response and does not forward it any further' -clause ref: '5.2.6.3 seventh numbered list 1) a)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends 403_response to UE1 - and IUT sends no message to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_02 -summary : 'When the P-CSCF receives a subsequent request with unknown URI in Route header from the originating UE it either rejects it with a SIP 400 response or forwards it with an updated Route header' -clause ref: '5.2.6.3 seventh numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends BYE to UE2 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_03 -summary : 'When the P-CSCF receives a subsequent request with unknown URI in Route header from the terminating UE it either rejects it with a SIP 400 response or forwards it with an updated Route header' -clause ref: '5.2.6.3 seventh numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE2 for UE1 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE2 - and IUT sends no message to UE1 - or - IUT sends BYE to UE1 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_04 -summary : 'When the P-CSCF receives a subsequent request for existing dialog from the originating UE it forwards it to the destination UE without a P-Charging-Vector header' -clause ref: '5.2.6.3 seventh numbered list, 5.2.6.4 ninth numbered list' -TP type : conformance -RQ ref : RQ_003_5052, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends BYE to UE2 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_05 -summary : 'When the P-CSCF receives a subsequent request for existing dialog from the terminating UE it forwards it to the destination UE without a P-Charging-Vector header' -clause ref: '5.2.6.3 seventh numbered list, 5.2.6.4 ninth numbered list' -TP type : conformance -RQ ref : RQ_003_5052, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives BYE from UE2 for UE1 - } - then { - IUT sends BYE to UE1 - not containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_06 -summary : 'When the P-CSCF receives a SIP 200 to subsequent request from the originating UE it forwards it to the terminating UE' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE1 for UE2 and - IUT has_sent_BYE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_07 -summary : 'When the P-CSCF receives a SIP 200 to subsequent request from the terminating UE it forwards it to the originating UE' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 for UE1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - } - then { - IUT sends 200_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_08 -summary : 'When the P-CSCF receives a SIP 200 with unknown Via header to a subsequent request from the terminating UE it either does not forward it or updates the Via heading prior to forwarding it' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE1 for UE2 and - IUT has_sent_BYE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 200_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_09 -summary : 'When the P-CSCF receives a SIP 200 with unknown Via header to a subsequent request from the originating UE it either does not forward it or updates the Via heading prior to forwarding it' -clause ref: '5.2.6.4 tenth numbered list' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 for UE1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE2 - or - IUT sends 200_response to UE2 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SUB_10 -summary : 'Upon receipt of a request on a dialog for which the P-CSCF has already initiated session release, the P-CSCF shall return 481 (Call/Transaction Does Not Exist) response' -clause ref: '5.2.8.1.3' -TP type : conformance -RQ ref : RQ_003_5241 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_BYE from UE2 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives BYE from UE1 for UE2 - } - then { - IUT sends 481 to UE1 - and IUT sends 200 to UE2 - } -} - -End group 1.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.6 'Target refresh Requests' - -TP id : TP_IMST2_GM_TAR_01 -summary : 'When the P-CSCF receives a SIP refresh request for non-existing dialog it shall reject it with a SIP 403 response' -clause ref: '5.2.6.3 third numbered list 1) a)' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh UPDATE from UE1 for UE2 - } - then { - IUT sends 403_response to UE1 - and IUT sends no message to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_02 -summary : 'HWhen the P-CSCF receives a refresh request with unknown URI in Route header it shall either reject it or forward it with an updated Route header.' -clause ref: '5.2.6.3 third numbered list 2)' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 for UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT sends 400_response to UE1 - and IUT sends no message to UE2 - or - IUT sends 100_response to UE1 - and IUT sends INVITE to UE2 - containing Route_header matching stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_03 -summary : 'When the P-CSCF receives a refresh request for existing dialog from originating UE it shall return a SIP 100 and forward the request' -clause ref: '5.2.6.3 third numbered list, 5.2.6.4 fourth numbered list' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5058, RQ_003_5079 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 for UE2 - } - then { - IUT sends 100_response to UE1 - and IUT sends target_refresh INVITE to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_04 -summary : 'When the P-CSCF receives a refresh request for existing dialog from terminating UE it shall return a SIP 100 and forward the request' -clause ref: '5.2.6.3 third numbered list, 5.2.6.4 fourth numbered list' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5058, RQ_003_5081 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE2 for UE1 - } - then { - IUT sends 100_response to UE2 - and IUT sends target_refresh INVITE to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_05 -summary : 'When the P-CSCF receives a valid 180 response to refresh request from terminating UE it forwards the response to the originating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - } - then { - IUT sends 180_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_06 -summary : 'When the P-CSCF receives a valid 180 response to refresh request from originating UE it forwards the response to the terminating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 180_response from UE1 for UE2 - } - then { - IUT sends 180_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_07 -summary : 'When the P-CSCF receives a valid 200 response to refresh request from terminating UE, it returns a SIP ACK and forwards the response to the originating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - } - then { - IUT sends ACK to UE2 - and IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_08 -summary : 'When the P-CSCF receives a valid SIP 200 response to refresh request from originating UE, it returns a SIP ACK and forwards the response to the terminating UE' -clause ref: '5.2.6.3 fourth numbered list, 5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5049, RQ_003_5058 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 for UE2 - } - then { - IUT sends ACK to UE1 - and IUT sends 200_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_09 -summary : 'When the P-CSCF receives a valid 4xx response to refresh request from terminating UE it forwards the response to the originating UE' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_10 -summary : 'When the P-CSCF receives a valid SIP 4xx response to refresh request from originating UE it forwards the response to the terminating UE' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 for UE2 - } - then { - IUT sends 4xx_response to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_11 -summary : 'When the P-CSCF receives a 4xx with unknown Via header to refresh request from the terminating UE it either does not forward the message or forwards it with an updated Via header' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE1 for UE2 and - IUT has_sent_target_refresh_INVITE to UE2 -} -ensure that { - when { - IUT receives 4xx_response from UE2 for UE1 - containing Via_header not matching stored Via_header - } - then { - IUT sends no message to UE1 - or - IUT sends 4xx_response to UE1 - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_TAR_12 -summary : 'When the P-CSCF receives a 4xx with unknown Via header to refresh request from the originating UE it either does not forward the message or forwards it with an updated Via header' -clause ref: '5.2.6.4 sixth numbered list' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 and UE2 registered in IUT and - IUT has_established_an_INVITE_dialog from UE1 to UE2 and - IUT has_received_target_refresh_INVITE from UE2 for UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 for UE2 - containing Via_header not matching stored Via_header -} - then { - IUT sends no message to UE2 - or - IUT sends 4xx_response to UE2 - containing Via_header indicating stored Via_header - } -} - -End group 1.6 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.7 'Emergency' - --- Note: It may not be possible to test the following test purposes, --- as it is not advisable to call emergency numbers for test purposes --- unless the emergency service can be simulated within the IUT. - -TP id : TP_IMST2_GM_EME_01 -summary : 'Rejection of INVITE to emergency service with 380 when emergency calls have to use the CS domain' -clause ref: '5.2.10.1' -TP type : conformance -RQ ref : RQ_003_5083, RQ_003_5259 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { IUT not configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 380_response - containing Content-Type_header indicating '3GPP IMX XML body' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_02 -summary : 'P-CSCF accepts INVITE to emergency service from unregistered user and returns SIP 100 (Trying) response' -clause ref: '5.2.10.2' -TP type : conformance -RQ ref : RQ_003_5250 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 not registered in IUT and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_03 -summary : 'P-CSCF rejects INVITE to non-emergency service from user with emergency registration with SIP 403 response' -clause ref: '5.2.10.3' -TP type : conformance -RQ ref : RQ_003_5252 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 emergency registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI not indicating emergency_service_identifier - } - then { - IUT sends 403_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_04 -summary : 'P-CSCF accepts INVITE to emergency service from user with emergency registration and returns SIP 100 response' -clause ref: '5.2.10.3' -TP type : conformance -RQ ref : RQ_003_5253 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 emergency registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EME_05 -summary : 'P-CSCF accepts INVITE to emergency service from user with normal registration and returns SIP 100 response' -clause ref: '5.2.10.4' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request_URI indicating emergency_service_identifier - } - then { - IUT sends 100_response to UE1 - and IUT not sends 4xx_response to UE1 - } -} - -End group 1.7 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.8 'Unavailable resources' - -TP id : TP_IMST2_GM_EXC_01 -summary : 'P-CSCF-initiated call release due to unacceptable SDP offer in 200' -clause ref: '5.2.8.1.2, 6.2' -TP type : conformance -RQ ref : RQ_003_5073, RQ_003_5074, RQ_003_6004 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing unacceptable SDP_offer - } - then { - IUT sends 200_response to UE1 - } - when { - IUT receives ACK from UE1 - containing SDP_answer - } - then { - IUT sends BYE to UE1 - containing Reason_header indicating 503_response_code or 488_response_code - and - IUT sends ACK to UE2 - and IUT sends BYE to UE2 - containing Reason_header indicating 503_response_code or 488_response_code - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_EXC_02 -summary : 'OPTIONAL: P-CSCF initiates call release due to encrypted SDP offer in SIP 200 response' -clause ref: '5.2.8.1.2, 6.2' -TP type : conformance -RQ ref : RQ_003_5073, RQ_003_5074, RQ_003_6005 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UEs -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT configured_to_reject_encrypted_SDP_offers -} -ensure that { - when { - IUT receives 200_response from UE2 for UE1 - containing encrypted SDP_offer - } - then { - IUT sends 200_response to UE1 - } - when { - IUT receives ACK from UE1 - containing SDP_answer - } - then { - IUT sends BYE to UE1 - containing Reason_header including 503_response_code or 488_response_code - and - IUT sends ACK to UE2 - and IUT sends BYE to UE2 - containing Reason_header including 503_response_code or 488_response_code - } -} - -End group 1.8 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.9 'SDP' - -TP id : TP_IMST2_GM_SDP_01 -summary : 'P-CSCF rejects INVITE with SDP offer with unacceptable media parameter with SIP 488 response' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6000 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - containing SDP_offer indicating unacceptable media_parameter - } - then { - IUT sends 488_response to UE1 - containing SDP_offer - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SDP_02 -summary : 'OPTIONAL: P-CSCF rejects INVITE with encrypted SDP offer' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6001 -role : IMS -- General -config ref: CF_1Gm -- Tester acting one single UE -with { UE1 registered in IUT and - IUT configured_to_reject_encrypted_SDP_offers -} -ensure that { - when { - IUT receives INVITE from UE1 - containing encrypted SDP_offer - } - then { - IUT sends 4xx_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_GM_SDP_03 -summary : 'P-CSCF forwards SIP response with unacceptable SDP media parameter offer in SIP 180 response to originating UE' -clause ref: '6.2' -TP type : conformance -RQ ref : RQ_003_6002 -role : IMS -- General -config ref: CF_2Gm -- Tester acting as two UE -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 -} -ensure that { - when { - IUT receives 180_response from UE2 for UE1 - containing SDP_offer indicating unacceptable media_parameter - } - then { - IUT sends 180_response to UE1 - } -} - -End group 1.9 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 1.10 'NAT Traversal' - --- This section only covers requirements that are specific to UE managed NAT traversal (Annex K of ES 283 003) --- Test purposes covered in sections 1.2 - 1.6 (clause 5.2 and 6.2 of ES 283 003) are not repeated - -TP id : TP_IMST2_GM_NAT_01 -summary : 'P-CSCF does not respond to unprotected REGISTER from UE if Security-Client header that does not specify UDP tunneling support support' -clause ref: 'Annex K.2.2.2 first numbered list 5)a)' -TP type : conformance -RQ ref : RQ_003_7000 -role : IMS -- General -config ref: CF_1Gm -- Tester acting as one single UE -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_initiated_security_association_establishment -} -ensure that { - when { - IUT receives unprotected REGISTER - containing Security-Client_header not indicating 'UDP-enc-tun support' - and containing topmost Via_header including IP_address different from 'IP source address' - } - then { - IUT sends no message - } -} - -End group 1.10 - -End group 1 diff --git a/tp/tplan/IMS_CTS_1Mw1Gm.tplan b/tp/tplan/IMS_CTS_1Mw1Gm.tplan deleted file mode 100644 index 838d36d245a3f2d4e16ffd1fa1e1df193d8de324..0000000000000000000000000000000000000000 --- a/tp/tplan/IMS_CTS_1Mw1Gm.tplan +++ /dev/null @@ -1,3518 +0,0 @@ -TSS : NGN-IMS -Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' -Version : 1.0.0 -Date : 03.06.2008 -Author : 'STF346' - -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - -Group 2 'Mw focused behaviour' -Group 2.1 'General Capabilities' - -TP id : TP_IMST2_MW_GEN_01 -summary : 'All IMS CN components shall support SIP messages which are greater than 1300 bytes in length on Mw interface' -clause ref: '4.2A paragraph 1 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_4002 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing Message_Body greater than 1300 bytes - } - then { - IUT sends MESSAGE via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_02 -summary : 'A functional entity at the boundary of a trust domain shall remove the P-Access-Network-Info header - from any SIP message sent out of the trust domain' -clause ref: '4.4.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_4202 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding and - IMS not configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - not containing P-Access-Network-Info_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_03 -summary : 'P-CSCF generates the ICID and includes it in the icid parameter of the P-Charging-Vector header' -clause ref: '4.5.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_4084 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_04 -summary : 'REGISTER requests exchanged between a P-CSCF in the visited network and the S-CSCF in - the home network shall include the type 1 inter operator identifier (IOI)' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4204 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_05 -summary : 'REGISTER responses exchanged between a P-CSCF in the visited network and the S-CSCF - in the home network shall include the type 1 inter operator identifier (IOI)' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4204 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IMS and -} -ensure that { - when { - IUT receives REGISTER via Mw - } - then { - IUT sends response via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_06 -summary : 'SIP ACK requests that are exchanged between a S-CSCF of the home originating network and a S-CSCF of the home terminating network shall include a type 2 inter operator identifier (IOI).' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4205 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_sent_INVITE_and_has_received_200_response -} -ensure that { - when { - IUT receives ACK via Gm from UE1 addressed to UE2 - } - then { - IUT sends ACK addressed to UE2 via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_07 -summary : 'SIP 200 responses that are exchanged between a S-CSCF of the terminating originating network and a S-CSCF of the home network shall include a type 2 inter operator identifier (IOI) and forward the orig-ioi parameter from the P-Charging-Vector header in the initial request.' -clause ref: '4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4205 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE1 via Mw and - IUT has_sent_INVITE to UE1 via Gm -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - } - then { - IUT sends 200_response addressed to UE2 via Mw - containing P-Charging-Vector_header including ioi_parameter indicating type2 - and including orig-ioi_parameter of initial INVITE - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_08 -summary : 'A S-CSCF shall not pass any CDF or OCF addresses within the P-Charging-Function-Addresses - header of SIP requests or responses sent to a visited network or UE' -clause ref: '4.5.5 paragraph 3' -TP type : conformance -RQ ref : RQ_003_4208 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_sent_INVITE_and_has_received_200_response -} -ensure that { - when { - IUT receives ACK via Gm from UE1 addressed to UE2 - } - then { - IUT sends ACK addressed to UE2 via Mw - not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_09 -summary : 'When the P-CSCF sends a SIP MESSAGE request to the UE, it shall remove the P-Charging-Function-Addresses and P-Charging-Vector headers before sending the message, if present.' -clause ref: '5.2.1 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5006 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Mw addressed to UE1 - containing P-Charging-Vector_headers - and containing P-Charging-Function-Addresses_header - } - then { - IUT sends MESSAGE to UE1 via Gm - not containing P-Charging-Vector_headers - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_10 -summary : 'When the P-CSCF sends a SIP 200 response to the UE, it shall remove the P-Charging-Function-Addresses and P-Charging-Vector headers before sending the message, if present.' -clause ref: '5.2.1 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5006 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Gm from UE1 addressed to UE2 and - IUT has_sent_MESSAGE via Mw addressed to UE2 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response originated by UE2 via Mw - containing P-Charging-Vector_headers - and containing P-Charging-Function-Addresses_header - } - then { - IUT sends 200_response to UE1 via Gm - not containing P-Charging-Vector_headers - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_11 -summary : 'Before forwarding a SIP MESSAGE request received from a UE, a P-CSCF shall remove any P-Charging-Function-Addresses and P-Charging-Vector headers received' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Charging-Vector_headers of UE1 - and containing P-Charging-Function-Addresses_header of UE1 - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Charging-Vector_headers of UE1 - and not containing P-Charging-Function-Addresses_header of UE1 - } -} --- Note: The MESSAGE request may contain P-Charging-Vector_headers and P-Charging-Function-Addresses_header --- populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_12 -summary : 'Before forwarding a SIP 200 response received from a UE, a P-CSCF shall remove any P-Charging-Function-Addresses and P-Charging-Vector headers received' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE originated by UE2 addressed to UE1 via Mw and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Charging-Vector_headers of UE1 - and containing P-Charging-Function-Addresses_header of UE1 - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Charging-Vector_headers of UE1 - and not containing P-Charging-Function-Addresses_header of UE1 - } -} --- Note: The 200 respone may contain P-Charging-Vector_headers and P-Charging-Function-Addresses_header --- populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_13 -summary : 'Before forwarding a SIP MESSAGE request received from a UE, a P-CSCF shall remove P-Access-Network-Info header if such header contains a "network-provided" parameter' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Access-Network-Info_header including network_provider_parameter - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Access-Network-Info_header - } -} --- Note: The MESSAGE request may contain P-Access-Network-Info_header populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_14 -summary : 'Before forwarding a SIP 200 response received from a UE, a P-CSCF shall remove P-Access-Network-Info header if such header contains a "network-provided" parameter' -clause ref: '5.2.1 paragraph 6' -TP type : conformance -RQ ref : RQ_003_5007 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE addressed to UE1 originated by UE2 via Mw and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response addressed to UE2 from UE1 via Gm - containing P-Access-Network-Info_header including network_provider_parameter - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Access-Network-Info_header - } -} --- Note: The 200 response may contain P-Access-Network-Info_header populated with previously store values! - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_15 -summary : 'A P-CSCF shall remove the P-Media-Authorization header from a SIP MESSAGE request from the UE before forwarding the message' -clause ref: '5.2.1 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5212 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives MESSAGE via Gm from UE1 addressed to UE2 - containing P-Media-Authorization_header - } - then { - IUT sends MESSAGE addressed to UE2 via Mw - not containing P-Media-Authorization_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_16 -summary : 'A P-CSCF shall remove the P-Media-Authorization header from a SIP 200 response from the UE before forwarding the message' -clause ref: '5.2.1 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5212 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_received_MESSAGE originated by UE2 and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Media-Authorization_header - } - then { - IUT sends 200_response addressed to UE2 via Mw - not containing P-Media-Authorization_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_GEN_17 -summary : 'When a P-CSCF receives SIP Redirect response (3xx), other than a 305 (Use Proxy) - response, to a request forwarded from the UE, it shall not resend the original message - to any of the URIs specified in the Contact header field of the 3xx response.' -clause ref: '5.2.1 paragraph 14' -TP type : conformance -RQ ref : RQ_003_5213 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE addressed to UE2 via Gm and - IUT has_sent_MESSAGE addressed to UE2 via Mw and - IUT not configured_for_topology_hiding -} -ensure that { - when { - IUT receives 3xx_response different to 305_response via Mw - containing contact_header including Contact_URI - } - then { - IUT not resends MESSAGE to Contact_URI via Mw - } -} - -End group 2.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.2 'Registration Procedures' - -TP id : TP_IMST2_MW_REG_01 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert a correct Path header containing SIP URI identifying the P-CSCF, Require header with path option tag, P-Charging-Vector header with the icid parameter and a type 1 orig-ioi parameter identifying the sending network but not including term-ioi parameter, and insert a P-Visited-Network-ID header identifying the visited network at the home network' -clause ref: '5.2.2 paragraph 2 items 1), 2), 3) and 7)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_with_an_entry_point to IMS and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - } - then { - IUT sends unprotected REGISTER via Mw - containing Path_header including SIP_URI of IMS_P-CSCF - and containing Require_header including path_tag_parameter - and containing P-Charging-Vector_header - including icid_parameter - and including orig-ioi_parameter indicating type1 'of the sending network' - and not including term-ioi_parameter indicating type1 - and containing P-Visited-Network-ID_header including visited_network_pre-provisioned_string - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_02 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "yes" into the Authorization header field if the REGISTER request was received protected with the security association and includes an authentication challenge response' -clause ref: '5.2.2 paragraph 2 item 4)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - including authentication_challenge_response_parameter - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating yes - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_03 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "yes" into the Authorization header field if the REGISTER request was received on the security association created during the last successful authentication procedure' -clause ref: '5.2.2 paragraph 2 item 4)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating yes - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_04 -summary : 'When a P-CSCF receives REGISTER request from the UE, it shall insert the parameter "integrity-protected" with a value "no" into the Authorization header field if the REGISTER request was not received protected with the security association and remove the Security-Client header if the header is present' -clause ref: '5.2.2 paragraph 2 item 5) a) and 6)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 not has_established_a_security_association -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - containing Security-Client_header - } - then { - IUT sends REGISTER via Mw - containing Authorization_header including integrity-protected_parameter indicating no - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -TP id : TP_IMST2_MW_REG_05 -summary : 'When a P-CSCF receives REGISTER request from the UE without protection and without Security-Client header then the P-CSCF shall return a SIP 4xx response' -clause ref: '5.2.2 paragraph 2 item 5)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT -} -ensure that { - when { - IUT receives unprotected REGISTER via Gm from UE1 - not containing Security-Client_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_06 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received with a temporary security association but without a Security-Verify header, then the P-CSCF shall return a 4xx response.' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - not containing Security-Verify_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_07 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via a temporary security association and the content of the Security-Verify and the Security-Client header do not match previous information then the P-CSCF shall reject the request by sending a 4xx response.' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header different to Security-Server_header of 401_response - and containing Security-Client_header equal to Security-Client_header of unprotected REGISTER - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_08 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via a temporary security association and Security-Verify header and Security-Client headers match previous information, the P-CSCF shall remove the Security-Verify and the Security-Client header' -clause ref: '5.2.2 paragraph 2 item 6) a)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_temporary_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header equal to Security-Server_header of 401_response - and containing Security-Client_header equal to Security-Client_header of unprotected REGISTER - } - then { - IUT sends REGISTER via Mw - not containing Security-Verify_header - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_09 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association, then the P-CSCF shall remove the Security-Client and Security-Verify headers if it is present' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Security-Verify_header - and containing Security-Client_header - } - then { - IUT sends REGISTER via Mw - not containing Security-Verify_header - and not containing Security-Client_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_10 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association and the Security-Client header, then the P-CSCF shall return a suitable 4xx response' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - not containing Security-Client_header - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 4xx_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_11 -summary : 'When a P-CSCF receives REGISTER request from the UE if the REGISTER request was received via an already established security association and private user identity in the Authorization header differs from the one in the unprotected REGISTER request, then the P-CSCF shall return a 403 response' -clause ref: '5.2.2 paragraph 2 item 6) b)' -TP type : conformance -RQ ref : RQ_003_5011 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_established_a_security_association -} -ensure that { - when { - IUT receives protected REGISTER via Gm from UE1 - containing Authorization_header including private_user_identity different to private_user_identity of unprotected REGISTER - } - then { - IUT not sends REGISTER via Mw - and - IUT sends 403_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_12 -summary : 'When a P-CSCF receives SIP 401 (Unauthorized) response to a REGISTER request it shall remove the CK and IK values contained in the 401 (Unauthorized) response insert a Security-Server header in the response' -clause ref: '5.2.2 paragraph 33) 2) and 3)' -TP type : conformance -RQ ref : RQ_003_5023 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 has_sent_REGISTER -} -ensure that { - when { - IUT receives 401_response via Mw - } - then { - IUT sends 401_response via Gm to UE1 - containing WWW-Authenticate_header - not including CK_parameter and not including IK_parameter - and containing Security-Server_header including 'P-CSCF security list and the parameters needed for the security association setup' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_13 -summary : 'When a P-CSCF receives REGISTER request from the UE without a security association, it shall insert a Path header containing SIP URI identifying the P-CSCF, a Require header with a path option tag, a P-Charging-Vector header with a icid parameter, a type 1 orig-ioi parameter, a type 1 orig-ioi parameter identifying the sending network and no type 1 term-ioi parameter, as well as a P-Visited-Network-ID header identifying the visited network at the home network.' -clause ref: '5.2.2A paragraph 2 item 1) - 5)' -TP type : conformance -RQ ref : RQ_003_5221 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT and - UE1 not has_established_a_security_association -} -ensure that { - when { - IUT receives REGISTER via Gm from UE1 - } - then { - IUT sends REGISTER via Mw - containing Path_header including SIP_URI of IUT_P-CSCF - and containing Require_header including path_tag_parameter - and containing P-Charging-Vector_header including icid_parameter - and including orig-ioi_parameter indicating type1 'of the sending network' - and not including term-ioi_parameter indicating type1 - and containing P-Visited-Network-ID_header including visited_network_pre-provisioned_string - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_14 -summary : 'Upon receipt of a SIP 200 (OK) response to an initial SIP REGISTER request, - a P-CSCF located in the visited network shall send a SIP SUBSCRIBE request - to the entry point of the home network' -clause ref: '5.2.3 paragraph 2 item 1) and 2)' -TP type : conformance -RQ ref : RQ_003_5044 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 visiting IUT - UE1 has_sent_initial_REGISTER -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw - containing Request-URI - and containing From_header including SIP_URI of IUT_P-CSCF - and containing To_header including SIP_URI indicating public_user_identity - and containing Event_header including reg_parameter - and containing Expires_header including 'a value higher than the value in the 200_response' - and containing P-Asserted-Identity_header including SIP_URI of IUT_P-CSCF 'inserted into the Path header during the registration of UE1' - and containing P-Charging-Vector_header including icid_parameter - } -} - -TP id : TP_IMST2_MW_REG_15 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" - parameter of its Authorization header is set to the value "no", the Authorization header - specifies a private user identity which has previously been used to register one or more - public user identities which have not yet expired and authentication is successful, - it shall perform network-initiated deregistration of the unexpired public user identities - previously registered by the user' -clause ref: '5.4.1.2.1, 5.4.1.2.2, 5.4.1.5 ' -TP type : conformance -RQ ref : RQ_003_5088 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating no - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header - } - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - } - then { - IUT sends 200_response via Mw - and IUT sends NOTIFY via Mw - containing NOTIFY_body including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_16 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" parameter in the Authorization header is set to "no" and the To field contains an unregistered public user identity, the S-CSCF shall send a 401 (Unauthorized) response to the originating UE including WWW-Authenticate header with a realm, RAND, AUTN, algorithm, IK , and CK parameters.' -clause ref: '5.4.1.2.1 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5089 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating no - and containing To_header including a not registered public_user_identity - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header including realm_parameter indicating 'a globally unique name' of the IUT_S-CSCF - and including RAND_parameter - and including AUTN_parameter - and including algorithm_parameter indicating 'AKAv1-MD5' - and including ik_parameter - and including ck_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_17 -summary : 'When an S-CSCF receives SIP REGISTER request without the "integrity-protected" parameter in the Authorization header, the S-CSCF shall perform the procedure for receipt of a REGISTER request without the "integrity-protected" parameter for the received public user identity and perform network-initiated de-registration if applicable' -clause ref: '5.4.1.2A paragraph 1, 5.4.1.5' -TP type : conformance -RQ ref : RQ_003_5410, RQ_003_5411 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 registered_public_user_identity_with_another_contact_address in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header not including integrity_protected_parameter - and containing Contact_header not including registered_public_user_identities - } - then { - IUT sends 200_response via Mw - and IUT sends NOTIFY via Mw - containing NOTIFY_body including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_18 -summary : 'When S-CSCF receives SIP REGISTER request without the "integrity-protected" parameter in the Authorization header and for existing contact information, it shall process the REGISTER request as if the "integrity-protected" parameter in the Authorization header was set to “yes”' -clause ref: '5.4.1.2A paragraph 18' -TP type : conformance -RQ ref : RQ_003_5415 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 for registered public_user_identity - containing Authorization_header not including integrity-protected_parameter - } - then { - IUT sends 200_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_19 -summary : 'When S-CSCF receives SIP REGISTER request without an Authorization header and for existing contact information, it shall process the REGISTER request as the "integrity-protected" parameter in the Authorization header was set to “yes”' -clause ref: '5.4.1.2A paragraph 18' -TP type : conformance -RQ ref : RQ_003_5415 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered_public_user_identity_with_current_private_user_identity in IUT and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 for registered public_user_identity - not containing Authorization_header - } - then { - IUT sends 200_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_20 -summary : 'If a S-CSCF receives SIP REGISTER request from a UE and the request contains an Expires header which is set to a value shorter than the minimum time that the S-CSCF is able to process, it shall return a SIP 423 (Interval Too Brief) response containing Min-Expires header' -clause ref: '5.4.1.2A.1 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5416 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - IUT not configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Expires_header indicating duration smaller than minimum - - } - then { - IUT sends 423_response via Mw - containing Min-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_21 -summary : 'When an S-CSCF receives SIP REGISTER request in which the "integrity-protected" parameter in the Authorization header is set to "yes", To header contains an unregistered public user identity, the S-CSCF shall send a 401 (Unauthorized) response to the originating UE including WWW-Authenticate header with realm, a RAND and AUTN, algorithm, ik, and the CK (Cipher Key) parameters.' -clause ref: '5.4.1.2.2' -TP type : conformance -RQ ref : RQ_003_5090 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - IUT configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - and containing To_header including a not registered public_user_identity - } - then { - IUT sends 401_response via Mw - containing WWW-Authenticate_header including realm_parameter indicating 'globally unique name' - and including RAND_parameter - and including AUTN_parameter - and including algorithm_parameter indicating 'AKAv1-MD5' - and including ik_parameter - and including ck_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_22 -summary : 'When an S-CSCF receives SIP REGISTER request containing an authentication challenge response from the UE and the integrity-protected parameter in the Authorization header is set to the value "yes", the S-CSCF shall return a SIP 200 (OK) response to the UE' -clause ref: '5.4.1.2.2' -TP type : conformance -RQ ref : RQ_003_5092 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_for_IMS_AKA_authentication and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity_protected_parameter indicating yes - and including algorithm_parameter indicating 'AKAv1-MD5' - and including username_parameter indicating private_user_identity - and including response_parameter indicating valid challenge_response - and containing initial CallID_parameter - } - then { - IUT sends 200_response via Mw - containing Path_header - and containing P-Associated-URI_header including registered_public_user_identities - and containing Service-Route_header including SIP_URI indicating IUT_S-CSCF - and containing P-Charging-Function-Addresses_header - and containing P-Charging-Vector_header - and containing Contact_header including address of public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_23 -summary : 'If a S-CSCF receives SIP REGISTER request containing an authentication challenge response from the UE and the request is not the expected REGISTER and the integrity-protected parameter in the Authorization header is set to the value "yes", the S-CSCF shall return a SIP 403 (Forbidden) response to the UE' -clause ref: '5.4.1.2.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5420, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity-protected_parameter indicating yes - and containing unknown CallID_parameter - } - then { - IUT sends 403_response via Mw - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_24 -summary : 'When an S-CSCF receives SIP REGISTER request from the UE containing an - Authentication Synchronization (AUTS) directive indicating that the - Sequence Number (SQN) was out of range, the S-CSCF shall - return a SIP 401 (Unauthorized) or 403 (Forbidden)' -clause ref: '5.4.1.2.3 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5421, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including AUTS_parameter indicating invalid SQN_parameter - - } - then { - IUT sends 401_response or 403_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_25 -summary : 'When an S-CSCF receives SIP REGISTER request with the "integrity-protected" parameter in the Authorization header set to "yes" and neither the user identity received in the To header nor the private user identity received in the Authorization header of the REGISTER request match any of the S-CSCFs registered users, it shall return a SIP 500 (Server Internal Error) response to the UE' -clause ref: '5.4.1.2.3 paragraph 7' -TP type : conformance -RQ ref : RQ_003_5423, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 visiting IMS and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives REGISTER via Mw originated by UE2 - containing Authorization_header including integrity-protected_parameter indicating yes - and not including private_user_identity matching previous registered public_user_identity - and containing To_header indicating public_user_identity not matching previous registered public_user_identity - } - then { - IUT sends 500_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_REG_26 -summary : 'When an S-CSCF receives SIP REGISTER request which was expected to - carry the response to an authentication challenge but the request contains - no authentication challenge response from the UE and no Authentication Synchronization (AUTS) - parameters indicating that the Message Authentication Code (MAC) parameter was invalid - in the challenge, the S-CSCF shall return a SIP 403 (Forbidden) response to the UE.' -clause ref: '5.4.1.2.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5425, RQ_003_5424 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE2 visiting IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives subsequent REGISTER via Mw originated by UE2 - containing Authorization_header not including authentication_challenge_response_parameter - and not including AUTS_parameter indicating invalid MAC_parameter - } - then { - IUT sends 403_response via Mw addressed to UE2 - containing P-Charging-Vector_header including orig-ioi_parameter indicating type1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -End group 2.2 - -Group 2.3 'Initial request Procedures' - -TP id : TP_IMST2_MW_INI_01 -summary : 'When a P-CSCF receives SIP 2xx response to a SUBSCRIBE request for a previously registered public user identity - and the response indicates that continued subscription is required, it shall automatically refresh the subscription - 600 seconds before the expiration time if the initial subscription was for greater than 1200 seconds' -clause ref: '5.2.3 paragraph 12' -TP type : conformance -RQ ref : RQ_003_5045 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_continuous_subscription and - UE1 visiting IUT and - UE1 registered in IMS via IUT - IUT has_sent_SUBSCRIBE containing Expires_header indicating duration_parameter 'greater than 1200 seconds' -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw '600 seconds before expiration of duration_parameter time' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_02 -summary : 'When a P-CSCF receives SIP 2xx response to a SUBSCRIBE request for a previously registered public user identity - and the response indicates that continued subscription is required, it shall automatically refresh the subscription - when half of the time has expired if the initial subscription was for 1200 seconds or less' -clause ref: '5.2.3 paragraph 12' -TP type : conformance -RQ ref : RQ_003_5045 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_continuous_subscription and - UE1 visiting IUT and - UE1 registered in IMS via IUT - IUT has_sent_SUBSCRIBE indicating duration_parameter 'equal or less than 1200 seconds' -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends SUBSCRIBE via Mw 'after half of the duration_parameter time has elapsed' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_03 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header from the last successful registration - or re-registration, then the P-CSCF shall either return a SIP 400 (Bad Request) - response and not forward the request or replace the received Route header value in the - request with the value of the Service-Route header received during the - last SIP 200 (OK) response for a registration or reregistration' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing Route_header not matching stored Service-Route_header - - } - then { - IUT not sends INVITE via Mw - and - IUT sends 400_response via Gm to UE1 - or - IUT sends INVITE via Mw - containing Route_header from 200_response 'of last registration' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_04 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, - it shall add its own address to the Via header and a add a P-Charging-Vector header with the icid parameter, - when adding its own SIP URI to the Record-Route header, build the P-CSCF SIP URI in a format that contains - the port number of the P-CSCF where it awaits subsequent requests from the called party, and either the - P-CSCF FQDN that resolves to the IP address or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing topmost Route_header indicating IMS - } - then { - IUT sends INVITE via Mw - containing Via_header including address of IUT_P-CSCF - and containing topmost Route_header indicating IMS - and containing Record-Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or indicating IP_address of IUT_P-CSCF - and containing P-Charging-Vector_header including icid_parameter - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_05 -summary : 'When a P-CSCF receives an initial request for a dialog from a UE, - it shall remove the P-Preferred-Identity header, if present, - and insert a P-Asserted-Identity header with a value, including the display name if previously stored during - registration representing the initiator of the request' -clause ref: '5.2.6.3 paragraph 4' -TP type : conformance -RQ ref : RQ_003_5046, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - and containing topmost Route_header indicating IMS - } - then { - IUT sends INVITE addressed to UE2 via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_06 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded request - for an initial dialog, it shall replace in the response its own Record Route entry - with its own SIP URI with the protected server port number of the security - association and either the P-CSCF FQDN or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 18' -TP type : conformance -RQ ref : RQ_003_5047 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE2 via Gm and - IUT has_sent_INVITE addressed to UE2 via Mw -} -ensure that { - when { - IUT receives 180_response from IMS addressed to UE1 via Mw - } - then { - IUT sends 180_response to UE1 via Gm - containing Record_Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF for security_association - and indicating IP_address of IUT_P-CSCF or indicating FQDN_address of IUT_P-CSCF - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_07 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded request - for an initial dialog, it shall replace in the response its own Record Route entry - with its own SIP URI with the protected server port number of the security - association and either the P-CSCF FQDN or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 18' -TP type : conformance -RQ ref : RQ_003_5047 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE addressed to UE2 via Gm and - IUT has_sent_INVITE addressed to UE2 via Mw -} -ensure that { - when { - IUT receives 200_response from IMS addressed to UE1 via Mw - } - then { - IUT sends 200_response to UE1 via Gm - containing Record_Route_header including SIP_URI of IUT_P-CSCF - indicating port_number of IUT_P-CSCF for security_association - and indicating IP_address of IUT_P-CSCF or indicating FQDN_address of IUT_P-CSCF - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_08 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, it shall remove the P-Preferred-Identity - header, if present, and insert a P-Asserted-Identity header with - the value saved from the P-Called-Party-ID header that was received in - the initial request and the registration display name if available' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT has_stored_P-Called-Party-ID_header of UE1 and - IUT has_stored_display_name of UE1 -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 180_response via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_09 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, it shall remove the P-Preferred-Identity - header, if present, and insert a P-Asserted-Identity header with - the value saved from the P-Called-Party-ID header that was received in - the initial request and the registration display name if available' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT has_stored_P-Called-Party-ID_header of UE1 and - IUT has_stored_display_name of UE1 -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 200_response via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_10 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, if Via headers do not match the saved list - of Via headers received in the initial request corresponding to the same - dialog, it either discards the response or replaces the Via header with the ones from the initial request' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 180_response via Mw - or - IUT sends 180_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_11 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, if Via headers do not match the saved list - of Via headers received in the initial request corresponding to the same - dialog, it either discards the response or replaces the Via header with the ones from the initial request' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_12 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, with a Record-Route header including a list of URIs - different to the one received in the Record-Route header of the initial request, - discards the response or replaces the Record-Route header values with those received in the - initial request. - If a security association exists, the P-CSCF adds to the Record-Route header the port number of its own - Record-Route entry with its own SIP URI and the port number where it - awaits subsequent requests from the calling party and with either the P-CSCF - FQDN that resolves to its IP address; or the P-CSCF IP address; and - remove the comp parameter if present' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives 180_response via Gm from UE1 addressed to UE2 - containing Record-Route_header not matching stored Record-Route_header - } - then { - IUT not sends 180_response via Mw or - IUT sends 180_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and indicating port_number of Record-Route_header of IUT_P-CSCF - and indicating SIP_URI and port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF - and not including comp_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_13 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to an initial request - for a dialog from a UE, with a Record-Route header including a list of URIs - different to the one received in the Record-Route header of the initial request, - discards the response or replaces the Record-Route header values with those received in the - initial request. - If a security association exists, the P-CSCF adds to the Record-Route header the port number of its own - Record-Route entry with its own SIP URI and the port number where it - awaits subsequent requests from the calling party and with either the P-CSCF - FQDN that resolves to its IP address; or the P-CSCF IP address; and - remove the comp parameter if present' -clause ref: '5.2.6.4 paragraph 15' -TP type : conformance -RQ ref : RQ_003_5055 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 addressed to UE2 - containing Record-Route_header not matching stored Record-Route_header - } - then { - IUT not sends 200_response via Mw or - IUT sends 200_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and indicating port_number of Record-Route_header of IUT_P-CSCF - and indicating SIP_URI and port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF - and not including comp_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_14 -summary : 'When a P-CSCF receives any other response other than a SIP 1xx or a 2xx - to an initial request to a UE for a dialog and if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, it shall either discard the response or - replace the Via header values with those received in the initial request' -clause ref: '5.2.6.4 paragraph 27' -TP type : conformance -RQ ref : RQ_003_5056 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_INVITE to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 4xx_response via Gm from UE1 addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 4xx_response via Mw - or - IUT sends 4xx_response via Mw - containing Via_header indicating stored Via_header - } -} - -TP id : TP_IMST2_MW_INI_15 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request from a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The proxy MUST NOT - include a refresher parameter in the header field value' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - not containing Session-Expires_header - } - then { - IUT sends INVITE via Mw - containing Session-Expires_header not including refresher_parameter - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_16 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request from a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The duration should not be lower - than the value in the Min-SE header field in the request, if it is present' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Gm from UE1 addressed to UE2 - not containing Session-Expires_header - and containing Min-SE_header - } - then { - IUT sends INVITE via Mw - containing Session-Expires_header including duration_parameter greater than Min-SE_header - and - IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_18 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request destined for a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The proxy MUST NOT - include a refresher parameter in the header field value' -clause ref: 'RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5068, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw originated by UE2 addressed to UE1 - not containing Session-Expires_header - } - then { - IUT sends INVITE via Gm to UE1 - containing Session-Expires_header not including refresher_parameter - and - IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_19 -summary : 'If a P-CSCF requires periodic refreshment of a session established - after receiving a SIP INVITE request destined for a UE the P-CSCF shall - insert a Session-Expires header field in the request before - forwarding it if none was present in the request. The duration should not be lower - than the value in the Min-SE header field in the request, if it is present' -clause ref: '5.2.7.2 paragraph 1, RFC 4028 clause 8' -TP type : conformance -RQ ref : RQ_003_5064, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw originated by UE2 addressed to UE1 - not containing Session-Expires_header - and containing Min-SE_header - } - then { - IUT sends INVITE via Gm to UE1 - containing Session-Expires_header including duration_parameter greater than Min-SE_header - and - IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_20 -summary : 'When a P-CSCF receives an initial SIP INVITE request destined for a - UE it shall respond with a SIP 100 (Trying) provisional response before - forwarding the INVITE to the UE' -clause ref: '5.2.7.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5070, RQ_003_5070 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - } - then { - IUT sends 100_response via Mw - and IUT sends INVITE via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_21 -summary : 'When a S-CSCF receives a response to an initial request and the response contains term-ioi parameters - and is not destined for an AS, the S-CSCF shall remove all received ioi parameters from the P-Charging-Vector header - before forwarding the response' -clause ref: '§5.4.3.2 ¶58' -TP type : conformance -RQ ref : RQ_003_5104 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_sent_INVITE from UE1 to UE2 via Mw -} -ensure that { - when { - IUT receives 200_response via Mw from UE2 addressed to UE1 - containing P-Charging-Vector_header including ioi_parameter - } - then { - IUT sends 200_response via Gm to UE1 - not containing P-Charging-Vector_header including ioi_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_22 -summary : 'When the S-CSCF receives an initial request for a new dialog and the Request URI contains a barred public user identity, - the S-CSCF shall reject the request by sending a SIP 404 (Not Found) response' -clause ref: '§5.4.3.3 first numbered list 1)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing Request_URI including barred_public_user_identity - } - then { - IUT sends 404_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_23 -summary : 'When the S-CSCF receives an initial request and the Request URI contains an invalid GRUU, - the S-CSCF shall reject the request by sending a SIP 4xx response' -clause ref: '§5.4.3.3 first numbered list 3A)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing Request_URI including invalid GRUU_parameter - } - then { - IUT sends 4xx_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_24 -summary : 'When the S-CSCF receives an initial request and the P-Asserted-Service header indicates a service that is not - subscribed-to by the user, the S-CSCF shall reject the request by sending a SIP 403 (Forbidden) response' -clause ref: '§5.4.3.3 first numbered list 3C)' -optional : true -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_unsubscribed_service -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - containing P-Asserted-Service_header indicating unsubscribed service - } - then { - IUT sends 403_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_INI_25 -summary : 'When the S-CSCF receives an initial request without P-Asserted-Service header and the SDP offer indicates a service - that is not subscribed-to by the user, the S-CSCF shall reject the request by sending a SIP 403 (Forbidden) response' -clause ref: '§5.4.3.3 first numbered list 3D)' -TP type : conformance -RQ ref : RQ_003_5108 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_unsubscribed_service -} -ensure that { - when { - IUT receives INVITE via Mw from UE2 - not containing P-Asserted-Service_header - and containing SDP_offer indicating unsubscribed service - } - then { - IUT sends 403_response via Mw addressed to UE2 - } -} - -End group 2.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.4 'Standalone Procedures' - -TP id : TP_IMST2_MW_STA_01 -summary : 'When a P-CSCF receives a request for a standalone transaction from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header from the last successful registration - or re-registration, then the P-CSCF shall either return a SIP 400 (Bad Request) - response and not forward the request or replace the received Route header value in the - request with the value of the Service-Route header received during the - last SIP 200 (OK) response for a registration or reregistration' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Service-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - containing Route_header not matching stored Service-Route_header - } - then { - IUT not sends MESSAGE via Mw - and IUT sends 400_response via Gm - or - IUT sends MESSAGE via Mw - containing Route_header including stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_02 -summary : 'When a P-CSCF receives request for a standalone transaction from a UE, - it shall remove the P-Preferred-Identity header, if present, and insert a - P-Asserted-Identity header with a value representing the initiator of the - request and including display name if previously stored during registration' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored display_name_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_03 -summary : 'When a P-CSCF receives request for a standalone transaction from a UE - it shall add a P-Charging-Vector header with the icid parameter' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5050 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Service-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_04 -summary : 'When a P-CSCF receives any response to a forwarded request for a - standalone transaction, it shall forward the response to the UE' -clause ref: '5.2.6.3 paragraph 53' -TP type : conformance -RQ ref : RQ_003_5051 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE from UE1 via Gm addressed to UE2 and - IUT has_sent_MESSAGE via Mw -} -ensure that { - when { - IUT receives 200_response via Mw originated by UE2 addressed to UE1 - } - then { - IUT sends 200_response via Gm to UE1 - } -} - - -TP id : TP_IMST2_MW_STA_05 -summary : 'When a P-CSCF receives request for a standalone transaction or a request - for an unknown method (that does not relate to an existing dialog) destined - for a UE, it shall add its own address to the top of the received list of Via header - in a format that contains the protected server port number of the security - association, if established, between the UE and the P-CSCF and either the P-CSCF FQDN - that resolves to the IP address of the security association or the P-CSCF IP - address of the security association' -clause ref: '5.2.6.4 paragraph 80' -TP type : conformance -RQ ref : RQ_003_5060 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives MESSAGE via Mw originated by UE2 addressed to UE1 - } - then { - IUT sends MESSAGE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF for security_association - and not containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_06 -summary : 'When a P-CSCF receives any response to a request for a standalone - transaction destined for a UE, if the list of Via headers does - not match the saved list of Via headers received in the request, - either discard the response or replace the Via header values with - those received in the request' -clause ref: '5.2.6.4 paragraph 89' -TP type : conformance -RQ ref : RQ_003_5061 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT has_stored_Via_header -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_STA_07 -summary : 'When a P-CSCF receives any response to a request for a standalone - transaction destined for a UE, remove the P-Preferred-Identity header, - if present, and insert a P-Asserted-Identity header with the saved public user - identity from the P-Called-Party-ID header of the request plus the display name if - previously stored during registration' -clause ref: '5.2.6.4 paragraph 89' -TP type : conformance -RQ ref : RQ_003_5061 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_received_MESSAGE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_MESSAGE via Gm to UE1 and - IUT has_stored_public_user_identity_from_P-Called-Party-ID_header -} -ensure that { - when { - IUT receives 200_response from UE1 addressed to UE2 - containing P-Preferred-Identity_header - } - then { - IUT sends 200_response via Mw addressed to UE2 - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including stored public_user_identity - and including stored display_name_parameter - } -} - -End group 2.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.5 'Subsequent Request Procedures' - -TP id : TP_IMST2_MW_SUB_01 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, - that does not relate to an existing dialog in which the originator is involved - then the P-CSCF shall send a SIP 403 (Forbidden) response back to the - originator and not forward the request' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog with UE2 -} -ensure that { - when { - IUT receives BYE via Gm from UE1 - containing Call-ID_header not indicating 'existent dialog' - } - then { - IUT not sends BYE via Mw - and IUT sends 403_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_02 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, from a UE, containing a list of URIs - in the Route header different to the stored values of the Service-Route header for the existing dialog - then the P-CSCF shall either return a SIP 400 (Bad Request) response and not forward the request or replace - the received Route header value in the request with the stored value of the Service-Route header for the same dialog' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Record-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog with UE2 -} -ensure that { - when { - IUT receives BYE via Gm from UE1 containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends BYE via Mw - and IUT sends 400_response via Gm - or - IUT sends BYE via Mw containing Route_header including stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_03 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, from a UE, - for dialogs that are not INVITE dialogs, it shall add a P-Charging-Vector header - with the icid parameter' -clause ref: '5.2.6.3 paragraph 56' -TP type : conformance -RQ ref : RQ_003_5052 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_a_SUBSCRIBE_dialog with UE1 -} -ensure that { - when { - IUT receives PUBLISH via Gm - } - then { - IUT sends PUBLISH via Mw - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_04 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE, - if the request does not relate to an existing dialog in which the originator is involved, - then the P-CSCF shall send a SIP 403 (Forbidden) response back to the originator and not forward the request' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - containing Call-ID_header not indicating 'existent dialog' - } - then { - IUT not sends BYE via Gm addressed to UE1 - and IUT sends 403_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_05 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE - containing a list list of Route headers different to the stored list of Record-Route - headers for the same dialog, then the P-CSCF shall either return a SIP 400 (Bad Request) response - and not forward the request or replace the Route header value in the request with the stored list - of Record-Route headers for the same dialog' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Record-Route_header -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends BYE via Gm to UE1 - and IUT sends 400_response via Mw - or - IUT sends BYE via Gm to UE1 - containing stored Record-Route_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_06 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE - for dialogs that are not INVITE dialogs, add a P-Charging-Vector header with the icid parameter' -clause ref: '5.2.6.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5054 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_a_SUBSCRIBE_dialog with UE1 -} -ensure that { - when { - IUT receives PUBLISH via Mw addressed to UE1 - } - then { - IUT sends PUBLISH via Gm to UE1 - containing P-Charging-Vector_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_07 -summary : 'When a P-CSCF receives a subsequent request, other than a target refresh request, for a UE, - it shall add its own address to the top of the received list of Via header in a format that - contains the protected server port number of the security association if one is established between the UE - to the P-CSCF and either the P-CSCF FQDN that resolves to the IP address of the security association or the - P-CSCF IP address of the security association, and no P-Charging-Vector header with icid parameter shall be sent' -clause ref: '5.2.6.4 paragraph 95' -TP type : conformance -RQ ref : RQ_003_5062 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_Dialog with UE1 -} -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 originated by UE2 - } - then { - IUT sends BYE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including FQDN_address of IUT_P-CSCF or IP_address of IUT_P-CSCF for security_association - and not containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_08 -summary : 'When a P-CSCF receives a response to a subsequent request, other than a target refresh request, - if the list of Via headers does not match the saved list of Via headers received in the subsequent request, - the P-CSCF shall either discard the response or replace the Via header values with those received - in the subsequent request' -clause ref: '5.2.6.4 paragraph 103' -TP type : conformance -RQ ref : RQ_003_5063 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_Dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_BYE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_BYE via Gm to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm addressed to UE2 - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_09 -summary : 'If a P-CSCF receives a subsequent request within a dialog for which it has - previously initiated session release, the P-CSCF shall terminate the request - and answer it with a SIP 481 (Call/Transaction Does Not Exist) response' -clause ref: '5.2.8.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5241 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE1 has_established_an_INVITE_dialog and - IUT has_received_BYE from UE1 and - IUT has_sent_BYE via Mw } - -ensure that { - when { - IUT receives BYE via Mw addressed to UE1 - } - then { - IUT sends 481_response via Mw addressed to UE2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SUB_10 -summary : 'When the registration lifetime of the only public user identity currently registered of the calling user expires - while there is still an active dialog that include this user and where the session was initiated with the public - user identity currently registered, then the S-CSCF shall send a SIP BYE request destined for the called user and - shall send a SIP BYE request destined for the calling user' -clause ref: '§5.4.5.1.2A ¶1' -TP type : conformance -RQ ref : RQ_003_5140 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - registration of UE1 expires - } - then { - IUT sends BYE via Gm1 to UE1 - and - IUT sends BYE via Mw addressed to UE2 - containing Request-URI indicating stored Contact_header from initial INVITE - and containing To_header indicating To_header from 200_response - and containing From_header indicating From_header from initial INVITE - and containing Call-ID_header indicating From_header from initial INVITE - and containing CSeq_header as stored for direction_calling_to_called - and containing Route_header as stored for dialog - and containing Reason_header - } -} - -End group 2.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.6 'Target Refresh Procedures' - -TP id : TP_IMST2_MW_TAR_01 -summary : 'When a P-CSCF receives a target refresh request not ot relating to - an existing dialog from a UE, it shall answer the request by sending a - SIP 403 (Forbidden) response back to the originator and not forward the request' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT not has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh UPDATE from UE1 addressed to UE2 via Gm - } - then { - IUT not sends target_refresh UPDATE via Mw to IMS - and - IUT sends 403_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_02 -summary : 'When a P-CSCF receives a target refresh request from a UE, containing a list of URIs - in the Route header different to the stored values of the Record-Route headers for the same dialog, - then the P-CSCF shall either return a SIP 400 (Bad Request) response and not forward the request - or replace the received Route header value in the request with the stored list of Record-Route - headers for the same dialog' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5079 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_Record-Route_header of UE1 and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 addressed to UE2 - containing Route_header not matching stored Record-Route_header - } - then { - IUT not sends INVITE via Mw - and IUT sends 400_response via Gm - or - IUT sends INVITE via Mw - containing Route_header including stored Record-Route_header - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_03 -summary : 'When a P-CSCF receives a target refresh request from a UE, it shall add its own address to the Via header - and to the Record-Route header, the P-CSCF SIP URI shall be built in a format that contains the port number - of the P-CSCF where it awaits responses (in Via header) and subsequent requests (in Record-Route header) - from the called party, and either the P-CSCF FQDN that resolves to the IP address or the P-CSCF IP address' -clause ref: '5.2.6.3 paragraph 26' -TP type : conformance -RQ ref : RQ_003_5048, RQ_003_5080, RQ_003_5079 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 addressed to UE2 - } - then { - IUT sends INVITE via Mw - containing Via_header including port_number of IUT_P-CSCF - and including IP_address of IUT_P-CSCF or including FQDN_address of IUT_P-CSCF - and containing Record-Route_header including SIP_URI of IUT_P-CSCF indicating port_number of IUT_P-CSCF - and indicating FQDN_address of IUT_P-CSCF - or indicating IP_address of IUT_P-CSCF - and containing P-Charging-Vector_header including updated access-network-charging-info_parameter - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_04 -summary : 'If a security association exists between the UE and P-CSCF, - when a P-CSCF receives any SIP 1xx or 2xx response as a result of a forwarded target refresh request, - it shall replace the address and port number of its own Record Route - entry to the same value as for the response to the initial request for the dialog' -clause ref: '5.2.6.3 paragraph 42' -TP type : conformance -RQ ref : RQ_003_5049 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association in IUT - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE via Mw - -} -ensure that { - when { - IUT receives 200_response via Mw - } - then { - IUT sends 200_response via Gm to UE1 - containing Record_Route_header of IUT_P-CSCF - indicating same address and same port_number of IUT_P-CSCF of response to initial INVITE - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_05 -summary : 'When a P-CSCF receives a target refresh request for a dialog destined for a UE - it shall add its own address to the top of the received list of Via header in a - format that if a security association exists between the UE and the - P-CSCF, contains the protected server port number of the security association and either - the P-CSCF FQDN that resolves to the IP address of the security association or - the P-CSCF IP address of the security association' -clause ref: '5.2.6.4 paragraph 32' -TP type : conformance -RQ ref : RQ_003_5057, RQ_003_5081 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT_P-CSCF and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - IUT has_established_an_INVITE_dialog from UE1 to UE2 - IUT has_received_target_refresh_INVITE via Mw addressed to UE1 and - IUT has_sent_target_refresh_INVITE via Gm to UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE via Mw addressed to UE1 - } - then { - IUT sends target_refresh INVITE via Gm to UE1 - containing Via_header including port_number of IUT_P-CSCF for security_association - and including as topmost the IP_address of IUT_P-CSCF or the FQDN_address of IUT_P-CSCF - and containing Record-Route_header indicating as topmost the SIP_URI of IUT_P-CSCF - and IUT sends 100_response via Mw - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_06 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, either discard the response or replace the Via header - values with those received in the request' -clause ref: '5.2.6.4 paragraph 67' -TP type : conformance -RQ ref : RQ_003_5058 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 200_response via Mw - or - IUT sends 200_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_07 -summary : 'When a P-CSCF receives SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if a security association exists, - rewrite the address and port number of its own Record-Route entry to - the same value as for the response to the initial request for the - dialog and remove the comp parameter' -clause ref: '5.2.6.4 paragraph 67' -TP type : conformance -RQ ref : RQ_003_5058, RQ_003_5082 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Record-Route_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 via Gm - } - then { - IUT sends 200_response via Mw - containing Record-Route_header indicating stored Record-Route_header - and containing P-Charging-Vector_header including updated access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_08 -summary : 'When a P-CSCF receives any response other than the SIP 1xx or 2xx response to a target refresh - request for a dialog destined for the UE, if the list of Via headers - does not match the saved list of Via headers received in the initial request - corresponding to the same dialog, either discard the response or replace the Via header - values with those received in the request' -clause ref: '5.2.6.4 paragraph 74' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_stored_Via_header and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 via Gm - containing Via_header not matching stored Via_header - } - then { - IUT not sends 4xx_response via Mw - or - IUT sends 4xx_response via Mw - containing Via_header indicating stored Via_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_TAR_09 -summary : 'When a P-CSCF receives any response other than the SIP 1xx or 2xx response - to a target refresh request for a dialog destined for a UE, if a security - association exists, rewrite the address and port number of its own - Record-Route entry to the IP address and the port number where it awaits subsequent - requests from the calling party and remove the comp parameter' -clause ref: '5.2.6.4 paragraph 74' -TP type : conformance -RQ ref : RQ_003_5059 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - UE1 has_established_a_security_association with IUT and - UE2 registered in IMS and - IUT configured_with_an_entry_point to IMS and - UE2 has_established_an_INVITE_dialog with UE1 and - IUT has_received_target_refresh_INVITE via Mw originated by UE2 addressed to UE1 and - IUT has_sent_target_refresh_INVITE to UE1 -} -ensure that { - when { - IUT receives 4xx_response from UE1 via Gm - } - then { - IUT sends 4xx_response via Mw - containing Record-Route_header indicating IP_address of IUT_P-CSCF - and indicating port_number of IUT_P-CSCF - and not including comp_parameter - } -} - -End group 2.6 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.7 'Emergency' - -TP id : TP_IMST2_MW_EME_01 -summary : 'When P-CSCF receives from an unregistered user an initial request other than a SIP REGISTER - for a dialog and the Request-URI contained in the request matches one of the emergency service - identifiers, it shall insert an emergency service URN into the Request-URI field and - select an E-CSCF and add the URI of the selected E-CSCF to the topmost Route header and - continue with normal initial SIP request process procedure' -clause ref: '5.2.10.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5250, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 not registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - containing Request_URI indicating emergency_service_URN - and containing Route_header including topmost SIP_URI of IUT_E-CSCF - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_02 -summary : 'When P-CSCF receives from an unregistered user an initial request other than a SIP REGISTER - for a dialog and the Request-URI contained in the request matches one of the emergency service - identifiers, it shall insert an emergency service URN into the Request-URI field and - select an E-CSCF and add the URI of the selected E-CSCF to the topmost Route header and - continue with normal initial SIP request process procedure but without removing the - P-Preferred-Identity header and inserting a P-Asserted-Identity header' -clause ref: '5.2.10.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5250, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 not registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - and containing P-Preferred-Identity_header - } - then { - IUT sends INVITE via Mw - containing P-Preferred-Identity_header - and not containing P-Asserted-Identity_header - and containing Request-URI indicating emergency_service_URN and - and containing Route_header including topmost SIP_URI of IUT_E-CSCF - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_03 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers, - the P-CSCF shall include an emergency service URN in the Request-URI' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_04 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers - the P-CSCF shall include an emergency service URN in the Request-URI and if the - P-Preferred-Identity header is present and carries the registered emergency public user identity, - remove that header and insert a P-Asserted-Identity header with the registered emergency public - user identity a second P-Asserted-Identity header with the tel-URI associated with the registered - emergency public user identity' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - and containing P-Preferred-Identity_header including emergency_public_user_identity - } - then { - IUT sends INVITE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including emergency_public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of emergency_public_user_identity - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_05 -summary : 'When a P-CSCF receives from a UE, that has previously registered specifically for - emergency service, an initial request that is not a SIP REGISTER request, and the - Request-URI contained in the request matches one of the emergency service identifiers, - the P-CSCF shall include an emergency service URN in the Request-URI and if the - P-Preferred-Identity header is present and carries the tel-URI associated with the registered - emergency public user identity, remove that header and insert a P-Asserted-Identity header - with the tel-URI associated with the registered emergency public user identity and a second - P-Asserted-Identity header with the registered emergency public user identity' -clause ref: '5.2.10.3 paragraph 3' -TP type : conformance -RQ ref : RQ_003_5253, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - and containing P-Preferred-Identity_header including tel_URI of emergency_public_user_identity - } - then { - IUT sends INVITE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including emergency_public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of emergency_public_user_identity - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_06 -summary : 'When a P-CSCF receives target refresh request for an emergency dialog with - the Request-URI containing GRUU, it shall obtain the UE IP address and UE - protected server port related to the GRUU contained in the Request-URI and - rewrite the Request-URI with that UE IP address and UE protected server port' -clause ref: '5.2.10.3 paragraph 13' -TP type : conformance -RQ ref : RQ_003_5255 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered_for_emergency_service in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions and - UE1 has_established_an_emergency_session -} -ensure that { - when { - IUT receives target_refresh INVITE via Gm from UE1 - containing Request-URI including GRUU - } - then { - IUT sends INVITE via Mw - containing Request-URI including UE1 IP_address and protected_server_port_number - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_07 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, the P-CSCF shall - include an emergency service URN in the Request-URI field' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256, RQ_003_5065 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI matching an emergency_service_identifier - } - then { - IUT sends INVITE via Mw - and containing Request-URI indicating emergency_service_URN - and IUT sends 100_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_08 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, - if the public user identity included in the P-Preferred-Identity header - matches one of the P-CSCFs registered public user identities remove the - P-Preferred-Identity header from the received request, insert a P-Asserted-Identity - header that includes the public user identity that was present in the - P-Preferred-Identity header and add a second P-Asserted identity header that - contains the tel URI associated with the public user identity' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 via Gm - containing Request-URI including emergency_service_URN - and containing P-Preferred-Identity_header including registered public_user_identity - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including registered public_user_identity - and containing second P-Asserted-Identity_header including tel_URI of public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_09 -summary : 'When a P-CSCF receives from a UE that has registered for non-emergency service - an initial request that is not a SIP REGISTER request, and the Request-URI contained - in the request matches one of the emergency service identifiers, if the tel URI associated - with one of the registered public user identities is included in the - P-Preferred-Identity header remove the P-Preferred-Identity header, - insert a P-Asserted-Identity header that includes the tel URI that was present - in the P-Preferred-Identity header and add a second P-Asserted-Identity header - that contains a public user identity' -clause ref: '5.2.10.4 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5256 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_stored_display_name and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 via Gm - containing Request-URI including emergency_service_URN - and containing P-Preferred-Identity_header including tel_URI of public_user_identity - } - then { - IUT sends MESSAGE via Mw - not containing P-Preferred-Identity_header - and containing P-Asserted-Identity_header including tel_URI of public_user_identity - and containing second P-Asserted-Identity_header including registered public_user_identity - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_10 -summary : 'When a P-CSCF receives for a user registered for non-emergency services a target - refresh request for an emergency dialog with the Request-URI containing GRUU, it - shall obtain the UE IP address and UE protected server port related to the GRUU - contained in the Request-URI and rewrite the Request-URI with that UE IP address - and UE protected server port' -clause ref: '5.2.10.4 paragraph 10' -TP type : conformance -RQ ref : RQ_003_5258 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_for_emergency_sessions and - UE1 has_established_an_emergency_session -} -ensure that { - when { - IUT receives target_refresh INVITE via Gm from UE1 - containing Request-URI including GRUU - } - then { - IUT sends INVITE via Mw - containing Request-URI including UE1 IP_address and protected_server_port_number - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_EME_11 -summary : 'A P-CSCF shall respond to a SIP INVITE request for an emergency session with a SIP 380 - response if it is not capable of or not configured to handle the requested - emergency sessions' -clause ref: '5.2.10.5 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5259 -role : IMS -- General -config ref: CF_1Mw1Gm - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT not configured_for_emergency_sessions -} -ensure that { - when { - IUT receives INVITE from UE1 - containing Request-URI including emergency_service_URN - } - then { - IUT sends 380_response to UE1 - } -} - -End group 2.7 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 2.8 'SDP' - -TP id : TP_IMST2_MW_SDP_01 -summary : 'When an S-CSCF receives a SIP request containing a SDP offer in which there are media parameters - which are not permitted by local policy or by user subscription, it shall send a SIP 488 (Not Acceptable Here) - response containing a SDP payload which contains all or an acceptable subset, of the media types, codecs - and other SDP parameters permitted by local policy or user subscription' -clause ref: '§6.3 ¶1' -TP type : conformance -RQ ref : RQ_003_6008 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT sends 488_response via Mw - containing SDP_offer - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_02 -summary : 'When an S-CSCF receives a SIP request containing an encrypted SDP offer, it may reject the request' -clause ref: '§6.3 ¶1' -TP type : conformance -RQ ref : RQ_003_6009 -role : IMS -- General -config ref: CF_1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_encrypted_SDP_offers } - -ensure that { - when { - IUT receives INVITE via Mw addressed to UE1 - containing encrypted SDP_offer - } - then { - IUT sends 4xx_response via Mw - and IUT not sends INVITE via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_03 -summary : 'When an P-CSCF receives a SIP request containing a SDP answer to a SDP offer - which was contained in a previously forwarded SIP response, other than a SIP 200 (OK), - the P-CSCF shall not examine the media parameters in the received SDP offer' -clause ref: '§6.2 ¶2' -TP type : conformance -RQ ref : RQ_003_6002 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives 180_response via Mw addressed to UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT not sends 4xx_response via Mw - and IUT sends 180_response via Gm - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_04 -summary : 'When a P-CSCF receives a SIP ACK request containing an SDP answer in response to a SDP offer - which was previously forwarded in a SIP 200 (OK) response and which contained media parameters not - permitted by local policy, it shall terminate the session' -clause ref: '§6.2 ¶3' -TP type : conformance -RQ ref : RQ_003_6004 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT configured_with_an_entry_point to IMS -} -ensure that { - when { - IUT receives 200_response via Gm from UE1 - containing SDP_offer including unacceptable media_parameter - } - then { - IUT sends 200_response via Mw - } - when { - IUT receives ACK via Mw for UE1 - containing SDP_answer - } - then { - IUT sends BYE via Mw - and IUT sends BYE via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_MW_SDP_05 -summary : 'When a P-CSCF receives a SIP ACK request containing an SDP answer in response to an - encrypted SDP offer which was previously forwarded in a SIP 200 (OK) response, it may - terminate the session' -clause ref: '§6.2 ¶3' -TP type : conformance -RQ ref : RQ_003_6005 -role : IMS -- General -config ref: CF_1Gm1Mw - -with { - IUT not configured_for_topology_hiding and - UE1 registered in IUT and - IUT has_received_INVITE via Mw for UE1 and - IUT has_sent_INVITE via Gm to UE1 and - IUT configured_with_an_entry_point to IMS and - IUT configured_to_reject_encrypted_SDP_offers } - -ensure that { - when { - IUT receives 200_response via Gm from UE1 - containing encrypted SDP_offer - } - then { - IUT sends 200_response via Mw - } - when { - IUT receives ACK via Mw for UE1 - containing encrypted SDP_answer - } - then { - IUT sends BYE via Mw - and IUT sends BYE via Gm to UE1 - } -} - -End group 2.8 - -End group 2 diff --git a/tp/tplan/IMS_CTS_Defs.tplan b/tp/tplan/IMS_CTS_Defs.tplan deleted file mode 100644 index d17d597df59a9e7450a315ca0d7f18e8d7cf9e20..0000000000000000000000000000000000000000 --- a/tp/tplan/IMS_CTS_Defs.tplan +++ /dev/null @@ -1,483 +0,0 @@ --- --- headers --- -def header clause -def header type -def header optional - - --- --- entities --- - --- entities within IUT -def entity IUT_NASS -- entity within IUT -def entity IUT_I-CSCF -- entity within IUT -def entity IUT_P-CSCF -- entity within IUT -def entity IUT_S-CSCF -- entity within IUT -def entity IUT_IBCF -- SUT functional element -def entity IUT_E-CSCF - --- interfaces to IUT -def entity Gm -def entity Gm1 -def entity Gm2 -def entity Mw -def entity Mw1 -def entity Mw2 -def entity Ic1 -def entity Ic2 -def entity AS1 -def entity AS2 -def entity ISC -def entity ISC1 -def entity ISC2 - - --- IMS entities -def entity IMS -def entity IMS_P-CSCF - --- UE entities -def entity UE -- used in 1Gm -def entity UE1 -- user connected to IUT -def entity UE2 -- user connected to another IMS network (or IUT as second UE) - --- events -def event REGISTER { - Request_URI, - - -- all headers are postfixed by '_header' - Authorization_header, - Security-Client_header, - Security-Verify_header, - Path_header, - Require_header, - P-Visited-Network-ID_header, - Service-Route_header, - WWW-Authenticate_header, - Request-URI, - To_header, - From_header, - Contact_header, - Expires_header -} - -def event INVITE { - Request_URI, - - Via_header, - Record-Route_header, - Supported_header, - P-Charging-Vector_header, - P-Asserted-Identity_header, - P-Preferred-Identity_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header, - Route_header, - Session-Expires_header, - Min-SE_header, - Content-Type_header, - any_header -- used when all headers of the INVITE request are described -} - - -def event ACK { - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header, - P-Charging-Vector_header -} - -def event UPDATE { - Via_header, - Record-Route_header -} - -def event PUBLISH { - P-Preferred-Identity_header, - P-Asserted-Identity_header -} - -def event CANCEL { - P-Charging-Vector_header -} - -def event BYE { - Request_URI, - - P-Charging-Vector_header, - To_header, - From_header, - Call-ID_header, - CSeq_header, - Route_header, - Reason_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header -} - -def event MESSAGE { - P-Charging-Vector_header, - P-Charging-Vector_headers, - P-Charging-Function-Addresses_header, - P-Media-Authorization_header, - - Message_Body -} - -def event SUBSCRIBE { - From_header, - To_header, - Event_header, - Expires_header, - P-Asserted-Identity_header, - P-Charging-Vector_header -} - -def event INFO { - P-Charging-Vector_header, - - P-Preferred-Identity_header, - P-Asserted-Identity_header, - P-Asserted-Service_header, - Route_header -} - -def event PRACK { - P-Charging-Vector_header, - - P-Access-Network-Info_header, - P-Charging-Function-Addresses_header -} - - -def event NOTIFY { - P-Charging-Vector_header -} - - -def event Unknown_Method { - P-Preferred-Identity_header, - P-Asserted-Identity_header -} - -def event DNS_Query - -def event DNS_Response { - NAPTR_Resource_Record -} - -def event 100_response -def event 1xx_response { - Record_Route_header -} -def event 180_response -def event 2xx_response { - Record_Route_header -} -def event 200_response { - SDP_offer, - Path_header, - P-Associated-URI_header, - Service_Route_header, - P-Charging-Function-Addresses_header, - P-Charging-Vector_header, - Contact_header - -} -def event 3xx_response { - Contact_header -} -def event 305_response -def event 380_response -def event 4xx_response -def event 401_response { - Security-Server_header -} -def event 400_response -def event 403_response -def event 404_response -def event 408_response -def event 422_response { - Min-SE_header -} -def event 423_response { - Min-Expires_header -} -def event 480_response -def event 481_response -def event 488_response { - SDP_offer -} -def event 5xx_response -def event 500_response -def event 504_response -def event 6xx_response -def event 604_response -def event response -- any xxx response - --- --- values and parameters --- - --- URIs -def value Tel_URI -def value Tel_URI_E.164_Number -def value SIP_URI -def value Contact_URI -def value GRUU -- global routable user agent URI - - --- SIP message parameters (which have an ABNF rule associated with them) --- postfixed by parameter -def value term-ioi_parameter -def value orig-ioi_parameter -def value ioi_parameter -- equals inter operator identifier -def value icid_parameter -- NOTE: correct values defined in 3GPP TS 32.260 !! -def value comp_parameter -def value sequence_number_parameter -def value reg_parameter -def value CK_parameter -def value IK_parameter -def value integrity-protected_parameter -def value network_provider_parameter -def value access-network-charging-info_parameter -def value security_association_parameters -def value user_part_parameter -- corresponds to userinfo rule in RFC ABNF -def value path_tag_parameter -def value display_name_parameter -def value authentication_challenge_response_parameter -def value duration_parameter -- corresponds to delta-seconds rule in RFC ABNF -def value refresher_parameter -def value RAND_parameter -def value AUTN_parameter -def value algorithm_parameter -def value integrity_protected_parameter -def value realm_parameter -def value dsl-location_parameter -def value SQN_parameter -def value AUTS_parameter -def value MAC_parameter -def value GRUU_parameter -def value media_parameter -def value CallID_parameter -def value tokenized-by_parameter -def value orig_parameter -def value username_parameter -def value response_parameter - --- identities -def value public_user_identity -def value private_user_identity -def value registered_public_user_identities -def value default_registered_public_user_identity -def value barred_public_user_identity -def value non_barred_public_user_identity -def value emergency_service_identifier -def value emergency_public_user_identity -def value unknown_user - --- addresses -def value address -def value contact_address -def value IP_address -def value FQDN_address -- FQDN equals "fully qualified domain name" -def value OCF_addresses -def value CDF_addresses - --- port numbers -def value port_number -def value via_port_number -- port number in accordance with procedures in RFC 3261 -def value unprotected_port_number -def value protected_server_port_number - --- values of parameters -def value type1 -def value type2 -def value type3 -def value yes -def value visited_network_pre-provisioned_string -def value ENUM_entry -def value SESSION_TERMINATED -def value SESSION_CONTINUED -def value security_association -def value emergency_service_URN -def value line-identifier -def value duration -def value service -def value 488_response_code -def value 503_response_code -def value SDP_offer -def value SDP_answer -def value NOTIFY_body -def value timer_option_tag -def value acceptable_expiration -def value challenge_response - --- initial filter criteria -def value iFC1 -def value iFC2 - --- --- conditions --- - --- conditions to express that an entity is configured to act in a given way -def condition configured_with_one_entry_point_to_home_network -- remote IMS has one entry point -def condition configured_with_two_entry_points_to_home_network -- remote IMS has two entry points -def condition configured_with_a_terminating_unregistered_filter_criterion -def condition configured_with_an_entry_point -def condition configured_for_IMS-ALG -def condition configured_for_SIP_screening -def condition configured_for_registration_with_security_association -def condition configured_for_topology_hiding -- SUT requires topology hiding -def condition configured_for_screening -- SUT applies screening policy -def condition configured_for_storing_the_display_name_at_registration -def condition configured_for_being_in_the_same_trust_domain -def condition configured_for_continuous_subscription -def condition configured_with_a_connection_to_a_NASS_which_supports -def condition configured_for_requiring_periodic_refreshment -def condition configured_with_Policy_and_Charging_Rules_Function -def condition configured_for_emergency_sessions -def condition configured_for_establishing_security_association -def condition configured_to_reject_encrypted_SDP_offers -- PICS item A.3/18.1.1 and 18.1.3 -def condition configured_to_reject_unsubscribed_service -def condition configured_for_IMS_AKA_authentication - -def condition configured_with_an_iFC_designed_to_contact -def condition configured_with_an_iFC1_designed_to_contact -def condition configured_with_an_iFC2_designed_to_contact - -def condition configured_for_being_within_same_IMS_network - --- some special conditions -def condition has_indicated_the_handling_of_the_whole_dialog - -- a proxy or an AS indicates that using the record routing mechanism (adding its SIP_URI to the Record-Route header) -def condition configured_for_forwarding_MESSAGE_directly_to_AS1 - -- see (24.229 - 5.3.2.1) - -- or The HSS maintains the address information of the AS hosting the PSI for the "PSI user". In this case, the AS address - -- information for the PSI is returned to the I-CSCF in the location query response, in which case the I-CSCF will - -- forward the request directly to the AS hosting the PSI (23.228 - 5.4.12.2) - --- conditions to express that something has been initiated -def condition has_initiated_security_association_establishment - --- conditions to express that something has been established -def condition has_established_a_security_association -def condition has_established_a_temporary_security_association -def condition has_established_an_emergency_session -def condition has_established_a_SUBSCRIBE_dialog -def condition has_established_an_INVITE_dialog --including ACK - --- conditions to express that something has been terminated -def condition has_terminated_dialog - --- conditions to express that an entity has stored something -def condition has_stored_Service-Route_header -def condition has_stored_P-Called-Party-ID_header -def condition has_stored_display_name -def condition has_stored_Record-Route_header -def condition has_stored_Via_header -def condition has_stored_Cseq_header -def condition has_stored_public_user_identity_from_P-Called-Party-ID_header - --- conditions to express that an entity has received a message -def condition has_received_REGISTER -def condition has_received_MESSAGE -def condition has_received_INVITE -def condition has_received_target_refresh_INVITE -def condition has_received_BYE -def condition has_received_non_final_response_with_SDPoffer -def condition has_received_200_response - - --- conditions to express that an entity has sent a message --- prefixed by has_sent -def condition has_sent_INVITE -def condition has_sent_target_refresh_INVITE -def condition has_sent_MESSAGE -def condition has_sent_REGISTER -def condition has_sent_initial_REGISTER -def condition has_sent_SUBSCRIBE -def condition has_sent_BYE -def condition has_sent_200_response - --- conditions to express that an entity has sent a message and received another one -def condition has_sent_unprotected_REGISTER_and_has_received_401_response -def condition has_sent_INVITE_and_has_received_200_response - --- conditions to characterise values -def condition has_greater_priority_than -def condition at_least_one -def condition has_default_handling -def condition has_no_default_handling - --- simple conditions to describe relation between two entities -def condition visiting -def condition registered -def condition deregistered -def condition registered_for_emergency_service -def condition registered_public_user_identity_with_another_contact_address -def condition registered_public_user_identity_with_current_private_user_identity -def condition configured_as_trusted_domain -def condition configured_as_untrusted_domain - --- --- words --- - --- actions of entities -def word resends -def word expires - --- attributes of Events -def word initial -def word unexpected -def word protected -def word unprotected -def word target_refresh -def word emergency -def context {~emergency registered} - --- attributes of Headers -def word content -def word topmost -def word stored - --- attributs of Values or Parameters -def word additional -def word subsequent -def word incremented -def word invalid -def word valid -def word including -def word matching -def word second -def word different -def context {~different than} -def word updated -def word another -def word other -def word previous -def word minimum -def word acceptable -def word unacceptable -def word encrypted -def word unknown -def word unsubscribed - --- directions -def word addressed -def word originated -def word by -def context {~addressed to} -def context {~originated by} -def word via -def word on -def word direction_calling_to_called - --- terms -def word registration -def word dialog \ No newline at end of file diff --git a/tp/tplan/IMS_CTS_ISC.tplan b/tp/tplan/IMS_CTS_ISC.tplan deleted file mode 100644 index f28748d5a6cfb4d5313e068b47f412a80e3d3fef..0000000000000000000000000000000000000000 --- a/tp/tplan/IMS_CTS_ISC.tplan +++ /dev/null @@ -1,811 +0,0 @@ -TSS : IMS_CTS --- Title : 'IP Multimedia Subsystem (IMS) Conformance Test Purposes' --- Version : 1.0.0 --- Date : 13.05.2008 --- Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4 'ISC focused behaviour' -Group 4.1 'General Capabilities' - -TP id : TP_IMST2_ISC_GEN_01 -summary : 'SIP MESSAGE requests that are exchanged between the S-CSCF and any AS based on initial filter criteria shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_GEN_02 -summary : 'Responses to SIP MESSAGE requests that are exchanged between the S-CSCF and any AS shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE and - IUT has_sent_MESSAGE to AS1 via ISC and - IUT has_received_MESSAGE from AS1 via ISC and - IUT has_sent_MESSAGE to UE2 via GM and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_GEN_03 -summary : 'SIP MESSAGE requests that are exchanged between the I-CSCF and any AS shall include the type 3 inter operator identifier (IOI)' -clause ref: '§4.5.4 paragraph 4' -TP type : conformance -RQ ref : RQ_003_4206 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including ioi_parameter indicating type3 - } -} - -End group 4.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.2 'Registration Procedures' - -TP id : TP_IMST2_ISC_REG_01 -summary : 'An IMS shall support 3rd-party registration or registration with the AS in the same trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - } - then { - IUT sends a REGISTER to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - and containing P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - and containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_REG_02 -summary : 'An IMS shall support 3rd-party registration or registration with the AS outside the trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 not registered in IUT and - IUT configured_for_establishing_security_association and - UE1 has_sent_unprotected_REGISTER_and_has_received_401_response and - UE1 has_initiated_security_association_establishment and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - } - then { - IUT sends a REGISTER to AS1 via ISC - not containing P-Access-Network-Info_header - and not containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - and containing P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_REG_03 -summary : 'An IMS shall support 3rd-party deregistration with the AS in the same trust domain' -clause ref: '5.4.1.7 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5095 -role : IMS -- Registration procedures -config ref: CF_1Gm1ISC -with { UE1 registered in IUT and - IUT configured_with_an_entry_point to AS1 and - IUT configured_with_an_iFC_designed_to_contact AS1 for REGISTER and - AS1 configured_for_being_in_the_same_trust_domain as IUT -} -ensure that { - when { - IUT receives protected REGISTER from UE1 - containing Expires_header indicating 0 - } - then { - IUT sends a REGISTER to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Visited-Network-ID_header - and containing Request-URI indicating SIP_URI of AS1 - and containing To_header indicating 'non barred IMPU from the service profile of the processed iFC' - and containing From_header indicating SIP_URI of IUT_S-CSCF - and containing Contact_header indicating SIP_URI of IUT_S-CSCF - } -} - -End group 4.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.3 'Initial requests' - -TP id : TP_IMST2_ISC_INI_01 -summary : 'When S-CSCF receives any 1xx or 2xx response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS inside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5127 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 180_response from UE2 addressed to UE1 - } - then { - IUT sends 180_response to AS1 via ISC - containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_02 -summary : 'When S-CSCF receives any 1xx or 2xx response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS inside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5127 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_01 -summary : 'When S-CSCF receives 180 response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS outside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5439 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 180_response from UE2 addressed to UE1 - containing P-Charging-Vector_header including access-network-charging-info_parameter - } - then { - IUT sends 180_response to AS1 via ISC - containing P-Charging-Vector_header not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_02 -summary : 'When S-CSCF receives SIP 200 response for a UE subsequent to the initial SIP INVITE then it forwards it towards an AS outside the home network of the S-CSCF' -clause ref: '5.4.4.2.2 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5439 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE to UE2 and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - containing P-Charging-Vector_header including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_INI_06 -summary : 'When S-CSCF receives no SIP response from the AS for an SIP INVITE request and the iFC has default handling set to SESSION_TERMINATED then it does not forward the request to another AS and returns a SIP 408 response to the originating UE' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT has_sent_INVITE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the INVITE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for INVITE and - iFC1 has_greater_priority_than iFC2 and -} -ensure that { - when { - IUT receives no response from AS1 via ISC1 - } - then { - IUT sends 408_response to UE1 - and IUT not sends INVITE to AS2 via ISC2 - } -} - -End group 4.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.4 'standalone requests' - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When the S-CSCF receives SIP MESSAGE request it forwards the request to an AS within the same trust domain as the IUT' -TP type : conformance -RQ ref : RQ_003_5097 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - AS1 configured_for_being_in_the_same_trust_domain as IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE to AS1 via ISC - containing a P-Asserted-Service_header - and containing topmost Route_header indicating SIP_URI of AS1 - and containing second Route_header indicating SIP_URI of IUT_S-CSCF - and containing a P-Charging-Vector_header - including type3 orig-ioi_parameter 'before the received orig-ioi parameters' - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When S-CSCF receives 5xx from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS.' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 5xx_response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_02 -summary : 'When S-CSCF receives 408 response from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 408_response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_03 -summary : 'WWhen S-CSCF receives no SIP response from the AS for a SIP MESSAGE request and the iFC has set to SESSION_CONTINUED then it forwards the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - (iFC1 has_default_handling set to SESSION_CONTINUED - or iFC1 has_no_default_handling) and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives no response from AS1 via ISC1 - } - then { - IUT sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_04 -summary : 'When S-CSCF receives 5xx response from the AS for a SIP MESSAGE request and the iFC has default handling set to SESSION_TERMINATED then it returns the response to the UE and does not forward the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 5xx_response from AS1 via ISC1 - } - then { - IUT sends 5xx_response to UE1 - and IUT not sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_05 -summary : 'When S-CSCF receives 408 response from the AS for a SIP MESSAGE request and the iFC has default handling set to SESSION_TERMINATED then it returns the response to the UE and does not forward the request to a second AS' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5433 -role : IMS -- General -config ref: CF_2Gm2ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT has_sent_MESSAGE to AS1 via ISC1 and - IUT configured_with_an_iFC1_designed_to_contact AS1 for the MESSAGE and - iFC1 has_default_handling set to SESSION_TERMINATED and - IUT configured_with_an_iFC2_designed_to_contact AS2 for MESSAGE and - iFC1 has_greater_priority_than iFC2 -} -ensure that { - when { - IUT receives 408_response from AS1 via ISC1 - } - then { - IUT sends 408_response to UE1 - and IUT not sends MESSAGE to AS2 via ISC2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When S-CSCF receives SIP 200 response from the AS for a SIP MESSAGE request then it forwards it to the UE.' -clause ref: '5.4.3.2 paragraph 53' -TP type : conformance -RQ ref : RQ_003_5434 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for the MESSAGE and - IUT has_sent_MESSAGE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from AS1 via ISC - } - then { - IUT sends 200_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'S-CSCF forwards to an Application Server (AS) the response to a SIP MESSAGE request from a served user or from a PSI that initiated the standalone transaction.' -clause ref: '5.4.3.2 paragraph 50' -TP type : conformance -RQ ref : RQ_003_5105 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_MESSAGE from UE1 addressed to UE2 containing type3 orig-ioi_parameter and - IUT has_sent_MESSAGE to UE2 via GM and - IUT has_sent_MESSAGE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives 200_response from UE2 addressed to UE1 - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - including type3 orig-ioi_parameter from the initial MESSAGE - and including type3 term-ioi_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When a S-CSCF receives SIP MESSAGE request destined for an unregistered user it forwards the request to the AS' -clause ref: '§5.4.3.3 paragraph 55' -TP type : conformance -RQ ref : RQ_003_5114 -role : IMS -- General -config ref: CF_1Gm1ISC -with { UE1 registered in IUT and - UE2 not registered in IUT and - IUT configured_with_an_iFC_designed_to_contact AS1 for MESSAGE -} -ensure that { - when { - IUT receives MESSAGE from UE1 addressed to UE2 - } - then { - IUT sends MESSAGE to AS1 via ISC - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_01 -summary : 'When the I-CSCF receives SIP MESSAGE request containing P-Charging-Vector header including icid parameter it forwards it to the AS' -clause ref: '§5.3.2.1 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5130 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - containing P-Charging-Vector_header including icid_parameter - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including icid_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_STA_02 -summary : 'When the I-CSCF receives SIP MESSAGE request containing P-Charging-Vector header not including icid parameter then it adds this parameter prior to forwarding it to the AS' -clause ref: '§5.3.2.1 paragraph 2' -TP type : conformance -RQ ref : RQ_003_5130 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT configured_for_forwarding_MESSAGE_directly_to_AS1 -} -ensure that { - when { - IUT receives MESSAGE from UE1 - containing P-Charging-Vector_header not including icid_parameter - } - then { - IUT sends MESSAGE to AS1 via ISC - containing P-Charging-Vector_header including icid_parameter - } -} - -End group 4.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.5 'subsequent requests' - -TP id : TP_IMST2_ISC_SUB_01 -summary : 'When S-CSCF receives SIP ACK request then it forwards it to an AS outside the trusted domain' -clause ref: '5.4.3.2 paragraph 72' -TP type : conformance -RQ ref : RQ_003_5107 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - IUT has_received_200_response from UE2 and - IUT has_sent_200_response to UE1 and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives ACK from UE1 } - then { - IUT sends ACK to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - } -} - -End group 4.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 4.6 'target refresh requests' - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives from the served user a target refresh request for a dialog then it forwards it to an AS outside the trusted domain and returns a 100 response to the UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5106 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_in_the_same_trust_domain as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives SIP reINVITE request from a UE within an established dialog then it forwards it to an AS inside the home network of the S-CSCF and returns a 100 response to the UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5442 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 and UE2 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - AS1 configured_for_being_within_same_IMS_network as IUT_S-CSCF and -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_02 -summary : 'When the S-CSCF receives SIP reINVITE request from a UE within an established dialog then it forwards it to an AS outside the home network of the S-CSCF without charging information and returns a 100 response to the originating UE' -clause ref: '5.4.3.2 paragraph 65' -TP type : conformance -RQ ref : RQ_003_5442 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - AS1 not configured_for_being_within_same_IMS_network as IUT_S-CSCF -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 -- ReINVITE - } - then { - IUT sends INVITE to AS1 via ISC - not containing P-Access-Network-Info_header - and containing P-Charging-Vector_header - not including access-network-charging-info_parameter - and IUT sends 100_response via Gm to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_01 -summary : 'When S-CSCF receives SIP 200 (OK) response to a SIP reINVITE request then forwards it to an AS outside the home network of the S-CSCF without charging information' -clause ref: '5.4.6.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5444 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 not configured_for_being_within_same_IMS_network as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE to UE2 via Gm and - IUT has_sent_target_refresh_INVITE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from UE2 -- 200_OK for ReINVITE - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - not including access-network-charging-info_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_ISC_TAR_02 -summary : 'When S-CSCF receives SIP 200 (OK) response to a SIP reINVITE request then it forwards it to an AS located inside the home network of the S-CSCF' -clause ref: '5.4.6.1.3 paragraph 1' -TP type : conformance -RQ ref : RQ_003_5444 -role : IMS -- General -config ref: CF_2Gm1ISC -with { UE1 registered in IUT and - IUT has_received_INVITE from UE1 addressed to UE2 and - IUT configured_with_an_iFC_designed_to_contact AS1 for INVITE and - IUT has_sent_INVITE to UE2 via GM and - IUT has_sent_INVITE to AS1 via ISC and - AS1 configured_for_being_within_same_IMS_network as IUT and - AS1 has_indicated_the_handling_of_the_whole_dialog to IUT and - IUT has_received_target_refresh_INVITE from UE1 and - IUT has_sent_target_refresh_INVITE to UE2 via Gm and - IUT has_sent_target_refresh_INVITE to AS1 via ISC -} -ensure that { - when { - IUT receives 200_response from UE2 -- 200_OK for ReINVITE - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } - then { - IUT sends 200_response to AS1 via ISC - containing P-Charging-Vector_header - including access-network-charging-info_parameter - } -} - -End group 4.6 - -End group 4 diff --git a/tp/tplan/IMS_CTS_Ic.tplan b/tp/tplan/IMS_CTS_Ic.tplan deleted file mode 100644 index e6399ffdfc8d4ac0f9b7242ff37675c92d514fad..0000000000000000000000000000000000000000 --- a/tp/tplan/IMS_CTS_Ic.tplan +++ /dev/null @@ -1,695 +0,0 @@ -TSS : IMS_CTS --- Title : 'IP Multimedia Subsystem (IMS) Network-to-Network Interface (NNI) Interoperability Test Purposes' --- Version : 1.0.0 --- Date : 13.05.2008 --- Author : 'STF346' -#include 'LogicDefs.tplan' -#include 'UnitDefs.tplan' -#include 'UsefulDefs.tplan' -#include 'IMS_CTS_Defs.tplan' - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3 'Ic focused behaviour' -Group 3.1 'General Capabilities' - -TP id : TP_IMST2_IC_GEN_01 -summary : 'When an IBCF receives SIP REGISTER request from within its own network, it shall add its own - routable SIP URI to the top of the Path header' -clause ref: '5.10.2.1 1), 5.10.4.1' -TP type : conformance -RQ ref : RQ_003_5500 -role : IMS -- General -config ref: CF_1Ic1Gm -- Tester acting as UE and home network offering one Ic -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network -} -ensure that { - when { - IUT receives REGISTER from UE1 - } - then { - IUT sends REGISTER via Ic1 - containing topmost Path_header indicating SIP_URI of IUT_IBCF - } -} - -End group 3.1 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.2 'Registration Procedures' - -TP id : TP_IMST2_IC_REG_01 -summary : 'When an IBCF receives a SIP 3xx (Redirection) response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall resend the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -- Tester acting as UE and home network offering 2 different Ics -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives 3xx_response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_02 -summary : 'When an IBCF receives SIP 480 (Temporarily Unavailable) response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall forward the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -- Tester acting as UE and home network offering 2 different Ics -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives 480_response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_03 -summary : 'When an IBCF receives no response from a home network entry point to a previously - forwarded SIP REGISTER request, it shall forward the Register request to another home network entry point - to which it has not previously forwarded the same request.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5501, RQ_003_5222 -role : IMS -- General -config ref: CF_2Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_two_entry_points_to_home_network and - IUT has_received_REGISTER from UE1 and - IUT has_sent_REGISTER via Ic1 -} -ensure that { - when { - IUT receives no response via Ic1 - } - then { - IUT resends REGISTER via Ic2 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_01 -summary : 'If an IBCF receives a SIP 3xx (Redirection) response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives 3xx_response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_02 -summary : 'If an IBCF receives a SIP 480 (Temporarily Unavailable) response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 3)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives 480_response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_03 -summary : 'If an IBCF receives no response to a SIP REGISTER request from all entry points in the registering user s home network, it shall send a SIP 504 (Server Time-Out) response to the P-CSCF.' -clause ref: '5.10.2.1 2)' -TP type : conformance -RQ ref : RQ_003_5502, RQ_003_5223 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_with_one_entry_point_to_home_network and - IUT has_received_REGISTER from UE1 -} -ensure that { - when { - IUT receives no response via Ic1 - } - then { - IUT sends 408_response or 504_response to UE1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_REG_01 -summary : 'When an IBCF receives a SIP REGISTER request from an non-trusted domain outside its own network, - it shall send a SIP 403 (Forbidden) response to the sender of the request.' -clause ref: '5.10.3.1 1)' -TP type : conformance -RQ ref : RQ_003_5513 -role : IMS -- General -config ref: CF_1Ic -with { IMS configured_as_untrusted_domain for IUT -} -ensure that { - when { - IUT receives REGISTER via Ic1 - } - then { - IUT sends 403_response via Ic1 - } -} - -End group 3.2 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.3 'Initial request Procedures' - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives an initial SIP INVITE request from within its own network it encrypts all Via header URIs except the one of the IBCF prior to forwarding the request.' -clause ref: '5.10.2.2 1) 2) 4) 5), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5503 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - } - then { - IUT sends INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - not containing P-Charging-Vector_header - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a 180 response to a forwarded initial INVITE request and network topology hiding is required it shall not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.2.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5506, RQ_003_5138 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE via Ic1 -} -ensure that { - when { - IUT receives 180_response via Ic1 - } - then { IUT sends the 180_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_02 -summary : 'When an IBCF receives a 200 response to a forwarded initial INVITE request and network topology hiding is required it shall not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.2.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5506, RQ_003_5138 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE from UE1 and - IUT has_sent_INVITE via Ic1 -} -ensure that { - when { - IUT receives 200_response via Ic1 - } - then { IUT sends the 200_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives any SIP request, other than a SIP REGISTER request, from a non-trusted domain and the - topmost Route header in the request contains the orig parameter, the IBCF shall send a SIP 403 (Forbidden) - response to the originator of the request.' -clause ref: '5.10.3.2 ¶1' -TP type : conformance -RQ ref : RQ_003_5517 -role : IMS -- General -config ref: CF_1Ic -with { IMS configured_as_untrusted_domain for IUT -} -ensure that { - when { - IUT receives INVITE via Ic1 - containing topmost Route_header including orig_parameter - } - then { - IUT sends 403_response via Ic1 - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a SIP INVITE request from a trusted domain outside its own network and the topmost Route header in the request does not contain the orig parameter, it shall return a SIP 100 response and not encrypt Via header URIs when forwarding to the UE' -clause ref: '5.10.3.2 1) 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5518 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IMS configured_as_trusted_domain for IUT -} -ensure that { - when { - IUT receives INVITE via Ic1 - containing Via_header including topmost SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends 100_response via Ic1 - and IUT sends INVITE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When the IBCF receives an INVITE request and the IBCF requires the periodic refreshment of the session it shall add a Session-Expires prior to forwarding it to the UE. ' -clause ref: '5.10.3.2 ¶10' -TP type : conformance -RQ ref : RQ_003_5520 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_requiring_periodic_refreshment -} -ensure that { - when { - IUT receives INVITE via Ic1 - } - then { - IUT sends INVITE to UE1 - containing Session-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF receives a valid 180 response from within its own network it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the response to other networks' -clause ref: '5.10.3.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5521 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE via Ic1 and - IUT has_sent_INVITE to UE1 -} -ensure that { - when { - IUT receives 180_response from UE1 - } - then {IUT sends 180_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_02 -summary : 'When an IBCF receives a valid 200 response from within its own network it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the response to other networks' -clause ref: '5.10.3.2 ¶12, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5521 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_received_INVITE via Ic1 and - IUT has_sent_INVITE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then {IUT sends 200_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_INI_01 -summary : 'When an IBCF processes a SIP request or response that contains a contact address which is a Globally Routable User agent URI (GRUU), it shall replace the contact address with an address which is also a GRUU.' -clause ref: '5.10.5 ¶4' -TP type : conformance -RQ ref : RQ_003_5527 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT has_received_INVITE via Ic1 containing Contact_header indicating GRUU and - IUT has_sent_INVITE to UE1 containing Contact_header indicating GRUU and - IUT configured_for_IMS-ALG -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then { - IUT sends 200_response - containing Contact_header indicating GRUU via Ic1 - } -} - -End group 3.3 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.4 'standalone request Procedures' - -TP id : TP_IMST2_IC_STA_01 -summary : 'When an IBCF receives an initial SIP request other than a SIP REGISTER or SIP INVITE from within its own network, it shall add its own URI as the topmost Via header and encrypt all other Via header and exclude charging related headers prior to forwarding the request to other networks' -clause ref: '5.10.2.2 1) 2) 4) 5), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5504 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - UE1 registered in IUT -} -ensure that { - when { - IUT receives MESSAGE from UE1 - } - then { - IUT sends MESSAGE via Ic1 - containing Via_header including topmost SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - and not containing P-Charging-Vector_header - and not containing P-Charging-Function-Addresses_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'When the IBCF receives an INVITE request and the IBCF requires the periodic refreshment of the session it shall add a Session-Expires prior to forwarding it to other networks.. ' -clause ref: '5.10.2.2 ¶10, RFC4028' -TP type : conformance -RQ ref : RQ_003_5505 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT configured_for_requiring_periodic_refreshment and - UE1 registered in IUT -} -ensure that { - when { - IUT receives INVITE from UE1 - } - then { - IUT sends the INVITE via Ic1 - containing Session-Expires_header - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'When an IBCF receives a SIP request, other than a SIP REGISTER request or a SIP INVITE request, from a trusted domain outside its own network it shall decrypt all encrypted Via headers prior to forwarding the request to the UE' -clause ref: '5.10.3.2 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5519 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IMS configured_as_trusted_domain for IUT -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends MESSAGE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_STA_01 -summary : 'The IBCF shall handle requests addressed to its currently valid GRUUs when received outside of the dialog in which the GRUU was provided.' -clause ref: '5.10.5 ¶6' -TP type : conformance -RQ ref : RQ_003_5528 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_IMS-ALG -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing To_header indicating GRUU of IUT_IBCF - } - then { - IUT sends MESSAGE to UE1 - } -} - -End group 3.4 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.5 'subsequent request Procedures' - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives an SIP request other than a SIP REQISTER request or a SIP INVITE request from within its own network and subsequent to an initial request it shall add its own URI as the topmost Via header and encrypt all other Via header prior to forwarding the request to other networks..' -clause ref: '5.10.2.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5509 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives BYE from UE1 - } - then { - IUT sends the BYE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives a response from outside its own network to a request forwarded subsequent to an initial request and network topology hiding is required is shall not encrypt any headers prior to forwarding the response to other networks..' -clause ref: '5.10.2.3 ¶7, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5510 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 and - IUT has_received_BYE from UE1 and - IUT has_sent_BYE via Ic1 -} -ensure that { - when { - IUT receives 200_response via Ic1 - } - then { - IUT sends 200_response to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'When an IBCF receives a SIP MESSAGE request from outside its own network subsequent to an initial request, then it shall decrypt any headers prior to forwarding the request to the UE.' -clause ref: '5.10.3.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5523 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives MESSAGE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends MESSAGE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_02 -summary : 'When an IBCF receives a SIP BYE request from outside its own network subsequent to an initial request, then it shall decrypt any headers prior to forwarding the request to the UE..' -clause ref: '5.10.3.3 3) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5523 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives BYE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends BYE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_SUB_01 -summary : 'WWhen an IBCF receives a SIP 200 response from within its own network to a SIP request forwarded subsequent to an initial request it shall add its own URI to the Via header and encrypt all other Via headers prior to forwarding the response to other networks.' -clause ref: '5.10.3.3 ¶6, 5.10.4' -TP type : conformance -RQ ref : RQ_003_5524 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 and - IUT has_received_BYE via Ic1 and - IUT has_sent_BYE to UE1 -} -ensure that { - when { - IUT receives 200_response from UE1 - } - then { - IUT sends 200_response via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - -End group 3.5 - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -Group 3.6 'subsequent request Procedures' - -TP id : TP_IMST2_IC_TAR_01 -summary : 'When an IBCF receives a target refresh request from within its own network it shall respond with a SIP 100 response, add its own URI to the Via header and encrypt all other Via headers prior to forwarding the request to other networks.' -clause ref: '5.10.2.3 1) 3), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5508 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE from UE1 - } - then { - IUT sends 100_response to UE1 - and IUT sends target_refresh INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IUT_IBCF - and including encrypted SIP_URI indicating tokenized-by_parameter - } -} - --- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -TP id : TP_IMST2_IC_TAR_01 -summary : 'When an IBCF receives a target refresh request from outside its own network subsequent to an initial request it shall decrypt all Via headers before forwarding it to the UE.' -clause ref: '5.10.3.3 1) 4), 5.10.4' -TP type : conformance -RQ ref : RQ_003_5522 -role : IMS -- General -config ref: CF_1Ic1Gm -with { IUT configured_for_topology_hiding and - IUT has_established_an_INVITE_dialog for UE1 -} -ensure that { - when { - IUT receives target_refresh INVITE via Ic1 - containing topmost Via_header indicating SIP_URI of IMS - and including encrypted SIP_URI indicating tokenized-by_parameter - } - then { - IUT sends 100_response via Ic1 - and IUT sends target_refresh INVITE to UE1 - not containing any_header including encrypted SIP_URI indicating tokenized-by_parameter - } -} - -End group 3.6 - -End group 3 diff --git a/tp/tplan/LogicDefs.tplan b/tp/tplan/LogicDefs.tplan deleted file mode 100644 index ef0467d53c9be12f91510122a68f5256ad7e1a29..0000000000000000000000000000000000000000 --- a/tp/tplan/LogicDefs.tplan +++ /dev/null @@ -1,10 +0,0 @@ - --- Logic expressions -def word than -def word bigger -def context {~bigger than} -def word smaller -def context {~smaller than} -def word equal -def context {~equal to} - diff --git a/tp/tplan/UnitDefs.tplan b/tp/tplan/UnitDefs.tplan deleted file mode 100644 index cf47ba679e606872560b0177dee44ec0b4ad4467..0000000000000000000000000000000000000000 --- a/tp/tplan/UnitDefs.tplan +++ /dev/null @@ -1,16 +0,0 @@ - --- Units - --- memory size -def unit bit -def unit bits - -def unit byte -def unit bytes -def unit mbyte -def unit mbytes -def unit gbyte -def unit gbytes -def unit tbyte -def unit tbytes - diff --git a/tp/tplan/UsefulDefs.tplan b/tp/tplan/UsefulDefs.tplan deleted file mode 100644 index 43cfbda35928100b61df042bcd64d9c0ddc7dd4f..0000000000000000000000000000000000000000 --- a/tp/tplan/UsefulDefs.tplan +++ /dev/null @@ -1,14 +0,0 @@ - --- Useful expressions -def word same -def word both - -def word for -def word while - -def word this - -def word set - --- george NEW -def word greater