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