megaco_text_gen_v2.hrl

来自「OTP是开放电信平台的简称」· HRL 代码 · 共 2,255 行 · 第 1/5 页

HRL
2,255
字号
    [     enc_Name(Name, State),     enc_propertyParmValues(Value, Extra, State)    ].enc_ServiceChangeRequest(Val, State)  when record(Val, 'ServiceChangeRequest') ->    [     %% Assume that Token is added elsewhere     ?EQUAL,     enc_TerminationIDList1(Val#'ServiceChangeRequest'.terminationID, State),     ?LBRKT_INDENT(State),     enc_ServiceChangeParm(Val#'ServiceChangeRequest'.serviceChangeParms,			   ?INC_INDENT(State)),     ?RBRKT_INDENT(State)    ].%% serviceChangeReply   = ServiceChangeToken EQUAL TerminationID%% 			  [LBRKT (errorDescriptor / %% 			  serviceChangeReplyDescriptor) RBRKT]%% serviceChangeReplyDescriptor = ServicesToken LBRKT%% 			  servChgReplyParm *(COMMA servChgReplyParm) RBRKT%% %% ;at-most-once. Version is REQUIRED on first ServiceChange response%% servChgReplyParm     = (serviceChangeAddress / serviceChangeMgcId /%% 			  serviceChangeProfile / serviceChangeVersion )enc_ServiceChangeReply(Val, State)  when record(Val, 'ServiceChangeReply') ->    [     %% Assume that Token is added elsewhere     ?EQUAL,     enc_TerminationIDList1(Val#'ServiceChangeReply'.terminationID, State),     enc_ServiceChangeResult(Val#'ServiceChangeReply'.serviceChangeResult, State)     ].enc_ServiceChangeResult({'ServiceChangeResult',Val}, State) ->    enc_ServiceChangeResult(Val, State);enc_ServiceChangeResult({Tag, Val}, State) ->    case Tag of	errorDescriptor ->	    [	     ?LBRKT_INDENT(State),	     enc_ErrorDescriptor(Val, ?INC_INDENT(State)),	     ?RBRKT_INDENT(State)	    ];	serviceChangeResParms ->	    case enc_ServiceChangeResParm(Val, ?INC_INDENT(?INC_INDENT(State))) of		[] ->		    [];		ResParms ->		    [		     ?LBRKT_INDENT(State),		     ?ServicesToken,		     fun(_S) ->			     [			      ?LBRKT_INDENT(_S),			      ResParms,			      ?RBRKT_INDENT(_S)			     ]		     end(?INC_INDENT(State)),		     ?RBRKT_INDENT(State)		    ]	    end;	_ ->	    error({invalid_ServiceChangeResult_tag, Tag})    end.%% Required length of termination ID list is 1enc_TerminationIDList1({'TerminationIDList',Val}, State) ->    enc_TerminationIDList1(Val, State);enc_TerminationIDList1([Singleton], State) ->    enc_TerminationID(Singleton, State).%% No required length of termination ID listenc_TerminationIDListN({'TerminationIDList',Val}, State) ->    enc_TerminationIDListN(Val, State);enc_TerminationIDListN([TID], State) ->    [     ?LBRKT_INDENT(State),     enc_TerminationID(TID, State),     ?RBRKT_INDENT(State)    ];enc_TerminationIDListN(TIDs, State) ->    [     ?LBRKT_INDENT(State),     enc_list([{TIDs, fun enc_TerminationID/2}], State),     ?RBRKT_INDENT(State)    ].%% TerminationID        = "ROOT" / pathNAME / "$" / "*"%% ; Total length of pathNAME must not exceed 64 chars.%% pathNAME             = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" ) %% 			  ["@" pathDomainName ]enc_TerminationID(Tid, State)  when record(Tid,  megaco_term_id) ->    List = [{Tid#megaco_term_id.id, fun enc_tid_component/2 }],    enc_list(List, State, fun(_S) -> ?SLASH end, false).    enc_tid_component(Component, State) when list(Component) ->    [enc_tid_sub_component(Sub, State) || Sub <- Component];enc_tid_component(Invalid, _State) ->    error({invalid_id_list_component, Invalid}).enc_tid_sub_component(Sub, _State) ->    case Sub of	all    -> ?megaco_all;	choose -> ?megaco_choose;	Char when integer(Char) -> Char    end.%% mediaDescriptor      = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT%% ; at-most-once per item%% ; and either streamParm or streamDescriptor but not both%% mediaParm            = (streamParm / streamDescriptor / %% 			   terminationStateDescriptor)%% ; at-most-once%% streamParm           = ( localDescriptor / remoteDescriptor / %% 			   localControlDescriptor )%% streamDescriptor     = StreamToken EQUAL StreamID LBRKT streamParm %% 			  *(COMMA streamParm) RBRKTenc_MediaDescriptor(Val, State)  when record(Val, 'MediaDescriptor') ->    [     ?MediaToken,     ?LBRKT_INDENT(State),     enc_list([{[Val#'MediaDescriptor'.termStateDescr],		fun enc_TerminationStateDescriptor/2} |	       decompose_streams(Val#'MediaDescriptor'.streams)],	      ?INC_INDENT(State)),     ?RBRKT_INDENT(State)    ].decompose_streams(asn1_NOVALUE) ->    [];decompose_streams({'MediaDescriptor_streams',Val}) ->    decompose_streams(Val);decompose_streams({Tag, Val}) ->    case Tag of	oneStream ->	    decompose_StreamParms(Val);	multiStream ->	    [{Val, fun enc_StreamDescriptor/2}];	_ ->	    error({invalid_streams_tag, Tag})    end.decompose_StreamParms(Val)  when record(Val, 'StreamParms') ->    [     {[Val#'StreamParms'.localControlDescriptor],      fun enc_LocalControlDescriptor/2},     {[Val#'StreamParms'.localDescriptor],      fun enc_localDescriptor/2},     {[Val#'StreamParms'.remoteDescriptor],      fun enc_remoteDescriptor/2}    ].enc_StreamDescriptor(Val, State)     when record(Val, 'StreamDescriptor') ->    [     ?StreamToken,     ?EQUAL,     enc_StreamID(Val#'StreamDescriptor'.streamID, State),     ?LBRKT_INDENT(State),     enc_list(decompose_StreamParms(Val#'StreamDescriptor'.streamParms),	      ?INC_INDENT(State)),     ?RBRKT_INDENT(State)    ].%% localControlDescriptor = LocalControlToken LBRKT localParm %% 			    *(COMMA localParm) RBRKT%% %% ; at-most-once per item%% localParm            = ( streamMode / propertyParm /%%                          reservedValueMode  / reservedGroupMode ) %% reservedValueMode       = ReservedValueToken EQUAL ( "ON" / "OFF" ) %% reservedGroupMode       = ReservedGroupToken EQUAL ( "ON" / "OFF" ) %% %% reservedMode	     = ReservedToken EQUAL ( "ON" / "OFF" )%% %% streamMode           = ModeToken EQUAL streamModesenc_LocalControlDescriptor(  #'LocalControlDescriptor'{streamMode    = asn1_NOVALUE, 			    reserveValue  = asn1_NOVALUE, 			    reserveGroup  = asn1_NOVALUE, 			    propertyParms = []}, _State) ->    error({invalid_LocalControlDescriptor, empty});enc_LocalControlDescriptor(  #'LocalControlDescriptor'{streamMode    = SM, 			    reserveValue  = RV, 			    reserveGroup  = RG, 			    propertyParms = PPs}, State) ->    [     ?LocalControlToken,     ?LBRKT_INDENT(State),     enc_list([{[SM], fun enc_StreamMode/2},	       {[RG], fun enc_reservedGroupMode/2},	       {[RV], fun enc_reservedValueMode/2},	       {PPs,  fun enc_PropertyParm/2}], ?INC_INDENT(State)),     ?RBRKT_INDENT(State)    ].enc_reservedGroupMode(Val, _State) ->    [     ?ReservedGroupToken,     ?EQUAL,     case Val of	 false -> ?OffToken;	 true  -> ?OnToken     end    ].enc_reservedValueMode(Val, _State) ->    [     ?ReservedValueToken,     ?EQUAL,     case Val of	 false -> ?OffToken;	 true  -> ?OnToken     end    ].enc_StreamMode({'StreamMode',Val}, State) ->    enc_StreamMode(Val, State);enc_StreamMode(Val, _State) ->    [     ?ModeToken,     ?EQUAL,     case Val of	 sendOnly -> ?SendonlyToken;	 recvOnly -> ?RecvonlyToken;	 sendRecv -> ?SendrecvToken;	 inactive -> ?InactiveToken;	 loopBack -> ?LoopbackToken     end    ].enc_Name({'Name',Val}, State) ->    enc_Name(Val, State);enc_Name(Val, State) ->    %% BUGBUG: NAME = ALPHA *63(ALPHA / DIGIT / "_" )    enc_STRING(Val, State, 1, 64).enc_PkgdName({'PkgdName', Val}, State) ->    enc_PkgdName(Val, State);enc_PkgdName(Val, State) ->    %% BUGBUG:  pkgdName =  (NAME / "*")  SLASH  (ItemID / "*" )    enc_OCTET_STRING(Val, State, 1, 64).enc_localDescriptor(Val, State)   when record(Val, 'LocalRemoteDescriptor') ->    [     ?LocalToken,     ?LBRKT,     enc_LocalRemoteDescriptor(Val, State),     ?RBRKT_INDENT(State)    ].enc_remoteDescriptor(Val, State)   when record(Val, 'LocalRemoteDescriptor') ->    [     ?RemoteToken,     ?LBRKT,     enc_LocalRemoteDescriptor(Val, State),     ?RBRKT_INDENT(State)    ].%% When text encoding the protocol, the descriptors consist of session%% descriptions as defined in SDP (RFC2327), except that the "s=", "t="%% and "o=" lines are optional. When multiple session descriptions are%% provided in one descriptor, the "v=" lines are required as delimiters;%% otherwise they are optional.  Implementations shall accept session%% descriptions that are fully conformant to RFC2327. When binary%% encoding the protocol the descriptor consists of groups of properties%% (tag-value pairs) as specified in Annex C.  Each such group may%% contain the parameters of a session description.enc_LocalRemoteDescriptor(Val, State)  when record(Val, 'LocalRemoteDescriptor') ->    case Val#'LocalRemoteDescriptor'.propGrps of	[] ->	    [];	[OptV | MandV] ->	    [?LfToken,	     enc_PropertyGroup(OptV, opt_v, State) |	     [enc_PropertyGroup(M, mand_v, State) || M <- MandV]]    end.enc_PropertyGroup({'PropertyGroup',Val}, RequiresV, State) ->    enc_PropertyGroup(Val, RequiresV, State);enc_PropertyGroup([H | _T] = List, mand_v, State) when record(H, 'PropertyParm'), H#'PropertyParm'.name == "v" ->    enc_PropertyGroup(List, opt_v, State);enc_PropertyGroup(PG, opt_v, State) ->    [     [[enc_PropertyGroupParm(PP, State), ?CrToken, ?LfToken] || PP <- PG]    ].enc_PropertyGroupParm(Val, State)  when record(Val, 'PropertyParm') ->    [OctetString] = Val#'PropertyParm'.value,    [     enc_PkgdName(Val#'PropertyParm'.name, State),     ?EqualToken,     enc_OCTET_STRING(OctetString, State, 0, infinity)    ].%% propertyParm         = pkgdName parmValue%% parmValue            = (EQUAL alternativeValue/ INEQUAL VALUE)%% alternativeValue     = ( VALUE / LSBRKT VALUE *(COMMA VALUE) RSBRKT  / %% 			  LSBRKT VALUE DOT DOT VALUE RSBRKT )enc_PropertyParm(Val, State)  when record(Val, 'PropertyParm') ->    PkgdName = ?META_ENC(property, Val#'PropertyParm'.name),    [     enc_PkgdName(PkgdName, State),     enc_propertyParmValues(Val#'PropertyParm'.value,			    Val#'PropertyParm'.extraInfo,			    State)    ].     enc_propertyParmValues([Single], asn1_NOVALUE, State) ->    [     ?EqualToken,     enc_Value(Single, State)    ];enc_propertyParmValues([Single], {relation, Rel}, State) ->    case Rel of	greaterThan -> [$>, enc_Value(Single, State)];	smallerThan -> [$<, enc_Value(Single, State)];	unequalTo   -> [$#, enc_Value(Single, State)]    end;enc_propertyParmValues([Low, High], {range, true}, State)->    %% Exact two values    [     ?EqualToken,     ?LSBRKT,     enc_Value(Low, State),     ?COLON,     enc_Value(High, State),     ?RSBRKT    ];enc_propertyParmValues(Values, {sublist, true}, State)->    %% sublist (i.e. A AND B AND ...)    [     ?EqualToken,     ?LSBRKT,     enc_list([{Values, fun enc_Value/2}], State),     ?RSBRKT    ];enc_propertyParmValues(Values, {sublist, false}, State) ->    %% alternatives (i.e. A OR B OR ...)    [     ?EqualToken,     ?LBRKT,     enc_list([{Values, fun enc_Value/2}], State),     ?RBRKT    ];enc_propertyParmValues(V, EI, _State) ->    error({invalid_property_parm_values, V, EI}).enc_TerminationStateDescriptor(Val, State)  when record(Val, 'TerminationStateDescriptor') ->    [     ?TerminationStateToken,     ?LBRKT_INDENT(State),     enc_list([{Val#'TerminationStateDescriptor'.propertyParms,		fun enc_PropertyParm/2},	       {[Val#'TerminationStateDescriptor'.eventBufferControl],		fun enc_eventBufferControl/2},	       {[Val#'TerminationStateDescriptor'.serviceState],		fun enc_serviceState/2}],	      ?INC_INDENT(State)),     ?RBRKT_INDENT(State)    ].enc_eventBufferControl(Val, _State) ->    [     ?BufferToken,     ?EQUAL,       case Val of	 off      -> ?OffToken;	 lockStep -> ?LockStepToken    end    ].    enc_serviceState({'ServiceState',Val}, State) ->    enc_serviceState(Val, State);enc_serviceState(Val, _State) ->    [     ?ServiceStatesToken,     ?EQUAL,     case Val of	 test     -> ?TestToken;	 outOfSvc -> ?OutOfSvcToken;	 inSvc    -> ?InSvcToken     end    ].enc_MuxDescriptor(Val, State)  when record(Val, 'MuxDescriptor') ->    [     ?MuxToken,     ?EQUAL,     enc_MuxType(Val#'MuxDescriptor'.muxType, State),     enc_TerminationIDListN(Val#'MuxDescriptor'.termList, State)    ].enc_MuxType({'MuxType',Val}, State) ->    enc_MuxType(Val, State);enc_MuxType(Val, _State) ->    case Val of	h221  -> ?H221Token;	h223  -> ?H223Token;	h226  -> ?H226Token;	v76   -> ?V76Token;	%% extensionParameter	nx64k -> ?Nx64kToken  % v2    end.enc_StreamID({'StreamID',Val}, State) ->    enc_StreamID(Val, State);enc_StreamID(Val, State) ->    enc_UINT16(Val, State).enc_EventsDescriptor(Val, State)  when record(Val, 'EventsDescriptor') ->    #'EventsDescriptor'{requestID = RequestId,			eventList = Events} = Val,    if	RequestId == asn1_NOVALUE, Events == [] ->	    [	     ?EventsToken	    ];	RequestId /= asn1_NOVALUE, Events /= [] ->	    [	     ?EventsToken,	     ?EQUAL,	     enc_RequestID(RequestId, State),	     ?LBRKT_INDENT(State),	     enc_list([{Events, fun enc_RequestedEvent/2}],		      ?INC_INDENT(State)),	     ?RBRKT_INDENT(State)	    ]    end.enc_RequestedEvent(Val, State)  when record(Val, 'RequestedEvent') ->%%     d("enc_RequestedEvent -> entry with"%%       "~n   Val: ~p", [Val]),

⌨️ 快捷键说明

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