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 + -
显示快捷键?