call forwarding调查

call forwarding介绍

call forwarding是call增值业务;在TS24082中有详细的介绍 呼叫转移有3方用户

  • A:呼叫方;(Calling mobile subscriber side)
  • B:被叫方且设置有呼叫转移业务;(Served mobile subscriber side)
  • C:呼叫转移接受方,即B设置的呼叫转移的接受方;(Forwarded-to mobile subscriber side)

整个流程即:

  • 前提条件 B设置了呼叫转移给C方
  • A打电话给B
  • 满足呼叫转移的4个条件之一, B转移电话给C
  • A和C进行通话

各种呼叫转移流程

CFU 无条件呼叫转移

  • A方流程
     
     
     MS                                                           Network 
                                              SETUP 
      ------------------------------------------------------------------> 
                                             FACILITY 
        <----------------------------------------------------------------- 
                    Facility (Invoke = NotifySS (CFU, SS-Notification)) 
  • B方 没有动作;
  • C方
     
     
     MS                                                           Network 
                                              SETUP 
        < ---------------------------------------------------------------- 
                       Facility (Invoke = NotifySS (CFU, SS-Notification)) 
     Redirecting party BCD number (screening indicator, presentation indicator, redirecting party digits), Redirecting party subaddress 

CFB 用户忙时呼叫转移

  • A方流程
     
     MS                                                                Network 
                                              SETUP 
       ----------------------------------------------------------------------> 
                                             FACILITY 
        <--------------------------------------------------------------------- 
                        Facility (Invoke = NotifySS (CFB, SS-Notification)) 
  • B方
     
     MS                                                                   Network 
                                              SETUP 
        <----------------------------------------------------------------------- 
                                   RELEASE COMPLETE/RELEASE/DISCONNECT 
      -------------------------------------------------------------------------> 
                              ....Transaction Identifier (A-B).... 
                                 ....Cause # 17 (User Busy).... 
       
                                      FACILITY (TI=B-X) 
        <------------------------------------------------------------------------ 
                      Facility (Invoke = NotifySS (CFB, SS-Notification)) 
  • C方
     
     MS                                                                  Network 
                                              SETUP 
        < ---------------------------------------------------------------------- 
                        Facility (Invoke = NotifySS (CFB, SS-Notification)) 
     Redirecting party BCD number (screening indicator, presentation indicator, redirecting party digits), Redirecting party subaddress 

CFNRy 无回应呼叫转移

  • A方流程
     
     MS                                                                    Network 
                                              SETUP 
       ---------------------------------------------------------------------------------> 
                                             FACILITY 
        <------------------------------------------------------------------------ 
                        Facility (Invoke = NotifySS (CFNRy, SS-Notification)) 
  • B方
     
     MS                                                               Network 
                                      FACILITY 
       <----------------------------------------------------------------------- 
                     Facility (Invoke = NotifySS (CFNRy, SS-Notification)) 

  • C方
     
     MS                                                                  Network 
                                              SETUP 
        < ------------------------------------------------------------------- 
         Facility (Invoke = NotifySS (CFNRc, SS-Notification))Redirecting party BCD number (screening indicator, presentation indicator, redirecting party digits) 

CFNRc 用户不可达呼叫转移

  • A方流程
     
     MS                                                                   Network 
                                              SETUP 
         -----------------------------------------------------------------------> 
                                             FACILITY 
        <------------------------------------------------------------------------- 
                           Facility (Invoke = NotifySS (CFNRc, SS-Notification)) 
  • B方 没有动作;
  • C方
     
     
     MS                                                           Network 
                                     SETUP 
        < ---------------------------------------------------------------- 
         Facility (Invoke = NotifySS (CFNRc, SS-Notification))Redirecting party BCD number (screening indicator, presentation indicator, redirecting party digits) 

设置呼叫转移

 
 MS                                                                        Network 
                                       REGISTER 
      ------------------------------------------------------------------------> 
                Facility (Invoke = ActivateSS (呼叫转移类型, BasicServiceCode)) 
                                  RELEASE COMPLETE 
     <----------------------------------------------------------------------- 
                      Facility (Return result = DeactivateSS (SS-Status)) 
   
 注册失败情况:从网络发以下请求中其中一种: 
                                  RELEASE COMPLETE 
     <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---- 
                         Facility (Return error (Error)) 
   
                                 RELEASE COMPLETE 
     <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
                         Facility (Reject (Invoke_problem)) 

取消呼叫转移

 
 MS                                                                      Network 
                                       REGISTER 
      ---------------------------------------------------------------------------> 
                Facility (Invoke = DeactivateSS (呼叫转移类型, BasicServiceCode)) 
                                  RELEASE COMPLETE 
     <--------------------------------------------------------------------------- 
                      Facility (Return result = DeactivateSS (SS-Status)) 
 取消呼叫转移失败情况:从网络发以下请求中其中一种: 
                                  RELEASE COMPLETE 
     <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
                         Facility (Return error (Error)) 
                                 RELEASE COMPLETE 
     <- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
                         Facility (Reject (Invoke_problem)) 

呼叫转移代码实现

呼叫转移界面显示实现

主要在callnotifer.java中getSuppSvcNotificationText();主要实现了若用户设置好呼叫转移后,发生呼叫转移时以toast形式提示给用户。
主要分下面2个方面(A 打电话给B,B设置呼叫转移到C;)

  • 呼出MO
    • MO_CODE_UNCONDITIONAL_CF_ACTIVE/MO_CODE_SOME_CF_ACTIVE: B激活了呼叫转移功能,若B拨打电话出去时,当modem侧上报Alerting消息里包含了faclity的消息,根据B设置的callforwarding的条件,显示给用户;
    • MO_CODE_CALL_FORWARDED: A拨打电话给B,呼叫转移给C,接收到网络端发过来的facility消息,在用户A上显示此电话是一个呼叫转移call;
  • 呼入MT
    • MT_CODE_FORWARDED_CALL:用户C接到呼叫转移过来的call,接收到网络端发过来的facility消息,在用户C上显示这是一个呼叫转移call;
    • MT_CODE_ADDITIONAL_CALL_FORWARDED:当用户B设置为CFB 或是 CFNRy ,若发生了呼叫转移,接收到网络端发过来的facility消息,在用户B上显示该call已呼叫转移;(CFNRy 没有确定)

SETUP消息中包含facility消息表明此为一个forwarding call

  • cmcall.c
    • cmcall_rpt_proc() 底层上报facility消息到CM侧;
    • cmwcall_rpt_call()
      • 根据cm_rpt_ptr->hdr.cmd ,case:CM_MT_CALL_SS_IND 处理;
      • 若是一个forwarding call,则通知上层,消息为:CM_CALL_EVENT_CALL_BEING_FORWARDED
  • qmi_voice_cm_if.h
    • 把底层上报的消息修改为qmi侧能识别的消息;CM_CALL_EVENT_CALL_BEING_FORWARDED--->QMI_VOICE_CM_IF_EVT_CALL_BEING_FORWARDED
    • qmi_voice_cm_if_fill_and_send_sups_notification_ind()对该消息进行处理;
      • 赋值notify_type然后调用qmi_voice_cm_if_unsol_response();header=QMI_VOICE_CM_IF_CMD_SUPS_NOTIFICATION_IND;
    • qmi_voice_cm_if_unsol_response()对header=QMI_VOICE_CM_IF_CMD_SUPS_NOTIFICATION_IND
      • 再一次进行那个赋值
      • dcc_send_cmd(DCC_QMI_VOICE_CMD, data_ptr);
  • DCC_QMI_VOICE_CMD的情况由qmi_voice_process_cmd()处理
  • qmi_voice.c
    • qmi_voice_process_cmd() header:QMI_VOICE_CM_IF_CMD_SUPS_NOTIFICATION_IND;
    • qmi_voicei_sups_notification_ind()
    • qmi_svc_send_ind(xx,xx,VOICEI_CMD_VAL_SUPS_NOTIFICATION_IND【0x0032】,ind),上报到qcril侧;
  • voice_service_v02.h
    • QMI_VOICE_SUPS_NOTIFICATION_IND_V02 0x0032
  • qcril_qmi_voice.c
    • qcril_qmi_voice_unsol_ind_cb_helper()
      • case:QMI_VOICE_SUPS_NOTIFICATION_IND_V02 --->qcril_qmi_voice_sups_notification_ind_hdlr()
    • qcril_qmi_voice_sups_notification_ind_hdlr()
      • 根据notification_type进行处理。若来电时forwarding call,符合case:NOTIFICATION_TYPE_INCOMING_FORWARDED_CALL_V02;则标明此为forwarding call;上报给RIL侧;
      • 上报消息RIL_UNSOL_SUPP_SVC_NOTIFICATION;该上报没有标明这是什么条件的呼叫转移,只是说明此为一个呼叫转移的电话。

SETUP消息中没有facility消息但包含redirecting number的forwarding call

  • DOCOMO运营商若来电是一个forwarding call不会再SETUP消息中的facility消息中表明此为一个什么条件的forwarding call,而是直接在IEI消息中包含了设置方的号码;
  • 下图是来电的流程图;call forwarding调查_第1张图片

你可能感兴趣的:(call forwarding调查)