⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 megaco_text_parser_v2.yrl

📁 OTP是开放电信平台的简称
💻 YRL
📖 第 1 页 / 共 4 页
字号:
    'SEP'    'SafeChars'    'SendonlyToken'    'SendrecvToken'    'ServiceChangeAddressToken'    'ServiceChangeToken'    'ServiceStatesToken'    'ServicesToken'    'SignalListToken'    'SignalTypeToken'    'SignalsToken'    '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'} .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') } .%% OTP-4359: We have the first two rule's in order to be able%%           to handle chapter 8.1.1 in RFC3525transactionRequest   -> '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' actionRequestItem actionRequestItems 'RBRKT'                            : merge_action_requests('$3', ['$5' | '$6']) .actionRequestItems   -> 'COMMA' actionRequestItem actionRequestItems  : ['$2' | '$3'] .actionRequestItems   -> '$empty' : [] .actionRequestItem    -> contextProperty : '$1' .actionRequestItem    -> contextAudit    : '$1' .actionRequestItem    -> commandRequest  : '$1' .%% at-most-oncecontextProperty      -> topologyDescriptor  : {topology, '$1'}.contextProperty      -> priority            : {priority, '$1'}. contextProperty      -> 'EmergencyToken'    : {emergency, true}.contextProperty      -> 'EmergencyOffToken' : {emergency, false}.contextAudit         -> 'ContextAuditToken'                        'LBRKT' contextAuditProperty contextAuditProperties 'RBRKT'                        : {contextAudit, ['$3' | '$4']} .contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties                            : ['$2' | '$3'] .contextAuditProperties -> '$empty' : [] .%% at-most-once .contextAuditProperty -> 'TopologyToken'  : topologyAudit .contextAuditProperty -> 'EmergencyToken' : emergencyAudit .contextAuditProperty -> 'PriorityToken'  : priorityAudit .                     commandRequest       -> ammRequest             : '$1'.commandRequest       -> subtractRequest        : '$1'.commandRequest       -> auditRequest           : '$1'.commandRequest       -> notifyRequest          : '$1'.commandRequest       -> serviceChangeRequest   : '$1'.transactionReply     -> 'ReplyToken' 'EQUAL' transactionID 			    'LBRKT'			        optImmAckRequired transactionReplyBody                            'RBRKT'			    : #'TransactionReply'{transactionId     = '$3',						  immAckRequired    = '$5',						  transactionResult = '$6'} .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') .actionReplyBody      -> errorDescriptor               :                          #'ActionReply'{errorDescriptor = '$1'} .actionReplyBody      -> commandReply commandReplyList :                         merge_action_reply(['$1' | '$2']) .commandReply         -> serviceChangeReply  : {command, '$1'} .commandReply         -> auditReply          : {command, '$1'} .commandReply         -> ammsReply           : {command, '$1'} .commandReply         -> notifyReply         : {command, '$1'} .commandReply         -> contextProperty     : {context, '$1'} . %% 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 :                         ['$2'] .commandReplyList     -> 'COMMA' commandReply commandReplyList  :                         ['$2' | '$3'] .commandReplyList     -> '$empty' : [] .%Add Move and Modify have the same request parameterammRequest           -> ammToken 'EQUAL' terminationID 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-onceammParameter         -> 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'}.ammsReply            -> ammsToken 'EQUAL' terminationID 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' terminationID optAuditDescriptor                            : make_commandRequest({subtractReq, '$1'},                                                  #'SubtractRequest'{terminationID = ['$3'],                                                                     auditDescriptor = '$4'}) .  optAuditDescriptor   -> 'LBRKT' auditDescriptor 'RBRKT'  : '$2'.optAuditDescriptor   -> '$empty'                         : asn1_NOVALUE .auditRequest -> 'AuditValueToken' 'EQUAL'                 terminationID optAuditDescriptor :                 make_commandRequest({auditValueRequest, '$1'},		                    #'AuditRequest'{terminationID   = '$3',				                    auditDescriptor = '$4'}) .auditRequest -> 'AuditCapToken' 'EQUAL'                 terminationID optAuditDescriptor :                 make_commandRequest({auditCapRequest, '$1'},				    #'AuditRequest'{terminationID   = '$3',						    auditDescriptor = '$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' : {contextAuditResult, '$2'} .auditOther              -> terminationID :                            {auditResult,                             #'AuditResult'{terminationID          = '$1',					   terminationAuditResult = []}} .auditOther              -> terminationID 'LBRKT' terminationAudit 'RBRKT' :			   {auditResult,                             #'AuditResult'{terminationID          = '$1',					   terminationAuditResult = '$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'] .% testing fix...% indAudterminationAudit  -> 'IndAudTerminationAuditToken' %                            indAudauditReturnParameter %                            indAudterminationAuditList %                            : ['$2' | '$3'] . 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  'RBRKT'                          : merge_indAudMediaDescriptor('$3') . %% at-most-once per item%% and either streamParm or streamDescriptor but not both%% <rambling>%% This is solved in another way in text than in binary :(%% Instead of having a list of indAudmediaParm we put this%% stuff in the indAudterminationAuditList with several %% indAudmediaDescriptor's. %% </rambling>%%  indAudmediaParm -> indAudstreamParm                 : {streamParm,     '$1'} .indAudmediaParm -> indAudstreamDescriptor           : {streamDescr,    '$1'} .indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} . %% at-most-once

⌨️ 快捷键说明

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