VOS_VOID TAF_SPM_UpdateCallRedialBufferMsgWithCallId( MN_CLIENT_ID_T usClientId, MN_CALL_ID_T ucCallId ) { VOS_UINT8 i; VOS_UINT8 ucNum; TAF_SPM_ENTRY_MSG_STRU *pstCacheMsg = VOS_NULL_PTR; MN_CALL_APP_REQ_MSG_STRU *pstAtMsg = VOS_NULL_PTR; /* 呼叫重拨未打开,直接返回 */ if (VOS_FALSE == TAF_SDC_GetCallRedailFromImsToCsSupportFlag()) { return; } ucNum = TAF_SPM_GetNumberOfCallRedialBuffer(); for (i = 0; (i < ucNum) && (i < TAF_SPM_MAX_CC_MSG_QUEUE_NUM); i++) { pstCacheMsg = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(i); pstAtMsg = (MN_CALL_APP_REQ_MSG_STRU *)(pstCacheMsg->aucEntryMsgBuffer); if (usClientId == pstAtMsg->clientId) { /* 更新call Id */ pstAtMsg->callId = ucCallId; break; } } }
VOS_VOID TAF_SPM_FreeCallRedialBufferWithCallId(MN_CALL_ID_T ucCallId) { VOS_UINT8 i; VOS_UINT8 ucNum; TAF_SPM_ENTRY_MSG_STRU *pstCacheMsg = VOS_NULL_PTR; MN_CALL_APP_REQ_MSG_STRU *pstAppMsg = VOS_NULL_PTR; /* 呼叫重拨未打开,直接返回 */ if (VOS_FALSE == TAF_SDC_GetCallRedailFromImsToCsSupportFlag()) { return; } ucNum = TAF_SPM_GetNumberOfCallRedialBuffer(); for (i = 0; (i < ucNum) && (i < TAF_SPM_MAX_CC_MSG_QUEUE_NUM); i++) { pstCacheMsg = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(i); pstAppMsg = (MN_CALL_APP_REQ_MSG_STRU *)(pstCacheMsg->aucEntryMsgBuffer); if (ucCallId == pstAppMsg->callId) { TAF_SPM_FreeSpecificedIndexCallRedialBuffer(i); break; } } TAF_SPM_LogSrvDomainSelRedialInfo(); }
VOS_VOID TAF_SPM_FreeSpecificedIndexCallRedialBuffer(VOS_UINT8 ucIndex) { VOS_UINT8 ucCacheMsgNum; TAF_SPM_ENTRY_MSG_STRU *pstCachedMsgInfo = VOS_NULL_PTR; /* get the specified index message address */ pstCachedMsgInfo = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(ucIndex); /* get the cached message number */ ucCacheMsgNum = TAF_SPM_GetNumberOfCallRedialBuffer(); if (0 < ucCacheMsgNum) { /* update the cached message number */ ucCacheMsgNum--; TAF_SPM_SetNumberOfCallRedialBuffer(ucCacheMsgNum); /* by the way, move the cached messages forward */ PS_MEM_MOVE(pstCachedMsgInfo, (pstCachedMsgInfo+1), (ucCacheMsgNum - ucIndex) * sizeof(TAF_SPM_ENTRY_MSG_STRU)); PS_MEM_SET((pstCachedMsgInfo + ucCacheMsgNum), 0, sizeof(TAF_SPM_ENTRY_MSG_STRU)); } }
VOS_UINT32 TAF_SPM_PutMsgIntoCallRedialBuffer( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_SPM_ENTRY_MSG_STRU *pstCacheMsgInfo = VOS_NULL_PTR; VOS_UINT8 ucCacheMsgNum; /* 检查消息长度,避免越界 */ if (TAF_SPM_MAX_MSG_BUFFER_LEN < (pstMsg->ulLength + VOS_MSG_HEAD_LENGTH)) { return VOS_FALSE; } /* 获取重拨呼叫缓存数目 */ ucCacheMsgNum = TAF_SPM_GetNumberOfCallRedialBuffer(); /* 获取指定重拨缓存地址 */ pstCacheMsgInfo = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(ucCacheMsgNum); /* 缓存消息 */ pstCacheMsgInfo->ulEventType = ulEventType; PS_MEM_CPY(&(pstCacheMsgInfo->aucEntryMsgBuffer[0]), pstMsg, pstMsg->ulLength + VOS_MSG_HEAD_LENGTH); /* update number of cached messages */ ucCacheMsgNum++; TAF_SPM_SetNumberOfCallRedialBuffer(ucCacheMsgNum); return (VOS_TRUE); }
VOS_VOID TAF_SPM_UpdateCallRedialBufferMsgWithCallType( MN_CLIENT_ID_T usClientId, MN_CALL_TYPE_ENUM_U8 enDestCallType, MN_CALL_EMERGENCY_CAT_STRU *pstEmcCat ) { VOS_UINT8 i; VOS_UINT8 ucNum; TAF_SPM_ENTRY_MSG_STRU *pstCacheMsg = VOS_NULL_PTR; MN_CALL_APP_REQ_MSG_STRU *pstAtMsg = VOS_NULL_PTR; /* 呼叫重拨未打开,直接返回 */ if (VOS_FALSE == TAF_SDC_GetCallRedailFromImsToCsSupportFlag()) { return; } ucNum = TAF_SPM_GetNumberOfCallRedialBuffer(); for (i = 0; (i < ucNum) && (i < TAF_SPM_MAX_CC_MSG_QUEUE_NUM); i++) { pstCacheMsg = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(i); pstAtMsg = (MN_CALL_APP_REQ_MSG_STRU *)(pstCacheMsg->aucEntryMsgBuffer); if (usClientId == pstAtMsg->clientId) { /* 更新call Id */ pstAtMsg->unParm.stOrig.enCallType = enDestCallType; /* 呼叫类型由普通呼叫变为紧急呼叫时,紧急呼的类型也要更新 */ if (MN_CALL_TYPE_EMERGENCY == enDestCallType) { PS_MEM_CPY(&(pstAtMsg->unParm.stOrig.stEmergencyCat), pstEmcCat, sizeof(MN_CALL_EMERGENCY_CAT_STRU)); } break; } } }
TAF_SPM_ENTRY_MSG_STRU *TAF_SPM_GetCallRedialBufferWithCallId(MN_CALL_ID_T ucCallId) { VOS_UINT8 i; VOS_UINT8 ucNum; TAF_SPM_ENTRY_MSG_STRU *pstCacheMsg = VOS_NULL_PTR; MN_CALL_APP_REQ_MSG_STRU *pstAppMsg = VOS_NULL_PTR; ucNum = TAF_SPM_GetNumberOfCallRedialBuffer(); for (i = 0; (i < ucNum) && (i < TAF_SPM_MAX_CC_MSG_QUEUE_NUM); i++) { pstCacheMsg = TAF_SPM_GetSpecificedIndexFromCallRedialBuffer(i); pstAppMsg = (MN_CALL_APP_REQ_MSG_STRU *)(pstCacheMsg->aucEntryMsgBuffer); if (ucCallId == pstAppMsg->callId) { return pstCacheMsg; } } return VOS_NULL_PTR; }