Loading CONF/CONF_Steps.ttcn3 0 → 100644 +234 −0 Original line number Diff line number Diff line module CONF_Steps { import from LibIms_SIPTypesAndValues language "TTCN-3:2009" all; import from CONF_Templates language "TTCN-3:2009" all; import from IMS_SS_Functions language "TTCN-3:2009" all with { extension "File:SS_Ims_Functions.ttcn" } import from LibSip_SDPTypes language "TTCN-3:2005" all; import from LibIms_Steps language "TTCN-3:2009" all; import from LibSip_SIPTypesAndValues language "TTCN-3:2005" all; import from LibIms_Interface language "TTCN-3:2009" all; import from LibSip_Steps language "TTCN-3:2005" all; import from LibSip_Templates language "TTCN-3:2009" all; import from LibIms_Templates language "TTCN-3:2009" all; /** * * @desc This function accepts a new incoming call */ function f_acceptSession() runs on ImsComponent { // await INVITE f_getInvite(mw_INVITE_Request_MB(?, ?)); // send 180 Ringing f_sendResponse(m_Response_18XonINVITE( c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact )); // send 200 OK 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)); } function f_acceptConference() runs on ImsComponent { f_getInvite(mw_INVITE_Request_CONF( f_initSipUrl(c_conferenceProfile_factoryURI), *, * )); f_sendResponse(m_Response_Base( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * * @desc This function accepts a re-INVITE request to put on hold a active call */ function f_acceptHoldCall() runs on ImsComponent { // await INVITE f_awaitingINVITE(mw_INVITE_Request_IMS(*,*,*,?)); // check SDP f_SIP_checksetSDPreqDirection( mw_attribute_sendonly,m_attribute_recvonly ); // handling of attribute in media description // send 200 OK 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)); } /** * * @desc This function accepts an incoming request to join a conference * @param p_cSeq CSeq number * @param p_profile conference profile */ function f_joinConference(inout CSeq p_cSeq, boolean p_notify) runs on ImsComponent { f_awaitingREFER(mw_REFER_Request_Base(vc_callId)); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); if(p_notify) { f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "active", "SIP/2.0 100 Trying" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "active", "SIP/2.0 200 OK" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); } } group sessionFunctions { group sessionTypes { type record SessionDialog { CallId callId, From calleeFrom, To calleeTo, From callerFrom, To callerTo, CSeq cSeq optional, SipUrl remoteURI, HostPort remoteTarget, Route route optional, RecordRoute recordRoute optional, Via via } } group sessionModification { /** * @desc This function saves the current dialog infomation * @return Dialog infomation */ function f_saveSession() runs on ImsComponent return SessionDialog { var SessionDialog v_dialog := { callId := vc_callId, calleeFrom := vc_from, calleeTo := vc_to, callerFrom := vc_caller_From, callerTo := vc_caller_To, cSeq := vc_cSeq, remoteURI := vc_requestUri, remoteTarget := vc_reqHostPort, route := vc_route, recordRoute := vc_recordRoute, via := vc_via } return v_dialog; } /** * @desc This function loads a given dialog parameters (previously stored) * @param p_dialog dialog parameters */ function f_loadSession(in SessionDialog p_dialog) runs on ImsComponent { vc_callId := p_dialog.callId; vc_from := p_dialog.calleeFrom; vc_to := p_dialog.calleeTo; vc_caller_From:= p_dialog.callerFrom; vc_caller_To:= p_dialog.callerTo; vc_cSeq := p_dialog.cSeq; vc_requestUri := p_dialog.remoteURI; vc_reqHostPort := p_dialog.remoteTarget; vc_route := p_dialog.route; vc_recordRoute := p_dialog.recordRoute; vc_via := p_dialog.via; } } } function f_clearSDPprecondition(inout SDP_Message p_sdp) { if(ispresent(p_sdp.media_list)) { var SDP_attribute_list v_attList; var integer mn := sizeof(p_sdp.media_list[0].attributes); for(var integer i := 0; i<=mn; i := i+1) { if(not ischosen(p_sdp.media_list[0].attributes[i].curr) and not ischosen(p_sdp.media_list[0].attributes[i].des)){ v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i]; } } p_sdp.media_list[0].attributes := v_attList; } } } No newline at end of file CONF/CONF_TC_Functions.ttcn3 +323 −12 Original line number Diff line number Diff line module CONF_TC_Functions { import from CONF_Steps all; import from LibIms_PIXITS language "TTCN-3:2009" all; import from LibSip_SDPTypes language "TTCN-3:2005" all; Loading Loading @@ -1053,17 +1055,326 @@ module CONF_TC_Functions { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_clearSDPprecondition(inout SDP_Message p_sdp) { if(ispresent(p_sdp.media_list)) { var SDP_attribute_list v_attList; var integer mn := sizeof(p_sdp.media_list[0].attributes); for(var integer i := 0; i<=mn; i := i+1) { if(not ischosen(p_sdp.media_list[0].attributes[i].curr) and not ischosen(p_sdp.media_list[0].attributes[i].des)){ v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i]; function f_TC_CONF_U01_003(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_Session1; var SessionDialog v_Session2; var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // accept first session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session1 := f_saveSession(); // accept second session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session2 := f_saveSession(); // ---- test body ----> // accept conference request f_acceptConference(); // get conference subscription f_gm_pcscf_subscribe_conf(p_CSeq); // get refer request to invite user to conference f_joinConference(p_CSeq, true); // save conference session parameters v_CONF_Session := f_saveSession(); // load session 1 f_loadSession(v_Session1); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // load session conference f_loadSession(v_CONF_Session); // get refer request to invite user to conference f_joinConference(p_CSeq, true); // load session 2 f_loadSession(v_Session2); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // ---- postamble ----> // load session conference f_loadSession(v_CONF_Session); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_004(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_Session1; var SessionDialog v_Session2; var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // accept first session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session1 := f_saveSession(); // accept second session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session2 := f_saveSession(); // ---- test body ----> // accept conference request f_acceptConference(); // get refer request to invite user to conference f_joinConference(p_CSeq, false); // save conference session parameters v_CONF_Session := f_saveSession(); // load session 1 f_loadSession(v_Session1); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // load session conference f_loadSession(v_CONF_Session); // get refer request to invite user to conference f_joinConference(p_CSeq, false); // load session 2 f_loadSession(v_Session2); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // ---- postamble ----> // load session conference f_loadSession(v_CONF_Session); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_007(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> LibIms_Steps.f_setHeadersREFER(p_CSeq, c_userProfile_UE1atSUThome); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl( f_initSipUrl(c_conferenceProfile_factoryURI), "INVITE" ), m_ReferredBy_SipUrl( f_initSipUrl(c_userProfile_PCSCFwithHomeUE) ) )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_CSeq )); f_getInvite(mw_INVITE_Request_CONF_referredBy( f_initSipUrl(c_conferenceProfile_factoryURI), *, *, m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE)) )); // ---- postamble ----> f_sendResponse(m_Response_Base( c_statusLine200, 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(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_008(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); // accept conference request f_acceptConference(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_awaitingREFER(mw_REFER_Request_IMS( vc_callId, f_initSipUrl(c_userProfile_PCSCFwithHomeUE), mw_ReferTo(f_initSipUrl(c_conferenceProfile_factoryURI)) )); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } p_sdp.media_list[0].attributes := v_attList; function f_TC_CONF_U01_009(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); // accept conference request f_acceptConference(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_awaitingREFER(mw_REFER_Request_IMS( vc_callId, f_initSipUrl(c_conferenceProfile_factoryURI), m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE), "INVITE") )); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_010(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_getInvite(mw_INVITE_Request_CONF_resourceList( f_initSipUrl(c_conferenceProfile_factoryURI), *, *, mw_Resource_lists(f_initSipUrl(c_userProfile_PCSCFwithHomeUE)) )); f_sendResponse(m_Response_Base( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } } No newline at end of file CONF/CONF_Templates.ttcn3 +104 −0 Original line number Diff line number Diff line module CONF_Templates { import from ietf_params_xml_ns_resource_lists all; import from LibSip_SDPTypes language "TTCN-3:2005" all; import from LibSip_Templates language "TTCN-3:2009" all; Loading Loading @@ -107,4 +109,106 @@ module CONF_Templates { pAssertedID := p_pAssertedID } } template INVITE_Request mw_INVITE_Request_CONF_referredBy( template SipUrl p_requestUri, template PAssertedID p_pAssertedID, template Contact p_contact, template ReferredBy p_referredBy ) modifies mw_INVITE_Request_Base := { requestLine := {requestUri := p_requestUri}, msgHeader := { contact := p_contact, pAssertedID := p_pAssertedID, referredBy := p_referredBy } } template INVITE_Request mw_INVITE_Request_CONF_resourceList( template SipUrl p_requestUri, template PAssertedID p_pAssertedID, template Contact p_contact, template Resource_lists p_resource_lists ) modifies mw_INVITE_Request_Base := { requestLine := {requestUri := p_requestUri}, msgHeader := { contact := p_contact, contentDisposition := { fieldName := CONTENT_DISPOSITION_E, dispositionType := "recipient-list", dispositionParams := * }, contentType := { fieldName := CONTENT_TYPE_E, mediaType := "application/resource-lists+xml" }, pAssertedID := p_pAssertedID }, messageBody := { xmlBody := { resourceLists := p_resource_lists } } } template Resource_lists mw_Resource_lists( SipUrl p_user ) := { sequence := { { list := { name := *, anyAttributes := *, display_name := *, sequence_list := { { choice := { entry := { uri := p_user.userInfo.userOrTelephoneSubscriber & "@" & p_user.hostPort.host, anyAttributes := *, display_name := *, elem := * } } } }, elem := * } } } } template REFER_Request mw_REFER_Request_IMS( CallId p_callId, template SipUrl p_requestUri, template ReferTo p_referTo ) modifies mw_REFER_Request_Base := { requestLine := { method := REFER_E, requestUri := p_requestUri, sipVersion := ? }, msgHeader := { referTo := p_referTo } } template ReferTo mw_ReferTo ( template SipUrl p_uri ):= { fieldName := REFER_TO_E, nameAddr := { displayName := *, addrSpec := p_uri }, referToParams := * } } No newline at end of file CONF/CONF_TestCases.ttcn3 +183 −0 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
CONF/CONF_Steps.ttcn3 0 → 100644 +234 −0 Original line number Diff line number Diff line module CONF_Steps { import from LibIms_SIPTypesAndValues language "TTCN-3:2009" all; import from CONF_Templates language "TTCN-3:2009" all; import from IMS_SS_Functions language "TTCN-3:2009" all with { extension "File:SS_Ims_Functions.ttcn" } import from LibSip_SDPTypes language "TTCN-3:2005" all; import from LibIms_Steps language "TTCN-3:2009" all; import from LibSip_SIPTypesAndValues language "TTCN-3:2005" all; import from LibIms_Interface language "TTCN-3:2009" all; import from LibSip_Steps language "TTCN-3:2005" all; import from LibSip_Templates language "TTCN-3:2009" all; import from LibIms_Templates language "TTCN-3:2009" all; /** * * @desc This function accepts a new incoming call */ function f_acceptSession() runs on ImsComponent { // await INVITE f_getInvite(mw_INVITE_Request_MB(?, ?)); // send 180 Ringing f_sendResponse(m_Response_18XonINVITE( c_statusLine180, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact )); // send 200 OK 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)); } function f_acceptConference() runs on ImsComponent { f_getInvite(mw_INVITE_Request_CONF( f_initSipUrl(c_conferenceProfile_factoryURI), *, * )); f_sendResponse(m_Response_Base( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * * @desc This function accepts a re-INVITE request to put on hold a active call */ function f_acceptHoldCall() runs on ImsComponent { // await INVITE f_awaitingINVITE(mw_INVITE_Request_IMS(*,*,*,?)); // check SDP f_SIP_checksetSDPreqDirection( mw_attribute_sendonly,m_attribute_recvonly ); // handling of attribute in media description // send 200 OK 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)); } /** * * @desc This function accepts an incoming request to join a conference * @param p_cSeq CSeq number * @param p_profile conference profile */ function f_joinConference(inout CSeq p_cSeq, boolean p_notify) runs on ImsComponent { f_awaitingREFER(mw_REFER_Request_Base(vc_callId)); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); if(p_notify) { f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "active", "SIP/2.0 100 Trying" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "active", "SIP/2.0 200 OK" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); } } group sessionFunctions { group sessionTypes { type record SessionDialog { CallId callId, From calleeFrom, To calleeTo, From callerFrom, To callerTo, CSeq cSeq optional, SipUrl remoteURI, HostPort remoteTarget, Route route optional, RecordRoute recordRoute optional, Via via } } group sessionModification { /** * @desc This function saves the current dialog infomation * @return Dialog infomation */ function f_saveSession() runs on ImsComponent return SessionDialog { var SessionDialog v_dialog := { callId := vc_callId, calleeFrom := vc_from, calleeTo := vc_to, callerFrom := vc_caller_From, callerTo := vc_caller_To, cSeq := vc_cSeq, remoteURI := vc_requestUri, remoteTarget := vc_reqHostPort, route := vc_route, recordRoute := vc_recordRoute, via := vc_via } return v_dialog; } /** * @desc This function loads a given dialog parameters (previously stored) * @param p_dialog dialog parameters */ function f_loadSession(in SessionDialog p_dialog) runs on ImsComponent { vc_callId := p_dialog.callId; vc_from := p_dialog.calleeFrom; vc_to := p_dialog.calleeTo; vc_caller_From:= p_dialog.callerFrom; vc_caller_To:= p_dialog.callerTo; vc_cSeq := p_dialog.cSeq; vc_requestUri := p_dialog.remoteURI; vc_reqHostPort := p_dialog.remoteTarget; vc_route := p_dialog.route; vc_recordRoute := p_dialog.recordRoute; vc_via := p_dialog.via; } } } function f_clearSDPprecondition(inout SDP_Message p_sdp) { if(ispresent(p_sdp.media_list)) { var SDP_attribute_list v_attList; var integer mn := sizeof(p_sdp.media_list[0].attributes); for(var integer i := 0; i<=mn; i := i+1) { if(not ischosen(p_sdp.media_list[0].attributes[i].curr) and not ischosen(p_sdp.media_list[0].attributes[i].des)){ v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i]; } } p_sdp.media_list[0].attributes := v_attList; } } } No newline at end of file
CONF/CONF_TC_Functions.ttcn3 +323 −12 Original line number Diff line number Diff line module CONF_TC_Functions { import from CONF_Steps all; import from LibIms_PIXITS language "TTCN-3:2009" all; import from LibSip_SDPTypes language "TTCN-3:2005" all; Loading Loading @@ -1053,17 +1055,326 @@ module CONF_TC_Functions { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_clearSDPprecondition(inout SDP_Message p_sdp) { if(ispresent(p_sdp.media_list)) { var SDP_attribute_list v_attList; var integer mn := sizeof(p_sdp.media_list[0].attributes); for(var integer i := 0; i<=mn; i := i+1) { if(not ischosen(p_sdp.media_list[0].attributes[i].curr) and not ischosen(p_sdp.media_list[0].attributes[i].des)){ v_attList[sizeof(v_attList)] := p_sdp.media_list[0].attributes[i]; function f_TC_CONF_U01_003(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_Session1; var SessionDialog v_Session2; var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // accept first session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session1 := f_saveSession(); // accept second session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session2 := f_saveSession(); // ---- test body ----> // accept conference request f_acceptConference(); // get conference subscription f_gm_pcscf_subscribe_conf(p_CSeq); // get refer request to invite user to conference f_joinConference(p_CSeq, true); // save conference session parameters v_CONF_Session := f_saveSession(); // load session 1 f_loadSession(v_Session1); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // load session conference f_loadSession(v_CONF_Session); // get refer request to invite user to conference f_joinConference(p_CSeq, true); // load session 2 f_loadSession(v_Session2); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // ---- postamble ----> // load session conference f_loadSession(v_CONF_Session); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_004(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_Session1; var SessionDialog v_Session2; var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // accept first session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session1 := f_saveSession(); // accept second session f_acceptSession(); // set session on hold f_acceptHoldCall(); // save session parameters v_Session2 := f_saveSession(); // ---- test body ----> // accept conference request f_acceptConference(); // get refer request to invite user to conference f_joinConference(p_CSeq, false); // save conference session parameters v_CONF_Session := f_saveSession(); // load session 1 f_loadSession(v_Session1); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // load session conference f_loadSession(v_CONF_Session); // get refer request to invite user to conference f_joinConference(p_CSeq, false); // load session 2 f_loadSession(v_Session2); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); // ---- postamble ----> // load session conference f_loadSession(v_CONF_Session); // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_007(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> LibIms_Steps.f_setHeadersREFER(p_CSeq, c_userProfile_UE1atSUThome); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl( f_initSipUrl(c_conferenceProfile_factoryURI), "INVITE" ), m_ReferredBy_SipUrl( f_initSipUrl(c_userProfile_PCSCFwithHomeUE) ) )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_CSeq )); f_getInvite(mw_INVITE_Request_CONF_referredBy( f_initSipUrl(c_conferenceProfile_factoryURI), *, *, m_ReferredBy_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE)) )); // ---- postamble ----> f_sendResponse(m_Response_Base( c_statusLine200, 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(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_008(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); // accept conference request f_acceptConference(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_awaitingREFER(mw_REFER_Request_IMS( vc_callId, f_initSipUrl(c_userProfile_PCSCFwithHomeUE), mw_ReferTo(f_initSipUrl(c_conferenceProfile_factoryURI)) )); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } p_sdp.media_list[0].attributes := v_attList; function f_TC_CONF_U01_009(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); // accept conference request f_acceptConference(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_awaitingREFER(mw_REFER_Request_IMS( vc_callId, f_initSipUrl(c_conferenceProfile_factoryURI), m_ReferTo_SipUrl(f_initSipUrl(c_userProfile_PCSCFwithHomeUE), "INVITE") )); // send 202 Accepted f_sendResponse(m_Response_Base( c_statusLine202, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } function f_TC_CONF_U01_010(CSeq p_CSeq) runs on ImsComponent { // variables var SessionDialog v_CONF_Session; // init f_init_gm_pcscf(p_CSeq); // ---- preamble -----> f_gm_pcscf_preamble(p_CSeq); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // ---- test body ----> f_getInvite(mw_INVITE_Request_CONF_resourceList( f_initSipUrl(c_conferenceProfile_factoryURI), *, *, mw_Resource_lists(f_initSipUrl(c_userProfile_PCSCFwithHomeUE)) )); f_sendResponse(m_Response_Base( c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); // ---- postamble ----> // await BYE and send 200OK f_awaitingBYE_sendReply(mw_BYE_Request_Base(?)); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); } } No newline at end of file
CONF/CONF_Templates.ttcn3 +104 −0 Original line number Diff line number Diff line module CONF_Templates { import from ietf_params_xml_ns_resource_lists all; import from LibSip_SDPTypes language "TTCN-3:2005" all; import from LibSip_Templates language "TTCN-3:2009" all; Loading Loading @@ -107,4 +109,106 @@ module CONF_Templates { pAssertedID := p_pAssertedID } } template INVITE_Request mw_INVITE_Request_CONF_referredBy( template SipUrl p_requestUri, template PAssertedID p_pAssertedID, template Contact p_contact, template ReferredBy p_referredBy ) modifies mw_INVITE_Request_Base := { requestLine := {requestUri := p_requestUri}, msgHeader := { contact := p_contact, pAssertedID := p_pAssertedID, referredBy := p_referredBy } } template INVITE_Request mw_INVITE_Request_CONF_resourceList( template SipUrl p_requestUri, template PAssertedID p_pAssertedID, template Contact p_contact, template Resource_lists p_resource_lists ) modifies mw_INVITE_Request_Base := { requestLine := {requestUri := p_requestUri}, msgHeader := { contact := p_contact, contentDisposition := { fieldName := CONTENT_DISPOSITION_E, dispositionType := "recipient-list", dispositionParams := * }, contentType := { fieldName := CONTENT_TYPE_E, mediaType := "application/resource-lists+xml" }, pAssertedID := p_pAssertedID }, messageBody := { xmlBody := { resourceLists := p_resource_lists } } } template Resource_lists mw_Resource_lists( SipUrl p_user ) := { sequence := { { list := { name := *, anyAttributes := *, display_name := *, sequence_list := { { choice := { entry := { uri := p_user.userInfo.userOrTelephoneSubscriber & "@" & p_user.hostPort.host, anyAttributes := *, display_name := *, elem := * } } } }, elem := * } } } } template REFER_Request mw_REFER_Request_IMS( CallId p_callId, template SipUrl p_requestUri, template ReferTo p_referTo ) modifies mw_REFER_Request_Base := { requestLine := { method := REFER_E, requestUri := p_requestUri, sipVersion := ? }, msgHeader := { referTo := p_referTo } } template ReferTo mw_ReferTo ( template SipUrl p_uri ):= { fieldName := REFER_TO_E, nameAddr := { displayName := *, addrSpec := p_uri }, referToParams := * } } No newline at end of file
CONF/CONF_TestCases.ttcn3 +183 −0 File changed.Preview size limit exceeded, changes collapsed. Show changes