UDPHeader::UDPHeader(int sourcePort, int destinationPort) { SetSourcePort (sourcePort); SetDestinationPort (destinationPort); SetProtocolHeader (Header::HEADER_UDP); SetHeaderSize (8); SetProtocolType (TransportProtocol::TRANSPORT_PROTOCOL_TYPE_UDP); }
int CRANAPptl::parse(unsigned char* pdata, int len) { if(NULL == pdata || len < 4) return -1; int iRet = 0; asnContext context; //////////////////////// //activate Trace Management and create a traceStream (optional) //context.setEncodingTraceWhileEncoding(asnTRUE); //context.setValueTraceWhileDecoding(asnTRUE); //asnFileStream traceStream("traces.txt", // file name // asnFSTREAM_TXT_WRITE );// write text stream //context.setTraceStream(&traceStream); //////////////////////// SetProtocolType(MOD_RANAP); try { asnMemoryStream instream(pdata, len,asnFSTREAM_WRITE); // decode the decoding stream into myDecodedValue RANAP_PDU pdu; asnMAXUINT iDecoded = pdu.PERdecode(&context, &instream); // here pdu contains the decoded value SetPrimitiveType(pdu.value->alternative); switch(pdu.value->alternative) { case RANAP_TRIGGERMSG_INITIAL:// 0 InitiatingMessage { asncinitiatingMessage *initMsg = (asncinitiatingMessage *)(pdu.value); SetMessageType(initMsg->procedureCode); switch(initMsg->procedureCode) { case RANAP_DirectTransfer:// 20 DirectInformationTransfer parseDirectTransfer(&context, (asnOpenType*)(initMsg->value)); break; case RANAP_Paging:// 14 id-Paging parsePaging(&context, (asnOpenType*)(initMsg->value)); break; case RANAP_CommonID:// 15 id-CommonID parseCommonID(&context, (asnOpenType*)(initMsg->value)); break; case RANAP_InitialUE_Message:// 19 id-InitialUE-Message parseInitialUEMessage(&context, (asnOpenType*)(initMsg->value)); break; case RANAP_RAB_ASSIGNMENT:// 0 id-RAB-Assignment parseRABAssignment(&context, (asnOpenType*)(initMsg->value)); break; case RANAP_Iu_RELEASE:// 1 id-Iu-Release parseIuRelease(&context, (asnOpenType*)(initMsg->value)); break; default: break; } } break; case RANAP_TRIGGERMSG_SUCCESS:// 1 SuccessfulOutcome { asncsuccessfulOutcome *pSuccess = (asncsuccessfulOutcome *)pdu.value; SetMessageType(pSuccess->procedureCode); switch(pSuccess->procedureCode) { case RANAP_Iu_RELEASE:// 1 id-Iu-Release parseIuReleaseComplete(&context, (asnOpenType*)(pSuccess->value)); break; default: break; } } break; case RANAP_TRIGGERMSG_UNSUCCESS:// 2 UnsuccessfulOutcome { asncunsuccessfulOutcome *pUnSuccess = (asncunsuccessfulOutcome*)(pdu.value); SetMessageType(pUnSuccess->procedureCode); } break; case RANAP_TRIGGERMSG_OUTCOME:// 3 Outcome { asncRANAP_PDU__outcome *pOutcome = (asncRANAP_PDU__outcome *)pdu.value; SetMessageType(pOutcome->procedureCode); switch(pOutcome->procedureCode) { case RANAP_RAB_ASSIGNMENT:// 0 id-RAB-Assignment parseRABAssignmentOutCome(&context, (asnOpenType*)(pOutcome->value)); break; default: break; } } break; default: printf("choice: %hd\n", pdu.value->alternative); break; } } catch(asnException& e) { iRet = -1; SetProtocolType(SV_CHINA_SCCP); SetPrimitiveType(0); SetMessageType(0); //Print("RANAP parser catch exception: %s - %s - %hd\n", context.getErrorLocation(), e.getLocation(), e.errorCode); } return iRet; }
int CRANAPptl::parse(unsigned char* pdata, int len) { int iRet = 0; //@zh 20100820 bug fixed if(NULL == pdata || len < 4) return -1; SetProtocolType(MOD_RANAP); // Buffer* buffer = wrapBuffer((char*)(&pdata[0]), len, ALIGNED_PACKED_ENCODING_RULES); if(buffer!=NULL) { struct RANAP_PDU pdu = {0}; //@zh 20100824 bug fixed //解码程序会修改源数据 pdata ??? iRet = decode_RANAP_PDU(buffer, &pdu); if(iRet==0) { //print_RANAP_PDU(&pdu, printf); //printf("\n"); SetPrimitiveType(pdu.choice); //@zh 20100820 bug fixed switch(pdu.choice) { case RANAP_PDU_initiatingMessage_chosen: { struct InitiatingMessage* pInitiatingMessage = &pdu.value.initiatingMessage; SetMessageType(pInitiatingMessage->procedureCode); //@zh 20100820 bug fixed switch(pInitiatingMessage->procedureCode) { case RANAP_RAB_ASSIGNMENT :// 0 { struct RAB_AssignmentRequest* pRAB_AssignmentRequest = &pInitiatingMessage->value.rAB_AssignmentRequest; iRet = parseRABAssignment(pRAB_AssignmentRequest); } break; case RANAP_Iu_RELEASE :// 1 { struct Iu_ReleaseCommand* pIu_ReleaseCommand = &pInitiatingMessage->value.iu_ReleaseCommand; iRet = parseIuRelease(pIu_ReleaseCommand); } break; case RANAP_RelocationPreparation :// 2 break; case RANAP_RelocationResAllocation :// 3 break; case RANAP_RelocationCancel :// 4 break; case RANAP_SRNS_ContextTransfer :// 5 break; case RANAP_SecurityNodeControl ://6 break; case RANAP_DataVolumeReport ://7 break; case RANAP_Reset ://9 break; case RANAP_RAB_ReleaseRequest ://10 break; case RANAP_Iu_ReleaseRequest ://11 break; case RANAP_RelocationDetect ://12 break; case RANAP_RelocationComplete ://13 break; case RANAP_Paging ://14 { struct Paging* pPaging = &pInitiatingMessage->value.paging; iRet = parsePaging(pPaging); } break; case RANAP_CommonID ://15 { struct CommonID* pCommonID = &pInitiatingMessage->value.commonID; iRet = parseCommonID(pCommonID); } break; case RANAP_CN_InvokeTrace ://16 break; case RANAP_LocationReportingControl ://17 break; case RANAP_LocationReport ://18 break; case RANAP_InitialUE_Message ://19 { struct InitialUE_Message* pInitialUE_Message = &pInitiatingMessage->value.initialUE_Message; iRet = parseInitialUEMessage(pInitialUE_Message); } break; case RANAP_DirectTransfer ://20 { struct DirectTransfer* pDirectTransfer = &pInitiatingMessage->value.directTransfer; iRet = parseDirectTransfer(pDirectTransfer); } break; case RANAP_OverloadControl ://21 break; case RANAP_ErrorIndication ://22 break; case RANAP_SRNS_DataForward ://23 break; case RANAP_ForwardSRNS_Context ://24 break; case RANAP_privateMessage ://25 break; case RANAP_CN_DeactivateTrace ://26 break; case RANAP_ResetResource ://27 break; case RANAP_Relocation ://28 break; case RANAP_RAB_ModifyRequest ://29 break; case RANAP_LocationRelatedData ://30 break; case RANAP_InformationTransfer ://31 break; case RANAP_UESpecificInformation ://32 break; case RANAP_UplinkInformationExchange ://33 break; case RANAP_DirectInformationTransfer ://34 break; case RANAP_MBMSSessionStart ://35 break; case RANAP_MBMSSessionUpdate ://36 break; case RANAP_MBMSSessionStop ://37 break; case RANAP_MBMSUELinking ://38 break; case RANAP_MBMSRegistration ://39 break; case RANAP_MBMSCNDe_Registration_Procedure ://40 break; case RANAP_MBMSRABEstablishmentIndication ://41 break; case RANAP_MBMSRABRelease ://42 break; case RANAP_enhancedRelocationComplete ://43 break; case RANAP_enhancedRelocationCompleteConfirm ://44 break; case RANAP_enhancedRelocation ://45 break; case RANAP_SRVCCPreparation ://46 break; default: break; } } break; case RANAP_PDU_successfulOutcome_chosen: { struct SuccessfulOutcome* pSuccessfulOutcome = &pdu.value.successfulOutcome; SetMessageType(pSuccessfulOutcome->procedureCode); //@zh 20100820 bug fixed switch(pSuccessfulOutcome->procedureCode) { case RANAP_RelocationPreparation :// 2 break; case RANAP_RelocationResAllocation :// 3 break; case RANAP_DataVolumeReport ://7 break; case RANAP_MBMSSessionStop ://37 break; case RANAP_UplinkInformationExchange ://33 break; case RANAP_LocationRelatedData ://30 break; case RANAP_MBMSRABRelease ://42 break; case RANAP_SRNS_ContextTransfer :// 5 break; case RANAP_enhancedRelocation ://45 break; case RANAP_RelocationCancel :// 4 break; case RANAP_InformationTransfer ://31 break; case RANAP_MBMSCNDe_Registration_Procedure ://40 break; case RANAP_SecurityNodeControl ://6 break; case RANAP_MBMSSessionStart ://35 break; case RANAP_MBMSSessionUpdate ://36 break; case RANAP_MBMSRegistration ://39 break; case RANAP_enhancedRelocationComplete ://43 break; case RANAP_ResetResource ://27 break; case RANAP_Iu_RELEASE :// 1 { struct Iu_ReleaseComplete* pIu_ReleaseComplete = &pSuccessfulOutcome->value.iu_ReleaseComplete; } break; case RANAP_Reset ://9 break; default: break; } } break; case RANAP_PDU_unsuccessfulOutcome_chosen: { struct UnsuccessfulOutcome* pUnsuccessfulOutcome = &pdu.value.unsuccessfulOutcome; SetMessageType(pUnsuccessfulOutcome->procedureCode); //@zh 20100820 bug fixed switch(pUnsuccessfulOutcome->procedureCode) { case RANAP_MBMSSessionStart ://35 break; case RANAP_InformationTransfer ://31 break; case RANAP_MBMSRegistration ://39 break; case RANAP_MBMSRABRelease ://42 break; case RANAP_SecurityNodeControl ://6 break; case RANAP_RelocationPreparation :// 2 break; case RANAP_RelocationResAllocation :// 3 break; case RANAP_UplinkInformationExchange ://33 break; case RANAP_MBMSSessionUpdate ://36 break; case RANAP_enhancedRelocationComplete ://43 break; case RANAP_LocationRelatedData ://30 break; default: break; } } break; case RANAP_PDU_outcome_chosen: { struct Outcome* pOutcome = &pdu.value.outcome; SetMessageType(pOutcome->procedureCode); //@zh 20100820 bug fixed switch(pOutcome->procedureCode) { case RANAP_RAB_ASSIGNMENT :// 0 { struct RAB_AssignmentResponse* pRAB_AssignmentResponse = &pOutcome->value.rAB_AssignmentResponse; } break; /* @{procedureCode = 255} */ case RANAP_MBMSUELinking ://38 break; default: break; } } break; } } else { //printf("DeCode Error: %s\n", ASN_LIB_ERROR_STRING[iRet]); iRet = -1; } free_RANAP_PDU(&pdu); asn_free(buffer); } return iRet; }
CIsupParser::CIsupParser(UINT8 pt, UINT8 pv, UINT8 pcf, UINT16 mt) :CIsupPdu(pt, pv, pcf, mt) { SetProtocolType(pt); }
CIsupParser::~CIsupParser() { SetProtocolType(MOD_ISUP); }