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

📄 megaco_text_parser_prev3c.hrl

📁 OTP是开放电信平台的简称
💻 HRL
📖 第 1 页 / 共 5 页
字号:
do_merge_action_request([H|T], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->    case H of	{commandRequest, CmdReq} ->	    do_merge_action_request(T, [CmdReq|CmdReqs], 				    CtxReq, CtxAuditReq, CtxId);	{contextProp, ContextProp} ->	    do_merge_action_request(T, CmdReqs, 				    merge_context_request(CtxReq, ContextProp),				    CtxAuditReq, CtxId);	{contextAudit, ContextAuditReq} when CtxAuditReq == asn1_NOVALUE ->	    do_merge_action_request(T, CmdReqs, 				    CtxReq, ContextAuditReq, CtxId)    end;do_merge_action_request([], CmdReqs, CtxReq, CtxAuditReq, CtxId) ->    #'ActionRequest'{contextId           = CtxId,                     contextRequest      = strip_ContextRequest(CtxReq),                     contextAttrAuditReq = strip_ContextAttrAuditRequest(CtxAuditReq),                     commandRequests     = lists:reverse(CmdReqs)}.%% OTP-5085: %% In order to solve a problem in the parser, the error descriptor%% has been put last in the non-empty commandReplyList, if it is not %% asn1_NOVALUEmerge_action_reply(Items) ->    do_merge_action_reply(Items, asn1_NOVALUE, asn1_NOVALUE, []).do_merge_action_reply([], Err, Ctx, Cmds) ->    #'ActionReply'{errorDescriptor = Err,		   contextReply    = strip_ContextRequest(Ctx),		   commandReply    = lists:reverse(Cmds)};do_merge_action_reply([H|T], Err0, CR, Cmds) ->    case H of        {error, Err1} when Err0 == asn1_NOVALUE ->            do_merge_action_reply(T, Err1, CR, Cmds);        {command, Cmd} ->            do_merge_action_reply(T, Err0, CR, [Cmd | Cmds]);        {context, CtxProp} ->	    do_merge_action_reply(T, Err0, 				  merge_context_request(CR, CtxProp), Cmds)    end.merge_auditOther([TID], TAR) ->    {auditResult,      #'AuditResult'{terminationID          = TID,		    terminationAuditResult = TAR}};merge_auditOther(TIDs, TAR) ->    {auditResultTermList,     #'TermListAuditResult'{terminationIDList      = TIDs,			    terminationAuditResult = TAR}}.strip_ContextRequest(#'ContextRequest'{priority    = asn1_NOVALUE,				       emergency   = asn1_NOVALUE,				       topologyReq = asn1_NOVALUE,				       iepscallind = asn1_NOVALUE,				       contextProp = asn1_NOVALUE,				       contextList = asn1_NOVALUE}) ->    asn1_NOVALUE;strip_ContextRequest(#'ContextRequest'{priority    = asn1_NOVALUE,				       emergency   = asn1_NOVALUE,				       topologyReq = asn1_NOVALUE,				       iepscallind = asn1_NOVALUE,				       contextProp = [],				       contextList = asn1_NOVALUE}) ->    asn1_NOVALUE;%% strip_ContextRequest(asn1_NOVALUE) ->%%     asn1_NOVALUE;strip_ContextRequest(R) ->    R.strip_ContextAttrAuditRequest(  #'ContextAttrAuditRequest'{priority          = asn1_NOVALUE,			     emergency         = asn1_NOVALUE,			     topology          = asn1_NOVALUE,			     iepscallind       = asn1_NOVALUE,			     contextPropAud    = asn1_NOVALUE,			     selectpriority    = asn1_NOVALUE,			     selectemergency   = asn1_NOVALUE,			     selectiepscallind = asn1_NOVALUE, 			     selectLogic       = asn1_NOVALUE}) ->    asn1_NOVALUE;strip_ContextAttrAuditRequest(  #'ContextAttrAuditRequest'{priority          = asn1_NOVALUE,			     emergency         = asn1_NOVALUE,			     topology          = asn1_NOVALUE,			     iepscallind       = asn1_NOVALUE,			     contextPropAud    = [],			     selectpriority    = asn1_NOVALUE,			     selectemergency   = asn1_NOVALUE,			     selectiepscallind = asn1_NOVALUE, 			     selectLogic       = asn1_NOVALUE}) ->    asn1_NOVALUE;strip_ContextAttrAuditRequest(R) ->    R.merge_AmmRequest_descriptors([], Acc) ->    lists:reverse(Acc);merge_AmmRequest_descriptors([{_, deprecated}|Descs], Acc) ->    merge_AmmRequest_descriptors(Descs, Acc);merge_AmmRequest_descriptors([Desc|Descs], Acc) ->    merge_AmmRequest_descriptors(Descs, [Desc|Acc]).make_auditRequest([TID], AD) ->    #'AuditRequest'{terminationID   = TID,		    auditDescriptor = AD};make_auditRequest([TID|_] = TIDList, AD) ->    #'AuditRequest'{terminationID     = TID,		    auditDescriptor   = AD,		    terminationIDList = TIDList}.    make_commandRequest({CmdTag, {_TokenTag, _Line, Text}}, Cmd) ->    Req = #'CommandRequest'{command  = {CmdTag, Cmd}},    case Text of        [$w, $- | _] ->            Req#'CommandRequest'{wildcardReturn = 'NULL'};        [$o, $-, $w, $- | _] ->            Req#'CommandRequest'{optional = 'NULL', wildcardReturn = 'NULL'};        [$o, $- | _] ->            Req#'CommandRequest'{optional = 'NULL'};        _ ->             Req    end.merge_terminationAudit(AuditReturnParameters) ->    lists:reverse(do_merge_terminationAudit(AuditReturnParameters, [], [])).do_merge_terminationAudit([H| T], ARPs, AuditItems) ->    case H of	{auditReturnItem, AuditItem} ->	    do_merge_terminationAudit(T, ARPs, [AuditItem | AuditItems]);	AuditReturnParameter ->	    do_merge_terminationAudit(T, [AuditReturnParameter | ARPs], AuditItems)    end;do_merge_terminationAudit([], AuditReturnParameters, []) ->    AuditReturnParameters;do_merge_terminationAudit([], AuditReturnParameters, AuditItems) ->    AuditDescriptor = #'AuditDescriptor'{auditToken = AuditItems},    AuditReturnParameter = {emptyDescriptors, AuditDescriptor},    [AuditReturnParameter | AuditReturnParameters].        merge_mediaDescriptor(MediaParms) ->    do_merge_mediaDescriptor(MediaParms, asn1_NOVALUE, [], []).do_merge_mediaDescriptor([H | T], TS, One, Multi) ->    case H of        {streamParm, Parm} when Multi == [] ->            do_merge_mediaDescriptor(T, TS, [Parm | One], Multi);        {streamDescriptor, Desc} when One == [] ->            do_merge_mediaDescriptor(T, TS, One, [Desc | Multi]);        {termState, TS2} when TS  == asn1_NOVALUE ->            do_merge_mediaDescriptor(T, TS2, One, Multi);        _ ->            return_error(0, {bad_merge_mediaDescriptor, [H, TS, One, Multi]})    end;do_merge_mediaDescriptor([], TS, One, Multi) ->    if	One == [], Multi == [] ->	    #'MediaDescriptor'{streams = asn1_NOVALUE,			       termStateDescr = TS};	One /= [], Multi == [] ->	    #'MediaDescriptor'{streams = {oneStream, merge_streamParms(One)},			       termStateDescr = TS};	One == [], Multi /= [] ->	    #'MediaDescriptor'{streams = {multiStream, lists:reverse(Multi)},			       termStateDescr = TS}    end.  merge_streamParms(TaggedStreamParms) ->    SP = #'StreamParms'{},    do_merge_streamParms(TaggedStreamParms, SP).do_merge_streamParms([{Tag, D} | T] = All, SP) ->    case Tag of        local when SP#'StreamParms'.localDescriptor  == asn1_NOVALUE ->            do_merge_streamParms(T, SP#'StreamParms'{localDescriptor = D});        remote when SP#'StreamParms'.remoteDescriptor == asn1_NOVALUE ->            do_merge_streamParms(T, SP#'StreamParms'{remoteDescriptor = D});        control ->            LCD =                 case SP#'StreamParms'.localControlDescriptor of                    asn1_NOVALUE ->                        #'LocalControlDescriptor'{propertyParms = []};                    PrevLCD ->                        PrevLCD                end,            LCD2 = do_merge_control_streamParms(D, LCD),            do_merge_streamParms(T, SP#'StreamParms'{localControlDescriptor = LCD2});	statistics when SP#'StreamParms'.statisticsDescriptor == asn1_NOVALUE ->	    do_merge_streamParms(T, SP#'StreamParms'{statisticsDescriptor = D});        _ ->            return_error(0, {do_merge_streamParms, [All, SP]})    end;do_merge_streamParms([], SP) when record(SP#'StreamParms'.localControlDescriptor, 'LocalControlDescriptor') ->    LCD  = SP#'StreamParms'.localControlDescriptor,    PP   = LCD#'LocalControlDescriptor'.propertyParms,    LCD2 = LCD#'LocalControlDescriptor'{propertyParms = lists:reverse(PP)},    SP#'StreamParms'{localControlDescriptor = LCD2};do_merge_streamParms([], SP) ->    SP.do_merge_control_streamParms([{SubTag, SD} | T] = All, LCD) ->    case SubTag of        group when LCD#'LocalControlDescriptor'.reserveGroup == asn1_NOVALUE ->            LCD2 = LCD#'LocalControlDescriptor'{reserveGroup = SD},            do_merge_control_streamParms(T, LCD2);        value when LCD#'LocalControlDescriptor'.reserveValue == asn1_NOVALUE ->            LCD2 = LCD#'LocalControlDescriptor'{reserveValue = SD},            do_merge_control_streamParms(T, LCD2);        mode when LCD#'LocalControlDescriptor'.streamMode == asn1_NOVALUE ->            LCD2 = LCD#'LocalControlDescriptor'{streamMode = SD},            do_merge_control_streamParms(T, LCD2);        prop ->            PP = LCD#'LocalControlDescriptor'.propertyParms,            LCD2 = LCD#'LocalControlDescriptor'{propertyParms = [SD | PP]},            do_merge_control_streamParms(T, LCD2);        _ ->            return_error(0, {do_merge_control_streamParms, [All, LCD]})  end;do_merge_control_streamParms([], LCD) ->    LCD.merge_terminationStateDescriptor(Parms) ->    TSD = #'TerminationStateDescriptor'{propertyParms = []},    do_merge_terminationStateDescriptor(Parms, TSD).do_merge_terminationStateDescriptor([{Tag, Val} | T], TSD) ->    case Tag of        serviceState when TSD#'TerminationStateDescriptor'.serviceState == asn1_NOVALUE ->            TSD2 = TSD#'TerminationStateDescriptor'{serviceState = Val},            do_merge_terminationStateDescriptor(T, TSD2);        eventBufferControl when TSD#'TerminationStateDescriptor'.eventBufferControl == asn1_NOVALUE->            TSD2 = TSD#'TerminationStateDescriptor'{eventBufferControl = Val},            do_merge_terminationStateDescriptor(T, TSD2);        propertyParm ->            PP = TSD#'TerminationStateDescriptor'.propertyParms,            TSD2 = TSD#'TerminationStateDescriptor'{propertyParms = [Val | PP]},            do_merge_terminationStateDescriptor(T, TSD2)    end;do_merge_terminationStateDescriptor([], TSD) ->    PP = TSD#'TerminationStateDescriptor'.propertyParms,    TSD#'TerminationStateDescriptor'{propertyParms = lists:reverse(PP)}.ensure_prop_groups({_TokenTag, _Line, Text}) ->    Group  = [],    Groups = [],    parse_prop_name(Text, Group, Groups).parse_prop_name([Char | Rest] = All, Group, Groups) ->    case ?classify_char(Char) of        white_space ->            parse_prop_name(Rest, Group, Groups);        end_of_line ->            parse_prop_name(Rest, Group, Groups);        _ ->            Name = [],            do_parse_prop_name(All, Name, Group, Groups)    end;parse_prop_name([] = All, Group, Groups) ->    Name = [],    do_parse_prop_name(All, Name, Group, Groups).do_parse_prop_name([Char | Rest], Name, Group, Groups) ->    case ?classify_char(Char) of        safe_char_upper ->            do_parse_prop_name(Rest, [Char | Name], Group, Groups);        safe_char ->            do_parse_prop_name(Rest, [Char | Name], Group, Groups);        rest_char when Char == $=, Name /= [] ->            %% Now we have a complete name            if                Name == "v", Group /= [] ->                    %% v= is a property group delimiter,                    %% lets create yet another property group.                    Groups2 = [lists:reverse(Group) | Groups],                    Group2 = [],                    parse_prop_value(Rest, Name, Group2, Groups2);                true ->                    %% Use current property group                    parse_prop_value(Rest, Name, Group, Groups)            end;        _ ->            return_error(0, {bad_prop_name, lists:reverse(Name), Char})    end;do_parse_prop_name([], [], [], Groups) ->    lists:reverse(Groups);do_parse_prop_name([], [], Group, Groups) ->    Group2 = lists:reverse(Group),    lists:reverse([Group2 | Groups]);do_parse_prop_name([], Name, Group, Groups) when Name /= [] ->    %% Assume end of line    Value = [],    PP = make_prop_parm(Name, Value),    Group2 = lists:reverse([PP | Group]),    lists:reverse([Group2 | Groups]).                   parse_prop_value(Chars, Name, Group, Groups) ->    Value = [],    do_parse_prop_value(Chars, Name, Value, Group, Groups).do_parse_prop_value([Char | Rest], Name, Value, Group, Groups) ->    case ?classify_char(Char) of        end_of_line ->            %% Now we have a complete "name=value" pair            PP = make_prop_parm(Name, Value),            parse_prop_name(Rest, [PP | Group], Groups);        _ ->            do_parse_prop_value(Rest, Name, [Char | Value], Group, Groups)    end;do_parse_prop_value([], Name, Value, Group, Groups) ->    %% Assume end of line    PP = make_prop_parm(Name, Value),    Group2 = lists:reverse([PP | Group]),    lists:reverse([Gro

⌨️ 快捷键说明

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