1
%% ``The contents of this file are subject to the Erlang Public License,
2
%% Version 1.1, (the "License"); you may not use this file except in
3
%% compliance with the License. You should have received a copy of the
4
%% Erlang Public License along with this software. If not, it can be
5
%% retrieved via the world wide web at http://www.erlang.org/.
7
%% Software distributed under the License is distributed on an "AS IS"
8
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
9
%% the License for the specific language governing rights and limitations
12
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
14
%% AB. All Rights Reserved.''
18
%%----------------------------------------------------------------------
19
%% Purpose: YECC grammar for text encoding of Megaco/H.248
20
%%----------------------------------------------------------------------
22
%%----------------------------------------------------------------------
23
%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
25
%% B.1 Coding of wildcards
27
%% In a text encoding of the protocol, while TerminationIDs are
28
%% arbitrary, by judicious choice of names, the wildcard character, "*"
29
%% may be made more useful. When the wildcard character is encountered,
30
%% it will "match" all TerminationIDs having the same previous and
31
%% following characters (if appropriate). For example, if there were
32
%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
33
%% R13/3/* would match all of them. There are some circumstances where
34
%% ALL Terminations must be referred to. The TerminationID "*" suffices,
35
%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
36
%% signal to the MG that it has to create an ephemeral Termination or
37
%% select an idle physical Termination.
39
%% B.2 ABNF specification
41
%% The protocol syntax is presented in ABNF according to RFC2234. The
42
%% protocol is not case sensitive. Identifiers are not case sensitive.
44
%% NOTE 1 - This syntax specification does not enforce all restrictions
45
%% on element inclusions and values. Some additional
46
%% restrictions are stated in comments and other restrictions
47
%% appear in the text of this Recommendation. These additional
48
%% restrictions are part of the protocol even though not
49
%% enforced by this Recommendation.
50
%% NOTE 2 - The syntax is context-dependent. For example, "Add" can be
51
%% the AddToken or a NAME depending on the context in which it
54
%% Everything in the ABNF and text encoding is case insensitive. This
55
%% includes TerminationIDs, digitmap Ids etc. SDP is case sensitive as
58
%%----------------------------------------------------------------------
60
%%----------------------------------------------------------------------
62
%%----------------------------------------------------------------------
92
auditReturnParameterList
97
contextAttrDescriptor %% v3
98
contextAttrDescProp %% v3
99
contextAttrDescProps %% v3
101
contextAuditProperties
104
contextProperties %% v3
106
contextTerminationAudit
121
eventBufferControlState
122
eventBufferDescriptor
136
indAudauditReturnParameter
137
indAuddigitMapDescriptor
138
indAudeventBufferDescriptor
140
indAudeventSpecParameter
141
%% indAudeventSpecParameterList
142
indAudeventsDescriptor
143
indAudlocalControlDescriptor
146
indAudmediaDescriptor
148
%% indAudmediaParmList
149
indAudpackagesDescriptor
151
indAudsignalsDescriptor
153
%% indAudsignalListParm
155
%% indAudsignalRequest
156
indAudstreamDescriptor
158
indAudstatisticsDescriptor
159
indAudterminationAudit
160
indAudterminationAuditList
161
indAudterminationStateDescriptor
162
indAudterminationStateParm
163
%% indAudterminationStateParmList
164
optIndAudeventSpecParameter
168
indAudcontextAttrDescriptor %% v3
170
localControlDescriptor
180
modemDescriptor % Deprecated as of Corr 1
181
modemType % Deprecated as of Corr 1
182
modemTypeList % Deprecated as of Corr 1
194
observedEventParameter
195
observedEventParameters
196
% observedEventTimeStamp
198
observedEventsDescriptor
221
secondEventParameters
223
secondRequestedEventBody
224
secondRequestedEvents
229
serviceChangeDescriptor
237
serviceChangeReplyBody
238
serviceChangeReplyDescriptor
269
terminationIDListRepeat
270
terminationStateDescriptor
272
terminationStateParms
287
transactionResponseAck
293
%%----------------------------------------------------------------------
295
%%----------------------------------------------------------------------
310
'ContextAttrToken' %% v3
315
'DigitMapDescriptorToken'
316
'DirectionToken' %% v3
327
'ExternalToken' %% v3
337
'ImmAckRequiredToken'
340
'InternalToken' %% v3
341
'InterruptByEventToken'
342
'InterruptByNewSignalsDescrToken'
349
'LocalDescriptorToken'
363
'NotifyCompletionToken'
366
'ObservedEventsToken'
382
'RemoteDescriptorToken'
384
'RequestIDToken' %% v3
393
'ServiceChangeAddressToken'
395
'ServiceChangeIncompleteToken'
405
'TerminationStateToken'
425
%%----------------------------------------------------------------------
427
%%----------------------------------------------------------------------
429
Rootsymbol megacoMessage.
431
%%----------------------------------------------------------------------
433
%%----------------------------------------------------------------------
435
%% megacoMessage = LWSP [authenticationHeader SEP ] message
436
%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
437
%% SequenceNum COLON AuthData
439
%% SecurityParmIndex = "0x" 8(HEXDIG)
440
%% SequenceNum = "0x" 8(HEXDIG)
441
%% AuthData = "0x" 24*64(HEXDIG)
442
%% message = MegacopToken SLASH version SEP mId SEP messageBody
443
%% version = 1*2(DIGIT) .
445
megacoMessage -> optSep authenticationHeader message endOfMessage
446
: #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
448
optSep -> 'SEP' : sep .
449
optSep -> '$empty' : no_sep .
451
authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
452
safeToken 'COLON' safeToken optSep
453
: ensure_auth_header('$3', '$5', '$7') .
454
authenticationHeader -> '$empty' : asn1_NOVALUE .
456
message -> safeToken mId messageBody : ensure_message('$1', '$2', '$3') .
458
messageBody -> errorDescriptor : {messageError, '$1'} .
459
messageBody -> transactionList : {transactions, '$1'} .
461
transactionList -> transactionItem : ['$1'] .
462
transactionList -> transactionItem transactionList : ['$1' | '$2'] .
464
transactionItem -> transactionRequest : {transactionRequest, '$1'} .
465
transactionItem -> transactionReply : {transactionReply, '$1'}.
466
transactionItem -> transactionPending : {transactionPending, '$1'} .
467
transactionItem -> transactionResponseAck : {transactionResponseAck, '$1'} .
469
transactionResponseAck -> 'ResponseAckToken'
470
'LBRKT' transactionAck transactionAckList 'RBRKT' : ['$3' | '$4'] .
472
transactionAckList -> 'COMMA' transactionAck transactionAckList : ['$2' | '$3'] .
473
transactionAckList -> '$empty' : [] .
475
transactionAck -> safeToken : ensure_transactionAck('$1') .
477
transactionPending -> 'PendingToken' 'EQUAL' transactionID 'LBRKT' 'RBRKT'
478
: #'TransactionPending'{transactionId = ensure_transactionID('$3') } .
480
transactionRequest -> 'TransToken'
481
'LBRKT' actionRequest actionRequestList 'RBRKT'
482
: #'TransactionRequest'{transactionId = asn1_NOVALUE,
483
actions = ['$3' | '$4']} .
484
transactionRequest -> 'TransToken' 'EQUAL'
485
'LBRKT' actionRequest actionRequestList 'RBRKT'
486
: #'TransactionRequest'{transactionId = asn1_NOVALUE,
487
actions = ['$4' | '$5']} .
488
transactionRequest -> 'TransToken' 'EQUAL' transactionID
489
'LBRKT' actionRequest actionRequestList 'RBRKT'
490
: #'TransactionRequest'{transactionId = ensure_transactionID('$3'),
491
actions = ['$5' | '$6']} .
493
actionRequestList -> 'COMMA' actionRequest actionRequestList : ['$2' | '$3'] .
494
actionRequestList -> '$empty' : [] .
496
actionRequest -> 'CtxToken' 'EQUAL' contextID
497
'LBRKT' actionRequestBody 'RBRKT'
498
: merge_action_request('$3', '$5') .
500
actionRequestBody -> actionRequestItem actionRequestItems : ['$1' | '$2'] .
502
actionRequestItems -> 'COMMA' actionRequestItem actionRequestItems
504
actionRequestItems -> '$empty' : [] .
506
actionRequestItem -> contextProperties : {contextProps, '$1'} .
507
actionRequestItem -> contextAudit : {contextAudit, '$1'} .
508
actionRequestItem -> commandRequest : {commandRequest, '$1'} .
510
contextProperties -> contextAttrDescriptor :
511
merge_context_request(#'ContextRequest'{}, '$1') .
513
contextAttrDescriptor -> 'ContextAttrToken'
514
'LBRKT' contextAttrDescProp
515
contextAttrDescProps 'RBRKT'
518
contextAttrDescProp -> contextProperty : '$1' .
520
contextAttrDescProps -> 'COMMA' contextAttrDescProp contextAttrDescProps
522
contextAttrDescProps -> '$empty' : [] .
525
contextProperty -> topologyDescriptor : {topology, '$1'}.
526
contextProperty -> priority : {priority, '$1'}.
527
contextProperty -> 'EmergencyToken' : {emergency, true}.
528
contextProperty -> 'EmergencyOffToken' : {emergency, false}.
529
contextProperty -> 'IEPSToken' : {iepsCallind, true} . % BMK BMK
530
contextProperty -> propertyParm : {prop, '$1'} .
532
contextAudit -> 'ContextAuditToken' 'LBRKT' indAudcontextAttrDescriptor 'RBRKT'
533
: merge_context_attr_audit_request(
534
#'ContextAttrAuditRequest'{}, '$3') .
536
indAudcontextAttrDescriptor -> 'ContextAttrToken'
537
'LBRKT' contextAuditProperty
538
contextAuditProperties 'RBRKT'
541
contextAuditProperties -> 'COMMA' contextAuditProperty contextAuditProperties
543
contextAuditProperties -> '$empty' : [] .
546
contextAuditProperty -> 'TopologyToken' : topologyAudit .
547
contextAuditProperty -> 'EmergencyToken' : emergencyAudit .
548
contextAuditProperty -> 'PriorityToken' : priorityAudit .
549
contextAuditProperty -> 'IEPSToken' : iepsCallind .
550
contextAuditProperty -> pkgdName : {prop, '$1'} .
552
commandRequest -> ammRequest : '$1'.
553
commandRequest -> subtractRequest : '$1'.
554
commandRequest -> auditRequest : '$1'.
555
commandRequest -> notifyRequest : '$1'.
556
commandRequest -> serviceChangeRequest : '$1'.
558
transactionReply -> 'ReplyToken' 'EQUAL' transactionID
560
optImmAckRequired transactionReplyBody
562
: #'TransactionReply'{transactionId = '$3',
563
immAckRequired = '$5',
564
transactionResult = '$6'} .
566
optImmAckRequired -> 'ImmAckRequiredToken' 'COMMA' : 'NULL' .
567
optImmAckRequired -> '$empty' : asn1_NOVALUE .
569
transactionReplyBody -> errorDescriptor : {transactionError, '$1'} .
570
transactionReplyBody -> actionReply actionReplyList : {actionReplies, ['$1' | '$2']} .
572
actionReplyList -> 'COMMA' actionReply actionReplyList : ['$2' | '$3'] .
573
actionReplyList -> '$empty' : [] .
575
actionReply -> 'CtxToken' 'EQUAL' contextID
576
'LBRKT' actionReplyBody 'RBRKT' :
577
setelement(#'ActionReply'.contextId, '$5', '$3') .
579
actionReplyBody -> errorDescriptor :
580
#'ActionReply'{errorDescriptor = '$1'} .
581
actionReplyBody -> commandReplys commandReplyList :
582
merge_action_reply(['$1' | '$2']) .
585
%% This ugly thing is to fool the parser. The errorDescriptor does not
586
%% realy belong here. The merge_action_reply will remove it and put it
587
%% in it's right place later.
588
commandReplyList -> 'COMMA' errorDescriptor :
590
commandReplyList -> 'COMMA' commandReplys commandReplyList :
592
commandReplyList -> '$empty' : [] .
594
commandReplys -> serviceChangeReply : {command, '$1'} .
595
commandReplys -> auditReply : {command, '$1'} .
596
commandReplys -> ammsReply : {command, '$1'} .
597
commandReplys -> notifyReply : {command, '$1'} .
598
commandReplys -> contextProperties : {context, '$1'} .
600
%Add Move and Modify have the same request parameter
601
ammRequest -> ammToken 'EQUAL' terminationID ammRequestBody :
602
Descs = merge_AmmRequest_descriptors('$4', []),
603
make_commandRequest('$1',
604
#'AmmRequest'{terminationID = ['$3'],
605
descriptors = Descs}) .
607
ammToken -> 'AddToken' : {addReq, '$1'} .
608
ammToken -> 'MoveToken' : {moveReq, '$1'} .
609
ammToken -> 'ModifyToken' : {modReq, '$1'} .
611
ammRequestBody -> 'LBRKT' ammParameter ammParameters 'RBRKT' : ['$2' | '$3'] .
612
ammRequestBody -> '$empty' : [] .
614
ammParameters -> 'COMMA' ammParameter ammParameters : ['$2' | '$3'] .
615
ammParameters -> '$empty' : [] .
618
ammParameter -> mediaDescriptor : {mediaDescriptor, '$1'}.
619
ammParameter -> modemDescriptor : {modemDescriptor, deprecated}.
620
ammParameter -> muxDescriptor : {muxDescriptor, '$1'}.
621
ammParameter -> eventsDescriptor : {eventsDescriptor, '$1'}.
622
ammParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'}.
623
ammParameter -> signalsDescriptor : {signalsDescriptor, '$1'}.
624
ammParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'}.
625
ammParameter -> auditDescriptor : {auditDescriptor, '$1'}.
626
ammParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'}.
628
ammsReply -> ammsToken 'EQUAL' terminationID ammsReplyBody
629
: {'$1', #'AmmsReply'{terminationID = ['$3'],
630
terminationAudit = '$4'}} .
632
ammsToken -> 'AddToken' : addReply .
633
ammsToken -> 'MoveToken' : moveReply .
634
ammsToken -> 'ModifyToken' : modReply .
635
ammsToken -> 'SubtractToken' : subtractReply .
637
ammsReplyBody -> 'LBRKT' terminationAudit 'RBRKT' : '$2' .
638
ammsReplyBody -> '$empty' : asn1_NOVALUE .
640
subtractRequest -> 'SubtractToken' 'EQUAL' terminationID
642
: make_commandRequest({subtractReq, '$1'},
643
#'SubtractRequest'{terminationID = ['$3'],
644
auditDescriptor = '$4'}) .
647
optAuditDescriptor -> 'LBRKT' auditDescriptor 'RBRKT' : '$2'.
648
optAuditDescriptor -> '$empty' : asn1_NOVALUE .
650
auditRequest -> 'AuditValueToken' 'EQUAL'
651
terminationID optAuditDescriptor :
652
make_commandRequest({auditValueRequest, '$1'},
653
#'AuditRequest'{terminationID = '$3',
654
auditDescriptor = '$4'}) .
655
auditRequest -> 'AuditCapToken' 'EQUAL'
656
terminationID optAuditDescriptor :
657
make_commandRequest({auditCapRequest, '$1'},
658
#'AuditRequest'{terminationID = '$3',
659
auditDescriptor = '$4'}) .
661
auditReply -> 'AuditValueToken' 'EQUAL' 'CtxToken' contextTerminationAudit
662
: {auditValueReply, '$4'} .
663
auditReply -> 'AuditCapToken' 'EQUAL' 'CtxToken' contextTerminationAudit
664
: {auditCapReply, '$4'} .
665
auditReply -> 'AuditValueToken' 'EQUAL' auditOther
666
: {auditValueReply, '$3'} .
667
auditReply -> 'AuditCapToken' 'EQUAL' auditOther
668
: {auditCapReply, '$3'} .
670
contextTerminationAudit -> terminationIDList : {contextAuditResult, '$1'} .
671
contextTerminationAudit -> 'LBRKT' errorDescriptor 'RBRKT' : {contextAuditResult, '$2'} .
673
auditOther -> terminationID :
675
#'AuditResult'{terminationID = '$1',
676
terminationAuditResult = []}} .
677
auditOther -> terminationID 'LBRKT' terminationAudit 'RBRKT' :
679
#'AuditResult'{terminationID = '$1',
680
terminationAuditResult = '$3'}} .
683
terminationAudit -> auditReturnParameter auditReturnParameterList :
684
merge_terminationAudit(['$1' |'$2' ]) .
686
auditReturnParameterList -> 'COMMA' auditReturnParameter auditReturnParameterList : ['$2' | '$3'] .
687
auditReturnParameterList -> '$empty' : [] .
689
auditReturnParameter -> mediaDescriptor : {mediaDescriptor, '$1'} .
690
auditReturnParameter -> modemDescriptor.
691
auditReturnParameter -> muxDescriptor : {muxDescriptor, '$1'} .
692
auditReturnParameter -> eventsDescriptor : {eventsDescriptor, '$1'} .
693
auditReturnParameter -> signalsDescriptor : {signalsDescriptor, '$1'} .
694
auditReturnParameter -> digitMapDescriptor : {digitMapDescriptor, '$1'} .
695
auditReturnParameter -> observedEventsDescriptor : {observedEventsDescriptor, '$1'} .
696
auditReturnParameter -> eventBufferDescriptor : {eventBufferDescriptor, '$1'} .
697
auditReturnParameter -> statisticsDescriptor : {statisticsDescriptor, '$1'} .
698
auditReturnParameter -> packagesDescriptor : {packagesDescriptor, '$1'} .
699
auditReturnParameter -> errorDescriptor : {errorDescriptor, '$1'} .
700
auditReturnParameter -> auditReturnItem : {auditReturnItem, '$1'} .
702
auditDescriptor -> 'AuditToken' 'LBRKT' auditDescriptorBody 'RBRKT' :
703
merge_auditDescriptor('$3') .
705
auditDescriptorBody -> auditItem auditItemList : ['$1' | '$2'].
706
auditDescriptorBody -> '$empty' : asn1_NOVALUE .
708
auditItemList -> 'COMMA' auditItem auditItemList : ['$2' | '$3'] .
709
auditItemList -> '$empty' : [] .
713
auditReturnItem -> 'MuxToken' : muxToken .
714
auditReturnItem -> 'ModemToken' : modemToken .
715
auditReturnItem -> 'MediaToken' : mediaToken .
716
auditReturnItem -> 'DigitMapToken' : digitMapToken .
717
auditReturnItem -> 'StatsToken' : statsToken .
718
auditReturnItem -> 'ObservedEventsToken' : observedEventsToken .
719
auditReturnItem -> 'PackagesToken' : packagesToken .
721
%% at-most-once, and DigitMapToken and PackagesToken are not allowed
722
%% in AuditCapabilities command
723
auditItem -> auditReturnItem : '$1' .
724
auditItem -> 'SignalsToken' : signalsToken.
725
auditItem -> 'EventBufferToken' : eventBufferToken.
726
auditItem -> 'EventsToken' : eventsToken .
727
auditItem -> indAudterminationAudit : {terminationAudit, '$1'} . % v2
734
indAudterminationAudit -> indAudauditReturnParameter
735
indAudterminationAuditList
738
indAudterminationAuditList -> 'COMMA' indAudauditReturnParameter
739
indAudterminationAuditList
741
indAudterminationAuditList -> '$empty' : [] .
743
indAudauditReturnParameter -> indAudmediaDescriptor
744
: {indAudMediaDescriptor, '$1'} .
745
indAudauditReturnParameter -> indAudeventsDescriptor
746
: {indAudEventsDescriptor, '$1'} .
747
indAudauditReturnParameter -> indAudsignalsDescriptor
748
: {indAudSignalsDescriptor, '$1'} .
749
indAudauditReturnParameter -> indAuddigitMapDescriptor
750
: {indAudDigitMapDescriptor, '$1'} .
751
indAudauditReturnParameter -> indAudeventBufferDescriptor
752
: {indAudEventBufferDescriptor, '$1'} .
753
indAudauditReturnParameter -> indAudstatisticsDescriptor
754
: {indAudStatisticsDescriptor, '$1'} .
755
indAudauditReturnParameter -> indAudpackagesDescriptor
756
: {indAudPackagesDescriptor, '$1'} .
759
indAudmediaDescriptor -> 'MediaToken' 'LBRKT'
760
indAudmediaParm 'RBRKT'
761
: merge_indAudMediaDescriptor('$3') .
763
%% at-most-once per item
764
%% and either streamParm or streamDescriptor but not both
766
%% This is solved in another way in text than in binary :(
767
%% Instead of having a list of indAudmediaParm we put this
768
%% stuff in the indAudterminationAuditList with several
769
%% indAudmediaDescriptor's.
773
indAudmediaParm -> indAudstreamParm : {streamParm, '$1'} .
774
indAudmediaParm -> indAudstreamDescriptor : {streamDescr, '$1'} .
775
indAudmediaParm -> indAudterminationStateDescriptor : {termStateDescr, '$1'} .
778
indAudstreamParm -> indAudlocalControlDescriptor
779
: #'IndAudStreamParms'{localControlDescriptor = '$1'} .
780
indAudstreamParm -> indAudstatisticsDescriptor
781
: #'IndAudStreamParms'{statisticsDescriptor = '$1'} .
783
indAudstreamDescriptor -> 'StreamToken' 'EQUAL' streamID
784
'LBRKT' indAudstreamParm 'RBRKT'
785
: #'IndAudStreamDescriptor'{streamID = '$3',
786
streamParms = '$5'} .
789
indAudlocalControlDescriptor -> 'LocalControlToken'
790
'LBRKT' indAudlocalParm indAudlocalParmList 'RBRKT' :
791
merge_indAudLocalControlDescriptor(['$3'| '$4']) .
793
indAudlocalParmList -> 'COMMA' indAudlocalParm indAudlocalParmList : ['$2'| '$3'] .
794
indAudlocalParmList -> '$empty' : [] .
796
%% at-most-once per item
798
indAudlocalParm -> safeToken : ensure_indAudLocalParm('$1') .
800
indAudterminationStateDescriptor -> 'TerminationStateToken'
801
'LBRKT' indAudterminationStateParm 'RBRKT'
803
merge_indAudTerminationStateDescriptor('$3') .
805
%% at-most-once per item
808
indAudterminationStateParm -> safeToken :
809
ensure_indAudTerminationStateParm('$1') .
811
indAudeventBufferDescriptor -> 'EventBufferToken'
812
'LBRKT' indAudeventSpec 'RBRKT' : '$3' .
814
indAudeventSpec -> pkgdName optIndAudeventSpecParameter
815
: merge_indAudEventBufferDescriptor('$1','$2') .
817
optIndAudeventSpecParameter -> 'LBRKT' indAudeventSpecParameter 'RBRKT'
819
optIndAudeventSpecParameter -> '$empty' : asn1_NOVALUE .
822
indAudeventSpecParameter -> eventStream : {streamID, '$1'} .
823
indAudeventSpecParameter -> eventParameterName : {eventParameterName, '$1'} .
825
indAudeventsDescriptor -> 'EventsToken' 'EQUAL' requestID
826
'LBRKT' indAudrequestedEvent 'RBRKT'
827
: #'IndAudEventsDescriptor'{requestID = '$3',
830
indAudrequestedEvent -> pkgdName : '$1' .
833
indAudsignalsDescriptor -> 'SignalsToken' optIndAudsignalParm : '$2' .
836
optIndAudsignalParm -> 'LBRKT' 'RBRKT' : asn1_NOVALUE .
837
optIndAudsignalParm -> 'LBRKT' indAudsignalParm 'RBRKT' : '$2' .
839
indAudsignalParm -> indAudsignalList : {seqSigList, '$1'} .
840
indAudsignalParm -> signalRequest : {signal, ensure_indAudSignal('$1')} .
842
indAudsignalList -> 'SignalListToken' 'EQUAL' signalListId
843
'LBRKT' signalListParm 'RBRKT' :
844
#'IndAudSeqSigList'{id = ensure_uint16('$3'),
846
ensure_indAudSignalListParm('$5')} .
849
%% The DigitMapDescriptorToken is specially treated by the scanner
850
indAuddigitMapDescriptor -> 'DigitMapDescriptorToken' :
853
indAudstatisticsDescriptor -> 'StatsToken' 'LBRKT' pkgdName 'RBRKT' :
854
#'IndAudStatisticsDescriptor'{statName = '$3'} .
856
indAudpackagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem 'RBRKT'
857
: merge_indAudPackagesDescriptor('$3') .
859
eventStream -> 'StreamToken' 'EQUAL' streamID : '$3' .
865
notifyRequest -> 'NotifyToken' 'EQUAL' terminationID
866
'LBRKT' notifyRequestBody 'RBRKT'
867
: make_commandRequest({notifyReq, '$1'},
868
setelement(#'NotifyRequest'.terminationID, '$5', ['$3'])) .
870
notifyRequestBody -> observedEventsDescriptor
871
: #'NotifyRequest'{observedEventsDescriptor = '$1'}.
872
notifyRequestBody -> errorDescriptor
873
: #'NotifyRequest'{errorDescriptor = '$1'}.
875
notifyReply -> 'NotifyToken' 'EQUAL' terminationID notifyReplyBody
877
#'NotifyReply'{terminationID = ['$3'],
878
errorDescriptor = '$4'}} .
880
notifyReplyBody -> 'LBRKT' errorDescriptor 'RBRKT' : '$2'.
881
notifyReplyBody -> '$empty' : asn1_NOVALUE .
883
serviceChangeRequest -> 'ServiceChangeToken' 'EQUAL' terminationID
884
'LBRKT' serviceChangeDescriptor 'RBRKT'
885
: make_commandRequest({serviceChangeReq, '$1'},
886
#'ServiceChangeRequest'{terminationID = ['$3'],
887
serviceChangeParms = '$5'}) .
889
serviceChangeReply -> 'ServiceChangeToken' 'EQUAL' terminationID serviceChangeReplyBody
890
: {serviceChangeReply,
891
#'ServiceChangeReply'{terminationID = ['$3'],
892
serviceChangeResult = '$4'}} .
894
serviceChangeReplyBody -> 'LBRKT' errorDescriptor 'RBRKT'
895
: {errorDescriptor, '$2'} .
896
serviceChangeReplyBody -> 'LBRKT' serviceChangeReplyDescriptor 'RBRKT'
897
: {serviceChangeResParms, '$2'} .
898
serviceChangeReplyBody -> '$empty' : {serviceChangeResParms, #'ServiceChangeResParm'{}}.
900
errorDescriptor -> 'ErrorToken' 'EQUAL' errorCode 'LBRKT' errorText 'RBRKT'
901
: #'ErrorDescriptor'{errorCode = '$3',
904
errorCode -> safeToken : ensure_uint('$1', 0, 999) .
906
errorText -> 'QuotedChars' : value_of('$1') .
907
errorText -> '$empty' : asn1_NOVALUE .
909
transactionID -> safeToken : ensure_uint32('$1') .
911
mId -> domainName : '$1' .
912
mId -> domainAddress : '$1' .
913
mId -> optSep mtpAddress optSep : '$2' .
914
mId -> optSep deviceName optSep : '$2' .
916
domainName -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
917
: ensure_domainName('$2', '$5') .
918
domainName -> 'LESSER' safeToken 'GREATER'
919
: ensure_domainName('$2', asn1_NOVALUE) .
921
deviceName -> pathName : {deviceName, '$1'} .
923
%% '-' is used for NULL context
924
contextID -> safeToken : ensure_contextID('$1') .
926
domainAddress -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
927
: ensure_domainAddress('$2', '$5') .
928
domainAddress -> 'LSBRKT' daddr 'RSBRKT'
929
: ensure_domainAddress('$2', asn1_NOVALUE) .
931
daddr -> '$empty' : [] .
932
daddr -> 'COLON' daddr : [colon| '$2'] .
933
daddr -> safeToken daddr : ['$1'| '$2'] .
936
portNumber -> safeToken : ensure_uint16('$1') .
938
mtpAddress -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
940
%% terminationIDList -> LBRKT terminationID *(COMMA terminationID) RBRKT .
942
terminationIDList -> 'LBRKT' terminationID terminationIDListRepeat 'RBRKT'
945
terminationIDListRepeat -> 'COMMA' terminationID terminationIDListRepeat
947
terminationIDListRepeat -> '$empty' : [] .
950
pathName -> safeToken : ensure_pathName('$1') .
952
terminationID -> safeToken : ensure_terminationID('$1') .
954
mediaDescriptor -> 'MediaToken' 'LBRKT' mediaParm mediaParmList 'RBRKT'
955
: merge_mediaDescriptor(['$3' | '$4']) .
957
mediaParmList -> 'COMMA' mediaParm mediaParmList : ['$2' | '$3'] .
958
mediaParmList -> '$empty' : [] .
961
%% at-most-once per item
962
%% using either streamParms or streamDescriptors but not both
963
mediaParm -> streamParm
964
: {streamParm, '$1'} .
965
mediaParm -> streamDescriptor
966
: {streamDescriptor, '$1'} .
967
mediaParm -> terminationStateDescriptor
968
: {termState, '$1'} .
971
%% Specially treated by the scanner.
972
streamParm -> 'LocalDescriptorToken'
973
: {local, #'LocalRemoteDescriptor'{propGrps = ensure_prop_groups('$1')} } .
974
streamParm -> 'RemoteDescriptorToken'
975
: {remote, #'LocalRemoteDescriptor'{propGrps = ensure_prop_groups('$1')}} .
976
streamParm -> localControlDescriptor : {control, '$1'} .
977
streamParm -> statisticsDescriptor : {statistics, '$1'} .
979
streamDescriptor -> 'StreamToken' 'EQUAL' streamID
980
'LBRKT' streamParm streamParmList 'RBRKT'
981
: #'StreamDescriptor'{streamID = '$3',
982
streamParms = merge_streamParms(['$5' | '$6'])} .
984
streamParmList -> 'COMMA' streamParm streamParmList : ['$2' | '$3'] .
985
streamParmList -> '$empty' : [] .
987
localControlDescriptor -> 'LocalControlToken' 'LBRKT' localParm localParmList 'RBRKT'
990
localParmList -> 'COMMA' localParm localParmList : ['$2' | '$3'] .
991
localParmList -> '$empty': [] .
993
terminationStateDescriptor -> 'TerminationStateToken'
994
'LBRKT' terminationStateParm
995
terminationStateParms 'RBRKT'
996
: merge_terminationStateDescriptor(['$3' | '$4']) .
998
terminationStateParms -> 'COMMA' terminationStateParm terminationStateParms : ['$2' | '$3'] .
999
terminationStateParms -> '$empty' : [] .
1001
%% at-most-once per item except for propertyParm
1002
localParm -> 'ReservedGroupToken' 'EQUAL' onOrOff : {group, '$3'} .
1003
localParm -> 'ReservedValueToken' 'EQUAL' onOrOff : {value, '$3'} .
1004
localParm -> 'ModeToken' 'EQUAL' streamModes : {mode, '$3'} .
1005
localParm -> propertyParm : {prop, '$1'} .
1007
onOrOff -> 'OnToken' : true .
1008
onOrOff -> 'OffToken' : false .
1011
streamModes -> 'SendonlyToken' : sendOnly .
1012
streamModes -> 'RecvonlyToken' : recvOnly .
1013
streamModes -> 'SendrecvToken' : sendRecv .
1014
streamModes -> 'InactiveToken' : inactive .
1015
streamModes -> 'LoopbackToken' : loopBack .
1017
propertyParm -> pkgdName parmValue :
1018
setelement(#'PropertyParm'.name, '$2', '$1') .
1020
parmValue -> 'EQUAL' alternativeValue :
1023
parmValue -> 'NEQUAL' value :
1024
#'PropertyParm'{value = ['$2'],
1025
extraInfo = {relation, unequalTo}} .
1026
parmValue -> 'LESSER' value :
1027
#'PropertyParm'{value = ['$2'],
1028
extraInfo = {relation, smallerThan}} .
1029
parmValue -> 'GREATER' value :
1030
#'PropertyParm'{value = ['$2'],
1031
extraInfo = {relation, greaterThan}} .
1034
%% alternativeValue = ( VALUE /
1035
%% LSBRKT VALUE *(COMMA VALUE) RSBRKT /
1036
%% LSBRKT VALUE COLON VALUE RSBRKT ) /
1037
%% LBRKT VALUE *(COMMA VALUE) RBRKT
1038
alternativeValue -> 'LBRKT' value valueList 'RBRKT'
1039
: #'PropertyParm'{value = ['$2' | '$3'],
1040
extraInfo = {sublist, false}}. % OR
1042
alternativeValue -> 'LSBRKT' value 'COLON' value 'RSBRKT'
1043
: #'PropertyParm'{value = ['$2', '$4'],
1044
extraInfo = {range, true}}.
1046
alternativeValue -> 'LSBRKT' value valueList 'RSBRKT'
1047
: #'PropertyParm'{value = ['$2' | '$3'],
1048
extraInfo = {sublist, true}}. % AND
1050
alternativeValue -> value :
1051
#'PropertyParm'{value = ['$1']} .
1053
valueList -> 'COMMA' value valueList : ['$2' | '$3'] .
1054
valueList -> '$empty' : [] .
1057
eventBufferDescriptor -> 'EventBufferToken' : [] .
1058
eventBufferDescriptor -> 'EventBufferToken' 'LBRKT' eventSpec eventSpecList 'RBRKT'
1061
eventSpecList -> 'COMMA' eventSpec eventSpecList : ['$2' | '$3'] .
1062
eventSpecList -> '$empty' : [] .
1064
eventSpec -> observedEvent : merge_eventSpec('$1') .
1066
%% at-most-once per item except for propertyParm
1067
terminationStateParm -> serviceStates : {serviceState, '$1'} .
1068
terminationStateParm -> eventBufferControl : {eventBufferControl, '$1'} .
1069
terminationStateParm -> propertyParm : {propertyParm, '$1'} .
1071
serviceStates -> 'ServiceStatesToken' 'EQUAL' serviceState : '$3' .
1073
serviceState -> 'TestToken' : test .
1074
serviceState -> 'OutOfSvcToken' : outOfSvc .
1075
serviceState -> 'InSvcToken' : inSvc .
1077
eventBufferControl -> 'BufferToken' 'EQUAL' eventBufferControlState : '$3' .
1079
eventBufferControlState -> 'OffToken' : off .
1080
eventBufferControlState -> 'LockStepToken' : lockStep .
1082
muxDescriptor -> 'MuxToken' 'EQUAL' muxType terminationIDList :
1083
#'MuxDescriptor'{muxType = '$3',
1086
muxType -> safeToken : ensure_muxType('$1') .
1088
streamID -> safeToken : ensure_streamID('$1') .
1090
pkgdName -> safeToken : ensure_pkgdName('$1') .
1092
eventsDescriptor -> 'EventsToken' :
1093
#'EventsDescriptor'{requestID = asn1_NOVALUE,
1095
eventsDescriptor -> 'EventsToken' 'EQUAL' requestID
1096
'LBRKT' requestedEvent requestedEvents 'RBRKT' :
1097
#'EventsDescriptor'{requestID = '$3',
1098
eventList = ['$5' | '$6']} .
1100
requestedEvents -> 'COMMA' requestedEvent requestedEvents : ['$2' | '$3'] .
1101
requestedEvents -> '$empty' : [] .
1103
requestedEvent -> pkgdName requestedEventBody :
1104
setelement(#'RequestedEvent'.pkgdName, '$2', '$1') .
1106
requestedEventBody -> 'LBRKT' eventParameter eventParameters 'RBRKT' :
1107
merge_eventParameters(['$2' | '$3']) .
1108
requestedEventBody -> '$empty' : #'RequestedEvent'{evParList = []} .
1110
eventParameters -> 'COMMA' eventParameter eventParameters :
1112
eventParameters -> '$empty' : [] .
1114
%% at-most-once each of embedOrKeepActive , eventDM or eventStream
1115
eventParameter -> 'KeepActiveToken' : keepActive .
1116
eventParameter -> embedWithSig : '$1'.
1117
eventParameter -> embedNoSig : '$1'.
1118
eventParameter -> eventDM : '$1'.
1119
eventParameter -> eventStreamOrOther : '$1'.
1121
embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor
1122
'COMMA' embedFirst 'RBRKT'
1123
: {embed, '$3', '$5'} .
1124
embedWithSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
1125
: {embed, '$3', asn1_NOVALUE} .
1127
embedNoSig -> 'EmbedToken' 'LBRKT' embedFirst 'RBRKT'
1128
: {embed, asn1_NOVALUE, '$3'} .
1130
embedFirst -> 'EventsToken' :
1131
#'SecondEventsDescriptor'{requestID = asn1_NOVALUE,
1133
embedFirst -> 'EventsToken' 'EQUAL' requestID
1134
'LBRKT' secondRequestedEvent secondRequestedEvents 'RBRKT' :
1135
#'SecondEventsDescriptor'{requestID = '$3',
1136
eventList = ['$5' | '$6']} .
1138
secondRequestedEvents -> 'COMMA' secondRequestedEvent secondRequestedEvents : ['$2' | '$3'] .
1139
secondRequestedEvents -> '$empty' : [] .
1141
%% at-most-once of each
1142
secondRequestedEvent -> pkgdName secondRequestedEventBody
1143
: setelement(#'SecondRequestedEvent'.pkgdName, '$2', '$1') .
1145
secondRequestedEventBody -> 'LBRKT' secondEventParameter secondEventParameters 'RBRKT'
1146
: merge_secondEventParameters(['$2' | '$3']) .
1147
secondRequestedEventBody -> '$empty' : #'SecondRequestedEvent'{evParList = []} .
1149
secondEventParameters -> 'COMMA' secondEventParameter secondEventParameters : ['$2' | '$3'] .
1150
secondEventParameters -> '$empty' : [] .
1152
%% at-most-once each of embedOrKeepActive , eventDM or eventStream
1153
secondEventParameter -> 'KeepActiveToken' : keepActive .
1154
secondEventParameter -> embedSig : '$1' .
1155
secondEventParameter -> eventDM : '$1' .
1156
secondEventParameter -> eventStreamOrOther : '$1' .
1158
embedSig -> 'EmbedToken' 'LBRKT' signalsDescriptor 'RBRKT'
1159
: {second_embed, '$3'} .
1161
eventStreamOrOther -> eventParameterName parmValue :
1162
select_stream_or_other('$1', '$2') .
1164
eventParameterName -> safeToken : ensure_NAME('$1') .
1166
%% The DigitMapDescriptorToken is specially treated by the scanner
1167
eventDM -> 'DigitMapDescriptorToken' :
1168
ensure_eventDM('$1') .
1171
signalsDescriptor -> 'SignalsToken' 'LBRKT' signalParm signalParms 'RBRKT' :
1173
signalsDescriptor -> 'SignalsToken' : [] .
1175
signalParms -> 'COMMA' signalParm signalParms : [ '$2' | '$3'] .
1176
signalParms -> '$empty' : [] .
1178
signalParm -> signalList : {seqSigList, '$1'} .
1179
signalParm -> signalRequest : {signal, '$1'} .
1181
signalRequest -> signalName 'LBRKT' sigParameter sigParameters 'RBRKT'
1182
: merge_signalRequest('$1', ['$3' | '$4']).
1183
signalRequest -> signalName : merge_signalRequest('$1', []).
1185
sigParameters -> 'COMMA' sigParameter sigParameters : ['$2' | '$3'] .
1186
sigParameters -> '$empty' : [] .
1188
%% sigParameter = sigStream / sigSignalType / sigDuration / sigOther /
1189
%% notifyCompletion / KeepActiveToken /
1190
%% direction / sigRequestID
1191
%% sigStream = StreamToken EQUAL StreamID
1192
%% sigOther = sigParameterName parmValue
1193
%% sigParameterName = NAME
1194
%% sigSignalType = SignalTypeToken EQUAL signalType
1195
%% signalType = (OnOffToken / TimeOutToken / BriefToken)
1196
%% sigDuration = DurationToken EQUAL UINT16
1197
%% notifyCompletion = NotifyCompletionToken EQUAL (LBRKT
1198
%% notificationReason *(COMMA notificationReason)
1201
%% notificationReason = ( TimeOutToken / InterruptByEventToken /
1202
%% InterruptByNewSignalsDescrToken /
1203
%% OtherReasonToken )
1204
%% sigDirection = DirectionToken EQUAL direction
1205
%% sigRequestID = RequestIDToken EQUAL RequestID
1207
sigParameter -> 'StreamToken' 'EQUAL' streamID :
1209
sigParameter -> 'SignalTypeToken' 'EQUAL' signalType :
1210
{signal_type, '$3'} .
1211
sigParameter -> 'DurationToken' 'EQUAL' safeToken :
1212
{duration, ensure_uint16('$3')} .
1213
sigParameter -> 'NotifyCompletionToken' 'EQUAL'
1214
'LBRKT' notificationReason notificationReasons 'RBRKT' :
1215
{notify_completion, ['$4' | '$5']} .
1216
sigParameter -> 'KeepActiveToken' : keepActive .
1217
sigParameter -> 'DirectionToken' 'EQUAL' direction : {direction, '$3'} .
1218
sigParameter -> 'RequestIDToken' 'EQUAL' requestID : {requestId, '$3'} .
1219
sigParameter -> safeToken parmValue :
1220
{other, ensure_NAME('$1'), '$2'}.
1222
signalType -> 'OnOffToken' : onOff.
1223
signalType -> 'TimeOutToken' : timeOut.
1224
signalType -> 'BriefToken' : brief.
1226
direction -> 'ExternalToken' : external .
1227
direction -> 'InternalToken' : internal .
1228
direction -> 'BothToken' : both .
1230
notificationReasons -> 'COMMA' notificationReason notificationReasons : ['$2' | '$3'] .
1231
notificationReasons -> '$empty' : [] .
1233
notificationReason -> 'TimeOutToken' : onTimeOut .
1234
notificationReason -> 'InterruptByEventToken' : onInterruptByEvent .
1235
notificationReason -> 'InterruptByNewSignalsDescrToken' : onInterruptByNewSignalDescr .
1236
notificationReason -> 'OtherReasonToken' : otherReason .
1238
signalList -> 'SignalListToken' 'EQUAL' signalListId
1239
'LBRKT' signalListParm signalListParms 'RBRKT'
1240
: #'SeqSigList'{id = ensure_uint16('$3'),
1241
signalList = ['$5' | '$6']} .
1243
signalListParms -> 'COMMA' signalListParm signalListParms :
1245
signalListParms -> '$empty' : [] .
1247
signalListId -> safeToken : ensure_uint16('$1') .
1249
%% exactly once signalType,
1250
%% at most once duration and every signal parameter
1251
signalListParm -> signalRequest : '$1'.
1253
signalName -> pkgdName : '$1'.
1255
observedEventsDescriptor -> 'ObservedEventsToken' 'EQUAL' requestID
1256
'LBRKT' observedEvent observedEvents 'RBRKT'
1257
: #'ObservedEventsDescriptor'{requestId = '$3',
1258
observedEventLst = ['$5' | '$6']} .
1260
observedEvents -> 'COMMA' observedEvent observedEvents : ['$2' | '$3'] .
1261
observedEvents -> '$empty' : [] .
1263
%%time per event, because it might be buffered
1265
observedEvent -> timeStamp optSep 'COLON' optSep pkgdName observedEventBody :
1266
merge_observed_event('$6', '$5', '$1') .
1267
observedEvent -> optSep pkgdName observedEventBody :
1268
merge_observed_event('$3', '$2', asn1_NOVALUE) .
1270
observedEventBody -> 'LBRKT' observedEventParameter
1271
observedEventParameters 'RBRKT'
1273
observedEventBody -> '$empty' : [] .
1275
observedEventParameters -> 'COMMA' observedEventParameter observedEventParameters : ['$2' | '$3'] .
1276
observedEventParameters -> '$empty' : [] .
1278
%%at-most-once eventStream, every eventParameterName at most once
1279
observedEventParameter -> eventStreamOrOther : '$1' .
1281
requestID -> safeToken : ensure_requestID('$1') .
1283
%% Deprecated as of Corr 1
1284
modemDescriptor -> 'ModemToken' 'EQUAL' modemType optPropertyParms .
1285
modemDescriptor -> 'ModemToken' 'LSBRKT' modemType modemTypeList 'RSBRKT'
1287
modemTypeList -> 'COMMA' modemType modemTypeList.
1288
modemTypeList -> '$empty'.
1289
modemType -> safeToken.
1291
optPropertyParms -> 'LBRKT' propertyParm propertyParms 'RBRKT' :
1293
optPropertyParms -> '$empty' : [] .
1295
propertyParms -> 'COMMA' propertyParm propertyParms : ['$2' | '$3'] .
1296
propertyParms -> '$empty' : [] .
1298
% parmName -> safeToken : ensure_NAME('$1') .
1300
%% The DigitMapDescriptorToken is specially treated by the scanner
1301
digitMapDescriptor -> 'DigitMapDescriptorToken' :
1304
%% each parameter at-most-once, except auditItem
1305
%% at most one of either serviceChangeAddress or serviceChangeMgcId but
1306
%% not both. serviceChangeMethod and serviceChangeReason are REQUIRED
1307
serviceChangeDescriptor -> 'ServicesToken'
1308
'LBRKT' serviceChangeParm
1309
serviceChangeParms 'RBRKT' :
1310
merge_ServiceChangeParm(['$3' | '$4']) .
1312
serviceChangeParms -> 'COMMA' serviceChangeParm serviceChangeParms :
1314
serviceChangeParms -> '$empty' : [] .
1316
serviceChangeParm -> serviceChangeMethod : {method, '$1'} .
1317
serviceChangeParm -> serviceChangeReason : {reason, '$1'} .
1318
serviceChangeParm -> serviceChangeDelay : {delay, '$1'} .
1319
serviceChangeParm -> serviceChangeAddress : {address, '$1'} .
1320
serviceChangeParm -> serviceChangeProfile : {profile, '$1'} .
1321
serviceChangeParm -> extension : {extension, '$1'} .
1322
serviceChangeParm -> timeStamp : {time_stamp, '$1'} .
1323
serviceChangeParm -> serviceChangeMgcId : {mgc_id, '$1'} .
1324
serviceChangeParm -> serviceChangeVersion : {version, '$1'} .
1325
serviceChangeParm -> 'ServiceChangeIncompleteToken' : incomplete . % v3
1326
serviceChangeParm -> auditItem : {audit_item, '$1'} . % v2
1328
serviceChangeMethod -> 'MethodToken' 'EQUAL' safeToken :
1329
ensure_serviceChangeMethod('$3') .
1331
serviceChangeReason -> 'ReasonToken' 'EQUAL' value : ['$3'] .
1333
serviceChangeDelay -> 'DelayToken' 'EQUAL' safeToken : ensure_uint32('$3').
1335
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' mId : '$3' .
1336
serviceChangeAddress -> 'ServiceChangeAddressToken' 'EQUAL' portNumber :
1337
{portNumber, '$3'} .
1339
serviceChangeMgcId -> 'MgcIdToken' 'EQUAL' mId : '$3' .
1341
serviceChangeProfile -> 'ProfileToken' 'EQUAL' safeToken : ensure_profile('$3').
1343
serviceChangeVersion -> 'VersionToken' 'EQUAL' safeToken : ensure_version('$3') .
1345
extension -> extensionParameter parmValue
1346
: setelement(#'PropertyParm'.name, '$2', '$1') .
1348
%% at most once. Version is REQUIRED on first ServiceChange response
1349
%% at most of either serviceChangeAddress or serviceChangeMgcId but not both
1350
serviceChangeReplyDescriptor -> 'ServicesToken'
1351
'LBRKT' servChgReplyParm
1352
servChgReplyParms 'RBRKT' :
1353
merge_ServiceChangeResParm(['$3' | '$4']) .
1355
servChgReplyParms -> 'COMMA' servChgReplyParm servChgReplyParms :
1357
servChgReplyParms -> '$empty' : [] .
1359
servChgReplyParm -> serviceChangeAddress : {address, '$1'} .
1360
servChgReplyParm -> serviceChangeMgcId : {mgc_id, '$1'} .
1361
servChgReplyParm -> serviceChangeProfile : {profile, '$1'} .
1362
servChgReplyParm -> serviceChangeVersion : {version, '$1'} .
1363
servChgReplyParm -> timeStamp : {time_stamp,'$1'} .
1365
packagesDescriptor -> 'PackagesToken' 'LBRKT' packagesItem
1366
packagesItems 'RBRKT'
1369
packagesItems -> 'COMMA' packagesItem packagesItems : ['$2' | '$3'] .
1370
packagesItems -> '$empty' : [] .
1372
packagesItem -> safeToken : ensure_packagesItem('$1') .
1374
timeStamp -> TimeStampToken : ensure_timeStamp('$1') .
1376
statisticsDescriptor -> 'StatsToken'
1377
'LBRKT' statisticsParameter
1378
statisticsParameters 'RBRKT'
1381
statisticsParameters -> 'COMMA' statisticsParameter statisticsParameters : ['$2' | '$3'] .
1382
statisticsParameters -> '$empty' : [] .
1384
%%at-most-once per item
1385
statisticsParameter -> pkgdName
1386
: #'StatisticsParameter'{statName = '$1',
1387
statValue = asn1_NOVALUE} .
1388
statisticsParameter -> pkgdName 'EQUAL' value
1389
: #'StatisticsParameter'{statName = '$1',
1390
statValue = ['$3']} .
1392
topologyDescriptor -> 'TopologyToken' 'LBRKT' topologyTriple
1393
topologyTripleList 'RBRKT' : ['$3' | '$4'] .
1395
terminationA -> terminationID : '$1' .
1397
terminationB -> terminationID : '$1' .
1399
topologyTriple -> terminationA 'COMMA'
1400
terminationB 'COMMA'
1402
#'TopologyRequest'{terminationFrom = '$1',
1403
terminationTo = '$3',
1404
topologyDirection = '$5'} .
1406
topologyTripleList -> '$empty' : [] .
1407
topologyTripleList -> 'COMMA' topologyTriple topologyTripleList :
1410
topologyDirection -> 'BothwayToken' : bothway .
1411
topologyDirection -> 'IsolateToken' : isolate .
1412
topologyDirection -> 'OnewayToken' : oneway .
1414
priority -> 'PriorityToken' 'EQUAL' safeToken : ensure_uint16('$3') .
1416
extensionParameter -> safeToken : ensure_extensionParameter('$1') .
1418
value -> 'QuotedChars' : ensure_value('$1') .
1419
value -> safeToken : ensure_value('$1').
1421
safeToken -> 'SafeChars' : make_safe_token('$1') .
1422
%% BMK BMK safeToken -> 'AddToken' : make_safe_token('$1') .
1423
safeToken -> 'AuditToken' : make_safe_token('$1') .
1424
safeToken -> 'AuditCapToken' : make_safe_token('$1') .
1425
safeToken -> 'AuditValueToken' : make_safe_token('$1') .
1426
safeToken -> 'AuthToken' : make_safe_token('$1') .
1427
%% v3-safeToken -> 'BothToken' : make_safe_token('$1') . % v3
1428
safeToken -> 'BothwayToken' : make_safe_token('$1') .
1429
safeToken -> 'BriefToken' : make_safe_token('$1') .
1430
safeToken -> 'BufferToken' : make_safe_token('$1') .
1431
safeToken -> 'CtxToken' : make_safe_token('$1') .
1432
%% v3-safeToken -> 'ContextAttrToken' : make_safe_token('$1') . % v3
1433
safeToken -> 'ContextAuditToken' : make_safe_token('$1') .
1434
%% v2-safeToken -> 'DigitMapToken' : make_safe_token('$1') .
1435
%% safeToken -> 'DigitMapDescriptorToken' : make_safe_token('$1') .
1437
safeToken -> 'DirectionToken' : make_safe_token('$1') . % v3
1438
safeToken -> 'DiscardToken' : make_safe_token('$1') .
1439
safeToken -> 'DisconnectedToken' : make_safe_token('$1') .
1440
safeToken -> 'DelayToken' : make_safe_token('$1') .
1441
safeToken -> 'DurationToken' : make_safe_token('$1') .
1442
safeToken -> 'EmbedToken' : make_safe_token('$1') .
1443
%% BMK BMK safeToken -> 'EmergencyToken' : make_safe_token('$1') .
1444
%% BMK BMK safeToken -> 'EmergencyOffToken' : make_safe_token('$1') .
1445
safeToken -> 'ErrorToken' : make_safe_token('$1') .
1446
%% v2-safeToken -> 'EventBufferToken' : make_safe_token('$1') .
1447
%% v2-safeToken -> 'EventsToken' : make_safe_token('$1') .
1448
%% v3-safeToken -> 'ExternalToken' : make_safe_token('$1') . % v3
1449
safeToken -> 'FailoverToken' : make_safe_token('$1') .
1450
safeToken -> 'ForcedToken' : make_safe_token('$1') .
1451
safeToken -> 'GracefulToken' : make_safe_token('$1') .
1452
safeToken -> 'H221Token' : make_safe_token('$1') .
1453
safeToken -> 'H223Token' : make_safe_token('$1') .
1454
safeToken -> 'H226Token' : make_safe_token('$1') .
1455
safeToken -> 'HandOffToken' : make_safe_token('$1') .
1456
%% v3-safeToken -> 'IEPSToken' : make_safe_token('$1') . % v3
1457
safeToken -> 'ImmAckRequiredToken' : make_safe_token('$1') .
1458
safeToken -> 'InactiveToken' : make_safe_token('$1') .
1459
%% v3-safeToken -> 'InternalToken' : make_safe_token('$1') . % v3
1460
safeToken -> 'InterruptByEventToken' : make_safe_token('$1') .
1461
safeToken -> 'InterruptByNewSignalsDescrToken' : make_safe_token('$1') .
1462
safeToken -> 'IsolateToken' : make_safe_token('$1') .
1463
safeToken -> 'InSvcToken' : make_safe_token('$1') .
1464
safeToken -> 'KeepActiveToken' : make_safe_token('$1') .
1465
%% safeToken -> 'LocalToken' : make_safe_token('$1') .
1466
%% safeToken -> 'LocalDescriptorToken' : make_safe_token('$1') .
1467
safeToken -> 'LocalControlToken' : make_safe_token('$1') .
1468
safeToken -> 'LoopbackToken' : make_safe_token('$1') .
1469
safeToken -> 'LockStepToken' : make_safe_token('$1') .
1470
%% v2-safeToken -> 'MediaToken' : make_safe_token('$1') .
1471
%% safeToken -> 'MegacopToken' : make_safe_token('$1') .
1472
safeToken -> 'MethodToken' : make_safe_token('$1') .
1473
safeToken -> 'MgcIdToken' : make_safe_token('$1') .
1474
safeToken -> 'ModeToken' : make_safe_token('$1') .
1475
%% BMK BMK safeToken -> 'ModifyToken' : make_safe_token('$1') .
1476
%% v2-safeToken -> 'ModemToken' : make_safe_token('$1') .
1477
%% BMK BMK safeToken -> 'MoveToken' : make_safe_token('$1') .
1478
%% safeToken -> 'MtpToken' : make_safe_token('$1') .
1479
%% safeToken -> 'MtpAddressToken' : make_safe_token('$1') .
1480
%% v2-safeToken -> 'MuxToken' : make_safe_token('$1') .
1481
safeToken -> 'NotifyToken' : make_safe_token('$1') .
1482
safeToken -> 'NotifyCompletionToken' : make_safe_token('$1') .
1483
safeToken -> 'Nx64Token' : make_safe_token('$1') .
1484
%% v2-safeToken -> 'ObservedEventsToken' : make_safe_token('$1') .
1485
safeToken -> 'OnewayToken' : make_safe_token('$1') .
1486
safeToken -> 'OffToken' : make_safe_token('$1') .
1487
safeToken -> 'OnToken' : make_safe_token('$1') .
1488
safeToken -> 'OnOffToken' : make_safe_token('$1') .
1489
safeToken -> 'OutOfSvcToken' : make_safe_token('$1') .
1490
safeToken -> 'OtherReasonToken' : make_safe_token('$1') .
1491
%% v2-safeToken -> 'PackagesToken' : make_safe_token('$1') .
1492
safeToken -> 'PendingToken' : make_safe_token('$1') .
1493
%% BMK BMK safeToken -> 'PriorityToken' : make_safe_token('$1') .
1494
safeToken -> 'ProfileToken' : make_safe_token('$1') .
1495
safeToken -> 'ReasonToken' : make_safe_token('$1') .
1496
safeToken -> 'RecvonlyToken' : make_safe_token('$1') .
1497
safeToken -> 'ReplyToken' : make_safe_token('$1') .
1499
safeToken -> 'RequestIDToken' : make_safe_token('$1') . % v3
1500
safeToken -> 'ResponseAckToken' : make_safe_token('$1') .
1501
safeToken -> 'RestartToken' : make_safe_token('$1') .
1502
%% safeToken -> 'RemoteToken' : make_safe_token('$1') .
1503
%% safeToken -> 'RemoteDescriptorToken' : make_safe_token('$1') .
1504
safeToken -> 'ReservedGroupToken' : make_safe_token('$1') .
1505
safeToken -> 'ReservedValueToken' : make_safe_token('$1') .
1506
safeToken -> 'SendonlyToken' : make_safe_token('$1') .
1507
safeToken -> 'SendrecvToken' : make_safe_token('$1') .
1508
safeToken -> 'ServicesToken' : make_safe_token('$1') .
1509
safeToken -> 'ServiceStatesToken' : make_safe_token('$1') .
1510
safeToken -> 'ServiceChangeToken' : make_safe_token('$1') .
1511
%% v3-safeToken -> 'ServiceChangeIncompleteToken' : make_safe_token('$1') . % v3
1512
safeToken -> 'ServiceChangeAddressToken' : make_safe_token('$1') .
1513
safeToken -> 'SignalListToken' : make_safe_token('$1') .
1514
%% v2-safeToken -> 'SignalsToken' : make_safe_token('$1') .
1515
safeToken -> 'SignalTypeToken' : make_safe_token('$1') .
1516
%% v2-safeToken -> 'StatsToken' : make_safe_token('$1') .
1517
safeToken -> 'StreamToken' : make_safe_token('$1') .
1518
%% BMK BMK safeToken -> 'SubtractToken' : make_safe_token('$1') .
1519
safeToken -> 'SynchISDNToken' : make_safe_token('$1') .
1520
safeToken -> 'TerminationStateToken' : make_safe_token('$1') .
1521
safeToken -> 'TestToken' : make_safe_token('$1') .
1522
safeToken -> 'TimeOutToken' : make_safe_token('$1') .
1523
%% BMK BMK safeToken -> 'TopologyToken' : make_safe_token('$1') .
1524
safeToken -> 'TransToken' : make_safe_token('$1') .
1525
safeToken -> 'V18Token' : make_safe_token('$1') .
1526
safeToken -> 'V22Token' : make_safe_token('$1') .
1527
safeToken -> 'V22bisToken' : make_safe_token('$1') .
1528
safeToken -> 'V32Token' : make_safe_token('$1') .
1529
safeToken -> 'V32bisToken' : make_safe_token('$1') .
1530
safeToken -> 'V34Token' : make_safe_token('$1') .
1531
safeToken -> 'V76Token' : make_safe_token('$1') .
1532
safeToken -> 'V90Token' : make_safe_token('$1') .
1533
safeToken -> 'V91Token' : make_safe_token('$1') .
1534
safeToken -> 'VersionToken' : make_safe_token('$1') .
1538
%% The following directive is needed for (significantly) faster compilation
1539
%% of the generated .erl file by the HiPE compiler. Please do not remove.
1540
-compile([{hipe,[{regalloc,linear_scan}]}]).
1542
-include("megaco_text_parser_prev3a.hrl").