📄 cbse_writereplace.c
字号:
}
//NewTime不存在
else{
if(LPm_WriteReplace_Request->p_OldTime.bFlag==EXIST)
{//OldTime存在
return UPDATA_PENDING_SEND_MESSAGE;
}
else
{//OldTime不存在
return UPDATE_ALREADY_SEND_MESSAGE;
}
}
}
//老序列号不存在
else{
if(LPm_WriteReplace_Request->p_NewTime.bFlag==EXIST)
{
//Newtime存在
if(LPm_WriteReplace_Request->p_OldTime.bFlag==EXIST)
{//OldTime存在
return INCOMPATIBLE_PARAMETER;
}
else
{//OldTime不存在
return NEW_SCHEDUAL_MESSAGE;
}
}
//NewTime不存在
else{
if(LPm_WriteReplace_Request->p_OldTime.bFlag==EXIST)
{//OldTime存在
return INCOMPATIBLE_PARAMETER;
}
else
{//OldTime不存在
return NEW_WRITE_MESSAGE;
}
}
}
}
/* 发送消息给BSC */
int Process_Send_Write_Replace_To_BSC(PID_t s_Pid, DIVIDE_CELLLIST_BUF_t *s_DivideCellListBuf)
{
int len;
char *BSCID;
WRITEREPLACE_REQUEST_t m_WriteReplace_Request;
BSCMESSAGE_t s_BSCMessage;
int i,j;
int Tid;
memcpy(&m_WriteReplace_Request,&ProcessData[s_Pid.iProcessId][(sizeof(short)+sizeof(MESSAGE_HEAD_t))],sizeof(WRITEREPLACE_REQUEST_t));
for(i=0;i<s_DivideCellListBuf->cNumberOfCellList;i++)
{
memset(&s_BSCMessage,0,sizeof(BSCMESSAGE_t));
memcpy(&m_WriteReplace_Request.p_CellList,&s_DivideCellListBuf->s_CellListOfBSC[i].s_CellList,sizeof(CELLLIST_t));
len=Pack_WRITEREPLACE_REQUEST(&m_WriteReplace_Request,&s_BSCMessage.cMessage[0]);
if (len>0)
{
s_BSCMessage.iLen=len;
/* 填写PID */
memcpy(&s_BSCMessage.s_Pid,&s_Pid,sizeof(PID_t));
BSCID=&s_DivideCellListBuf->s_CellListOfBSC[i].BSCIdentifier[0];
Tid=GetTid(BSCID);
if (Tid!=FAILURE)
{
#ifdef OPEN_STATISTIC
if (m_WriteReplace_Request.p_OldSerialnumber.bFlag==EXIST)
{
/* 小区REPLACE操作次数加 1 */
for(j=0;j<m_WriteReplace_Request.p_CellList.iLength;j++)
{
Update_Cell_Statistic_Count(&m_WriteReplace_Request.p_CellList.s_CellList[j].cCellId[0],Tid,REPLACE_STATISTIC,0,0);
}
s_CBSECount.s_ReqBSCCnt[Tid].iCBCProxyReplaceReqCnt++;
}
else
{
/* 小区WRITE操作次数加 1 */
for(j=0;j<m_WriteReplace_Request.p_CellList.iLength;j++)
{
Update_Cell_Statistic_Count(&m_WriteReplace_Request.p_CellList.s_CellList[j].cCellId[0],Tid,WRITE_STATISTIC,0,0);
}
s_CBSECount.s_ReqBSCCnt[Tid].iCBCProxyWriteReqCnt++;
}
#endif
memcpy(&s_BSCMessage.s_Pid,&s_Pid,sizeof(PID_t));
/* 发送给BSC */
X25AppendCBESendMessage(&s_BSCMessage, Tid);
}
}
}
return SUCCESS;
}
/* 发送Write消息给BSC前发Kill消息,保证序列号可用 */
int Process_Send_Kill_To_BSC_Before_Write(PID_t s_Pid, DIVIDE_CELLLIST_BUF_t *s_DivideCellListBuf)
{
int len;
char *BSCID;
WRITEREPLACE_REQUEST_t m_WriteReplace_Request;
BSCMESSAGE_t s_BSCMessage;
KILLMESSAGE_t m_KillMessage;
int i;
int Tid;
memcpy(&m_WriteReplace_Request,&ProcessData[s_Pid.iProcessId][(sizeof(short)+sizeof(MESSAGE_HEAD_t))],sizeof(WRITEREPLACE_REQUEST_t));
/* 未分配完,不用删除返回 */
if(s_RuntimeInfo.ifChannelSerialNumberLoop[m_WriteReplace_Request.p_MessageIdentifier.iMessageIdentifier]==0)
{
return SUCCESS;
}
for(i=0;i<s_DivideCellListBuf->cNumberOfCellList;i++)
{
memset(&s_BSCMessage,0,sizeof(BSCMESSAGE_t));
memset(&m_KillMessage,0,sizeof(KILLMESSAGE_t));
/* MessageIdentifier */
memcpy(&m_KillMessage.p_MessageIdentifier,&m_WriteReplace_Request.p_MessageIdentifier,sizeof(MESSAGEIDENTIFIER_t));
/* SerialNumber */
memcpy(&m_KillMessage.p_OldSerialnumber,&m_WriteReplace_Request.p_NewSerialnumber,sizeof(SERIALNUMBER_t));
/* CellList */
memcpy(&m_KillMessage.p_CellList,&s_DivideCellListBuf->s_CellListOfBSC->s_CellList,sizeof(CELLLIST_t));
len=Pack_KILL_MESSAGE(&m_KillMessage,&s_BSCMessage.cMessage[0]);
if (len>0)
{
s_BSCMessage.iLen=len;
/* 填写PID */
// memcpy(&s_BSCMessage.s_Pid,&s_Pid,sizeof(PID_t));
memset(&s_BSCMessage.s_Pid,0,sizeof(PID_t));
BSCID=&s_DivideCellListBuf->s_CellListOfBSC->BSCIdentifier[0];
Tid=GetTid(BSCID);
if (Tid!=FAILURE)
{
#ifdef OPEN_STATISTIC
#endif
memcpy(&s_BSCMessage.s_Pid,&s_Pid,sizeof(PID_t));
/* 发送给BSC */
X25AppendCBESendMessage(&s_BSCMessage, Tid);
}
}
}
return SUCCESS;
}
/*
if (s_DivideCellListBuf->s_FailureList.bFlag==EXIST)
{
//报告失败列表给Cbc_proxy
memset(&s_Report,0,sizeof(REPORTSUCCESS_t));
memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
memcpy(&s_Report.p_MessageIdentifier,&LPm_WriteReplace_Request.p_MessageIdentifier,sizeof(MESSAGEIDENTIFIER_t));
memcpy(&s_Report.p_Serialnumber,&LPm_WriteReplace_Request.p_NewSerialnumber,sizeof(SERIALNUMBER_t));
memcpy(&s_Report.p_FailureReportList,&s_DivideCellListBuf->s_FailureList,sizeof(FAILURELIST_t));
if (LPm_WriteReplace_Request.p_ChannelIndicator.bFlag==EXIST)
{
memcpy(&s_Report.p_ChannelIndicator,&LPm_WriteReplace_Request.p_ChannelIndicator,sizeof(CHANNELINDICATOR_t));
}
s_CBEMessage.s_MessageHead.iMessageAreaId=A;
//CBSE_REPORT_SUCCESS
s_CBEMessage.s_MessageHead.iMessageType=3;
s_CBEMessage.s_MessageHead.s_SenderPid.iProcessId=s_Pid.iProcessId;
s_CBEMessage.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
s_CBEMessage.s_MessageHead.s_SenderPid.cModuleId=MODULEID;
s_CBEMessage.s_MessageHead.iMessageLength=sizeof(REPORTSUCCESS_t);
s_CBEMessage.iLen=sizeof(MESSAGE_HEAD_t)+s_CBEMessage.s_MessageHead.iMessageLength;
memcpy(&s_CBEMessage.cMessage[0],(char *)&s_Report,s_CBEMessage.s_MessageHead.iMessageLength);
s_CBEMessage.SocketHandle=LPCBEMessage->SocketHandle;
memset(&s_CBCProxyMessage,0,sizeof(CBEMESSAGE_t));
Convert_Response(&s_CBEMessage,&s_CBCProxyMessage);
AppendCBESendMessage(&s_CBCProxyMessage);
}
*/
/*/将列表转为标准格式,用于Write_Replace
//in: s_CBEMessage Cbcproxy发送来的原始信息
//out: s_ProxyMessage
//返回:
// 1: 成功,
// -1:失败
*/
int Convert_Write_Replace_Request(CBEMESSAGE_t *s_CBEMessage,CBEMESSAGE_t *s_ProxyMessage)
{
int posi;
unsigned short iListLen;
WRITEREPLACE_REQUEST_t *LPWriterReplaceRequest;
LPWriterReplaceRequest=(WRITEREPLACE_REQUEST_t *)&s_ProxyMessage->cMessage[0];
memcpy(&s_ProxyMessage->s_MessageHead,&s_CBEMessage->s_MessageHead,sizeof(MESSAGE_HEAD_t));
memcpy(&s_ProxyMessage->cMessage[0],&s_CBEMessage->cMessage[0],
(sizeof(WRITE_REPLACE_i)-sizeof(MESSAGE_HEAD_t)));
// s_ProxyMessage->SocketHandle=s_CBEMessage->SocketHandle;
posi=sizeof(WRITE_REPLACE_i)-sizeof(MESSAGE_HEAD_t);
/* 得到CELLLIST的长度 */
memcpy(&iListLen,&s_CBEMessage->cMessage[posi+1],sizeof(unsigned short));
iListLen=iListLen*sizeof(CELLID_t)+4; //4=sizeof(bFlag)+sizeof(CellIddisc)+sizeof(iLength)
/* 长度溢出,返回错误 */
if (iListLen>sizeof(CELLLIST_t))
{
return FAILURE;
}
/* 没有该参数,返回成功
错误在参数初始化中检查
*/
if (iListLen==0)
return SUCCESS;
/* 复制小区列表 */
memcpy(&LPWriterReplaceRequest->p_CellList, &s_CBEMessage->cMessage[posi],iListLen);
posi=posi+iListLen;
/* 得到页信息的长度 */
memcpy(&iListLen,&s_CBEMessage->cMessage[posi+1],sizeof(unsigned char));
iListLen=iListLen*sizeof(PAGEINF_t)+3;//3=sizeof(bFlag)+sizeof(iLength)
/* 长度溢出,返回错误 */
if (iListLen>sizeof(CBSPAGEINF_t))
{
return FAILURE;
}
/* 没有该参数,返回成功 */
if (iListLen==0)
{
return SUCCESS;
}
// posi=posi+sizeof(unsigned char);
/* 复制页信息 */
memcpy(&LPWriterReplaceRequest->p_CbsPageInf, &s_CBEMessage->cMessage[posi],iListLen);
s_ProxyMessage->iLen=sizeof(WRITEREPLACE_REQUEST_t)+sizeof(MESSAGE_HEAD_t);
return SUCCESS;
}
/* 内部定时重发 */
void Process_Scheduled_Resend(PID_t s_Pid,char *Lp_BSCID)
{
int len;
int Tid;
BSCMESSAGE_t s_BSCMessage;
WRITEREPLACE_PROCESS_DATA_STRUCT *LPs_WriteReplaceProcessDataStruct;
WRITEREPLACE_REQUEST_t m_WriteReplaceRequest;
CELLLIST_t s_CellList;
int iBscPosi;
int i,j;
memset(&s_BSCMessage,0,sizeof(BSCMESSAGE_t));
memset(&m_WriteReplaceRequest,0,sizeof(WRITEREPLACE_REQUEST_t));
memset(&s_CellList,0,sizeof(CELLLIST_t));
LPs_WriteReplaceProcessDataStruct=(WRITEREPLACE_PROCESS_DATA_STRUCT *)&ProcessData[s_Pid.iProcessId][0];
memcpy(&m_WriteReplaceRequest,&LPs_WriteReplaceProcessDataStruct->s_CBCMessage.cMessage[0],sizeof(WRITEREPLACE_REQUEST_t));
for(i=0;i<LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.cNumberOfBSC;i++)
{
if(memcmp(&LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].BSCIdentifier[0],Lp_BSCID,BSC_INDENTIFIER_LEN)==0)
{
iBscPosi=i;
break;
}
}
for(i=0;i<MAX_BSC_CONNECT;i++)
{
if(memcmp(&s_BscConnectInfo[i].BscIdentifier[0],Lp_BSCID,BSC_INDENTIFIER_LEN)==0)
{
Tid=i;
break;
}
}
/* 得到重发列表 */
//
s_CellList.bFlag=1;
s_CellList.cCellIdDisc=LAC_AND_CI;
for(i=0;i<LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[iBscPosi].ilength;i++)
{
if(LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[iBscPosi].s_CellReport[i].cCellStatus==TEMP_FAILURE)
{
memcpy(&s_CellList.s_CellList[s_CellList.iLength].cCellId[0],
&LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[iBscPosi].s_CellReport[i].s_CellId.cCellId[0],
sizeof(CELLID_t));
s_CellList.iLength++;
}
}
memcpy(&m_WriteReplaceRequest.p_CellList,&s_CellList,sizeof(CELLLIST_t));
len=Pack_WRITEREPLACE_REQUEST(&m_WriteReplaceRequest,&s_BSCMessage.cMessage[0]);
memcpy(&s_BSCMessage.s_Pid,&s_Pid,sizeof(PID_t));
if (len>0)
{
s_BSCMessage.iLen=len;
#ifdef OPEN_STATISTIC
if (m_WriteReplaceRequest.p_OldSerialnumber.bFlag==EXIST)
{
/* 小区REPLACE操作次数加 1 */
for(j=0;j<m_WriteReplaceRequest.p_CellList.iLength;j++)
{
Update_Cell_Statistic_Count(&m_WriteReplaceRequest.p_CellList.s_CellList[j].cCellId[0],Tid,REPLACE_STATISTIC,0,0);
}
s_CBSECount.s_ReqBSCCnt[Tid].iCBCProxyReplaceReqCnt++;
}
else
{
/* 小区WRITE操作次数加 1 */
for(j=0;j<m_WriteReplaceRequest.p_CellList.iLength;j++)
{
Update_Cell_Statistic_Count(&m_WriteReplaceRequest.p_CellList.s_CellList[j].cCellId[0],Tid,WRITE_STATISTIC,0,0);
}
s_CBSECount.s_ReqBSCCnt[Tid].iCBCProxyWriteReqCnt++;
}
#endif
X25AppendCBESendMessage(&s_BSCMessage, Tid);
LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[iBscPosi].cResendTimes++;
}
}
/*
返回响应给CBCProxy
只报告响应
*/
void Process_WriteReplace_Return_To_CBCProxy(PID_t s_Pid)
{
int iPosi;
char ResponseBuf[3096];
WRITEREPLACE_REQUEST_t *LPm_WriteReplace_Request;
WRITEREPLACE_PROCESS_DATA_STRUCT *LPs_WriteReplaceProcessDataStruct;
REPORT_MESSAGE_i *LPs_Report;
int i,j;
unsigned short iLen;
memset(&ResponseBuf[0],0,3096);
LPs_WriteReplaceProcessDataStruct=(WRITEREPLACE_PROCESS_DATA_STRUCT *)&ProcessData[s_Pid.iProcessId][0];
LPm_WriteReplace_Request=(WRITEREPLACE_REQUEST_t *)&LPs_WriteReplaceProcessDataStruct->s_CBCMessage.cMessage[0];
LPs_Report=(REPORT_MESSAGE_i *)&ResponseBuf[sizeof(short)];
/* */
memcpy(&LPs_Report->s_MessageHead.s_ReceiverPid,
&LPs_WriteReplaceProcessDataStruct->s_CBCMessage.s_MessageHead.s_SenderPid,sizeof(PID_t));
/* */
memcpy(&LPs_Report->s_MessageHead.s_SenderPid,&s_Pid,sizeof(PID_t));
LPs_Report->s_MessageHead.iMessageAreaId=A;
memcpy(&LPs_Report->p_MessageIdentifier,&LPm_WriteReplace_Request->p_MessageIdentifier,sizeof(MESSAGEIDENTIFIER_t));
memcpy(&LPs_Report->p_Serialnumber,&LPm_WriteReplace_Request->p_NewSerialnumber,sizeof(SERIALNUMBER_t));
memcpy(&LPs_Report->p_ChannelIndicator,&LPm_WriteReplace_Request->p_ChannelIndicator,sizeof(CHANNELINDICATOR_t));
for(i=0;i<LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.cNumberOfBSC;i++)
{
if(LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].bReceiveRespons==1)
{
/* 如果有响应,未知状态改为成功 */
for(j=0;j<LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].ilength;j++)
{
if(LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].s_CellReport[j].cCellStatus==UNKNOW_STATUS)
{
LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].s_CellReport[j].cCellStatus=CELL_SUCCESS;
}
}
}
}
/*
/* 初始为收全
bIfAllResponse=1;
for(i=0;i<LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.cNumberOfBSC;i++)
{
if(LPs_WriteReplaceProcessDataStruct->s_ResponseCellList.s_BSCCellList[i].bReceiveRespons==0)
{
/* 未收全
bIfAllResponse=0;
break;
}
}
/* 初始为不存在重发
bResendExist=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -