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

📄 megaco_text_parser_prev3c.hrl

📁 OTP是开放电信平台的简称
💻 HRL
📖 第 1 页 / 共 5 页
字号:
  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'{durationTimer = Body,			     digitMapBody  = Duration} = DMV ->		%% Convert to version 1 DigitMapValue		DMV#'DigitMapValue'{digitMapBody  = Body,				    durationTimer = Duration};	    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}).make_RegulatedEmbeddedDescriptor({embed, SD, SED}) ->%%     d("make_RegulatedEmbeddedDescriptor(embed) -> entry with"%%       "~n   SD:  ~p"%%       "~n   SED: ~p", [SD, SED]),    #'RegulatedEmbeddedDescriptor'{secondEvent       = SED,				   signalsDescriptor = SD}.merge_eventParameters(Params) ->%%     d("merge_eventParameters -> entry with"%%       "~n   Params: ~p", [Params]),    SID  = asn1_NOVALUE,    EPL  = [],    RA   = #'RequestedActions'{},    HasA = no,    do_merge_eventParameters(Params, SID, EPL, RA, HasA) .                                   do_merge_eventParameters([H | T], SID, EPL, RA, HasA) ->%%     d("do_merge_eventParameters -> entry with"%%       "~n   H:    ~p"%%       "~n   SID:  ~p"%%       "~n   EPL:  ~p"%%       "~n   RA:  ~p"%%       "~n   HasA: ~p", [H, SID, EPL, RA, HasA]),    case H of        keepActive when RA#'RequestedActions'.keepActive == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{keepActive = true},            do_merge_eventParameters(T, SID, EPL, RA2, yes);        resetEventsDescriptor when RA#'RequestedActions'.resetEventsDescriptor == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{resetEventsDescriptor = 'NULL'},            do_merge_eventParameters(T, SID, EPL, RA2, yes);        {embed, SD, SED} when RA#'RequestedActions'.signalsDescriptor == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{signalsDescriptor = SD,					secondEvent       = SED},            do_merge_eventParameters(T, SID, EPL, RA2, yes);        {eventDM, DM} when RA#'RequestedActions'.eventDM == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{eventDM = DM},            do_merge_eventParameters(T, SID, EPL, RA2, yes);        {stream, NewSID} when SID == asn1_NOVALUE ->            do_merge_eventParameters(T, NewSID, 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, SID, [EP | EPL], RA, HasA);        {other, EP} when record(EP, 'EventParameter') ->            do_merge_eventParameters(T, SID, [EP | EPL], RA, HasA);        {notifyBehaviour, NB} when RA#'RequestedActions'.notifyBehaviour == asn1_NOVALUE ->            RA2 = RA#'RequestedActions'{notifyBehaviour = NB},            do_merge_eventParameters(T, SID, EPL, RA2, yes);        _ ->            return_error(0, {bad_eventParameter, H})    end;do_merge_eventParameters([], SID, EPL, RA, yes) ->    #'RequestedEvent'{streamID    = SID,                      eventAction = RA,                       evParList   = lists:reverse(EPL)};do_merge_eventParameters([], SID, EPL, _RA, no) ->    #'RequestedEvent'{streamID    = SID,                      eventAction = asn1_NOVALUE,                       evParList   = lists:reverse(EPL)}.merge_secondEventParameters(Params) ->%%     d("merge_secondEventParameters -> entry with"%%       "~n   Params: ~p", [Params]),    SID  = asn1_NOVALUE,    EPL  = [],    SRA  = #'SecondRequestedActions'{},    HasA = no,    do_merge_secondEventParameters(Params, SID, EPL, SRA, HasA) .                                   do_merge_secondEventParameters([H | T], SID, EPL, SRA, HasA) ->%%     d("do_merge_secondEventParameters -> entry with"%%       "~n   H:    ~p"%%       "~n   SID:  ~p"%%       "~n   EPL:  ~p"%%       "~n   SRA:  ~p"%%       "~n   HasA: ~p", [H, SID, EPL, SRA, HasA]),    case H of        keepActive when SRA#'SecondRequestedActions'.keepActive == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{keepActive = true},            do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);        resetEventsDescriptor when SRA#'SecondRequestedActions'.resetEventsDescriptor == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{resetEventsDescriptor = 'NULL'},            do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);        {second_embed, SD} when SRA#'SecondRequestedActions'.signalsDescriptor == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{signalsDescriptor = SD},            do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);        {eventDM, DM} when SRA#'SecondRequestedActions'.eventDM == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{eventDM = DM},            do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);        {stream, NewSID} when SID == asn1_NOVALUE ->            do_merge_secondEventParameters(T, NewSID, 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, SID, [EP | EPL], SRA, HasA);        {other, EP} when record(EP, 'EventParameter') ->            do_merge_secondEventParameters(T, SID, [EP | EPL], SRA, HasA);        {notifyBehaviour, NB} when SRA#'SecondRequestedActions'.notifyBehaviour == asn1_NOVALUE ->            SRA2 = SRA#'SecondRequestedActions'{notifyBehaviour = NB},            do_merge_secondEventParameters(T, SID, EPL, SRA2, yes);        _ ->            return_error(0, {bad_secondEventParameter, H})    end;do_merge_secondEventParameters([], SID, EPL, SRA, yes) ->    #'SecondRequestedEvent'{streamID    = SID,                            eventAction = SRA,                             evParList   = lists:reverse(EPL)};do_merge_secondEventParameters([], SID, EPL, _SRA, no) ->    #'SecondRequestedEvent'{streamID    = SID,                            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_context_request(asn1_NOVALUE, Prop) ->    merge_context_request(#'ContextRequest'{}, Prop);merge_context_request(#'ContextRequest'{priority = asn1_NOVALUE} = CR,                       {priority, Int}) ->    CR#'ContextRequest'{priority = Int};merge_context_request(#'ContextRequest'{emergency = asn1_NOVALUE} = CR,                       {emergency, Bool}) ->    CR#'ContextRequest'{emergency = Bool};merge_context_request(#'ContextRequest'{topologyReq = asn1_NOVALUE} = CR,                       {topology, Desc}) ->    CR#'ContextRequest'{topologyReq = Desc};merge_context_request(#'ContextRequest'{iepscallind = asn1_NOVALUE} = CR,                       {iepsCallind, Ind}) ->    CR#'ContextRequest'{iepscallind = Ind};merge_context_request(#'ContextRequest'{contextProp = asn1_NOVALUE} = CR,                      {contextProp, Props}) ->    CR#'ContextRequest'{contextProp = Props};merge_context_request(#'ContextRequest'{contextList = asn1_NOVALUE} = CR,                       {contextList, IDs}) ->     CR#'ContextRequest'{contextList = IDs};merge_context_request(CR, {Tag, Val}) ->    Val2 =         case Tag of            priority    -> CR#'ContextRequest'.priority;            emergency   -> CR#'ContextRequest'.emergency;            topology    -> CR#'ContextRequest'.topologyReq;            iepsCallind -> CR#'ContextRequest'.iepscallind;            contextProp -> CR#'ContextRequest'.contextProp;	    contextList -> CR#'ContextRequest'.contextList        end,    exit({at_most_once_contextProperty, {Tag, Val, Val2}}).	    merge_context_attr_audit_request(  #'ContextAttrAuditRequest'{contextPropAud = asn1_NOVALUE} = CAAR, []) ->        CAAR;merge_context_attr_audit_request(  #'ContextAttrAuditRequest'{contextPropAud = CPA} = CAAR, []) ->        CAAR#'ContextAttrAuditRequest'{contextPropAud = lists:reverse(CPA)};merge_context_attr_audit_request(CAAR, [H|T]) ->    case H of	priorityAudit when CAAR#'ContextAttrAuditRequest'.priority == asn1_NOVALUE ->            CAAR2 = CAAR#'ContextAttrAuditRequest'{priority = 'NULL'},            merge_context_attr_audit_request(CAAR2, T);        emergencyAudit when CAAR#'ContextAttrAuditRequest'.emergency == asn1_NOVALUE ->            CAAR2 = CAAR#'ContextAttrAuditRequest'{emergency = 'NULL'},            merge_context_attr_audit_request(CAAR2, T);        topologyAudit when CAAR#'ContextAttrAuditRequest'.topology == asn1_NOVALUE ->            CAAR2 = CAAR#'ContextAttrAuditRequest'{topology = 'NULL'},	    merge_context_attr_audit_request(CAAR2, T);        iepsCallind when CAAR#'ContextAttrAuditRequest'.iepscallind == asn1_NOVALUE ->            CAAR2 = CAAR#'ContextAttrAuditRequest'{iepscallind = 'NULL'},	    merge_context_attr_audit_request(CAAR2, T);	{prop, Name} when CAAR#'ContextAttrAuditRequest'.contextPropAud == asn1_NOVALUE ->	    CPA = [#'IndAudPropertyParm'{name = Name}],	    CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA},	    merge_context_attr_audit_request(CAAR2, T);	{prop, Name} ->	    CPA   = CAAR#'ContextAttrAuditRequest'.contextPropAud,	    CPA2  = [#'IndAudPropertyParm'{name = Name}|CPA],	    CAAR2 = CAAR#'ContextAttrAuditRequest'{contextPropAud = CPA2},	    merge_context_attr_audit_request(CAAR2, T);	{select_prio, Prio} when CAAR#'ContextAttrAuditRequest'.selectpriority == asn1_NOVALUE ->	    CAAR2 = CAAR#'ContextAttrAuditRequest'{selectpriority = Prio},	    merge_context_attr_audit_request(CAAR2, T);	{select_emergency, EV} when CAAR#'ContextAttrAuditRequest'.selectemergency == asn1_NOVALUE ->	    CAAR2 = CAAR#'ContextAttrAuditRequest'{selectemergency = EV},	    merge_context_attr_audit_request(CAAR2, T);	{select_ieps, IV} when CAAR#'ContextAttrAuditRequest'.selectiepscallind == asn1_NOVALUE ->	    CAAR2 = CAAR#'ContextAttrAuditRequest'{selectiepscallind = IV},	    merge_context_attr_audit_request(CAAR2, T);	{select_logic, SL} when CAAR#'ContextAttrAuditRequest'.selectLogic == asn1_NOVALUE ->	    CAAR2 = CAAR#'ContextAttrAuditRequest'{selectLogic = SL},	    merge_context_attr_audit_request(CAAR2, T);	%% BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG BUGBUG	%% 	%% For some strange reason, contextAttrDescriptor was added	%% to contextAuditSelector. But there is no place for this	%% info in the ContextAttrAuditRequest. Since contextAttrDescriptor	%% can also be found in contextProperty (which correspond to	%% ContextRequest), the question is if this info should go there	%% or if we shall just drop it. For now we drop it.	%% 	{contextProp, _PPs} ->	    merge_context_attr_audit_request(CAAR, T);	{contextList, _IDs} ->	    merge_context_attr_audit_request(CAAR, T);	_ ->	    exit({unexpected_contextAttrAudit_item, H})        end.merge_action_request(CtxId, Items) ->    do_merge_action_request(Items, [], asn1_NOVALUE, asn1_NOVALUE, CtxId).

⌨️ 快捷键说明

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