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 + -
显示快捷键?