1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20
21%%
22%%----------------------------------------------------------------------
23%% Purpose: YECC grammar for mini text decoding of Megaco/H.248
24%%----------------------------------------------------------------------
25
26%%----------------------------------------------------------------------
27%% Annex B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)
28%%
29%% B.1 Coding of wildcards
30%%
31%% In a text encoding of the protocol, while TerminationIDs are
32%% arbitrary, by judicious choice of names, the wildcard character, "*"
33%% may be made more useful.  When the wildcard character is encountered,
34%% it will "match" all TerminationIDs having the same previous and
35%% following characters (if appropriate).  For example, if there were
36%% TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
37%% R13/3/* would match all of them.  There are some circumstances where
38%% ALL Terminations must be referred to.  The TerminationID "*" suffices,
39%% and is referred to as ALL. The CHOOSE TerminationID "$" may be used to
40%% signal to the MG that it has to create an ephemeral Termination or
41%% select an idle physical Termination.
42%%
43%% B.2 ABNF specification
44%%
45%% The protocol syntax is presented in ABNF according to RFC2234.  The
46%% protocol is not case sensitive.  Identifiers are not case sensitive.
47%%----------------------------------------------------------------------
48
49Expect 1.
50
51
52%%----------------------------------------------------------------------
53%% Non-terminals
54%%----------------------------------------------------------------------
55
56Nonterminals
57
58    authenticationHeader
59    daddr
60    deviceName
61    domainAddress
62    domainName
63    mId
64    megacoMessage
65    message
66    mtpAddress
67    optSep
68    pathName
69    portNumber
70    safeToken
71    safeToken2
72.
73
74%%----------------------------------------------------------------------
75%% Terminals
76%%----------------------------------------------------------------------
77
78Terminals
79
80    'AddToken'
81    %% 'AndAUDITselectToken'
82    'AuditCapToken'
83    'AuditToken'
84    'AuditValueToken'
85    'AuthToken'
86    %% 'BothToken'
87    %% 'BothwayToken'
88    'BriefToken'
89    %% 'BufferToken'
90    'COLON'
91    %% 'ContextAttrToken'
92    'ContextAuditToken'
93    %% 'ContextListToken'
94    'CtxToken'
95    'DelayToken'
96    %% 'DigitMapToken'
97    %% 'DigitMapDescriptorToken'
98    'DirectionToken'
99    'DiscardToken'
100    'DisconnectedToken'
101    'DurationToken'
102    'EQUAL'
103    'EmbedToken'
104    %% 'EmergencyToken'
105    %% 'EmergencyOffToken'
106    %% 'EmergencyValueToken'
107    'ErrorToken'
108    %% 'EventBufferToken'
109    'EventsToken'
110    %% 'ExternalToken'
111    'FailoverToken'
112    'ForcedToken'
113    'GREATER'
114    'GracefulToken'
115    'H221Token'
116    'H223Token'
117    'H226Token'
118    'HandOffToken'
119    %% 'IEPSToken'
120    'ImmAckRequiredToken'
121    'InSvcToken'
122    'InactiveToken'
123    %% 'InternalToken'
124    'InterruptByEventToken'
125    'InterruptByNewSignalsDescrToken'
126    %% 'IntsigDelayToken'
127    %% 'IsolateToken'
128    %% 'IterationToken'
129    'KeepActiveToken'
130    'LESSER'
131    'LSBRKT'
132    'LocalControlToken'
133    %% 'LocalDescriptorToken'
134    'LockStepToken'
135    'LoopbackToken'
136    %% 'MediaToken'
137    %% 'MessageSegmentToken'
138    'MethodToken'
139    'MgcIdToken'
140    %% 'ModeToken'
141    %% 'ModemToken'
142    %% 'ModifyToken'
143    %% 'MoveToken'
144    'MtpAddressToken'
145    %% 'MuxToken'
146    %% 'NeverNotifyToken'
147    'NotifyCompletionToken'
148    %% 'NotifyImmediateToken'
149    %% 'NotifyRegulatedToken'
150    'NotifyToken'
151    'Nx64Token'
152    %% 'ObservedEventsToken'
153    'OffToken'
154    'OnToken'
155    'OnOffToken'
156    %% 'OnewayToken'
157    %% 'OnewayExternalToken'
158    %% 'OnewayBothToken'
159    %% 'OrAUDITselectToken'
160    'OtherReasonToken'
161    'OutOfSvcToken'
162    %% 'PackagesToken'
163    'PendingToken'
164    %% 'PriorityToken'
165    'ProfileToken'
166    %% 'QuotedChars'
167    'RSBRKT'
168    'ReasonToken'
169    'RecvonlyToken'
170    %% 'RemoteDescriptorToken'
171    'ReplyToken'
172    'RequestIDToken'
173    %% 'ReservedGroupToken'
174    %% 'ReservedValueToken'
175    %% 'ResetEventsDescriptorToken'
176    'ResponseAckToken'
177    'RestartToken'
178    'SEP'
179    'SafeChars'
180    'SendonlyToken'
181    'SendrecvToken'
182    'ServiceChangeAddressToken'
183    'ServiceChangeToken'
184    %% 'ServiceChangeIncompleteToken'
185    %% 'ServiceStatesToken'
186    'ServicesToken'
187    'SignalListToken'
188    'SignalTypeToken'
189    %% 'SignalsToken'
190    %% 'StatsToken'
191    'StreamToken'
192    %% 'SubtractToken'
193    'SynchISDNToken'
194    'TerminationStateToken'
195    'TestToken'
196    'TimeOutToken'
197    %% 'TimeStampToken'
198    %% 'TopologyToken'
199    'TransToken'
200    'V18Token'
201    'V22Token'
202    'V22bisToken'
203    'V32Token'
204    'V32bisToken'
205    'V34Token'
206    'V76Token'
207    'V90Token'
208    'V91Token'
209    'VersionToken'
210    endOfMessage
211
212.
213
214%%----------------------------------------------------------------------
215%% Root symbol
216%%----------------------------------------------------------------------
217
218Rootsymbol megacoMessage.
219
220%%----------------------------------------------------------------------
221%% The grammar
222%%----------------------------------------------------------------------
223
224%% megacoMessage        = LWSP [authenticationHeader SEP ] message
225%% authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
226%%                        SequenceNum COLON AuthData
227%%
228%% SecurityParmIndex    = "0x" 8(HEXDIG)
229%% SequenceNum          = "0x" 8(HEXDIG)
230%% AuthData             = "0x" 24*64(HEXDIG)
231%% message              = MegacopToken SLASH version SEP mId SEP messageBody
232%% version              = 1*2(DIGIT) .
233
234megacoMessage        -> optSep authenticationHeader message endOfMessage
235                            : #'MegacoMessage'{authHeader = '$2', mess = '$3'} .
236
237optSep               -> 'SEP'    : sep .
238optSep               -> '$empty' : no_sep .
239
240authenticationHeader -> 'AuthToken' 'EQUAL' safeToken 'COLON'
241                            safeToken 'COLON' safeToken optSep
242                            : ensure_auth_header('$3', '$5', '$7') .
243authenticationHeader -> '$empty' : asn1_NOVALUE .
244
245message              -> safeToken mId : ensure_message('$1', '$2') .
246
247mId                  -> domainName               : '$1' .
248mId                  -> domainAddress            : '$1' .
249mId                  -> optSep mtpAddress optSep : '$2' .
250mId                  -> optSep deviceName optSep : '$2' .
251
252domainName           -> 'LESSER' safeToken 'GREATER' 'COLON' portNumber optSep
253                            : ensure_domainName('$2', '$5') .
254domainName           -> 'LESSER' safeToken 'GREATER'
255                            : ensure_domainName('$2', asn1_NOVALUE) .
256
257deviceName           -> pathName  : {deviceName, '$1'} .
258
259domainAddress        -> 'LSBRKT' daddr 'RSBRKT' 'COLON' portNumber optSep
260                        : ensure_domainAddress('$2', '$5') .
261domainAddress        -> 'LSBRKT' daddr 'RSBRKT'
262                        : ensure_domainAddress('$2', asn1_NOVALUE) .
263
264daddr -> '$empty'        : [] .
265daddr -> 'COLON' daddr   : [colon| '$2'] .
266daddr -> safeToken daddr : ['$1'| '$2'] .
267
268portNumber           -> safeToken : ensure_uint16('$1') .
269
270mtpAddress           -> 'MtpAddressToken' : ensure_mtpAddress('$1') .
271
272pathName             -> safeToken : ensure_pathName('$1') .
273
274safeToken            -> safeToken2              : make_safe_token('$1') .
275
276safeToken2           -> 'AddToken'              : '$1' .
277safeToken2           -> 'AuditToken'            : '$1' .
278safeToken2           -> 'AuditCapToken'         : '$1' .
279safeToken2           -> 'AuditValueToken'       : '$1' .
280safeToken2           -> 'AuthToken'             : '$1' .
281%% safeToken2           -> 'BothToken'             : '$1' . % v3
282%% safeToken2           -> 'BothwayToken'          : '$1' .
283safeToken2           -> 'BriefToken'            : '$1' .
284%% safeToken2           -> 'BufferToken'           : '$1' .
285safeToken2           -> 'CtxToken'              : '$1' .
286%% safeToken2           -> 'ContextAttrToken'      : '$1' . % v3
287safeToken2           -> 'ContextAuditToken'     : '$1' .
288%% safeToken2           -> 'ContextListToken'      : '$1' . % v3
289%% safeToken2           -> 'DigitMapToken'         : '$1' .
290%% safeToken2           -> 'DigitMapDescriptorToken' : '$1' .
291safeToken2           -> 'DirectionToken'        : '$1' . % v3
292safeToken2           -> 'DiscardToken'          : '$1' .
293safeToken2           -> 'DisconnectedToken'     : '$1' .
294safeToken2           -> 'DelayToken'            : '$1' .
295safeToken2           -> 'DurationToken'         : '$1' .
296safeToken2           -> 'EmbedToken'            : '$1' .
297%% safeToken2           -> 'EmergencyToken'        : '$1' .
298%% safeToken2           -> 'EmergencyOffToken'     : '$1' .
299safeToken2           -> 'ErrorToken'            : '$1' .
300%% safeToken2           -> 'EventBufferToken'      : '$1' .
301safeToken2           -> 'EventsToken'           : '$1' .
302%% safeToken2           -> 'ExternalToken'         : '$1' . % v3
303safeToken2           -> 'FailoverToken'         : '$1' .
304safeToken2           -> 'ForcedToken'           : '$1' .
305safeToken2           -> 'GracefulToken'         : '$1' .
306safeToken2           -> 'H221Token'             : '$1' .
307safeToken2           -> 'H223Token'             : '$1' .
308safeToken2           -> 'H226Token'             : '$1' .
309safeToken2           -> 'HandOffToken'          : '$1' .
310%% safeToken2           -> 'IEPSToken'             : '$1' . % v3
311safeToken2           -> 'ImmAckRequiredToken'   : '$1' .
312safeToken2           -> 'InactiveToken'         : '$1' .
313%% safeToken2           -> 'InternalToken'         : '$1' . % v3
314safeToken2           -> 'InterruptByEventToken' : '$1' .
315safeToken2           -> 'InterruptByNewSignalsDescrToken' : '$1' .
316%% safeToken2           -> 'IsolateToken'          : '$1' .
317safeToken2           -> 'InSvcToken'            : '$1' .
318safeToken2           -> 'KeepActiveToken'       : '$1' .
319%% safeToken2        -> 'LocalToken'            : '$1' .
320%% safeToken2        -> 'LocalDescriptorToken'  : '$1' .
321safeToken2           -> 'LocalControlToken'     : '$1' .
322safeToken2           -> 'LoopbackToken'         : '$1' .
323safeToken2           -> 'LockStepToken'         : '$1' .
324%% safeToken2           -> 'MediaToken'            : '$1' .
325%% safeToken2           -> 'MegacopToken'          : '$1' .
326safeToken2           -> 'MethodToken'           : '$1' .
327safeToken2           -> 'MgcIdToken'            : '$1' .
328%% safeToken2           -> 'ModeToken'             : '$1' .
329%% safeToken2           -> 'ModifyToken'           : '$1' .
330%% safeToken2           -> 'ModemToken'            : '$1' .
331%% safeToken2           -> 'MoveToken'             : '$1' .
332%% safeToken2        -> 'MtpToken'              : '$1' .
333%% safeToken2        -> 'MtpAddressToken'       : '$1' .
334%% safeToken2           -> 'MuxToken'              : '$1' .
335safeToken2           -> 'NotifyToken'           : '$1' .
336safeToken2           -> 'NotifyCompletionToken' : '$1' .
337safeToken2           -> 'Nx64Token'             : '$1' .
338%% safeToken2           -> 'ObservedEventsToken'   : '$1' .
339%% safeToken2           -> 'OnewayToken'           : '$1' .
340%% safeToken2           -> 'OnewayExternalToken'   : '$1' .
341%% safeToken2           -> 'OnewayBothToken'       : '$1' .
342safeToken2           -> 'OffToken'              : '$1' .
343safeToken2           -> 'OnToken'               : '$1' .
344safeToken2           -> 'OnOffToken'            : '$1' .
345safeToken2           -> 'OutOfSvcToken'         : '$1' .
346safeToken2           -> 'OtherReasonToken'      : '$1' .
347%% safeToken2           -> 'PackagesToken'         : '$1' .
348safeToken2           -> 'PendingToken'          : '$1' .
349%% safeToken2           -> 'PriorityToken'         : '$1' .
350safeToken2           -> 'ProfileToken'          : '$1' .
351safeToken2           -> 'ReasonToken'           : '$1' .
352safeToken2           -> 'RecvonlyToken'         : '$1' .
353safeToken2           -> 'ReplyToken'            : '$1' .
354safeToken2           -> 'RequestIDToken'        : '$1' .
355safeToken2           -> 'ResponseAckToken'      : '$1' .
356safeToken2           -> 'SafeChars'             : '$1' .
357safeToken2           -> 'RestartToken'          : '$1' .
358%% safeToken2           -> 'RemoteToken'           : '$1' .
359%% safeToken2           -> 'RemoteDescriptorToken' : '$1' .
360%% safeToken2           -> 'ReservedGroupToken'    : '$1' .
361%% safeToken2           -> 'ReservedValueToken'    : '$1' .
362safeToken2           -> 'SendonlyToken'         : '$1' .
363safeToken2           -> 'SendrecvToken'         : '$1' .
364safeToken2           -> 'ServicesToken'         : '$1' .
365%% safeToken2           -> 'ServiceStatesToken'    : '$1' .
366safeToken2           -> 'ServiceChangeToken'    : '$1' .
367%% safeToken2           -> 'ServiceChangeIncompleteToken' : '$1' .
368safeToken2           -> 'ServiceChangeAddressToken' : '$1' .
369safeToken2           -> 'SignalListToken'       : '$1' .
370%% safeToken2           -> 'SignalsToken'          : '$1' .
371safeToken2           -> 'SignalTypeToken'       : '$1' .
372%% safeToken2           -> 'StatsToken'            : '$1' .
373safeToken2           -> 'StreamToken'           : '$1' .
374%% safeToken2           -> 'SubtractToken'         : '$1' .
375safeToken2           -> 'SynchISDNToken'        : '$1' .
376safeToken2           -> 'TerminationStateToken' : '$1' .
377safeToken2           -> 'TestToken'             : '$1' .
378safeToken2           -> 'TimeOutToken'          : '$1' .
379%% safeToken2           -> 'TopologyToken'         : '$1' .
380safeToken2           -> 'TransToken'            : '$1' .
381safeToken2           -> 'V18Token'              : '$1' .
382safeToken2           -> 'V22Token'              : '$1' .
383safeToken2           -> 'V22bisToken'           : '$1' .
384safeToken2           -> 'V32Token'              : '$1' .
385safeToken2           -> 'V32bisToken'           : '$1' .
386safeToken2           -> 'V34Token'              : '$1' .
387safeToken2           -> 'V76Token'              : '$1' .
388safeToken2           -> 'V90Token'              : '$1' .
389safeToken2           -> 'V91Token'              : '$1' .
390safeToken2           -> 'VersionToken'          : '$1' .
391
392Erlang code.
393
394-include("megaco_text_mini_parser.hrl").
395
396