微信小程序> 紧急呼叫这点事儿(二)---当UE邂逅380状态字

紧急呼叫这点事儿(二)---当UE邂逅380状态字

浏览量:9537 时间: 来源:知不足而奋进

紧接上期《有中国特色的紧急呼叫》里提到过有中国特色的110、119、120、122、999会放到NV#69737  /nv/item_files/pbm/pbm_hardcoded_ecc_list,并且配置hardcoded_type = 0x01 ,意味着不插卡时call type是emergency type,插卡时call type是normal call(CC Setup)。所以当UE VoLTE注册成功后拨打110、119、120、122、999这些紧急号码走的是普通的VoLTE Call流程,然后会遇到P-CSCF响应的380 Alternative Service。具体详情,推荐阅读春天哥的以下文章,这里就不做过多阐述。

 

 

 

秉着Haykey哥一向遵守的理论结合实践的原则,咱们先过一遍相关的协议理论。

摘自3GPP TS23.167 IP Multimedia Subsystem (IMS) emergency sessions

 

 

这里提到了P-CSCF会配置并识别这些终端未检测出为紧急呼叫的号码,当检测到被叫为这些号码后,会拒绝掉本次回话并且指示终端该呼叫应为紧急呼叫,通常采用的SIP信令就是380 Alternative Service。UE收到后会选择一个合适的域继续发起紧急呼叫。

 

这个域协议上就3种选择,CS CN domain,PS CN domain和IMS CN domain。实际上目前PS CN domain = IMS CN domain。

 

那么,UE具体选择哪个domain域发起后续紧急呼叫的准则是什么呢?

摘自3GPP TS22.101 Service aspects;Service principles

 

 

通俗来讲,就是目前对于附着在多个domain上的UE(即注册在IMS域上又联合附着在CS域上),之前UE选择什么域上拨打普通电话,就应该用同样的域上拨打紧急电话,除非网络明确要求UE在哪个域上发起紧急呼叫。以下图为例,UE选择的是IMS domain优先,所以紧急呼叫也应该在IMS域上呼出。

 

 

 

你要是连这个voice domain pref都懵逼的话,再次强烈建议阅读春天哥的以下两篇强文来加深相关概念理解。

 

 

那什么叫做网络明确要求UE在哪个域上发起紧急呼叫呢,玄机就在380带的ims-3gpp XML上,一般国内运营商都在<reason>上注明Please retry by other network,意味着在CS域上发起CSFB紧急呼叫,

 

 

当然有的海外运营商网络会要求在IMS域上发起Emergency registration后,再发起Emergency Session,如下:

 

以Haykey哥目前遇到过的形形色色的380 Alternative Service,特总结如下:

 

最近,Haykey哥遇到了几个实际案例,可以归结为一类问题,就是当VoLTE UE发起Non detectable Emergency的普通VoLTE呼叫时,收到PCSCF响应的380状态字提示为emergency,但是并没有按照预期继续在CS或者IMS域上继续发起紧急呼叫。能够确定这就是UE问题么?参考以下协议后,发现UE行为正常,又是再给网络问题背书:)

 

摘自3GPP TS24.229 IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3

 

 

这里提到了两个关键信息。第一,包含PAI头部(P-Asserted-Identity),且内容必须等于注册(SIP Register)时所带PATH头部的最后一项,即PCSCF的IP地址或者FQDN;第二,包含ims-3gpp XML,有verstion属性,<alternative-service>子元素<type>设置为emergency。只有当这两个条件都满足的时候,UE才会继续选择合适的domain进行紧急呼叫。

 

针对这两个条件,常出现由于运营商网络配置不当,造成的异常情景有

i.  不包含ims-3gpp XML

这种情景下的380如下图所示:

 

ii. 不包含PAI或者包含PAI,但是不等于注册(SIP Register)时所带PATH头部的最后一项

 

做全球海外市场的好处,就是Haykey哥有幸能接触到全部这两种异常情景:)

 

 

对于这两种异常情景,UE不会继续在CS或者IMS域上发起紧急呼叫。按理说是符合协议规定的。但紧急呼叫的重要性不言而喻,涉及到财产,甚至人身安全,Q平台做了个workaround来禁止掉UE检查380的合法性,开关通过NV#67257 /ims/qp_ims_voip_config[VoIPConfigDisableChecksFor380Res]控制,当VoIPConfigDisableChecksFor380Res = 1 时禁止掉UE检查380的合法性,即使网络配置380有问题,紧急呼叫仍然会正常进行。

 

Haykey哥经过实验发现此NV开关开启或者关闭时, IMS日志中会反应如下

IMS/High                 [          qipcallh.c  41724] alternate_service_event: is_s_h_enabled : 1 --> NV67257 VoIPConfigDisableChecksFor380Res

IMS/High                 [          qipcallh.c  41724] alternate_service_event: is_s_h_enabled : 0

 

最后按照惯例,让大家看看针对不同情景下的典型日志,以便日后遇到类似问题时可以关键字搜索。

 

情景1:Workaround未开启时,P-CSCF回复不包含ims-3gpp XML的380 Alternative Service

 

2017 Dec 20  13:19:42.208  [7E]  0x156E  IMS SIP Message  --  IMS_SIP_INVITE/ALTERNATIVE_SERVICE

Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = ALTERNATIVE_SERVICE (380)
SIP Call ID = 3810273819_383815628@2a02:1400:8a:14a5:e37d:5859:73d1:aed
Sip Message = SIP/2.0 380 Alternative Service
Via: SIP/2.0/TCP [2a02:1400:8a:14a5:e37d:5859:73d1:aed]:41198;branch=z9hG4bK1284131459

//1177未被UE识别为紧急号码

To: <sip:1177;phone- context=ims.mnc008.mcc240.3gppnetwork.org@ims.mnc008.mcc240.3gppnetwork.org;user=phone>;tag=h7g4Esbg_cz1yxnvh1sw6pf6nk86sdixb1cyognh9 
From: <sip:+46731483382@ims.mnc008.mcc240.3gppnetwork.org>;tag=3810273823
Call-ID: 3810273819_383815628@2a02:1400:8a:14a5:e37d:5859:73d1:aed
CSeq: 589048347 INVITE
Content-Length: 0


MSG     13:19:42.206             IMS SIP/High             [      qpSipUtils.cpp   3407] EVENT_SIP_RESPONSE_RECV: SIP/2.0 380 Alternative Service 

                                                                          
MSG                      13:19:42.206             IMS/Medium               [   sipConnection.cpp   8686] SipConnection::qpSipValidateTransaction | Received a Response : 380

                                                                          

MSG                      13:19:42.215             IMS IMS CORE/High        [  qpSipSessionServic   2966] SS::notifyResponse | pSipClConn = 16eb7800 StatusCode = 380 | pTmpMethod = INVITE 

                                                                          
MSG                      13:19:42.215             IMS/High                 [qpSipSessionService.cpp   4169]EVENT_SIP_SESSION_FAILURE:Response Code: 380   

                                                                        
MSG                      13:19:42.215             IMS/Medium               [          qimfif.cpp   8262] qimfif_handle_message_errors: Status Code: 380, OPRT Mode: 2, event: 4101 

                                                                          
MSG                      13:19:42.215             IMS/High                 [     qipcalldialog.c   6040] [qipcalldialog_process_incoming_msg] [event: 4101] [status_code: 380] [sdpBody_ptr: 0x0]   

                                                                        
MSG                      13:19:42.215             IMS/High                 [          qipcallh.c  16192] qipcallh_process_cs_fallback_for_video_invite: status code 380  

 


MSG                      13:19:42.215             IMS/High                 [qipcallSipMsgHandle.c   1885]qipcallh_process_alternate_service_event: Alternate Handling serv type 0: Call End reason : 4(CMIPAPP_END_CAUSE_PERMANENT_FAILURE),special handling 0,  

                                                                         
MSG                      13:19:42.215             IMS/High                 [          qipcallh.c   8311] qipcallh_chg_state_to_null: end_reason = 4, end_request_type = 0 

 

情景2:Workaround未开启时,包含PAI,但是不等于注册(SIP Register)时所带PATH头部的最后一项

 

2018 Jan  3  11:28:46.501  [9E]  0x156E  IMS SIP Message  --  IMS_SIP_INVITE/ALTERNATIVE_SERVICE
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = ALTERNATIVE_SERVICE (380)
SIP Call ID = 718250844_2345788744@11.96.0.7
Sip Message = SIP/2.0 380 Alternative Service
Via: SIP/2.0/TCP 11.96.0.7:8901;branch=z9hG4bK519614051

//10111未被UE识别为紧急号码

To: <sip:10111;phone-context=ims.mnc010.mcc655.3gppnetwork.org@ims.mnc010.mcc655.3gppnetwork.org;user=phone>;tag=h7g4Esbg_df6pnfnvq2rty65bbw68spb9ljd1cgct
From: <sip:+27717555545@ims.mnc010.mcc655.3gppnetwork.org>;tag=718250859
Call-ID: 718250844_2345788744@11.96.0.7
CSeq: 718250844 INVITE
P-Asserted-Identity:  <sip:10.100.78.132:7777;transport=tcp;lr>
Content-Type: application/3gpp-ims+xml
Content-Length: 207

<?xml version="1.0" encoding="UTF-8"?>
<ims-3gpp version="1">
 <alternative-service>
  <type>emergency</type>
   <reason>Emergency Call over LTE is not supported</reason>
 </alternative-service>
</ims-3gpp>

 

 

MSG                      11:28:46.508             IMS/High                 [qpSipSessionService.cpp   4092]EVENT_SIP_SESSION_FAILURE:Response Code: 380  


MSG                      11:28:46.514             IMS/High                 [     qipcalldialog.c   5010] [qipcalldialog_process_incoming_msg] [event: 4104] [status_code: 380] [sdpBody_ptr: 0x0]

 

MSG                      11:28:46.514             IMS/High                 [          qipcallh.c  41724]alternate_service_event: is_s_h_enabled : 0  --》VoIPConfigDisableChecksFor380Res = 0

 

//PAI检查失败

MSG                      11:28:46.515             IMS/High                 [          qimfif.cpp  12798] AlternateHandling:validate_p_asserted_id failed                                                                           
MSG                      11:28:46.515             IMS/High                 [          qipcallh.c  41763] alternate_service_event: Some thing wrong with P-ASSERTED-ID, Sending PERMANENT failure to CM 


MSG                      11:28:46.514             IMS/High                 [      XmlDecoder.cpp    452] <XML Decoder>:Decoder Success 

//PAI = 10.100.78.132 from 380 Status                                                                           
MSG                      11:28:46.514             IMS SIP/High             [   sipConnection.cpp  13693] GetHostType |IPv4 = 10.100.78.132 10.100.78.132

  

//Path = JHSBG1-1-PCSCF.ims.mtn.co.za from 200 OK for SIP Register                                               MSG                      11:28:46.514             IMS SIP/High             [   sipConnection.cpp  13703] GetHostType |UNKNOWN IP Type JHSBG1-1-PCSCF.ims.mtn.co.za JHSBG1-1-PCSCF.ims.mtn.co.za                                                                           
MSG                      11:28:46.515             IMS/Error                [          qimfif.cpp  12951] qimfif_compare_ip_address_part_of_uri | FQDN MisMatch   

 

MSG                      11:28:46.515             IMS/High                 [          qipcallh.c  12236] qipcallh_chg_state_to_null: end_reason = 4, end_request_type = 0   
MSG                      11:28:46.516             IMS/High                 [          qipcallh.c   5093] qipcall_call_end_rpt_ind: Call Id=3, State=1,Cause=4 

 

MSG                      11:28:46.516             Call Manager/High        [          cmipcall.c   2653] =CM= IP RXD: CALL_END, end_cause=4(CMIPAPP_END_CAUSE_PERMANENT_FAILURE), client_end_cause=430(CMIPAPP_CLIENT_END_CAUSE_ALTERNATE_SERVICE ), call_id=3 

MSG                      11:28:46.516             Call Manager/High        [          cmipcall.c    579] =CM= VOIP client end cause 430, call_end 430 

MSG                      11:28:46.516             Call Manager/Medium      [          cmipcall.c   5130] =CM=cmipcall_end, reas=430 

 

 

情景3:Workaround开启时,包含PAI,但是不等于注册(SIP Register)时所带PATH头部的最后一项

 

 

018 Jan  3  11:36:40.515  [F6]  0x156E  IMS SIP Message  --  IMS_SIP_INVITE/ALTERNATIVE_SERVICE
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = ALTERNATIVE_SERVICE (380)
SIP Call ID = 718725128_2345784552@11.96.0.6
Sip Message = SIP/2.0 380 Alternative Service
Via: SIP/2.0/TCP 11.96.0.6:8901;branch=z9hG4bK2957653073
To: <sip:10111;phone-context=ims.mnc010.mcc655.3gppnetwork.org@ims.mnc010.mcc655.3gppnetwork.org;user=phone>;tag=h7g4Esbg_rh5798m6skycosftmzo8duums1bptmx8
From: <sip:+27717555545@ims.mnc010.mcc655.3gppnetwork.org>;tag=718725140
Call-ID: 718725128_2345784552@11.96.0.6
CSeq: 718725128 INVITE
P-Asserted-Identity:  <sip:10.100.78.132:7777;transport=tcp;lr>
Content-Type: application/3gpp-ims+xml
Content-Length: 207

<?xml version="1.0" encoding="UTF-8"?>
<ims-3gpp version="1">
 <alternative-service>
  <type>emergency</type>
   <reason>Emergency Call over LTE is not supported</reason>
 </alternative-service>
</ims-3gpp>

 

MSG                      11:36:40.838             IMS/High                 [qpSipSessionService.cpp   4092]EVENT_SIP_SESSION_FAILURE:Response Code: 380

 

MSG                      11:36:40.844             IMS/High                 [          qipcallh.c  41724] alternate_service_event: is_s_h_enabled : 1 --> NV67257 VoIPConfigDisableChecksFor380Res

 

MSG                      11:36:40.845             IMS SIP/High             [   sipConnection.cpp  13693] GetHostType | IPv4 = 10.100.78.132 10.100.78.132 

MSG                      11:36:40.845             IMS SIP/High             [   sipConnection.cpp  13703] GetHostType | UNKNOWN IP Type JHSBG1-1-PCSCF.ims.mtn.co.za JHSBG1-1-PCSCF.ims.mtn.co.za                                                                           
MSG                      11:36:40.845             IMS/Error                [          qimfif.cpp  12951] qimfif_compare_ip_address_part_of_uri | FQDN MisMatch                                                                           
MSG                      11:36:40.845             IMS/High                 [          qimfif.cpp  12798] AlternateHandling:validate_p_asserted_id failed 

 

//尽管PAI检查失败,UE仍然处理fallback到CS发起紧急呼叫

MSG                      11:36:40.845             IMS/High                 [          qipcallh.c  41671] Alternate Handling: Normal Voice call over CS                                                                           
MSG                      11:36:40.845             IMS/High                 [          qipcallh.c  41757] alternate_service_event: Alternate Handling:Call End reason : 609  

MSG                      11:36:40.845             IMS/High                 [          qipcallh.c  12236] qipcallh_chg_state_to_null: end_reason = 609非4, end_request_type = 0  
MSG                      11:36:40.845             IMS/High                 [          qipcallh.c  19896]qipcallh_process_cs_fallback_for_video_invite: status code 380  

                                                                        

MSG                      11:36:40.847             IMS/High                 [          qipcallh.c   4987] Sending ALTERNATE SERVICE EMERGENCY to CM for call id: 1                                                                           
MSG                      11:36:40.847             IMS/High                 [          qipcallh.c   4897] qipcall_alternate_service_rpt_ind: Call Id=1, State=1,Cause=609 

 

MSG                      11:36:40.847             Call Manager/High        [          cmipcall.c   2653] =CM= IP RXD: CALL_END, end_cause=610(CMIPAPP_END_CAUSE_ALTERNATE_VOICE_CALL), client_end_cause=431(CMIPAPP_CLIENT_END_CAUSE_ALTERNATE_SERVICE ), call_id=1 

                                                                         

//发起CSFB紧急电话

MSG                      11:36:40.847             Call Manager/High        [            cmcall.c   9105] =CM=csfb_type=2                                                                           
MSG                      11:36:40.847             Call Manager/High        [            cmcall.c  31757] =CM=cmcall_process_orig_mode mode_usage=3 

(本文完)

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎