megaco_text_parser_v2.yrl

来自「OTP是开放电信平台的简称」· YRL 代码 · 共 1,472 行 · 第 1/4 页

YRL
1,472
字号
    '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 + =
减小字号Ctrl + -
显示快捷键?