📄 cbcbscpack.c
字号:
if (s_WriteReplaceRequest->p_OldSerialnumber.bFlag==1)
{
len=Pack_OldSerialNumber(s_WriteReplaceRequest->p_OldSerialnumber.iSerialNumber,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//Category (O)
if (s_WriteReplaceRequest->p_Category.bFlag==1)
{
len=Pack_CATEGORY(s_WriteReplaceRequest->p_Category.cCategory,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//ChannelIndicator (O)
if (s_WriteReplaceRequest->p_ChannelIndicator.bFlag==1)
{
len=Pack_CHANNELINDICATOR(s_WriteReplaceRequest->p_ChannelIndicator.cChannelIndicator, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括WriteReplace sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=CBSE_WRITE_REPLACE;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return Offset+lentmp;
/*
//
lentmp=CovertASN1LEN(len,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括WriteReplace 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_WRITE_REPLACE;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return len;
*/
}
//打包Kill Message操作元素
//返回包长 ERROR -1
int Pack_KILL_MESSAGE(KILLMESSAGE_t *s_KillMessage,unsigned char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; //长度字段打包缓冲区
unsigned char Buf[20]; //2Tag,2Len打包缓冲区
int i=20; //反向偏移指针
unsigned char PackBuf[2048];//打包缓冲区
int Offset=0; //PackBuf偏移指针
memset(PackBuf,0,2048);
//MessageIdentifier
if (s_KillMessage->p_MessageIdentifier.bFlag==1)
{
len=Pack_MessageIdentifier(s_KillMessage->p_MessageIdentifier.iMessageIdentifier,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//Serialnumber
if (s_KillMessage->p_OldSerialnumber.bFlag==1)
{
len=Pack_SerialNumber(s_KillMessage->p_OldSerialnumber.iSerialNumber,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//p_CellList
if (s_KillMessage->p_CellList.bFlag==1)
{
len=Pack_CELLLIST(&s_KillMessage->p_CellList,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//ChannelIndicator (O)
if (s_KillMessage->p_ChannelIndicator.bFlag==1)
{
len=Pack_CHANNELINDICATOR(s_KillMessage->p_ChannelIndicator.cChannelIndicator, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
/*
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括KillMessage sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=0x30;
*/
//
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括KillMessage 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_KILL_MESSAGE;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return Offset+lentmp;
}
//打包STATUS_CBCH_QUERY操作元素
//返回包长 ERROR -1
int Pack_STATUS_CBCH_QUERY(STATUSCBCH_REQ_t *s_StatusCbchReq,unsigned char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; //长度字段打包缓冲区
unsigned char Buf[20]; //2Tag,2Len打包缓冲区
int i=20; //反向偏移指针
unsigned char PackBuf[2048];//打包缓冲区
int Offset=0; //PackBuf偏移指针
//p_CellList
if (s_StatusCbchReq->p_CellList.bFlag==1)
{
len=Pack_CELLLIST(&s_StatusCbchReq->p_CellList,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//ChannelIndicator (O)
if (s_StatusCbchReq->p_ChannelIndicator.bFlag==1)
{
len=Pack_CHANNELINDICATOR(s_StatusCbchReq->p_ChannelIndicator.cChannelIndicator, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括WriteReplace sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=CBSE_STATUS_CBCH_QUERY;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return Offset+lentmp;
/*
//以下2 tag,2 len 打包
//
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括KillMessage sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=0x30;
//
lentmp=CovertASN1LEN(len,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括KillMessage 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_STATUS_CBCH_QUERY;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return len;
*/
}
//打包cbse_STATUS_MESSAGE_QUERY操作元素
//返回包长 ERROR -1
int Pack_STATUS_MESSAGE_QUERY(STATUSMESSAGE_QUERY_t *s_StatusMessageQuery,unsigned char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; //长度字段打包缓冲区
unsigned char Buf[20]; //2Tag,2Len打包缓冲区
int i=20; //反向偏移指针
unsigned char PackBuf[2048];//打包缓冲区
int Offset=0; //PackBuf偏移指针
memset(PackBuf,0,2048);
//MessageIdentifier
if (s_StatusMessageQuery->p_MessageIdentifier.bFlag==1)
{
len=Pack_MessageIdentifier(s_StatusMessageQuery->p_MessageIdentifier.iMessageIdentifier,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//Serialnumber
if (s_StatusMessageQuery->p_CurrentSerialnumber.bFlag==1)
{
len=Pack_SerialNumber(s_StatusMessageQuery->p_CurrentSerialnumber.iSerialNumber,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//p_CellList
if (s_StatusMessageQuery->p_CellList.bFlag==1)
{
len=Pack_CELLLIST(&s_StatusMessageQuery->p_CellList,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//ChannelIndicator (O)
if (s_StatusMessageQuery->p_ChannelIndicator.bFlag==1)
{
len=Pack_CHANNELINDICATOR(s_StatusMessageQuery->p_ChannelIndicator.cChannelIndicator, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
/*
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括KillMessage sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=0x30;
*/
//
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括KillMessage 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_STATUS_MESSAGE_QUERY;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return Offset+lentmp;
}
//打包cbse_BSC_RESTART操作元素
//返回包长 ERROR -1
int Pack_BSC_RESTART(BSCRESTART_t *s_BscRestart,unsigned char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; //长度字段打包缓冲区
unsigned char Buf[20]; //2Tag,2Len打包缓冲区
int i=20; //反向偏移指针
unsigned char PackBuf[2048];//打包缓冲区
int Offset=0; //PackBuf偏移指针
//p_CellList
if (s_BscRestart->p_CellList.bFlag==1)
{
len=Pack_CELLLIST(&s_BscRestart->p_CellList,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
if (s_BscRestart->p_RecoveryIndication.bFlag==1)
{
len=Pack_RecoveryIndication(&s_BscRestart->p_RecoveryIndication, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//以下2 tag,2 len 打包
//
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括KillMessage sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=0x30;
//
lentmp=CovertASN1LEN(len,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括KillMessage 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_BSC_RESTART;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return len;
}
//打包cbse_SET_DRX操作元素
//返回包长 ERROR -1
int Pack_SET_DRX(SET_DRX_t *s_SetDRX,unsigned char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; //长度字段打包缓冲区
unsigned char Buf[20]; //2Tag,2Len打包缓冲区
int i=20; //反向偏移指针
unsigned char PackBuf[2048];//打包缓冲区
int Offset=0; //PackBuf偏移指针
//p_CellList
if (s_SetDRX->p_CellList.bFlag==1)
{
len=Pack_CELLLIST(&s_SetDRX->p_CellList,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}else
return FAILURE;
//SchedulePeriod
if (s_SetDRX->p_SchedulePeriod.bFlag==1)
{
len=Pack_SCHEDULEPERIOD(s_SetDRX->p_SchedulePeriod.cSchedulePeriod, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//ReservedSlots
if (s_SetDRX->p_ReservedSlots.bFlag==1)
{
len=Pack_RESERVEDSLOTS(s_SetDRX->p_ReservedSlots.cReservedSlots, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//ChannelIndicator (O)
if (s_SetDRX->p_ChannelIndicator.bFlag==1)
{
len=Pack_CHANNELINDICATOR(s_SetDRX->p_ChannelIndicator.cChannelIndicator, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
//以下2 tag,2 len 打包
//
lentmp=CovertASN1LEN(Offset,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=Offset+lentmp+1;//包括KillMessage sequence标签的整个包长
i=i-lentmp; //len
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--; //tag
Buf[i]=0x30;
//
lentmp=CovertASN1LEN(len,&LenBuf[0]);
if (lentmp==FAILURE)
return FAILURE;
len=len+lentmp+1;//包括KillMessage 上下文标签的整个包长
i=i-lentmp;
memcpy(&Buf[i],&LenBuf[0],lentmp);
i--;
Buf[i]=CBSE_BSC_RESTART;
lentmp=20-i;
memcpy(ptr,&Buf[i],lentmp);
memcpy((ptr+lentmp),&PackBuf[0],Offset);
return len;
}
/******************************
和邦定有关的打解包
******************************/
/* Operate
* 返回偏移量 Error -1
*/
int pack_BIND_Operate(OPERATOR_t *s_Operator,char *ptr)
{
unsigned char Buf[30];
int len;
if (s_Operator->clength>20)
return FAILURE;
Buf[0]=0x80;/* 上下文类 */
Buf[1]=s_Operator->clength;
memcpy(&Buf[2],&s_Operator->cOperator[0],s_Operator->clength);
len=Buf[1]+2;
memcpy(ptr,&Buf[0],len);
return len;
}
/* BilateralAgreem
* 返回偏移量 Error -1
*/
int pack_BilateralAgreem(BILATERALAGREEM_t *s_BilateralAgreem, char *ptr)
{
unsigned char Buf[30];
int len;
if (s_BilateralAgreem->clength>20)
return FAILURE;
Buf[0]=0x81;/* 上下文类 */
Buf[1]=s_BilateralAgreem->clength;
memcpy(&Buf[2],&s_BilateralAgreem->cBilateralAgreem[0],s_BilateralAgreem->clength);
len=Buf[1]+2;
memcpy(ptr,&Buf[0],len);
return len;
}
/* DataNetworkAddress */
int pack_DataNetworkAddress(X121ADDRESS_t *s_X121Address,char *ptr)
{
unsigned char Buf[30];
int len;
if (s_X121Address->clength>15)
return FAILURE;
Buf[0]=0x82;/* 上下文类 */
Buf[1]=s_X121Address->clength;
memcpy(&Buf[2],&s_X121Address->cXl2lAddress[0],s_X121Address->clength);
len=Buf[1]+2;
memcpy(ptr,&Buf[0],len);
return len;
}
//Name
//返回偏移量 Error -1
int pack_Name(NAME_t *s_Name, char *ptr)
{
int len;
int lentmp;
unsigned char LenBuf[10]; /* 长度字段打包缓冲区 */
unsigned char Buf[20]; /* 2Tag,2Len打包缓冲区 */
int i=20; /* 反向偏移指针 */
unsigned char PackBuf[2048];/* 打包缓冲区 */
int Offset=0; /* PackBuf偏移指针 */
/* s_Operate */
if (s_Name->s_Operate.bFlag==1)
{
len=pack_BIND_Operate(&s_Name->s_Operate,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
/* BilateralAgreem */
if (s_Name->s_BilateralAgreem.bFlag==1)
{
len=pack_BilateralAgreem(&s_Name->s_BilateralAgreem, &PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
/* Xl2lAddress */
if (s_Name->s_DataNetWorkAddress.bFlag==1)
{
len=pack_DataNetworkAddress(&s_Name->s_DataNetWorkAddress,&PackBuf[Offset]);
if (len==FAILURE)
return FAILURE;
Offset=Offset+len;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -