示例#1
0
UDPHeader::UDPHeader(int sourcePort, int destinationPort)
{
    SetSourcePort (sourcePort);
    SetDestinationPort (destinationPort);
    SetProtocolHeader (Header::HEADER_UDP);
    SetHeaderSize (8);
    SetProtocolType (TransportProtocol::TRANSPORT_PROTOCOL_TYPE_UDP);
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
CIsupParser::CIsupParser(UINT8 pt, UINT8 pv, UINT8 pcf, UINT16 mt)
:CIsupPdu(pt, pv, pcf, mt)
{
    SetProtocolType(pt);
}
示例#5
0
CIsupParser::~CIsupParser()
{
    SetProtocolType(MOD_ISUP);
}