Loading ats/ttcn/LibIms/LibIms_PIXITS.ttcn +24 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,11 @@ group SUT_UE1 { /** @desc charstring for home(SUT) REGISTRAR domain */ modulepar charstring PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net"; /** @desc charstring for UE1 display name */ modulepar charstring PX_IMS_SUT_UE1_DISPLAY := "UE1@SUT"; } // end group SUT_UE1 group SUT_UE2 { /** @desc integer for SUT - PCSCF2 port number to exchange SIP messages Loading Loading @@ -101,6 +106,17 @@ group SUT_UE2 { */ modulepar charstring PX_IMS_SUT_UE2_REGISTRAR := "registrar.sut.net"; } // end group SUT_UE2 group SUT_unknown{ /** @desc charstring for identity of emergency service local domain */ modulepar charstring PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007"; } // end group SUT_unknown group EMERGENCY{ /** @desc charstring for identity of emergency service local domain */ Loading Loading @@ -171,6 +187,11 @@ group SUT_SCSCF { /** @desc charstring for SUT/S-CSCFdomain */ modulepar charstring PX_IMS_SUT_SCSCF_HOME_DOMAIN := "172.27.16.115"; /** @desc charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF */ modulepar charstring PX_IMS_SUT_SCSCF_REALM := "realm.scscf"; } // end group SUT_SCSCF group SUT_ICSCF { Loading Loading @@ -262,6 +283,9 @@ group TS_IMS1user { */ modulepar charstring PX_IMS_TS_IMS1UE_PUBLIC_USER := "IMS1UE"; /** @desc charstring for SUT/P-CSCFdomain */ modulepar charstring PX_IMS_TS_IMS1UE_HOME_DOMAIN := "172.27.16.115"; } // end group TS_IMS1user } // end group TS Loading ats/ttcn/LibIms/LibIms_SIPTypesAndValues.ttcn +9 −3 Original line number Diff line number Diff line Loading @@ -26,8 +26,10 @@ group UserProfileConstants 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_ICSCFwithHomeUE := 43; // location is IMS1 domain const integer c_userProfile_SCSCFwithHomeUE := 44; // 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 // number of interface profile Loading @@ -45,6 +47,10 @@ group UserProfileConstants 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 Loading ats/ttcn/LibIms/LibIms_Steps.ttcn +164 −3 Original line number Diff line number Diff line Loading @@ -347,11 +347,37 @@ module LibIms_Steps 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 Loading @@ -360,6 +386,34 @@ module LibIms_Steps 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 Loading Loading @@ -452,6 +506,16 @@ module LibIms_Steps p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_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_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) } Loading Loading @@ -534,7 +598,81 @@ module LibIms_Steps } 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",int2char(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 { /* Loading Loading @@ -568,7 +706,7 @@ module LibIms_Steps f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); //Preamble f_Registration(p_cSeq_s, p_register); 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)); } Loading @@ -580,6 +718,29 @@ module LibIms_Steps 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",int2char(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()}; Loading ats/ttcn/LibIms/LibIms_Templates.ttcn +189 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,16 @@ module LibIms_Templates 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",?}) // set of GenericParam } group HeaderFieldTemplates{ template PAccessNetworkInfo m_PAccessNetworkInfo_IEEE_11a := Loading Loading @@ -222,6 +232,18 @@ group HeaderFieldTemplates{ 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 } } } group MessageTemplates { Loading Loading @@ -454,6 +476,38 @@ group request_send { } } 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 := { Loading @@ -471,6 +525,24 @@ group request_send { 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 { Loading @@ -488,6 +560,32 @@ group request_receive { msgHeader := {pChargingFunctionAddresses := omit} } 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_route (template Route p_route) modifies mw_INVITE_Request_Base := { msgHeader := {route := p_route} } 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 } } /* * * @desc Await INVITE using topology hiding Loading Loading @@ -567,6 +665,23 @@ group request_receive { } } 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 := Loading @@ -575,6 +690,21 @@ group request_receive { } } 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 { Loading Loading @@ -667,6 +797,28 @@ group response_send 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_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:= Loading Loading @@ -800,6 +952,42 @@ group response_receive } } 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:={addrSpec:=p_ue_uri}},*}}, path := ?, serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={addrSpec:=p_sut_scscf_uri}}}}, 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:= { Loading @@ -810,7 +998,7 @@ group response_receive } } } } // end response_receive }//end modified_templates Loading Loading
ats/ttcn/LibIms/LibIms_PIXITS.ttcn +24 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,11 @@ group SUT_UE1 { /** @desc charstring for home(SUT) REGISTRAR domain */ modulepar charstring PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net"; /** @desc charstring for UE1 display name */ modulepar charstring PX_IMS_SUT_UE1_DISPLAY := "UE1@SUT"; } // end group SUT_UE1 group SUT_UE2 { /** @desc integer for SUT - PCSCF2 port number to exchange SIP messages Loading Loading @@ -101,6 +106,17 @@ group SUT_UE2 { */ modulepar charstring PX_IMS_SUT_UE2_REGISTRAR := "registrar.sut.net"; } // end group SUT_UE2 group SUT_unknown{ /** @desc charstring for identity of emergency service local domain */ modulepar charstring PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007"; } // end group SUT_unknown group EMERGENCY{ /** @desc charstring for identity of emergency service local domain */ Loading Loading @@ -171,6 +187,11 @@ group SUT_SCSCF { /** @desc charstring for SUT/S-CSCFdomain */ modulepar charstring PX_IMS_SUT_SCSCF_HOME_DOMAIN := "172.27.16.115"; /** @desc charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF */ modulepar charstring PX_IMS_SUT_SCSCF_REALM := "realm.scscf"; } // end group SUT_SCSCF group SUT_ICSCF { Loading Loading @@ -262,6 +283,9 @@ group TS_IMS1user { */ modulepar charstring PX_IMS_TS_IMS1UE_PUBLIC_USER := "IMS1UE"; /** @desc charstring for SUT/P-CSCFdomain */ modulepar charstring PX_IMS_TS_IMS1UE_HOME_DOMAIN := "172.27.16.115"; } // end group TS_IMS1user } // end group TS Loading
ats/ttcn/LibIms/LibIms_SIPTypesAndValues.ttcn +9 −3 Original line number Diff line number Diff line Loading @@ -26,8 +26,10 @@ group UserProfileConstants 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_ICSCFwithHomeUE := 43; // location is IMS1 domain const integer c_userProfile_SCSCFwithHomeUE := 44; // 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 // number of interface profile Loading @@ -45,6 +47,10 @@ group UserProfileConstants 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 Loading
ats/ttcn/LibIms/LibIms_Steps.ttcn +164 −3 Original line number Diff line number Diff line Loading @@ -347,11 +347,37 @@ module LibIms_Steps 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 Loading @@ -360,6 +386,34 @@ module LibIms_Steps 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 Loading Loading @@ -452,6 +506,16 @@ module LibIms_Steps p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit}; p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_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_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) } Loading Loading @@ -534,7 +598,81 @@ module LibIms_Steps } 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",int2char(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 { /* Loading Loading @@ -568,7 +706,7 @@ module LibIms_Steps f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s); //Preamble f_Registration(p_cSeq_s, p_register); 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)); } Loading @@ -580,6 +718,29 @@ module LibIms_Steps 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",int2char(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()}; Loading
ats/ttcn/LibIms/LibIms_Templates.ttcn +189 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,16 @@ module LibIms_Templates 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",?}) // set of GenericParam } group HeaderFieldTemplates{ template PAccessNetworkInfo m_PAccessNetworkInfo_IEEE_11a := Loading Loading @@ -222,6 +232,18 @@ group HeaderFieldTemplates{ 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 } } } group MessageTemplates { Loading Loading @@ -454,6 +476,38 @@ group request_send { } } 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 := { Loading @@ -471,6 +525,24 @@ group request_send { 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 { Loading @@ -488,6 +560,32 @@ group request_receive { msgHeader := {pChargingFunctionAddresses := omit} } 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_route (template Route p_route) modifies mw_INVITE_Request_Base := { msgHeader := {route := p_route} } 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 } } /* * * @desc Await INVITE using topology hiding Loading Loading @@ -567,6 +665,23 @@ group request_receive { } } 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 := Loading @@ -575,6 +690,21 @@ group request_receive { } } 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 { Loading Loading @@ -667,6 +797,28 @@ group response_send 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_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:= Loading Loading @@ -800,6 +952,42 @@ group response_receive } } 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:={addrSpec:=p_ue_uri}},*}}, path := ?, serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={addrSpec:=p_sut_scscf_uri}}}}, 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:= { Loading @@ -810,7 +998,7 @@ group response_receive } } } } // end response_receive }//end modified_templates Loading