⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 megaco_text_parser_v1.hrl

📁 OTP是开放电信平台的简称
💻 HRL
📖 第 1 页 / 共 3 页
字号:
		SCP#'ServiceChangeParm'.serviceChangeMethod;	    time_stamp -> 		SCP#'ServiceChangeParm'.timeStamp    end,    exit({at_most_once_serviceChangeParm, {Tag, Val, Val2}}).merge_ServiceChangeResParm(Parms) ->    merge_ServiceChangeResParm(Parms, #'ServiceChangeResParm'{}).merge_ServiceChangeResParm([], SCRP) ->    SCRP;merge_ServiceChangeResParm([{address, Val}|Parms], SCRP0)   when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE,       SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->    SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeAddress = Val},    merge_ServiceChangeResParm(Parms, SCRP);merge_ServiceChangeResParm([{address, Val}|_Parms], SCRP0)   when SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->    MgcId = SCRP0#'ServiceChangeResParm'.serviceChangeMgcId,    exit({not_both_address_mgcid_servChgReplyParm, Val, MgcId});merge_ServiceChangeResParm([{mgc_id, Val}|Parms], SCRP0)  when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE,       SCRP0#'ServiceChangeResParm'.serviceChangeAddress == asn1_NOVALUE ->     SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeMgcId = Val},    merge_ServiceChangeResParm(Parms, SCRP);merge_ServiceChangeResParm([{mgc_id, Val}|_Parms], SCRP0)  when SCRP0#'ServiceChangeResParm'.serviceChangeMgcId == asn1_NOVALUE ->     Addr = SCRP0#'ServiceChangeResParm'.serviceChangeAddress,    exit({not_both_address_mgcid_servChgReplyParm, Val, Addr});merge_ServiceChangeResParm([{profile, Val}|Parms], SCRP0)  when SCRP0#'ServiceChangeResParm'.serviceChangeProfile == asn1_NOVALUE ->    SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeProfile = Val},    merge_ServiceChangeResParm(Parms, SCRP);merge_ServiceChangeResParm([{version, Val}|Parms], SCRP0)  when SCRP0#'ServiceChangeResParm'.serviceChangeVersion == asn1_NOVALUE ->    SCRP = SCRP0#'ServiceChangeResParm'{serviceChangeVersion = Val},    merge_ServiceChangeResParm(Parms, SCRP);merge_ServiceChangeResParm([{time_stamp, Val}|Parms], SCRP0)  when SCRP0#'ServiceChangeResParm'.timeStamp == asn1_NOVALUE ->    SCRP = SCRP0#'ServiceChangeResParm'{timeStamp = Val},    merge_ServiceChangeResParm(Parms, SCRP);merge_ServiceChangeResParm([{Tag, Val}|_Parms], SCRP) ->    Val2 = 	case Tag of	    address    -> SCRP#'ServiceChangeResParm'.serviceChangeAddress;	    mgc_id     -> SCRP#'ServiceChangeResParm'.serviceChangeMgcId;	    profile    -> SCRP#'ServiceChangeResParm'.serviceChangeProfile;	    version    -> SCRP#'ServiceChangeResParm'.serviceChangeVersion;	    time_stamp -> SCRP#'ServiceChangeResParm'.timeStamp	end,    exit({at_most_once_servChgReplyParm, {Tag, Val, Val2}}).    ensure_serviceChangeMethod({safeToken, _Line, "fl"}) ->    failover;ensure_serviceChangeMethod({safeToken, _Line, "failover"}) ->    failover;ensure_serviceChangeMethod({safeToken, _Line, "fo"}) ->     forced;ensure_serviceChangeMethod({safeToken, _Line, "forced"}) ->    forced;ensure_serviceChangeMethod({safeToken, _Line, "gr"}) ->    graceful;ensure_serviceChangeMethod({safeToken, _Line, "graceful"}) ->    graceful;ensure_serviceChangeMethod({safeToken, _Line, "rs"}) ->    restart;ensure_serviceChangeMethod({safeToken, _Line, "restart"}) ->    restart;ensure_serviceChangeMethod({safeToken, _Line, "dc"}) ->    disconnected;ensure_serviceChangeMethod({safeToken, _Line, "disconnected"}) ->    disconnected;ensure_serviceChangeMethod({safeToken, _Line, "ho"}) ->    handOff;ensure_serviceChangeMethod({safeToken, _Line, "handoff"}) ->    handOff;ensure_serviceChangeMethod({safeToken, Line, Text}) ->    return_error(Line, {bad_serviceChangeMethod, Text}).ensure_profile({_TokenTag, Line, Text}) ->    case string:tokens(Text, [$/]) of        [Name, Version] ->            Version2 = ensure_version(Version),            #'ServiceChangeProfile'{profileName = Name, version = Version2};        _ ->            return_error(Line, {bad_profile, Text})    end.ensure_version(Version) ->    ensure_uint(Version, 0, 99).merge_signalRequest(SignalName, PropertyParms) ->    Sig = #'Signal'{signalName = SignalName},    SPL = [],    do_merge_signalRequest(Sig, PropertyParms, SPL).do_merge_signalRequest(Sig, [H | T], SPL) ->    case H of        {stream, StreamId} when Sig#'Signal'.streamID == asn1_NOVALUE ->            do_merge_signalRequest(Sig#'Signal'{streamID = StreamId}, T, SPL);        {signal_type, SigType} when Sig#'Signal'.sigType == asn1_NOVALUE ->            do_merge_signalRequest(Sig#'Signal'{sigType = SigType}, T, SPL);        {duration, Duration} when Sig#'Signal'.duration == asn1_NOVALUE ->            do_merge_signalRequest(Sig#'Signal'{duration = Duration}, T, SPL);        {notify_completion, NC} when Sig#'Signal'.notifyCompletion == asn1_NOVALUE ->            do_merge_signalRequest(Sig#'Signal'{notifyCompletion = NC}, T, SPL);        keepActive when Sig#'Signal'.keepActive == asn1_NOVALUE->            do_merge_signalRequest(Sig#'Signal'{keepActive = true}, T, SPL);        {other, Name, PP} ->            SP = #'SigParameter'{sigParameterName = Name, 				 value            = PP#'PropertyParm'.value,				 extraInfo        = PP#'PropertyParm'.extraInfo},            do_merge_signalRequest(Sig, T, [SP | SPL]);        _ ->            return_error(0, {bad_sigParm, H})    end;do_merge_signalRequest(Sig, [], SPL) ->    Sig#'Signal'{sigParList = lists:reverse(SPL)} .%% eventStream       = StreamToken EQUAL StreamID%% eventOther        = eventParameterName parmValueselect_stream_or_other("st", #'PropertyParm'{value = [Value]}) ->    {stream, ensure_uint16(Value)};select_stream_or_other("st", Value) ->    {stream, ensure_uint16(Value)};select_stream_or_other("stream", #'PropertyParm'{value = [Value]}) ->    {stream, ensure_uint16(Value)};select_stream_or_other("stream", Value) ->    {stream, ensure_uint16(Value)};select_stream_or_other(Name, #'PropertyParm'{value = Value}) ->    EP = #'EventParameter'{eventParameterName = Name, 			   value              = Value},    {other, EP}.%% Version 2 of the DigitMapValue has an extra item (after extension mark), %% durationTimer, which does not exist in version 1. The record was created%% as defined in megaco_message_internal.hrl, e.g. as in version 2, so we %% have to fix it here.ensure_eventDM({_TokenTag, Line, DMD})   when record(DMD, 'DigitMapDescriptor') ->    Name = DMD#'DigitMapDescriptor'.digitMapName,    Val  = DMD#'DigitMapDescriptor'.digitMapValue,    if        Name  == asn1_NOVALUE, Val /= asn1_NOVALUE ->	    %% Convert to version 1 DigitMapValue	    {'DigitMapValue', Start, Short, Long, _DurationTimer, Body} = Val,	    DMV = #'DigitMapValue'{startTimer   = Start, 				   shortTimer   = Short, 				   longTimer    = Long, 				   digitMapBody = Body},            {eventDM, {digitMapValue, DMV}};        Name  /= asn1_NOVALUE, Val == asn1_NOVALUE ->            {eventDM, {digitMapName, Name}};        true ->            return_error(Line, {bad_eventDM, DMD})    end.%% Version 2 of the DigitMapValue has an extra item (after extension mark), %% durationTimer, which does not exist in version 1. The record is defined %% (in megaco_message_internal.hrl) as in version 2, so we have to fix%% it here.ensure_DMD({_TokenTag, _Line, DMD})   when record(DMD, 'DigitMapDescriptor') ->    Val2 = 	case DMD#'DigitMapDescriptor'.digitMapValue of	    %% Note that the values of the digitMapBody and durationTimers	    %% are swapped by the scanner (this is done because of a 	    %% problem in the flex scanner).	    {'DigitMapValue', Start, Short, Long, _DurationTimer, Body} ->		%% Convert to version 1 DigitMapValue		#'DigitMapValue'{startTimer   = Start,				 shortTimer   = Short,				 longTimer    = Long,				 digitMapBody = Body};	    Other ->		Other	end,    DMD#'DigitMapDescriptor'{digitMapValue = Val2}.merge_observed_event(ObservedEvents, EventName, TimeStamp) ->    StreamId = asn1_NOVALUE,    EPL = [],    do_merge_observed_event(ObservedEvents, EventName, TimeStamp, StreamId, EPL).do_merge_observed_event([{stream, StreamID} | T], EventName, TimeStamp, asn1_NOVALUE, EPL) ->    do_merge_observed_event(T, EventName, TimeStamp, StreamID, EPL);do_merge_observed_event([{other, PP} | T], EventName, TimeStamp, StreamID, EPL) ->    do_merge_observed_event(T, EventName, TimeStamp, StreamID, [PP | EPL]);do_merge_observed_event([], EventName, TimeStamp, StreamID, EPL) ->    #'ObservedEvent'{eventName    = EventName,                     timeNotation = TimeStamp,                     streamID     = StreamID,                     eventParList = lists:reverse(EPL)}.merge_eventSpec(OE) when record(OE, 'ObservedEvent'),                         OE#'ObservedEvent'.timeNotation == asn1_NOVALUE ->    #'EventSpec'{eventName     = OE#'ObservedEvent'.eventName,                 streamID      = OE#'ObservedEvent'.streamID,                 eventParList  = OE#'ObservedEvent'.eventParList};merge_eventSpec(OE) ->    return_error(0, {bad_event_spec, OE}).merge_eventParameters(Params) ->    StreamId = asn1_NOVALUE,    EPL      = [],    RA       = #'RequestedActions'{},    HasA     = no,    do_merge_eventParameters(Params, StreamId, EPL, RA, HasA) .                                   do_merge_eventParameters([H | T], StreamId, EPL, RA, HasA) ->    case H of        keepActive when RA#'RequestedActions'.keepActive == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{keepActive = true},            do_merge_eventParameters(T, StreamId, EPL, RA2, yes);        {embed, SD, SED} when RA#'RequestedActions'.signalsDescriptor == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{signalsDescriptor = SD,					secondEvent       = SED},            do_merge_eventParameters(T, StreamId, EPL, RA2, yes);        {eventDM, DM} when RA#'RequestedActions'.eventDM == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{eventDM = DM},            do_merge_eventParameters(T, StreamId, EPL, RA2, yes);        {stream, NewStreamId} when StreamId == asn1_NOVALUE ->            do_merge_eventParameters(T, NewStreamId, EPL, RA, HasA);        {other, PP} when record(PP, 'PropertyParm') ->            EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,                                   value              = PP#'PropertyParm'.value,				   extraInfo          = PP#'PropertyParm'.extraInfo},            do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);        {other, EP} when record(EP, 'EventParameter') ->            do_merge_eventParameters(T, StreamId, [EP | EPL], RA, HasA);        _ ->            return_error(0, {bad_eventParameter, H})    end;do_merge_eventParameters([], StreamId, EPL, RA, yes) ->    #'RequestedEvent'{streamID    = StreamId,                      eventAction = RA,                       evParList   = lists:reverse(EPL)};do_merge_eventParameters([], StreamId, EPL, _RA, no) ->    #'RequestedEvent'{streamID    = StreamId,                      eventAction = asn1_NOVALUE,                       evParList   = lists:reverse(EPL)}.merge_secondEventParameters(Params) ->    StreamId = asn1_NOVALUE,    EPL      = [],    SRA      = #'SecondRequestedActions'{},    HasA     = no,    do_merge_secondEventParameters(Params, StreamId, EPL, SRA, HasA) .                                   do_merge_secondEventParameters([H | T], StreamId, EPL, SRA, HasA) ->    case H of        keepActive when SRA#'SecondRequestedActions'.keepActive == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{keepActive = true},            do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);        {second_embed, SD} when SRA#'SecondRequestedActions'.signalsDescriptor == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{signalsDescriptor = SD},            do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);        {eventDM, DM} when SRA#'SecondRequestedActions'.eventDM == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{eventDM = DM},            do_merge_secondEventParameters(T, StreamId, EPL, SRA2, yes);        {stream, NewStreamId} when StreamId == asn1_NOVALUE ->            do_merge_secondEventParameters(T, NewStreamId, EPL, SRA, HasA);        {other, PP} when record(PP, 'PropertyParm') ->            EP = #'EventParameter'{eventParameterName = PP#'PropertyParm'.name,                                   value              = PP#'PropertyParm'.value,				   extraInfo          = PP#'PropertyParm'.extraInfo},            do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);        {other, EP} when record(EP, 'EventParameter') ->            do_merge_secondEventParameters(T, StreamId, [EP | EPL], SRA, HasA);        _ ->            return_error(0, {bad_secondEventParameter, H})    end;do_merge_secondEventParameters([], StreamId, EPL, SRA, yes) ->    #'SecondRequestedEvent'{streamID    = StreamId,                            eventAction = SRA,                             evParList   = lists:reverse(EPL)};do_merge_secondEventParameters([], StreamId, EPL, _SRA, no) ->    #'SecondRequestedEvent'{streamID    = StreamId,                            eventAction = asn1_NOVALUE,                             evParList   = lists:reverse(EPL)}.%% terminationID     = "ROOT" / pathName / "$" / "*"%% Total length of pathName must not exceed 64 chars.%% pathName          = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )%%                     ["@" pathDomainName ]%% ABNF allows two or more consecutive "." although it is meaningless%% in a path domain name.%% pathDomainName    = (ALPHA / DIGIT / "*" )%%                        *63(ALPHA / DIGIT / "-" / "*" / ".")ensure_terminationID({safeToken, _Line, LowerText}) ->    %% terminationID     = "ROOT" / pathName / "$" / "*"    decode_term_id(LowerText, false, [], []).decode_term_id([H | T], Wild, Id, Component) ->    case H of        $/ -> decode_term_id(T, Wild, [lists:reverse(Component) | Id], []);        $* -> decode_term_id(T, true, Id, [?megaco_all    | Component]);        $$ -> decode_term_id(T, true, Id, [?megaco_choose | Component]);        _  -> decode_term_id(T, Wild, Id, [H | Component])    end;decode_term_id([], Wild, Id, Component) ->    Id2 = [lists:reverse(Component) | Id],    #megaco_term_id{contains_wildcards = Wild, id = lists:reverse(Id2)}.            ensure_pathName({_TokenTag, _Line, Text}) ->    Text.  %% BUGBUG: ensure values%% TimeStamp            = Date "T" Time ; per ISO 8601:1988%% Date                 = 8(DIGIT) ; Date = yyyymmdd%% Time                 = 8(DIGIT) ; Time = hhmmssssensure_timeStamp({'TimeStampToken', Line, Text}) ->    case string:tokens(Text, [$T, $t]) of        [Date, Time] ->            #'TimeNotation'{date = Date, time = Time};        _ ->            return_error(Line, {bad_timeStamp, Text})    end.ensure_transactionID(TransId) ->    ensure_uint32(TransId).%% transactionAck       = transactionID / (transactionID "-" transactionID)ensure_transactionAck({safeToken, _Line, Text}) ->    case string:tokens(Text, [$-]) of        [Id] ->            #'TransactionAck'{firstAck = ensure_transactionID(Id)};        [Id, Id2] ->            #'TransactionAck'{firstAck = ensure_transactionID(Id),			      lastAck  = ensure_transactionID(Id2)}    end.merge_action_requests(ContextId, Items) ->    CtxReq      = #'ContextRequest'{},    CtxAuditReq = #'ContextAttrAuditRequest'{},    CmdReq      = [],    TopReq      = [],    do_merge_action_requests(ContextId, CtxReq, CtxAuditReq, CmdReq, TopReq, Items).do_merge_action_requests(ContextId, CtxReq, CtxAuditReq, CmdReq, TopReq, [H | T]) ->    case H of        _ when record(H, 'CommandRequest') ->            do_merge_action_requests(ContextId, CtxReq, CtxAuditReq, [H | CmdReq], TopReq, T);        {priority, Int} when CtxReq#'ContextRequest'.priority == asn1_NOVALUE ->            CtxReq2 = CtxReq#'ContextRequest'{priority = Int},            do_merge_action_requests(ContextId, CtxReq2, CtxAuditReq, CmdReq, 				     TopReq, T);        {emergency, Bool} when CtxReq#'ContextRequest'.emergency == asn1_NOVALUE ->            CtxReq2 = CtxReq#'ContextRequest'{emergency = Bool},            do_merge_action_requests(ContextId, CtxReq2, CtxAuditReq, CmdReq, 				     TopReq, T);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -