📄 gbptl.cpp
字号:
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_IMSI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(DRX!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_DRX_PARAMETERS,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=8;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case TLLI:
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case BVCIIE:
ptr=SaveIE(ptr,IE_BSSGP_BVCIIE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case LOCATION:
ptr=SaveIE(ptr,IE_BSSGP_LOCATION_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case ROUTEING:
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case BSSAREAINDICATION:
ptr=SaveIE(ptr,IE_BSSGP_BSS_AREA_INDICATION,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case CHANNELNEEDED:
ptr=SaveIE(ptr,IE_BSSGP_CHANNEL_NEEDED,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case EMLPP:
ptr=SaveIE(ptr,IE_BSSGP_EMLPP_PRIORITY,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case TMSI:
ptr=SaveIE(ptr,IE_BSSGP_TMSI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
default:
goto END;
}
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RACAPABILITYUPDATEDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RACAPABILITYUPDATEACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=3;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case IMSI:
ptr=SaveIE(ptr,IE_BSSGP_IMSI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case RACAPUPDCAUSE:
ptr=SaveIE(ptr,IE_BSSGP_RA_CAP_UPD_CAUSE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case MSRADIOACCESSCAPABILITY:
ptr=SaveIE(ptr,IE_BSSGP_MS_RADIO_ACCESS,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
default:
goto END;
}
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RADIOSTATUSDecode(UINT8 *ptr, UINT16 len)
{
UINT8 i=4;
UINT8*p=ptr;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case TLLI:
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case TMSI:
ptr=SaveIE(ptr,IE_BSSGP_TMSI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case IMSI:
ptr=SaveIE(ptr,IE_BSSGP_IMSI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case RADIOCAUSE:
ptr=SaveIE(ptr,IE_BSSGP_RADIO_CAUSE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
default:
goto END;
}
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::SUSPENDDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::SUSPENDACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(SUSPENDREFERENCENUMBER!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_SUSPEND_REFERENCE_NUMBER,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::SUSPENDNACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NS_CAUSE==*ptr)
ptr=SaveIE(ptr,IE_BSSGP_CAUSE,len-(ptr-p));
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RESUMEDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(SUSPENDREFERENCENUMBER!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_SUSPEND_REFERENCE_NUMBER,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RESUMEACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::RESUMENACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(ROUTEING!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_ROUTEING_AREA,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NS_CAUSE==*ptr)
ptr=SaveIE(ptr,IE_BSSGP_CAUSE,len-(ptr-p));
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::FLUSHLLDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_OLD_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BVCIIE==*ptr)
ptr=SaveIE(ptr,IE_BSSGP_BVCIIE,len-(ptr-p));
return CGBPdu_SUCCESS;
}
char CGBPdu::FLUSHLLACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(FLUSHACTION!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_FLUSH_ACTION,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BVCIIE==*ptr)
ptr=SaveIE(ptr,IE_BSSGP_BVCIIE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NUMBEROFOCTETSAFFECTED!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_NUMBER_OF_OCTETS_AFFECTED,len-(ptr-p));
return CGBPdu_SUCCESS;
}
char CGBPdu::LLCDISCARDEDDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(LLCFRAMESDISCARDED!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_LLC_FRAMES_DISCARDED,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_BVCIIE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NUMBEROFOCTETSAFFECTED!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_NUMBER_OF_OCTETS_AFFECTED,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::FLOWCONTROLBVCDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BVCBUCKETSIZE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_BVC_BUCKET_SIZE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BUCKETLEAKRATE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_BUCKET_LEAK_RATE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BMAXDEFAULTMS!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_BMAX_DEFAULT_MS,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(RDEFAULTMS!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_R_DEFAULT_MS,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=2;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case BUCKETFULLRATIO:
ptr=SaveIE(ptr,IE_BSSGP_BUCKET_FULL_RATIO,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case BVCMEASUREMENT:
ptr=SaveIE(ptr,IE_BSSGP_BVC_MEASUREMENT,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
default:
goto END;
}
if(LENGTH)
return CGBPdu_ERROR_INVLID;
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::FLOWCONTROLBVCACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::FLOWCONTROLMSDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(MSBUCKET!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_MS_BUCKET_SIZE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BUCKETLEAKRATE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_BUCKET_LEAK_RATE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(BUCKETFULLRATIO==*ptr)
ptr=SaveIE(ptr,IE_BSSGP_BUCKET_FULL_RATIO,len-(ptr-p));
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::FLOWCONTROLMSACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(TLLI!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CUR_TLLI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(TAG!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_TAG,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCBLOCKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NS_CAUSE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CAUSE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCBLOCKACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCUNBLOCKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCUNBLOCKACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCRESETDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
if(NS_CAUSE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CAUSE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=2;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case CGI:
ptr=SaveIE(ptr,IE_BSSGP_CGI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
break;
case FEATUREBITMAP:
ptr=SaveIE(ptr,IE_BSSGP_FEATURE_BITMAP,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
default:
goto END;
}
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::BVCRESETACKDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(BVCIIE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_NS_BVCI,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=2;
while(i--)
{
if(LENGTH)
goto END;
switch(*ptr)
{
case CGI:
ptr=SaveIE(ptr,IE_BSSGP_CGI,len-(ptr-p));
if(!ptr)
goto END;
break;
case FEATUREBITMAP:
ptr=SaveIE(ptr,IE_BSSGP_FEATURE_BITMAP,len-(ptr-p));
default:
goto END;
}
}
END:
AssembleLeng=ptr-Frame;
return CGBPdu_SUCCESS;
}
char CGBPdu::STATUSDecode(UINT8 *ptr, UINT16 len)
{
UINT8*p=ptr;
if(NS_CAUSE!=*ptr)
return CGBPdu_ERROR_INVLID;
ptr=SaveIE(ptr,IE_BSSGP_CAUSE,len-(ptr-p));
if(!ptr)
return CGBPdu_ERROR_SHORT;
UINT8 i=2;
while(i--)
{
if(LENGTH)
return CGBPdu_SUCCESS;
switch(*ptr)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -