📄 cbcbscunpack.c
字号:
case 1://FAILURELIST:
UnPackPara_FAILURELIST(handle);
break;
case 4://CHANNELINDICATOR:
UnpackPara_CHANNELINDICATOR(handle);
break;
}
if (SolidUnPackSkipBODY(handle)==0)
break;
}
*/
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
int UnPack_CBCHLoading(int handle,CBCLOADINGSTATUS_t *s_CBCLOADINGSTATUS)
{
char* para_body;
int len;
// if (SolidUnPackFORWARD(handle)==0)
// return FAILURE;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
/* 深入到Cell节点 */
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
/* CellIdDisc */
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_DISC_LEN)
return FAILURE;
#endif
memcpy(&s_CBCLOADINGSTATUS->s_Cellid.cCellIdDisc,para_body,len);
/* CellId */
SolidUnPackSkipBODY(handle);
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_LEN)
return FAILURE;
#endif
memcpy(&s_CBCLOADINGSTATUS->s_Cellid.cCellId,para_body,len);
/* 得到完成次数 */
SolidUnPackBACKWARD(handle);
SolidUnPackSkipBODY(handle);
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>INTEGERTYPE_LEN)
return FAILURE;
#endif
s_CBCLOADINGSTATUS->cCbcLoading=ConvertASN1INTEGERToint(para_body,len);
/* 退回 */
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
/* 解CBCHLoadingList操作参数 */
int UnPackPara_CBCHLoadingList(int handle)
{
int i=0;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
for(;;)
{
if(UnPack_CBCHLoading(handle,&CBCBSC_Unpack.p_CBCLOADINGSTATUSList.s_CbcLoadingStatus[i])==FAILURE)
{
SolidUnPackBACKWARD(handle);
return FAILURE;
}
i++;
if (SolidUnPackSkipBODY(handle)==0)
break;
}
if (i>0)
{
CBCBSC_Unpack.p_CBCLOADINGSTATUSList.bFlag=1;
CBCBSC_Unpack.p_CBCLOADINGSTATUSList.iLength=i;
}
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
//将ASN1标准转为int
int ConvertASN1INTEGERToint(unsigned char *ptr,int len)
{
signed char i1;
signed short i2;
int i3;
unsigned char tem;
switch (len)
{
case 1:
memcpy(&i1,ptr,len);
return i1;
break;
case 2:
i2=(*ptr)*256+*(ptr+1);
memcpy(&i2,ptr,len);
return i2;
break;
case 3:
tem=*ptr;
if (tem>127)
return FAILURE;
i3=(*(ptr+1))*256+(*(ptr+2))+tem*65536;
return i3;
break;
}
return FAILURE;
}
//解操作cbse_BSC_RESTART参数
int UnPackcbse_BSC_RESTART(int handle)
{
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
Unpack_UplinkCellList(handle);
if (SolidUnPackSkipBODY(handle)==0)
return SUCCESS;
Unpack_RecoveryIndication(handle);
return SUCCESS;
}
//CellList参数
int Unpack_CellList(int handle)
{
char* para_body;
int len;
int i;
// if (SolidUnPackFORWARD(handle)==0)
// return FAILURE;
//深入到length节点
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_CELLLIST.iLength=ConvertASN1INTEGERToint(para_body,len);
//移到disc节点
if (SolidUnPackSkipBODY(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_DISC_LEN)
return FAILURE;
#endif
memcpy(&CBCBSC_Unpack.p_CELLLIST.cCellIdDisc,para_body,len);
//移到list节点
if (SolidUnPackSkipBODY(handle)==0)
return FAILURE;
//深入List序列
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
for(i=0;i<CBCBSC_Unpack.p_CELLLIST.iLength;i++)
{
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_LEN)
return FAILURE;
#endif
memcpy(&CBCBSC_Unpack.p_CELLLIST.s_CellList[i],para_body,len);
SolidUnPackSkipBODY(handle);
}
/* 退回到CellList节点 */
SolidUnPackBACKWARD(handle);
SolidUnPackBACKWARD(handle);
// SolidUnPackBACKWARD(handle);
CBCBSC_Unpack.p_CELLLIST.bFlag=1;
return SUCCESS;
}
//上行CellList参数,主要是Restart,Failure
int Unpack_UplinkCellList(int handle)
{
char* para_body;
int len;
int i;
// if (SolidUnPackFORWARD(handle)==0)
// return FAILURE;
//深入到length节点
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_UplinkCellList.iLength=ConvertASN1INTEGERToint(para_body,len);
//移到disc节点
if (SolidUnPackSkipBODY(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_DISC_LEN)
return FAILURE;
#endif
memcpy(&CBCBSC_Unpack.p_UplinkCellList.cCellIdDisc,para_body,len);
//移到list节点
if (SolidUnPackSkipBODY(handle)==0)
return FAILURE;
//深入List序列
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
for(i=0;i<CBCBSC_Unpack.p_UplinkCellList.iLength;i++)
{
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_LEN)
return FAILURE;
#endif
memcpy(&CBCBSC_Unpack.p_UplinkCellList.s_CellList[i],para_body,len);
SolidUnPackSkipBODY(handle);
}
/* 退回到CellList节点 */
SolidUnPackBACKWARD(handle);
SolidUnPackBACKWARD(handle);
// SolidUnPackBACKWARD(handle);
CBCBSC_Unpack.p_UplinkCellList.bFlag=1;
return SUCCESS;
}
/* RecoveryIndication参数 */
int Unpack_RecoveryIndication(int handle)
{
char* para_body;
int len;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_RECOVERYINDICATION.bRecoveryIndicator=*para_body;
CBCBSC_Unpack.p_RECOVERYINDICATION.bFlag=1;
return SUCCESS;
}
//解cbse_RESET操作参数
int UnPackcbse_RESET(int handle)
{
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
return Unpack_CellList(handle);
}
/* 解cbse_FAILURE_IND操作参数 */
int UnPackcbse_FAILURE_IND(int handle)
{
//深入到Sequence
// if (SolidUnPackFORWARD(handle)==0)
// return FAILURE;
//深入到cell-list Sequence
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
return Unpack_UplinkCellList(handle);
}
int Unpack_Cell(int handle,CELL_t *s_Cell)
{
char* para_body;
int len;
//深入到Cell节点
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len!=CELLID_DISC_LEN)
SolidUnPackBACKWARD(handle);
return FAILURE;
#endif
memcpy(&s_Cell->cCellIdDisc,para_body,len);
SolidUnPackSkipBODY(handle);
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>CELLID_LEN)
SolidUnPackBACKWARD(handle);
return FAILURE;
#endif
memcpy(&s_Cell->cCellId[0],para_body,len);
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
//解包小区序列参数
int Unpack_SequenceOfCell(int handle)
{
// char* para_body;
// int len;
//深入到Sequence节点
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
CBCBSC_Unpack.p_SequenceOfCell.iLength=0;
for(;;)
{
Unpack_Cell(handle,&CBCBSC_Unpack.p_SequenceOfCell.s_Cell[CBCBSC_Unpack.p_SequenceOfCell.iLength]);
CBCBSC_Unpack.p_SequenceOfCell.iLength++;
if (SolidUnPackSkipBODY(handle)==0)
break;
}
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
//解cbse_SET_DRX_REPORT操作参数
int UnPackcbse_SET_DRX_REPORT(int handle)
{
int ParaMeterTag;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
//深入到参数序列
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
for(;;)
{
ParaMeterTag=SolidUnPackGetID(handle);
if (ParaMeterTag<0)
return FAILURE;
switch (ParaMeterTag)
{
case 0://CellList(O)小区的序列
Unpack_SequenceOfCell(handle);
break;
case 1://FAILURELIST: (O)
UnPackPara_FAILURELIST(handle);
break;
case 4://CHANNELINDICATOR: (O)
UnpackPara_CHANNELINDICATOR(handle);
break;
}
if (SolidUnPackSkipBODY(handle)==0)
break;
}
return SUCCESS;
}
//解包邦定参数Name
int Unpack_NAME(int handle)
{
int ParaMeterTag;
/*
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
*/
//深入到参数序列
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
for(;;)
{
ParaMeterTag=SolidUnPackGetID(handle);
if (ParaMeterTag<0)
return FAILURE;
switch (ParaMeterTag)
{
case 0x0://operator
UnpackPara_Operator(handle);
break;
case 0x1://bilateralAgreem
UnpackPara_BilateralAgreem(handle);
break;
case 0x2: //dataNetworkAddress
UnpackPara_DataNetworkAddress(handle);
break;
case 0x3: //iSDNAddress
// UnpackPara_ISDNAddress(handle);
break;
}
if (SolidUnPackSkipBODY(handle)==0)
break;
}
// SolidUnPackBACKWARD(handle);
// SolidUnPackBACKWARD(handle);
SolidUnPackBACKWARD(handle);
return SUCCESS;
}
//解NAME参数的子参数 Operator
int UnpackPara_Operator(int handle)
{
char* para_body;
int len;
// if (SolidUnPackFORWARD(handle)==0)
// return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>OPERTOR_LEN)
return FAILURE;
#endif
memcpy(&CBCBSC_Unpack.p_Name.s_Operate.cOperator,para_body,len);
CBCBSC_Unpack.p_Name.s_Operate.clength=len;
CBCBSC_Unpack.p_Name.s_Operate.bFlag=1;
return SUCCESS;
}
//解NAME参数的子参数 BilateralAgreem
int UnpackPara_BilateralAgreem(int handle)
{
char* para_body;
int len;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>BILATERAL_AGREEM_LEN)
return FAILURE;
#endif
CBCBSC_Unpack.p_Name.s_BilateralAgreem.clength=len;
memcpy(&CBCBSC_Unpack.p_Name.s_BilateralAgreem.cBilateralAgreem,para_body,len);
CBCBSC_Unpack.p_Name.s_BilateralAgreem.bFlag=1;
return SUCCESS;
}
//解NAME参数的子参数 DataNetworkAddress
int UnpackPara_DataNetworkAddress(int handle)
{
char* para_body;
int len;
if (SolidUnPackFORWARD(handle)==0)
return FAILURE;
para_body=SolidUnPackGetBODY(handle);
len=SolidUnPackGetLEN(handle);
#ifdef CHECKLEN
if (len>Xl2lADDRESS_LEN)
return FAILURE;
#endif
CBCBSC_Unpack.p_Name.s_DataNetWorkAddress.clength=len;
memcpy(&CBCBSC_Unpack.p_Name.s_DataNetWorkAddress.cXl2lAddress,para_body,len);
CBCBSC_Unpack.p_Name.s_DataNetWorkAddress.bFlag=1;
return SUCCESS;
}
//解参数NoofPages
int UnPackPara_NO_OF_PAGES(int handle)
{
char* para_body;
int len;
//深入和回退对应
para_body=SolidUnPackGetBODY(handle);
if (para_body==NULL)
{
return FAILURE;
}
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_NoOfPages.cNumberOfPages=
ConvertASN1INTEGERToint(para_body,len);
CBCBSC_Unpack.p_NoOfPages.bFlag=1;
return SUCCESS;
}
//解参数DataCodingScheme
int UnPackPara_DATA_CODING_SCHEME(int handle)
{
char* para_body;
int len;
//深入和回退对应
para_body=SolidUnPackGetBODY(handle);
if (para_body==NULL)
{
return FAILURE;
}
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_DataCodingScheme.cDataCodingScheme=
ConvertASN1INTEGERToint(para_body,len);
CBCBSC_Unpack.p_DataCodingScheme.bFlag=1;
return SUCCESS;
}
//解参数RepitionRate
int UnPackPara_REPETITION_RATE(int handle)
{
char* para_body;
int len;
//深入和回退对应
para_body=SolidUnPackGetBODY(handle);
if (para_body==NULL)
{
return FAILURE;
}
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_RepetitionRate.iRepetitionRate=
ConvertASN1INTEGERToint(para_body,len);
CBCBSC_Unpack.p_RepetitionRate.bFlag=1;
return SUCCESS;
}
//解参数NoOfBroadcastReq
int UnPackPara_NO_OF_BROADCAST_REQ(int handle)
{
char* para_body;
int len;
//深入和回退对应
para_body=SolidUnPackGetBODY(handle);
if (para_body==NULL)
{
return FAILURE;
}
len=SolidUnPackGetLEN(handle);
CBCBSC_Unpack.p_NoOfBroadcastReq.iNumberOfBroadcastReq=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -