高通语音专题--呼叫保持流程和日志分析
IMS呼叫保持
·
1 呼叫保持整体流程
以下是呼叫保持的整体流程图
前提条件:UE1 和 UE2 已经建立正常通话
2 呼叫保持流程及 log 分析
1 UI 向 QMI 发送 Hold Call 请求
关键字:QMI --> Service_VOICE --> VOIP_SUPS_TYPE_CALL_HOLD
02:36:06.580172 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Request //Hold call 请求消息
MinorRev = 106 //消息 ID
Service_VOICE {
ServiceVOICEV2 {
voice_manage_ip_calls {
voice_manage_ip_calls_reqTlvs[0] {
sups_type {
sups_type = VOIP_SUPS_TYPE_CALL_HOLD //Hold Call请求标志
}
}
}
}
}
}
2 QMI 向 CM 发送 Hold Call 请求
关键字:Call Manager
QMI调用cm_mm_call_cmd_sups()函数向CM发送Hold Call请求
02:36:06.580156 Call Manager/High [ cm.c 6963] =CM= CM_CALL_CMD_SUPS client 17, sups_type 16, as_id 0 //QMI命令 cm 发送呼叫相关的补充服务
02:36:06.580156 Call Manager/High [ cmdbg.c 3646] >>CM callcmd 3, tsk=qmi_mmode, client_type=17 //CM收到来自QMI的Hold Call请求
cm_mm_call_cmd_sups() --> 命令 cm 发送呼叫相关的补充服务
sups_type:16 --> CM_CALL_SUPS_TYPE_HOLD_PER_CALL
call cmd:3 --> CM_CALL_SUPS_TYPE_HOLD_CALL
3 CM 向 IMS 发送 CM_CALL_SUPS_TYPE_HOLD_CALL(cmd:3) 命令以保持呼叫,IMS 使用 CM_CALL_EVENT_SUPS(Call_event 4) 响应 CM
关键字:Call Manager | Data Services --> qmi_if_call_event_cb
02:36:06.581042 Call Manager/High [ cmipcall.c 5583] =CM= IP CALLCMD: cmd=3, as_id=0, is_ims_cap_on_sub=1
02:36:06.581042 Call Manager/Medium [ cmipapp.c 5759] =CM= CM->IMS: CMIPAPP: Send Hold for call 0, as_id 0 //“呼叫保持”请求从CM发送到IMS
02:36:06.581042 Data Services/Medium [ ds_qmi_if.c 2130] Call_event 4 received in qmi_if_call_event_cb //CM收到IMS的响应
all cmd:3 --> CM_CALL_SUPS_TYPE_HOLD_CALL
Call_event:4 --> CM_CALL_EVENT_SUPS
4 IMS 向 SIP 服务器发送邀请
关键字:OTA
02:36:06.590046 [0x156E] IMS SIP Message
Version = 1
Version 1 {
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_INVITE
Response Code = INFORMAL_RESPONSE (0) //IMS向SIP服务器发送“连接请求”
}
02:36:06.636014 [0x156E] IMS SIP Message
Version = 1
Version 1 {
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = TRYING (100) //SIP服务器返回100 TRYING
}
5 SIP 服务器向 IMS 发送 200 OK
关键字:OTA
02:36:07.099004 [0x156E] IMS SIP Message
Version = 1
Version 1 {
Direction = NETWORK_TO_UE
Message ID = IMS_SIP_INVITE
Response Code = OK (200) //SIP服务器回复200 OK
}
02:36:07.103012 [0x156E] IMS SIP Message
Version = 1
Version 1 {
Direction = UE_TO_NETWORK
Message ID = IMS_SIP_ACK
Response Code = INFORMAL_RESPONSE (0) //IMS向SIP服务器回复ACK
}
6 IMS 向 CM 发送 CM_IP_CALL_IND_CALL_HOLD 指示
关键字:Call Manager
02:36:07.107995 Call Manager/High [ cmipapp.c 4078] =CM= IMS_RPT: RPT name 606
02:36:07.107995 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:606
02:36:07.107995 Call Manager/High [ cmipcall.c 4265] =CM= IP RXD: CALL_HOLD, id=0, as_id=0
cmd:606 --> CM_IP_CALL_IND_CALL_HOLD
IMS到QMI的流程:
IMS主动上报到CM,CM转发到QMI
7 CM 向 QMI 发送 CM_CALL_EVENT_CALL_ON_HOLD 事件
关键字:Call Manager
02:36:07.107995 Call Manager/High [ cmdbg.c 3914] =CM= <<CM1 callevt=46 <0> //cm 发送CM_CALL_EVENT_CALL_ON_HOLD事件
callevt:46 --> CM_CALL_EVENT_CALL_ON_HOLD
8 IMS 向 CM 发送 CM_IP_CALL_IND_SUPS_CONF 指示
关键字:Call Manager
02:36:07.107995 Call Manager/High [ cmipcall.c 2202] =CM= CM->CM: CM_IP_CALL_IND_SUPS_CONF, call_success 1, sups_type 0, as_id 0 //这里应该是IMS->CM
02:36:07.107995 Call Manager/High [ cmipapp.c 4078] =CM= IMS_RPT: RPT name 609
609 --> CM_IP_CALL_IND_SUPS_CONF
9 CM 向 QMI 发送 CM_CALL_EVENT_MNG_CALLS_CONF 指示
关键字:Call Manager
02:36:07.107995 Call Manager/High [ cmtask.c 10965] =CM= CM<< IP cmd:609
02:36:07.107995 Call Manager/High [ cmipcall.c 4625] =CM= IP RXD: SUPS_CONF, sups_type=16, num_part=0, participant=0x0 id=0, rpt asubs_id=0, is_ims_cap_on_sub=1
sups_type:16 --> CM_CALL_SUPS_TYPE_HOLD_PER_CALL
10 QMI 向 UI 返回 Hold Call 请求响应
关键字:QMI --> Service_VOICE
02:36:07.109004 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Response //Hold Call请求响应消息
MinorRev = 106 //消息 ID
Service_VOICE {
ServiceVOICEV2 {
voice_manage_ip_calls {
voice_manage_ip_calls_respTlvs[0] {
resp {
result = QMI_RESULT_SUCCESS //Hold Call请求成功
error = QMI_ERR_NONE
}
}
}
}
}
}
11 QMI 上报当前的电话状态
关键字:QMI --> Service_VOICE --> voice_all_call_status
02:36:07.109004 [0x1544] QMI_MCS_QCSI_PKT
packetVersion = 2
V2 {
MsgType = Indication //通话状态上报
Service_VOICE { //语音通话关键字
ServiceVOICEV2 {
voice_all_call_status {
voice_all_call_status_indTlvs[0] {
call_info {
num_of_instances = 1
call_info[0] {
call_id = 1
call_state = CALL_STATE_HOLD //UE1和UE2处于HOLD状态
call_type = CALL_TYPE_VOICE_IP
}
}
}
voice_all_call_status_indTlvs[2] {
remote_party_number {
num_instances = 1 //当前有1路通话
remote_party_number[0] { //当前通话(UE2)信息
call_id = 1
number_len = 11
number = {
1, 5, 0, 2, 9, 2, 3, 0,
0, 8, 6
}
}
}
}
}
}
}
}
更多推荐
所有评论(0)