📄 megaco_binary_transformer_v2.erl
字号:
descriptors = tr_ammDescriptors(DescList, [], State)}.tr_ammDescriptors([], Acc, _State) -> lists:reverse(Acc);tr_ammDescriptors([Desc|Descs], Acc, State) -> case tr_ammDescriptor(Desc, State) of {_, deprecated} when State#state.mode == encode -> ?error({deprecated, Desc}); {_, deprecated} when State#state.mode == decode -> %% SKIP tr_ammDescriptors(Descs, Acc, State); {_, deprecated} -> %% SKIP tr_ammDescriptors(Descs, Acc, State); NewDesc -> tr_ammDescriptors(Descs, [NewDesc|Acc], State) end.tr_ammDescriptor({Tag, Desc}, State) -> Desc2 = case Tag of mediaDescriptor -> tr_MediaDescriptor(Desc, State); modemDescriptor -> tr_ModemDescriptor(Desc, State); muxDescriptor -> tr_MuxDescriptor(Desc, State); eventsDescriptor -> tr_EventsDescriptor(Desc, State); eventBufferDescriptor -> tr_EventBufferDescriptor(Desc, State); signalsDescriptor -> tr_SignalsDescriptor(Desc, State); digitMapDescriptor -> tr_DigitMapDescriptor(Desc, State); auditDescriptor -> tr_AuditDescriptor(Desc, State) end, {Tag, Desc2}.tr_AmmsReply(#'AmmsReply'{terminationID = IdList, terminationAudit = TermAudit}, State) -> TermAudit2 = case TermAudit of asn1_NOVALUE -> asn1_NOVALUE; _ -> tr_TerminationAudit(TermAudit, State) end, #'AmmsReply'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], terminationAudit = TermAudit2}.tr_SubtractRequest(#'SubtractRequest'{terminationID = IdList, auditDescriptor = Desc}, State) -> #'SubtractRequest'{terminationID = [tr_TerminationID(Id, State) || Id <- IdList], auditDescriptor = tr_opt_AuditDescriptor(Desc, State)}.tr_AuditRequest(#'AuditRequest'{terminationID = Id, auditDescriptor = Desc}, State) -> #'AuditRequest'{terminationID = tr_TerminationID(Id, State), auditDescriptor = tr_AuditDescriptor(Desc, State)}.%% auditReply = (AuditValueToken / AuditCapToken ) %% ( contextTerminationAudit / auditOther)%% auditOther = EQUAL TerminationID LBRKT %% terminationAudit RBRKT%% terminationAudit = auditReturnParameter *(COMMA auditReturnParameter) %% %% contextTerminationAudit = EQUAL CtxToken ( terminationIDList / %% LBRKT errorDescriptor RBRKT )tr_AuditReply({Tag, Val}, State) -> Val2 = case Tag of contextAuditResult -> [tr_TerminationID(Id, State) || Id <- Val]; error -> tr_ErrorDescriptor(Val, State); auditResult -> tr_AuditResult(Val, State) end, {Tag, Val2}.tr_AuditResult(#'AuditResult'{terminationID = Id, terminationAuditResult = AuditRes}, State) -> #'AuditResult'{terminationID = tr_TerminationID(Id, State), terminationAuditResult = tr_TerminationAudit(AuditRes, State)}.tr_opt_AuditDescriptor(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_AuditDescriptor(Desc, State) -> tr_AuditDescriptor(Desc, State).%% BUGBUG BUGBUG BUGBUG %% With this construction it is possible to have both auditToken%% and auditPropertyToken, but it is actually valid?tr_AuditDescriptor(#'AuditDescriptor'{auditToken = Tokens, auditPropertyToken = APTs}, State) -> Tokens2 = case Tokens of asn1_NOVALUE -> asn1_NOVALUE; _ -> [tr_auditItem(Token, State) || Token <- Tokens] end, %% v2 APTs2 = case APTs of asn1_NOVALUE -> asn1_NOVALUE; _ -> [tr_indAuditParameter(APT, State) || APT <- APTs] end, #'AuditDescriptor'{auditToken = Tokens2, auditPropertyToken = APTs2}. tr_auditItem(Token, _State) -> case Token of muxToken -> muxToken; modemToken -> modemToken; mediaToken -> mediaToken; eventsToken -> eventsToken; signalsToken -> signalsToken; digitMapToken -> digitMapToken; statsToken -> statsToken; observedEventsToken -> observedEventsToken; packagesToken -> packagesToken; eventBufferToken -> eventBufferToken end.%% --- v2 begin ---tr_indAuditParameter({Tag, Val}, State) -> Val2 = case Tag of indAudMediaDescriptor -> tr_indAudMediaDescriptor(Val, State); indAudEventsDescriptor -> tr_indAudEventsDescriptor(Val, State); indAudSignalsDescriptor -> tr_indAudSignalsDescriptor(Val, State); indAudDigitMapDescriptor -> tr_indAudDigitMapDescriptor(Val, State); indAudEventBufferDescriptor -> tr_indAudEventBufferDescriptor(Val, State); indAudStatisticsDescriptor -> tr_indAudStatisticsDescriptor(Val, State); indAudPackagesDescriptor -> tr_indAudPackagesDescriptor(Val, State) end, {Tag, Val2}.%% -tr_indAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD, streams = S}, State) -> TSD2 = case TSD of asn1_NOVALUE -> asn1_NOVALUE; _ -> tr_indAudTerminationStateDescriptor(TSD, State) end, S2 = case S of asn1_NOVALUE -> asn1_NOVALUE; {oneStream, OS} -> {oneStream, tr_indAudStreamParms(OS, State)}; {multiStream, MS} -> MS2 = [tr_indAudStreamDescriptor(MS1, State) || MS1 <- MS], {multiStream, MS2} end, #'IndAudMediaDescriptor'{termStateDescr = TSD2, streams = S2}.tr_indAudTerminationStateDescriptor(Val, State) when record(Val, 'IndAudTerminationStateDescriptor') -> #'IndAudTerminationStateDescriptor'{propertyParms = Parms, eventBufferControl = EBC, serviceState = SS} = Val, Parms2 = [tr_indAudPropertyParm(Parm, State) || Parm <- Parms], EBC2 = tr_opt_null(EBC, State), SS2 = tr_opt_null(SS, State), #'IndAudTerminationStateDescriptor'{propertyParms = Parms2, eventBufferControl = EBC2, serviceState = SS2}. tr_indAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD, localDescriptor = LD, remoteDescriptor = RD}, State) -> LCD2 = case LCD of asn1_NOVALUE -> asn1_NOVALUE; _ -> tr_indAudLocalControlDescriptor(LCD, State) end, LD2 = case LD of asn1_NOVALUE -> asn1_NOVALUE; _ -> tr_indAudLocalRemoteDescriptor(LD, State) end, RD2 = case RD of asn1_NOVALUE -> asn1_NOVALUE; _ -> tr_indAudLocalRemoteDescriptor(RD, State) end, #'IndAudStreamParms'{localControlDescriptor = LCD2, localDescriptor = LD2, remoteDescriptor = RD2}. tr_indAudLocalControlDescriptor(Val, State) when record(Val, 'IndAudLocalControlDescriptor') -> #'IndAudLocalControlDescriptor'{streamMode = M, reserveValue = V, reserveGroup = G, propertyParms = P} = Val, M2 = tr_opt_null(M, State), V2 = tr_opt_null(V, State), G2 = tr_opt_null(G, State), P2 = tr_indAudLocalControlDescriptor_propertyParms(P, State), #'IndAudLocalControlDescriptor'{streamMode = M2, reserveValue = V2, reserveGroup = G2, propertyParms = P2}.tr_indAudLocalControlDescriptor_propertyParms(Parms, State) when list(Parms), length(Parms) > 0 -> [tr_indAudPropertyParm(Parm, State) || Parm <- Parms];tr_indAudLocalControlDescriptor_propertyParms(asn1_NOVALUE, _State) -> asn1_NOVALUE.tr_indAudLocalRemoteDescriptor(#'IndAudLocalRemoteDescriptor'{propGroupID = ID, propGrps = Grps}, State) -> #'IndAudLocalRemoteDescriptor'{propGroupID = tr_opt_UINT16(ID, State), propGrps = tr_indAudPropertyGroup(Grps, State)}.tr_indAudPropertyGroup(Grps, State) when list(Grps) -> [tr_indAudPropertyParm(Parm, State) || Parm <- Grps].tr_indAudPropertyParm(#'IndAudPropertyParm'{name = Name0}, State) -> Constraint = fun(Item) -> tr_PkgdName(Item, State) end, Name = resolve(property, Name0, State, Constraint), #'IndAudPropertyParm'{name = Name}.tr_indAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = ID, streamParms = Parms}, State) -> #'IndAudStreamDescriptor'{streamID = tr_StreamID(ID, State), streamParms = tr_indAudStreamParms(Parms, State)}.%% -tr_indAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID, pkgdName = Name0, streamID = SID}, State) -> Constraint = fun(Item) -> tr_PkgdName(Item, State) end, Name = resolve(event, Name0, State, Constraint), #'IndAudEventsDescriptor'{requestID = tr_opt_RequestID(RID, State), pkgdName = Name, streamID = tr_opt_StreamID(SID, State)}.%% -tr_indAudSignalsDescriptor({Tag, Val}, State) -> case Tag of signal -> {signal, tr_indAudSignal(Val, State)}; seqSigList -> {seqSigList, tr_indAudSeqSigList(Val, State)} end.tr_opt_indAudSignal(asn1_NOVALUE, _State) -> asn1_NOVALUE;tr_opt_indAudSignal(Val, State) -> tr_indAudSignal(Val, State).tr_indAudSignal(#'IndAudSignal'{signalName = Name0, streamID = SID}, State) -> Constraint = fun(Item) -> tr_PkgdName(Item, State) end, Name = resolve(signal, Name0, State, Constraint), #'IndAudSignal'{signalName = Name, streamID = tr_opt_StreamID(SID, State)}.tr_indAudSeqSigList(#'IndAudSeqSigList'{id = ID, signalList = SigList}, State) -> #'IndAudSeqSigList'{id = tr_integer(ID, State, 0, 65535), signalList = tr_opt_indAudSignal(SigList, State)}.%% -tr_indAudDigitMapDescriptor(#'IndAudDigitMapDescriptor'{digitMapName = Name}, State) -> #'IndAudDigitMapDescriptor'{digitMapName = tr_opt_DigitMapName(Name, State)}.%% -tr_indAudEventBufferDescriptor(#'IndAudEventBufferDescriptor'{eventName = N, streamID = SID}, State) ->% i("tr_indAudEventBufferDescriptor -> entry with"% "~n N: ~p"% "~n SID: ~p", [N, SID]), Constraint = fun(Item) -> tr_PkgdName(Item, State) end, Name = resolve(event, N, State, Constraint),% i("tr_indAudEventBufferDescriptor -> entry with"% "~n Name: ~p", [Name]), #'IndAudEventBufferDescriptor'{eventName = Name, streamID = tr_opt_StreamID(SID, State)}.%% -tr_indAudStatisticsDescriptor(#'IndAudStatisticsDescriptor'{statName = N}, State) ->% i("tr_indAudEventBufferDescriptor -> entry with"% "~n N: ~p"% "~n SID: ~p", [N, SID]), Constraint = fun(Item) -> tr_PkgdName(Item, State) end, Name = resolve(statistics, N, State, Constraint), #'IndAudStatisticsDescriptor'{statName = Name}.%% -tr_indAudPackagesDescriptor(#'IndAudPackagesDescriptor'{packageName = N, packageVersion = V}, State) ->% i("tr_indAudPackagesDescriptor -> entry with"% "~n N: ~p"% "~n V: ~p", [N, V]), Constraint = fun(Item) -> tr_Name(Item, State) end, Name = resolve(package, N, State, Constraint),% i("tr_indAudPackagesDescriptor -> entry with"% "~n Name: ~p", [Name]), #'IndAudPackagesDescriptor'{packageName = Name, packageVersion = tr_integer(V, State, 0, 99)}.%% -- v2 end --tr_TerminationAudit(ParmList, State) when list(ParmList) -> do_tr_TerminationAudit(ParmList, [], State).do_tr_TerminationAudit([], Acc, _State) -> lists:reverse(Acc);do_tr_TerminationAudit([Parm|ParmList], Acc, State) -> case tr_AuditReturnParameter(Parm, State) of {_, deprecated} when State#state.mode == encode -> ?error({deprecated, Parm}); {_, deprecated} when State#state.mode == decode -> %% SKIP do_tr_TerminationAudit(ParmList, Acc, State); {_, deprecated} -> %% SKIP do_tr_TerminationAudit(ParmList, Acc, State); NewParm -> do_tr_TerminationAudit(ParmList, [NewParm|Acc], State) end.tr_AuditReturnParameter({Tag, Val}, State) -> Val2 = case Tag of errorDescriptor -> tr_ErrorDescriptor(Val, State); mediaDescriptor -> tr_MediaDescriptor(Val, State); modemDescriptor -> tr_ModemDescriptor(Val, State); muxDescriptor -> tr_MuxDescriptor(Val, State); eventsDescriptor -> tr_EventsDescriptor(Val, State); eventBufferDescriptor ->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -