VOS_UINT32 TAF_APS_RcvRabmLocalPdpDeactivateReq_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; MMC_APS_RAT_TYPE_ENUM_UINT32 enCurrRatType; /* 获取当前状态机的接入技术 */ enCurrRatType = TAF_APS_GetCurrPdpEntityRatType(); /* 获取当前状态机的APS实体索引 */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 在GU模下处理该消息, LTE模直接丢弃 */ if (MMC_APS_RAT_TYPE_WCDMA == enCurrRatType) { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_RAB_SETUP_FAILURE); /* 发送内部消息, 去激活PDP */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_REGULAR_DEACTIVATION); } return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvApsLocalPdpDeactivateInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; TAF_APS_INTER_PDP_DEACTIVATE_REQ_STRU *pstLocalMsg; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; /* 初始化, 获取消息内容 */ pstLocalMsg = (TAF_APS_INTER_PDP_DEACTIVATE_REQ_STRU *)pstMsg; ucPdpId = pstLocalMsg->ucPdpId; pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 停止流量统计 */ TAF_APS_StopDsFlowStats(pstPdpEntity->ucNsapi); /* 同步PDP状态和信息至ESM */ #if (FEATURE_ON == FEATURE_LTE) MN_APS_SndEsmPdpInfoInd(pstPdpEntity, SM_ESM_PDP_OPT_DEACTIVATE); #endif /* 向SM发送本地去激活请求 */ if (VOS_TRUE == pstPdpEntity->bitOpTransId) { TAF_APS_SndSmPdpLocalDeactivateReq(ucPdpId); } #if (FEATURE_ON == FEATURE_IPV6) /* 如果是缺省承载且地址类型是IPv6, 需要同步给ND Client */ if ( (TAF_APS_CheckPrimaryPdp(ucPdpId)) && (TAF_APS_CheckPdpAddrTypeIpv6(ucPdpId)) ) { TAF_APS_SndNdPdpDeactInd(TAF_APS_GetPdpEntNsapi(ucPdpId)); } #endif /* 如果SNDCP已经激活, 释放SNDCP资源 */ if (APS_SNDCP_ACT == pstPdpEntity->PdpProcTrack.ucSNDCPActOrNot) { Aps_ReleaseSndcpResource(ucPdpId); } /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_APS_MapSmCause(pstLocalMsg->enCause)); /* 释放APS资源 */ Aps_ReleaseApsResource(ucPdpId); /* 配置IP过滤器 */ TAF_APS_IpfConfigUlFilter(ucPdpId); /* 主状态迁移至TAF_APS_STA_INACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_INACTIVE); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvPsCallEndReq_CdataHandOff_WaitHsmHandOffCnf( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_PS_MSG_STRU *pstAppMsg; TAF_PS_CALL_END_REQ_STRU *pstCallEndReq; VOS_UINT8 ucPdpId; /* 获取消息内容 */ pstAppMsg = (TAF_PS_MSG_STRU*)pstMsg; pstCallEndReq = (TAF_PS_CALL_END_REQ_STRU*)(pstAppMsg->aucContent); ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 保存子状态机的入口消息 */ TAF_APS_SaveCurrSubFsmEntryMsg(ulEventType, pstMsg); /* 上报PS呼叫挂断响应事件 */ TAF_APS_SndCallEndCnf(&(pstCallEndReq->stCtrl), pstCallEndReq->ucCid, TAF_PS_CAUSE_SUCCESS); /* 停止保数据服务切换保护定时器 */ TAF_APS_StopTimer(TI_TAF_APS_1X_TO_HRPD_HANDOFF_TIMER, ucPdpId); //To do:暂时按照此流程做,后面参考标杆来做 /* 如果PPP已激活,通知PPP去激活 */ if (TAF_APS_CDATA_PPP_STATE_ACTIVE == TAF_APS_GetPdpEntPppState(ucPdpId)) { TAF_APS_SndPppDeactInd(ucPdpId); } /* 上报去激活的事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SUCCESS); /* 释放APS资源 */ Aps_ReleaseApsResource(ucPdpId); /* 配置IP过滤 */ TAF_APS_IpfConfigUlFilter(ucPdpId); /* 主状态迁移至TAF_APS_STA_INACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_INACTIVE); /* 退出子状态状态机 */ TAF_APS_QuitCurrSubFsm(); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvL4aPdpDeactivateInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; APS_L4A_PDP_DEACTIVATE_IND_STRU *pstL4aPdpDeactivateInd; /* 获取消息内容 */ pstL4aPdpDeactivateInd = (APS_L4A_PDP_DEACTIVATE_IND_STRU*)pstMsg; /* 获取当前状态机的APS索引 */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 获取该索引的APS实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 停止流量统计 */ TAF_APS_StopDsFlowStats(pstPdpEntity->ucNsapi); /* 如果不是默认承载,则上报,默认承载不上报 */ if (TAF_APS_DEFAULT_CID != pstPdpEntity->stClientInfo.ucCid) { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件上报 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_APS_MapL4aCause(pstL4aPdpDeactivateInd->ulEsmCause)); } /* 如果SNDCP已经激活, 释放SNDCP资源 */ if (APS_SNDCP_ACT == pstPdpEntity->PdpProcTrack.ucSNDCPActOrNot) { Aps_ReleaseSndcpResource(ucPdpId); } /* 释放APS资源 */ Aps_ReleaseApsResource(ucPdpId); /* 主状态迁移至TAF_APS_STA_INACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_INACTIVE); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvSndcpActivateRsp_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT32 ulResult; VOS_UINT8 ucPdpId; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; APS_SNDCP_ACTIVATE_RSP_ST *pstSnActivateRsp; /* 初始化, 获取消息内容 */ ulResult = VOS_OK; pstSnActivateRsp = &((APS_SNDCP_ACTIVATE_RSP_MSG*)pstMsg)->ApsSnActRsp; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 检查消息参数 */ ulResult = Aps_SnMsgModSnActRspParaCheck(pstSnActivateRsp); if (APS_PARA_VALID != ulResult) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_APS_RcvSndcpActivateRsp_Active: Check para failed!"); /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); return VOS_TRUE; } /* 收到SN_ACT_RSP后修改APS实体参数, 包括XID参数, TRANSMODE */ Aps_SnActRspChngEntity(pstSnActivateRsp, ucPdpId); /* 设置RABM的传输模式 */ TAF_APS_SndRabmSetTransModeMsg(pstSnActivateRsp->ucNsapi, pstPdpEntity->GprsPara.TransMode); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvSndcpStatusReq_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT32 ulRslt; VOS_UINT8 ucPdpId; APS_SNDCP_STATUS_REQ_ST *pstSnStatusReq; pstSnStatusReq = &((APS_SNDCP_STATUS_REQ_MSG*)pstMsg)->ApsSnStatusReq; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); ulRslt = TAF_APS_ValidatePdpForSnStatusReq(ucPdpId, pstSnStatusReq); if (VOS_TRUE == ulRslt) { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_LLC_OR_SNDCP_FAILURE); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); } return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvSmPdpModifyInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT32 ulResult; VOS_UINT8 ucPdpId; MMC_APS_RAT_TYPE_ENUM_UINT32 enCurrRatType; APS_MDFIND_PARA_ST stParam; SMREG_PDP_MODIFY_IND_STRU *pstSmPdpModifyInd; #if (FEATURE_ON == FEATURE_LTE) APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; #endif /* 获取消息内容 */ pstSmPdpModifyInd = (SMREG_PDP_MODIFY_IND_STRU *)pstMsg; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); enCurrRatType = TAF_APS_GetCurrPdpEntityRatType(); #if (FEATURE_ON == FEATURE_LTE) pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); #endif ulResult = Aps_PdpMdfIndParaCheck(pstSmPdpModifyInd, &stParam); if (APS_PARA_INVALID == ulResult) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_APS_RcvSmPdpModifyInd_Active: Check para failed! "); /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); return VOS_TRUE; } /* 检查QOS是否满足MIN */ if (APS_PARA_VALID == Aps_CheckQosSatisify(ucPdpId, &stParam.NewQos)) { /* 满足MINQOS */ Aps_PdpMdfIndQosSatisfy(ucPdpId, &stParam, pstSmPdpModifyInd); #if (FEATURE_ON == FEATURE_LTE) /* 同步PDP信息至ESM */ MN_APS_SndEsmPdpInfoInd(pstPdpEntity, SM_ESM_PDP_OPT_MODIFY); #endif /* 如果当前模为GSM, 迁移状态 */ if (MMC_APS_RAT_TYPE_GSM == enCurrRatType) { /*------------------------------------------------------------------ 加载TAF_APS_STA_MS_MODIFYING状态机 加载后子状态切换为TAF_APS_MS_MODIFYING_SUBSTA_INIT 在TAF_APS_MS_MODIFYING_SUBSTA_INIT子状态中 处理D_PMC_SMREG_PDP_MODIFY_IND消息 ------------------------------------------------------------------*/ TAF_APS_InitSubFsm(TAF_APS_FSM_MS_MODIFYING, TAF_APS_GetMsModifyingFsmDescAddr(), TAF_APS_MS_MODIFYING_SUBSTA_INIT); } } else { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_QOS_NOT_ACCEPTED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_QOS_NOT_ACCEPTED); } return VOS_TRUE; }