%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2005-2009. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% %%---------------------------------------------------------------------- %% Purpose: YECC grammar for text encoding of Megaco/H.248 %%---------------------------------------------------------------------- %%---------------------------------------------------------------------- %% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE) %% %% B.1 Coding of wildcards %% %% In a text encoding of the protocol, while TerminationIDs are %% arbitrary, by judicious choice of names, the wildcard character, "*" %% may be made more useful. When the wildcard character is encountered, %% it will "match" all TerminationIDs having the same previous and %% following characters (if appropriate). For example, if there were %% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID %% R13/3/* would match all of them. There are some circumstances where %% ALL Terminations must be referred to. The TerminationID "*" suffices, %% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to %% signal to the MG that it has to create an ephemeral Termination or %% select an idle physical Termination. %% %% B.2 ABNF specification %% %% The protocol syntax is presented in ABNF according to RFC2234. The %% protocol is not case sensitive. Identifiers are not case sensitive. %% %% NOTE 1 - This syntax specification does not enforce all restrictions %% on element inclusions and values. Some additional %% restrictions are stated in comments and other restrictions %% appear in the text of this Recommendation. These additional %% restrictions are part of the protocol even though not %% enforced by this Recommendation. %% NOTE 2 - The syntax is context-dependent. For example, "Add" can be %% the AddToken or a NAME depending on the context in which it %% occurs. %% %% Everything in the ABNF and text encoding is case insensitive. This %% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as %% per RFC 2327. %% %%---------------------------------------------------------------------- %%---------------------------------------------------------------------- %% Number of expected shift/reduce warnings %% This is ugly but... %%---------------------------------------------------------------------- Expect 91. %%---------------------------------------------------------------------- %% Non-terminals %%---------------------------------------------------------------------- Nonterminals actionReply actionReplyBody actionReplyList actionRequest actionRequestBody actionRequestItem actionRequestItems actionRequestList alternativeValue ammParameter ammParameters ammRequest ammRequestBody ammToken ammsReply ammsReplyBody ammsToken auditDescriptor auditDescriptorBody auditItem auditItemList auditOther auditReply auditRequest auditReturnItem auditReturnParameter auditReturnParameterList auditSelectLogic %% v3 authenticationHeader commandReplyList commandReplys %% v3 commandRequest contextAttrDescriptor %% v3 contextAudit contextAuditProperties contextAuditProperty contextAuditSelector %% v3 contextID contextIdList %% v3 contextIDs %% v3 %% contextProperties %% v3 contextProperty %% contextPropertyList contextTerminationAudit daddr deviceName digitMapDescriptor direction %% v3 domainAddress domainName embedFirst embedNoSig embedSig embedWithSig emergencyValue %% v3 errorCode errorDescriptor errorText eventBufferControl eventBufferControlValue %% v3 eventBufferDescriptor eventDM eventParameter eventParameterName eventParameters eventSpec eventSpecList eventStream eventStreamOrOther eventsDescriptor extension extensionParameter iaServiceStates %% v3 iepsValue %% v2 - start indAudauditReturnParameter indAuddigitMapDescriptor indAudeventBufferDescriptor indAudeventSpec indAudeventSpecParameter %% indAudeventSpecParameterList indAudeventsDescriptor indAudlocalControlDescriptor indAudlocalParm indAudlocalParmList indAudmediaDescriptor indAudmediaParm indAudmediaParms %% v3 %% indAudmediaParmList indAudpackagesDescriptor indAudrequestedEvent indAudsignalsDescriptor indAudsignalList %% indAudsignalListParm indAudsignalParm %% indAudsignalRequest indAudstreamDescriptor indAudstreamParm indAudstatisticsDescriptor indAudterminationAudit indAudterminationAuditList indAudterminationStateDescriptor indAudterminationStateParm %% indAudterminationStateParmList optIndAudeventSpecParameter optIndAudsignalParm %% v2 - end indAudcontextAttrDescriptor %% v3 localControlDescriptor localParm localParmList mId mediaDescriptor mediaParm mediaParmList megacoMessage message messageBody modemDescriptor % Deprecated as of Corr 1 modemType % Deprecated as of Corr 1 modemTypeList % Deprecated as of Corr 1 mtpAddress muxDescriptor muxType notificationReason notificationReasons notifyBehaviour %% v3 notifyRegulated %% v3 notifyReply notifyReplyBody notifyRequest notifyRequestBody observedEvent observedEventBody observedEventParameter observedEventParameters % observedEventTimeStamp observedEvents observedEventsDescriptor onOrOff optAuditDescriptor optImmAckRequired optPropertyParms optSep packagesDescriptor packagesItem packagesItems %% parmName parmValue pathName pkgdName portNumber priority propertyParm propertyParms propertyParmList requestID requestedEvent requestedEventBody requestedEvents safeToken safeToken2 secondEventParameter secondEventParameters secondRequestedEvent secondRequestedEventBody secondRequestedEvents segmentReply %% v3 %% segmentNumber %% v3 servChgReplyParm servChgReplyParms serviceChangeAddress serviceChangeDelay serviceChangeDescriptor serviceChangeMethod serviceChangeMgcId serviceChangeParm serviceChangeParms serviceChangeProfile serviceChangeReason serviceChangeReply serviceChangeReplyBody serviceChangeReplyDescriptor serviceChangeRequest serviceChangeVersion serviceStates serviceStatesValue %% v3 sigParameter sigParameters signalList signalListId signalListParm signalListParms signalName signalParm signalParms signalRequest signalsDescriptor signalType statisticsDescriptor statisticsParameter statisticsParameters streamDescriptor streamID streamModes streamParm streamParmList subtractRequest termIDList %% v3 terminationAudit terminationID terminationIDList terminationIDListRepeat terminationStateDescriptor terminationStateParm terminationStateParms timeStamp topologyDescriptor topologyDirection topologyDescComp topologyDescCompList transactionAck transactionAckList transactionID transactionID_and_segment_info transactionItem transactionList transactionPending transactionReply transactionReplyBody transactionRequest transactionResponseAck value valueList . %%---------------------------------------------------------------------- %% Terminals %%---------------------------------------------------------------------- Terminals 'AddToken' 'AndAUDITselectToken' %% v3 'AuditCapToken' 'AuditToken' 'AuditValueToken' 'AuthToken' 'BothToken' %% v3 'BothwayToken' 'BriefToken' 'BufferToken' 'COLON' 'COMMA' 'ContextAttrToken' %% v3 'ContextAuditToken' 'ContextListToken' %% v3 'CtxToken' 'DelayToken' 'DigitMapToken' 'DigitMapDescriptorToken' 'DirectionToken' %% v3 'DiscardToken' 'DisconnectedToken' 'DurationToken' 'EQUAL' 'EmbedToken' 'EmergencyToken' 'EmergencyOffToken' 'EmergencyValueToken' %% v3 'ErrorToken' 'EventBufferToken' 'EventsToken' 'ExternalToken' %% v3 'FailoverToken' 'ForcedToken' 'GREATER' 'GracefulToken' 'H221Token' 'H223Token' 'H226Token' 'HandOffToken' 'IEPSToken' %% v3 'ImmAckRequiredToken' 'INEQUAL' %% v3 'InSvcToken' 'InactiveToken' 'InternalToken' %% v3 'InterruptByEventToken' 'InterruptByNewSignalsDescrToken' 'IntsigDelayToken' %% v3 'IsolateToken' 'IterationToken' %% v3 'KeepActiveToken' 'LBRKT' 'LESSER' 'LSBRKT' 'LocalControlToken' 'LocalDescriptorToken' 'LockStepToken' 'LoopbackToken' 'MediaToken' %% 'MegacopToken' 'MessageSegmentToken' 'MethodToken' 'MgcIdToken' 'ModeToken' 'ModemToken' 'ModifyToken' 'MoveToken' 'MtpAddressToken' 'MuxToken' 'NEQUAL' 'NeverNotifyToken' %% v3 'NotifyCompletionToken' 'NotifyImmediateToken' %% v3 'NotifyRegulatedToken' %% v3 'NotifyToken' 'Nx64Token' %% v2 'ObservedEventsToken' 'OffToken' 'OnToken' 'OnOffToken' 'OnewayToken' 'OnewayExternalToken' %% v3 'OnewayBothToken' %% v3 'OrAUDITselectToken' %% v3 'OtherReasonToken' 'OutOfSvcToken' 'PackagesToken' 'PendingToken' 'PriorityToken' 'ProfileToken' 'QuotedChars' 'RBRKT' 'RSBRKT' 'ReasonToken' 'RecvonlyToken' 'RemoteDescriptorToken' 'ReplyToken' 'RequestIDToken' %% v3 'ReservedGroupToken' 'ReservedValueToken' 'ResetEventsDescriptorToken' %% v3 'ResponseAckToken' 'RestartToken' 'SEP' 'SafeChars' %% 'SegmentationCompleteToken' 'SendonlyToken' 'SendrecvToken' 'ServiceChangeAddressToken' 'ServiceChangeToken' 'ServiceChangeIncompleteToken' 'ServiceStatesToken' 'ServicesToken' 'SignalListToken' 'SignalTypeToken' 'SignalsToken' %% 'SLASH' 'StatsToken' 'StreamToken' 'SubtractToken' 'SynchISDNToken' 'TerminationStateToken' 'TestToken' 'TimeOutToken' 'TimeStampToken' 'TopologyToken' 'TransToken' 'V18Token' 'V22Token' 'V22bisToken' 'V32Token' 'V32bisToken' 'V34Token' 'V76Token' 'V90Token' 'V91Token' 'VersionToken' endOfMessage . %%---------------------------------------------------------------------- %% Root symbol %%---------------------------------------------------------------------- Rootsymbol megacoMessage. %%---------------------------------------------------------------------- %% The grammar %%---------------------------------------------------------------------- %% megacoMessage = LWSP [authenticationHeader SEP ] message %% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON %% SequenceNum COLON AuthData %% %% SecurityParmIndex = "0x" 8(HEXDIG) %% SequenceNum = "0x" 8(HEXDIG) %% AuthData = "0x" 24*64(HEXDIG) %% message = MegacopToken SLASH version SEP mId SEP messageBody %% version = 1*2(DIGIT) . megacoMessage -> optSep authenticationHeader message endOfMessage : #'MegacoMessage'{authHeader = '$2', mess = '$3'} . optSep -> 'SEP' : sep . optSep -> '$empty' : no_sep . authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON' safeToken 'COLON' safeToken optSep : ensure_auth_header('$3', '$5', '$7') . authenticationHeader -> '$empty' : asn1_NOVALUE . message -> safeToken mId messageBody : ensure_message('$1', '$2', '$3') . messageBody -> errorDescriptor : {messageError, '$1'} . messageBody -> transactionList : {transactions, '$1'} . transactionList -> transactionItem : ['$1'] . transactionList -> transactionItem transactionList : ['$1' | '$2'] . transactionItem -> transactionRequest : {transactionRequest, '$1'} . transactionItem -> transactionReply : {transactionReply, '$1'}. transactionItem -> transactionPending : {transactionPending, '$1'} . transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} . transactionItem -> segmentReply : {segmentReply, '$1'} . transactionResponseAck -> 'ResponseAckToken' 'LBRKT' transactionAck transactionAckList 'RBRKT' : ['$3' | '$4'] . transactionAckList -> 'COMMA' transactionAck transactionAckList : ['$2' | '$3'] . transactionAckList -> '$empty' : [] . transactionAck -> safeToken : ensure_transactionAck('$1') . transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT' : #'TransactionPending'{transactionId = ensure_transactionID('$3') } . transactionRequest -> 'TransToken' 'LBRKT' actionRequest actionRequestList 'RBRKT' : #'TransactionRequest'{transactionId = asn1_NOVALUE, actions = ['$3' | '$4']} . transactionRequest -> 'TransToken' 'EQUAL' 'LBRKT' actionRequest actionRequestList 'RBRKT' : #'TransactionRequest'{transactionId = asn1_NOVALUE, actions = ['$4' | '$5']} . transactionRequest -> 'TransToken' 'EQUAL' transactionID 'LBRKT' actionRequest actionRequestList 'RBRKT' : #'TransactionRequest'{transactionId = ensure_transactionID('$3'), actions = ['$5' | '$6']} . actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] . actionRequestList -> '$empty' : [] . %% actionRequest = CtxToken EQUAL ContextID LBRKT ((contextRequest %% [COMMA commandRequestList]) / %% commandRequestList) RBRKT %% contextRequest = ((contextProperties [COMMA contextAudit]) / %% contextAudit) %% contextProperties = contextProperty *(COMMA contextProperty) actionRequest -> 'CtxToken' 'EQUAL' contextID 'LBRKT' actionRequestBody 'RBRKT' : merge_action_request('$3', '$5') . actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] . actionRequestItems -> 'COMMA' actionRequestItem actionRequestItems : ['$2' | '$3'] . actionRequestItems -> '$empty' : [] . actionRequestItem -> contextProperty : {contextProp, '$1'} . actionRequestItem -> contextAudit : {contextAudit, '$1'} . actionRequestItem -> commandRequest : {commandRequest, '$1'} . %% at-most-once (presumebly in contextProperties) contextProperty -> topologyDescriptor : {topology, '$1'}. contextProperty -> priority : {priority, '$1'}. contextProperty -> 'EmergencyToken' : {emergency, true}. contextProperty -> 'EmergencyOffToken' : {emergency, false}. contextProperty -> iepsValue : {iepsCallind, '$1'} . contextProperty -> contextAttrDescriptor : '$1' . contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' propertyParms 'RBRKT' : {contextProp, '$3'}. contextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' contextIdList 'RBRKT' : {contextList, '$3'}. contextIdList -> 'ContextListToken' 'EQUAL' 'LBRKT' contextID contextIDs 'RBRKT' : ['$4' | '$5'] . contextIDs -> 'COMMA' contextID contextIDs : ['$2' | '$3'] . contextIDs -> '$empty' : [] . contextAudit -> 'ContextAuditToken' 'LBRKT' indAudcontextAttrDescriptor 'RBRKT' : merge_context_attr_audit_request( #'ContextAttrAuditRequest'{}, '$3') . contextAudit -> 'ContextAuditToken' 'LBRKT' contextAuditProperty contextAuditProperties 'RBRKT' : merge_context_attr_audit_request( #'ContextAttrAuditRequest'{}, ['$3' | '$4']) . indAudcontextAttrDescriptor -> 'ContextAttrToken' 'LBRKT' contextAuditProperty contextAuditProperties 'RBRKT' : ['$3' | '$4'] . contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties : ['$2' | '$3'] . contextAuditProperties -> '$empty' : [] . %% at-most-once except contextAuditSelector. contextAuditProperty -> 'TopologyToken' : topologyAudit . contextAuditProperty -> 'EmergencyToken' : emergencyAudit . contextAuditProperty -> 'PriorityToken' : priorityAudit . contextAuditProperty -> 'IEPSToken' : iepsCallind . contextAuditProperty -> pkgdName : {prop, '$1'} . contextAuditProperty -> contextAuditSelector : '$1' . %% at-most-once contextAuditSelector -> priority : {select_prio, '$1'} . contextAuditSelector -> emergencyValue : {select_emergency, '$1'} . contextAuditSelector -> iepsValue : {select_ieps, '$1'} . contextAuditSelector -> auditSelectLogic : {select_logic, '$1'} . contextAuditSelector -> contextAttrDescriptor : '$1' . auditSelectLogic -> 'AndAUDITselectToken' : {andAUDITSelect, 'NULL'} . auditSelectLogic -> 'OrAUDITselectToken' : {orAUDITSelect, 'NULL'} . commandRequest -> ammRequest : '$1'. commandRequest -> subtractRequest : '$1'. commandRequest -> auditRequest : '$1'. commandRequest -> notifyRequest : '$1'. commandRequest -> serviceChangeRequest : '$1'. transactionReply -> 'ReplyToken' 'EQUAL' transactionID_and_segment_info 'LBRKT' optImmAckRequired transactionReplyBody 'RBRKT' : make_TransactionReply('$3', '$5', '$6') . segmentReply -> 'MessageSegmentToken' 'EQUAL' transactionID_and_segment_info : make_SegmentReply('$3') . %% segmentNumber -> safeToken : ensure_uint16('$1') . optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' . optImmAckRequired -> '$empty' : asn1_NOVALUE . transactionReplyBody -> errorDescriptor : {transactionError, '$1'} . transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} . actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] . actionReplyList -> '$empty' : [] . actionReply -> 'CtxToken' 'EQUAL' contextID 'LBRKT' actionReplyBody 'RBRKT' : setelement(#'ActionReply'.contextId, '$5', '$3') . actionReply -> 'CtxToken' 'EQUAL' contextID : #'ActionReply'{contextId = '$3'} . actionReplyBody -> errorDescriptor : #'ActionReply'{errorDescriptor = '$1'} . actionReplyBody -> commandReplys commandReplyList : merge_action_reply(['$1' | '$2']) . %% OTP-5085 %% This ugly thing is to fool the parser. The errorDescriptor does not %% realy belong here. The merge_action_reply will remove it and put it %% in it's right place later. commandReplyList -> 'COMMA' errorDescriptor : [{error, '$2'}] . commandReplyList -> 'COMMA' commandReplys commandReplyList : ['$2' | '$3'] . commandReplyList -> '$empty' : [] . commandReplys -> serviceChangeReply : {command, '$1'} . commandReplys -> auditReply : {command, '$1'} . commandReplys -> ammsReply : {command, '$1'} . commandReplys -> notifyReply : {command, '$1'} . commandReplys -> contextProperty : {context, '$1'} . %Add Move and Modify have the same request parameter ammRequest -> ammToken 'EQUAL' termIDList ammRequestBody : Descs = merge_AmmRequest_descriptors('$4', []), make_commandRequest('$1', #'AmmRequest'{terminationID = '$3', descriptors = Descs}) . ammToken -> 'AddToken' : {addReq, '$1'} . ammToken -> 'MoveToken' : {moveReq, '$1'} . ammToken -> 'ModifyToken' : {modReq, '$1'} . ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] . ammRequestBody -> '$empty' : [] . ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] . ammParameters -> '$empty' : [] . %at-most-once ammParameter -> mediaDescriptor : {mediaDescriptor, '$1'}. ammParameter -> modemDescriptor : {modemDescriptor, deprecated}. ammParameter -> muxDescriptor : {muxDescriptor, '$1'}. ammParameter -> eventsDescriptor : {eventsDescriptor, '$1'}. ammParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'}. ammParameter -> signalsDescriptor : {signalsDescriptor, '$1'}. ammParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'}. ammParameter -> auditDescriptor : {auditDescriptor, '$1'}. ammParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'}. ammsReply -> ammsToken 'EQUAL' termIDList ammsReplyBody : {'$1', #'AmmsReply'{terminationID = '$3', terminationAudit = '$4'}} . ammsToken -> 'AddToken' : addReply . ammsToken -> 'MoveToken' : moveReply . ammsToken -> 'ModifyToken' : modReply . ammsToken -> 'SubtractToken' : subtractReply . ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' . ammsReplyBody -> '$empty' : asn1_NOVALUE . subtractRequest -> 'SubtractToken' 'EQUAL' termIDList optAuditDescriptor : SR = #'SubtractRequest'{terminationID = '$3', auditDescriptor = '$4'}, make_commandRequest({subtractReq, '$1'}, SR) . optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'. optAuditDescriptor -> '$empty' : asn1_NOVALUE . auditRequest -> 'AuditValueToken' 'EQUAL' termIDList optAuditDescriptor : make_commandRequest({auditValueRequest, '$1'}, make_auditRequest('$3', '$4')) . auditRequest -> 'AuditCapToken' 'EQUAL' termIDList optAuditDescriptor : make_commandRequest({auditCapRequest, '$1'}, make_auditRequest('$3', '$4')) . auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit : {auditValueReply, '$4'} . auditReply -> 'AuditCapToken' 'EQUAL' 'CtxToken' contextTerminationAudit : {auditCapReply, '$4'} . auditReply -> 'AuditValueToken' 'EQUAL' auditOther : {auditValueReply, '$3'} . auditReply -> 'AuditCapToken' 'EQUAL' auditOther : {auditCapReply, '$3'} . contextTerminationAudit -> terminationIDList : {contextAuditResult, '$1'} . contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' : {error, '$2'} . auditOther -> termIDList : merge_auditOther('$1', []) . auditOther -> termIDList 'LBRKT' terminationAudit 'RBRKT' : merge_auditOther('$1', '$3') . terminationAudit -> auditReturnParameter auditReturnParameterList : merge_terminationAudit(['$1' |'$2' ]) . auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] . auditReturnParameterList -> '$empty' : [] . auditReturnParameter -> mediaDescriptor : {mediaDescriptor, '$1'} . auditReturnParameter -> modemDescriptor. auditReturnParameter -> muxDescriptor : {muxDescriptor, '$1'} . auditReturnParameter -> eventsDescriptor : {eventsDescriptor, '$1'} . auditReturnParameter -> signalsDescriptor : {signalsDescriptor, '$1'} . auditReturnParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'} . auditReturnParameter -> observedEventsDescriptor : {observedEventsDescriptor, '$1'} . auditReturnParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'} . auditReturnParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'} . auditReturnParameter -> packagesDescriptor : {packagesDescriptor, '$1'} . auditReturnParameter -> errorDescriptor : {errorDescriptor, '$1'} . auditReturnParameter -> auditReturnItem : {auditReturnItem, '$1'} . auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' : merge_auditDescriptor('$3') . auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2']. auditDescriptorBody -> '$empty' : asn1_NOVALUE . auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] . auditItemList -> '$empty' : [] . %% IGv11 - begin %% auditReturnItem -> 'MuxToken' : muxToken . auditReturnItem -> 'ModemToken' : modemToken . auditReturnItem -> 'MediaToken' : mediaToken . auditReturnItem -> 'DigitMapToken' : digitMapToken . auditReturnItem -> 'StatsToken' : statsToken . auditReturnItem -> 'ObservedEventsToken' : observedEventsToken . auditReturnItem -> 'PackagesToken' : packagesToken . %% at-most-once, and DigitMapToken and PackagesToken are not allowed %% in AuditCapabilities command auditItem -> auditReturnItem : '$1' . auditItem -> 'SignalsToken' : signalsToken. auditItem -> 'EventBufferToken' : eventBufferToken. auditItem -> 'EventsToken' : eventsToken . auditItem -> indAudterminationAudit : {terminationAudit, '$1'} . % v2 %% %% IGv11 - end %% v2 - start %% indAudterminationAudit -> indAudauditReturnParameter indAudterminationAuditList : ['$1' | '$2'] . indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter indAudterminationAuditList : ['$2' | '$3'] . indAudterminationAuditList -> '$empty' : [] . indAudauditReturnParameter -> indAudmediaDescriptor : {indAudMediaDescriptor, '$1'} . indAudauditReturnParameter -> indAudeventsDescriptor : {indAudEventsDescriptor, '$1'} . indAudauditReturnParameter -> indAudsignalsDescriptor : {indAudSignalsDescriptor, '$1'} . indAudauditReturnParameter -> indAuddigitMapDescriptor : {indAudDigitMapDescriptor, '$1'} . indAudauditReturnParameter -> indAudeventBufferDescriptor : {indAudEventBufferDescriptor, '$1'} . indAudauditReturnParameter -> indAudstatisticsDescriptor : {indAudStatisticsDescriptor, '$1'} . indAudauditReturnParameter -> indAudpackagesDescriptor : {indAudPackagesDescriptor, '$1'} . indAudmediaDescriptor -> 'MediaToken' 'LBRKT' indAudmediaParm indAudmediaParms 'RBRKT' : merge_indAudMediaDescriptor(['$3'|'$4']) . %% at-most-once per item %% and either streamParm or streamDescriptor but not both %% indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} . indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} . indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} . indAudmediaParms -> 'COMMA' indAudmediaParm indAudmediaParms : ['$2' | '$3'] . indAudmediaParms -> '$empty' : [] . %% at-most-once indAudstreamParm -> 'RemoteDescriptorToken' : RD = ensure_prop_groups('$1'), #'IndAudStreamParms'{remoteDescriptor = RD} . indAudstreamParm -> 'LocalDescriptorToken' : LD = ensure_prop_groups('$1'), #'IndAudStreamParms'{localDescriptor = LD} . indAudstreamParm -> indAudlocalControlDescriptor : #'IndAudStreamParms'{localControlDescriptor = '$1'} . indAudstreamParm -> indAudstatisticsDescriptor : #'IndAudStreamParms'{statisticsDescriptor = '$1'} . indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID 'LBRKT' indAudstreamParm 'RBRKT' : #'IndAudStreamDescriptor'{streamID = '$3', streamParms = '$5'} . indAudlocalControlDescriptor -> 'LocalControlToken' 'LBRKT' indAudlocalParm indAudlocalParmList 'RBRKT' : merge_indAudLocalControlDescriptor(['$3' | '$4']) . indAudlocalParmList -> 'COMMA' indAudlocalParm indAudlocalParmList : ['$2' | '$3'] . indAudlocalParmList -> '$empty' : [] . %% at-most-once per item %% %% propertyparm and streamModes are used only to specify audit selection %% criteria. AND/OR selection logic is specified at context level. %% indAudlocalParm -> 'ReservedGroupToken' : reservedGroupToken . indAudlocalParm -> 'ReservedValueToken' : reservedValueToken . indAudlocalParm -> 'ModeToken' : modeToken . indAudlocalParm -> 'ModeToken' 'EQUAL' streamModes : {mode, {equal, '$3'}} . indAudlocalParm -> 'ModeToken' 'INEQUAL' streamModes : {mode, {inequal,'$3'}} . indAudlocalParm -> propertyParm : {prop, '$1'} . indAudlocalParm -> pkgdName : {name, '$1'} . indAudterminationStateDescriptor -> 'TerminationStateToken' 'LBRKT' indAudterminationStateParm 'RBRKT' : merge_indAudTerminationStateDescriptor('$3') . %% at-most-once per item %% %% at-most-once per item except for propertyParm indAudterminationStateParm -> iaServiceStates : '$1' . indAudterminationStateParm -> 'BufferToken' : bufferToken . indAudterminationStateParm -> propertyParm : {prop, '$1'} . indAudterminationStateParm -> pkgdName : {name, '$1'} . iaServiceStates -> 'ServiceStatesToken' : serviceStatesToken . iaServiceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue : {serviceStates, {equal, '$3'}} . iaServiceStates -> 'ServiceStatesToken' 'INEQUAL' serviceStatesValue : {serviceStates, {inequal, '$3'}} . indAudeventBufferDescriptor -> 'EventBufferToken' 'LBRKT' indAudeventSpec 'RBRKT' : '$3' . indAudeventSpec -> pkgdName optIndAudeventSpecParameter : merge_indAudEventBufferDescriptor('$1','$2') . optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT' : '$2' . optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE . indAudeventSpecParameter -> eventStream : {streamID, '$1'} . indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} . indAudeventsDescriptor -> 'EventsToken' 'LBRKT' indAudrequestedEvent 'RBRKT' : #'IndAudEventsDescriptor'{pkgdName = '$3'} . indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID 'LBRKT' indAudrequestedEvent 'RBRKT' : #'IndAudEventsDescriptor'{requestID = '$3', pkgdName = '$5'} . indAudrequestedEvent -> pkgdName : '$1' . indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' . optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE . optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' . indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} . indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} . indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId : #'IndAudSeqSigList'{id = ensure_uint16('$3')} . indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId 'LBRKT' signalListParm 'RBRKT' : #'IndAudSeqSigList'{id = ensure_uint16('$3'), signalList = ensure_indAudSignalListParm('$5')} . %% The DigitMapDescriptorToken is specially treated by the scanner indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' : ensure_IADMD('$1') . indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' : #'IndAudStatisticsDescriptor'{statName = '$3'} . indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT' : merge_indAudPackagesDescriptor('$3') . eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' . %% %% v2 - end notifyRequest -> 'NotifyToken' 'EQUAL' termIDList 'LBRKT' notifyRequestBody 'RBRKT' : NR = setelement(#'NotifyRequest'.terminationID, '$5', '$3'), make_commandRequest({notifyReq, '$1'}, NR) . notifyRequestBody -> observedEventsDescriptor : #'NotifyRequest'{observedEventsDescriptor = '$1'}. notifyRequestBody -> errorDescriptor : #'NotifyRequest'{errorDescriptor = '$1'}. notifyReply -> 'NotifyToken' 'EQUAL' termIDList notifyReplyBody : {notifyReply, #'NotifyReply'{terminationID = '$3', errorDescriptor = '$4'}} . notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'. notifyReplyBody -> '$empty' : asn1_NOVALUE . serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' termIDList 'LBRKT' serviceChangeDescriptor 'RBRKT' : make_commandRequest({serviceChangeReq, '$1'}, #'ServiceChangeRequest'{terminationID = '$3', serviceChangeParms = '$5'}) . serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' termIDList serviceChangeReplyBody : {serviceChangeReply, #'ServiceChangeReply'{terminationID = '$3', serviceChangeResult = '$4'}} . serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : {errorDescriptor, '$2'} . serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT' : {serviceChangeResParms, '$2'} . serviceChangeReplyBody -> '$empty' : {serviceChangeResParms, #'ServiceChangeResParm'{}}. errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT' errorText 'RBRKT' : #'ErrorDescriptor'{errorCode = '$3', errorText = '$5'} . errorCode -> safeToken : ensure_uint('$1', 0, 999) . errorText -> 'QuotedChars' : value_of('$1') . errorText -> '$empty' : asn1_NOVALUE . transactionID -> safeToken : ensure_uint32('$1') . transactionID_and_segment_info -> safeToken : make_transactionID_and_segment_info('$1') . mId -> domainName : '$1' . mId -> domainAddress : '$1' . mId -> optSep mtpAddress optSep : '$2' . mId -> optSep deviceName optSep : '$2' . domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep : ensure_domainName('$2', '$5') . domainName -> 'LESSER' safeToken 'GREATER' : ensure_domainName('$2', asn1_NOVALUE) . deviceName -> pathName : {deviceName, '$1'} . %% '-' is used for NULL context contextID -> safeToken : ensure_contextID('$1') . domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep : ensure_domainAddress('$2', '$5') . domainAddress -> 'LSBRKT' daddr 'RSBRKT' : ensure_domainAddress('$2', asn1_NOVALUE) . daddr -> '$empty' : [] . daddr -> 'COLON' daddr : [colon| '$2'] . daddr -> safeToken daddr : ['$1'| '$2'] . portNumber -> safeToken : ensure_uint16('$1') . mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') . termIDList -> terminationID : ['$1'] . termIDList -> LSBRKT terminationID terminationIDListRepeat RSBRKT : ['$2' | '$3'] . terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT' : ['$2' | '$3'] . terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat : ['$2'| '$3'] . terminationIDListRepeat -> '$empty' : [] . pathName -> safeToken : ensure_pathName('$1') . terminationID -> safeToken : ensure_terminationID('$1') . mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT' : merge_mediaDescriptor(['$3' | '$4']) . mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] . mediaParmList -> '$empty' : [] . %% at-most-once per item %% using either streamParms or streamDescriptors but not both mediaParm -> streamParm : {streamParm, '$1'} . mediaParm -> streamDescriptor : {streamDescriptor, '$1'} . mediaParm -> terminationStateDescriptor : {termState, '$1'} . %% at-most-once . %% Specially treated by the scanner. streamParm -> 'LocalDescriptorToken' : PGs = ensure_prop_groups('$1'), {local, #'LocalRemoteDescriptor'{propGrps = PGs}} . streamParm -> 'RemoteDescriptorToken' : PGs = ensure_prop_groups('$1'), {remote, #'LocalRemoteDescriptor'{propGrps = PGs}} . streamParm -> localControlDescriptor : {control, '$1'} . streamParm -> statisticsDescriptor : {statistics, '$1'} . streamDescriptor -> 'StreamToken' 'EQUAL' streamID 'LBRKT' streamParm streamParmList 'RBRKT' : #'StreamDescriptor'{streamID = '$3', streamParms = merge_streamParms(['$5' | '$6'])} . streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] . streamParmList -> '$empty' : [] . localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT' : ['$3' | '$4'] . localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] . localParmList -> '$empty': [] . terminationStateDescriptor -> 'TerminationStateToken' 'LBRKT' terminationStateParm terminationStateParms 'RBRKT' : merge_terminationStateDescriptor(['$3' | '$4']) . terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] . terminationStateParms -> '$empty' : [] . %% at-most-once per item except for propertyParm localParm -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} . localParm -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} . localParm -> 'ModeToken' 'EQUAL' streamModes : {mode, '$3'} . localParm -> propertyParm : {prop, '$1'} . onOrOff -> 'OnToken' : true . onOrOff -> 'OffToken' : false . %% at-most-once streamModes -> 'SendonlyToken' : sendOnly . streamModes -> 'RecvonlyToken' : recvOnly . streamModes -> 'SendrecvToken' : sendRecv . streamModes -> 'InactiveToken' : inactive . streamModes -> 'LoopbackToken' : loopBack . propertyParm -> pkgdName parmValue : setelement(#'PropertyParm'.name, '$2', '$1') . parmValue -> 'EQUAL' alternativeValue : '$2' . parmValue -> 'NEQUAL' value : #'PropertyParm'{value = ['$2'], extraInfo = {relation, unequalTo}} . parmValue -> 'LESSER' value : #'PropertyParm'{value = ['$2'], extraInfo = {relation, smallerThan}} . parmValue -> 'GREATER' value : #'PropertyParm'{value = ['$2'], extraInfo = {relation, greaterThan}} . %% OTP-4013 %% alternativeValue = ( VALUE / %% LSBRKT VALUE *(COMMA VALUE) RSBRKT / %% LSBRKT VALUE COLON VALUE RSBRKT ) / %% LBRKT VALUE *(COMMA VALUE) RBRKT alternativeValue -> 'LBRKT' value valueList 'RBRKT' : #'PropertyParm'{value = ['$2' | '$3'], extraInfo = {sublist, false}}. % OR alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT' : #'PropertyParm'{value = ['$2', '$4'], extraInfo = {range, true}}. alternativeValue -> 'LSBRKT' value valueList 'RSBRKT' : #'PropertyParm'{value = ['$2' | '$3'], extraInfo = {sublist, true}}. % AND alternativeValue -> value : #'PropertyParm'{value = ['$1']} . valueList -> 'COMMA' value valueList : ['$2' | '$3'] . valueList -> '$empty' : [] . eventBufferDescriptor -> 'EventBufferToken' : [] . eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec eventSpecList 'RBRKT' : ['$3' | '$4'] . eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] . eventSpecList -> '$empty' : [] . eventSpec -> observedEvent : merge_eventSpec('$1') . %% at-most-once per item except for propertyParm terminationStateParm -> serviceStates : {serviceState, '$1'} . terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} . terminationStateParm -> propertyParm : {propertyParm, '$1'} . serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceStatesValue : '$3'. serviceStatesValue -> 'TestToken' : test . serviceStatesValue -> 'OutOfSvcToken' : outOfSvc . serviceStatesValue -> 'InSvcToken' : inSvc . eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlValue : '$3' . eventBufferControlValue -> 'OffToken' : off . eventBufferControlValue -> 'LockStepToken' : lockStep . muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList : #'MuxDescriptor'{muxType = '$3', termList = '$4'} . muxType -> safeToken : ensure_muxType('$1') . streamID -> safeToken : ensure_streamID('$1') . pkgdName -> safeToken : ensure_pkgdName('$1') . eventsDescriptor -> 'EventsToken' : #'EventsDescriptor'{requestID = asn1_NOVALUE, eventList = []} . eventsDescriptor -> 'EventsToken' 'EQUAL' requestID 'LBRKT' requestedEvent requestedEvents 'RBRKT' : #'EventsDescriptor'{requestID = '$3', eventList = ['$5' | '$6']} . requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] . requestedEvents -> '$empty' : [] . requestedEvent -> pkgdName requestedEventBody : setelement(#'RequestedEvent'.pkgdName, '$2', '$1') . requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' : merge_eventParameters(['$2' | '$3']) . requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} . notifyRegulated -> 'NotifyRegulatedToken' : #'RegulatedEmbeddedDescriptor'{} . notifyRegulated -> 'NotifyRegulatedToken' 'LBRKT' embedWithSig 'RBRKT' : make_RegulatedEmbeddedDescriptor('$3') . notifyRegulated -> 'NotifyRegulatedToken' 'LBRKT' embedNoSig 'RBRKT' : make_RegulatedEmbeddedDescriptor('$3') . notifyBehaviour -> 'NotifyImmediateToken' : {notifyImmediate, 'NULL'} . notifyBehaviour -> 'NeverNotifyToken' : {neverNotify, 'NULL'} . notifyBehaviour -> notifyRegulated : {notifyRegulated, '$1'} . eventParameters -> 'COMMA' eventParameter eventParameters : ['$2' | '$3'] . eventParameters -> '$empty' : [] . %% at-most-once each of embedOrKeepActive , eventDM or eventStream eventParameter -> 'KeepActiveToken' : keepActive . eventParameter -> embedWithSig : '$1'. eventParameter -> embedNoSig : '$1'. eventParameter -> eventDM : '$1'. eventParameter -> eventStreamOrOther : '$1'. eventParameter -> notifyBehaviour : {notifyBehaviour, '$1'}. eventParameter -> 'ResetEventsDescriptorToken' : resetEventsDescriptor . embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'COMMA' embedFirst 'RBRKT' : {embed, '$3', '$5'} . embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT' : {embed, '$3', asn1_NOVALUE} . embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT' : {embed, asn1_NOVALUE, '$3'} . embedFirst -> 'EventsToken' : #'SecondEventsDescriptor'{requestID = asn1_NOVALUE, eventList = []} . embedFirst -> 'EventsToken' 'EQUAL' requestID 'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' : #'SecondEventsDescriptor'{requestID = '$3', eventList = ['$5' | '$6']} . secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] . secondRequestedEvents -> '$empty' : [] . %% at-most-once of each secondRequestedEvent -> pkgdName secondRequestedEventBody : setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') . secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT' : merge_secondEventParameters(['$2' | '$3']) . secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} . secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] . secondEventParameters -> '$empty' : [] . %% at-most-once each of embedOrKeepActive , eventDM or eventStream secondEventParameter -> 'KeepActiveToken' : keepActive . secondEventParameter -> embedSig : '$1' . secondEventParameter -> eventDM : '$1' . secondEventParameter -> eventStreamOrOther : '$1' . secondEventParameter -> notifyBehaviour : {notifyBehaviour, '$1'}. secondEventParameter -> 'ResetEventsDescriptorToken' : resetEventsDescriptor . embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT' : {second_embed, '$3'} . eventStreamOrOther -> eventParameterName parmValue : select_stream_or_other('$1', '$2') . eventParameterName -> safeToken : ensure_NAME('$1') . %% The DigitMapDescriptorToken is specially treated by the scanner eventDM -> 'DigitMapDescriptorToken' : ensure_eventDM('$1') . %% H248S-IG (IGv11) signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' : ['$3' | '$4'] . signalsDescriptor -> 'SignalsToken' : [] . signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] . signalParms -> '$empty' : [] . signalParm -> signalList : {seqSigList, '$1'} . signalParm -> signalRequest : {signal, '$1'} . signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT' : merge_signalRequest('$1', ['$3' | '$4']). signalRequest -> signalName : merge_signalRequest('$1', []). sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] . sigParameters -> '$empty' : [] . %% sigParameter = sigStream / sigSignalType / sigDuration / sigOther / %% notifyCompletion / KeepActiveToken / %% direction / sigRequestID %% sigStream = StreamToken EQUAL StreamID %% sigOther = sigParameterName parmValue %% sigParameterName = NAME %% sigSignalType = SignalTypeToken EQUAL signalType %% signalType = (OnOffToken / TimeOutToken / BriefToken) %% sigDuration = DurationToken EQUAL UINT16 %% notifyCompletion = NotifyCompletionToken EQUAL (LBRKT %% notificationReason *(COMMA notificationReason) %% RBRKT) %% %% notificationReason = ( TimeOutToken / InterruptByEventToken / %% InterruptByNewSignalsDescrToken / %% OtherReasonToken ) %% sigDirection = DirectionToken EQUAL direction %% sigRequestID = RequestIDToken EQUAL RequestID %% sigIntsigDelay = IntsigDelayToken EQUAL UINT16 sigParameter -> 'StreamToken' 'EQUAL' streamID : {stream, '$3'}. sigParameter -> 'SignalTypeToken' 'EQUAL' signalType : {signal_type, '$3'} . sigParameter -> 'DurationToken' 'EQUAL' safeToken : {duration, ensure_uint16('$3')} . sigParameter -> 'NotifyCompletionToken' 'EQUAL' 'LBRKT' notificationReason notificationReasons 'RBRKT' : {notify_completion, ['$4' | '$5']} . sigParameter -> 'KeepActiveToken' : keepActive . sigParameter -> 'DirectionToken' 'EQUAL' direction : {direction, '$3'} . sigParameter -> 'RequestIDToken' 'EQUAL' requestID : {requestId, '$3'} . sigParameter -> 'IntsigDelayToken' 'EQUAL' safeToken : {intersigDelay, ensure_uint16('$3')} . sigParameter -> safeToken parmValue : {other, ensure_NAME('$1'), '$2'}. signalType -> 'OnOffToken' : onOff. signalType -> 'TimeOutToken' : timeOut. signalType -> 'BriefToken' : brief. direction -> 'ExternalToken' : external . direction -> 'InternalToken' : internal . direction -> 'BothToken' : both . notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] . notificationReasons -> '$empty' : [] . notificationReason -> 'TimeOutToken' : onTimeOut . notificationReason -> 'InterruptByEventToken' : onInterruptByEvent . notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr . notificationReason -> 'OtherReasonToken' : otherReason . notificationReason -> 'IterationToken' : iteration . signalList -> 'SignalListToken' 'EQUAL' signalListId 'LBRKT' signalListParm signalListParms 'RBRKT' : #'SeqSigList'{id = ensure_uint16('$3'), signalList = ['$5' | '$6']} . signalListParms -> 'COMMA' signalListParm signalListParms : ['$2' | '$3'] . signalListParms -> '$empty' : [] . signalListId -> safeToken : ensure_uint16('$1') . %% exactly once signalType, %% at most once duration and every signal parameter signalListParm -> signalRequest : '$1'. signalName -> pkgdName : '$1'. observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID 'LBRKT' observedEvent observedEvents 'RBRKT' : #'ObservedEventsDescriptor'{requestId = '$3', observedEventLst = ['$5' | '$6']} . observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] . observedEvents -> '$empty' : [] . %%time per event, because it might be buffered observedEvent -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody : merge_observed_event('$6', '$5', '$1') . observedEvent -> optSep pkgdName observedEventBody : merge_observed_event('$3', '$2', asn1_NOVALUE) . observedEventBody -> 'LBRKT' observedEventParameter observedEventParameters 'RBRKT' : ['$2' | '$3'] . observedEventBody -> '$empty' : [] . observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] . observedEventParameters -> '$empty' : [] . %%at-most-once eventStream, every eventParameterName at most once observedEventParameter -> eventStreamOrOther : '$1' . requestID -> safeToken : ensure_requestID('$1') . %% Deprecated as of Corr 1 modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms . modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT' optPropertyParms. modemTypeList -> 'COMMA' modemType modemTypeList. modemTypeList -> '$empty'. modemType -> safeToken. optPropertyParms -> 'LBRKT' propertyParm propertyParmList 'RBRKT' : ['$2' | '$3'] . optPropertyParms -> '$empty' : [] . propertyParms -> propertyParm propertyParmList : ['$1' | '$2'] . propertyParmList -> 'COMMA' propertyParm propertyParmList : ['$2' | '$3'] . propertyParmList -> '$empty' : [] . % parmName -> safeToken : ensure_NAME('$1') . %% The DigitMapDescriptorToken is specially treated by the scanner digitMapDescriptor -> 'DigitMapDescriptorToken' : ensure_DMD('$1') . %% each parameter at-most-once, except auditItem %% at most one of either serviceChangeAddress or serviceChangeMgcId but %% not both. serviceChangeMethod and serviceChangeReason are REQUIRED serviceChangeDescriptor -> 'ServicesToken' 'LBRKT' serviceChangeParm serviceChangeParms 'RBRKT' : merge_ServiceChangeParm(['$3' | '$4']) . serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms : ['$2' | '$3'] . serviceChangeParms -> '$empty' : [] . serviceChangeParm -> serviceChangeMethod : {method, '$1'} . serviceChangeParm -> serviceChangeReason : {reason, '$1'} . serviceChangeParm -> serviceChangeDelay : {delay, '$1'} . serviceChangeParm -> serviceChangeAddress : {address, '$1'} . serviceChangeParm -> serviceChangeProfile : {profile, '$1'} . serviceChangeParm -> extension : {extension, '$1'} . serviceChangeParm -> timeStamp : {time_stamp, '$1'} . serviceChangeParm -> serviceChangeMgcId : {mgc_id, '$1'} . serviceChangeParm -> serviceChangeVersion : {version, '$1'} . serviceChangeParm -> 'ServiceChangeIncompleteToken' : incomplete . % v3 serviceChangeParm -> auditItem : {audit_item, '$1'} . % v2 serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken : ensure_serviceChangeMethod('$3') . serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] . serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3'). serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' . serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber : {portNumber, '$3'} . serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' . serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3'). serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') . extension -> extensionParameter parmValue : setelement(#'PropertyParm'.name, '$2', '$1') . %% at most once. Version is REQUIRED on first ServiceChange response %% at most of either serviceChangeAddress or serviceChangeMgcId but not both serviceChangeReplyDescriptor -> 'ServicesToken' 'LBRKT' servChgReplyParm servChgReplyParms 'RBRKT' : merge_ServiceChangeResParm(['$3' | '$4']) . servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms : ['$2' | '$3'] . servChgReplyParms -> '$empty' : [] . servChgReplyParm -> serviceChangeAddress : {address, '$1'} . servChgReplyParm -> serviceChangeMgcId : {mgc_id, '$1'} . servChgReplyParm -> serviceChangeProfile : {profile, '$1'} . servChgReplyParm -> serviceChangeVersion : {version, '$1'} . servChgReplyParm -> timeStamp : {time_stamp,'$1'} . packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem packagesItems 'RBRKT' : ['$3' | '$4'] . packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] . packagesItems -> '$empty' : [] . packagesItem -> safeToken : ensure_packagesItem('$1') . timeStamp -> TimeStampToken : ensure_timeStamp('$1') . statisticsDescriptor -> 'StatsToken' 'LBRKT' statisticsParameter statisticsParameters 'RBRKT' : ['$3' | '$4'] . statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] . statisticsParameters -> '$empty' : [] . %%at-most-once per item statisticsParameter -> pkgdName : #'StatisticsParameter'{statName = '$1', statValue = asn1_NOVALUE} . statisticsParameter -> pkgdName 'EQUAL' value : #'StatisticsParameter'{statName = '$1', statValue = ['$3']} . statisticsParameter -> pkgdName 'EQUAL' 'LSBRKT' value valueList 'RSBRKT' : #'StatisticsParameter'{statName = '$1', statValue = ['$4' | '$5']} . topologyDescriptor -> 'TopologyToken' 'LBRKT' topologyDescComp topologyDescCompList 'RBRKT' : merge_topologyDescriptor(['$3' | '$4']) . topologyDescComp -> terminationID : {tid, '$1'} . topologyDescComp -> eventStream : {sid, '$1'} . topologyDescComp -> topologyDirection : '$1' . topologyDescCompList -> '$empty' : [] . topologyDescCompList -> 'COMMA' topologyDescComp topologyDescCompList : ['$2' | '$3'] . topologyDirection -> 'BothwayToken' : {direction, bothway} . topologyDirection -> 'IsolateToken' : {direction, isolate} . topologyDirection -> 'OnewayToken' : {direction, oneway} . topologyDirection -> 'OnewayExternalToken' : {direction_ext, onewayexternal} . topologyDirection -> 'OnewayBothToken' : {direction_ext, onewayboth} . iepsValue -> 'IEPSToken' 'EQUAL' onOrOff : '$3' . emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyToken' : true . emergencyValue -> 'EmergencyValueToken' 'EQUAL' 'EmergencyOffToken' : false . priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') . extensionParameter -> safeToken : ensure_extensionParameter('$1') . value -> 'QuotedChars' : ensure_value('$1') . value -> safeToken : ensure_value('$1'). safeToken -> safeToken2 : make_safe_token('$1') . safeToken2 -> 'SafeChars' : '$1' . %% BMK BMK safeToken2 -> 'AddToken' : '$1' . safeToken2 -> 'AuditToken' : '$1' . safeToken2 -> 'AuditCapToken' : '$1' . safeToken2 -> 'AuditValueToken' : '$1' . safeToken2 -> 'AuthToken' : '$1' . safeToken2 -> 'BothToken' : '$1' . % v3 %% v3-safeToken2 -> 'BothwayToken' : '$1' . safeToken2 -> 'BriefToken' : '$1' . %% v3-safeToken2 -> 'BufferToken' : '$1' . safeToken2 -> 'CtxToken' : '$1' . %% v3-safeToken2 -> 'ContextAttrToken' : '$1' . % v3 safeToken2 -> 'ContextAuditToken' : '$1' . %% v3-safeToken2 -> 'ContextListToken' : '$1' . % v3 %% v2-safeToken2 -> 'DigitMapToken' : '$1' . %% safeToken2 -> 'DigitMapDescriptorToken' : '$1' . %% v3- safeToken2 -> 'DirectionToken' : '$1' . % v3 safeToken2 -> 'DiscardToken' : '$1' . safeToken2 -> 'DisconnectedToken' : '$1' . safeToken2 -> 'DelayToken' : '$1' . safeToken2 -> 'DurationToken' : '$1' . safeToken2 -> 'EmbedToken' : '$1' . %% BMK BMK safeToken2 -> 'EmergencyToken' : '$1' . %% BMK BMK safeToken2 -> 'EmergencyOffToken' : '$1' . safeToken2 -> 'ErrorToken' : '$1' . %% v2-safeToken2 -> 'EventBufferToken' : '$1' . %% v2-safeToken2 -> 'EventsToken' : '$1' . %% v3-safeToken2 -> 'ExternalToken' : '$1' . % v3 safeToken2 -> 'FailoverToken' : '$1' . safeToken2 -> 'ForcedToken' : '$1' . safeToken2 -> 'GracefulToken' : '$1' . safeToken2 -> 'H221Token' : '$1' . safeToken2 -> 'H223Token' : '$1' . safeToken2 -> 'H226Token' : '$1' . safeToken2 -> 'HandOffToken' : '$1' . %% v3-safeToken2 -> 'IEPSToken' : '$1' . % v3 safeToken2 -> 'ImmAckRequiredToken' : '$1' . safeToken2 -> 'InactiveToken' : '$1' . %% v3-safeToken2 -> 'InternalToken' : '$1' . % v3 safeToken2 -> 'InterruptByEventToken' : '$1' . safeToken2 -> 'InterruptByNewSignalsDescrToken' : '$1' . %% v3-safeToken2 -> 'IsolateToken' : '$1' . safeToken2 -> 'InSvcToken' : '$1' . safeToken2 -> 'KeepActiveToken' : '$1' . %% safeToken2 -> 'LocalToken' : '$1' . %% safeToken2 -> 'LocalDescriptorToken' : '$1' . safeToken2 -> 'LocalControlToken' : '$1' . safeToken2 -> 'LoopbackToken' : '$1' . safeToken2 -> 'LockStepToken' : '$1' . %% v2-safeToken2 -> 'MediaToken' : '$1' . %% safeToken2 -> 'MegacopToken' : '$1' . safeToken2 -> 'MethodToken' : '$1' . safeToken2 -> 'MgcIdToken' : '$1' . %% v3-safeToken2 -> 'ModeToken' : '$1' . %% BMK BMK safeToken2 -> 'ModifyToken' : '$1' . %% v2-safeToken2 -> 'ModemToken' : '$1' . %% BMK BMK safeToken2 -> 'MoveToken' : '$1' . %% safeToken2 -> 'MtpToken' : '$1' . %% safeToken2 -> 'MtpAddressToken' : '$1' . %% v2-safeToken2 -> 'MuxToken' : '$1' . safeToken2 -> 'NotifyToken' : '$1' . safeToken2 -> 'NotifyCompletionToken' : '$1' . safeToken2 -> 'Nx64Token' : '$1' . %% v2-safeToken2 -> 'ObservedEventsToken' : '$1' . %% v3-safeToken2 -> 'OnewayToken' : '$1' . %% v3-safeToken2 -> 'OnewayExternalToken' : '$1' . %% v3-safeToken2 -> 'OnewayBothToken' : '$1' . safeToken2 -> 'OffToken' : '$1' . safeToken2 -> 'OnToken' : '$1' . safeToken2 -> 'OnOffToken' : '$1' . safeToken2 -> 'OutOfSvcToken' : '$1' . safeToken2 -> 'OtherReasonToken' : '$1' . %% v2-safeToken2 -> 'PackagesToken' : '$1' . safeToken2 -> 'PendingToken' : '$1' . %% BMK BMK safeToken2 -> 'PriorityToken' : '$1' . safeToken2 -> 'ProfileToken' : '$1' . safeToken2 -> 'ReasonToken' : '$1' . safeToken2 -> 'RecvonlyToken' : '$1' . safeToken2 -> 'ReplyToken' : '$1' . %% v3- safeToken2 -> 'RequestIDToken' : '$1' . % v3 safeToken2 -> 'ResponseAckToken' : '$1' . safeToken2 -> 'RestartToken' : '$1' . %% safeToken2 -> 'RemoteToken' : '$1' . %% safeToken2 -> 'RemoteDescriptorToken' : '$1' . %% v3-safeToken2 -> 'ReservedGroupToken' : '$1' . %% v3-safeToken2 -> 'ReservedValueToken' : '$1' . safeToken2 -> 'SendonlyToken' : '$1' . safeToken2 -> 'SendrecvToken' : '$1' . safeToken2 -> 'ServicesToken' : '$1' . %% v3-safeToken2 -> 'ServiceStatesToken' : '$1' . safeToken2 -> 'ServiceChangeToken' : '$1' . %% v3-safeToken2 -> 'ServiceChangeIncompleteToken' : '$1' . % v3 safeToken2 -> 'ServiceChangeAddressToken' : '$1' . safeToken2 -> 'SignalListToken' : '$1' . %% v2-safeToken2 -> 'SignalsToken' : '$1' . safeToken2 -> 'SignalTypeToken' : '$1' . %% v2-safeToken2 -> 'StatsToken' : '$1' . safeToken2 -> 'StreamToken' : '$1' . %% BMK BMK safeToken2 -> 'SubtractToken' : '$1' . safeToken2 -> 'SynchISDNToken' : '$1' . safeToken2 -> 'TerminationStateToken' : '$1' . safeToken2 -> 'TestToken' : '$1' . safeToken2 -> 'TimeOutToken' : '$1' . %% BMK BMK safeToken2 -> 'TopologyToken' : '$1' . safeToken2 -> 'TransToken' : '$1' . safeToken2 -> 'V18Token' : '$1' . safeToken2 -> 'V22Token' : '$1' . safeToken2 -> 'V22bisToken' : '$1' . safeToken2 -> 'V32Token' : '$1' . safeToken2 -> 'V32bisToken' : '$1' . safeToken2 -> 'V34Token' : '$1' . safeToken2 -> 'V76Token' : '$1' . safeToken2 -> 'V90Token' : '$1' . safeToken2 -> 'V91Token' : '$1' . safeToken2 -> 'VersionToken' : '$1' . Erlang code. %% The following directive is needed for (significantly) faster compilation %% of the generated .erl file by the HiPE compiler. Please do not remove. -compile([{hipe,[{regalloc,linear_scan}]}]). -include("megaco_text_parser_v3.hrl").