📄 cdmatcap.c
字号:
#include "stdlib.h"#include "asn1.h"#include "CDMA_ext.h"#include "CDMAtcap.h"#include "ss7Msg.h"#include "simslog.h"#include "CDMA_tcap_def.c"#include "CDMA_tcap_def.h"#include "CDMA_map_def.c"#include "CDMA_map_def.h"#include "CDMA_pos.h"int DecodeOperationEle(unsigned char *msgbuf, int msglen, int *msgptr, TYPE_DECODE_DEF *typeDecodeDef, ELEMENT_DEF *elementDef, DECODED_ELEMENT *decodedMsg, DECODE_CONTEXT *context, int *curPos){ context->op = decodedMsg[*curPos].u.strVal[1]; return 0;}int DecodeOpArgList(unsigned char *msgbuf, int msglen, int *msgptr, TYPE_DECODE_DEF *typeDecodeDef, ELEMENT_DEF *elementDef, DECODED_ELEMENT *decodedMsg, DECODE_CONTEXT *context, int *curPos, ARG_LIST *argList){ for (; argList->op != END_PARA; argList++) { if (argList->op == context->op) { if(!argList->opArgs) { return -1; } else { /* the following is modified by fanyonggang */ if( argList->opArgs->type == -1 ) { return 0;} else return typeDecodeDef[argList->opArgs->type].decodeFunc(msgbuf, msglen, msgptr, typeDecodeDef, argList->opArgs, decodedUsrPartMsg, context, &usrPartcurPos); } } } return 0;}/* 解码函数:Invoke类型Op的Parameter,是一个ANY类型,DEPENDS ON Operation和SSN */int DecodeCdmaInvokeParameterEle (unsigned char *msgbuf, int msglen, int *msgptr, TYPE_DECODE_DEF *typeDecodeDef, ELEMENT_DEF *elementDef, DECODED_ELEMENT *decodedMsg, DECODE_CONTEXT *context, int *curPos){ int result; int pos=0; TYPE_DECODE_DEF cdmaTypeDecodeDef[]= { CDMA_EXT_TYPE_DECODE_DEF}; int ormsgptr = *msgptr; pos = posIndex[CDMA_POS_OPCODE]; if(pos <= 0) return 0; DecodeOperationEle(msgbuf, msglen, &ormsgptr, typeDecodeDef, elementDef, decodedMsg, context, &pos); result = DecodeOpArgList(msgbuf, msglen, msgptr, cdmaTypeDecodeDef, elementDef, decodedTCAPMsg, context, curPos, CDMA_REQ_OP_ARRAY); return 1;}/* 解码函数:Result类型Op的Parameter,是一个ANY类型,DEPENDS ON Operation和SSN */int DecodeCdmaResultParameterEle (unsigned char *msgbuf, int msglen, int *msgptr, TYPE_DECODE_DEF *typeDecodeDef, ELEMENT_DEF *elementDef, DECODED_ELEMENT *decodedMsg, DECODE_CONTEXT *context, int *curPos){ TYPE_DECODE_DEF cdmaTypeDecodeDef[]= { CDMA_EXT_TYPE_DECODE_DEF}; return DecodeChoiceEle (msgbuf, msglen, msgptr, cdmaTypeDecodeDef, CDMA_Reponse_Param_Arg, decodedUsrPartMsg, context, &usrPartcurPos); }/* * @ func: DecodeTcapMsg * @ note: decodedTCAPMsg 和 decodedMapMsg 中 第一个位置(即索引号为0的地方用于解码无此参数指针项) * @ param: context 解码上下文,其中的参数来自SCCP层解码结果 * @ param: msgbuf 原始信令存储位置指针 * @ param: msglen 原始信令MSU长度 * @ param: msgptr 当前解码位置指针 * @ return: 1为正常, 其他异常 */ int DecodeCdmaTcapMsg(unsigned char *msgbuf, int msglen, int *msgptr, DECODE_CONTEXT *context){ int i, ret; TYPE_DECODE_DEF CdmaTcapTypeDecodeDef[] = { CDMA_TCAP_TYPE_DECODE_DEF } ; for(i=0;i<MAX_POS_INDEX;i++) posIndex[i]=0; tcapcurPos=1; usrPartcurPos=1; ret = DecodeASN1(msgbuf, msglen, msgptr, CdmaTcapTypeDecodeDef, cdma_tcap_ElementDef, decodedTCAPMsg, context, &tcapcurPos) ; return ret; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -