pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37274?usp=email )
Change subject: asterisk: IMS: validate P-Preferred-Service in INVITE ......................................................................
asterisk: IMS: validate P-Preferred-Service in INVITE
Change-Id: Iaa219d7b16965b27cd62ec27d810cb490dbc7a5a --- M asterisk/IMS_ConnectionHandler.ttcn M library/SIP_Templates.ttcn 2 files changed, 47 insertions(+), 0 deletions(-)
Approvals: pespin: Looks good to me, approved Jenkins Builder: Verified
diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn index 4f87f95..69e8abf 100644 --- a/asterisk/IMS_ConnectionHandler.ttcn +++ b/asterisk/IMS_ConnectionHandler.ttcn @@ -466,6 +466,37 @@ } }
+/* Validate P-Preferred-Service: GSMA FCM.01 3.2.3.3 */ +private function f_ims_validate_invite_P_Preferred_Service(PDU_SIP_Request req, + boolean exp_present := true) runs on IMS_ConnHdlr + +{ + if (not exp_present) { + if (ispresent(g_rx_sip_req.msgHeader.p_preferred_service)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str(g_name & ": Received unexpected [rfc6050] P-Preferred-Service := ", + g_rx_sip_req.msgHeader.p_preferred_service)); + } + return; + } + + /* exp_present: */ + var template (present) P_Preferred_Service expl_tmpl := + tr_P_Preferred_Service({ "urn:urn-7:3gpp-service.ims.icsi.mmtel" }); + + if (not ispresent(g_rx_sip_req.msgHeader.p_preferred_service)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str(g_name & ": Received no P-Access-Info vs exp := ", + expl_tmpl)); + } + if (not match(g_rx_sip_req.msgHeader.p_preferred_service, expl_tmpl)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str(g_name & ": Received unexpected P-Preferred-Service := ", + g_rx_sip_req.msgHeader.p_preferred_service, + "\nvs exp := ", expl_tmpl)); + } +} + /* GSMA IR.92 2.2.4 Call Establishment and Termination */ private function f_ims_validate_INVITE_SDP(SDP_Message sdp) runs on IMS_ConnHdlr { @@ -1344,6 +1375,7 @@ via := g_rx_sip_req.msgHeader.via;
f_ims_validate_register_P_Access_Network_info(g_rx_sip_req, exp_present := true); + f_ims_validate_invite_P_Preferred_Service(g_rx_sip_req, exp_present := true); f_ims_validate_INVITE_Contact(g_rx_sip_req.msgHeader.contact); f_ims_validate_INVITE_SDP(g_pars.subscr.cp.peer_sdp);
diff --git a/library/SIP_Templates.ttcn b/library/SIP_Templates.ttcn index d0210d1..ce5998b 100644 --- a/library/SIP_Templates.ttcn +++ b/library/SIP_Templates.ttcn @@ -284,6 +284,12 @@ p_assoc_uris := p_assoc_uris }
+// [RFC6050] +template (present) P_Preferred_Service tr_P_Preferred_Service(template (present) Service_ID_List p_ps := ?) := { + fieldName := P_PREFERRED_SERVICE_E, + p_ps := p_ps +} + // RFC 3262 template (value) RAck ts_RAck(template (value) integer response_num, template (value) integer seq_nr,