Loading AtsNIT_SipSip/ttcn/AtsNIT_SipSip_SS_TCFunctions.ttcn +1246 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes AtsNIT_SipSip/ttcn/AtsNIT_SipSip_Steps.ttcn3 0 → 100644 +481 −0 Original line number Diff line number Diff line /* * @author STF 369 * @version $Id$ * @desc This module provides the functions used by the test component * for SIP SIP tests. */ module AtsNIT_SipSip_Steps { import from LibSip_Steps all; import from LibSip_Templates all; import from LibSip_SIPTypesAndValues all; import from LibIms_Templates all; import from LibIms_Steps all; import from LibIms_Interface all; group headerFunctions { /** * @desc extract the contact uri * @param p_contact contact header * @return contact uri */ function f_getContactURI(in Contact p_contact) return SipUrl { var SipUrl v_SipUrl; if (ischosen(p_contact.contactBody.contactAddresses[0].addressField.nameAddr)) { v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec; } else { v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion; } return v_SipUrl; } } 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, RecordRoute recordRoute, Via via } } group sessionModification { /** * @desc 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 Load a given dialog parameters * @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; } } } group callFunctions { /** * @desc Establish a call to given user profile. * @param p_cSeq_s CSeq number * @param p_to_user user profile */ function f_establishCall(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent { // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_to_user ); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 180 response f_awaitingResponse(mw_Response_Base( c_statusLine180, vc_callId, vc_cSeq )); // await 200 OK response f_awaitingOkResponse(p_cSeq_s); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } /** * * @desc Accept a incomming call */ function f_acceptCall() runs on ImsComponent { // await INVITE f_awaitingINVITE(mw_INVITE_Request_Base); // 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_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * * @desc holds a active call */ function f_holdCall() runs on ImsComponent { // change SDP to sendonly f_SIP_modSessionDirection(m_attribute_sendonly); // prepare and send INVITE LibIms_Steps.f_setHeadersReINVITE_(vc_cSeq); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 200 OK Response f_awaitingResponse(mw_Response_Base( c_statusLine200,vc_callId, vc_cSeq )); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // check SDP f_SIP_checkSDPrespDirection(mw_attribute_recvonly); } /** * * @desc accept call hold */ 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_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * @desc Creates a new confernece * @param p_cSeq_s CSeq number * @param p_profile conference profile * @param p_subscribe enables subscription of conference state * @return conference uri */ function f_createConference(inout CSeq p_cSeq_s, in integer p_profile, in boolean p_subscribe) runs on ImsComponent return SipUrl { var SipUrl v_conferenceURI := null; // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_profile ); f_SendINVITE(m_INVITE_Request_sdp( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_MBody_SDP(vc_sdp_local) )); // await 200 OK response f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, p_cSeq_s, mw_Contact_conference )); if (ispresent(vc_response.msgHeader.contact)) { v_conferenceURI := f_getContactURI( vc_response.msgHeader.contact ); } // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); if(p_subscribe) { // subscribe to conference state f_SubscriptionWithNotification( p_cSeq_s, m_SUBSCRIBE_Request_Event( vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, m_Event_conference ), mw_NOTIFY_Request( vc_callId, "active", "application/conference-info+xml", m_Event_conference, * // TODO add XML check ) ); } return v_conferenceURI; } /** * @desc invites a user to a conference * @param p_cSeq CSeq number * @param p_to_user user * @param p_conferenceUri conference uri */ function f_referUser( inout CSeq p_cSeq, in integer p_to_user, in SipUrl p_conferenceUri ) runs on ImsComponent { LibIms_Steps.f_setHeadersREFER(p_cSeq, p_to_user); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(p_conferenceUri), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_cSeq )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "terminated", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 200 OK") )); } /** * * @desc join a conference * @param p_cSeq CSeq number * @param p_profile conference profile */ function f_joinConference(inout CSeq p_cSeq, in integer p_profile) runs on ImsComponent { var SipUrl v_confUrl; 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 (ispresent(vc_request.msgHeader.referTo)) { v_confUrl := vc_request.msgHeader.referTo.nameAddr.addrSpec } // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq, p_profile ); vc_requestUri := v_confUrl; f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); 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); // 200 OK INVITE f_awaitingOkResponse(vc_cSeq); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "terminated", "SIP/2.0 200 OK" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); } } } No newline at end of file AtsNIT_SipSip/ttcn/AtsNIT_SipSip_Testcases.ttcn +202 −32 Original line number Diff line number Diff line Loading @@ -670,16 +670,9 @@ module AtsNIT_SipSip_Testcases { f_cf_2imsDown(v_imsComponent1, v_imsComponent2); } // end TC_SS___XX__U08 } // end group TP1_2_BC_UnSuccessful } // end group TP_1_BasicCall group TP_2_SupplementaryServices { group TP2_1_SS_OIP_OIR { Loading Loading @@ -733,8 +726,185 @@ group TP2_7_SS_CFNL { }//end group TP2_7_SS_CFNL group TP2_8_SS_CONF { }//end group TP2_8_SS_CONF group TP2_8_1_SS_CONF_CRE { /* * @desc TC_SSS__XXSSCONF_CRE_001 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_001 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_001 /* * @desc TC_SSS__XXSSCONF_CRE_002 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_002 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_002 /* * @desc TC_SSS__XXSSCONF_CRE_003 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_003 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_003 /* * @desc TC_SSS__XXSSCONF_CRE_004 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_004 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_004 /* * @desc TC_SSS__XXSSCONF_CRE_007 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_007 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_007 /* * @desc TC_SSS__XXSSCONF_CRE_008 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_008 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_008 }//end group TP2_8_1_SS_CONF_CRE }//end group TP2_8_SS_CONF }//end group TP_2_SupplementaryServices Loading Loading
AtsNIT_SipSip/ttcn/AtsNIT_SipSip_SS_TCFunctions.ttcn +1246 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes
AtsNIT_SipSip/ttcn/AtsNIT_SipSip_Steps.ttcn3 0 → 100644 +481 −0 Original line number Diff line number Diff line /* * @author STF 369 * @version $Id$ * @desc This module provides the functions used by the test component * for SIP SIP tests. */ module AtsNIT_SipSip_Steps { import from LibSip_Steps all; import from LibSip_Templates all; import from LibSip_SIPTypesAndValues all; import from LibIms_Templates all; import from LibIms_Steps all; import from LibIms_Interface all; group headerFunctions { /** * @desc extract the contact uri * @param p_contact contact header * @return contact uri */ function f_getContactURI(in Contact p_contact) return SipUrl { var SipUrl v_SipUrl; if (ischosen(p_contact.contactBody.contactAddresses[0].addressField.nameAddr)) { v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec; } else { v_SipUrl := p_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion; } return v_SipUrl; } } 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, RecordRoute recordRoute, Via via } } group sessionModification { /** * @desc 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 Load a given dialog parameters * @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; } } } group callFunctions { /** * @desc Establish a call to given user profile. * @param p_cSeq_s CSeq number * @param p_to_user user profile */ function f_establishCall(inout CSeq p_cSeq_s, in integer p_to_user) runs on ImsComponent { // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_to_user ); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 180 response f_awaitingResponse(mw_Response_Base( c_statusLine180, vc_callId, vc_cSeq )); // await 200 OK response f_awaitingOkResponse(p_cSeq_s); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); } /** * * @desc Accept a incomming call */ function f_acceptCall() runs on ImsComponent { // await INVITE f_awaitingINVITE(mw_INVITE_Request_Base); // 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_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * * @desc holds a active call */ function f_holdCall() runs on ImsComponent { // change SDP to sendonly f_SIP_modSessionDirection(m_attribute_sendonly); // prepare and send INVITE LibIms_Steps.f_setHeadersReINVITE_(vc_cSeq); f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); // await 200 OK Response f_awaitingResponse(mw_Response_Base( c_statusLine200,vc_callId, vc_cSeq )); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); // check SDP f_SIP_checkSDPrespDirection(mw_attribute_recvonly); } /** * * @desc accept call hold */ 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_route(), valueof(m_MBody_SDP(vc_sdp_local)) )); // await ACK f_awaitingACK(mw_ACK_Request_Base(vc_callId)); } /** * @desc Creates a new confernece * @param p_cSeq_s CSeq number * @param p_profile conference profile * @param p_subscribe enables subscription of conference state * @return conference uri */ function f_createConference(inout CSeq p_cSeq_s, in integer p_profile, in boolean p_subscribe) runs on ImsComponent return SipUrl { var SipUrl v_conferenceURI := null; // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq_s, p_profile ); f_SendINVITE(m_INVITE_Request_sdp( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, m_MBody_SDP(vc_sdp_local) )); // await 200 OK response f_awaitingResponse(mw_Response_Contact( c_statusLine200, vc_callId, p_cSeq_s, mw_Contact_conference )); if (ispresent(vc_response.msgHeader.contact)) { v_conferenceURI := f_getContactURI( vc_response.msgHeader.contact ); } // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); if(p_subscribe) { // subscribe to conference state f_SubscriptionWithNotification( p_cSeq_s, m_SUBSCRIBE_Request_Event( vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, m_Event_conference ), mw_NOTIFY_Request( vc_callId, "active", "application/conference-info+xml", m_Event_conference, * // TODO add XML check ) ); } return v_conferenceURI; } /** * @desc invites a user to a conference * @param p_cSeq CSeq number * @param p_to_user user * @param p_conferenceUri conference uri */ function f_referUser( inout CSeq p_cSeq, in integer p_to_user, in SipUrl p_conferenceUri ) runs on ImsComponent { LibIms_Steps.f_setHeadersREFER(p_cSeq, p_to_user); f_SendREFER(m_REFER_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_contact, vc_from, vc_to, vc_via, m_ReferTo_SipUrl(p_conferenceUri), omit )); f_awaitingResponse(mw_Response_Base( c_statusLine202, vc_callId, p_cSeq )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "active", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 100 Trying") )); //await NOTIFY and send reply 200 OK f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request( vc_callId, "terminated", "application/message/sipfrag", m_Event_refer, m_MBody_sipfrag("SIP/2.0 200 OK") )); } /** * * @desc join a conference * @param p_cSeq CSeq number * @param p_profile conference profile */ function f_joinConference(inout CSeq p_cSeq, in integer p_profile) runs on ImsComponent { var SipUrl v_confUrl; 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 (ispresent(vc_request.msgHeader.referTo)) { v_confUrl := vc_request.msgHeader.referTo.nameAddr.addrSpec } // prepare and send INVITE LibIms_Steps.f_setHeadersINVITE( p_cSeq, p_profile ); vc_requestUri := v_confUrl; f_SendINVITE(m_INVITE_Request_UE( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local) )); 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); // 200 OK INVITE f_awaitingOkResponse(vc_cSeq); // send ACK f_SendACK(m_ACK_Request_Base( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via )); f_SendNOTIFY(m_NOTIFY_Request_sipfrag( vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, "terminated", "SIP/2.0 200 OK" )); // 200 OK NOTIFY f_awaitingOkResponse(vc_cSeq); } } } No newline at end of file
AtsNIT_SipSip/ttcn/AtsNIT_SipSip_Testcases.ttcn +202 −32 Original line number Diff line number Diff line Loading @@ -670,16 +670,9 @@ module AtsNIT_SipSip_Testcases { f_cf_2imsDown(v_imsComponent1, v_imsComponent2); } // end TC_SS___XX__U08 } // end group TP1_2_BC_UnSuccessful } // end group TP_1_BasicCall group TP_2_SupplementaryServices { group TP2_1_SS_OIP_OIR { Loading Loading @@ -733,8 +726,185 @@ group TP2_7_SS_CFNL { }//end group TP2_7_SS_CFNL group TP2_8_SS_CONF { }//end group TP2_8_SS_CONF group TP2_8_1_SS_CONF_CRE { /* * @desc TC_SSS__XXSSCONF_CRE_001 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_001 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_001UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_001 /* * @desc TC_SSS__XXSSCONF_CRE_002 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_002 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_002UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_002 /* * @desc TC_SSS__XXSSCONF_CRE_003 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_003 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_003UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_003 /* * @desc TC_SSS__XXSSCONF_CRE_004 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_004 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_004UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_004 /* * @desc TC_SSS__XXSSCONF_CRE_007 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_007 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_007UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_007 /* * @desc TC_SSS__XXSSCONF_CRE_008 * @param p_CSeq_s Transaction Id */ testcase TC_SSS__XXSSCONF_CRE_008 ( inout CSeq p_CSeq_s ) runs on ServerSyncComp system TestAdapter { //Variables var ImsComponent v_imsComponent1; var ImsComponent v_imsComponent2; var ImsComponent v_imsComponent3; //Configuration f_cf_3imsUp(v_imsComponent1,v_imsComponent2,v_imsComponent3); f_IncCSeq(p_CSeq_s); //Start v_imsComponent1.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE1(p_CSeq_s)); v_imsComponent2.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE2(p_CSeq_s)); v_imsComponent3.start(f_AtsNIT_TC_SSS__XXSSCONF_CRE_008UE3(p_CSeq_s)); // synchronize both PTCs on 4 sychronization points f_serverSync3ClientsAndStop({c_prDone, c_Ringing, c_uPlane, c_tbDone}); //Clear configration f_cf_3imsDown(v_imsComponent1,v_imsComponent2,v_imsComponent3); } // end TC_SSS__XXSSCONF_CRE_008 }//end group TP2_8_1_SS_CONF_CRE }//end group TP2_8_SS_CONF }//end group TP_2_SupplementaryServices Loading