📄 megaco_text_parser_prev3c.hrl
字号:
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 + -