📄 manageprocess.c
字号:
#include "..\sys\Include.h"
/*
分配一个BSC信息下标
-1:不可分配
*/
int AllotBSCCellInfo();
/* 根据BSCIdentifier找到BSCCellInfo的下标
* -1:不存在
*/
int FindOffsetAccordingBSC(unsigned char *LpBSC);
/* 配置一个小区列表 */
int Process_Configure_BSC_Cell(CBEMESSAGE_t *s_CBEMessage)
{
BSC_CELL_INFO_i *LPs_BSCCellInfo;
int posi;
int i,j;
posi=AllotBSCCellInfo();
if (posi<0)
{
return FULL_CONFIGURE_BSC;
}
LPs_BSCCellInfo=(BSC_CELL_INFO_i *)&s_CBEMessage->cMessage[0];
if (LPs_BSCCellInfo->cNumberOfCell>MAX_BSC_CELL_COUNT)
{
return NUMBEROFCELL_ERROR;
}
memset(&s_BSCCellInfo[posi],0,sizeof(BSC_CELL_INFO_t));
s_BSCCellInfo[posi].bFlag=1;
/*BSCID */
memcpy(&s_BSCCellInfo[posi].cBSCIdentifer[0],&LPs_BSCCellInfo->cBSCIdentifer[0],BSC_INDENTIFIER_LEN);
memcpy(&s_BscConnectInfo[posi].BscIdentifier[0],&LPs_BSCCellInfo->cBSCIdentifer[0],BSC_INDENTIFIER_LEN);
/*LACID */
memcpy(&s_BSCCellInfo[posi].cLacId[0],&LPs_BSCCellInfo->cLacId[0],LAC_INDENTIFIER_LEN);
/* Bsc的地址 */
LPs_BSCCellInfo->BSCAddress[BSC_ADDR_LEN]=0;
memcpy(&s_BscConnectInfo[posi].BscAddr[0],&LPs_BSCCellInfo->BSCAddress[0],BSC_ADDR_LEN+1);
/* 下行连接用户名 */
LPs_BSCCellInfo->CBCOperator[MAX_OPERATOR_LEN]=0;
memcpy(&s_BscConnectInfo[posi].CBCOperator[0],&LPs_BSCCellInfo->CBCOperator[0],MAX_OPERATOR_LEN+1);
/* 上行连接用户名 */
LPs_BSCCellInfo->BSCOperator[MAX_OPERATOR_LEN]=0;
memcpy(&s_BscConnectInfo[posi].BSCOperator[0],&LPs_BSCCellInfo->BSCOperator[0],MAX_OPERATOR_LEN+1);
for(i=0;i<LPs_BSCCellInfo->cNumberOfCell;i++)
{
j=s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell;
memcpy(&s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellId[0],
&LPs_BSCCellInfo->s_Cell[i],sizeof(CELLID_t));
//for test
s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_ERROR;
// s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_OK;
s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell++;
if(s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell==MAXCELLOFBTS)
{
s_BSCCellInfo[posi].cNumberOfBTS++;
}
if(i==(LPs_BSCCellInfo->cNumberOfCell-1))
{
s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_ERROR;
// s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_OK;
s_BSCCellInfo[posi].cNumberOfBTS++;
}
}
if (s_BscConnectInfo[posi].ConnectOpen==ON)
{
s_BscConnectInfo[posi].ConnectOpen=OFF;
/* 延迟10秒保证链路断开,资源释放 */
Sleep(RELEASE_X25CONNECT_WAIT);
}
/* 连接BSC */
s_BscConnectInfo[posi].ConnectOpen=ON;
/* 创建X25接口连接和监听线程 */
s_BscConnectInfo[posi].DownlinkThreadOpen=ON;
s_BscConnectInfo[posi].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&posi,0,NULL);
s_BscConnectInfo[posi].UplinkThreadOpen=ON;
s_BscConnectInfo[posi].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&posi,0,NULL);
/* 延迟保证线程参数传递 */
Sleep(1000);
return SUCCESS;
}
/* 分配一个BSC信息下标 */
int AllotBSCCellInfo()
{
int i;
for(i=0;i<MAX_BSC_CONNECT;i++)
{
if (s_BSCCellInfo[i].bFlag==0)
{
return i;
}
}
return FAILURE;
}
//根据BSCIdentifier找到BSCCellInfo的下标
int FindOffsetAccordingBSC(unsigned char *LpBSC)
{
int i;
for(i=0;i<MAX_BSC_CONNECT;i++)
{
if (memcmp(&s_BSCCellInfo[i].cBSCIdentifer[0],LpBSC,BSC_INDENTIFIER_LEN)==0)
{
return i;
}
}
return FAILURE;
}
/*---------------------------------------
//出错返回给CBC_proxy
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Manage_Message_Return(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
SENDING_MESSAGE_ERROR_i s_SendingMessageError;
MESSAGE_HEAD_t *LPs_MessageHead;
CBEMESSAGE_t s_CBEMessage;
memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
LPs_MessageHead=(MESSAGE_HEAD_t *)&LpCBEMessage->s_MessageHead;
s_SendingMessageError.s_MessageHead.iMessageAreaId=C;
s_SendingMessageError.s_MessageHead.iMessageType=LPs_MessageHead->iMessageType;
/* 填写接受Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_ReceiverPid.iProcessId,&LPs_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
/* 填写发送者Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_SenderPid.iProcessId,&LPs_MessageHead->s_ReceiverPid.iProcessId,sizeof(PID_t));
s_SendingMessageError.s_MessageHead.s_SenderPid.cModuleId=MODULEID;
s_SendingMessageError.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
s_SendingMessageError.s_MessageHead.iMessageLength=sizeof(int);
s_SendingMessageError.iErrorCode=ErrorCode;
s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);
//传递SocketHandle
// LpCBEMessage=(CBEMESSAGE_t *)&ProcessData[s_Pid.iProcessId][0];
// s_CBEMessage.SocketHandle=LpCBEMessage->SocketHandle;
//
memcpy(&s_CBEMessage.iLen,&s_SendingMessageError.ilen,sizeof(SENDING_MESSAGE_ERROR_i));
/* 发送给CBCproxy */
AppendCBESendMessage(&s_CBEMessage);
}
/*---------------------------------------
//统计请求确认
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Stat_Req_Conf(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
SENDING_MESSAGE_ERROR_i s_SendingMessageError;
MESSAGE_HEAD_t *LPs_MessageHead;
CBEMESSAGE_t s_CBEMessage;
memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
LPs_MessageHead=(MESSAGE_HEAD_t *)&LpCBEMessage->s_MessageHead;
s_SendingMessageError.s_MessageHead.iMessageAreaId=C;
s_SendingMessageError.s_MessageHead.iMessageType=STATISTIC_CONFIRM;
/* 填写接受Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_ReceiverPid.iProcessId,&LPs_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
/* 填写发送者Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_SenderPid.iProcessId,&LPs_MessageHead->s_ReceiverPid.iProcessId,sizeof(PID_t));
s_SendingMessageError.s_MessageHead.s_SenderPid.cModuleId=MODULEID;
s_SendingMessageError.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
s_SendingMessageError.s_MessageHead.iMessageLength=sizeof(int);
s_SendingMessageError.iErrorCode=ErrorCode;
s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);
//传递SocketHandle
// LpCBEMessage=(CBEMESSAGE_t *)&ProcessData[s_Pid.iProcessId][0];
// s_CBEMessage.SocketHandle=LpCBEMessage->SocketHandle;
//
memcpy(&s_CBEMessage.iLen,&s_SendingMessageError.ilen,sizeof(SENDING_MESSAGE_ERROR_i));
/* 发送给CBCproxy */
AppendCBESendMessage(&s_CBEMessage);
}
/*---------------------------------------
//观察确认
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Watch_Req_Confirm(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
SENDING_MESSAGE_ERROR_i s_SendingMessageError;
MESSAGE_HEAD_t *LPs_MessageHead;
CBEMESSAGE_t s_CBEMessage;
memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));
LPs_MessageHead=(MESSAGE_HEAD_t *)&LpCBEMessage->s_MessageHead;
s_SendingMessageError.s_MessageHead.iMessageAreaId=C;
s_SendingMessageError.s_MessageHead.iMessageType=WATCH_CONFIRM;
/* 填写接受Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_ReceiverPid.iProcessId,&LPs_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
/* 填写发送者Pid */
memcpy(&s_SendingMessageError.s_MessageHead.s_SenderPid.iProcessId,&LPs_MessageHead->s_ReceiverPid.iProcessId,sizeof(PID_t));
s_SendingMessageError.s_MessageHead.s_SenderPid.cModuleId=MODULEID;
s_SendingMessageError.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
s_SendingMessageError.s_MessageHead.iMessageLength=sizeof(int);
s_SendingMessageError.iErrorCode=ErrorCode;
s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);
//传递SocketHandle
// LpCBEMessage=(CBEMESSAGE_t *)&ProcessData[s_Pid.iProcessId][0];
// s_CBEMessage.SocketHandle=LpCBEMessage->SocketHandle;
//
memcpy(&s_CBEMessage.iLen,&s_SendingMessageError.ilen,sizeof(SENDING_MESSAGE_ERROR_i));
/* 发送给CBCproxy */
AppendCBESendMessage(&s_CBEMessage);
}
/* 删除一个BSC小区列表 */
int Process_DELETE_BSC_Cell(CBEMESSAGE_t *s_CBEMessage)
{
unsigned char *LPBSC;
int posi;
LPBSC=&s_CBEMessage->cMessage[0];
posi=FindOffsetAccordingBSC(LPBSC);
if (posi<0)
{
return UNRECOGNIZED_BSC;
}
memset(&s_BSCCellInfo[posi],0,sizeof(BSC_CELL_INFO_t));
// memset(&s_BscConnectInfo[posi],0,sizeof(BSC_CONNECT_INFO_t));
s_BscConnectInfo[posi].ConnectOpen=OFF;
if ((s_BscConnectInfo[posi].UplinkThreadOpen==ON)
||(s_BscConnectInfo[posi].DownlinkThreadOpen==ON))
{
/* 延迟保证连接线程退出 */
Sleep(RELEASE_X25CONNECT_WAIT);
}
return SUCCESS;
}
/* 删除所有小区 */
int Process_DELETE_ALL_Cell(CBEMESSAGE_t *s_CBEMessage)
{
memset(&s_BSCCellInfo,0,sizeof(BSC_CELL_INFO_t)*MAX_BSC_CONNECT);
return SUCCESS;
}
/* 设置BSC地址,上下行操作者 */
int Process_SetBSCAddr(CBEMESSAGE_t *s_CBEMessage)
{
SETBSC_ADDR_t *LPSetBSCAddr;
int posi;
LPSetBSCAddr=(SETBSC_ADDR_t *)&s_CBEMessage->cMessage[0];
posi=FindOffsetAccordingBSC(&LPSetBSCAddr->BSCIdentifier[0]);
if (posi<0)
{
return UNRECOGNIZED_BSC;
}
if(s_BscConnectInfo[posi].ConnectOpen==ON)
{
return ADDRESS_IS_INUSED;
}
/* BSCIdentifier */
memcpy(&s_BscConnectInfo[posi].BscIdentifier[0], &LPSetBSCAddr->BSCIdentifier[0],BSC_INDENTIFIER_LEN);
/* BSCAddress */
memcpy(&s_BscConnectInfo[posi].BscAddr[0],&LPSetBSCAddr->BSCAddress[0],BSC_ADDR_LEN);
s_BscConnectInfo[posi].BscAddr[BSC_ADDR_LEN]=0;
/* 上行操作者 */
memcpy(&s_BscConnectInfo[posi].BSCOperator[0],&LPSetBSCAddr->BSCOperator[0], MAX_OPERATOR_LEN);
s_BscConnectInfo[posi].BSCOperator[MAX_OPERATOR_LEN]=0;
/* 下行操作者 */
memcpy(&s_BscConnectInfo[posi].CBCOperator[0],&LPSetBSCAddr->CBCOperator[0], MAX_OPERATOR_LEN);
s_BscConnectInfo[posi].CBCOperator[MAX_OPERATOR_LEN]=0;
/* 创建X25接口连接和监听线程 */
// s_BscConnectInfo[posi].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&posi,0,NULL);
// s_BscConnectInfo[posi].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&posi,0,NULL);
return SUCCESS;
}
/* 开启BSC的连接 */
int Process_Bsc_Connect_Open(CBEMESSAGE_t *LPs_CBEMessage)
{
unsigned char cBscId[BSC_INDENTIFIER_LEN];
int Tid;
memcpy(cBscId,&LPs_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);
Tid=GetTid(cBscId);
if(Tid<0)
{
return UNRECOGNIZED_BSC;
}
if (s_BscConnectInfo[Tid].ConnectOpen==OFF)
{
if(s_BscConnectInfo[Tid].DownlinkThreadOpen==OFF&&
s_BscConnectInfo[Tid].UplinkThreadOpen==OFF)
{
s_BscConnectInfo[Tid].ConnectOpen=ON;
/* 创建X25接口连接和监听线程 */
s_BscConnectInfo[Tid].DownlinkThreadOpen=ON;
s_BscConnectInfo[Tid].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&Tid,0,NULL);
s_BscConnectInfo[Tid].UplinkThreadOpen=ON;
s_BscConnectInfo[Tid].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&Tid,0,NULL);
/* 延迟保证线程参数传递 */
Sleep(1000);
}
else
{
/* 请等5秒钟再试 */
return WAIT_5_SECONDS_TRY_AGAIN;
}
}
else
{
/* 已经开启 */
return ALREADY_OPEN;
}
return SUCCESS;
}
/* 关闭BSC的连接 */
int Process_Bsc_Connect_Close(CBEMESSAGE_t *LPs_CBEMessage)
{
unsigned char cBscId[BSC_INDENTIFIER_LEN];
int Tid;
memcpy(cBscId,&LPs_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);
Tid=GetTid(cBscId);
if(Tid<0)
{
return UNRECOGNIZED_BSC;
}
if (s_BscConnectInfo[Tid].ConnectOpen==ON)
{
s_BscConnectInfo[Tid].ConnectOpen=OFF;
}
else
{
/* 已经关闭 */
return ALREADY_CLOSE;
}
return SUCCESS;
}
/* 设置最大相对时间 */
int Process_SetMaxRelativeTime(CBEMESSAGE_t *s_CBEMessage)
{
int *LPRelativeTime;
int RelativeTime;
LPRelativeTime=(int *)&s_CBEMessage->cMessage[0];
RelativeTime=(*LPRelativeTime)*86400;
if((RelativeTime<0)||(RelativeTime>MAX_RELATIVE_TIME))
{
return FAILURE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -