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

📄 megaco_text_mini_parser.hrl

📁 OTP是开放电信平台的简称
💻 HRL
📖 第 1 页 / 共 4 页
字号:
%                     TopReq2 = Desc ++ TopReq, %% OTP-4088%                     do_merge_action_reply(T, CtxReq, TopReq2, CmdList)%             end%     end;% do_merge_action_reply([], CtxReq, TopReq, CmdList) ->%     #'ActionReply'{contextReply = strip_contextRequest(CtxReq, TopReq),%                    commandReply = lists:reverse(CmdList)}.% strip_contextRequest(R, TopReq)%   when R#'ContextRequest'.priority    == asn1_NOVALUE,%        R#'ContextRequest'.emergency   == asn1_NOVALUE,%        TopReq == [] ->%     asn1_NOVALUE;% strip_contextRequest(R, []) ->%     R#'ContextRequest'{topologyReq = asn1_NOVALUE};% strip_contextRequest(R, TopReq) ->%     R#'ContextRequest'{topologyReq = TopReq}. %% OTP-4088% strip_contextAttrAuditRequest(R)%   when R#'ContextAttrAuditRequest'.priority  == asn1_NOVALUE,%        R#'ContextAttrAuditRequest'.emergency == asn1_NOVALUE,%        R#'ContextAttrAuditRequest'.topology  == asn1_NOVALUE ->%     asn1_NOVALUE;% strip_contextAttrAuditRequest(R) ->%     R.% 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});%         _ ->%             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 ->%             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([Group2 | Groups]).% make_prop_parm(Name, Value) ->%     #'PropertyParm'{name  = lists:reverse(Name),%                     value = [lists:reverse(Value)]}.ensure_uint({_TokenTag, Line, Val}, Min, Max) when integer(Val) ->    if        integer(Min), Val >= Min ->            if                integer(Max), Val =< Max ->                    Val;                Max == infinity ->                    Val;                true ->                    return_error(Line, {too_large_integer, Val, Max})            end;        true ->            return_error(Line, {too_small_integer, Val, Min})    end;ensure_uint({TokenTag, Line, Text}, Min, Max) ->    case catch list_to_integer(Text) of        {'EXIT', _} ->            return_error(Line, {not_an_integer, Text});        Val when integer(Val) ->            ensure_uint({TokenTag, Line, Val}, Min, Max)   end;ensure_uint(Val, Min, Max) ->    ensure_uint({uint, 0, Val}, Min, Max).ensure_uint16(Int) ->    ensure_uint(Int, 0, 65535).% ensure_uint32(Int) ->%     ensure_uint(Int, 0, 4294967295) .%% OTP-4710ensure_hex({_TokenTag, _Line, [$0, $x |Chars]}, Min, Max) ->    ensure_uint(length(Chars), Min, Max),    hex_to_int(Chars, []);ensure_hex({_TokenTag, _Line, [$0, $X |Chars]}, Min, Max) ->    ensure_uint(length(Chars), Min, Max),    hex_to_int(Chars, []);ensure_hex([$0, $x |Chars], Min, Max) ->    ensure_uint(length(Chars), Min, Max),    hex_to_int(Chars, []);ensure_hex([$0, $X |Chars], Min, Max) ->    ensure_uint(length(Chars), Min, Max),    hex_to_int(Chars, []).%% OTP-4710hex_to_int([], Acc) ->    lists:reverse(Acc);hex_to_int([Char1,Char2|Tail], Acc) ->    Int1 = hchar_to_int(Char1),    Int2 = hchar_to_int(Char2),    Val  = Int2 bor (Int1 bsl 4),    hex_to_int(Tail, [Val| Acc]);hex_to_int([Char], Acc) ->    Int = hchar_to_int(Char),    lists:reverse([Int|Acc]).hchar_to_int(Char) when $0 =< Char, Char =< $9 ->    Char - $0;hchar_to_int(Char) when $A =< Char, Char =< $F ->    Char - $A + 10; % OTP-4710hchar_to_int(Char) when $a =< Char, Char =< $f ->    Char - $a + 10. % OTP-4710% value_of({_TokenTag, _Line, Text}) ->%     Text.% d(F) ->%     d(F, []).% d(F, A) ->%     d(get(dbg), F, A).% d(true, F, A) ->%     io:format("~p:" ++ F ++ "~n", [?MODULE|A]);% d(_, _, _) ->%     ok.

⌨️ 快捷键说明

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