megaco_text_parser_prev3c.hrl
来自「OTP是开放电信平台的简称」· HRL 代码 · 共 1,596 行 · 第 1/5 页
HRL
1,596 行
exit({not_both_address_mgcid_serviceChangeParm, Val, Addr});merge_ServiceChangeParm([{profile, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeProfile == asn1_NOVALUE -> SCP = SCP0#'ServiceChangeParm'{serviceChangeProfile = Val}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{version, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeVersion == asn1_NOVALUE -> SCP = SCP0#'ServiceChangeParm'{serviceChangeVersion = Val}, merge_ServiceChangeParm(Parms, SCP, Req);%% REQUIRED (i.e. no default value)merge_ServiceChangeParm([{reason, Val}|Parms], SCP0, Req0) when SCP0#'ServiceChangeParm'.serviceChangeReason == undefined -> SCP = SCP0#'ServiceChangeParm'{serviceChangeReason = Val}, Req = lists:delete(serviceChangeReason, Req0), merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{delay, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeDelay == asn1_NOVALUE -> SCP = SCP0#'ServiceChangeParm'{serviceChangeDelay = Val}, merge_ServiceChangeParm(Parms, SCP, Req);%% REQUIRED (i.e. no default value)merge_ServiceChangeParm([{method, Val}|Parms], SCP0, Req0) when SCP0#'ServiceChangeParm'.serviceChangeMethod == undefined -> SCP = SCP0#'ServiceChangeParm'{serviceChangeMethod = Val}, Req = lists:delete(serviceChangeMethod, Req0), merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{time_stamp, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.timeStamp == asn1_NOVALUE -> SCP = SCP0#'ServiceChangeParm'{timeStamp = Val}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{extension, _Val}|Parms], SCP0, Req) -> merge_ServiceChangeParm(Parms, SCP0, Req);merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE, atom(Val) -> SCI = #'AuditDescriptor'{auditToken = [Val]}, SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeInfo == asn1_NOVALUE,tuple(Val) -> SCI = #'AuditDescriptor'{auditPropertyToken = [Val]}, SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req) when record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor'), atom(Val) -> SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo, L = SCI0#'AuditDescriptor'.auditToken, SCI = SCI0#'AuditDescriptor'{auditToken = [Val|L]}, SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{audit_item, Val}|Parms], SCP0, Req) when record(SCP0#'ServiceChangeParm'.serviceChangeInfo, 'AuditDescriptor'), tuple(Val) -> SCI0 = SCP0#'ServiceChangeParm'.serviceChangeInfo, L = SCI0#'AuditDescriptor'.auditPropertyToken, SCI = SCI0#'AuditDescriptor'{auditPropertyToken = [Val|L]}, SCP = SCP0#'ServiceChangeParm'{serviceChangeInfo = SCI}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([incomplete|Parms], SCP0, Req) when SCP0#'ServiceChangeParm'.serviceChangeIncompleteFlag == asn1_NOVALUE -> SCP = SCP0#'ServiceChangeParm'{serviceChangeIncompleteFlag = 'NULL'}, merge_ServiceChangeParm(Parms, SCP, Req);merge_ServiceChangeParm([{Tag, Val}|_Parms], SCP, _Req) -> Val2 = case Tag of address -> SCP#'ServiceChangeParm'.serviceChangeAddress; mgc_id -> SCP#'ServiceChangeParm'.serviceChangeMgcId; profile -> SCP#'ServiceChangeParm'.serviceChangeProfile; version -> SCP#'ServiceChangeParm'.serviceChangeVersion; reason -> SCP#'ServiceChangeParm'.serviceChangeReason; delay -> SCP#'ServiceChangeParm'.serviceChangeDelay; method -> SCP#'ServiceChangeParm'.serviceChangeMethod; time_stamp -> SCP#'ServiceChangeParm'.timeStamp; audit_item -> SCP#'ServiceChangeParm'.serviceChangeInfo end, exit({at_most_once_serviceChangeParm, {Tag, Val, Val2}});merge_ServiceChangeParm([Parm|_Parms], SCP, _Req) -> Parm2 = case Parm of incomplete -> SCP#'ServiceChangeParm'.serviceChangeIncompleteFlag end, exit({at_most_once_serviceChangeParm, {Parm, Parm2}}).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}).merge_topologyDescriptor(Components) -> merge_topologyDescriptor(Components, #'TopologyRequest'{}, []).merge_topologyDescriptor([], TR, TRs) -> lists:reverse([ensure_TopologyRequest(TR)|TRs]);merge_topologyDescriptor( [{tid, From}|Comps], #'TopologyRequest'{terminationFrom = undefined} = TR1, TRs) -> TR2 = TR1#'TopologyRequest'{terminationFrom = From}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor( [{tid, To}|Comps], #'TopologyRequest'{terminationTo = undefined} = TR1, TRs) -> TR2 = TR1#'TopologyRequest'{terminationTo = To}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor([{tid, From}|Comps], TR1, TRs) -> TR2 = #'TopologyRequest'{terminationFrom = From}, merge_topologyDescriptor(Comps, TR2, [TR1 | TRs]);merge_topologyDescriptor([{direction, Dir}|Comps], TR1, TRs) -> TR2 = TR1#'TopologyRequest'{topologyDirection = Dir}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor([{sid, SID}|Comps], TR1, TRs) -> TR2 = TR1#'TopologyRequest'{streamID = SID}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor( [{direction_ext, EDir}|Comps], #'TopologyRequest'{topologyDirection = asn1_NOVALUE} = TR1, TRs) -> TR2 = TR1#'TopologyRequest'{topologyDirection = oneway, topologyDirectionExtension = EDir}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor([{direction_ext, EDir}|Comps], TR1, TRs) -> TR2 = TR1#'TopologyRequest'{topologyDirectionExtension = EDir}, merge_topologyDescriptor(Comps, TR2, TRs);merge_topologyDescriptor(Comps, TR, TRs) -> return_error(0, {bad_topologyDescriptor, Comps, TR, TRs}).ensure_TopologyRequest(#'TopologyRequest'{terminationFrom = From, terminationTo = To, topologyDirection = Dir} = R) when (From =/= asn1_NOVALUE) and (To =/= asn1_NOVALUE) and (Dir =/= asn1_NOVALUE) -> R;ensure_TopologyRequest(R) -> return_error(0, {bad_TopologyRequest, R}). 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) ->%% d("merge_signalRequest -> entry with"%% "~n SignalName: ~p"%% "~n PropertyParms: ~p", [SignalName, PropertyParms]), Sig = #'Signal'{signalName = SignalName}, SPL = [], do_merge_signalRequest(Sig, PropertyParms, SPL).do_merge_signalRequest(Sig, [H | T], SPL) ->%% d("do_merge_signalRequest -> entry with"%% "~n Sig: ~p"%% "~n H: ~p"%% "~n SPL: ~p", [Sig, H, SPL]), case H of {stream, SID} when Sig#'Signal'.streamID == asn1_NOVALUE -> do_merge_signalRequest(Sig#'Signal'{streamID = SID}, 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]); {direction, Dir} when Sig#'Signal'.direction == asn1_NOVALUE -> do_merge_signalRequest(Sig#'Signal'{direction = Dir}, T, SPL); {requestId, RID} when Sig#'Signal'.requestID == asn1_NOVALUE -> do_merge_signalRequest(Sig#'Signal'{requestID = RID}, T, SPL); {intersigDelay, ISD} when Sig#'Signal'.intersigDelay == asn1_NOVALUE -> do_merge_signalRequest(Sig#'Signal'{intersigDelay = ISD}, T, 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}.ensure_eventDM({_TokenTag, Line, DMD}) when record(DMD, 'DigitMapDescriptor') -> Name = DMD#'DigitMapDescriptor'.digitMapName, Val = DMD#'DigitMapDescriptor'.digitMapValue, if Name == asn1_NOVALUE, Val /= asn1_NOVALUE -> {'DigitMapValue', Start, Short, Long, Duration, Body} = Val, DMV = #'DigitMapValue'{startTimer = Start, shortTimer = Short, longTimer = Long, digitMapBody = Body, durationTimer = Duration}, {eventDM, {digitMapValue, DMV}}; Name /= asn1_NOVALUE, Val == asn1_NOVALUE -> {eventDM, {digitMapName, Name}}; true -> return_error(Line, {bad_eventDM, DMD}) end. ensure_DMD({_TokenTag, _Line, DMD})
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?