📄 megaco_binary_transformer_v2.erl
字号:
tr_opt_SecondRequestedActions(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_SecondRequestedActions(#'SecondRequestedActions'{keepActive = Keep, eventDM = DM, signalsDescriptor = SigDesc}, State) -> #'SecondRequestedActions'{keepActive = tr_opt_keepActive(Keep, State), eventDM = tr_opt_EventDM(DM, State), signalsDescriptor = tr_opt_SignalsDescriptor(SigDesc, State)}.tr_EventBufferDescriptor(EventSpecs, State) -> [tr_EventSpec(ES, State) || ES <- EventSpecs].tr_EventSpec(#'EventSpec'{eventName = Name, streamID = Id, eventParList = Parms}, State) -> #'EventSpec'{eventName = tr_EventName(Name, State), streamID = tr_opt_StreamID(Id, State), eventParList = [tr_EventParameter(P, Name, State) || P <- Parms]}.tr_opt_SignalsDescriptor(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_SignalsDescriptor(SigDesc, State) -> tr_SignalsDescriptor(SigDesc, State).tr_SignalsDescriptor(SigDesc, State) when list(SigDesc) -> [tr_SignalRequest(SigReq, State) || SigReq <- SigDesc].tr_SignalRequest({Tag, Val}, State) -> Val2 = case Tag of signal -> tr_Signal(Val, State); seqSigList -> tr_SeqSigList(Val, State) end, {Tag, Val2}.tr_SeqSigList(#'SeqSigList'{id = Id, signalList = SigList}, State) when list(SigList) -> #'SeqSigList'{id = tr_UINT16(Id, State), signalList = [tr_Signal(Sig, State) || Sig <- SigList]}.tr_Signal(#'Signal'{signalName = Name, streamID = Id, sigType = Type, duration = Dur, notifyCompletion = Compl, keepActive = Keep, sigParList = Parms}, State) -> #'Signal'{signalName = tr_SignalName(Name, State), streamID = tr_opt_StreamID(Id, State), sigType = tr_opt_SignalType(Type, State), duration = tr_opt_duration(Dur, State), notifyCompletion = tr_opt_NotifyCompletion(Compl, State), keepActive = tr_opt_keepActive(Keep, State), sigParList = [tr_SigParameter(P, Name, State) || P <- Parms]}.tr_opt_duration(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_duration(Dur, State) -> tr_UINT16(Dur, State).tr_opt_NotifyCompletion(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_NotifyCompletion(Items, State) when list(Items) -> [tr_notifyCompletionItem(I, State) || I <- Items].tr_notifyCompletionItem(Item, _State) -> case Item of onTimeOut -> onTimeOut; onInterruptByEvent -> onInterruptByEvent; onInterruptByNewSignalDescr -> onInterruptByNewSignalDescr; otherReason -> otherReason end.tr_opt_SignalType(Type, _State) -> case Type of asn1_NOVALUE -> asn1_NOVALUE; brief -> brief; onOff -> onOff; timeOut -> timeOut end.tr_SignalName(Name, State) -> Constraint = fun(Item) -> tr_PkgdName(Item, State) end, resolve(signal, Name, State, Constraint).tr_SigParameter(#'SigParameter'{sigParameterName = ParName, value = Value, extraInfo = Extra}, SigName, State) -> Constraint = fun(Item) -> tr_Name(Item, State) end, N = resolve({signal_parameter, SigName}, ParName, State, Constraint), #'SigParameter'{sigParameterName = N, value = tr_Value(Value, State), extraInfo = tr_opt_extraInfo(Extra, State)}.tr_opt_RequestID(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_RequestID(Id, State) -> tr_RequestID(Id, State).tr_RequestID(Id, _State) when Id == ?megaco_all_request_id -> ?megaco_all_request_id;tr_RequestID(Id, State) -> tr_UINT32(Id, State).tr_ModemDescriptor(_MD, _State) -> deprecated.% tr_ModemDescriptor(#'ModemDescriptor'{mtl = Types,% mpl = Props},% State) when list(Types), list(Props) -> % %% BUGBUG: Does not handle extensionParameter% #'ModemDescriptor'{mtl = [tr_ModemType(T, State) || T <- Types],% mpl = [tr_PropertyParm(P, State) || P <- Props]}.% tr_ModemType(Type, _State) ->% %% BUGBUG: Does not handle extensionParameter% case Type of% v18 -> v18;% v22 -> v22;% v22bis -> v22bis;% v32 -> v32;% v32bis -> v32bis;% v34 -> v34;% v90 -> v90;% v91 -> v91;% synchISDN -> synchISDN% end.tr_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name, digitMapValue = Value}, State) -> #'DigitMapDescriptor'{digitMapName = tr_opt_DigitMapName(Name, State), digitMapValue = tr_opt_DigitMapValue(Value, State)}.tr_opt_DigitMapName(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_DigitMapName(Name, State) -> tr_DigitMapName(Name, State).tr_DigitMapName(Name, State) -> Constraint = fun(Item) -> tr_Name(Item, State) end, resolve(dialplan, Name, State, Constraint).tr_opt_DigitMapValue(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_DigitMapValue(Value, State) -> tr_DigitMapValue(Value, State).tr_DigitMapValue(#'DigitMapValue'{digitMapBody = Body, startTimer = Start, shortTimer = Short, longTimer = Long}, State) -> #'DigitMapValue'{startTimer = tr_opt_timer(Start, State), shortTimer = tr_opt_timer(Short, State), longTimer = tr_opt_timer(Long, State), digitMapBody = tr_STRING(Body, State)}. %% BUGBUG: digitMapBody not handled at alltr_opt_timer(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_timer(Timer, State) -> tr_DIGIT(Timer, State, 0, 99).tr_ServiceChangeParm(#'ServiceChangeParm'{serviceChangeMethod = Method, serviceChangeAddress = Addr, serviceChangeVersion = Version, serviceChangeProfile = Profile, serviceChangeReason = Reason, serviceChangeDelay = Delay, serviceChangeMgcId = MgcId, timeStamp = Time, serviceChangeInfo = Info}, State) -> #'ServiceChangeParm'{serviceChangeMethod = tr_ServiceChangeMethod(Method, State), serviceChangeAddress = tr_opt_ServiceChangeAddress(Addr, State), serviceChangeVersion = tr_opt_serviceChangeVersion(Version, State), serviceChangeProfile = tr_opt_ServiceChangeProfile(Profile, State), serviceChangeReason = tr_serviceChangeReason(Reason, State), serviceChangeDelay = tr_opt_serviceChangeDelay(Delay, State), serviceChangeMgcId = tr_opt_serviceChangeMgcId(MgcId, State), timeStamp = tr_opt_TimeNotation(Time, State), serviceChangeInfo = tr_opt_AuditDescriptor(Info, State)}.tr_ServiceChangeMethod(Method, _State) -> case Method of failover -> failover; forced -> forced; graceful -> graceful; restart -> restart; disconnected -> disconnected; handOff -> handOff end. %% BUGBUG: extensiontr_opt_ServiceChangeAddress(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_ServiceChangeAddress({Tag, Val}, State) -> Val2 = case Tag of portNumber -> tr_portNumber(Val, State); ip4Address -> tr_IP4Address(Val, State); ip6Address -> tr_IP6Address(Val, State); domainName -> tr_DomainName(Val, State); deviceName -> tr_PathName(Val, State); mtpAddress -> tr_mtpAddress(Val, State) end, {Tag, Val2}.tr_opt_serviceChangeVersion(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_serviceChangeVersion(Version, State) -> tr_version(Version, State).tr_opt_ServiceChangeProfile(asn1_NOVALUE, _State) -> asn1_NOVALUE;%% Decodetr_opt_ServiceChangeProfile({'ServiceChangeProfile', ProfileName}, State) -> case string:tokens(ProfileName, "/") of [Name0, Version0] -> Name = tr_STRING(Name0, State, 1, 64), Version = tr_version(list_to_integer(Version0), State), #'ServiceChangeProfile'{profileName = Name, version = Version} end;%% Encodetr_opt_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name0, version = Version0}, State) -> Name = tr_STRING(Name0, State, 1, 64), Version = tr_version(Version0, State), ProfileName = lists:flatten(io_lib:format("~s/~w", [Name, Version])), {'ServiceChangeProfile', ProfileName}. tr_serviceChangeReason([_] = Reason, State) -> tr_Value(Reason, State).tr_opt_serviceChangeDelay(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_serviceChangeDelay(Delay, State) -> tr_UINT32(Delay, State).tr_opt_serviceChangeMgcId(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_serviceChangeMgcId(MgcId, State) -> tr_MId(MgcId, State).tr_opt_portNumber(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_portNumber(Port, State) -> tr_portNumber(Port, State).tr_portNumber(Port, State) when integer(Port), Port >= 0 -> tr_UINT16(Port, State).tr_ServiceChangeResParm(#'ServiceChangeResParm'{serviceChangeMgcId = MgcId, serviceChangeAddress = Addr, serviceChangeVersion = Version, serviceChangeProfile = Profile, timeStamp = Time}, State) -> #'ServiceChangeResParm'{serviceChangeMgcId = tr_opt_serviceChangeMgcId(MgcId, State), serviceChangeAddress = tr_opt_ServiceChangeAddress(Addr, State), serviceChangeVersion = tr_opt_serviceChangeVersion(Version, State), serviceChangeProfile = tr_opt_ServiceChangeProfile(Profile, State), timeStamp = tr_opt_TimeNotation(Time, State)}.tr_PackagesDescriptor(Items, State) when list(Items) -> [tr_PackagesItem(I, State) || I <- Items].tr_PackagesItem(#'PackagesItem'{packageName = Name, packageVersion = Version}, State) -> Constraint = fun(Item) -> tr_Name(Item, State) end, #'PackagesItem'{packageName = resolve(package, Name, State, Constraint), packageVersion = tr_UINT16(Version, State)}.tr_StatisticsDescriptor(Parms, State) when list(Parms) -> [tr_StatisticsParameter(P, State) || P <- Parms].tr_StatisticsParameter(#'StatisticsParameter'{statName = Name, statValue = Value}, State) -> Constraint = fun(Item) -> tr_PkgdName(Item, State) end, #'StatisticsParameter'{statName = resolve(statistics, Name, State, Constraint), statValue = tr_opt_Value(Value, State)}.tr_opt_TimeNotation(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_TimeNotation(#'TimeNotation'{date = Date, time = Time}, State) -> #'TimeNotation'{date = tr_STRING(Date, State, 8, 8), % "yyyymmdd" time = tr_STRING(Time, State, 8, 8)}.% "hhmmssss"%% BUGBUG: Does not verify that string must contain at least one char%% BUGBUG: This violation of the is required in order to comply with%% BUGBUG: the dd/ce ds parameter that may possibly be empty.tr_opt_Value(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_Value(Value, State) -> tr_Value(Value, State).tr_Value(Strings, _State) when list(Strings) -> [[Char || Char <- String] || String <- Strings].%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Encode an octet string, escape } by \ if necessary tr_OCTET_STRING(String, _State, Min, Max) when list(String) -> verify_count(length(String), Min, Max), String.tr_QUOTED_STRING(String, _State) when list(String) -> verify_count(length(String), 1, infinity), String.%% The internal format of hex digits is a list of octets%% Min and Max means #hexDigits%% Leading zeros are prepended in order to fulfill Mintr_HEXDIG(Octets, _State, Min, Max) when list(Octets) -> verify_count(length(Octets), Min, Max), Octets.tr_DIGIT(Val, State, Min, Max) -> tr_integer(Val, State, Min, Max).tr_STRING(String, _State) when list(String) -> String.tr_STRING(String, _State, Min, Max) when list(String) -> verify_count(length(String), Min, Max), String.tr_opt_UINT16(Val, State) -> tr_opt_integer(Val, State, 0, 65535).tr_UINT16(Val, State) -> tr_integer(Val, State, 0, 65535).tr_UINT32(Val, State) -> tr_integer(Val, State, 0, 4294967295).tr_opt_integer(asn1_NOVALUE, _State, _Min, _Max) -> asn1_NOVALUE;tr_opt_integer(Int, State, Min, Max) -> tr_integer(Int, State, Min, Max).tr_integer(Int, _State, Min, Max) -> verify_count(Int, Min, Max), Int.%% Verify that Count is within the range of Min and Maxverify_count(Count, Min, Max) -> if integer(Count) -> if integer(Min), Count >= Min -> if integer(Max), Count =< Max -> Count; Max == infinity -> Count; true -> ?error({count_too_large, Count, Max}) end; true -> ?error({count_too_small, Count, Min}) end; true -> ?error({count_not_an_integer, Count}) end.% i(F,A) ->% S1 = io_lib:format("TRANSF-v2: " ++ F ++ "~n",A),% S2 = lists:flatten(S1),% io:format("~s",[S2]).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -