1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2006-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: Utility functions for creating the megaco types 24%%---------------------------------------------------------------------- 25 26-module(megaco_test_msg_prev3c_lib). 27 28%% ---- 29 30-compile({no_auto_import,[error/1]}). 31 32%% ---- 33 34-include_lib("megaco/include/megaco_message_prev3c.hrl"). 35-include_lib("megaco/include/megaco.hrl"). 36 37%% ---- 38 39-export([chk_MegacoMessage/2, 40 41 cre_MegacoMessage/1, 42 cre_MegacoMessage/2, 43 44 cre_ActionReply/2, 45 cre_ActionReply/3, 46 cre_ActionReply/4, 47 cre_ActionRequest/2, 48 cre_ActionRequest/3, 49 cre_ActionRequest/4, 50 cre_AmmDescriptor/1, 51 cre_AmmRequest/2, 52 cre_AmmsReply/1, 53 cre_AmmsReply/2, 54 cre_AuditDescriptor/0, 55 cre_AuditDescriptor/1, 56 cre_AuditDescriptor/2, 57 cre_AuditReply/1, 58 cre_AuditRequest/2, 59 cre_AuditRequest/3, 60 cre_AuditResult/2, 61 cre_AuditReturnParameter/1, 62 cre_AuthenticationHeader/3, 63 cre_BOOLEAN/1, 64 cre_Command/2, 65 cre_CommandReply/2, 66 cre_CommandRequest/1, 67 cre_CommandRequest/2, 68 cre_CommandRequest/3, 69 cre_ContextAttrAuditRequest/0, 70 cre_ContextAttrAuditRequest/3, 71 cre_ContextAttrAuditRequest/4, 72 cre_ContextAttrAuditRequest/5, 73 cre_ContextAttrAuditRequest/6, 74 cre_ContextAttrAuditRequest/7, 75 cre_ContextAttrAuditRequest/8, 76 cre_ContextAttrAuditRequest/9, 77 cre_ContextID/1, 78 cre_ContextRequest/0, 79 cre_ContextRequest/1, 80 cre_ContextRequest/2, 81 cre_ContextRequest/3, 82 cre_ContextRequest/4, 83 cre_ContextRequest/5, 84 cre_ContextRequest/6, 85 cre_DigitMapDescriptor/0, 86 cre_DigitMapDescriptor/1, 87 cre_DigitMapDescriptor/2, 88 cre_DigitMapName/1, 89 cre_DigitMapValue/1, 90 cre_DigitMapValue/4, 91 cre_DigitMapValue/5, 92 cre_ErrorCode/1, 93 cre_ErrorDescriptor/1, 94 cre_ErrorDescriptor/2, 95 cre_ErrorText/1, 96 cre_EventBufferControl/1, 97 cre_EventBufferDescriptor/1, 98 cre_EventDM/1, 99 cre_EventName/1, 100 cre_EventParameter/2, 101 cre_EventParameter/4, 102 cre_EventsDescriptor/0, 103 cre_EventsDescriptor/2, 104 cre_EventSpec/2, 105 cre_EventSpec/3, 106 %% cre_H221NonStandard/4, 107 cre_IndAuditParameter/1, 108 cre_IndAudLocalControlDescriptor/0, 109 cre_IndAudLocalControlDescriptor/4, 110 cre_IndAudLocalControlDescriptor/5, 111 cre_IndAudLocalRemoteDescriptor/1, 112 cre_IndAudLocalRemoteDescriptor/2, 113 cre_IndAudMediaDescriptor/0, 114 cre_IndAudMediaDescriptor/1, 115 cre_IndAudMediaDescriptor/2, 116 cre_IndAudPropertyGroup/1, 117 cre_IndAudPropertyParm/1, 118 cre_IndAudPropertyParm/2, 119 cre_IndAudDigitMapDescriptor/0, 120 cre_IndAudDigitMapDescriptor/1, 121 cre_IndAudEventBufferDescriptor/1, 122 cre_IndAudEventBufferDescriptor/2, 123 cre_IndAudEventsDescriptor/1, 124 cre_IndAudEventsDescriptor/2, 125 cre_IndAudEventsDescriptor/3, 126 cre_IndAudPackagesDescriptor/2, 127 cre_IndAudSeqSigList/1, 128 cre_IndAudSeqSigList/2, 129 cre_IndAudSignal/1, 130 cre_IndAudSignal/2, 131 cre_IndAudSignalsDescriptor/1, 132 cre_IndAudStatisticsDescriptor/1, 133 cre_IndAudStreamDescriptor/2, 134 cre_IndAudStreamParms/0, 135 cre_IndAudStreamParms/1, 136 cre_IndAudStreamParms/3, 137 cre_IndAudStreamParms/4, 138 cre_IndAudTerminationStateDescriptor/1, 139 cre_IndAudTerminationStateDescriptor/3, 140 cre_IndAudTerminationStateDescriptor/4, 141 cre_LocalControlDescriptor/1, 142 cre_LocalControlDescriptor/2, 143 cre_LocalControlDescriptor/4, 144 cre_LocalRemoteDescriptor/1, 145 cre_MediaDescriptor/0, 146 cre_MediaDescriptor/1, 147 cre_MediaDescriptor/2, 148 cre_Message/3, 149 cre_ModemDescriptor/2, 150 %% cre_ModemDescriptor/3, 151 cre_ModemType/1, 152 cre_MuxDescriptor/2, 153 %% cre_MuxDescriptor/3, 154 cre_MuxType/1, 155 cre_Name/1, 156 %% cre_NonStandardData/2, 157 %% cre_NonStandardIdentifier/1, 158 cre_NotifyBehaviour/2, 159 cre_NotifyCompletion/1, 160 cre_NotifyReply/1, 161 cre_NotifyReply/2, 162 cre_NotifyRequest/2, 163 cre_NotifyRequest/3, 164 cre_ObservedEvent/2, 165 cre_ObservedEvent/3, 166 cre_ObservedEvent/4, 167 cre_ObservedEventsDescriptor/2, 168 cre_PackagesDescriptor/1, 169 cre_PackagesItem/2, 170 cre_PkgdName/1, 171 cre_PkgdName/2, 172 cre_PropertyGroup/1, 173 cre_PropertyParm/2, 174 cre_PropertyParm/4, 175 cre_RegulatedEmbeddedDescriptor/0, 176 cre_RegulatedEmbeddedDescriptor/1, 177 cre_RegulatedEmbeddedDescriptor/2, 178 cre_Relation/1, 179 cre_RequestedActions/0, 180 cre_RequestedActions/1, 181 cre_RequestedActions/4, 182 cre_RequestedActions/6, 183 cre_RequestedEvent/1, 184 cre_RequestedEvent/2, 185 cre_RequestedEvent/3, 186 cre_RequestedEvent/4, 187 cre_RequestID/1, 188 cre_SecondEventsDescriptor/1, 189 cre_SecondEventsDescriptor/2, 190 cre_SecondRequestedActions/0, 191 cre_SecondRequestedActions/1, 192 cre_SecondRequestedActions/2, 193 cre_SecondRequestedActions/3, 194 cre_SecondRequestedActions/5, 195 cre_SecondRequestedEvent/2, 196 cre_SecondRequestedEvent/3, 197 cre_SecondRequestedEvent/4, 198 cre_SelectLogic/1, 199 cre_SeqSigList/2, 200 cre_ServiceChangeAddress/2, 201 cre_ServiceChangeRequest/2, 202 cre_ServiceChangeMethod/1, 203 cre_ServiceChangeParm/2, 204 cre_ServiceChangeParm/4, 205 cre_ServiceChangeParm/9, 206 cre_ServiceChangeParm/10, 207 cre_ServiceChangeProfile/1, 208 cre_ServiceChangeProfile/2, 209 cre_ServiceChangeReply/2, 210 cre_ServiceChangeResParm/0, 211 cre_ServiceChangeResParm/2, 212 cre_ServiceChangeResParm/5, 213 cre_ServiceChangeResult/1, 214 cre_ServiceState/1, 215 cre_Signal/1, 216 cre_Signal/2, 217 cre_Signal/7, 218 cre_Signal/9, 219 cre_Signal/10, 220 cre_SignalDirection/1, 221 cre_SignalName/1, 222 cre_SignalRequest/1, 223 cre_SignalsDescriptor/1, 224 cre_SignalType/1, 225 cre_SigParameter/2, 226 cre_SigParameter/4, 227 cre_StatisticsDescriptor/1, 228 cre_StatisticsParameter/1, 229 cre_StatisticsParameter/2, 230 cre_StreamDescriptor/2, 231 cre_StreamID/1, 232 cre_StreamMode/1, 233 cre_StreamParms/0, 234 cre_StreamParms/1, 235 cre_StreamParms/2, 236 cre_StreamParms/3, 237 cre_StreamParms/4, 238 cre_SubtractRequest/1, 239 cre_SubtractRequest/2, 240 cre_TopologyRequest/3, 241 cre_TopologyRequest/4, 242 cre_TerminationAudit/1, 243 cre_TerminationID/2, 244 cre_TerminationIDList/1, 245 cre_TerminationStateDescriptor/1, 246 cre_TerminationStateDescriptor/2, 247 cre_TerminationStateDescriptor/3, 248 cre_TermListAuditResult/2, 249 cre_TimeNotation/2, 250 cre_Transaction/1, 251 cre_TransactionAck/1, 252 cre_TransactionAck/2, 253 cre_TransactionId/1, 254 cre_TransactionPending/1, 255 cre_TransactionReply/2, 256 cre_TransactionReply/3, 257 cre_TransactionRequest/2, 258 cre_Value/1 259 %% cre_WildcardField/1, 260 ]). 261 262 263%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 264 265cre_MegacoMessage(M) when is_record(M, 'Message') -> 266 #'MegacoMessage'{mess = M}. 267 268cre_MegacoMessage(AH, M) 269 when is_record(AH, 'AuthenticationHeader') andalso is_record(M, 'Message') -> 270 #'MegacoMessage'{authHeader = AH, 271 mess = M}. 272 273cre_AuthenticationHeader(SPI, SN, AD) -> 274 #'AuthenticationHeader'{secParmIndex = SPI, 275 seqNum = SN, 276 ad = AD}. 277 278cre_Message(V, Mid, ED) when is_record(ED, 'ErrorDescriptor') -> 279 Body = {errorDescriptor, ED}, 280 #'Message'{version = V, 281 mId = Mid, 282 messageBody = Body}; 283cre_Message(V, Mid, Transactions) when is_list(Transactions) -> 284 Body = {transactions, Transactions}, 285 #'Message'{version = V, 286 mId = Mid, 287 messageBody = Body}; 288cre_Message(V, Mid, {transactions, T} = Body) when is_list(T) -> 289 #'Message'{version = V, 290 mId = Mid, 291 messageBody = Body}; 292cre_Message(V, Mid, {errorDescriptor, ED} = Body) 293 when is_record(ED, 'ErrorDescriptor') -> 294 #'Message'{version = V, 295 mId = Mid, 296 messageBody = Body}. 297 298 299cre_ErrorDescriptor(EC) when is_integer(EC) -> 300 #'ErrorDescriptor'{errorCode = EC}. 301 302cre_ErrorDescriptor(EC, ET) when is_integer(EC) andalso is_list(ET) -> 303 #'ErrorDescriptor'{errorCode = EC, errorText = ET}. 304 305cre_ErrorCode(C) when is_integer(C) andalso (0 =< C) andalso (C =< 65535) -> 306 C; 307cre_ErrorCode(C) -> 308 exit({invalid_ErrorCode, C}). 309 310cre_ErrorText(T) when is_list(T) -> 311 T. 312 313cre_ContextID(Val) when 0 =< Val, Val =< 4294967295 -> 314 Val; 315cre_ContextID(Val) -> 316 exit({invalid_ContextID, Val}). 317 318cre_Transaction(TR) when is_record(TR, 'TransactionRequest') -> 319 {transactionRequest, TR}; 320cre_Transaction(TP) when is_record(TP, 'TransactionPending') -> 321 {transactionPending, TP}; 322cre_Transaction(TR) when is_record(TR, 'TransactionReply') -> 323 {transactionReply, TR}; 324cre_Transaction(TRA) when is_list(TRA) -> 325 {transactionResponseAck, TRA}. 326 327cre_TransactionId(Val) when 0 =< Val, Val =< 4294967295 -> 328 Val; 329cre_TransactionId(Val) -> 330 exit({invalid_TransactionId, Val}). 331 332cre_TransactionRequest(TransID, ARs) when is_integer(TransID) andalso is_list(ARs) -> 333 #'TransactionRequest'{transactionId = TransID, 334 actions = ARs}. 335 336cre_TransactionPending(TransID) when is_integer(TransID) -> 337 #'TransactionPending'{transactionId = TransID}. 338 339cre_TransactionReply(TransID, ED) 340 when is_integer(TransID) andalso is_record(ED, 'ErrorDescriptor') -> 341 Res = {transactionError, ED}, 342 #'TransactionReply'{transactionId = TransID, 343 transactionResult = Res}; 344cre_TransactionReply(TransID, ARs) 345 when is_integer(TransID) andalso is_list(ARs) -> 346 Res = {actionReplies, ARs}, 347 #'TransactionReply'{transactionId = TransID, 348 transactionResult = Res}. 349 350cre_TransactionReply(TransID, IAR, ED) 351 when is_integer(TransID) andalso 352 ((IAR =:= 'NULL') orelse (IAR =:= asn1_NOVALUE)) andalso 353 is_record(ED, 'ErrorDescriptor') -> 354 Res = {transactionError, ED}, 355 #'TransactionReply'{transactionId = TransID, 356 transactionResult = Res}; 357cre_TransactionReply(TransID, IAR, ARs) 358 when is_integer(TransID) andalso 359 ((IAR =:= 'NULL') orelse (IAR =:= asn1_NOVALUE)) andalso 360 is_list(ARs) -> 361 Res = {actionReplies, ARs}, 362 #'TransactionReply'{transactionId = TransID, 363 transactionResult = Res}. 364 365cre_TransactionAck(FirstAck) -> 366 #'TransactionAck'{firstAck = FirstAck}. 367 368cre_TransactionAck(FirstAck, FirstAck) -> 369 #'TransactionAck'{firstAck = FirstAck}; 370cre_TransactionAck(FirstAck, LastAck) -> 371 #'TransactionAck'{firstAck = FirstAck, 372 lastAck = LastAck}. 373 374cre_ActionRequest(CtxID, CmdReqs) 375 when is_integer(CtxID) andalso is_list(CmdReqs) -> 376 #'ActionRequest'{contextId = CtxID, 377 commandRequests = CmdReqs}. 378 379cre_ActionRequest(CtxID, CtxReq, CmdReqs) 380 when is_integer(CtxID) andalso 381 is_record(CtxReq, 'ContextRequest') andalso 382 is_list(CmdReqs) -> 383 #'ActionRequest'{contextId = CtxID, 384 contextRequest = CtxReq, 385 commandRequests = CmdReqs}; 386cre_ActionRequest(CtxID, CAAR, CmdReqs) 387 when is_integer(CtxID) and 388 is_record(CAAR, 'ContextAttrAuditRequest') and 389 is_list(CmdReqs) -> 390 #'ActionRequest'{contextId = CtxID, 391 contextAttrAuditReq = CAAR, 392 commandRequests = CmdReqs}. 393 394cre_ActionRequest(CtxID, CtxReq, CAAR, CmdReqs) 395 when is_integer(CtxID) and 396 (is_record(CtxReq, 'ContextRequest') or 397 (CtxReq == asn1_NOVALUE)) and 398 (is_record(CAAR, 'ContextAttrAuditRequest') or 399 (CAAR == asn1_NOVALUE)) and 400 is_list(CmdReqs) -> 401 #'ActionRequest'{contextId = CtxID, 402 contextRequest = CtxReq, 403 contextAttrAuditReq = CAAR, 404 commandRequests = CmdReqs}. 405 406cre_ActionReply(CtxID, CmdReps) 407 when is_integer(CtxID) andalso is_list(CmdReps) -> 408 #'ActionReply'{contextId = CtxID, 409 commandReply = CmdReps}. 410 411cre_ActionReply(CtxID, ED, CmdReps) 412 when is_integer(CtxID) andalso is_record(ED, 'ErrorDescriptor') andalso is_list(CmdReps) -> 413 #'ActionReply'{contextId = CtxID, 414 errorDescriptor = ED, 415 commandReply = CmdReps}; 416cre_ActionReply(CtxID, CtxReq, CmdReps) 417 when is_integer(CtxID) andalso 418 is_record(CtxReq, 'ContextRequest') andalso 419 is_list(CmdReps) -> 420 #'ActionReply'{contextId = CtxID, 421 contextReply = CtxReq, 422 commandReply = CmdReps}. 423 424cre_ActionReply(CtxID, ED, CtxReq, CmdReps) 425 when is_integer(CtxID) andalso 426 (is_record(ED, 'ErrorDescriptor') orelse (ED =:= asn1_NOVALUE)) andalso 427 (is_record(CtxReq, 'ContextRequest') orelse (CtxReq =:= asn1_NOVALUE)) andalso 428 is_list(CmdReps) -> 429 #'ActionReply'{contextId = CtxID, 430 errorDescriptor = ED, 431 contextReply = CtxReq, 432 commandReply = CmdReps}. 433 434cre_ContextRequest() -> 435 strip_ContextRequest(#'ContextRequest'{}). 436 437cre_ContextRequest(Prio) when is_integer(Prio) andalso (0 =< Prio) andalso (Prio =< 15) -> 438 strip_ContextRequest(#'ContextRequest'{priority = Prio}); 439cre_ContextRequest(Em) when (Em =:= true) orelse (Em =:= false) orelse (Em =:= asn1_NOVALUE) -> 440 strip_ContextRequest(#'ContextRequest'{emergency = Em}); 441cre_ContextRequest(Top) when is_list(Top) -> 442 strip_ContextRequest(#'ContextRequest'{topologyReq = Top}). 443 444cre_ContextRequest(Prio, Em) 445 when (is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) and 446 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) -> 447 CR = #'ContextRequest'{priority = Prio, 448 emergency = Em}, 449 strip_ContextRequest(CR); 450cre_ContextRequest(Prio, Top) 451 when is_integer(Prio) andalso (0 =< Prio) andalso (Prio =< 15) andalso is_list(Top) -> 452 CR = #'ContextRequest'{priority = Prio, 453 topologyReq = Top}, 454 strip_ContextRequest(CR). 455 456cre_ContextRequest(Prio, Em, Top) 457 when (is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) and 458 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) and 459 (is_list(Top) or (Top == asn1_NOVALUE)) -> 460 CR = #'ContextRequest'{priority = Prio, 461 emergency = Em, 462 topologyReq = Top}, 463 strip_ContextRequest(CR). 464 465cre_ContextRequest(Prio, Em, Top, Ieps) 466 when (is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) and 467 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) and 468 (is_list(Top) or (Top == asn1_NOVALUE)) and 469 ((Ieps == true) or (Ieps == false)) -> 470 CR = #'ContextRequest'{priority = Prio, 471 emergency = Em, 472 topologyReq = Top, 473 iepscallind = Ieps}, 474 strip_ContextRequest(CR); 475cre_ContextRequest(Prio, Em, Top, Ctx) 476 when ((is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) or 477 (Prio == asn1_NOVALUE)) and 478 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) and 479 (is_list(Top) or (Top == asn1_NOVALUE)) and 480 (is_list(Ctx)) -> 481 CR = 482 case context_list_or_prop(Ctx) of 483 contextProp -> 484 #'ContextRequest'{priority = Prio, 485 emergency = Em, 486 topologyReq = Top, 487 contextProp = Ctx}; 488 contextList -> 489 #'ContextRequest'{priority = Prio, 490 emergency = Em, 491 topologyReq = Top, 492 contextList = Ctx} 493 end, 494 strip_ContextRequest(CR). 495 496cre_ContextRequest(Prio, Em, Top, Ieps, Ctx) 497 when ((is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) or 498 (Prio == asn1_NOVALUE)) and 499 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) and 500 (is_list(Top) or (Top == asn1_NOVALUE)) and 501 ((Ieps == true) or (Ieps == false) or (Ieps == asn1_NOVALUE)) and 502 (is_list(Ctx)) -> 503 CR = 504 case context_list_or_prop(Ctx) of 505 contextProp -> 506 #'ContextRequest'{priority = Prio, 507 emergency = Em, 508 topologyReq = Top, 509 iepscallind = Ieps, 510 contextProp = Ctx}; 511 contextList -> 512 #'ContextRequest'{priority = Prio, 513 emergency = Em, 514 topologyReq = Top, 515 iepscallind = Ieps, 516 contextList = Ctx} 517 end, 518 strip_ContextRequest(CR). 519 520cre_ContextRequest(Prio, Em, Top, Ieps, CtxProp, CtxList) 521 when ((is_integer(Prio) and (0 =< Prio) and (Prio =< 15)) or 522 (Prio == asn1_NOVALUE)) and 523 ((Em == true) or (Em == false) or (Em == asn1_NOVALUE)) and 524 (is_list(Top) or (Top == asn1_NOVALUE)) and 525 ((Ieps == true) or (Ieps == false) or (Ieps == asn1_NOVALUE)) and 526 (is_list(CtxProp) or (CtxProp == asn1_NOVALUE)) and 527 (is_list(CtxList) or (CtxList == asn1_NOVALUE)) -> 528 CR = #'ContextRequest'{priority = Prio, 529 emergency = Em, 530 topologyReq = Top, 531 iepscallind = Ieps, 532 contextProp = CtxProp, 533 contextList = CtxList}, 534 strip_ContextRequest(CR). 535 536context_list_or_prop(asn1_NOVALUE) -> 537 contextProp; 538context_list_or_prop([]) -> 539 contextProp; 540context_list_or_prop([H|T]) -> 541 case is_ContextID(H) of 542 true -> 543 context_list_or_prop(T, contextList); 544 false -> 545 context_list_or_prop(T, contextProp) 546 end. 547 548context_list_or_prop([], What) -> 549 What; 550context_list_or_prop([H|T], What) -> 551 case is_ContextID(H) of 552 true when What == contextList -> 553 context_list_or_prop(T, What); 554 false when What == contextProp -> 555 context_list_or_prop(T, What); 556 _ -> 557 error({invalid_contextListOrProp, H, What}) 558 end. 559 560strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE, 561 emergency = asn1_NOVALUE, 562 topologyReq = asn1_NOVALUE, 563 iepscallind = asn1_NOVALUE, 564 contextProp = asn1_NOVALUE}) -> 565 asn1_NOVALUE; 566strip_ContextRequest(#'ContextRequest'{priority = asn1_NOVALUE, 567 emergency = asn1_NOVALUE, 568 topologyReq = Top, 569 iepscallind = Ieps, 570 contextProp = Prop} = CR) -> 571 case (((Top == []) or (Top == asn1_NOVALUE)) and 572 ((Ieps == false) or (Ieps == asn1_NOVALUE)) and 573 ((Prop == []) or (Prop == asn1_NOVALUE))) of 574 true -> 575 asn1_NOVALUE; 576 false -> 577 CR 578 end; 579strip_ContextRequest(CR) -> 580 CR. 581 582cre_ContextAttrAuditRequest() -> 583 strip_ContextAttrAuditRequest(#'ContextAttrAuditRequest'{}). 584 585cre_ContextAttrAuditRequest(Top, Em, Prio) 586 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 587 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 588 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) -> 589 CAAR = #'ContextAttrAuditRequest'{topology = Top, 590 emergency = Em, 591 priority = Prio}, 592 strip_ContextAttrAuditRequest(CAAR). 593 594cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps) 595 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 596 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 597 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 598 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) -> 599 CAAR = #'ContextAttrAuditRequest'{topology = Top, 600 emergency = Em, 601 priority = Prio, 602 iepscallind = Ieps}, 603 strip_ContextAttrAuditRequest(CAAR). 604 605cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps, Ctx) 606 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 607 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 608 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 609 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) and 610 (is_list(Ctx) or (Ctx == asn1_NOVALUE)) -> 611 CAAR = #'ContextAttrAuditRequest'{topology = Top, 612 emergency = Em, 613 priority = Prio, 614 iepscallind = Ieps, 615 contextPropAud = Ctx}, 616 strip_ContextAttrAuditRequest(CAAR). 617 618cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps, Ctx, SelPrio) 619 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 620 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 621 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 622 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) and 623 (is_list(Ctx) or (Ctx == asn1_NOVALUE)) and 624 ((is_integer(SelPrio) and ((0 =< SelPrio) and (SelPrio =< 15))) or 625 (SelPrio == asn1_NOVALUE)) -> 626 CAAR = #'ContextAttrAuditRequest'{topology = Top, 627 emergency = Em, 628 priority = Prio, 629 iepscallind = Ieps, 630 contextPropAud = Ctx, 631 selectpriority = SelPrio}, 632 strip_ContextAttrAuditRequest(CAAR). 633 634cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps, Ctx, SelPrio, SelLog) 635 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 636 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 637 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 638 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) and 639 (is_list(Ctx) or (Ctx == asn1_NOVALUE)) and 640 ((is_integer(SelPrio) and ((0 =< SelPrio) and (SelPrio =< 15))) or 641 (SelPrio == asn1_NOVALUE)) -> 642 case ((SelLog == asn1_NOVALUE) orelse is_SelectLogic(SelLog)) of 643 true -> 644 CAAR = #'ContextAttrAuditRequest'{topology = Top, 645 emergency = Em, 646 priority = Prio, 647 iepscallind = Ieps, 648 contextPropAud = Ctx, 649 selectpriority = SelPrio, 650 selectLogic = SelLog}, 651 strip_ContextAttrAuditRequest(CAAR); 652 false -> 653 error({invalid_SelectLogic, SelLog, 654 ['ContextAttrAuditRequest', 655 Top, Em, Prio, Ieps, Ctx, SelPrio]}) 656 end. 657 658cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps, Ctx, 659 SelPrio, SelEm, SelIeps) 660 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 661 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 662 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 663 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) and 664 (is_list(Ctx) or (Ctx == asn1_NOVALUE)) and 665 ((is_integer(SelPrio) and ((0 =< SelPrio) and (SelPrio =< 15))) or 666 (SelPrio == asn1_NOVALUE)) and 667 ((SelEm == true) or 668 (SelEm == false) or 669 (SelEm == asn1_NOVALUE)) and 670 ((SelIeps == true) or 671 (SelIeps == false) or 672 (SelIeps == asn1_NOVALUE)) -> 673 CAAR = #'ContextAttrAuditRequest'{topology = Top, 674 emergency = Em, 675 priority = Prio, 676 iepscallind = Ieps, 677 contextPropAud = Ctx, 678 selectpriority = SelPrio, 679 selectemergency = SelEm, 680 selectiepscallind = SelIeps}, 681 strip_ContextAttrAuditRequest(CAAR). 682 683cre_ContextAttrAuditRequest(Top, Em, Prio, Ieps, Ctx, 684 SelPrio, SelEm, SelIeps, SelLog) 685 when ((Top == 'NULL') or (Top == asn1_NOVALUE)) and 686 ((Em == 'NULL') or (Em == asn1_NOVALUE)) and 687 ((Prio == 'NULL') or (Prio == asn1_NOVALUE)) and 688 ((Ieps == 'NULL') or (Ieps == asn1_NOVALUE)) and 689 (is_list(Ctx) or (Ctx == asn1_NOVALUE)) and 690 ((is_integer(SelPrio) and ((0 =< SelPrio) and (SelPrio =< 15))) or 691 (SelPrio == asn1_NOVALUE)) and 692 ((SelEm == true) or 693 (SelEm == false) or 694 (SelEm == asn1_NOVALUE)) and 695 ((SelIeps == true) or 696 (SelIeps == false) or 697 (SelIeps == asn1_NOVALUE)) -> 698 case ((SelLog == asn1_NOVALUE) orelse is_SelectLogic(SelLog)) of 699 true -> 700 CAAR = #'ContextAttrAuditRequest'{topology = Top, 701 emergency = Em, 702 priority = Prio, 703 iepscallind = Ieps, 704 contextPropAud = Ctx, 705 selectpriority = SelPrio, 706 selectemergency = SelEm, 707 selectiepscallind = SelIeps, 708 selectLogic = SelLog}, 709 strip_ContextAttrAuditRequest(CAAR); 710 false -> 711 error({invalid_SelectLogic, SelLog}) 712 end. 713 714strip_ContextAttrAuditRequest( 715 #'ContextAttrAuditRequest'{topology = asn1_NOVALUE, 716 emergency = asn1_NOVALUE, 717 priority = asn1_NOVALUE, 718 iepscallind = asn1_NOVALUE, 719 contextPropAud = asn1_NOVALUE}) -> 720 asn1_NOVALUE; 721strip_ContextAttrAuditRequest( 722 #'ContextAttrAuditRequest'{topology = asn1_NOVALUE, 723 emergency = asn1_NOVALUE, 724 priority = asn1_NOVALUE, 725 iepscallind = asn1_NOVALUE, 726 contextPropAud = []}) -> 727 asn1_NOVALUE; 728strip_ContextAttrAuditRequest(CAAR) -> 729 CAAR. 730 731 732cre_SelectLogic(andAUDITSelect = SL) -> 733 {SL, 'NULL'}; 734cre_SelectLogic(orAUDITSelect = SL) -> 735 {SL, 'NULL'}; 736cre_SelectLogic(asn1_NOVALUE) -> 737 asn1_NOVALUE. 738 739 740cre_CommandRequest(Cmd) -> 741 #'CommandRequest'{command = Cmd}. 742 743cre_CommandRequest(Cmd, Opt) 744 when ((Opt == 'NULL') or (Opt == asn1_NOVALUE)) -> 745 #'CommandRequest'{command = Cmd, 746 optional = Opt}. 747 748cre_CommandRequest(Cmd, Opt, WR) 749 when ((Opt == 'NULL') or (Opt == asn1_NOVALUE)) and 750 ((WR == 'NULL') or (WR == asn1_NOVALUE)) -> 751 #'CommandRequest'{command = Cmd, 752 optional = Opt, 753 wildcardReturn = WR}. 754 755cre_Command(addReq = Tag, Req) 756 when is_record(Req, 'AmmRequest') -> 757 {Tag, Req}; 758cre_Command(moveReq = Tag, Req) 759 when is_record(Req, 'AmmRequest') -> 760 {Tag, Req}; 761cre_Command(modReq = Tag, Req) 762 when is_record(Req, 'AmmRequest') -> 763 {Tag, Req}; 764cre_Command(subtractReq = Tag, Req) 765 when is_record(Req, 'SubtractRequest') -> 766 {Tag, Req}; 767cre_Command(auditCapRequest = Tag, Req) 768 when is_record(Req, 'AuditRequest') -> 769 {Tag, Req}; 770cre_Command(auditValueRequest = Tag, Req) 771 when is_record(Req, 'AuditRequest') -> 772 {Tag, Req}; 773cre_Command(notifyReq = Tag, Req) 774 when is_record(Req, 'NotifyRequest') -> 775 {Tag, Req}; 776cre_Command(serviceChangeReq = Tag, Req) 777 when is_record(Req, 'ServiceChangeRequest') -> 778 {Tag, Req}. 779 780cre_CommandReply(addReply = Tag, Rep) 781 when is_record(Rep, 'AmmsReply') -> 782 {Tag, Rep}; 783cre_CommandReply(moveReply = Tag, Rep) 784 when is_record(Rep, 'AmmsReply') -> 785 {Tag, Rep}; 786cre_CommandReply(modReply = Tag, Rep) 787 when is_record(Rep, 'AmmsReply') -> 788 {Tag, Rep}; 789cre_CommandReply(subtractReply = Tag, Rep) 790 when is_record(Rep, 'AmmsReply') -> 791 {Tag, Rep}; 792cre_CommandReply(auditCapReply = Tag, Rep) 793 when is_tuple(Rep) -> 794 {Tag, Rep}; 795cre_CommandReply(auditValueReply = Tag, Rep) 796 when is_tuple(Rep) -> 797 {Tag, Rep}; 798cre_CommandReply(notifyReply = Tag, Rep) 799 when is_record(Rep, 'NotifyReply') -> 800 {Tag, Rep}; 801cre_CommandReply(serviceChangeReply = Tag, Rep) 802 when is_record(Rep, 'ServiceChangeReply') -> 803 {Tag, Rep}. 804 805 806%% -- TopologyRequest -- 807 808cre_TopologyRequest(From, To, TD) 809 when (is_record(From, 'TerminationID') or 810 is_record(From, megaco_term_id)) and 811 (is_record(To, 'TerminationID') or 812 is_record(To, megaco_term_id)) and 813 ((TD == bothway) or (TD == isolate) or (TD == oneway)) -> 814 #'TopologyRequest'{terminationFrom = From, 815 terminationTo = To, 816 topologyDirection = TD}; 817cre_TopologyRequest(From, To, TDE) 818 when (is_record(From, 'TerminationID') or 819 is_record(From, megaco_term_id)) and 820 (is_record(To, 'TerminationID') or 821 is_record(To, megaco_term_id)) and 822 ((TDE == onewayexternal) or (TDE == onewayboth)) -> 823 #'TopologyRequest'{terminationFrom = From, 824 terminationTo = To, 825 topologyDirection = oneway, 826 topologyDirectionExtension = TDE}. 827 828cre_TopologyRequest(From, To, TD, SID) 829 when (is_record(From, 'TerminationID') or 830 is_record(From, megaco_term_id)) and 831 (is_record(To, 'TerminationID') or 832 is_record(To, megaco_term_id)) and 833 ((TD == bothway) or (TD == isolate) or (TD == oneway)) and 834 (is_integer(SID)) -> 835 #'TopologyRequest'{terminationFrom = From, 836 terminationTo = To, 837 topologyDirection = TD, 838 streamID = SID}; 839cre_TopologyRequest(From, To, SID, TDE) 840 when (is_record(From, 'TerminationID') or 841 is_record(From, megaco_term_id)) and 842 (is_record(To, 'TerminationID') or 843 is_record(To, megaco_term_id)) and 844 (is_integer(SID)) and 845 ((TDE == onewayexternal) or (TDE == onewayboth)) -> 846 #'TopologyRequest'{terminationFrom = From, 847 terminationTo = To, 848 topologyDirection = oneway, 849 streamID = SID, 850 topologyDirectionExtension = TDE}. 851 852cre_AmmRequest(TermIDs, Descs) -> 853 d("cre_AmmRequest -> entry with" 854 "~n TermIDs: ~p" 855 "~n Descs: ~p", [TermIDs, Descs]), 856 case is_TerminationIDList(TermIDs) andalso 857 is_AmmRequest_descriptors(Descs) of 858 true -> 859 #'AmmRequest'{terminationID = TermIDs, 860 descriptors = Descs}; 861 false -> 862 error({invalid_AmmRequest, {TermIDs, Descs}}) 863 end. 864 865cre_AmmDescriptor(D) when is_record(D, 'MediaDescriptor') -> 866 {mediaDescriptor, D}; 867cre_AmmDescriptor(D) when is_record(D, 'ModemDescriptor') -> 868 {modemDescriptor, D}; 869cre_AmmDescriptor(D) when is_record(D, 'MuxDescriptor') -> 870 {muxDescriptor, D}; 871cre_AmmDescriptor(D) when is_record(D, 'EventsDescriptor') -> 872 {eventsDescriptor, D}; 873cre_AmmDescriptor(D) when is_record(D, 'DigitMapDescriptor') -> 874 {digitMapDescriptor, D}; 875cre_AmmDescriptor(D) when is_record(D, 'AuditDescriptor') -> 876 {auditDescriptor, D}; 877cre_AmmDescriptor(D) when is_list(D) -> 878 case is_EventBufferDescriptor(D) of 879 true -> 880 {eventBufferDescriptor, D}; 881 false -> 882 case is_SignalsDescriptor(D) of 883 true -> 884 {signalsDescriptor, D}; 885 false -> 886 case is_StatisticsDescriptor(D) of 887 true -> 888 {statisticsDescriptor, D}; 889 false -> 890 error({invalid_AmmDescriptor, D}) 891 end 892 end 893 end. 894 895cre_AmmsReply(TermIDs) when is_list(TermIDs) -> 896 #'AmmsReply'{terminationID = TermIDs}. 897 898cre_AmmsReply(TermIDs, TAs) when is_list(TermIDs) andalso is_list(TAs) -> 899 #'AmmsReply'{terminationID = TermIDs, 900 terminationAudit = TAs}. 901 902cre_SubtractRequest(TermIDs) when is_list(TermIDs) -> 903 #'SubtractRequest'{terminationID = TermIDs}. 904 905cre_SubtractRequest(TermIDs, Audit) 906 when is_list(TermIDs) andalso is_record(Audit, 'AuditDescriptor') -> 907 #'SubtractRequest'{terminationID = TermIDs, 908 auditDescriptor = Audit}. 909 910cre_AuditRequest(TermID, Audit) 911 when is_record(TermID, megaco_term_id) andalso 912 is_record(Audit, 'AuditDescriptor') -> 913 #'AuditRequest'{terminationID = TermID, 914 auditDescriptor = Audit}. 915 916cre_AuditRequest(TID, Audit, [TID|_] = TIDs) 917 when is_record(TID, megaco_term_id) and 918 is_record(Audit, 'AuditDescriptor') -> 919 #'AuditRequest'{terminationID = TID, 920 auditDescriptor = Audit, 921 terminationIDList = TIDs}. 922 923cre_AuditReply(TermIDs) when is_list(TermIDs) -> 924 {contextAuditResult, TermIDs}; 925cre_AuditReply(ED) when is_record(ED, 'ErrorDescriptor') -> 926 {error, ED}; 927cre_AuditReply(Audit) when is_record(Audit, 'AuditResult') -> 928 {auditResult, Audit}; 929cre_AuditReply(ARTL) when is_record(ARTL, 'TermListAuditResult') -> 930 {auditResultTermList, ARTL}. 931 932cre_AuditResult(TID, TAs) 933 when is_record(TID, megaco_term_id) andalso is_list(TAs) -> 934 #'AuditResult'{terminationID = TID, 935 terminationAuditResult = TAs}. 936 937cre_TermListAuditResult(TIDs, TA) 938 when is_list(TIDs) andalso is_list(TA) -> 939 #'TermListAuditResult'{terminationIDList = TIDs, 940 terminationAuditResult = TA}. 941 942cre_TerminationAudit(D) -> 943 true = is_TerminationAudit(D), 944 D. 945 946cre_AuditReturnParameter(D) when is_record(D, 'ErrorDescriptor') -> 947 {errorDescriptor, D}; 948cre_AuditReturnParameter(D) when is_record(D, 'MediaDescriptor') -> 949 {mediaDescriptor, D}; 950cre_AuditReturnParameter(D) when is_record(D, 'ModemDescriptor') -> 951 {modemDescriptor, D}; 952cre_AuditReturnParameter(D) when is_record(D, 'MuxDescriptor') -> 953 {muxDescriptor, D}; 954cre_AuditReturnParameter(D) when is_record(D, 'EventsDescriptor') -> 955 {eventsDescriptor, D}; 956cre_AuditReturnParameter([H|_] = D) when is_record(H, 'EventSpec') -> 957 {eventBufferDescriptor, D}; 958cre_AuditReturnParameter(D) when is_record(D, 'DigitMapDescriptor') -> 959 {digitMapDescriptor, D}; 960cre_AuditReturnParameter(D) when is_record(D, 'ObservedEventsDescriptor') -> 961 {observedEventsDescriptor, D}; 962cre_AuditReturnParameter([H|_] = D) when is_record(H, 'StatisticsParameter') -> 963 {statisticsDescriptor, D}; 964cre_AuditReturnParameter([H|_] = D) when is_record(H, 'PackagesItem') -> 965 {packagesDescriptor, D}; 966cre_AuditReturnParameter(D) when is_record(D, 'AuditDescriptor') -> 967 {emptyDescriptors, D}; 968cre_AuditReturnParameter([H|_] = D) when is_tuple(H) -> 969 {signalsDescriptor, D}. 970 971cre_AuditDescriptor() -> 972 #'AuditDescriptor'{}. 973 974cre_AuditDescriptor([H|_] = AT) when is_atom(H) -> 975 #'AuditDescriptor'{auditToken = AT}; 976cre_AuditDescriptor(APT) -> 977 #'AuditDescriptor'{auditPropertyToken = APT}. 978 979cre_AuditDescriptor(AT, APT) -> 980 #'AuditDescriptor'{auditToken = AT, 981 auditPropertyToken = APT}. 982 983cre_IndAuditParameter(D) when is_record(D, 'IndAudMediaDescriptor') -> 984 {indAudMediaDescriptor, D}; 985cre_IndAuditParameter(D) when is_record(D, 'IndAudEventsDescriptor') -> 986 {indAudEventsDescriptor, D}; 987cre_IndAuditParameter(D) when is_record(D, 'IndAudEventBufferDescriptor') -> 988 {indAudEventBufferDescriptor, D}; 989cre_IndAuditParameter({signal, _} = D) -> 990 {indAudSignalsDescriptor, D}; 991cre_IndAuditParameter({seqSigList, _} = D) -> 992 {indAudSignalsDescriptor, D}; 993cre_IndAuditParameter(D) when is_record(D, 'IndAudDigitMapDescriptor') -> 994 {indAudDigitMapDescriptor, D}; 995cre_IndAuditParameter(D) when is_record(D, 'IndAudStatisticsDescriptor') -> 996 {indAudStatisticsDescriptor, D}; 997cre_IndAuditParameter(D) when is_record(D, 'IndAudPackagesDescriptor') -> 998 {indAudPackagesDescriptor, D}. 999 1000cre_IndAudMediaDescriptor() -> 1001 #'IndAudMediaDescriptor'{}. 1002 1003cre_IndAudMediaDescriptor(TSD) 1004 when is_record(TSD, 'IndAudTerminationStateDescriptor') -> 1005 #'IndAudMediaDescriptor'{termStateDescr = TSD}; 1006cre_IndAudMediaDescriptor(Parms) when is_record(Parms, 'IndAudStreamParms') -> 1007 Streams = {oneStream, Parms}, 1008 #'IndAudMediaDescriptor'{streams = Streams}; 1009cre_IndAudMediaDescriptor(Descs) when is_list(Descs) -> 1010 Streams = {multiStream, Descs}, 1011 #'IndAudMediaDescriptor'{streams = Streams}. 1012 1013cre_IndAudMediaDescriptor(TSD, Parms) 1014 when is_record(TSD, 'IndAudTerminationStateDescriptor') andalso 1015 is_record(Parms, 'IndAudStreamParms') -> 1016 Streams = {oneStream, Parms}, 1017 #'IndAudMediaDescriptor'{termStateDescr = TSD, 1018 streams = Streams}; 1019cre_IndAudMediaDescriptor(TSD, Descs) 1020 when is_record(TSD, 'IndAudTerminationStateDescriptor') andalso is_list(Descs) -> 1021 Streams = {multiStream, Descs}, 1022 #'IndAudMediaDescriptor'{termStateDescr = TSD, 1023 streams = Streams}. 1024 1025cre_IndAudStreamDescriptor(SID, Parms) 1026 when is_integer(SID) andalso is_record(Parms, 'IndAudStreamParms') -> 1027 #'IndAudStreamDescriptor'{streamID = SID, 1028 streamParms = Parms}; 1029cre_IndAudStreamDescriptor(SID, Parms) -> 1030 error({invalid_IndAudStreamDescriptor, [SID, Parms]}). 1031 1032cre_IndAudStreamParms() -> 1033 #'IndAudStreamParms'{}. 1034 1035cre_IndAudStreamParms(LCD) when is_record(LCD, 'IndAudLocalControlDescriptor') -> 1036 #'IndAudStreamParms'{localControlDescriptor = LCD}; 1037cre_IndAudStreamParms(SD) when is_record(SD, 'IndAudStatisticsDescriptor') -> 1038 #'IndAudStreamParms'{statisticsDescriptor = SD}. 1039 1040cre_IndAudStreamParms(LC, L, R) 1041 when is_record(LC, 'IndAudLocalControlDescriptor') andalso 1042 is_record(L, 'IndAudLocalRemoteDescriptor') andalso 1043 is_record(R, 'IndAudLocalRemoteDescriptor') -> 1044 #'IndAudStreamParms'{localControlDescriptor = LC, 1045 localDescriptor = L, 1046 remoteDescriptor = R}. 1047 1048cre_IndAudStreamParms(LC, L, R, S) 1049 when is_record(LC, 'IndAudLocalControlDescriptor') andalso 1050 is_record(L, 'IndAudLocalRemoteDescriptor') andalso 1051 is_record(R, 'IndAudLocalRemoteDescriptor') andalso 1052 is_record(S, 'IndAudStatisticsDescriptor') -> 1053 #'IndAudStreamParms'{localControlDescriptor = LC, 1054 localDescriptor = L, 1055 remoteDescriptor = R, 1056 statisticsDescriptor = S}. 1057 1058cre_IndAudLocalControlDescriptor() -> 1059 #'IndAudLocalControlDescriptor'{}. 1060 1061cre_IndAudLocalControlDescriptor(SM, RV, RG, PP) 1062 when ((SM == 'NULL') or (SM == asn1_NOVALUE)) and 1063 ((RV == 'NULL') or (RV == asn1_NOVALUE)) and 1064 ((RG == 'NULL') or (RG == asn1_NOVALUE)) and 1065 (is_list(PP) or (PP == asn1_NOVALUE)) -> 1066 #'IndAudLocalControlDescriptor'{streamMode = SM, 1067 reserveValue = RV, 1068 reserveGroup = RG, 1069 propertyParms = PP}; 1070cre_IndAudLocalControlDescriptor(RV, RG, PP, SMS) 1071 when ((RV == 'NULL') or (RV == asn1_NOVALUE)) and 1072 ((RG == 'NULL') or (RG == asn1_NOVALUE)) and 1073 (is_list(PP) or (PP == asn1_NOVALUE)) and 1074 is_atom(SMS) -> 1075 #'IndAudLocalControlDescriptor'{reserveValue = RV, 1076 reserveGroup = RG, 1077 propertyParms = PP, 1078 streamModeSel = SMS}. 1079 1080cre_IndAudLocalControlDescriptor(SM, RV, RG, PP, SMS) 1081 when (SM == 'NULL') and 1082 (is_atom(SMS) and (SMS =/= asn1_NOVALUE)) -> 1083 error({invalid_IndAudLocalControlDescriptor, [SM, RV, RG, PP, SMS]}); 1084cre_IndAudLocalControlDescriptor(SM, RV, RG, PP, SMS) 1085 when ((SM == 'NULL') or (SM == asn1_NOVALUE)) and 1086 ((RV == 'NULL') or (RV == asn1_NOVALUE)) and 1087 ((RG == 'NULL') or (RG == asn1_NOVALUE)) and 1088 (is_list(PP) or (PP == asn1_NOVALUE)) and 1089 is_atom(SMS) -> 1090 case is_StreamMode(SMS) of 1091 true -> 1092 #'IndAudLocalControlDescriptor'{streamMode = SM, 1093 reserveValue = RV, 1094 reserveGroup = RG, 1095 propertyParms = PP, 1096 streamModeSel = SMS}; 1097 false -> 1098 error({invalid_IndAudLocalControlDescriptor, SMS}) 1099 end. 1100 1101cre_IndAudPropertyParm(PkgdName) when is_list(PkgdName) -> 1102 #'IndAudPropertyParm'{name = PkgdName}. 1103 1104cre_IndAudPropertyParm(PkgdName, PP) 1105 when is_list(PkgdName) andalso is_record(PP, 'PropertyParm') -> 1106 #'IndAudPropertyParm'{name = PkgdName, propertyParms = PP}. 1107 1108cre_IndAudLocalRemoteDescriptor(Grps) 1109 when is_list(Grps) -> 1110 #'IndAudLocalRemoteDescriptor'{propGrps = Grps}. 1111 1112cre_IndAudLocalRemoteDescriptor(GID, Grps) 1113 when is_integer(GID) andalso (0 =< GID) andalso (GID =< 65535) andalso is_list(Grps) -> 1114 #'IndAudLocalRemoteDescriptor'{propGroupID = GID, 1115 propGrps = Grps}. 1116 1117cre_IndAudPropertyGroup([]) -> 1118 []; 1119cre_IndAudPropertyGroup([H|_] = PG) 1120 when is_record(H, 'IndAudPropertyParm') -> 1121 PG. 1122 1123cre_IndAudTerminationStateDescriptor([] = PP) -> 1124 #'IndAudTerminationStateDescriptor'{propertyParms = PP}; 1125cre_IndAudTerminationStateDescriptor([H|_] = PP) 1126 when is_record(H, 'IndAudPropertyParm') -> 1127 #'IndAudTerminationStateDescriptor'{propertyParms = PP}. 1128 1129cre_IndAudTerminationStateDescriptor([] = PP, EBC, SS) 1130 when ((EBC == 'NULL') or (EBC == asn1_NOVALUE)) and 1131 ((SS == 'NULL') or (SS == asn1_NOVALUE)) -> 1132 #'IndAudTerminationStateDescriptor'{propertyParms = PP, 1133 eventBufferControl = EBC, 1134 serviceState = SS}; 1135cre_IndAudTerminationStateDescriptor([H|_] = PP, EBC, SS) 1136 when is_record(H, 'IndAudPropertyParm') andalso 1137 ((EBC =:= 'NULL') orelse (EBC =:= asn1_NOVALUE)) andalso 1138 ((SS =:= 'NULL') orelse (SS =:= asn1_NOVALUE)) -> 1139 #'IndAudTerminationStateDescriptor'{propertyParms = PP, 1140 eventBufferControl = EBC, 1141 serviceState = SS}. 1142 1143cre_IndAudTerminationStateDescriptor(PP, EBC, SS, SSS) 1144 when (SS =:= 'NULL') andalso 1145 ((is_atom(SSS) andalso (SSS =/= asn1_NOVALUE))) -> 1146 error({invalid_IndAudTerminationStateDescriptor, [PP, EBC, SS, SSS]}); 1147cre_IndAudTerminationStateDescriptor([] = PP, EBC, SS, SSS) 1148 when ((EBC =:= 'NULL') orelse (EBC =:= asn1_NOVALUE)) andalso 1149 ((SS =:= 'NULL') orelse (SS =:= asn1_NOVALUE)) andalso 1150 is_atom(SSS) -> 1151 #'IndAudTerminationStateDescriptor'{propertyParms = PP, 1152 eventBufferControl = EBC, 1153 serviceState = SS, 1154 serviceStateSel = SSS}; 1155cre_IndAudTerminationStateDescriptor([H|_] = PP, EBC, SS, SSS) 1156 when is_record(H, 'IndAudPropertyParm') and 1157 ((EBC =:= 'NULL') orelse (EBC =:= asn1_NOVALUE)) andalso 1158 ((SS =:= 'NULL') orelse (SS =:= asn1_NOVALUE)) andalso 1159 is_atom(SSS) -> 1160 #'IndAudTerminationStateDescriptor'{propertyParms = PP, 1161 eventBufferControl = EBC, 1162 serviceState = SS, 1163 serviceStateSel = SSS}. 1164 1165cre_IndAudEventsDescriptor(PkgdName) 1166 when is_list(PkgdName) -> 1167 #'IndAudEventsDescriptor'{pkgdName = PkgdName}. 1168 1169cre_IndAudEventsDescriptor(RID, PkgdName) 1170 when is_integer(RID) andalso is_list(PkgdName) -> 1171 #'IndAudEventsDescriptor'{requestID = RID, pkgdName = PkgdName}; 1172cre_IndAudEventsDescriptor(PkgdName, SID) 1173 when is_list(PkgdName) andalso is_integer(SID) -> 1174 #'IndAudEventsDescriptor'{pkgdName = PkgdName, streamID = SID}. 1175 1176cre_IndAudEventsDescriptor(RID, PkgdName, SID) 1177 when is_integer(RID) andalso is_list(PkgdName) andalso is_integer(SID) -> 1178 #'IndAudEventsDescriptor'{requestID = RID, 1179 pkgdName = PkgdName, 1180 streamID = SID}. 1181 1182cre_IndAudEventBufferDescriptor(EventName) when is_list(EventName) -> 1183 #'IndAudEventBufferDescriptor'{eventName = EventName}. 1184 1185cre_IndAudEventBufferDescriptor(EventName, SID) 1186 when is_list(EventName) andalso is_integer(SID) -> 1187 #'IndAudEventBufferDescriptor'{eventName = EventName, streamID = SID}. 1188 1189cre_IndAudSignalsDescriptor(S) when is_record(S, 'IndAudSignal') -> 1190 {signal, S}; 1191cre_IndAudSignalsDescriptor(S) when is_record(S, 'IndAudSeqSigList') -> 1192 {seqSigList, S}. 1193 1194cre_IndAudSeqSigList(ID) when is_integer(ID) andalso (0=< ID) andalso (ID =< 65535) -> 1195 #'IndAudSeqSigList'{id = ID}. 1196 1197cre_IndAudSeqSigList(ID, S) 1198 when is_integer(ID) andalso (0=< ID) andalso (ID =< 65535) andalso is_record(S, 'IndAudSignal') -> 1199 #'IndAudSeqSigList'{id = ID, signalList = S}. 1200 1201cre_IndAudSignal(SigName) when is_list(SigName) -> 1202 #'IndAudSignal'{signalName = SigName}. 1203 1204cre_IndAudSignal(SigName, RID) 1205 when is_list(SigName) andalso is_integer(RID) -> 1206 #'IndAudSignal'{signalName = SigName, 1207 signalRequestID = RID}. 1208 1209cre_IndAudDigitMapDescriptor() -> 1210 #'IndAudDigitMapDescriptor'{}. 1211 1212cre_IndAudDigitMapDescriptor(DMN) when is_list(DMN) -> 1213 #'IndAudDigitMapDescriptor'{digitMapName = DMN}. 1214 1215cre_IndAudStatisticsDescriptor(StatName) when is_list(StatName) -> 1216 #'IndAudStatisticsDescriptor'{statName = StatName}. 1217 1218cre_IndAudPackagesDescriptor(N, V) 1219 when is_list(N) andalso is_integer(V) andalso (0 =< V) andalso (V =< 99) -> 1220 #'IndAudPackagesDescriptor'{packageName = N, 1221 packageVersion = V}. 1222 1223cre_NotifyRequest(TermIDs, D) 1224 when is_list(TermIDs) andalso is_record(D, 'ObservedEventsDescriptor') -> 1225 #'NotifyRequest'{terminationID = TermIDs, 1226 observedEventsDescriptor = D}. 1227 1228cre_NotifyRequest(TermIDs, D, ED) 1229 when is_list(TermIDs) andalso is_record(D, 'ObservedEventsDescriptor') andalso is_record(ED, 'ErrorDescriptor') -> 1230 #'NotifyRequest'{terminationID = TermIDs, 1231 observedEventsDescriptor = D, 1232 errorDescriptor = ED}. 1233 1234cre_NotifyReply(TermIDs) when is_list(TermIDs) -> 1235 #'NotifyReply'{terminationID = TermIDs}. 1236 1237cre_NotifyReply(TermIDs, ED) 1238 when is_list(TermIDs) andalso is_record(ED, 'ErrorDescriptor') -> 1239 #'NotifyReply'{terminationID = TermIDs, 1240 errorDescriptor = ED}. 1241 1242cre_ObservedEventsDescriptor(RID, [H|_] = L) 1243 when is_integer(RID) andalso is_record(H, 'ObservedEvent') -> 1244 #'ObservedEventsDescriptor'{requestId = RID, 1245 observedEventLst = L}. 1246 1247cre_ObservedEvent(EN, EPL) when is_list(EN) andalso is_list(EPL) -> 1248 #'ObservedEvent'{eventName = EN, 1249 eventParList = EPL}; 1250cre_ObservedEvent(EN, TN) when is_list(EN) andalso is_record(TN, 'TimeNotation') -> 1251 #'ObservedEvent'{eventName = EN, 1252 timeNotation = TN}. 1253 1254cre_ObservedEvent(EN, SID, EPL) when is_list(EN) andalso is_integer(SID) andalso is_list(EPL) -> 1255 #'ObservedEvent'{eventName = EN, 1256 streamID = SID, 1257 eventParList = EPL}; 1258cre_ObservedEvent(EN, EPL, TN) 1259 when is_list(EN) andalso is_list(EPL) andalso is_record(TN, 'TimeNotation') -> 1260 #'ObservedEvent'{eventName = EN, 1261 eventParList = EPL, 1262 timeNotation = TN}. 1263 1264cre_ObservedEvent(EN, SID, EPL, TN) 1265 when is_list(EN) andalso is_integer(SID) andalso is_list(EPL) andalso is_record(TN, 'TimeNotation') -> 1266 #'ObservedEvent'{eventName = EN, 1267 streamID = SID, 1268 eventParList = EPL, 1269 timeNotation = TN}. 1270 1271cre_EventName(N) when is_list(N) -> 1272 N. 1273 1274cre_EventParameter(N, V) when is_list(N) andalso is_list(V) -> 1275 #'EventParameter'{eventParameterName = N, 1276 value = V}. 1277 1278cre_EventParameter(N, V, relation = Tag, R) 1279 when is_list(N) andalso is_list(V) andalso is_atom(R) -> 1280 EI = {Tag, R}, 1281 #'EventParameter'{eventParameterName = N, 1282 value = V, 1283 extraInfo = EI}; 1284cre_EventParameter(N, V, range = Tag, B) 1285 when is_list(N) andalso is_list(V) andalso is_atom(B) -> 1286 EI = {Tag, B}, 1287 #'EventParameter'{eventParameterName = N, 1288 value = V, 1289 extraInfo = EI}; 1290cre_EventParameter(N, V, sublist = Tag, B) 1291 when is_list(N) andalso is_list(V) andalso is_atom(B) -> 1292 EI = {Tag, B}, 1293 #'EventParameter'{eventParameterName = N, 1294 value = V, 1295 extraInfo = EI}. 1296 1297cre_ServiceChangeRequest(TermIDs, SCP) 1298 when is_list(TermIDs) andalso is_record(SCP, 'ServiceChangeParm') -> 1299 #'ServiceChangeRequest'{terminationID = TermIDs, 1300 serviceChangeParms = SCP}. 1301 1302cre_ServiceChangeReply(TermIDs, {Tag, R} = SCR) 1303 when is_list(TermIDs) andalso is_atom(Tag) andalso is_tuple(R) -> 1304 #'ServiceChangeReply'{terminationID = TermIDs, 1305 serviceChangeResult = SCR}. 1306 1307cre_ServiceChangeResult(ED) when is_record(ED, 'ErrorDescriptor') -> 1308 {errorDescriptor, ED}; 1309cre_ServiceChangeResult(SCRP) when is_record(SCRP, 'ServiceChangeResParm') -> 1310 {serviceChangeResParms, SCRP}. 1311 1312%% cre_WildcardField(L) when list(L), length(L) == 1 -> L. 1313 1314cre_TerminationID(W, ID) 1315 when is_list(W) andalso is_list(ID) andalso (1 =< length(ID)) andalso (length(ID) =< 8) -> 1316 #'TerminationID'{wildcard = W, 1317 id = ID}. 1318 1319cre_TerminationIDList(L) when is_list(L) -> 1320 L. 1321 1322cre_MediaDescriptor() -> 1323 #'MediaDescriptor'{}. 1324 1325cre_MediaDescriptor(TSD) when is_record(TSD, 'TerminationStateDescriptor') -> 1326 #'MediaDescriptor'{termStateDescr = TSD}; 1327cre_MediaDescriptor(SP) when is_record(SP, 'StreamParms') -> 1328 Streams = {oneStream, SP}, 1329 #'MediaDescriptor'{streams = Streams}; 1330cre_MediaDescriptor([H|_] = SDs) when is_record(H, 'StreamDescriptor') -> 1331 Streams = {multiStream, SDs}, 1332 #'MediaDescriptor'{streams = Streams}. 1333 1334cre_MediaDescriptor(TSD, SP) 1335 when is_record(TSD, 'TerminationStateDescriptor') andalso 1336 is_record(SP, 'StreamParms') -> 1337 Streams = {oneStream, SP}, 1338 #'MediaDescriptor'{termStateDescr = TSD, 1339 streams = Streams}; 1340cre_MediaDescriptor(TSD, [H|_] = SDs) 1341 when is_record(TSD, 'TerminationStateDescriptor') andalso 1342 is_record(H, 'StreamDescriptor') -> 1343 Streams = {multiStream, SDs}, 1344 #'MediaDescriptor'{termStateDescr = TSD, 1345 streams = Streams}. 1346 1347cre_StreamDescriptor(SID, SP) when is_integer(SID) andalso is_record(SP, 'StreamParms') -> 1348 #'StreamDescriptor'{streamID = SID, 1349 streamParms = SP}. 1350 1351cre_StreamParms() -> 1352 #'StreamParms'{}. 1353 1354cre_StreamParms(LCD) when is_record(LCD, 'LocalControlDescriptor') -> 1355 #'StreamParms'{localControlDescriptor = LCD}; 1356cre_StreamParms(LD) when is_record(LD, 'LocalRemoteDescriptor') -> 1357 #'StreamParms'{localDescriptor = LD}; 1358cre_StreamParms(SD) when is_list(SD) -> 1359 #'StreamParms'{statisticsDescriptor = SD}. 1360 1361cre_StreamParms(LCD, LD) 1362 when (is_record(LCD, 'LocalControlDescriptor') or (LCD == asn1_NOVALUE)) and 1363 (is_record(LD, 'LocalRemoteDescriptor') or (LD == asn1_NOVALUE)) -> 1364 #'StreamParms'{localControlDescriptor = LCD, 1365 localDescriptor = LD}. 1366 1367cre_StreamParms(LCD, LD, RD) 1368 when (is_record(LCD, 'LocalControlDescriptor') or (LCD == asn1_NOVALUE)) and 1369 (is_record(LD, 'LocalRemoteDescriptor') or (LD == asn1_NOVALUE)) and 1370 (is_record(RD, 'LocalRemoteDescriptor') or (RD == asn1_NOVALUE)) -> 1371 #'StreamParms'{localControlDescriptor = LCD, 1372 localDescriptor = LD, 1373 remoteDescriptor = RD}; 1374cre_StreamParms(LCD, LD, SD) 1375 when (is_record(LCD, 'LocalControlDescriptor') or (LCD == asn1_NOVALUE)) and 1376 (is_record(LD, 'LocalRemoteDescriptor') or (LD == asn1_NOVALUE)) and 1377 (is_list(SD) or (SD == asn1_NOVALUE)) -> 1378 #'StreamParms'{localControlDescriptor = LCD, 1379 localDescriptor = LD, 1380 statisticsDescriptor = SD}. 1381 1382cre_StreamParms(LCD, LD, RD, SD) 1383 when (is_record(LCD, 'LocalControlDescriptor') or (LCD == asn1_NOVALUE)) and 1384 (is_record(LD, 'LocalRemoteDescriptor') or (LD == asn1_NOVALUE)) and 1385 (is_record(RD, 'LocalRemoteDescriptor') or (RD == asn1_NOVALUE)) and 1386 (is_list(SD) or (SD == asn1_NOVALUE)) -> 1387 #'StreamParms'{localControlDescriptor = LCD, 1388 localDescriptor = LD, 1389 remoteDescriptor = RD, 1390 statisticsDescriptor = SD}. 1391 1392cre_LocalControlDescriptor(SM) when is_atom(SM) -> 1393 #'LocalControlDescriptor'{streamMode = SM, propertyParms = []}; 1394cre_LocalControlDescriptor([H|_] = PP) when is_record(H, 'PropertyParm') -> 1395 #'LocalControlDescriptor'{propertyParms = PP}. 1396 1397cre_LocalControlDescriptor(SM, [H|_] = PP) 1398 when is_atom(SM) andalso is_record(H, 'PropertyParm') -> 1399 #'LocalControlDescriptor'{streamMode = SM, 1400 propertyParms = PP}. 1401 1402cre_LocalControlDescriptor(SM, RV, RG, [H|_] = PP) 1403 when is_atom(SM) andalso 1404 ((RV =:= true) orelse (RV =:= false) orelse (RV =:= asn1_NOVALUE)) andalso 1405 ((RG =:= true) orelse (RG =:= false) orelse (RG =:= asn1_NOVALUE)) andalso 1406 is_record(H, 'PropertyParm') -> 1407 #'LocalControlDescriptor'{streamMode = SM, 1408 reserveValue = RV, 1409 reserveGroup = RG, 1410 propertyParms = PP}. 1411 1412cre_StreamMode(sendOnly = M) -> 1413 M; 1414cre_StreamMode(recvOnly = M) -> 1415 M; 1416cre_StreamMode(sendRecv = M) -> 1417 M; 1418cre_StreamMode(inactive = M) -> 1419 M; 1420cre_StreamMode(loopBack = M) -> 1421 M. 1422 1423cre_PropertyParm(N, [H|_] = V) when is_list(N) andalso is_list(H) -> 1424 #'PropertyParm'{name = N, value = V}. 1425 1426cre_PropertyParm(N, [H|_] = V, relation = Tag, R) 1427 when is_list(N) andalso is_list(H) andalso is_atom(R) -> 1428 EI = {Tag, R}, 1429 #'PropertyParm'{name = N, value = V, extraInfo = EI}; 1430cre_PropertyParm(N, [H|_] = V, range = Tag, B) 1431 when is_list(N) andalso is_list(H) andalso is_atom(B) -> 1432 EI = {Tag, B}, 1433 #'PropertyParm'{name = N, value = V, extraInfo = EI}; 1434cre_PropertyParm(N, [H|_] = V, sublist = Tag, B) 1435 when is_list(N) andalso is_list(H) andalso is_atom(B) -> 1436 EI = {Tag, B}, 1437 #'PropertyParm'{name = N, value = V, extraInfo = EI}. 1438 1439 1440cre_Name(N) when is_list(N) andalso (length(N) == 2) -> 1441 N. 1442 1443cre_PkgdName(N) when is_list(N) -> 1444 case string:tokens(N, [$\\]) of 1445 [_PkgName, _ItemID] -> 1446 N; 1447 _ -> 1448 error({invalid_PkgdName, N}) 1449 end. 1450cre_PkgdName(root, root) -> 1451 "*/*"; 1452cre_PkgdName(PackageName, root) 1453 when is_list(PackageName) andalso (length(PackageName) =< 64) -> 1454 PackageName ++ "/*"; 1455cre_PkgdName(PackageName, ItemID) 1456 when ((is_list(PackageName) andalso (length(PackageName) =< 64)) andalso 1457 (is_list(ItemID) andalso (length(ItemID) =< 64))) -> 1458 PackageName ++ "/" ++ ItemID; 1459cre_PkgdName(PackageName, ItemID) -> 1460 error({invalid_PkgdName, {PackageName, ItemID}}). 1461 1462cre_Relation(greaterThan = R) -> 1463 R; 1464cre_Relation(smallerThan = R) -> 1465 R; 1466cre_Relation(unequalTo = R) -> 1467 R. 1468 1469cre_LocalRemoteDescriptor([H|_] = PGs) when is_list(H) -> 1470 #'LocalRemoteDescriptor'{propGrps = PGs}. 1471 1472cre_PropertyGroup([H|_] = PG) when is_record(H, 'PropertyParm') -> 1473 PG. 1474 1475cre_TerminationStateDescriptor([H|_] = PPs) when is_record(H, 'PropertyParm') -> 1476 #'TerminationStateDescriptor'{propertyParms = PPs}. 1477 1478cre_TerminationStateDescriptor([H|_] = PPs, off = EBC) 1479 when is_record(H, 'PropertyParm') -> 1480 #'TerminationStateDescriptor'{propertyParms = PPs, 1481 eventBufferControl = EBC}; 1482cre_TerminationStateDescriptor([H|_] = PPs, lockStep = EBC) 1483 when is_record(H, 'PropertyParm') -> 1484 #'TerminationStateDescriptor'{propertyParms = PPs, 1485 eventBufferControl = EBC}; 1486cre_TerminationStateDescriptor([H|_] = PPs, test = SS) 1487 when is_record(H, 'PropertyParm') -> 1488 #'TerminationStateDescriptor'{propertyParms = PPs, 1489 serviceState = SS}; 1490cre_TerminationStateDescriptor([H|_] = PPs, outOfSvc = SS) 1491 when is_record(H, 'PropertyParm') -> 1492 #'TerminationStateDescriptor'{propertyParms = PPs, 1493 serviceState = SS}; 1494cre_TerminationStateDescriptor([H|_] = PPs, inSvc = SS) 1495 when is_record(H, 'PropertyParm') -> 1496 #'TerminationStateDescriptor'{propertyParms = PPs, 1497 serviceState = SS}. 1498 1499cre_TerminationStateDescriptor([H|_] = PPs, EMC, SS) 1500 when is_record(H, 'PropertyParm') andalso 1501 ((EMC =:= off) orelse (EMC =:= lockStep)) andalso 1502 ((SS =:= test) orelse (SS =:= outOfSvc) orelse (SS =:= inSvc)) -> 1503 #'TerminationStateDescriptor'{propertyParms = PPs, 1504 eventBufferControl = EMC, 1505 serviceState = SS}. 1506 1507cre_EventBufferControl(off = EBC) -> 1508 EBC; 1509cre_EventBufferControl(lockStep = EBC) -> 1510 EBC. 1511 1512cre_ServiceState(test = SS) -> 1513 SS; 1514cre_ServiceState(outOfSvc = SS) -> 1515 SS; 1516cre_ServiceState(inSvc = SS) -> 1517 SS. 1518 1519cre_MuxDescriptor(MT, [H|_] = TL) 1520 when is_atom(MT) andalso is_record(H, 'TerminationID') -> 1521 #'MuxDescriptor'{muxType = MT, termList = TL}. 1522 1523%% cre_MuxDescriptor(MT, [H|_] = TL, NSD) 1524%% when atom(MT), record(H, 'TerminationID'), record(NSD, 'NonStandardData') -> 1525%% #'MuxDescriptor'{muxType = MT, termList = TL, nonStandardData = NSD}. 1526 1527cre_MuxType(h221 = MT) -> 1528 MT; 1529cre_MuxType(h223 = MT) -> 1530 MT; 1531cre_MuxType(h226 = MT) -> 1532 MT; 1533cre_MuxType(v76 = MT) -> 1534 MT; 1535cre_MuxType(nx64k = MT) -> 1536 MT. 1537 1538cre_StreamID(Val) when 0 =< Val, Val =< 65535 -> 1539 Val; 1540cre_StreamID(Val) -> 1541 exit({invalid_ContextID, Val}). 1542 1543%% RequestID must be present if eventList is non empty 1544cre_EventsDescriptor() -> 1545 #'EventsDescriptor'{eventList = []}. 1546 1547cre_EventsDescriptor(RID, [H|_] = EL) 1548 when is_integer(RID) andalso is_record(H, 'RequestedEvent') -> 1549 #'EventsDescriptor'{requestID = RID, eventList = EL}. 1550 1551cre_RequestedEvent(N) -> 1552 #'RequestedEvent'{pkgdName = N}. 1553 1554cre_RequestedEvent(N, EPL) 1555 when is_list(N) andalso is_list(EPL) -> 1556 #'RequestedEvent'{pkgdName = N, 1557 evParList = EPL}; 1558cre_RequestedEvent(N, EA) 1559 when is_list(N) andalso is_record(EA, 'RequestedActions')-> 1560 #'RequestedEvent'{pkgdName = N, 1561 eventAction = EA}. 1562 1563 1564cre_RequestedEvent(N, SID, EPL) 1565 when is_list(N) and is_integer(SID) and is_list(EPL) -> 1566 #'RequestedEvent'{pkgdName = N, 1567 streamID = SID, 1568 evParList = EPL}; 1569cre_RequestedEvent(N, EA, EPL) 1570 when is_list(N) and is_record(EA, 'RequestedActions') and is_list(EPL) -> 1571 #'RequestedEvent'{pkgdName = N, 1572 eventAction = EA, 1573 evParList = EPL}. 1574 1575cre_RequestedEvent(N, SID, EA, EPL) 1576 when is_list(N) and 1577 is_integer(SID) and 1578 is_record(EA, 'RequestedActions') and 1579 is_list(EPL) -> 1580 #'RequestedEvent'{pkgdName = N, 1581 streamID = SID, 1582 eventAction = EA, 1583 evParList = EPL}. 1584 1585cre_RegulatedEmbeddedDescriptor() -> 1586 #'RegulatedEmbeddedDescriptor'{}. 1587 1588cre_RegulatedEmbeddedDescriptor(D) -> 1589 case is_SecondEventsDescriptor(D) of 1590 true -> 1591 #'RegulatedEmbeddedDescriptor'{secondEvent = D}; 1592 false -> 1593 case is_SignalsDescriptor(D) of 1594 true -> 1595 #'RegulatedEmbeddedDescriptor'{signalsDescriptor = D}; 1596 false -> 1597 error({invalid_RegulatedEmbeddedDescriptor, D}) 1598 end 1599 end. 1600 1601cre_RegulatedEmbeddedDescriptor(SED, SD) 1602 when ((SED == asn1_NOVALUE) or is_record(SED, 'SecondEventsDescriptor')) and 1603 ((SD == asn1_NOVALUE) or is_list(SD)) -> 1604 #'RegulatedEmbeddedDescriptor'{secondEvent = SED, 1605 signalsDescriptor = SD}. 1606 1607cre_NotifyBehaviour(notifyImmediate = Tag, 'NULL' = Val) -> 1608 {Tag, Val}; 1609cre_NotifyBehaviour(notifyRegulated = Tag, Val) 1610 when is_record(Val, 'RegulatedEmbeddedDescriptor') -> 1611 {Tag, Val}; 1612cre_NotifyBehaviour(neverNotify = Tag, 'NULL' = Val) -> 1613 {Tag, Val}; 1614cre_NotifyBehaviour(Tag, Val) -> 1615 error({invalid_NotifyBehaviour, [Tag, Val]}). 1616 1617cre_RequestedActions() -> 1618 #'RequestedActions'{}. 1619 1620cre_RequestedActions(KA) 1621 when (KA == true) or (KA == true) -> 1622 #'RequestedActions'{keepActive = KA}; 1623cre_RequestedActions(SE) 1624 when is_record(SE, 'SecondEventsDescriptor') -> 1625 #'RequestedActions'{secondEvent = SE}; 1626cre_RequestedActions(SD) 1627 when is_list(SD) -> 1628 #'RequestedActions'{signalsDescriptor = SD}; 1629cre_RequestedActions({Tag, _} = EDM) 1630 when is_atom(Tag) -> 1631 #'RequestedActions'{eventDM = EDM}. 1632 1633cre_RequestedActions(KA, {Tag, _} = EDM, SE, SD) 1634 when ((KA == true) or (KA == true) or (KA == asn1_NOVALUE)) and 1635 (is_atom(Tag) or (EDM == asn1_NOVALUE)) and 1636 (is_record(SE, 'SecondEventsDescriptor') or (SE == asn1_NOVALUE)) and 1637 (is_list(SD) or (SD == asn1_NOVALUE)) -> 1638 #'RequestedActions'{keepActive = KA, 1639 eventDM = EDM, 1640 secondEvent = SE, 1641 signalsDescriptor = SD}. 1642 1643cre_RequestedActions(KA, {EDMTag, _} = EDM, SE, SD, {NBTag, _} = NB, RED) 1644 when ((KA == true) or (KA == true) or (KA == asn1_NOVALUE)) and 1645 (is_atom(EDMTag) or (EDM == asn1_NOVALUE)) and 1646 (is_record(SE, 'SecondEventsDescriptor') or (SE == asn1_NOVALUE)) and 1647 (is_list(SD) or (SD == asn1_NOVALUE)) and 1648 (is_atom(NBTag) or (NB == asn1_NOVALUE)) and 1649 ((RED == 'NULL') or (RED == asn1_NOVALUE)) -> 1650 #'RequestedActions'{keepActive = KA, 1651 eventDM = EDM, 1652 secondEvent = SE, 1653 signalsDescriptor = SD, 1654 notifyBehaviour = NB, 1655 resetEventsDescriptor = RED}. 1656 1657cre_EventDM(N) when is_list(N) -> 1658 {digitMapName, N}; 1659cre_EventDM(V) when is_record(V, 'DigitMapValue') -> 1660 {digitMapValue, V}. 1661 1662cre_SecondEventsDescriptor([H|_] = EL) 1663 when is_record(H, 'SecondRequestedEvent') -> 1664 #'SecondEventsDescriptor'{eventList = EL}. 1665 1666cre_SecondEventsDescriptor(RID, [H|_] = EL) 1667 when is_integer(RID) andalso is_record(H, 'SecondRequestedEvent') -> 1668 #'SecondEventsDescriptor'{requestID = RID, eventList = EL}. 1669 1670cre_SecondRequestedEvent(N, EPL) 1671 when is_list(N) andalso is_list(EPL) -> 1672 #'SecondRequestedEvent'{pkgdName = N, 1673 evParList = EPL}; 1674cre_SecondRequestedEvent(N, EPL) -> 1675 error({invalid_SecondRequestedEvent, [N, EPL]}). 1676 1677cre_SecondRequestedEvent(N, SID, EPL) 1678 when is_list(N) andalso is_integer(SID) andalso is_list(EPL) -> 1679 #'SecondRequestedEvent'{pkgdName = N, 1680 streamID = SID, 1681 evParList = EPL}; 1682cre_SecondRequestedEvent(N, EA, EPL) 1683 when is_list(N) andalso 1684 is_record(EA, 'SecondRequestedActions') andalso 1685 is_list(EPL) -> 1686 #'SecondRequestedEvent'{pkgdName = N, 1687 eventAction = EA, 1688 evParList = EPL}. 1689 1690cre_SecondRequestedEvent(N, SID, EA, EPL) 1691 when is_list(N) andalso 1692 is_integer(SID) andalso 1693 is_record(EA, 'SecondRequestedActions') andalso 1694 is_list(EPL) -> 1695 #'SecondRequestedEvent'{pkgdName = N, 1696 streamID = SID, 1697 eventAction = EA, 1698 evParList = EPL}. 1699 1700cre_SecondRequestedActions() -> 1701 #'SecondRequestedActions'{}. 1702 1703cre_SecondRequestedActions(KA) 1704 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) -> 1705 #'SecondRequestedActions'{keepActive = KA}; 1706cre_SecondRequestedActions(SD) when is_list(SD) -> 1707 #'SecondRequestedActions'{signalsDescriptor = SD}; 1708cre_SecondRequestedActions({Tag, _} = Val) when is_atom(Tag) -> 1709 case is_EventDM(Val) of 1710 true -> 1711 #'SecondRequestedActions'{eventDM = Val}; 1712 false -> 1713 case is_NotifyBehaviour(Val) of 1714 true -> 1715 #'SecondRequestedActions'{notifyBehaviour = Val}; 1716 false -> 1717 error({invalid_SecondRequestedActions, Val}) 1718 end 1719 end; 1720cre_SecondRequestedActions('NULL' = RED) -> 1721 #'SecondRequestedActions'{resetEventsDescriptor = RED}. 1722 1723cre_SecondRequestedActions(KA, SD) 1724 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1725 is_list(SD) -> 1726 #'SecondRequestedActions'{keepActive = KA, signalsDescriptor = SD}; 1727cre_SecondRequestedActions(KA, {Tag, _} = Val) 1728 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1729 is_atom(Tag) -> 1730 case is_EventDM(Val) of 1731 true -> 1732 #'SecondRequestedActions'{keepActive = KA, 1733 eventDM = Val}; 1734 false -> 1735 case is_NotifyBehaviour(Val) of 1736 true -> 1737 #'SecondRequestedActions'{keepActive = KA, 1738 notifyBehaviour = Val}; 1739 false -> 1740 error({invalid_SecondRequestedActions, Val}) 1741 end 1742 end; 1743cre_SecondRequestedActions(KA, 'NULL' = RED) 1744 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) -> 1745 #'SecondRequestedActions'{keepActive = KA, 1746 resetEventsDescriptor = RED}. 1747 1748cre_SecondRequestedActions(KA, {Tag, _} = EDM, SD) 1749 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1750 is_atom(Tag) and 1751 is_list(SD) -> 1752 #'SecondRequestedActions'{keepActive = KA, 1753 eventDM = EDM, 1754 signalsDescriptor = SD}; 1755cre_SecondRequestedActions(KA, SD, {Tag, _} = NB) 1756 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1757 is_list(SD) and 1758 is_atom(Tag) -> 1759 #'SecondRequestedActions'{keepActive = KA, 1760 signalsDescriptor = SD, 1761 notifyBehaviour = NB}; 1762cre_SecondRequestedActions(KA, SD, 'NULL' = RED) 1763 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1764 is_list(SD) -> 1765 #'SecondRequestedActions'{keepActive = KA, 1766 signalsDescriptor = SD, 1767 resetEventsDescriptor = RED}. 1768 1769cre_SecondRequestedActions(KA, {EDMTag, _} = EDM, SD, 1770 {NBTag, _} = NB, RED) 1771 when ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1772 (is_atom(EDMTag) or (EDM == asn1_NOVALUE)) and 1773 (is_list(SD) or (SD == asn1_NOVALUE)) and 1774 (is_atom(NBTag) or (NB == asn1_NOVALUE)) and 1775 ((RED == 'NULL') or (RED == asn1_NOVALUE)) -> 1776 #'SecondRequestedActions'{keepActive = KA, 1777 eventDM = EDM, 1778 signalsDescriptor = SD, 1779 notifyBehaviour = NB, 1780 resetEventsDescriptor = RED}. 1781 1782cre_EventBufferDescriptor([H|_] = D) when is_record(H, 'EventSpec') -> 1783 D. 1784 1785cre_EventSpec(N, [H|_] = EPL) when is_list(N) andalso is_record(H, 'EventParameter') -> 1786 #'EventSpec'{eventName = N, eventParList = EPL}. 1787 1788cre_EventSpec(N, SID, [H|_] = EPL) 1789 when is_list(N) andalso is_integer(SID) andalso is_record(H, 'EventParameter') -> 1790 #'EventSpec'{eventName = N, streamID = SID, eventParList = EPL}. 1791 1792cre_SignalsDescriptor(D) -> 1793 case is_SignalsDescriptor(D) of 1794 true -> 1795 D; 1796 false -> 1797 error({invalid_SignalsDescriptor, D}) 1798 end. 1799 1800cre_SignalRequest(S) when is_record(S, 'Signal') -> 1801 {signal, S}; 1802cre_SignalRequest(S) when is_record(S, 'SeqSigList') -> 1803 {seqSigList, S}. 1804 1805cre_SeqSigList(ID, [H|_] = SL) 1806 when is_integer(ID) andalso (0 =< ID) andalso (ID =< 65535) andalso is_record(H, 'Signal') -> 1807 #'SeqSigList'{id = ID, signalList = SL}. 1808 1809cre_Signal(N) when is_list(N) -> 1810 #'Signal'{signalName = N}. 1811 1812cre_Signal(N, SPL) when is_list(N) andalso is_list(SPL) -> 1813 #'Signal'{signalName = N, 1814 sigParList = SPL}. 1815 1816cre_Signal(N, SID, ST, Dur, NC, KA, SPL) 1817 when is_list(N) and 1818 (is_integer(SID) or (SID == asn1_NOVALUE)) and 1819 ((ST == brief) or (ST == onOff) or (ST == timeOut) or 1820 (ST == asn1_NOVALUE)) and 1821 ((is_integer(Dur) and (0 =< Dur) and (Dur =< 65535)) or 1822 (Dur == asn1_NOVALUE)) and 1823 (is_list(NC) or (NC == asn1_NOVALUE)) and 1824 ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1825 is_list(SPL) -> 1826 #'Signal'{signalName = N, 1827 streamID = SID, 1828 sigType = ST, 1829 duration = Dur, 1830 notifyCompletion = NC, 1831 keepActive = KA, 1832 sigParList = SPL}. 1833 1834cre_Signal(N, SID, ST, Dur, NC, KA, SPL, Dir, RID) 1835 when is_list(N) and 1836 (is_integer(SID) or (SID == asn1_NOVALUE)) and 1837 ((ST == brief) or (ST == onOff) or (ST == timeOut) or 1838 (ST == asn1_NOVALUE)) and 1839 ((is_integer(Dur) and (0 =< Dur) and (Dur =< 65535)) or 1840 (Dur == asn1_NOVALUE)) and 1841 (is_list(NC) or (NC == asn1_NOVALUE)) and 1842 ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1843 is_list(SPL) and 1844 ((Dir == internal) or (Dir == external) or (Dir == both) or 1845 (Dir == asn1_NOVALUE)) and 1846 (is_integer(RID) or (RID == asn1_NOVALUE)) -> 1847 #'Signal'{signalName = N, 1848 streamID = SID, 1849 sigType = ST, 1850 duration = Dur, 1851 notifyCompletion = NC, 1852 keepActive = KA, 1853 sigParList = SPL, 1854 direction = Dir, 1855 requestID = RID}. 1856 1857cre_Signal(N, SID, ST, Dur, NC, KA, SPL, Dir, RID, ISIG) 1858 when is_list(N) and 1859 (is_integer(SID) or (SID == asn1_NOVALUE)) and 1860 ((ST == brief) or (ST == onOff) or (ST == timeOut) or 1861 (ST == asn1_NOVALUE)) and 1862 ((is_integer(Dur) and (0 =< Dur) and (Dur =< 65535)) or 1863 (Dur == asn1_NOVALUE)) and 1864 (is_list(NC) or (NC == asn1_NOVALUE)) and 1865 ((KA == true) or (KA == false) or (KA == asn1_NOVALUE)) and 1866 is_list(SPL) and 1867 ((Dir == internal) or (Dir == external) or (Dir == both) or 1868 (Dir == asn1_NOVALUE)) and 1869 (is_integer(RID) or (RID == asn1_NOVALUE)) and 1870 (is_integer(ISIG) or (ISIG == asn1_NOVALUE)) -> 1871 #'Signal'{signalName = N, 1872 streamID = SID, 1873 sigType = ST, 1874 duration = Dur, 1875 notifyCompletion = NC, 1876 keepActive = KA, 1877 sigParList = SPL, 1878 direction = Dir, 1879 requestID = RID, 1880 intersigDelay = ISIG}. 1881 1882cre_SignalType(brief = ST) -> 1883 ST; 1884cre_SignalType(onOff = ST) -> 1885 ST; 1886cre_SignalType(timeOut = ST) -> 1887 ST. 1888 1889cre_SignalDirection(internal = SD) -> 1890 SD; 1891cre_SignalDirection(external = SD) -> 1892 SD; 1893cre_SignalDirection(both = SD) -> 1894 SD. 1895 1896cre_SignalName(N) -> 1897 cre_PkgdName(N). 1898 1899cre_NotifyCompletion(L) when is_list(L) -> 1900 Vals = [onTimeOut, onInterruptByEvent, 1901 onInterruptByNewSignalDescr, otherReason], 1902 F = fun(E) -> case lists:member(E, Vals) of 1903 true -> 1904 ok; 1905 false -> 1906 exit({invalid_NotifyCompletion, E}) 1907 end 1908 end, 1909 lists:foreach(F, L), 1910 L. 1911 1912cre_SigParameter(N, V) when is_list(N) andalso is_list(V) -> 1913 #'SigParameter'{sigParameterName = N, value = V}. 1914 1915cre_SigParameter(N, V, relation = Tag, R) 1916 when is_list(N) and is_list(V) and is_atom(R) -> 1917 EI = {Tag, R}, 1918 #'SigParameter'{sigParameterName = N, value = V, extraInfo = EI}; 1919cre_SigParameter(N, V, range = Tag, B) 1920 when is_list(N) and is_list(V) and is_atom(B) -> 1921 EI = {Tag, B}, 1922 #'SigParameter'{sigParameterName = N, value = V, extraInfo = EI}; 1923cre_SigParameter(N, V, sublist = Tag, B) 1924 when is_list(N) and is_list(V) and is_atom(B) -> 1925 EI = {Tag, B}, 1926 #'SigParameter'{sigParameterName = N, value = V, extraInfo = EI}. 1927 1928cre_RequestID(Val) when 0 =< Val, Val =< 4294967295 -> 1929 Val; 1930cre_RequestID(Val) -> 1931 exit({invalid_RequestID, Val}). 1932 1933cre_ModemDescriptor(MTL, MPL) when is_list(MTL) andalso is_list(MPL) -> 1934 #'ModemDescriptor'{mtl = MTL, mpl = MPL}. 1935 1936%% cre_ModemDescriptor(MTL, MPL, NSD) 1937%% when list(MTL), list(MPL), record(NSD, 'NonStandardData') -> 1938%% #'ModemDescriptor'{mtl = MTL, mpl = MPL}. 1939 1940cre_ModemType(v18 = MT) -> 1941 MT; 1942cre_ModemType(v22 = MT) -> 1943 MT; 1944cre_ModemType(v22bis = MT) -> 1945 MT; 1946cre_ModemType(v32 = MT) -> 1947 MT; 1948cre_ModemType(v32bis = MT) -> 1949 MT; 1950cre_ModemType(v34 = MT) -> 1951 MT; 1952cre_ModemType(v90 = MT) -> 1953 MT; 1954cre_ModemType(v91 = MT) -> 1955 MT; 1956cre_ModemType(synchISDN = MT) -> 1957 MT. 1958 1959cre_DigitMapDescriptor() -> 1960 #'DigitMapDescriptor'{}. 1961 1962cre_DigitMapDescriptor(N) when is_list(N) -> 1963 #'DigitMapDescriptor'{digitMapName = N}; 1964cre_DigitMapDescriptor(V) when is_record(V, 'DigitMapValue') -> 1965 #'DigitMapDescriptor'{digitMapValue = V}. 1966 1967cre_DigitMapDescriptor(N, V) when is_list(N) andalso is_record(V, 'DigitMapValue') -> 1968 #'DigitMapDescriptor'{digitMapName = N, digitMapValue = V}. 1969 1970cre_DigitMapName(N) -> 1971 cre_Name(N). 1972 1973cre_DigitMapValue(DMB) when is_list(DMB) -> 1974 #'DigitMapValue'{digitMapBody = DMB}. 1975 1976cre_DigitMapValue(Start, Short, Long, DMB) -> 1977 cre_DigitMapValue(Start, Short, Long, DMB, asn1_NOVALUE). 1978 1979cre_DigitMapValue(Start, Short, Long, DMB, Dur) 1980 when ((is_integer(Start) and (0 =< Start) and (Start =< 99)) or 1981 (Start == asn1_NOVALUE)) and 1982 ((is_integer(Short) and (0 =< Short) and (Short =< 99)) or 1983 (Short == asn1_NOVALUE)) and 1984 ((is_integer(Long) and (0 =< Long) and (Long =< 99)) or 1985 (Long == asn1_NOVALUE)) and 1986 is_list(DMB) and 1987 ((is_integer(Dur) and (0 =< Dur) and (Dur =< 99)) or 1988 (Dur == asn1_NOVALUE)) -> 1989 #'DigitMapValue'{startTimer = Start, 1990 shortTimer = Short, 1991 longTimer = Long, 1992 digitMapBody = DMB, 1993 durationTimer = Dur}. 1994 1995cre_ServiceChangeParm(M, R) when is_atom(M) andalso is_list(R) -> 1996 #'ServiceChangeParm'{serviceChangeMethod = M, 1997 serviceChangeReason = R}. 1998 1999cre_ServiceChangeParm(M, Addr, Prof, Reason) -> 2000 cre_ServiceChangeParm(M, Addr, asn1_NOVALUE, Prof, Reason, asn1_NOVALUE, 2001 asn1_NOVALUE, asn1_NOVALUE, 2002 asn1_NOVALUE, asn1_NOVALUE). 2003 2004%% Addr = asn1_NOVALUE | {AddrTag, AddrVal} 2005cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I) -> 2006 cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I, asn1_NOVALUE). 2007 2008cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I, IF) 2009 when is_atom(M) and 2010 ((is_integer(Ver) and (0 =< Ver) and (Ver =< 99)) or 2011 (Ver == asn1_NOVALUE)) and 2012 (is_record(Prof, 'ServiceChangeProfile') or (Prof == asn1_NOVALUE)) and 2013 is_list(R) and 2014 ((is_integer(D) and (0 =< D) and (D =< 4294967295)) or 2015 (D == asn1_NOVALUE)) and 2016 (is_record(TS, 'TimeNotation') or (TS == asn1_NOVALUE)) and 2017 (is_record(I, 'AuditDescriptor') or (I == asn1_NOVALUE)) and 2018 ((IF == 'NULL') or (IF == asn1_NOVALUE)) -> 2019 F = fun(A) -> 2020 (A == asn1_NOVALUE) orelse 2021 (is_tuple(A) 2022 andalso is_atom(element(1, A))) 2023 end, 2024 case (F(Addr) andalso F(Mid)) of 2025 true -> 2026 #'ServiceChangeParm'{serviceChangeMethod = M, 2027 serviceChangeAddress = Addr, 2028 serviceChangeVersion = Ver, 2029 serviceChangeProfile = Prof, 2030 serviceChangeReason = R, 2031 serviceChangeDelay = D, 2032 serviceChangeMgcId = Mid, 2033 timeStamp = TS, 2034 serviceChangeInfo = I, 2035 serviceChangeIncompleteFlag = IF}; 2036 _ -> 2037 exit({invalid_ServiceChangeParm_args, {Addr, Mid}}) 2038 end. 2039 2040cre_ServiceChangeAddress(portNumber = Tag, P) 2041 when is_integer(P) andalso (0 =< P) andalso (P =< 65535) -> 2042 {Tag, P}; 2043cre_ServiceChangeAddress(ip4Address = Tag, A) when is_record(A, 'IP4Address') -> 2044 {Tag, A}; 2045cre_ServiceChangeAddress(ip6Address = Tag, A) when is_record(A, 'IP6Address') -> 2046 {Tag, A}; 2047cre_ServiceChangeAddress(domainName = Tag, N) when is_record(N, 'DomainName') -> 2048 {Tag, N}; 2049cre_ServiceChangeAddress(deviceName = Tag, N) when is_list(N) -> 2050 {Tag, N}; 2051cre_ServiceChangeAddress(mtpAddress = Tag, A) when is_list(A) -> 2052 {Tag, A}. 2053 2054cre_ServiceChangeResParm() -> 2055 #'ServiceChangeResParm'{}. 2056cre_ServiceChangeResParm(Addr, Prof) -> 2057 cre_ServiceChangeResParm(asn1_NOVALUE, Addr, asn1_NOVALUE, 2058 Prof, asn1_NOVALUE). 2059cre_ServiceChangeResParm(Mid, Addr, Ver, Prof, TS) 2060 when ((is_integer(Ver) andalso (0 =< Ver) andalso (Ver =< 99)) orelse 2061 (Ver =:= asn1_NOVALUE)) andalso 2062 (is_record(Prof, 'ServiceChangeProfile') orelse (Prof =:= asn1_NOVALUE)) andalso 2063 (is_record(TS, 'TimeNotation') orelse (TS =:= asn1_NOVALUE)) -> 2064 F = fun(A) -> 2065 (A == asn1_NOVALUE) orelse 2066 (is_tuple(A) 2067 andalso is_atom(element(1, A))) 2068 end, 2069 case (F(Addr) andalso F(Mid)) of 2070 true -> 2071 #'ServiceChangeResParm'{serviceChangeMgcId = Mid, 2072 serviceChangeAddress = Addr, 2073 serviceChangeVersion = Ver, 2074 serviceChangeProfile = Prof, 2075 timeStamp = TS}; 2076 _ -> 2077 exit({invalid_ServiceChangeResParm_args, {Addr, Mid}}) 2078 end. 2079 2080cre_ServiceChangeMethod(failover = M) -> 2081 M; 2082cre_ServiceChangeMethod(forced = M) -> 2083 M; 2084cre_ServiceChangeMethod(graceful = M) -> 2085 M; 2086cre_ServiceChangeMethod(restart = M) -> 2087 M; 2088cre_ServiceChangeMethod(disconnected = M) -> 2089 M; 2090cre_ServiceChangeMethod(handOff = M) -> 2091 M. 2092 2093%% The version field is added to make it look more like ABNF 2094cre_ServiceChangeProfile(N) -> 2095 cre_ServiceChangeProfile(N, 1). 2096 2097cre_ServiceChangeProfile(N, V) 2098 when is_list(N) andalso is_integer(V) andalso (0 =< V) andalso (V =< 99) -> 2099 #'ServiceChangeProfile'{profileName = N, version = V}. 2100 2101cre_PackagesDescriptor([H|_] = D) when is_record(H, 'PackagesItem') -> 2102 D. 2103 2104cre_PackagesItem(N, Ver) when is_list(N) andalso is_integer(Ver) andalso (0 =< Ver) andalso (Ver =< 99) -> 2105 #'PackagesItem'{packageName = N, 2106 packageVersion = Ver}. 2107 2108cre_StatisticsDescriptor(D) -> 2109 true = is_StatisticsDescriptor(D), 2110 D. 2111 2112cre_StatisticsParameter(N) when is_list(N) -> 2113 #'StatisticsParameter'{statName = N}. 2114 2115cre_StatisticsParameter(N, V) when is_list(N) andalso is_list(V) -> 2116 #'StatisticsParameter'{statName = N, statValue = V}. 2117 2118%% cre_NonStandardData({Tag, _} = Id, Data) when atom(Tag), list(Data) -> 2119%% #'NonStandardData'{nonStandardIdentifier = Id, data = Data}. 2120 2121%% cre_NonStandardIdentifier(H221) when record(H221, 'H221NonStandard') -> 2122%% {h221NonStandard, H221}; 2123%% cre_NonStandardIdentifier(Obj) when tuple(Obj) -> 2124%% {object, Obj}; 2125%% cre_NonStandardIdentifier(Exp) when list(Exp), length(Exp) == 8 -> 2126%% {experimental, Exp}. 2127 2128%% cre_H221NonStandard(CC1, CC2, Ext, MC) 2129%% when (is_integer(CC1) and (0 =< CC1) and (CC1 =< 255)) and 2130%% (is_integer(CC2) and (0 =< CC2) and (CC2 =< 255)) and 2131%% (is_integer(Ext) and (0 =< Ext) and (Ext =< 255)) and 2132%% (is_integer(MC) and (0 =< MC) and (MC =< 255)) -> 2133%% #'H221NonStandard'{t35CountryCode1 = CC1, 2134%% t35CountryCode2 = CC2, 2135%% t35Extension = Ext, 2136%% manufacturerCode = MC}. 2137 2138cre_TimeNotation(D, T) 2139 when is_list(D) andalso (length(D) =:= 8) andalso is_list(T) andalso (length(T) =:= 8) -> 2140 #'TimeNotation'{date = D, time = T}. 2141 2142cre_Value([H|_] = V) when is_list(H) -> 2143 V. 2144 2145cre_BOOLEAN(true = B) -> 2146 B; 2147cre_BOOLEAN(false = B) -> 2148 B. 2149 2150 2151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2152 2153%% -- MegacoMessage -- 2154 2155is_MegacoMessage(#'MegacoMessage'{authHeader = Auth, 2156 mess = Mess}) -> 2157 d("is_MegacoMessage -> entry"), 2158 is_opt_AuthenticationHeader(Auth) andalso is_Message(Mess); 2159is_MegacoMessage(_) -> 2160 false. 2161 2162 2163chk_MegacoMessage(M, M) -> 2164 d("chk_MegacoMessage -> entry (1)"), 2165 chk_type(fun is_MegacoMessage/1, 'MegacoMessage', M); 2166chk_MegacoMessage(#'MegacoMessage'{authHeader = Auth1, 2167 mess = Mess1}, 2168 #'MegacoMessage'{authHeader = Auth2, 2169 mess = Mess2}) -> 2170 d("chk_MegacoMessage -> entry (2)"), 2171 chk_opt_AuthenticationHeader(Auth1,Auth2), 2172 chk_Message(Mess1,Mess2), 2173 ok; 2174chk_MegacoMessage(M1, M2) -> 2175 wrong_type('MegacoMessage', M1, M2). 2176 2177 2178%% -- AuthenticationHeader -- 2179 2180is_opt_AuthenticationHeader(AH) -> 2181 is_OPTIONAL(fun is_AuthenticationHeader/1, AH). 2182 2183is_AuthenticationHeader(#'AuthenticationHeader'{secParmIndex = SPI, 2184 seqNum = SN, 2185 ad = AD}) -> 2186 is_SecurityParmIndex(SPI) andalso 2187 is_SequenceNum(SN) andalso 2188 is_AuthData(AD); 2189is_AuthenticationHeader(_) -> 2190 false. 2191 2192%% This stuff is not really used, so make it simple... 2193chk_opt_AuthenticationHeader(A1, A2) -> 2194 chk_OPTIONAL('AuthenticationHeader', A1, A2, 2195 fun is_AuthenticationHeader/1, 2196 fun chk_AuthenticationHeader/2). 2197 2198chk_AuthenticationHeader(A, A) -> 2199 chk_type(fun is_AuthenticationHeader/1, 'AuthenticationHeader', A); 2200chk_AuthenticationHeader(A1, A2) -> 2201 case (is_AuthenticationHeader(A1) andalso is_AuthenticationHeader(A2)) of 2202 true -> 2203 not_equal('AuthenticationHeader', A1, A2); 2204 false -> 2205 wrong_type('AuthenticationHeader', A1, A2) 2206 end. 2207 2208 2209%% -- SecurityParmIndex -- 2210 2211is_SecurityParmIndex(V) -> is_OCTET_STRING(V, {exact, 4}). 2212 2213 2214%% -- SequenceNum -- 2215 2216is_SequenceNum(V) -> is_OCTET_STRING(V, {exact, 4}). 2217 2218 2219%% -- AuthData -- 2220 2221is_AuthData(V) -> is_OCTET_STRING(V, {range, 12, 32}). 2222 2223 2224%% -- Message -- 2225 2226is_Message(#'Message'{version = V, 2227 mId = MID, 2228 messageBody = Body}) -> 2229 d("is_Message -> entry"), 2230 is_INTEGER(V, {range, 0, 99}) andalso 2231 is_MId(MID) andalso 2232 is_Message_messageBody(Body); 2233is_Message(_) -> 2234 false. 2235 2236chk_Message(M, M) -> 2237 d("chk_Message -> entry (1)"), 2238 chk_type(fun is_Message/1, 'Message', M); 2239chk_Message(#'Message'{version = V1, 2240 mId = MID1, 2241 messageBody = Body1}, 2242 #'Message'{version = V2, 2243 mId = MID2, 2244 messageBody = Body2}) -> 2245 d("chk_Message -> entry with" 2246 "~n V1: ~p" 2247 "~n V2: ~p" 2248 "~n MID1: ~p" 2249 "~n MID2: ~p" 2250 "~n Body1: ~p" 2251 "~n Body2: ~p", 2252 [V1, V2, MID1, MID2, Body1, Body2]), 2253 validate(fun() -> chk_INTEGER(V1, V2, {range, 0, 99}) end, 2254 'Message_version'), 2255 validate(fun() -> chk_MId(MID1, MID2) end, 'Message_mId'), 2256 chk_Message_messageBody(Body1, Body2), 2257 ok; 2258chk_Message(M1, M2) -> 2259 wrong_type('Message', M1, M2). 2260 2261 2262is_Message_messageBody({Tag, Val}) -> 2263 d("is_Message_messageBody -> entry"), 2264 is_Message_messageBody_tag(Tag) andalso 2265 is_Message_messageBody_val(Tag, Val); 2266is_Message_messageBody(_) -> 2267 false. 2268 2269is_Message_messageBody_tag(Tag) -> 2270 Tags = [messageError, transactions], 2271 lists:member(Tag, Tags). 2272 2273is_Message_messageBody_val(messageError, Val) -> 2274 is_ErrorDescriptor(Val); 2275is_Message_messageBody_val(transactions, Val) -> 2276 is_Message_messageBody_transactions(Val). 2277 2278is_Message_messageBody_transactions([]) -> 2279 d("is_Message_messageBody_transactions -> entry when done"), 2280 true; 2281is_Message_messageBody_transactions([H|T]) -> 2282 d("is_Message_messageBody_transactions -> entry"), 2283 is_Transaction(H) andalso is_Message_messageBody_transactions(T); 2284is_Message_messageBody_transactions(_) -> 2285 false. 2286 2287chk_Message_messageBody(B, B) -> 2288 d("chk_Message_messageBody -> entry (1)"), 2289 chk_type(fun is_Message_messageBody/1, 'Message_messageBody', B); 2290chk_Message_messageBody({Tag, Val1} = B1, {Tag, Val2} = B2) -> 2291 d("chk_Message_messageBody -> entry (2)"), 2292 case (is_Message_messageBody_tag(Tag) andalso 2293 is_Message_messageBody_val(Tag, Val1) andalso 2294 is_Message_messageBody_val(Tag, Val2)) of 2295 true -> 2296 chk_Message_messageBody_val(Tag, Val1, Val2); 2297 false -> 2298 wrong_type('Message_messageBody', B1, B2) 2299 end; 2300chk_Message_messageBody({Tag1, Val1} = B1, {Tag2, Val2} = B2) -> 2301 d("chk_Message_messageBody -> entry (3)"), 2302 case ((is_Message_messageBody_tag(Tag1) andalso 2303 is_Message_messageBody_val(Tag1, Val1)) andalso 2304 (is_Message_messageBody_tag(Tag2) andalso 2305 is_Message_messageBody_val(Tag2, Val2))) of 2306 true -> 2307 not_equal('Message_messageBody', B1, B2); 2308 false -> 2309 wrong_type('Message_messageBody', B1, B2) 2310 end; 2311chk_Message_messageBody(B1, B2) -> 2312 wrong_type('Message_messageBody', B1, B2). 2313 2314chk_Message_messageBody_val(messageError, Val1, Val2) -> 2315 validate(fun() -> chk_ErrorDescriptor(Val1, Val2) end, 2316 'Message_messageBody'); 2317chk_Message_messageBody_val(transactions, Val1, Val2) -> 2318 chk_Message_messageBody_transactions(lists:sort(Val1), 2319 lists:sort(Val2)). 2320 2321chk_Message_messageBody_transactions([], []) -> 2322 d("chk_Message_messageBody_transactions -> entry - ok (1)"), 2323 ok; 2324chk_Message_messageBody_transactions([] = T1, T2) -> 2325 d("chk_Message_messageBody_transactions -> entry - not-equal (2)"), 2326 not_equal('Message_messageBody_transactions', T1, T2); 2327chk_Message_messageBody_transactions(T1, [] = T2) -> 2328 d("chk_Message_messageBody_transactions -> entry - not-equal (3)"), 2329 not_equal('Message_messageBody_transactions', T1, T2); 2330chk_Message_messageBody_transactions([H|T1], [H|T2]) -> 2331 d("chk_Message_messageBody_transactions -> entry (4)"), 2332 case is_Transaction(H) of 2333 true -> 2334 chk_Message_messageBody_transactions(T1, T2); 2335 false -> 2336 wrong_type('Message_messageBody_transactions_val', H) 2337 end; 2338chk_Message_messageBody_transactions([H1|T1], [H2|T2]) -> 2339 d("chk_Message_messageBody_transactions -> entry (5)"), 2340 validate(fun() -> chk_Transaction(H1, H2) end, 2341 'Message_messageBody_transactions_val'), 2342 chk_Message_messageBody_transactions(T1, T2); 2343chk_Message_messageBody_transactions(T1, T2) -> 2344 d("chk_Message_messageBody_transactions -> entry - wrong-type (6)"), 2345 wrong_type('Message_messageBody_transactions', T1, T2). 2346 2347 2348%% -- MId -- 2349 2350is_opt_MId(M) -> 2351 is_OPTIONAL(fun is_MId/1, M). 2352 2353is_MId({Tag, Val}) -> 2354 is_MId_tag(Tag) andalso is_MId_val(Tag, Val); 2355is_MId(_) -> 2356 false. 2357 2358is_MId_tag(Tag) -> 2359 Tags = [ip4Address, ip6Address, domainName, deviceName, mtpAddress], 2360 lists:member(Tag, Tags). 2361 2362is_MId_val(ip4Address, Val) -> is_IP4Address(Val); 2363is_MId_val(ip6Address, Val) -> is_IP6Address(Val); 2364is_MId_val(domainName, Val) -> is_DomainName(Val); 2365is_MId_val(deviceName, Val) -> is_PathName(Val); 2366is_MId_val(mtpAddress, Val) -> is_OCTET_STRING(Val, {range, 2, 4}). 2367 2368chk_opt_MId(M1, M2) -> 2369 chk_OPTIONAL('MId', M1, M2, fun is_MId/1, fun chk_MId/2). 2370 2371chk_MId(M, M) -> 2372 chk_type(fun is_MId/1, 'MId', M); 2373chk_MId({Tag, Val1} = M1, {Tag, Val2} = M2) -> 2374 case (is_MId_tag(Tag) andalso 2375 is_MId_val(Tag, Val1) andalso 2376 is_MId_val(Tag, Val2)) of 2377 true -> 2378 chk_MId_val(Tag, Val1, Val2); 2379 false -> 2380 wrong_type('MId', M1, M2) 2381 end; 2382chk_MId({Tag1, Val1} = M1, {Tag2, Val2} = M2) -> 2383 case ((is_MId_tag(Tag1) andalso 2384 is_MId_val(Tag1, Val1)) andalso 2385 (is_MId_tag(Tag2) andalso 2386 is_MId_val(Tag2, Val2))) of 2387 true -> 2388 not_equal('MId', M1, M2); 2389 false -> 2390 wrong_type('MId', M1, M2) 2391 end; 2392chk_MId(M1, M2) -> 2393 wrong_type('MId', M1, M2). 2394 2395chk_MId_val(ip4Address, M1, M2) -> chk_IP4Address(M1, M2); 2396chk_MId_val(ip6Address, M1, M2) -> chk_IP6Address(M1, M2); 2397chk_MId_val(domainName, M1, M2) -> chk_DomainName(M1, M2); 2398chk_MId_val(deviceName, M1, M2) -> chk_PathName(M1, M2); 2399chk_MId_val(mtpAddress, M1, M2) -> chk_OCTET_STRING(M1, M2, {range, 2, 4}). 2400 2401 2402%% -- DomainName -- 2403 2404is_DomainName(#'DomainName'{name = N, portNumber = PN}) -> 2405 is_IA5String(N) andalso is_opt_INTEGER(PN, {range, 0, 65535}); 2406is_DomainName(_) -> 2407 false. 2408 2409chk_DomainName(N, N) -> 2410 ok; 2411chk_DomainName(N1, N2) -> 2412 not_equal('DomainName', N1, N2). 2413 2414 2415%% -- IP4Address -- 2416 2417is_IP4Address(#'IP4Address'{address = A, portNumber = PN}) -> 2418 is_OCTET_STRING(A, {exact, 4}) andalso 2419 is_opt_INTEGER(PN, {range, 0, 65535}); 2420is_IP4Address(_) -> 2421 false. 2422 2423chk_IP4Address(A, A) -> 2424 ok; 2425chk_IP4Address(A1, A2) -> 2426 not_equal('IP4Address', A1, A2). 2427 2428 2429%% -- IP6Address -- 2430 2431is_IP6Address(#'IP6Address'{address = A, portNumber = PN}) -> 2432 is_OCTET_STRING(A, {exact, 16}) andalso 2433 is_opt_INTEGER(PN, {range, 0, 65535}); 2434is_IP6Address(_) -> 2435 false. 2436 2437chk_IP6Address(A, A) -> 2438 ok; 2439chk_IP6Address(A1, A2) -> 2440 not_equal('IP6Address', A1, A2). 2441 2442 2443%% -- PathName -- 2444 2445is_PathName(N) -> is_IA5String(N, {range, 1, 64}). 2446 2447chk_PathName(N, N) -> 2448 ok; 2449chk_PathName(N1, N2) -> 2450 not_equal('PathName', N1, N2). 2451 2452 2453%% -- Transaction -- 2454 2455is_Transaction({Tag, Val}) -> 2456 d("is_Transaction -> entry"), 2457 is_Transaction_tag(Tag) andalso is_Transaction_val(Tag, Val); 2458is_Transaction(_) -> 2459 false. 2460 2461is_Transaction_tag(Tag) -> 2462 Tags = [transactionRequest, 2463 transactionPending, 2464 transactionReply, 2465 transactionResponseAck], 2466 lists:member(Tag, Tags). 2467 2468is_Transaction_val(transactionRequest, V) -> is_TransactionRequest(V); 2469is_Transaction_val(transactionPending, V) -> is_TransactionPending(V); 2470is_Transaction_val(transactionReply, V) -> is_TransactionReply(V); 2471is_Transaction_val(transactionResponseAck, V) -> is_TransactionResponseAck(V). 2472 2473 2474chk_Transaction({Tag, Val} = Trans, Trans) -> 2475 d("chk_Transaction -> entry (1)"), 2476 case (is_Transaction_tag(Tag) andalso is_Transaction_val(Tag, Val)) of 2477 true -> 2478 ok; 2479 false -> 2480 wrong_type('Transaction', Trans, Trans) 2481 end; 2482chk_Transaction({Tag, Val1} = Trans1, {Tag, Val2} = Trans2) -> 2483 d("chk_Transaction -> entry (2)"), 2484 case (is_Transaction_tag(Tag) and 2485 is_Transaction_val(Tag, Val1) and 2486 is_Transaction_val(Tag, Val2)) of 2487 true -> 2488 chk_Transaction_val(Tag, Val1, Val2); 2489 false -> 2490 wrong_type('Transaction', Trans1, Trans2) 2491 end; 2492chk_Transaction({Tag1, Val1} = Trans1, {Tag2, Val2} = Trans2) -> 2493 d("chk_Transaction -> entry (3)"), 2494 case ((is_Transaction_tag(Tag1) andalso 2495 is_Transaction_val(Tag1, Val1)) andalso 2496 (is_Transaction_tag(Tag2) andalso 2497 is_Transaction_val(Tag2, Val2))) of 2498 true -> 2499 not_equal('Transaction', Trans1, Trans2); 2500 false -> 2501 wrong_type('Transaction', Trans1, Trans2) 2502 end; 2503chk_Transaction(Trans1, Trans2) -> 2504 d("chk_Transaction -> entry - wrong-type - (4)"), 2505 wrong_type('Transaction', Trans1, Trans2). 2506 2507chk_Transaction_val(transactionRequest, T1, T2) -> 2508 chk_TransactionRequest(T1, T2); 2509chk_Transaction_val(transactionPending, T1, T2) -> 2510 chk_TransactionPending(T1, T2); 2511chk_Transaction_val(transactionReply, T1, T2) -> 2512 chk_TransactionReply(T1,T2); 2513chk_Transaction_val(transactionResponseAck, T1, T2) -> 2514 chk_TransactionResponseAck(T1, T2). 2515 2516 2517%% -- TransactionId -- 2518 2519is_opt_TransactionId(TID) -> 2520 is_OPTIONAL(fun is_TransactionId/1, TID). 2521 2522is_TransactionId(TID) -> 2523 d("is_TransactionId -> entry"), 2524 is_INTEGER(TID, {range, 0, 4294967295}). 2525 2526chk_opt_TransactionId(TID1, TID2) -> 2527 chk_OPTIONAL('TransactionId', TID1, TID2, 2528 fun is_TransactionId/1, fun chk_TransactionId/2). 2529 2530chk_TransactionId(TID, TID) -> 2531 chk_type(fun is_TransactionId/1, 'TransactionId', TID); 2532chk_TransactionId(TID1, TID2) -> 2533 case (is_TransactionId(TID1) andalso is_TransactionId(TID2)) of 2534 true -> 2535 not_equal('TransactionId', TID1, TID2); 2536 false -> 2537 wrong_type('TransactionId', TID1, TID2) 2538 end. 2539 2540 2541%% -- TransactionRequest -- 2542 2543is_TransactionRequest(#'TransactionRequest'{transactionId = TID, 2544 actions = Acts}) -> 2545 d("is_TransactionRequest -> entry"), 2546 is_TransactionId(TID) andalso is_TransactionRequest_actions(Acts); 2547is_TransactionRequest(_) -> 2548 false. 2549 2550chk_TransactionRequest(T, T) -> 2551 chk_type(fun is_TransactionRequest/1, 'TransactionRequest', T); 2552chk_TransactionRequest(#'TransactionRequest'{transactionId = TID1, 2553 actions = Acts1}, 2554 #'TransactionRequest'{transactionId = TID2, 2555 actions = Acts2}) -> 2556 validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionRequest'), 2557 chk_TransactionRequest_actions(lists:sort(Acts1), 2558 lists:sort(Acts2)), 2559 ok; 2560chk_TransactionRequest(T1, T2) -> 2561 wrong_type('TransactionRequest', T1, T2). 2562 2563is_TransactionRequest_actions([]) -> 2564 d("is_TransactionRequest_actions -> entry when done"), 2565 true; 2566is_TransactionRequest_actions([H|T]) -> 2567 d("is_TransactionRequest_actions -> entry"), 2568 is_ActionRequest(H) andalso is_TransactionRequest_actions(T); 2569is_TransactionRequest_actions(_) -> 2570 false. 2571 2572chk_TransactionRequest_actions([], []) -> 2573 ok; 2574chk_TransactionRequest_actions([] = Acts1, Acts2) -> 2575 not_equal('TransactionRequest_actions', Acts1, Acts2); 2576chk_TransactionRequest_actions(Acts1, [] = Acts2) -> 2577 not_equal('TransactionRequest_actions', Acts1, Acts2); 2578chk_TransactionRequest_actions([H|T1], [H|T2]) -> 2579 case is_ActionRequest(H) of 2580 true -> 2581 chk_TransactionRequest_actions(T1, T2); 2582 false -> 2583 wrong_type('TransactionRequest_actions_val', H) 2584 end; 2585chk_TransactionRequest_actions([H1|T1], [H2|T2]) -> 2586 validate(fun() -> chk_ActionRequest(H1, H2) end, 2587 'TransactionRequest_actions_val'), 2588 chk_TransactionRequest_actions(T1, T2); 2589chk_TransactionRequest_actions(Acts1, Acts2) -> 2590 wrong_type('TransactionRequest_actions', Acts1, Acts2). 2591 2592 2593%% -- TransactionPending -- 2594 2595is_TransactionPending(#'TransactionPending'{transactionId = TID}) -> 2596 d("is_TransactionPending -> entry"), 2597 is_TransactionId(TID); 2598is_TransactionPending(_) -> 2599 false. 2600 2601chk_TransactionPending(T, T) -> 2602 chk_type(fun is_TransactionPending/1, 'TransactionPending', T); 2603chk_TransactionPending(#'TransactionPending'{transactionId = TID1}, 2604 #'TransactionPending'{transactionId = TID2}) -> 2605 validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionPending'), 2606 ok; 2607chk_TransactionPending(T1, T2) -> 2608 wrong_type('TransactionPending', T1, T2). 2609 2610 2611%% -- TransactionReply -- 2612 2613is_TransactionReply(#'TransactionReply'{transactionId = TID, 2614 immAckRequired = IAR, 2615 transactionResult = TR}) -> 2616 d("is_TransactionReply -> entry"), 2617 is_TransactionId(TID) andalso 2618 is_opt_NULL(IAR) andalso 2619 is_TransactionReply_transactionResult(TR); 2620is_TransactionReply(_) -> 2621 false. 2622 2623chk_TransactionReply(T, T) -> 2624 d("chk_TransactionReply -> entry (2)"), 2625 chk_type(fun is_TransactionReply/1, 'TransactionReply', T); 2626chk_TransactionReply(#'TransactionReply'{transactionId = TID1, 2627 immAckRequired = IAR1, 2628 transactionResult = TR1}, 2629 #'TransactionReply'{transactionId = TID2, 2630 immAckRequired = IAR2, 2631 transactionResult = TR2}) -> 2632 d("chk_TransactionReply -> entry (2)"), 2633 validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionReply'), 2634 validate(fun() -> chk_opt_NULL(IAR1, IAR2) end, 'TransactionReply'), 2635 chk_TransactionReply_transactionResult(TR1, TR2), 2636 ok; 2637chk_TransactionReply(T1, T2) -> 2638 d("chk_TransactionReply -> entry (3)"), 2639 wrong_type('TransactionReply', T1, T2). 2640 2641is_TransactionReply_transactionResult({Tag, Val}) -> 2642 d("is_TransactionReply_transactionResult -> entry"), 2643 is_TransactionReply_transactionResult_tag(Tag) andalso 2644 is_TransactionReply_transactionResult_val(Tag, Val); 2645is_TransactionReply_transactionResult(_) -> 2646 false. 2647 2648is_TransactionReply_transactionResult_tag(T) -> 2649 lists:member(T, [transactionError, actionReplies]). 2650 2651is_TransactionReply_transactionResult_val(transactionError, V) -> 2652 is_ErrorDescriptor(V); 2653is_TransactionReply_transactionResult_val(actionReplies, V) -> 2654 is_TransactionReply_actionReplies(V). 2655 2656chk_TransactionReply_transactionResult(Res, Res) -> 2657 chk_type(fun is_TransactionReply_transactionResult/1, 2658 'TransactionReply_transactionResult', Res); 2659chk_TransactionReply_transactionResult({Tag, Val1} = Res1, 2660 {Tag, Val2} = Res2) -> 2661 case (is_TransactionReply_transactionResult_tag(Tag) and 2662 is_TransactionReply_transactionResult_val(Tag, Val1) and 2663 is_TransactionReply_transactionResult_val(Tag, Val2)) of 2664 true -> 2665 chk_TransactionReply_transactionResult_val(Tag, Val1, Val2); 2666 false -> 2667 wrong_type('TransactionReply_transactionResult', Res1, Res2) 2668 end; 2669chk_TransactionReply_transactionResult({Tag1, Val1} = Res1, 2670 {Tag2, Val2} = Res2) -> 2671 case ((is_TransactionReply_transactionResult_tag(Tag1) and 2672 is_TransactionReply_transactionResult_val(Tag1, Val1)) and 2673 (is_TransactionReply_transactionResult_tag(Tag2) and 2674 is_TransactionReply_transactionResult_val(Tag2, Val2))) of 2675 true -> 2676 not_equal('TransactionReply_transactionResult', Res1, Res2); 2677 false -> 2678 wrong_type('TransactionReply_transactionResult', Res1, Res2) 2679 end; 2680chk_TransactionReply_transactionResult(Res1, Res2) -> 2681 wrong_type('TransactionReply_transactionResult', Res1, Res2). 2682 2683chk_TransactionReply_transactionResult_val(transactionError, E1, E2) -> 2684 validate(fun() -> chk_ErrorDescriptor(E1, E2) end, 2685 'TransactionReply_transactionResult'); 2686chk_TransactionReply_transactionResult_val(actionReplies, R1, R2) -> 2687 validate(fun() -> 2688 chk_TransactionReply_actionReplies(lists:sort(R1), 2689 lists:sort(R2)) 2690 end, 2691 'TransactionReply_transactionResult'). 2692 2693is_TransactionReply_actionReplies([]) -> 2694 d("is_TransactionReply_actionReplies -> entry when done"), 2695 true; 2696is_TransactionReply_actionReplies([H|T]) -> 2697 d("is_TransactionReply_actionReplies -> entry"), 2698 is_ActionReply(H) andalso is_TransactionReply_actionReplies(T); 2699is_TransactionReply_actionReplies(_) -> 2700 false. 2701 2702chk_TransactionReply_actionReplies([], []) -> 2703 ok; 2704chk_TransactionReply_actionReplies([] = AR1, AR2) -> 2705 not_equal('TransactionReply_actionReplies', AR1, AR2); 2706chk_TransactionReply_actionReplies(AR1, [] = AR2) -> 2707 not_equal('TransactionReply_actionReplies', AR1, AR2); 2708chk_TransactionReply_actionReplies([H|T1], [H|T2]) -> 2709 case is_ActionReply(H) of 2710 true -> 2711 chk_TransactionReply_actionReplies(T1, T2); 2712 false -> 2713 wrong_type('TransactionReply_actionReplies_val', H) 2714 end; 2715chk_TransactionReply_actionReplies([H1|T1], [H2|T2]) -> 2716 validate(fun() -> chk_ActionReply(H1, H2) end, 2717 'TransactionReply_actionReplies_val'), 2718 chk_TransactionReply_actionReplies(T1, T2); 2719chk_TransactionReply_actionReplies(AR1, AR2) -> 2720 wrong_type('TransactionReply_actionReplies', AR1, AR2). 2721 2722 2723%% -- TransactionResponseAck -- 2724 2725is_TransactionResponseAck([]) -> 2726 d("is_TransactionResponseAck -> entry when done"), 2727 true; 2728is_TransactionResponseAck([H|T]) -> 2729 d("is_TransactionResponseAck -> entry"), 2730 is_TransactionAck(H) andalso is_TransactionResponseAck(T); 2731is_TransactionResponseAck(_) -> 2732 false. 2733 2734chk_TransactionResponseAck([], []) -> 2735 ok; 2736chk_TransactionResponseAck([] = AR1, AR2) -> 2737 not_equal('TransactionResponseAck', AR1, AR2); 2738chk_TransactionResponseAck(AR1, [] = AR2) -> 2739 not_equal('TransactionResponseAck', AR1, AR2); 2740chk_TransactionResponseAck([H|T1], [H|T2]) -> 2741 case is_TransactionAck(H) of 2742 true -> 2743 chk_TransactionResponseAck(T1, T2); 2744 false -> 2745 wrong_type('TransactionResponseAck_val', H) 2746 end; 2747chk_TransactionResponseAck([H1|T1], [H2|T2]) -> 2748 validate(fun() -> chk_TransactionAck(H1, H2) end, 2749 'TransactionResponseAck'), 2750 chk_TransactionResponseAck(T1, T2); 2751chk_TransactionResponseAck(AR1, AR2) -> 2752 wrong_type('TransactionResponseAck', AR1, AR2). 2753 2754 2755%% -- TransactionAck -- 2756 2757is_TransactionAck(#'TransactionAck'{firstAck = F, 2758 lastAck = L}) -> 2759 d("is_TransactionAck -> entry"), 2760 is_TransactionId(F) andalso is_opt_TransactionId(L); 2761is_TransactionAck(_) -> 2762 false. 2763 2764chk_TransactionAck(T, T) -> 2765 chk_type(fun is_TransactionAck/1, 'TransactionAck', T); 2766chk_TransactionAck(#'TransactionAck'{firstAck = F1, 2767 lastAck = L1}, 2768 #'TransactionAck'{firstAck = F2, 2769 lastAck = L2}) -> 2770 validate(fun() -> chk_TransactionId(F1, F2) end, 'TransactionAck'), 2771 validate(fun() -> chk_opt_TransactionId(L1, L2) end, 'TransactionAck'), 2772 ok; 2773chk_TransactionAck(T1, T2) -> 2774 wrong_type('TransactionAck', T1, T2). 2775 2776 2777%% -- ErrorDescriptor -- 2778 2779is_opt_ErrorDescriptor(V) -> 2780 is_OPTIONAL(fun is_ErrorDescriptor/1, V). 2781 2782is_ErrorDescriptor(#'ErrorDescriptor'{errorCode = Code, 2783 errorText = Text}) -> 2784 d("is_ErrorDescriptor -> entry"), 2785 is_ErrorCode(Code) andalso is_opt_ErrorText(Text); 2786is_ErrorDescriptor(_) -> 2787 false. 2788 2789chk_opt_ErrorDescriptor(E1, E2) -> 2790 chk_OPTIONAL('ErrorDescriptor', E1, E2, 2791 fun is_ErrorDescriptor/1, fun chk_ErrorDescriptor/2). 2792 2793chk_ErrorDescriptor(E, E) -> 2794 chk_type(fun is_ErrorDescriptor/1, 'ErrorDescriptor', E); 2795chk_ErrorDescriptor(#'ErrorDescriptor'{errorCode = Code1, 2796 errorText = Text1}, 2797 #'ErrorDescriptor'{errorCode = Code2, 2798 errorText = Text2}) -> 2799 chk_ErrorCode(Code1, Code2), 2800 chk_opt_ErrorText(Text1, Text2), 2801 ok; 2802chk_ErrorDescriptor(E1, E2) -> 2803 wrong_type('ErrorDescriptor', E1, E2). 2804 2805 2806%% -- ErrorCode -- 2807 2808is_ErrorCode(C) -> is_INTEGER(C, {range, 0, 65535}). 2809 2810chk_ErrorCode(C, C) -> 2811 case is_ErrorCode(C) of 2812 true -> 2813 ok; 2814 false -> 2815 wrong_type(errorCode, C, C) 2816 end; 2817chk_ErrorCode(C1, C2) -> 2818 case (is_ErrorCode(C1) andalso is_ErrorCode(C2)) of 2819 true -> 2820 not_equal(errorCode, C1, C2); 2821 false -> 2822 wrong_type(errorCode, C1, C2) 2823 end. 2824 2825 2826%% -- ErrorText -- 2827 2828is_opt_ErrorText(V) -> 2829 is_OPTIONAL(fun is_ErrorText/1, V). 2830 2831is_ErrorText(V) -> is_IA5String(V). 2832 2833chk_opt_ErrorText(T1, T2) -> 2834 chk_OPTIONAL('ErrorText', T1, T2, fun is_ErrorText/1, fun chk_ErrorText/2). 2835 2836chk_ErrorText(T, T) -> 2837 chk_type(fun is_ErrorText/1, 'ErrorText', T); 2838chk_ErrorText(T1, T2) -> 2839 case (is_ErrorText(T1) andalso is_ErrorText(T2)) of 2840 true -> 2841 case {to_lower(T1), to_lower(T2)} of 2842 {T, T} -> 2843 ok; 2844 _ -> 2845 not_equal('ErrorText', T1, T2) 2846 end; 2847 false -> 2848 wrong_type('ErrorText', T1, T2) 2849 end. 2850 2851 2852%% -- ContextID -- 2853 2854is_ContextID(Id) -> is_INTEGER(Id, {range, 0, 4294967295}). 2855 2856chk_ContextID(Id, Id) -> 2857 chk_type(fun is_ContextID/1, 'ContextID', Id); 2858chk_ContextID(Id1, Id2) -> 2859 case (is_ContextID(Id1) andalso is_ContextID(Id2)) of 2860 true -> 2861 not_equal('ContextID', Id1, Id2); 2862 false -> 2863 wrong_type('ContextID', Id1, Id2) 2864 end. 2865 2866 2867%% -- ActionRequest -- 2868 2869is_ActionRequest(#'ActionRequest'{contextId = Id, 2870 contextRequest = CtxReq, 2871 contextAttrAuditReq = AuditReq, 2872 commandRequests = CmdReqs}) -> 2873 d("is_ActionRequest -> entry"), 2874 is_ContextID(Id) andalso 2875 is_opt_ContextRequest(CtxReq) andalso 2876 is_opt_ContextAttrAuditRequest(AuditReq) andalso 2877 is_ActionRequest_commandRequests(CmdReqs); 2878is_ActionRequest(_) -> 2879 false. 2880 2881chk_ActionRequest(A, A) -> 2882 chk_type(fun is_ActionRequest/1, 'ActionRequest', A); 2883chk_ActionRequest(#'ActionRequest'{contextId = Id1, 2884 contextRequest = Req1, 2885 contextAttrAuditReq = AuditReq1, 2886 commandRequests = CmdReqs1}, 2887 #'ActionRequest'{contextId = Id2, 2888 contextRequest = Req2, 2889 contextAttrAuditReq = AuditReq2, 2890 commandRequests = CmdReqs2}) -> 2891 validate(fun() -> chk_ContextID(Id1, Id2) end, 'ActionRequest'), 2892 validate(fun() -> chk_opt_ContextRequest(Req1, Req2) end, 'ActionRequest'), 2893 validate(fun() -> 2894 chk_opt_ContextAttrAuditRequest(AuditReq1, AuditReq2) 2895 end, 2896 'ActionRequest'), 2897 chk_ActionRequest_commandRequests(CmdReqs1, CmdReqs2), 2898 ok. 2899 2900 2901is_ActionRequest_commandRequests([]) -> 2902 d("is_ActionRequest_commandRequests -> entry when done"), 2903 true; 2904is_ActionRequest_commandRequests([H|T]) -> 2905 d("is_ActionRequest_commandRequests -> entry"), 2906 is_CommandRequest(H) andalso is_ActionRequest_commandRequests(T); 2907is_ActionRequest_commandRequests(_) -> 2908 false. 2909 2910chk_ActionRequest_commandRequests([], []) -> 2911 ok; 2912chk_ActionRequest_commandRequests([] = CmdReqs1, CmdReqs2) -> 2913 not_equal('ActionRequest_commandRequests', CmdReqs1, CmdReqs2); 2914chk_ActionRequest_commandRequests(CmdReqs1, [] = CmdReqs2) -> 2915 not_equal('ActionRequest_commandRequests', CmdReqs1, CmdReqs2); 2916chk_ActionRequest_commandRequests([H|T1], [H|T2]) -> 2917 case is_CommandRequest(H) of 2918 true -> 2919 chk_ActionRequest_commandRequests(T1, T2); 2920 false -> 2921 wrong_type('ActionRequest_commandRequest_val', H) 2922 end; 2923chk_ActionRequest_commandRequests([H1|T1], [H2|T2]) -> 2924 validate(fun() -> chk_CommandRequest(H1, H2) end, 2925 'ActionRequest_commandRequests_val'), 2926 chk_ActionRequest_commandRequests(T1, T2); 2927chk_ActionRequest_commandRequests(R1, R2) -> 2928 wrong_type('ActionRequest_commandRequests', R1, R2). 2929 2930 2931%% -- ActionReply -- 2932 2933is_ActionReply(#'ActionReply'{contextId = Id, 2934 errorDescriptor = ED, 2935 contextReply = CtxRep, 2936 commandReply = CmdRep}) -> 2937 d("is_ActionReply -> entry"), 2938 is_ContextID(Id) andalso 2939 is_opt_ErrorDescriptor(ED) andalso 2940 is_opt_ContextRequest(CtxRep) andalso 2941 is_ActionReply_commandReply(CmdRep); 2942is_ActionReply(_) -> 2943 false. 2944 2945is_ActionReply_commandReply([]) -> 2946 d("is_ActionReply_commandReply -> entry when done"), 2947 true; 2948is_ActionReply_commandReply([H|T]) -> 2949 d("is_ActionReply_commandReply -> entry"), 2950 is_CommandReply(H) andalso is_ActionReply_commandReply(T); 2951is_ActionReply_commandReply(_) -> 2952 false. 2953 2954chk_ActionReply(A, A) -> 2955 d("chk_ActionReply -> entry (1)"), 2956 chk_type(fun is_ActionReply/1, 'ActionReply', A); 2957chk_ActionReply(#'ActionReply'{contextId = Id1, 2958 errorDescriptor = ED1, 2959 contextReply = CtxRep1, 2960 commandReply = CmdRep1}, 2961 #'ActionReply'{contextId = Id2, 2962 errorDescriptor = ED2, 2963 contextReply = CtxRep2, 2964 commandReply = CmdRep2}) -> 2965 d("chk_ActionReply -> entry (2)"), 2966 chk_ContextID(Id1, Id2), 2967 chk_opt_ErrorDescriptor(ED1, ED2), 2968 chk_opt_ContextRequest(CtxRep1, CtxRep2), 2969 chk_ActionReply_commandReply(CmdRep1, CmdRep2). 2970 2971chk_ActionReply_commandReply([], []) -> 2972 ok; 2973chk_ActionReply_commandReply([] = Reps1, Reps2) -> 2974 not_equal('ActionReply_commandReply', Reps1, Reps2); 2975chk_ActionReply_commandReply(Reps1, [] = Reps2) -> 2976 not_equal('ActionReply_commandReply', Reps1, Reps2); 2977chk_ActionReply_commandReply([H|T1], [H|T2]) -> 2978 case is_CommandReply(H) of 2979 true -> 2980 chk_ActionReply_commandReply(T1, T2); 2981 false -> 2982 wrong_type('ActionReply_commandReply_val', H) 2983 end; 2984chk_ActionReply_commandReply([H1|T1], [H2|T2]) -> 2985 validate(fun() -> chk_CommandReply(H1, H2) end, 2986 'ActionReply_commandReply_val'), 2987 chk_ActionReply_commandReply(T1, T2); 2988chk_ActionReply_commandReply(R1, R2) -> 2989 wrong_type('ActionReply_commandReply', R1, R2). 2990 2991 2992%% -- ContextRequest -- 2993 2994is_opt_ContextRequest(V) -> 2995 is_OPTIONAL(fun is_ContextRequest/1, V). 2996 2997is_ContextRequest(#'ContextRequest'{priority = Prio, 2998 emergency = Em, 2999 topologyReq = TopReq, 3000 iepscallind = Ieps, 3001 contextProp = CtxProp, 3002 contextList = CtxList}) -> 3003 d("is_ContextRequest -> entry"), 3004 is_ContextRequest_priority(Prio) andalso 3005 is_ContextRequest_emergency(Em) andalso 3006 is_ContextRequest_topologyReq(TopReq) andalso 3007 is_ContextRequest_iepscallind(Ieps) andalso 3008 is_ContextRequest_contextProp(CtxProp) andalso 3009 is_ContextRequest_contextList(CtxList); 3010is_ContextRequest(_) -> 3011 false. 3012 3013is_ContextRequest_priority(asn1_NOVALUE) -> 3014 true; 3015is_ContextRequest_priority(V) -> 3016 is_INTEGER(V, {range, 1, 15}). 3017 3018is_ContextRequest_emergency(asn1_NOVALUE) -> 3019 true; 3020is_ContextRequest_emergency(V) -> 3021 is_BOOLEAN(V). 3022 3023is_ContextRequest_topologyReq(asn1_NOVALUE) -> 3024 true; 3025is_ContextRequest_topologyReq([]) -> 3026 true; 3027is_ContextRequest_topologyReq([H|T]) -> 3028 is_TopologyRequest(H) andalso is_ContextRequest_topologyReq(T); 3029is_ContextRequest_topologyReq(_) -> 3030 false. 3031 3032is_ContextRequest_iepscallind(asn1_NOVALUE) -> 3033 true; 3034is_ContextRequest_iepscallind(V) -> 3035 is_BOOLEAN(V). 3036 3037is_ContextRequest_contextProp(asn1_NOVALUE) -> 3038 true; 3039is_ContextRequest_contextProp([]) -> 3040 true; 3041is_ContextRequest_contextProp([H|T]) -> 3042 is_PropertyParm(H) andalso is_ContextRequest_contextProp(T); 3043is_ContextRequest_contextProp(_) -> 3044 false. 3045 3046is_ContextRequest_contextList(asn1_NOVALUE) -> 3047 true; 3048is_ContextRequest_contextList([]) -> 3049 true; 3050is_ContextRequest_contextList([H|T]) -> 3051 is_ContextID(H) andalso is_ContextRequest_contextList(T); 3052is_ContextRequest_contextList(_) -> 3053 false. 3054 3055chk_opt_ContextRequest(R1, R2) -> 3056 chk_OPTIONAL('ContextRequest', R1, R2, 3057 fun is_ContextRequest/1, fun chk_ContextRequest/2). 3058 3059chk_ContextRequest(R, R) -> 3060 chk_type(fun is_ContextRequest/1, 'ContextRequest', R); 3061chk_ContextRequest(#'ContextRequest'{priority = Prio1, 3062 emergency = Em1, 3063 topologyReq = TopReq1, 3064 iepscallind = Ieps1, 3065 contextProp = CtxProp1, 3066 contextList = CtxList1}, 3067 #'ContextRequest'{priority = Prio2, 3068 emergency = Em2, 3069 topologyReq = TopReq2, 3070 iepscallind = Ieps2, 3071 contextProp = CtxProp2, 3072 contextList = CtxList2}) -> 3073 chk_ContextRequest_priority(Prio1, Prio2), 3074 chk_ContextRequest_emergency(Em1, Em2), 3075 chk_ContextRequest_topologyReq(TopReq1, TopReq2), 3076 chk_ContextRequest_iepscallind(Ieps1, Ieps2), 3077 chk_ContextRequest_contextProp(CtxProp1, CtxProp2), 3078 chk_ContextRequest_contextList(CtxList1, CtxList2), 3079 ok; 3080chk_ContextRequest(R1, R2) -> 3081 wrong_type('ContextRequest', R1, R2). 3082 3083 3084chk_ContextRequest_priority(asn1_NOVALUE,asn1_NOVALUE) -> 3085 ok; 3086chk_ContextRequest_priority(P, P) -> 3087 chk_type(fun is_ContextRequest_priority/1, 'ContextRequest_priority', P); 3088chk_ContextRequest_priority(P1, P2) -> 3089 case (is_ContextRequest_priority(P1) andalso 3090 is_ContextRequest_priority(P2)) of 3091 true -> 3092 not_equal('ContextRequest_priority', P1, P2); 3093 false -> 3094 wrong_type(contextRequest_priority, P1, P2) 3095 end. 3096 3097 3098chk_ContextRequest_emergency(asn1_NOVALUE, asn1_NOVALUE) -> 3099 ok; 3100chk_ContextRequest_emergency(E, E) -> 3101 chk_type(fun is_ContextRequest_emergency/1, 'ContextRequest_emergency', E); 3102chk_ContextRequest_emergency(E1, E2) -> 3103 case (is_ContextRequest_emergency(E1) andalso 3104 is_ContextRequest_emergency(E2)) of 3105 true -> 3106 not_equal('ContextRequest_emergency', E1, E2); 3107 false -> 3108 wrong_type('ContextRequest_emergency', E1, E2) 3109 end. 3110 3111chk_ContextRequest_topologyReq(asn1_NOVALUE, asn1_NOVALUE) -> 3112 ok; 3113chk_ContextRequest_topologyReq([], []) -> 3114 ok; 3115chk_ContextRequest_topologyReq([] = T1, T2) -> 3116 not_equal('ContextRequest_topologyReq', T1, T2); 3117chk_ContextRequest_topologyReq(T1, [] = T2) -> 3118 not_equal('ContextRequest_topologyReq', T1, T2); 3119chk_ContextRequest_topologyReq([H|T1], [H|T2]) -> 3120 case is_TopologyRequest(H) of 3121 true -> 3122 chk_ContextRequest_topologyReq(T1, T2); 3123 false -> 3124 wrong_type('ContextRequest_topologyReq_val', H) 3125 end; 3126chk_ContextRequest_topologyReq([H1|T1], [H2|T2]) -> 3127 validate(fun() -> chk_TopologyRequest(H1, H2) end, 3128 'ContextRequest_topologyReq_val'), 3129 chk_ContextRequest_topologyReq(T1, T2); 3130chk_ContextRequest_topologyReq(T1, T2) -> 3131 wrong_type('ContextRequest_topologyReq', T1, T2). 3132 3133 3134chk_ContextRequest_iepscallind(asn1_NOVALUE, asn1_NOVALUE) -> 3135 ok; 3136chk_ContextRequest_iepscallind(E, E) -> 3137 chk_type(fun is_ContextRequest_iepscallind/1, 3138 'ContextRequest_iepscallind', E); 3139chk_ContextRequest_iepscallind(E1, E2) -> 3140 case (is_ContextRequest_iepscallind(E1) andalso 3141 is_ContextRequest_iepscallind(E2)) of 3142 true -> 3143 case (((E1 == false) and (E2 == asn1_NOVALUE)) or 3144 ((E1 == asn1_NOVALUE) and (E2 == false))) of 3145 true -> 3146 ok; 3147 false -> 3148 not_equal('ContextRequest_iepscallind', E1, E2) 3149 end; 3150 3151 false -> 3152 wrong_type('ContextRequest_iepscallind', E1, E2) 3153 end. 3154 3155chk_ContextRequest_contextProp(asn1_NOVALUE, asn1_NOVALUE) -> 3156 ok; 3157chk_ContextRequest_contextProp([], []) -> 3158 ok; 3159chk_ContextRequest_contextProp([] = T1, T2) -> 3160 not_equal('ContextRequest_contextProp', T1, T2); 3161chk_ContextRequest_contextProp(T1, [] = T2) -> 3162 not_equal('ContextRequest_contextProp', T1, T2); 3163chk_ContextRequest_contextProp([H|T1], [H|T2]) -> 3164 case is_PropertyParm(H) of 3165 true -> 3166 chk_ContextRequest_contextProp(T1, T2); 3167 false -> 3168 wrong_type('ContextRequest_contextProp_val', H) 3169 end; 3170chk_ContextRequest_contextProp([H1|T1], [H2|T2]) -> 3171 validate(fun() -> chk_PropertyParm(H1, H2) end, 3172 'ContextRequest_contextProp_val'), 3173 chk_ContextRequest_contextProp(T1, T2); 3174chk_ContextRequest_contextProp(T1, T2) -> 3175 wrong_type('ContextRequest_contextProp', T1, T2). 3176 3177chk_ContextRequest_contextList(asn1_NOVALUE, asn1_NOVALUE) -> 3178 ok; 3179chk_ContextRequest_contextList([], []) -> 3180 ok; 3181chk_ContextRequest_contextList([] = T1, T2) -> 3182 not_equal('ContextRequest_contextList', T1, T2); 3183chk_ContextRequest_contextList(T1, [] = T2) -> 3184 not_equal('ContextRequest_contextList', T1, T2); 3185chk_ContextRequest_contextList([H|T1], [H|T2]) -> 3186 case is_ContextID(H) of 3187 true -> 3188 chk_ContextRequest_contextList(T1, T2); 3189 false -> 3190 wrong_type('ContextRequest_contextList_val', H) 3191 end; 3192chk_ContextRequest_contextList([H1|T1], [H2|T2]) -> 3193 validate(fun() -> chk_ContextID(H1, H2) end, 3194 'ContextRequest_contextList_val'), 3195 chk_ContextRequest_contextList(T1, T2); 3196chk_ContextRequest_contextList(T1, T2) -> 3197 wrong_type('ContextRequest_contextList', T1, T2). 3198 3199 3200%% -- ContextAttrAuditRequest -- 3201 3202is_opt_ContextAttrAuditRequest(asn1_NOVALUE) -> 3203 true; 3204is_opt_ContextAttrAuditRequest(V) -> 3205 is_ContextAttrAuditRequest(V). 3206 3207is_ContextAttrAuditRequest( 3208 #'ContextAttrAuditRequest'{topology = T, 3209 emergency = E, 3210 priority = P, 3211 iepscallind = I, 3212 contextPropAud = A, 3213 selectpriority = SP, 3214 selectemergency = SE, 3215 selectiepscallind = SI, 3216 selectLogic = SL}) -> 3217 d("is_ContextAttrAuditRequest -> entry"), 3218 is_opt_NULL(T) andalso 3219 is_opt_NULL(E) andalso 3220 is_opt_NULL(P) andalso 3221 is_opt_NULL(I) andalso 3222 is_ContextAttrAuditRequest_contextPropAud(A) andalso 3223 is_ContextAttrAuditRequest_selectpriority(SP) andalso 3224 is_ContextAttrAuditRequest_selectemergency(SE) andalso 3225 is_ContextAttrAuditRequest_selectiepscallind(SI) andalso 3226 is_opt_SelectLogic(SL); 3227is_ContextAttrAuditRequest(_) -> 3228 false. 3229 3230is_ContextAttrAuditRequest_contextPropAud(asn1_NOVALUE) -> 3231 true; 3232is_ContextAttrAuditRequest_contextPropAud([]) -> 3233 true; 3234is_ContextAttrAuditRequest_contextPropAud([H|T]) -> 3235 d("is_ContextAttrAuditRequest_contextPropAud -> entry"), 3236 is_IndAudPropertyParm(H) andalso 3237 is_ContextAttrAuditRequest_contextPropAud(T). 3238 3239is_ContextAttrAuditRequest_selectpriority(asn1_NOVALUE) -> 3240 true; 3241is_ContextAttrAuditRequest_selectpriority(V) -> 3242 is_INTEGER(V, {range, 1, 15}). 3243 3244is_ContextAttrAuditRequest_selectemergency(asn1_NOVALUE) -> 3245 true; 3246is_ContextAttrAuditRequest_selectemergency(V) -> 3247 is_BOOLEAN(V). 3248 3249is_ContextAttrAuditRequest_selectiepscallind(asn1_NOVALUE) -> 3250 true; 3251is_ContextAttrAuditRequest_selectiepscallind(V) -> 3252 is_BOOLEAN(V). 3253 3254 3255chk_opt_ContextAttrAuditRequest(asn1_NOVALUE, asn1_NOVALUE) -> 3256 ok; 3257chk_opt_ContextAttrAuditRequest(R1, R2) -> 3258 chk_ContextAttrAuditRequest(R1, R2). 3259 3260chk_ContextAttrAuditRequest(R, R) -> 3261 chk_type(fun is_ContextAttrAuditRequest/1, 'ContextAttrAuditRequest', R); 3262chk_ContextAttrAuditRequest( 3263 #'ContextAttrAuditRequest'{topology = T1, 3264 emergency = E1, 3265 priority = P1, 3266 iepscallind = I1, 3267 contextPropAud = A1, 3268 selectpriority = SP1, 3269 selectemergency = SE1, 3270 selectiepscallind = SI1, 3271 selectLogic = SL1}, 3272 #'ContextAttrAuditRequest'{topology = T2, 3273 emergency = E2, 3274 priority = P2, 3275 iepscallind = I2, 3276 contextPropAud = A2, 3277 selectpriority = SP2, 3278 selectemergency = SE2, 3279 selectiepscallind = SI2, 3280 selectLogic = SL2}) -> 3281 validate(fun() -> chk_opt_NULL(T1, T2) end, 3282 'ContextAttrAuditRequest_topology'), 3283 validate(fun() -> chk_opt_NULL(E1, E2) end, 3284 'ContextAttrAuditRequest_emergency'), 3285 validate(fun() -> chk_opt_NULL(P1, P2) end, 3286 'ContextAttrAuditRequest_priority'), 3287 validate(fun() -> chk_opt_NULL(I1, I2) end, 3288 'ContextAttrAuditRequest_iepscallind'), 3289 chk_ContextAttrAuditRequest_contextPropAud(lists:sort(A1), 3290 lists:sort(A2)), 3291 chk_ContextAttrAuditRequest_selectpriority(SP1, SP2), 3292 chk_ContextAttrAuditRequest_selectemergency(SE1, SE2), 3293 chk_ContextAttrAuditRequest_selectiepscallind(SI1, SI2), 3294 chk_ContextAttrAuditRequest_selectLogic(SL1, SL2), 3295 ok. 3296 3297chk_ContextAttrAuditRequest_contextPropAud(asn1_NOVALUE, asn1_NOVALUE) -> 3298 ok; 3299chk_ContextAttrAuditRequest_contextPropAud(A, A) -> 3300 chk_type(fun is_ContextAttrAuditRequest_contextPropAud/1, 3301 'ContextAttrAuditRequest_contextPropAud', A); 3302chk_ContextAttrAuditRequest_contextPropAud([], []) -> 3303 ok; 3304chk_ContextAttrAuditRequest_contextPropAud([] = T1, T2) -> 3305 not_equal('ContextAttrAuditRequest_contextPropAud', T1, T2); 3306chk_ContextAttrAuditRequest_contextPropAud(T1, [] = T2) -> 3307 not_equal('ContextAttrAuditRequest_contextPropAud', T1, T2); 3308chk_ContextAttrAuditRequest_contextPropAud([H|T1], [H|T2]) -> 3309 case is_IndAudPropertyParm(H) of 3310 true -> 3311 chk_ContextAttrAuditRequest_contextPropAud(T1, T2); 3312 false -> 3313 wrong_type('ContextAttrAuditRequest_contextPropAud_val', H) 3314 end; 3315chk_ContextAttrAuditRequest_contextPropAud([H1|T1], [H2|T2]) -> 3316 validate(fun() -> chk_PropertyParm(H1, H2) end, 3317 'ContextAttrAuditRequest_contextPropAud_val'), 3318 chk_ContextAttrAuditRequest_contextPropAud(T1, T2); 3319chk_ContextAttrAuditRequest_contextPropAud(T1, T2) -> 3320 wrong_type('ContextAttrAuditRequest_contextPropAud', T1, T2). 3321 3322chk_ContextAttrAuditRequest_selectpriority(asn1_NOVALUE, asn1_NOVALUE) -> 3323 ok; 3324chk_ContextAttrAuditRequest_selectpriority(A, A) -> 3325 chk_type(fun is_ContextAttrAuditRequest_selectpriority/1, 3326 'ContextAttrAuditRequest_selectpriority', A); 3327chk_ContextAttrAuditRequest_selectpriority(SP1, SP2) -> 3328 case (is_ContextAttrAuditRequest_selectpriority(SP1) andalso 3329 is_ContextAttrAuditRequest_selectpriority(SP2)) of 3330 true -> 3331 not_equal('ContextAttrAuditRequest_selectpriority', SP1, SP2); 3332 false -> 3333 wrong_type('ContextAttrAuditRequest_selectpriority', SP1, SP2) 3334 end. 3335 3336chk_ContextAttrAuditRequest_selectemergency(asn1_NOVALUE, asn1_NOVALUE) -> 3337 ok; 3338chk_ContextAttrAuditRequest_selectemergency(A, A) -> 3339 chk_type(fun is_ContextAttrAuditRequest_selectemergency/1, 3340 'ContextAttrAuditRequest_selectemergency', A); 3341chk_ContextAttrAuditRequest_selectemergency(SE1, SE2) -> 3342 case (is_ContextAttrAuditRequest_selectemergency(SE1) andalso 3343 is_ContextAttrAuditRequest_selectemergency(SE2)) of 3344 true -> 3345 not_equal('ContextAttrAuditRequest_selectemergency', SE1, SE2); 3346 false -> 3347 wrong_type('ContextAttrAuditRequest_selectemergency', SE1, SE2) 3348 end. 3349 3350chk_ContextAttrAuditRequest_selectiepscallind(asn1_NOVALUE, asn1_NOVALUE) -> 3351 ok; 3352chk_ContextAttrAuditRequest_selectiepscallind(A, A) -> 3353 chk_type(fun is_ContextAttrAuditRequest_selectiepscallind/1, 3354 'ContextAttrAuditRequest_selectiepscallind', A); 3355chk_ContextAttrAuditRequest_selectiepscallind(SI1, SI2) -> 3356 case (is_ContextAttrAuditRequest_selectiepscallind(SI1) andalso 3357 is_ContextAttrAuditRequest_selectiepscallind(SI2)) of 3358 true -> 3359 not_equal('ContextAttrAuditRequest_selectiepscallind', SI1, SI2); 3360 false -> 3361 wrong_type('ContextAttrAuditRequest_selectiepscallind', SI1, SI2) 3362 end. 3363 3364chk_ContextAttrAuditRequest_selectLogic(SL1, SL2) -> 3365 validate(fun() -> chk_opt_SelectLogic(SL1, SL2) end, 3366 'ContextAttrAuditRequest_selectLogic'). 3367 3368 3369%% -- SelectLogic -- 3370 3371is_opt_SelectLogic(asn1_NOVALUE) -> 3372 true; 3373is_opt_SelectLogic(SL) -> 3374 is_SelectLogic(SL). 3375 3376is_SelectLogic({Tag, Val}) -> 3377 d("is_SelectLogic -> entry"), 3378 is_SelectLogic_tag(Tag) andalso is_SelectLogic_val(Tag, Val); 3379is_SelectLogic(_) -> 3380 false. 3381 3382is_SelectLogic_tag(Tag) -> 3383 Tags = [andAUDITSelect, orAUDITSelect], 3384 lists:member(Tag, Tags). 3385 3386is_SelectLogic_val(andAUDITSelect, 'NULL') -> true; 3387is_SelectLogic_val(orAUDITSelect, 'NULL') -> true; 3388is_SelectLogic_val(_, _) -> false. 3389 3390chk_opt_SelectLogic(asn1_NOVALUE, asn1_NOVALUE) -> 3391 ok; 3392chk_opt_SelectLogic(SL1, SL2) -> 3393 chk_SelectLogic(SL1, SL2). 3394 3395chk_SelectLogic(SL, SL) -> 3396 chk_type(fun is_SelectLogic/1, 'SelectLogic', SL); 3397chk_SelectLogic(asn1_NOVALUE, {andAUDITSelect, 'NULL'}) -> 3398 ok; % AND is default 3399chk_SelectLogic({andAUDITSelect, 'NULL'}, asn1_NOVALUE) -> 3400 ok; % AND is default 3401chk_SelectLogic({Tag, Val1} = SL1, {Tag, Val2} = SL2) -> 3402 case (is_SelectLogic_tag(Tag) andalso 3403 is_SelectLogic_val(Tag, Val1) andalso 3404 is_SelectLogic_val(Tag, Val2)) of 3405 true -> 3406 chk_SelectLogic_val(Tag, Val1, Val2); 3407 false -> 3408 wrong_type('SelectLogic', SL1, SL2) 3409 end; 3410chk_SelectLogic({Tag1, Val1} = SL1, {Tag2, Val2} = SL2) -> 3411 case ((is_SelectLogic_tag(Tag1) andalso 3412 is_SelectLogic_val(Tag1, Val1)) andalso 3413 (is_SelectLogic_tag(Tag2) andalso 3414 is_SelectLogic_val(Tag2, Val2))) of 3415 true -> 3416 not_equal('SelectLogic', SL1, SL2); 3417 false -> 3418 wrong_type('SelectLogic', SL1, SL2) 3419 end; 3420chk_SelectLogic(SL1, SL2) -> 3421 wrong_type('SelectLogic', SL1, SL2). 3422 3423chk_SelectLogic_val(andAUDITSelect, SL1, SL2) -> 3424 validate(fun() -> chk_NULL(SL1, SL2) end, 'SelectLogic_andAUDITSelect'); 3425chk_SelectLogic_val(orAUDITSelect, SL1, SL2) -> 3426 validate(fun() -> chk_NULL(SL1, SL2) end, 'SelectLogic_orAUDITSelect'). 3427 3428 3429%% -- CommandRequest -- 3430 3431is_CommandRequest(#'CommandRequest'{command = Cmd, 3432 optional = Opt, 3433 wildcardReturn = WR}) -> 3434 d("is_CommandRequest -> entry with" 3435 "~n Cmd: ~p" 3436 "~n Opt: ~p" 3437 "~n WR: ~p", [Cmd, Opt, WR]), 3438 is_Command(Cmd) andalso is_opt_NULL(Opt) andalso is_opt_NULL(WR); 3439is_CommandRequest(_) -> 3440 false. 3441 3442chk_CommandRequest(C, C) -> 3443 chk_type(fun is_CommandRequest/1, 'CommandRequest', C); 3444chk_CommandRequest(#'CommandRequest'{command = Cmd1, 3445 optional = Opt1, 3446 wildcardReturn = WR1}, 3447 #'CommandRequest'{command = Cmd2, 3448 optional = Opt2, 3449 wildcardReturn = WR2}) -> 3450 validate(fun() -> chk_Command(Cmd1, Cmd2) end, 'CommandRequest'), 3451 validate(fun() -> chk_opt_NULL(Opt1, Opt2) end, 'CommandRequest'), 3452 validate(fun() -> chk_opt_NULL(WR1, WR2) end, 'CommandRequest'), 3453 ok; 3454chk_CommandRequest(R1, R2) -> 3455 wrong_type('CommandRequest', R1, R2). 3456 3457 3458%% -- Command -- 3459 3460is_Command({Tag, Val}) -> 3461 d("is_Command -> entry with" 3462 "~n Tag: ~p" 3463 "~n Val: ~p", [Tag, Val]), 3464 is_Command_tag(Tag) andalso is_Command_val(Tag, Val); 3465is_Command(_) -> 3466 false. 3467 3468is_Command_tag(Tag) -> 3469 Tags = [addReq, moveReq, modReq, subtractReq, auditCapRequest, 3470 auditValueRequest, notifyReq, serviceChangeReq], 3471 lists:member(Tag, Tags). 3472 3473is_Command_val(addReq, V) -> is_AmmRequest(V); 3474is_Command_val(moveReq, V) -> is_AmmRequest(V); 3475is_Command_val(modReq, V) -> is_AmmRequest(V); 3476is_Command_val(subtractReq, V) -> is_SubtractRequest(V); 3477is_Command_val(auditCapRequest, V) -> is_AuditRequest(V); 3478is_Command_val(auditValueRequest, V) -> is_AuditRequest(V); 3479is_Command_val(notifyReq, V) -> is_NotifyRequest(V); 3480is_Command_val(serviceChangeReq, V) -> is_ServiceChangeRequest(V). 3481 3482chk_Command(Cmd, Cmd) -> 3483 chk_type(fun is_Command/1, 'Command', Cmd); 3484chk_Command({Tag, Val1} = Cmd1, {Tag, Val2} = Cmd2) -> 3485 case (is_Command_tag(Tag) andalso 3486 is_Command_val(Tag, Val1) andalso 3487 is_Command_val(Tag, Val2)) of 3488 true -> 3489 chk_Command_val(Tag, Val1, Val2); 3490 false -> 3491 wrong_type('Command', Cmd1, Cmd2) 3492 end; 3493chk_Command({Tag1, Val1} = Cmd1, {Tag2, Val2} = Cmd2) -> 3494 case ((is_Command_tag(Tag1) andalso is_Command_val(Tag1, Val1)) andalso 3495 (is_Command_tag(Tag2) andalso is_Command_val(Tag2, Val2))) of 3496 true -> 3497 not_equal('Command', Cmd1, Cmd2); 3498 false -> 3499 wrong_type('Command', Cmd1, Cmd2) 3500 end; 3501chk_Command(Cmd1, Cmd2) -> 3502 wrong_type('Command', Cmd1, Cmd2). 3503 3504 3505chk_Command_val(addReq, R1, R2) -> 3506 validate(fun() -> chk_AmmRequest(R1, R2) end, 'Command_addReq'); 3507chk_Command_val(moveReq, R1, R2) -> 3508 validate(fun() -> chk_AmmRequest(R1, R2) end, 'Command_moveReq'); 3509chk_Command_val(modReq, R1, R2) -> 3510 validate(fun() -> chk_AmmRequest(R1, R2) end, 'Command_modReq'); 3511chk_Command_val(subtractReq, R1, R2) -> 3512 validate(fun() -> chk_SubtractRequest(R1, R2) end, 'Command_subtractReq'); 3513chk_Command_val(auditCapRequest, R1, R2) -> 3514 validate(fun() -> chk_AuditRequest(R1, R2) end, 'Command_auditCapRequest'); 3515chk_Command_val(auditValueRequest, R1, R2) -> 3516 validate(fun() -> chk_AuditRequest(R1, R2) end, 3517 'Command_auditValueRequest'); 3518chk_Command_val(notifyReq, R1, R2) -> 3519 validate(fun() -> chk_NotifyRequest(R1, R2) end, 'Command_notifyReq'); 3520chk_Command_val(serviceChangeReq, R1, R2) -> 3521 validate(fun() -> chk_ServiceChangeRequest(R1, R2) end, 3522 'Command_serviceChangeReq'). 3523 3524 3525%% -- CommandReply -- 3526 3527is_CommandReply({Tag, Val}) -> 3528 d("is_CommandReply -> entry"), 3529 is_CommandReply_tag(Tag) andalso is_CommandReply_val(Tag, Val); 3530is_CommandReply(_) -> 3531 false. 3532 3533is_CommandReply_tag(Tag) -> 3534 Tags = [addReply, moveReply, modReply, subtractReply, 3535 auditCapReply, auditValueReply, notifyReply, serviceChangeReply], 3536 lists:member(Tag, Tags). 3537 3538is_CommandReply_val(addReply, V) -> is_AmmsReply(V); 3539is_CommandReply_val(moveReply, V) -> is_AmmsReply(V); 3540is_CommandReply_val(modReply, V) -> is_AmmsReply(V); 3541is_CommandReply_val(subtractReply, V) -> is_AmmsReply(V); 3542is_CommandReply_val(auditCapReply, V) -> is_AuditReply(V); 3543is_CommandReply_val(auditValueReply, V) -> is_AuditReply(V); 3544is_CommandReply_val(notifyReply, V) -> is_NotifyReply(V); 3545is_CommandReply_val(serviceChangeReply, V) -> is_ServiceChangeReply(V). 3546 3547chk_CommandReply({Tag, Val} = Cmd, Cmd) -> 3548 case (is_CommandReply_tag(Tag) andalso is_CommandReply_val(Tag, Val)) of 3549 true -> 3550 ok; 3551 false -> 3552 wrong_type('CommandReply', Cmd) 3553 end; 3554chk_CommandReply({Tag, Val1} = Cmd1, {Tag, Val2} = Cmd2) -> 3555 case (is_CommandReply_tag(Tag) andalso 3556 is_CommandReply_val(Tag, Val1) andalso 3557 is_CommandReply_val(Tag, Val2)) of 3558 true -> 3559 chk_CommandReply_val(Tag, Val1, Val2); 3560 false -> 3561 wrong_type('CommandReply', Cmd1, Cmd2) 3562 end; 3563chk_CommandReply({Tag1, Val1} = Cmd1, {Tag2, Val2} = Cmd2) -> 3564 case ((is_CommandReply_tag(Tag1) andalso 3565 is_CommandReply_val(Tag1, Val1)) andalso 3566 (is_CommandReply_tag(Tag2) andalso 3567 is_CommandReply_val(Tag2, Val2))) of 3568 true -> 3569 not_equal('CommandReply', Cmd1, Cmd2); 3570 false -> 3571 wrong_type('CommandReply', Cmd1, Cmd2) 3572 end; 3573chk_CommandReply(Cmd1, Cmd2) -> 3574 wrong_type('CommandReply', Cmd1, Cmd2). 3575 3576chk_CommandReply_val(addReply, V1, V2) -> 3577 validate(fun() -> chk_AmmsReply(V1, V2) end, 'CommandReply_addReply'); 3578chk_CommandReply_val(moveReply, V1, V2) -> 3579 validate(fun() -> chk_AmmsReply(V1, V2) end, 'CommandReply_moveReply'); 3580chk_CommandReply_val(modReply, V1, V2) -> 3581 validate(fun() -> chk_AmmsReply(V1, V2) end, 'CommandReply_modReply'); 3582chk_CommandReply_val(subtractReply, V1, V2) -> 3583 validate(fun() -> chk_AmmsReply(V1, V2) end, 'CommandReply_subtractReply'); 3584chk_CommandReply_val(auditCapReply, V1, V2) -> 3585 validate(fun() -> chk_AuditReply(V1, V2) end, 3586 'CommandReply_auditCapReply'); 3587chk_CommandReply_val(auditValueReply, V1, V2) -> 3588 validate(fun() -> chk_AuditReply(V1, V2) end, 3589 'CommandReply_auditValueReply'); 3590chk_CommandReply_val(notifyReply, V1, V2) -> 3591 validate(fun() -> chk_NotifyReply(V1, V2) end, 'CommandReply_notifyReply'); 3592chk_CommandReply_val(serviceChangeReply, V1, V2) -> 3593 validate(fun() -> chk_ServiceChangeReply(V1, V2) end, 3594 'CommandReply_serviceChangeReply'). 3595 3596 3597%% -- TopologyRequest -- 3598 3599is_TopologyRequest(#'TopologyRequest'{terminationFrom = F, 3600 terminationTo = T, 3601 topologyDirection = TD, 3602 streamID = S, 3603 topologyDirectionExtension = TDE}) -> 3604 d("is_TopologyRequest -> entry"), 3605 is_TerminationID(F) andalso 3606 is_TerminationID(T) andalso 3607 is_TopologyRequest_topologyDirection(TD) andalso 3608 is_opt_StreamID(S) andalso 3609 is_TopologyRequest_topologyDirectionExtension(TDE); 3610is_TopologyRequest(_) -> 3611 false. 3612 3613is_TopologyRequest_topologyDirection(D) -> 3614 lists:member(D, [bothway, isolate, oneway]). 3615 3616is_TopologyRequest_topologyDirectionExtension(asn1_NOVALUE) -> 3617 true; 3618is_TopologyRequest_topologyDirectionExtension(D) -> 3619 lists:member(D, [onewayexternal, onewayboth]). 3620 3621 3622chk_TopologyRequest(T, T) when is_record(T,'TopologyRequest') -> 3623 ok; 3624chk_TopologyRequest(#'TopologyRequest'{terminationFrom = F1, 3625 terminationTo = T1, 3626 topologyDirection = TD1, 3627 streamID = S1, 3628 topologyDirectionExtension = TDE1}, 3629 #'TopologyRequest'{terminationFrom = F2, 3630 terminationTo = T2, 3631 topologyDirection = TD2, 3632 streamID = S2, 3633 topologyDirectionExtension = TDE2}) -> 3634 validate(fun() -> chk_TerminationID(F1, F2) end, 3635 'TopologyRequest_terminationFrom'), 3636 validate(fun() -> chk_TerminationID(T1, T2) end, 3637 'TopologyRequest_terminationTo'), 3638 chk_TopologyRequest_topologyDirection(TD1, TD2), 3639 validate(fun() -> chk_opt_StreamID(S1, S2) end, 3640 'TopologyRequest_streamID'), 3641 chk_TopologyRequest_topologyDirectionExtension(TDE1, TDE2), 3642 ok. 3643 3644chk_TopologyRequest_topologyDirection(D, D) -> 3645 case is_TopologyRequest_topologyDirection(D) of 3646 true -> 3647 ok; 3648 false -> 3649 wrong_type('TopologyRequest_topologyDirection', D) 3650 end; 3651chk_TopologyRequest_topologyDirection(D1, D2) -> 3652 case (is_TopologyRequest_topologyDirection(D1) andalso 3653 is_TopologyRequest_topologyDirection(D1)) of 3654 true -> 3655 not_equal('TopologyRequest_topologyDirection', D1, D2); 3656 false -> 3657 wrong_type('TopologyRequest_topologyDirection', D1, D2) 3658 end. 3659 3660chk_TopologyRequest_topologyDirectionExtension(asn1_NOVALUE, asn1_NOVALUE) -> 3661 ok; 3662chk_TopologyRequest_topologyDirectionExtension(D, D) -> 3663 case is_TopologyRequest_topologyDirectionExtension(D) of 3664 true -> 3665 ok; 3666 false -> 3667 wrong_type('TopologyRequest_topologyDirectionExtension', D) 3668 end; 3669chk_TopologyRequest_topologyDirectionExtension(D1, D2) -> 3670 case (is_TopologyRequest_topologyDirectionExtension(D1) andalso 3671 is_TopologyRequest_topologyDirectionExtension(D1)) of 3672 true -> 3673 not_equal('TopologyRequest_topologyDirectionExtension', D1, D2); 3674 false -> 3675 wrong_type('TopologyRequest_topologyDirectionExtension', D1, D2) 3676 end. 3677 3678 3679%% -- AmmRequest -- 3680 3681is_AmmRequest(#'AmmRequest'{terminationID = Tids, 3682 descriptors = Descs}) -> 3683 d("is_AmmRequest -> entry with" 3684 "~n Tids: ~p", [Tids]), 3685 is_TerminationIDList(Tids) andalso is_AmmRequest_descriptors(Descs); 3686is_AmmRequest(_) -> 3687 false. 3688 3689is_AmmRequest_descriptors(Descs) -> 3690 d("is_AmmRequest_descriptors -> entry"), 3691 is_AmmRequest_descriptors(Descs, []). 3692 3693is_AmmRequest_descriptors([], _) -> 3694 true; 3695is_AmmRequest_descriptors([{Tag, _} = Desc|Descs], FoundDescs) -> 3696 d("is_AmmRequest_descriptors -> entry with" 3697 "~n Tag: ~p" 3698 "~n FoundDescs: ~p", [Tag, FoundDescs]), 3699 case lists:member(Tag, FoundDescs) of 3700 true -> 3701 atmost_once('AmmRequest_descriptors', Tag); 3702 false -> 3703 case is_AmmDescriptor(Desc) of 3704 true -> 3705 is_AmmRequest_descriptors(Descs, [Tag|FoundDescs]); 3706 false -> 3707 wrong_type('AmmRequest_descriptors', Desc) 3708 end 3709 end; 3710is_AmmRequest_descriptors(Descs, _) -> 3711 d("is_AmmRequest_descriptors -> entry with WRONG TYPE" 3712 "~n Descs: ~p", [Descs]), 3713 wrong_type('AmmRequest_descriptors', Descs). 3714 3715 3716chk_AmmRequest(R, R) when is_record(R, 'AmmRequest') -> 3717 d("chk_AmmRequest -> entry when equal"), 3718 chk_type(fun is_AmmRequest/1, 'AmmRequest', R); 3719chk_AmmRequest(#'AmmRequest'{terminationID = Tids1, 3720 descriptors = Descs1}, 3721 #'AmmRequest'{terminationID = Tids2, 3722 descriptors = Descs2}) -> 3723 d("chk_AmmRequest -> entry with not equal" 3724 "~n Tids1: ~p" 3725 "~n Tids2: ~p", [Tids1, Tids2]), 3726 validate( 3727 fun() -> chk_TerminationIDList(Tids1, Tids2) end, 3728 'AmmRequest'), 3729 validate( 3730 fun() -> chk_AmmRequest_descriptors(Descs1, Descs2) end, 3731 'AmmRequest'), 3732 ok. 3733 3734 3735chk_AmmRequest_descriptors([], []) -> 3736 d("chk_AmmRequest_descriptors -> done when OK"), 3737 ok; 3738chk_AmmRequest_descriptors([] = Descs1, Descs2) -> 3739 d("chk_AmmRequest_descriptors -> done when NOT EQUAL:" 3740 "~n Descs1: ~p" 3741 "~n Descs1: ~p", [Descs1, Descs2]), 3742 not_equal('AmmRequest_descriptors', Descs1, Descs2); 3743chk_AmmRequest_descriptors(Descs1, [] = Descs2) -> 3744 d("chk_AmmRequest_descriptors -> done when NOT EQUAL:" 3745 "~n Descs1: ~p" 3746 "~n Descs1: ~p", [Descs1, Descs2]), 3747 not_equal('AmmRequest_descriptors', Descs1, Descs2); 3748chk_AmmRequest_descriptors([H|T1], [H|T2]) -> 3749 d("chk_AmmRequest_descriptors -> entry when equal"), 3750 case is_AmmDescriptor(H) of 3751 true -> 3752 chk_AmmRequest_descriptors(T1, T2); 3753 false -> 3754 wrong_type('AmmRequest_descriptors_val', H) 3755 end; 3756chk_AmmRequest_descriptors([H1|T1], [H2|T2]) -> 3757 d("chk_AmmRequest_descriptors -> entry when not equal"), 3758 validate(fun() -> chk_AmmDescriptor(H1, H2) end, 3759 'AmmRequest_descriptors_val'), 3760 chk_AmmRequest_descriptors(T1, T2); 3761chk_AmmRequest_descriptors(Descs1, Descs2) -> 3762 d("chk_AmmRequest_descriptors -> done when WRONG TYPE:" 3763 "~n Descs1: ~p" 3764 "~n Descs1: ~p", [Descs1, Descs2]), 3765 wrong_type('AmmRequest_descriptors', Descs1, Descs2). 3766 3767 3768%% -- AmmDescriptor -- 3769 3770is_AmmDescriptor({Tag, Val}) -> 3771 d("is_AmmDescriptor -> entry with" 3772 "~n Tag: ~p" 3773 "~n Val: ~p",[Tag, Val]), 3774 is_AmmDescriptor_tag(Tag) andalso is_AmmDescriptor_val(Tag, Val); 3775is_AmmDescriptor(_) -> 3776 false. 3777 3778is_AmmDescriptor_tag(Tag) -> 3779 Tags = [mediaDescriptor, modemDescriptor, muxDescriptor, eventsDescriptor, 3780 eventBufferDescriptor, signalsDescriptor, digitMapDescriptor, 3781 auditDescriptor, statisticsDescriptor], 3782 lists:member(Tag, Tags). 3783 3784is_AmmDescriptor_val(mediaDescriptor, D) -> 3785 is_MediaDescriptor(D); 3786is_AmmDescriptor_val(modemDescriptor, D) -> 3787 is_ModemDescriptor(D); 3788is_AmmDescriptor_val(muxDescriptor, D) -> 3789 is_MuxDescriptor(D); 3790is_AmmDescriptor_val(eventsDescriptor, D) -> 3791 is_EventsDescriptor(D); 3792is_AmmDescriptor_val(eventBufferDescriptor, D) -> 3793 is_EventBufferDescriptor(D); 3794is_AmmDescriptor_val(signalsDescriptor, D) -> 3795 is_SignalsDescriptor(D); 3796is_AmmDescriptor_val(digitMapDescriptor, D) -> 3797 is_DigitMapDescriptor(D); 3798is_AmmDescriptor_val(auditDescriptor, D) -> 3799 is_AuditDescriptor(D); 3800is_AmmDescriptor_val(statisticsDescriptor, D) -> 3801 is_StatisticsDescriptor(D). 3802 3803chk_AmmDescriptor(D, D) -> 3804 chk_type(fun is_AmmDescriptor_tag/1, 'AmmDescriptor', D); 3805chk_AmmDescriptor({Tag, Val1} = Cmd1, {Tag, Val2} = Cmd2) -> 3806 case (is_AmmDescriptor_tag(Tag) andalso 3807 is_AmmDescriptor_val(Tag, Val1) andalso 3808 is_AmmDescriptor_val(Tag, Val2)) of 3809 true -> 3810 chk_AmmDescriptor_val(Tag, Val1, Val2); 3811 false -> 3812 wrong_type('AmmDescriptor', Cmd1, Cmd2) 3813 end; 3814chk_AmmDescriptor({Tag1, Val1} = Cmd1, {Tag2, Val2} = Cmd2) -> 3815 case ((is_AmmDescriptor_tag(Tag1) andalso 3816 is_AmmDescriptor_val(Tag1, Val1)) andalso 3817 (is_AmmDescriptor_tag(Tag2) andalso 3818 is_AmmDescriptor_val(Tag2, Val2))) of 3819 true -> 3820 not_equal('AmmDescriptor', Cmd1, Cmd2); 3821 false -> 3822 wrong_type('AmmDescriptor', Cmd1, Cmd2) 3823 end; 3824chk_AmmDescriptor(Cmd1, Cmd2) -> 3825 wrong_type('AmmDescriptor', Cmd1, Cmd2). 3826 3827chk_AmmDescriptor_val(mediaDescriptor, D1, D2) -> 3828 validate(fun() -> chk_MediaDescriptor(D1, D2) end, 'AmmDescriptor'); 3829chk_AmmDescriptor_val(modemDescriptor, D1, D2) -> 3830 validate(fun() -> chk_ModemDescriptor(D1, D2) end, 'AmmDescriptor'); 3831chk_AmmDescriptor_val(muxDescriptor, D1, D2) -> 3832 validate(fun() -> chk_MuxDescriptor(D1, D2) end, 'AmmDescriptor'); 3833chk_AmmDescriptor_val(eventsDescriptor, D1, D2) -> 3834 validate(fun() -> chk_EventsDescriptor(D1, D2) end, 'AmmDescriptor'); 3835chk_AmmDescriptor_val(eventBufferDescriptor, D1, D2) -> 3836 validate(fun() -> chk_EventBufferDescriptor(D1, D2) end, 'AmmDescriptor'); 3837chk_AmmDescriptor_val(signalsDescriptor, D1, D2) -> 3838 validate(fun() -> chk_SignalsDescriptor(D1, D2) end, 'AmmDescriptor'); 3839chk_AmmDescriptor_val(digitMapDescriptor, D1, D2) -> 3840 validate(fun() -> chk_DigitMapDescriptor(D1, D2) end, 'AmmDescriptor'); 3841chk_AmmDescriptor_val(auditDescriptor, D1, D2) -> 3842 validate(fun() -> chk_AuditDescriptor(D1, D2) end, 'AmmDescriptor'). 3843 3844 3845%% -- AmmsReply -- 3846 3847is_AmmsReply(#'AmmsReply'{terminationID = Tids, 3848 terminationAudit = TA}) -> 3849 is_TerminationIDList(Tids) andalso is_opt_TerminationAudit(TA); 3850is_AmmsReply(_) -> 3851 false. 3852 3853chk_AmmsReply(R, R) -> 3854 is_AmmsReply(R); 3855chk_AmmsReply(#'AmmsReply'{terminationID = TID1, 3856 terminationAudit = TA1}, 3857 #'AmmsReply'{terminationID = TID2, 3858 terminationAudit = TA2}) -> 3859 validate(fun() -> chk_TerminationIDList(TID1, TID2) end, 'AmmsReply'), 3860 validate(fun() -> chk_opt_TerminationAudit(TA1, TA2) end, 'AmmsReply'), 3861 ok; 3862chk_AmmsReply(R1, R2) -> 3863 wrong_type('AmmsReply', R1, R2). 3864 3865 3866%% -- SubtractRequest -- 3867 3868is_SubtractRequest(#'SubtractRequest'{terminationID = TID, 3869 auditDescriptor = AD}) -> 3870 d("is_SubtractDescriptor -> entry with" 3871 "~n TID: ~p" 3872 "~n AD: ~p",[TID, AD]), 3873 is_TerminationIDList(TID) andalso is_opt_AuditDescriptor(AD); 3874is_SubtractRequest(_) -> 3875 false. 3876 3877chk_SubtractRequest(R, R) -> 3878 chk_type(fun is_SubtractRequest/1, 'SubtractRequest', R); 3879chk_SubtractRequest(#'SubtractRequest'{terminationID = Tids1, 3880 auditDescriptor = AD1}, 3881 #'SubtractRequest'{terminationID = Tids2, 3882 auditDescriptor = AD2}) -> 3883 validate(fun() -> chk_TerminationIDList(Tids1, Tids2) end, 3884 'SubtractRequest'), 3885 validate(fun() -> chk_opt_AuditDescriptor(AD1, AD2) end, 3886 'SubtractRequest'), 3887 ok; 3888chk_SubtractRequest(SR1, SR2) -> 3889 wrong_type('SubtractRequest', SR1, SR2). 3890 3891 3892%% -- AuditRequest -- 3893 3894is_AuditRequest(#'AuditRequest'{terminationID = TID, 3895 auditDescriptor = AD, 3896 terminationIDList = asn1_NOVALUE}) -> 3897 d("is_AuditRequest -> entry with" 3898 "~n TID: ~p" 3899 "~n AD: ~p",[TID, AD]), 3900 is_TerminationID(TID) andalso 3901 is_AuditDescriptor(AD); 3902is_AuditRequest(#'AuditRequest'{terminationID = TID, 3903 auditDescriptor = AD, 3904 terminationIDList = [TID|_] = TIDs}) -> 3905 d("is_AuditRequest -> entry with" 3906 "~n TID: ~p" 3907 "~n AD: ~p" 3908 "~n TIDs: ~p",[TID, AD, TIDs]), 3909 is_TerminationID(TID) andalso 3910 is_AuditDescriptor(AD) andalso 3911 is_TerminationIDList(TIDs); 3912is_AuditRequest(_) -> 3913 false. 3914 3915chk_AuditRequest(R, R) -> 3916 chk_type(fun is_AuditRequest/1, 'AuditRequest', R); 3917chk_AuditRequest(#'AuditRequest'{terminationID = TID1, 3918 auditDescriptor = AD1, 3919 terminationIDList = [TID1|_] = TIDs1}, 3920 #'AuditRequest'{terminationID = TID2, 3921 auditDescriptor = AD2, 3922 terminationIDList = [TID2|_] = TIDs2}) -> 3923 validate(fun() -> chk_TerminationID(TID1, TID2) end, 3924 'AuditRequest'), 3925 validate(fun() -> chk_AuditDescriptor(AD1, AD2) end, 3926 'AuditRequest'), 3927 validate(fun() -> chk_opt_TerminationIDList(TIDs1, TIDs2) end, 3928 'AuditRequest'), 3929 ok; 3930chk_AuditRequest(AR1, AR2) -> 3931 wrong_type('AuditRequest', AR1, AR2). 3932 3933 3934%% -- AuditReply -- 3935 3936is_AuditReply({Tag, Val}) -> 3937 is_AuditReply_tag(Tag) andalso is_AuditReply_val(Tag, Val); 3938is_AuditReply(_) -> 3939 false. 3940 3941is_AuditReply_tag(Tag) -> 3942 Tags = [contextAuditResult, error, auditResult, auditResultTermList], 3943 lists:member(Tag, Tags). 3944 3945is_AuditReply_val(contextAuditResult, Val) -> 3946 is_TerminationIDList(Val); 3947is_AuditReply_val(error, Val) -> 3948 is_ErrorDescriptor(Val); 3949is_AuditReply_val(auditResult, Val) -> 3950 is_AuditResult(Val); 3951is_AuditReply_val(auditResultTermList, Val) -> 3952 is_TermListAuditResult(Val). 3953 3954chk_AuditReply(R, R) -> 3955 chk_type(fun is_AuditReply/1, 'AuditReply', R); 3956chk_AuditReply({Tag, Val1} = R1, {Tag, Val2} = R2) -> 3957 case (is_AuditReply_tag(Tag) andalso 3958 is_AuditReply_val(Tag, Val1)andalso 3959 is_AuditReply_val(Tag, Val2)) of 3960 true -> 3961 chk_AuditReply_val(Tag, Val1, Val2); 3962 false -> 3963 wrong_type('AuditReply', R1, R2) 3964 end; 3965chk_AuditReply({Tag1, Val1} = R1, {Tag2, Val2} = R2) -> 3966 case ((is_AuditReply_tag(Tag1) andalso 3967 is_AuditReply_val(Tag1, Val1)) andalso 3968 (is_AuditReply_tag(Tag2) andalso 3969 is_AuditReply_val(Tag2, Val2))) of 3970 true -> 3971 not_equal('AuditReply', R1, R2); 3972 false -> 3973 wrong_type('AuditReply', R1, R2) 3974 end; 3975chk_AuditReply(AR1, AR2) -> 3976 wrong_type('AuditReply', AR1, AR2). 3977 3978chk_AuditReply_val(contextAuditResult, Val1, Val2) -> 3979 chk_TerminationIDList(Val1, Val2); 3980chk_AuditReply_val(error, Val1, Val2) -> 3981 chk_ErrorDescriptor(Val1, Val2); 3982chk_AuditReply_val(auditResult, Val1, Val2) -> 3983 chk_AuditResult(Val1, Val2); 3984chk_AuditReply_val(auditResultTermList, Val1, Val2) -> 3985 chk_TermListAuditResult(Val1, Val2). 3986 3987 3988%% -- AuditResult -- 3989 3990is_AuditResult(#'AuditResult'{terminationID = TID, 3991 terminationAuditResult = TAR}) -> 3992 is_TerminationID(TID) andalso is_TerminationAudit(TAR); 3993is_AuditResult(_) -> 3994 false. 3995 3996chk_AuditResult(R, R) -> 3997 d("chk_AuditResult -> entry (1)"), 3998 chk_type(fun is_AuditResult/1, 'AuditResult', R); 3999chk_AuditResult(#'AuditResult'{terminationID = TID1, 4000 terminationAuditResult = TAR1}, 4001 #'AuditResult'{terminationID = TID2, 4002 terminationAuditResult = TAR2}) -> 4003 d("chk_AuditResult -> entry (2)"), 4004 validate(fun() -> chk_TerminationID(TID1, TID2) end, 'AuditResult'), 4005 validate(fun() -> chk_TerminationAudit(TAR1, TAR2) end, 'AuditResult'), 4006 ok; 4007chk_AuditResult(AR1, AR2) -> 4008 d("chk_AuditResult -> entry (3)"), 4009 wrong_type('AuditResult', AR1, AR2). 4010 4011 4012%% -- TermListAuditResult -- 4013 4014is_TermListAuditResult(#'TermListAuditResult'{terminationIDList = TIDs, 4015 terminationAuditResult = TAR}) -> 4016 is_TerminationIDList(TIDs) andalso is_TerminationAudit(TAR); 4017is_TermListAuditResult(_) -> 4018 false. 4019 4020chk_TermListAuditResult(TLAR, TLAR) -> 4021 d("chk_TermListAuditResult(1) -> entry with" 4022 "~n TLAR: ~p", [TLAR]), 4023 chk_type(fun is_TermListAuditResult/1, 'TermListAuditResult', TLAR); 4024chk_TermListAuditResult( 4025 #'TermListAuditResult'{terminationIDList = TIDs1, 4026 terminationAuditResult = TAR1}, 4027 #'TermListAuditResult'{terminationIDList = TIDs2, 4028 terminationAuditResult = TAR2}) -> 4029 d("chk_TermListAuditResult(2) -> entry with" 4030 "~n TIDs1: ~p" 4031 "~n TAR1: ~p" 4032 "~n TIDs2: ~p" 4033 "~n TAR2: ~p", [TIDs1, TAR1, TIDs2, TAR2]), 4034 validate(fun() -> chk_TerminationIDList(TIDs1, TIDs2) end, 4035 'TermListAuditResult_terminationIDList'), 4036 validate(fun() -> chk_TerminationAudit(TAR1, TAR2) end, 4037 'TermListAuditResult_terminationAuditResult'), 4038 ok; 4039chk_TermListAuditResult(TLAR1, TLAR2) -> 4040 d("chk_TermListAuditResult(3) -> entry with" 4041 "~n TLAR1: ~p" 4042 "~n TLAR2: ~p", [TLAR1, TLAR2]), 4043 wrong_type('TermListAuditResult', TLAR1, TLAR2). 4044 4045 4046%% -- TerminationAudit -- 4047 4048is_opt_TerminationAudit(TA) -> 4049 is_OPTIONAL(fun is_TerminationAudit/1, TA). 4050 4051is_TerminationAudit([]) -> 4052 true; 4053is_TerminationAudit([H|T]) -> 4054 is_AuditReturnParameter(H) andalso is_TerminationAudit(T); 4055is_TerminationAudit(_) -> 4056 false. 4057 4058chk_opt_TerminationAudit(TA1, TA2) -> 4059 d("chk_opt_TerminationAudit -> entry with" 4060 "~n TA1: ~p" 4061 "~n TA2: ~p", [TA1, TA2]), 4062 chk_OPTIONAL('TerminationAudit', 4063 strip_TerminationAudit(TA1), 4064 strip_TerminationAudit(TA2), 4065 fun is_TerminationAudit/1, fun chk_TerminationAudit/2). 4066 4067strip_TerminationAudit(L) when is_list(L) -> 4068 d("strip_TerminationAudit(1) -> entry with" 4069 "~n L: ~p", [L]), 4070 %% Drop all empty emptyDescriptor's 4071 F = fun({emptyDescriptors, AD}) -> 4072 case AD of 4073 #'AuditDescriptor'{auditToken = asn1_NOVALUE, 4074 auditPropertyToken = asn1_NOVALUE} -> 4075 true; 4076 _ -> 4077 false 4078 end; 4079 (_) -> 4080 false 4081 end, 4082 lists:dropwhile(F, L); 4083strip_TerminationAudit(asn1_NOVALUE) -> 4084 d("strip_TerminationAudit(2) -> entry"), 4085 []; 4086strip_TerminationAudit(X) -> 4087 d("strip_TerminationAudit(3) -> entry with" 4088 "~n X: ~p", [X]), 4089 X. 4090 4091chk_TerminationAudit(TA1, TA2) -> 4092 d("chk_TerminationAudit -> entry with" 4093 "~n TA1: ~p" 4094 "~n TA2: ~p", [TA1, TA2]), 4095 do_chk_TerminationAudit(strip_TerminationAudit(TA1), 4096 strip_TerminationAudit(TA2)). 4097 4098do_chk_TerminationAudit([], []) -> 4099 d("do_chk_TerminationAudit(1) -> entry"), 4100 ok; 4101do_chk_TerminationAudit([], asn1_NOVALUE) -> 4102 d("do_chk_TerminationAudit(2) -> entry"), 4103 ok; 4104do_chk_TerminationAudit(asn1_NOVALUE, []) -> 4105 d("do_chk_TerminationAudit(3) -> entry"), 4106 ok; 4107do_chk_TerminationAudit([] = TA1, TA2) -> 4108 d("do_chk_TerminationAudit(4) -> entry with" 4109 "~n TA2: ~p", [TA2]), 4110 not_equal('TerminationAudit', TA1, TA2); 4111do_chk_TerminationAudit(TA1, [] = TA2) -> 4112 d("do_chk_TerminationAudit(5) -> entry with" 4113 "~n TA1: ~p", [TA1]), 4114 not_equal('TerminationAudit', TA1, TA2); 4115do_chk_TerminationAudit([H|T1], [H|T2]) -> 4116 d("do_chk_TerminationAudit(6) -> entry with" 4117 "~n H: ~p", [H]), 4118 case is_AuditReturnParameter(H) of 4119 true -> 4120 do_chk_TerminationAudit(T1, T2); 4121 false -> 4122 wrong_type('TerminationAudit', H) 4123 end; 4124do_chk_TerminationAudit([H1|T1], [H2|T2]) -> 4125 d("do_chk_TerminationAudit(7) -> entry with" 4126 "~n H1: ~p" 4127 "~n H2: ~p", [H1, H2]), 4128 chk_AuditReturnParameter(H1, H2), 4129 do_chk_TerminationAudit(T1, T2); 4130do_chk_TerminationAudit(TA1, TA2) -> 4131 d("do_chk_TerminationAudit(8) -> entry with" 4132 "~n TA1: ~p" 4133 "~n TA2: ~p", [TA1, TA2]), 4134 not_equal('TerminationAudit', TA1, TA2). 4135 4136 4137%% -- AuditReturnParameter -- 4138 4139is_AuditReturnParameter({Tag, Val}) -> 4140 is_AuditReturnParameter_tag(Tag) andalso 4141 is_AuditReturnParameter_val(Tag, Val); 4142is_AuditReturnParameter(_) -> 4143 false. 4144 4145is_AuditReturnParameter_tag(Tag) -> 4146 Tags = [errorDescriptor, 4147 mediaDescriptor, 4148 modemDescriptor, 4149 muxDescriptor, 4150 eventsDescriptor, 4151 eventBufferDescriptor, 4152 signalsDescriptor, 4153 digitMapDescriptor, 4154 observedEventsDescriptor, 4155 statisticsDescriptor, 4156 packagesDescriptor, 4157 emptyDescriptors], 4158 lists:member(Tag, Tags). 4159 4160is_AuditReturnParameter_val(errorDescriptor, V) -> 4161 is_ErrorDescriptor(V); 4162is_AuditReturnParameter_val(mediaDescriptor, V) -> 4163 is_MediaDescriptor(V); 4164is_AuditReturnParameter_val(modemDescriptor, V) -> 4165 is_ModemDescriptor(V); 4166is_AuditReturnParameter_val(muxDescriptor, V) -> 4167 is_MuxDescriptor(V); 4168is_AuditReturnParameter_val(eventsDescriptor, V) -> 4169 is_EventsDescriptor(V); 4170is_AuditReturnParameter_val(eventBufferDescriptor, V) -> 4171 is_EventBufferDescriptor(V); 4172is_AuditReturnParameter_val(signalsDescriptor, V) -> 4173 is_SignalsDescriptor(V); 4174is_AuditReturnParameter_val(digitMapDescriptor, V) -> 4175 is_DigitMapDescriptor(V); 4176is_AuditReturnParameter_val(observedEventsDescriptor, V) -> 4177 is_ObservedEventsDescriptor(V); 4178is_AuditReturnParameter_val(statisticsDescriptor, V) -> 4179 is_StatisticsDescriptor(V); 4180is_AuditReturnParameter_val(packagesDescriptor, V) -> 4181 is_PackagesDescriptor(V); 4182is_AuditReturnParameter_val(emptyDescriptors, V) -> 4183 is_AuditDescriptor(V). 4184 4185chk_AuditReturnParameter(ARP, ARP) -> 4186 chk_type(fun is_AuditReturnParameter/1, 'AuditReturnParameter', ARP); 4187chk_AuditReturnParameter({Tag, Val1} = ARP1, {Tag, Val2} = ARP2) -> 4188 case (is_AuditReturnParameter_tag(Tag) andalso 4189 is_AuditReturnParameter_val(Tag, Val1) andalso 4190 is_AuditReturnParameter_val(Tag, Val2)) of 4191 true -> 4192 chk_AuditReturnParameter_val(Tag, Val1, Val2); 4193 false -> 4194 wrong_type('AuditReturnParameter', ARP1, ARP2) 4195 end; 4196chk_AuditReturnParameter({Tag1, Val1} = ARP1, {Tag2, Val2} = ARP2) -> 4197 case ((is_AuditReturnParameter_tag(Tag1) andalso 4198 is_AuditReturnParameter_val(Tag1, Val1)) andalso 4199 (is_AuditReturnParameter_tag(Tag2) andalso 4200 is_AuditReturnParameter_val(Tag2, Val2))) of 4201 true -> 4202 not_equal('AuditReturnParameter', ARP1, ARP2); 4203 false -> 4204 wrong_type('AuditReturnParameter', ARP1, ARP2) 4205 end; 4206chk_AuditReturnParameter(ARP1, ARP2) -> 4207 wrong_type('AuditReturnParameter', ARP1, ARP2). 4208 4209chk_AuditReturnParameter_val(errorDescriptor, V1, V2) -> 4210 validate(fun() -> chk_ErrorDescriptor(V1, V2) end, 4211 'AuditReturnParameter'); 4212chk_AuditReturnParameter_val(mediaDescriptor, V1, V2) -> 4213 validate(fun() -> chk_MediaDescriptor(V1, V2) end, 4214 'AuditReturnParameter'); 4215chk_AuditReturnParameter_val(modemDescriptor, V1, V2) -> 4216 validate(fun() -> chk_ModemDescriptor(V1, V2) end, 4217 'AuditReturnParameter'); 4218chk_AuditReturnParameter_val(muxDescriptor, V1, V2) -> 4219 validate(fun() -> chk_MuxDescriptor(V1, V2) end, 4220 'AuditReturnParameter'); 4221chk_AuditReturnParameter_val(eventsDescriptor, V1, V2) -> 4222 validate(fun() -> chk_EventsDescriptor(V1, V2) end, 4223 'AuditReturnParameter'); 4224chk_AuditReturnParameter_val(eventBufferDescriptor, V1, V2) -> 4225 validate(fun() -> chk_EventBufferDescriptor(V1, V2) end, 4226 'AuditReturnParameter'); 4227chk_AuditReturnParameter_val(signalsDescriptor, V1, V2) -> 4228 validate(fun() -> chk_SignalsDescriptor(V1, V2) end, 4229 'AuditReturnParameter'); 4230chk_AuditReturnParameter_val(digitMapDescriptor, V1, V2) -> 4231 validate(fun() -> chk_DigitMapDescriptor(V1, V2) end, 4232 'AuditReturnParameter'); 4233chk_AuditReturnParameter_val(observedEventsDescriptor, V1, V2) -> 4234 validate(fun() -> chk_ObservedEventsDescriptor(V1, V2) end, 4235 'AuditReturnParameter'); 4236chk_AuditReturnParameter_val(statisticsDescriptor, V1, V2) -> 4237 validate(fun() -> chk_StatisticsDescriptor(V1, V2) end, 4238 'AuditReturnParameter'); 4239chk_AuditReturnParameter_val(packagesDescriptor, V1, V2) -> 4240 validate(fun() -> chk_PackagesDescriptor(V1, V2) end, 4241 'AuditReturnParameter'); 4242chk_AuditReturnParameter_val(emptyDescriptors, V1, V2) -> 4243 validate(fun() -> chk_AuditDescriptor(V1, V2) end, 4244 'AuditReturnParameter'). 4245 4246 4247%% -- AuditDescriptor -- 4248 4249is_opt_AuditDescriptor(asn1_NOVALUE) -> 4250 true; 4251is_opt_AuditDescriptor(V) -> 4252 is_AuditDescriptor(V). 4253 4254is_AuditDescriptor(#'AuditDescriptor'{auditToken = AT, 4255 auditPropertyToken = APT}) -> 4256 d("is_AuditDescriptor -> entry with" 4257 "~n AT: ~p" 4258 "~n APT: ~p", [AT, APT]), 4259 is_AuditDescriptor_auditToken(AT) andalso 4260 is_AuditDescriptor_auditPropertyToken(APT); 4261is_AuditDescriptor(_) -> 4262 false. 4263 4264is_AuditDescriptor_auditToken(asn1_NOVALUE) -> 4265 true; 4266is_AuditDescriptor_auditToken([]) -> 4267 true; 4268is_AuditDescriptor_auditToken([H|T]) -> 4269 is_AuditDescriptor_auditToken_val(H) andalso 4270 is_AuditDescriptor_auditToken(T); 4271is_AuditDescriptor_auditToken(_) -> 4272 false. 4273 4274is_AuditDescriptor_auditToken_val(V) -> 4275 Toks = [muxToken, modemToken, mediaToken, eventsToken, signalsToken, 4276 digitMapToken, statsToken, observedEventsToken, 4277 packagesToken, eventBufferToken], 4278 lists:member(V, Toks). 4279 4280is_AuditDescriptor_auditPropertyToken(asn1_NOVALUE) -> 4281 true; 4282is_AuditDescriptor_auditPropertyToken([]) -> 4283 true; 4284is_AuditDescriptor_auditPropertyToken([H|T]) -> 4285 d("is_AuditDescriptor_auditPropertyToken -> entry with" 4286 "~n H: ~p", [H]), 4287 is_IndAuditParameter(H) andalso is_AuditDescriptor_auditPropertyToken(T); 4288is_AuditDescriptor_auditPropertyToken(_) -> 4289 false. 4290 4291chk_opt_AuditDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 4292 ok; 4293chk_opt_AuditDescriptor(AD1, AD2) -> 4294 chk_AuditDescriptor(AD1, AD2). 4295 4296chk_AuditDescriptor(AD, AD) -> 4297 chk_type(fun is_AuditDescriptor/1, 'AuditDescriptor', AD); 4298chk_AuditDescriptor(#'AuditDescriptor'{auditToken = AT1, 4299 auditPropertyToken = APT1}, 4300 #'AuditDescriptor'{auditToken = AT2, 4301 auditPropertyToken = APT2}) -> 4302 chk_AuditDescriptor_auditToken(maybe_sort(AT1), maybe_sort(AT2)), 4303 chk_AuditDescriptor_auditPropertyToken(APT1, APT2), 4304 ok; 4305chk_AuditDescriptor(AD1, AD2) -> 4306 wrong_type('AuditDescriptor', AD1, AD2). 4307 4308chk_AuditDescriptor_auditToken(asn1_NOVALUE, asn1_NOVALUE) -> 4309 ok; 4310chk_AuditDescriptor_auditToken([], []) -> 4311 ok; 4312chk_AuditDescriptor_auditToken([] = AT1, AT2) -> 4313 not_equal('AuditDescriptor_auditToken', AT1, AT2); 4314chk_AuditDescriptor_auditToken(AT1, [] = AT2) -> 4315 not_equal('AuditDescriptor_auditToken', AT1, AT2); 4316chk_AuditDescriptor_auditToken([H|T1], [H|T2]) -> 4317 case is_AuditDescriptor_auditToken_val(H) of 4318 true -> 4319 chk_AuditDescriptor_auditToken(T1, T2); 4320 false -> 4321 wrong_type('AuditDescriptor_auditToken_val', H) 4322 end; 4323chk_AuditDescriptor_auditToken([H1|_T1], [H2|_T2]) -> 4324 case (is_AuditDescriptor_auditToken_val(H1) andalso 4325 is_AuditDescriptor_auditToken_val(H2)) of 4326 true -> 4327 not_equal('AuditDescriptor_auditToken_val', H1, H2); 4328 false -> 4329 wrong_type('AuditDescriptor_auditToken_val', H1, H2) 4330 end; 4331chk_AuditDescriptor_auditToken(AT1, AT2) -> 4332 wrong_type('AuditDescriptor_auditToken', AT1, AT2). 4333 4334chk_AuditDescriptor_auditPropertyToken(asn1_NOVALUE, asn1_NOVALUE) -> 4335 ok; 4336chk_AuditDescriptor_auditPropertyToken([], []) -> 4337 ok; 4338chk_AuditDescriptor_auditPropertyToken([] = AT1, AT2) -> 4339 not_equal('AuditDescriptor_auditPropertyToken', AT1, AT2); 4340chk_AuditDescriptor_auditPropertyToken(AT1, [] = AT2) -> 4341 not_equal('AuditDescriptor_auditPropertyToken', AT1, AT2); 4342chk_AuditDescriptor_auditPropertyToken([H|T1], [H|T2]) -> 4343 case is_IndAuditParameter(H) of 4344 true -> 4345 chk_AuditDescriptor_auditPropertyToken(T1, T2); 4346 false -> 4347 wrong_type('AuditDescriptor_auditPropertyToken_val', H) 4348 end; 4349chk_AuditDescriptor_auditPropertyToken([H1|_], [H2|_]) -> 4350 chk_IndAuditParameter(H1, H2), 4351 not_equal('AuditDescriptor_auditPropertyToken_val', H1, H2); 4352chk_AuditDescriptor_auditPropertyToken(AT1, AT2) -> 4353 wrong_type('AuditDescriptor_auditPropertyToken', AT1, AT2). 4354 4355 4356%% -- IndAuditParameter -- 4357 4358is_IndAuditParameter({Tag, Val}) -> 4359 is_IndAuditParameter_tag(Tag) andalso is_IndAuditParameter_val(Tag, Val); 4360is_IndAuditParameter(_) -> 4361 false. 4362 4363is_IndAuditParameter_tag(Tag) -> 4364 Tags = [indAudMediaDescriptor, 4365 indAudEventsDescriptor, 4366 indAudEventBufferDescriptor, 4367 indAudSignalsDescriptor, 4368 indAudDigitMapDescriptor, 4369 indAudStatisticsDescriptor, 4370 indAudPackagesDescriptor], 4371 lists:member(Tag, Tags). 4372 4373is_IndAuditParameter_val(indAudMediaDescriptor, Val) -> 4374 is_IndAudMediaDescriptor(Val); 4375is_IndAuditParameter_val(indAudEventsDescriptor, Val) -> 4376 is_IndAudEventsDescriptor(Val); 4377is_IndAuditParameter_val(indAudEventBufferDescriptor, Val) -> 4378 is_IndAudEventBufferDescriptor(Val); 4379is_IndAuditParameter_val(indAudSignalsDescriptor, Val) -> 4380 is_IndAudSignalsDescriptor(Val); 4381is_IndAuditParameter_val(indAudDigitMapDescriptor, Val) -> 4382 is_IndAudDigitMapDescriptor(Val); 4383is_IndAuditParameter_val(indAudStatisticsDescriptor, Val) -> 4384 is_IndAudStatisticsDescriptor(Val); 4385is_IndAuditParameter_val(indAudPackagesDescriptor, Val) -> 4386 is_IndAudPackagesDescriptor(Val). 4387 4388chk_IndAuditParameter(IAP, IAP) -> 4389 chk_type(fun is_IndAuditParameter/1, 'IndAuditParameter', IAP); 4390chk_IndAuditParameter({Tag, Val1} = IAP1, {Tag, Val2} = IAP2) -> 4391 case (is_IndAuditParameter_tag(Tag) andalso 4392 is_IndAuditParameter_val(Tag, Val1) andalso 4393 is_IndAuditParameter_val(Tag, Val2)) of 4394 true -> 4395 chk_IndAuditParameter_val(Tag, Val1, Val2); 4396 false -> 4397 wrong_type('IndAuditParameter', IAP1, IAP2) 4398 end; 4399chk_IndAuditParameter({Tag1, Val1} = IAP1, {Tag2, Val2} = IAP2) -> 4400 case ((is_IndAuditParameter_tag(Tag1) andalso 4401 is_IndAuditParameter_val(Tag1, Val1)) andalso 4402 (is_IndAuditParameter_tag(Tag2) andalso 4403 is_IndAuditParameter_val(Tag2, Val2))) of 4404 true -> 4405 not_equal('IndAuditParameter', IAP1, IAP2); 4406 false -> 4407 wrong_type('IndAuditParameter', IAP1, IAP2) 4408 end; 4409chk_IndAuditParameter(IAP1, IAP2) -> 4410 wrong_type('IndAuditParameter', IAP1, IAP2). 4411 4412chk_IndAuditParameter_val(indAudMediaDescriptor, Val1, Val2) -> 4413 validate(fun() -> chk_IndAudMediaDescriptor(Val1, Val2) end, 4414 'IndAuditParameter'); 4415chk_IndAuditParameter_val(indAudEventsDescriptor, Val1, Val2) -> 4416 validate(fun() -> chk_IndAudEventsDescriptor(Val1, Val2) end, 4417 'IndAuditParameter'); 4418chk_IndAuditParameter_val(indAudEventBufferDescriptor, Val1, Val2) -> 4419 validate(fun() -> chk_IndAudEventBufferDescriptor(Val1, Val2) end, 4420 'IndAuditParameter'); 4421chk_IndAuditParameter_val(indAudSignalsDescriptor, Val1, Val2) -> 4422 validate(fun() -> chk_IndAudSignalsDescriptor(Val1, Val2) end, 4423 'IndAuditParameter'); 4424chk_IndAuditParameter_val(indAudDigitMapDescriptor, Val1, Val2) -> 4425 validate(fun() -> chk_IndAudDigitMapDescriptor(Val1, Val2) end, 4426 'IndAuditParameter'); 4427chk_IndAuditParameter_val(indAudStatisticsDescriptor, Val1, Val2) -> 4428 validate(fun() -> chk_IndAudStatisticsDescriptor(Val1, Val2) end, 4429 'IndAuditParameter'); 4430chk_IndAuditParameter_val(indAudPackagesDescriptor, Val1, Val2) -> 4431 validate(fun() -> chk_IndAudPackagesDescriptor(Val1, Val2) end, 4432 'IndAuditParameter'). 4433 4434 4435%% -- IndAudMediaDescriptor -- 4436 4437is_IndAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD, 4438 streams = S}) -> 4439 d("is_IndAudMediaDescriptor -> entry with" 4440 "~n TSD: ~p" 4441 "~n S: ~p", [TSD, S]), 4442 is_opt_IndAudTerminationStateDescriptor(TSD) andalso 4443 is_IndAudMediaDescriptor_streams(S); 4444is_IndAudMediaDescriptor(_) -> 4445 false. 4446 4447is_IndAudMediaDescriptor_streams(asn1_NOVALUE) -> 4448 true; 4449is_IndAudMediaDescriptor_streams({Tag, Val}) -> 4450 d("is_IndAudMediaDescriptor_streams -> entry with" 4451 "~n Tag: ~p" 4452 "~n Val: ~p", [Tag, Val]), 4453 is_IndAudMediaDescriptor_streams_tag(Tag) andalso 4454 is_IndAudMediaDescriptor_streams_val(Tag, Val); 4455is_IndAudMediaDescriptor_streams(_) -> 4456 false. 4457 4458is_IndAudMediaDescriptor_streams_tag(Tag) -> 4459 Tags = [oneStream, multiStream], 4460 lists:member(Tag, Tags). 4461 4462is_IndAudMediaDescriptor_streams_val(oneStream, Val) -> 4463 d("is_IndAudMediaDescriptor_streams_val(oneStream) -> entry with" 4464 "~n Val: ~p", [Val]), 4465 is_IndAudStreamParms(Val); 4466is_IndAudMediaDescriptor_streams_val(multiStream, Val) -> 4467 d("is_IndAudMediaDescriptor_streams_val(multiStream) -> entry with" 4468 "~n Val: ~p", [Val]), 4469 is_IndAudMediaDescriptor_multiStream(Val). 4470 4471is_IndAudMediaDescriptor_multiStream([]) -> 4472 true; 4473is_IndAudMediaDescriptor_multiStream([H|T]) -> 4474 d("is_IndAudMediaDescriptor_multiStream -> entry with" 4475 "~n H: ~p", [H]), 4476 is_IndAudStreamDescriptor(H) andalso 4477 is_IndAudMediaDescriptor_multiStream(T); 4478is_IndAudMediaDescriptor_multiStream(_) -> 4479 false. 4480 4481chk_IndAudMediaDescriptor(IAMD, IAMD) -> 4482 chk_type(fun is_IndAudMediaDescriptor/1, 'IndAudMediaDescriptor', IAMD); 4483chk_IndAudMediaDescriptor(#'IndAudMediaDescriptor'{termStateDescr = TSD1, 4484 streams = S1}, 4485 #'IndAudMediaDescriptor'{termStateDescr = TSD2, 4486 streams = S2}) -> 4487 validate(fun() -> chk_opt_IndAudTerminationStateDescriptor(TSD1, TSD2) end, 4488 'IndAudMediaDescriptor'), 4489 validate(fun() -> chk_IndAudMediaDescriptor_streams(S1, S2) end, 4490 'IndAudMediaDescriptor'), 4491 ok; 4492chk_IndAudMediaDescriptor(IAMD1, IAMD2) -> 4493 wrong_type('IndAudMediaDescriptor', IAMD1, IAMD2). 4494 4495chk_IndAudMediaDescriptor_streams(asn1_NOVALUE, asn1_NOVALUE) -> 4496 ok; 4497chk_IndAudMediaDescriptor_streams({Tag, Val1} = S1, 4498 {Tag, Val2} = S2) -> 4499 case (is_IndAudMediaDescriptor_streams_tag(Tag) andalso 4500 is_IndAudMediaDescriptor_streams_val(Tag, Val1) andalso 4501 is_IndAudMediaDescriptor_streams_val(Tag, Val2)) of 4502 true -> 4503 chk_IndAudMediaDescriptor_streams_val(Tag, Val1, Val2); 4504 false -> 4505 wrong_type('IndAudMediaDescriptor_streams', S1, S2) 4506 end; 4507chk_IndAudMediaDescriptor_streams({Tag1, Val1} = S1, 4508 {Tag2, Val2} = S2) -> 4509 case ((is_IndAudMediaDescriptor_streams_tag(Tag1) andalso 4510 is_IndAudMediaDescriptor_streams_val(Tag1, Val1)) andalso 4511 (is_IndAudMediaDescriptor_streams_tag(Tag2) andalso 4512 is_IndAudMediaDescriptor_streams_val(Tag2, Val2))) of 4513 true -> 4514 not_equal('IndAudMediaDescriptor_streams', S1, S2); 4515 false -> 4516 wrong_type('IndAudMediaDescriptor_streams', S1, S2) 4517 end; 4518chk_IndAudMediaDescriptor_streams(S1, S2) -> 4519 wrong_type('IndAudMediaDescriptor_streams', S1, S2). 4520 4521chk_IndAudMediaDescriptor_streams_val(oneStream, Val1, Val2) -> 4522 validate(fun() -> chk_IndAudStreamParms(Val1, Val2) end, 4523 'IndAudMediaDescriptor_streams'); 4524chk_IndAudMediaDescriptor_streams_val(multiStream, Val1, Val2) -> 4525 validate(fun() -> chk_IndAudMediaDescriptor_multiStream(Val1, Val2) end, 4526 'IndAudMediaDescriptor_streams'). 4527 4528chk_IndAudMediaDescriptor_multiStream([], []) -> 4529 ok; 4530chk_IndAudMediaDescriptor_multiStream([] = MS1, MS2) -> 4531 not_equal('IndAudMediaDescriptor_multiStream', MS1, MS2); 4532chk_IndAudMediaDescriptor_multiStream(MS1, [] = MS2) -> 4533 not_equal('IndAudMediaDescriptor_multiStream', MS1, MS2); 4534chk_IndAudMediaDescriptor_multiStream([H|T1], [H|T2]) -> 4535 case is_IndAudStreamDescriptor(H) of 4536 true -> 4537 chk_IndAudMediaDescriptor_multiStream(T1, T2); 4538 false -> 4539 wrong_type('IndAudMediaDescriptor_multiStream_val', H) 4540 end; 4541chk_IndAudMediaDescriptor_multiStream([H1|T1], [H2|T2]) -> 4542 validate(fun() -> chk_IndAudStreamDescriptor(H1, H2) end, 4543 'IndAudMediaDescriptor_multiStream_val'), 4544 chk_IndAudMediaDescriptor_multiStream(T1, T2); 4545chk_IndAudMediaDescriptor_multiStream(MS1, MS2) -> 4546 wrong_type('IndAudMediaDescriptor_multiStream', MS1, MS2). 4547 4548 4549%% -- IndAudStreamDescriptor -- 4550 4551is_IndAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = SID, 4552 streamParms = Parms}) -> 4553 d("is_IndAudStreamDescriptor -> entry with" 4554 "~n SID: ~p" 4555 "~n Parms: ~p", [SID, Parms]), 4556 is_StreamID(SID) andalso is_IndAudStreamParms(Parms); 4557is_IndAudStreamDescriptor(_) -> 4558 false. 4559 4560chk_IndAudStreamDescriptor(D, D) -> 4561 chk_type(fun is_IndAudStreamDescriptor/1, 'IndAudStreamDescriptor', D); 4562chk_IndAudStreamDescriptor(#'IndAudStreamDescriptor'{streamID = SID1, 4563 streamParms = Parms1}, 4564 #'IndAudStreamDescriptor'{streamID = SID2, 4565 streamParms = Parms2}) -> 4566 validate(fun() -> chk_StreamID(SID1, SID2) end, 'IndAudStreamDescriptor'), 4567 validate(fun() -> chk_IndAudStreamParms(Parms1, Parms2) end, 4568 'IndAudStreamDescriptor'), 4569 ok; 4570chk_IndAudStreamDescriptor(D1, D2) -> 4571 wrong_type('IndAudStreamDescriptor', D1, D2). 4572 4573 4574%% -- IndAudStreamParms -- 4575 4576is_IndAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD, 4577 localDescriptor = LD, 4578 remoteDescriptor = RD}) -> 4579 d("is_IndAudStreamParms -> entry with" 4580 "~n LCD: ~p" 4581 "~n LD: ~p" 4582 "~n RD: ~p", [LCD, LD, RD]), 4583 is_opt_IndAudLocalControlDescriptor(LCD) andalso 4584 is_opt_IndAudLocalRemoteDescriptor(LD) andalso 4585 is_opt_IndAudLocalRemoteDescriptor(RD); 4586is_IndAudStreamParms(_) -> 4587 false. 4588 4589chk_IndAudStreamParms(#'IndAudStreamParms'{localControlDescriptor = LCD1, 4590 localDescriptor = LD1, 4591 remoteDescriptor = RD1}, 4592 #'IndAudStreamParms'{localControlDescriptor = LCD2, 4593 localDescriptor = LD2, 4594 remoteDescriptor = RD2}) -> 4595 validate(fun() -> chk_opt_IndAudLocalControlDescriptor(LCD1, LCD2) end, 4596 'IndAudStreamParms'), 4597 validate(fun() -> chk_opt_IndAudLocalRemoteDescriptor(LD1, LD2) end, 4598 'IndAudStreamParms'), 4599 validate(fun() -> chk_opt_IndAudLocalRemoteDescriptor(RD1, RD2) end, 4600 'IndAudStreamParms'), 4601 ok; 4602chk_IndAudStreamParms(D1, D2) -> 4603 wrong_type('IndAudStreamParms', D1, D2). 4604 4605 4606%% -- IndAudLocalControlDescriptor -- 4607 4608is_opt_IndAudLocalControlDescriptor(asn1_NOVALUE) -> 4609 true; 4610is_opt_IndAudLocalControlDescriptor(D) -> 4611 is_IndAudLocalControlDescriptor(D). 4612 4613is_IndAudLocalControlDescriptor( 4614 #'IndAudLocalControlDescriptor'{streamMode = SM, 4615 reserveValue = RV, 4616 reserveGroup = RG, 4617 propertyParms = PPs, 4618 streamModeSel = SMS}) -> 4619 d("is_IndAudLocalControlDescriptor -> entry with" 4620 "~n SM: ~p" 4621 "~n RV: ~p" 4622 "~n RG: ~p" 4623 "~n PPs: ~p" 4624 "~n SMS: ~p", [SM, RV, RG, PPs, SMS]), 4625 is_opt_NULL(SM) andalso 4626 is_opt_NULL(RV) andalso 4627 is_opt_NULL(RG) andalso 4628 is_IndAudLocalControlDescriptor_propertyParms(PPs) andalso 4629 is_opt_StreamMode(SMS); 4630is_IndAudLocalControlDescriptor(_) -> 4631 false. 4632 4633is_IndAudLocalControlDescriptor_propertyParms(asn1_NOVALUE) -> 4634 true; 4635is_IndAudLocalControlDescriptor_propertyParms([]) -> 4636 true; 4637is_IndAudLocalControlDescriptor_propertyParms([H|T]) -> 4638 is_IndAudPropertyParm(H) andalso 4639 is_IndAudLocalControlDescriptor_propertyParms(T); 4640is_IndAudLocalControlDescriptor_propertyParms(_) -> 4641 false. 4642 4643chk_opt_IndAudLocalControlDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 4644 ok; 4645chk_opt_IndAudLocalControlDescriptor( 4646 #'IndAudLocalControlDescriptor'{streamMode = SM1, 4647 reserveValue = RV1, 4648 reserveGroup = RG1, 4649 propertyParms = PPs1, 4650 streamModeSel = SMS1}, 4651 #'IndAudLocalControlDescriptor'{streamMode = SM2, 4652 reserveValue = RV2, 4653 reserveGroup = RG2, 4654 propertyParms = PPs2, 4655 streamModeSel = SMS2}) -> 4656 chk_IndAudLocalControlDescriptor_streamMode(SM1, SM2), 4657 chk_IndAudLocalControlDescriptor_reserveValue(RV1, RV2), 4658 chk_IndAudLocalControlDescriptor_reserveGroup(RG1, RG2), 4659 chk_IndAudLocalControlDescriptor_propertyParms(PPs1, PPs2), 4660 chk_IndAudLocalControlDescriptor_streamModeSel(SMS1, SMS2), 4661 ok; 4662chk_opt_IndAudLocalControlDescriptor(D1, D2) -> 4663 wrong_type('IndAudLocalControlDescriptor', D1, D2). 4664 4665chk_IndAudLocalControlDescriptor_streamMode(SM1, SM2) -> 4666 validate(fun() -> chk_opt_NULL(SM1, SM2) end, 4667 'IndAudLocalControlDescriptor_streamMode'). 4668 4669chk_IndAudLocalControlDescriptor_reserveValue(RV1, RV2) -> 4670 validate(fun() -> chk_opt_NULL(RV1, RV2) end, 4671 'IndAudLocalControlDescriptor_reserveValue'). 4672 4673chk_IndAudLocalControlDescriptor_reserveGroup(RG1, RG2) -> 4674 validate(fun() -> chk_opt_NULL(RG1, RG2) end, 4675 'IndAudLocalControlDescriptor_reserveGroup'). 4676 4677chk_IndAudLocalControlDescriptor_propertyParms(asn1_NOVALUE, asn1_NOVALUE) -> 4678 ok; 4679chk_IndAudLocalControlDescriptor_propertyParms([], []) -> 4680 ok; 4681chk_IndAudLocalControlDescriptor_propertyParms([] = PPs1, PPs2) -> 4682 not_equal('IndAudLocalControlDescriptor_propertyParms', PPs1, PPs2); 4683chk_IndAudLocalControlDescriptor_propertyParms(PPs1, [] = PPs2) -> 4684 not_equal('IndAudLocalControlDescriptor_propertyParms', PPs1, PPs2); 4685chk_IndAudLocalControlDescriptor_propertyParms([H|T1], [H|T2]) -> 4686 case is_IndAudPropertyParm(H) of 4687 true -> 4688 chk_IndAudLocalControlDescriptor_propertyParms(T1, T2); 4689 false -> 4690 wrong_type('IndAudLocalControlDescriptor_propertyParms_val', H) 4691 end; 4692chk_IndAudLocalControlDescriptor_propertyParms([H1|T1], [H2|T2]) -> 4693 validate(fun() -> chk_IndAudPropertyParm(H1, H2) end, 4694 'IndAudLocalControlDescriptor_propertyParms_val'), 4695 chk_IndAudLocalControlDescriptor_propertyParms(T1, T2); 4696chk_IndAudLocalControlDescriptor_propertyParms(PPs1, PPs2) -> 4697 wrong_type('IndAudLocalControlDescriptor_propertyParms', PPs1, PPs2). 4698 4699chk_IndAudLocalControlDescriptor_streamModeSel(SMS1, SMS2) -> 4700 validate(fun() -> chk_opt_StreamMode(SMS1, SMS2) end, 4701 'IndAudLocalControlDescriptor_streamModeSel'). 4702 4703 4704%% -- IndAudPropertyParm -- 4705 4706is_IndAudPropertyParm(#'IndAudPropertyParm'{name = Name, 4707 propertyParms = PP}) -> 4708 d("is_IndAudPropertyParm -> entry"), 4709 is_PkgdName(Name) andalso is_opt_PropertyParm(PP); 4710is_IndAudPropertyParm(_) -> 4711 false. 4712 4713chk_IndAudPropertyParm(#'IndAudPropertyParm'{name = Name1, 4714 propertyParms = PP1}, 4715 #'IndAudPropertyParm'{name = Name2, 4716 propertyParms = PP2}) -> 4717 validate(fun() -> chk_PkgdName(Name1, Name2) end, 'IndAudPropertyParm'), 4718 validate(fun() -> chk_opt_PropertyParm(PP1, PP2) end, 4719 'IndAudPropertyParm'), 4720 ok; 4721chk_IndAudPropertyParm(P1, P2) -> 4722 wrong_type('IndAudPropertyParm', P1, P2). 4723 4724 4725%% -- IndAudLocalRemoteDescriptor -- 4726 4727is_opt_IndAudLocalRemoteDescriptor(asn1_NOVALUE) -> 4728 true; 4729is_opt_IndAudLocalRemoteDescriptor(D) -> 4730 is_IndAudLocalRemoteDescriptor(D). 4731 4732is_IndAudLocalRemoteDescriptor( 4733 #'IndAudLocalRemoteDescriptor'{propGroupID = ID, 4734 propGrps = Grps}) -> 4735 is_IndAudLocalRemoteDescriptor_propGroupID(ID) andalso 4736 is_IndAudPropertyGroup(Grps); 4737is_IndAudLocalRemoteDescriptor(_) -> 4738 false. 4739 4740is_IndAudLocalRemoteDescriptor_propGroupID(asn1_NOVALUE) -> 4741 true; 4742is_IndAudLocalRemoteDescriptor_propGroupID(V) -> 4743 is_INTEGER(V, {range, 0, 65535}). 4744 4745chk_opt_IndAudLocalRemoteDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 4746 ok; 4747chk_opt_IndAudLocalRemoteDescriptor(D1, D2) -> 4748 chk_IndAudLocalRemoteDescriptor(D1, D2). 4749 4750chk_IndAudLocalRemoteDescriptor(D, D) -> 4751 chk_type(fun is_IndAudLocalRemoteDescriptor/1, 4752 'IndAudLocalRemoteDescriptor', D); 4753chk_IndAudLocalRemoteDescriptor( 4754 #'IndAudLocalRemoteDescriptor'{propGroupID = ID1, 4755 propGrps = Grps1}, 4756 #'IndAudLocalRemoteDescriptor'{propGroupID = ID2, 4757 propGrps = Grps2}) -> 4758 chk_IndAudLocalRemoteDescriptor_propGroupID(ID1, ID2), 4759 chk_IndAudPropertyGroup(Grps1, Grps2), 4760 ok; 4761chk_IndAudLocalRemoteDescriptor(D1, D2) -> 4762 wrong_type('IndAudLocalRemoteDescriptor', D1, D2). 4763 4764chk_IndAudLocalRemoteDescriptor_propGroupID(ID, ID) -> 4765 chk_type(fun is_IndAudLocalRemoteDescriptor_propGroupID/1, 4766 'IndAudLocalRemoteDescriptor_propGroupID', ID); 4767chk_IndAudLocalRemoteDescriptor_propGroupID(ID1, ID2) -> 4768 case (is_IndAudLocalRemoteDescriptor_propGroupID(ID1) andalso 4769 is_IndAudLocalRemoteDescriptor_propGroupID(ID2)) of 4770 true -> 4771 not_equal('IndAudLocalRemoteDescriptor_propGroupID', ID1, ID2); 4772 false -> 4773 wrong_type('IndAudLocalRemoteDescriptor_propGroupID', ID1, ID2) 4774 end. 4775 4776 4777%% -- IndAudPropertyGroup -- 4778 4779is_IndAudPropertyGroup([]) -> 4780 true; 4781is_IndAudPropertyGroup([H|T]) -> 4782 is_IndAudPropertyParm(H) andalso is_IndAudPropertyGroup(T); 4783is_IndAudPropertyGroup(_) -> 4784 false. 4785 4786chk_IndAudPropertyGroup([], []) -> 4787 ok; 4788chk_IndAudPropertyGroup([] = PG1, PG2) -> 4789 not_equal('IndAudPropertyGroup', PG1, PG2); 4790chk_IndAudPropertyGroup(PG1, [] = PG2) -> 4791 not_equal('IndAudPropertyGroup', PG1, PG2); 4792chk_IndAudPropertyGroup([H|T1], [H|T2]) -> 4793 case is_IndAudPropertyParm(H) of 4794 true -> 4795 chk_IndAudPropertyGroup(T1, T2); 4796 false -> 4797 wrong_type('IndAudPropertyGroup_val', H) 4798 end; 4799chk_IndAudPropertyGroup([H1|T1], [H2|T2]) -> 4800 validate(fun() -> chk_IndAudPropertyParm(H1, H2) end, 4801 'IndAudPropertyGroup_val'), 4802 chk_IndAudPropertyGroup(T1, T2); 4803chk_IndAudPropertyGroup(P1, P2) -> 4804 wrong_type('IndAudPropertyGroup', P1, P2). 4805 4806 4807%% -- IndAudTerminationStateDescriptor -- 4808 4809is_opt_IndAudTerminationStateDescriptor(asn1_NOVALUE) -> 4810 true; 4811is_opt_IndAudTerminationStateDescriptor(D) -> 4812 is_IndAudTerminationStateDescriptor(D). 4813 4814is_IndAudTerminationStateDescriptor( 4815 #'IndAudTerminationStateDescriptor'{propertyParms = Parms, 4816 eventBufferControl = EBC, 4817 serviceState = SS, 4818 serviceStateSel = SSS}) -> 4819 is_IndAudTerminationStateDescriptor_propertyParms(Parms) andalso 4820 is_opt_NULL(EBC) andalso 4821 is_opt_NULL(SS) andalso 4822 is_opt_ServiceState(SSS); 4823is_IndAudTerminationStateDescriptor(_) -> 4824 false. 4825 4826is_IndAudTerminationStateDescriptor_propertyParms([]) -> 4827 true; 4828is_IndAudTerminationStateDescriptor_propertyParms([H|T]) -> 4829 is_IndAudPropertyParm(H) andalso 4830 is_IndAudTerminationStateDescriptor_propertyParms(T); 4831is_IndAudTerminationStateDescriptor_propertyParms(_) -> 4832 false. 4833 4834chk_opt_IndAudTerminationStateDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 4835 ok; 4836chk_opt_IndAudTerminationStateDescriptor(D1, D2) -> 4837 chk_IndAudTerminationStateDescriptor(D1, D2). 4838 4839chk_IndAudTerminationStateDescriptor( 4840 #'IndAudTerminationStateDescriptor'{propertyParms = Parms1, 4841 eventBufferControl = EBC1, 4842 serviceState = SS1, 4843 serviceStateSel = SSS1}, 4844 #'IndAudTerminationStateDescriptor'{propertyParms = Parms2, 4845 eventBufferControl = EBC2, 4846 serviceState = SS2, 4847 serviceStateSel = SSS2}) -> 4848 chk_IndAudTerminationStateDescriptor_propertyParms(Parms1, Parms2), 4849 chk_IndAudTerminationStateDescriptor_eventBufferControl(EBC1, EBC2), 4850 chk_IndAudTerminationStateDescriptor_serviceState(SS1, SS2), 4851 chk_IndAudTerminationStateDescriptor_serviceStateSel(SSS1, SSS2), 4852 ok; 4853chk_IndAudTerminationStateDescriptor(D1, D2) -> 4854 wrong_type('IndAudTerminationStateDescriptor', D1, D2). 4855 4856chk_IndAudTerminationStateDescriptor_propertyParms([], []) -> 4857 ok; 4858chk_IndAudTerminationStateDescriptor_propertyParms([] = PP1, PP2) -> 4859 not_equal('IndAudTerminationStateDescriptor_propertyParms', PP1, PP2); 4860chk_IndAudTerminationStateDescriptor_propertyParms(PP1, [] = PP2) -> 4861 not_equal('IndAudTerminationStateDescriptor_propertyParms', PP1, PP2); 4862chk_IndAudTerminationStateDescriptor_propertyParms([H|T1], [H|T2]) -> 4863 case is_IndAudPropertyParm(H) of 4864 true -> 4865 chk_IndAudTerminationStateDescriptor_propertyParms(T1, T2); 4866 false -> 4867 wrong_type('IndAudTerminationStateDescriptor_propertyParms', H) 4868 end; 4869chk_IndAudTerminationStateDescriptor_propertyParms([H1|T1], [H2|T2]) -> 4870 validate(fun() -> chk_IndAudPropertyParm(H1, H2) end, 4871 'IndAudTerminationStateDescriptor_propertyParms'), 4872 chk_IndAudTerminationStateDescriptor_propertyParms(T1, T2); 4873chk_IndAudTerminationStateDescriptor_propertyParms(PP1, PP2) -> 4874 wrong_type('IndAudTerminationStateDescriptor_propertyParms', PP1, PP2). 4875 4876chk_IndAudTerminationStateDescriptor_eventBufferControl(EBC1, EBC2) -> 4877 validate(fun() -> chk_opt_NULL(EBC1, EBC2) end, 4878 'IndAudTerminationStateDescriptor_eventBufferControl'). 4879 4880chk_IndAudTerminationStateDescriptor_serviceState(SS1, SS2) -> 4881 validate(fun() -> chk_opt_NULL(SS1, SS2) end, 4882 'IndAudTerminationStateDescriptor_serviceState'). 4883 4884chk_IndAudTerminationStateDescriptor_serviceStateSel(SSS1, SSS2) -> 4885 validate(fun() -> chk_opt_ServiceState(SSS1, SSS2) end, 4886 'IndAudTerminationStateDescriptor_serviceStateSel'). 4887 4888%% -- IndAudEventsDescriptor -- 4889 4890is_IndAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID, 4891 pkgdName = Name, 4892 streamID = SID}) -> 4893 is_opt_RequestID(RID) andalso 4894 is_PkgdName(Name) andalso 4895 is_opt_StreamID(SID); 4896is_IndAudEventsDescriptor(_) -> 4897 false. 4898 4899chk_IndAudEventsDescriptor(#'IndAudEventsDescriptor'{requestID = RID1, 4900 pkgdName = Name1, 4901 streamID = SID1}, 4902 #'IndAudEventsDescriptor'{requestID = RID2, 4903 pkgdName = Name2, 4904 streamID = SID2}) -> 4905 chk_opt_RequestID(RID1, RID2), 4906 chk_PkgdName(Name1, Name2), 4907 chk_opt_StreamID(SID1, SID2), 4908 ok; 4909chk_IndAudEventsDescriptor(D1, D2) -> 4910 wrong_type('IndAudEventsDescriptor', D1, D2). 4911 4912 4913%% -- IndAudEventBufferDescriptor -- 4914 4915is_IndAudEventBufferDescriptor( 4916 #'IndAudEventBufferDescriptor'{eventName = Name, 4917 streamID = SID}) -> 4918 is_PkgdName(Name) andalso is_opt_StreamID(SID); 4919is_IndAudEventBufferDescriptor(_) -> 4920 false. 4921 4922chk_IndAudEventBufferDescriptor( 4923 #'IndAudEventBufferDescriptor'{eventName = Name1, 4924 streamID = SID1}, 4925 #'IndAudEventBufferDescriptor'{eventName = Name2, 4926 streamID = SID2}) -> 4927 chk_PkgdName(Name1, Name2), 4928 chk_opt_StreamID(SID1, SID2), 4929 ok; 4930chk_IndAudEventBufferDescriptor(D1, D2) -> 4931 wrong_type('IndAudEventBufferDescriptor', D1, D2). 4932 4933 4934%% -- IndAudSignalsDescriptor -- 4935 4936is_IndAudSignalsDescriptor({Tag, Val}) -> 4937 is_IndAudSignalsDescriptor_tag(Tag) andalso 4938 is_IndAudSignalsDescriptor_val(Tag, Val); 4939is_IndAudSignalsDescriptor(_) -> 4940 false. 4941 4942is_IndAudSignalsDescriptor_tag(Tag) -> 4943 Tags = [signal, seqSigList], 4944 lists:member(Tag, Tags). 4945 4946is_IndAudSignalsDescriptor_val(signal, Val) -> 4947 is_IndAudSignal(Val); 4948is_IndAudSignalsDescriptor_val(seqSigList, Val) -> 4949 is_IndAudSeqSigList(Val). 4950 4951chk_IndAudSignalsDescriptor(D, D) -> 4952 chk_type(fun is_IndAudSignalsDescriptor/1, 'IndAudSignalsDescriptor', D); 4953chk_IndAudSignalsDescriptor({Tag, Val1} = D1, {Tag, Val2} = D2) -> 4954 case (is_IndAudSignalsDescriptor_tag(Tag) andalso 4955 is_IndAudSignalsDescriptor_val(Tag, Val1) andalso 4956 is_IndAudSignalsDescriptor_val(Tag, Val2)) of 4957 true -> 4958 chk_IndAudSignalsDescriptor_val(Tag, Val1, Val2); 4959 false -> 4960 wrong_type('IndAudSignalsDescriptor', D1, D2) 4961 end; 4962chk_IndAudSignalsDescriptor({Tag1, Val1} = D1, {Tag2, Val2} = D2) -> 4963 case ((is_IndAudSignalsDescriptor_tag(Tag1) andalso 4964 is_IndAudSignalsDescriptor_val(Tag1, Val1)) andalso 4965 (is_IndAudSignalsDescriptor_tag(Tag2) andalso 4966 is_IndAudSignalsDescriptor_val(Tag2, Val2))) of 4967 true -> 4968 not_equal('IndAudSignalsDescriptor', D1, D2); 4969 false -> 4970 wrong_type('IndAudSignalsDescriptor', D1, D2) 4971 end; 4972chk_IndAudSignalsDescriptor(D1, D2) -> 4973 wrong_type('IndAudSignalsDescriptor', D1, D2). 4974 4975chk_IndAudSignalsDescriptor_val(signal, Val1, Val2) -> 4976 chk_IndAudSignal(Val1, Val2); 4977chk_IndAudSignalsDescriptor_val(seqSigList, Val1, Val2) -> 4978 chk_IndAudSeqSigList(Val1, Val2). 4979 4980 4981%% -- IndAudSeqSigList -- 4982 4983is_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID, 4984 signalList = SL}) -> 4985 is_IndAudSeqSigList_id(ID) andalso is_opt_IndAudSignal(SL); 4986is_IndAudSeqSigList(_) -> 4987 false. 4988 4989is_IndAudSeqSigList_id(ID) -> is_INTEGER(ID, {range, 0, 65535}). 4990 4991chk_IndAudSeqSigList(L, L) -> 4992 chk_type(fun is_IndAudSeqSigList/1, 'IndAudSeqSigList', L); 4993chk_IndAudSeqSigList(#'IndAudSeqSigList'{id = ID1, 4994 signalList = SL1}, 4995 #'IndAudSeqSigList'{id = ID2, 4996 signalList = SL2}) -> 4997 chk_IndAudSeqSigList_id(ID1, ID2), 4998 chk_opt_IndAudSignal(SL1, SL2), 4999 ok; 5000chk_IndAudSeqSigList(L1, L2) -> 5001 wrong_type('IndAudSeqSigList', L1, L2). 5002 5003chk_IndAudSeqSigList_id(ID, ID) -> 5004 chk_type(fun is_IndAudSeqSigList_id/1, 'IndAudSeqSigList_id', ID); 5005chk_IndAudSeqSigList_id(ID1, ID2) -> 5006 case (is_IndAudSeqSigList_id(ID1) andalso 5007 is_IndAudSeqSigList_id(ID2)) of 5008 true -> 5009 not_equal('IndAudSeqSigList_id', ID1, ID2); 5010 false -> 5011 wrong_type('IndAudSeqSigList_id', ID1, ID2) 5012 end. 5013 5014 5015%% -- IndAudSignal -- 5016 5017is_opt_IndAudSignal(asn1_NOVALUE) -> 5018 true; 5019is_opt_IndAudSignal(V) -> 5020 is_IndAudSignal(V). 5021 5022is_IndAudSignal(#'IndAudSignal'{signalName = Name, 5023 streamID = SID, 5024 signalRequestID = SRID}) -> 5025 is_PkgdName(Name) andalso 5026 is_opt_StreamID(SID) andalso 5027 is_opt_RequestID(SRID); 5028is_IndAudSignal(_) -> 5029 false. 5030 5031chk_opt_IndAudSignal(asn1_NOVALUE, asn1_NOVALUE) -> 5032 ok; 5033chk_opt_IndAudSignal(S1, S2) -> 5034 chk_IndAudSignal(S1, S2). 5035 5036chk_IndAudSignal(S, S) -> 5037 chk_type(fun is_IndAudSignal/1, 'IndAudSignal', S); 5038chk_IndAudSignal(#'IndAudSignal'{signalName = Name1, 5039 streamID = SID1, 5040 signalRequestID = SRID1}, 5041 #'IndAudSignal'{signalName = Name2, 5042 streamID = SID2, 5043 signalRequestID = SRID2}) -> 5044 validate(fun() -> chk_PkgdName(Name1, Name2) end, 5045 'IndAudSignal_signalName'), 5046 validate(fun() -> chk_opt_StreamID(SID1, SID2) end, 5047 'IndAudSignal_streamID'), 5048 validate(fun() -> chk_opt_RequestID(SRID1, SRID2) end, 5049 'IndAudSignal_signalRequestID'), 5050 ok; 5051chk_IndAudSignal(S1, S2) -> 5052 wrong_type('IndAudSignal', S1, S2). 5053 5054 5055%% -- IndAudDigitMapDescriptor -- 5056 5057is_IndAudDigitMapDescriptor( 5058 #'IndAudDigitMapDescriptor'{digitMapName = Name}) -> 5059 is_opt_DigitMapName(Name); 5060is_IndAudDigitMapDescriptor(_) -> 5061 false. 5062 5063chk_IndAudDigitMapDescriptor(D, D) -> 5064 chk_type(fun is_IndAudDigitMapDescriptor/1, 'IndAudDigitMapDescriptor', D); 5065chk_IndAudDigitMapDescriptor( 5066 #'IndAudDigitMapDescriptor'{digitMapName = Name1}, 5067 #'IndAudDigitMapDescriptor'{digitMapName = Name2}) -> 5068 validate(fun() -> chk_opt_DigitMapName(Name1, Name2) end, 5069 'IndAudDigitMapDescriptor'), 5070 ok; 5071chk_IndAudDigitMapDescriptor(D1, D2) -> 5072 wrong_type('IndAudDigitMapDescriptor', D1, D2). 5073 5074 5075%% -- IndAudStatisticsDescriptor -- 5076 5077is_IndAudStatisticsDescriptor( 5078 #'IndAudStatisticsDescriptor'{statName = Name}) -> 5079 is_PkgdName(Name); 5080is_IndAudStatisticsDescriptor(_) -> 5081 false. 5082 5083chk_IndAudStatisticsDescriptor(D, D) -> 5084 chk_type(fun is_IndAudStatisticsDescriptor/1, 5085 'IndAudStatisticsDescriptor', D); 5086chk_IndAudStatisticsDescriptor( 5087 #'IndAudStatisticsDescriptor'{statName = Name1}, 5088 #'IndAudStatisticsDescriptor'{statName = Name2}) -> 5089 validate(fun() -> chk_PkgdName(Name1, Name2) end, 5090 'IndAudStatisticsDescriptor'), 5091 ok; 5092chk_IndAudStatisticsDescriptor(D1, D2) -> 5093 wrong_type('IndAudStatisticsDescriptor', D1, D2). 5094 5095 5096%% -- IndAudPackagesDescriptor -- 5097 5098is_IndAudPackagesDescriptor( 5099 #'IndAudPackagesDescriptor'{packageName = Name, 5100 packageVersion = Ver}) -> 5101 is_Name(Name) andalso is_IndAudPackagesDescriptor_packageVersion(Ver); 5102is_IndAudPackagesDescriptor(_) -> 5103 false. 5104 5105is_IndAudPackagesDescriptor_packageVersion(V) -> 5106 is_INTEGER(V, {range, 0, 99}). 5107 5108chk_IndAudPackagesDescriptor( 5109 #'IndAudPackagesDescriptor'{packageName = Name1, 5110 packageVersion = Ver1}, 5111 #'IndAudPackagesDescriptor'{packageName = Name2, 5112 packageVersion = Ver2}) -> 5113 validate(fun() -> chk_Name(Name1, Name2) end, 'IndAudPackagesDescriptor'), 5114 chk_IndAudPackagesDescriptor_packageVersion(Ver1, Ver2), 5115 ok; 5116chk_IndAudPackagesDescriptor(D1, D2) -> 5117 wrong_type('IndAudPackagesDescriptor', D1, D2). 5118 5119chk_IndAudPackagesDescriptor_packageVersion(V, V) -> 5120 chk_type(fun is_IndAudPackagesDescriptor_packageVersion/1, 5121 'IndAudPackagesDescriptor_packageVersion', V); 5122chk_IndAudPackagesDescriptor_packageVersion(V1, V2) -> 5123 case (is_IndAudPackagesDescriptor_packageVersion(V1) andalso 5124 is_IndAudPackagesDescriptor_packageVersion(V2)) of 5125 true -> 5126 not_equal('IndAudPackagesDescriptor_packageVersion', V1, V2); 5127 false -> 5128 wrong_type('IndAudPackagesDescriptor_packageVersion', V1, V2) 5129 end. 5130 5131 5132%% -- NotifyRequest -- 5133 5134is_NotifyRequest(#'NotifyRequest'{terminationID = Tids, 5135 observedEventsDescriptor = OED, 5136 errorDescriptor = ED}) -> 5137 is_TerminationIDList(Tids) andalso 5138 is_ObservedEventsDescriptor(OED) andalso 5139 is_opt_ErrorDescriptor(ED); 5140is_NotifyRequest(_) -> 5141 false. 5142 5143chk_NotifyRequest(#'NotifyRequest'{terminationID = Tids1, 5144 observedEventsDescriptor = OED1, 5145 errorDescriptor = ED1}, 5146 #'NotifyRequest'{terminationID = Tids2, 5147 observedEventsDescriptor = OED2, 5148 errorDescriptor = ED2}) -> 5149 validate(fun() -> chk_TerminationIDList(Tids1, Tids2) end, 5150 'NotifyRequest'), 5151 validate(fun() -> chk_ObservedEventsDescriptor(OED1, OED2) end, 5152 'NotifyRequest'), 5153 validate(fun() -> chk_opt_ErrorDescriptor(ED1, ED2) end, 5154 'NotifyRequest'), 5155 ok; 5156chk_NotifyRequest(NR1, NR2) -> 5157 wrong_type('NotifyRequest', NR1, NR2). 5158 5159 5160%% -- NotifyReply -- 5161 5162is_NotifyReply(#'NotifyReply'{terminationID = Tids, 5163 errorDescriptor = ED}) -> 5164 is_TerminationIDList(Tids) andalso is_opt_ErrorDescriptor(ED); 5165is_NotifyReply(_) -> 5166 false. 5167 5168chk_NotifyReply(#'NotifyReply'{terminationID = Tids1, 5169 errorDescriptor = ED1}, 5170 #'NotifyReply'{terminationID = Tids2, 5171 errorDescriptor = ED2}) -> 5172 validate(fun() -> chk_TerminationIDList(Tids1, Tids2) end, 'NotifyReply'), 5173 validate(fun() -> chk_opt_ErrorDescriptor(ED1, ED2) end, 'NotifyReply'), 5174 ok; 5175chk_NotifyReply(NR1, NR2) -> 5176 wrong_type('NotifyReply', NR1, NR2). 5177 5178 5179%% -- ObservedEventsDescriptor -- 5180 5181is_ObservedEventsDescriptor( 5182 #'ObservedEventsDescriptor'{requestId = RID, 5183 observedEventLst = OEL}) -> 5184 is_RequestID(RID) andalso 5185 is_ObservedEventsDescriptor_observedEventLst(OEL); 5186is_ObservedEventsDescriptor(_) -> 5187 false. 5188 5189is_ObservedEventsDescriptor_observedEventLst([]) -> 5190 true; 5191is_ObservedEventsDescriptor_observedEventLst([H|T]) -> 5192 is_ObservedEvent(H) andalso 5193 is_ObservedEventsDescriptor_observedEventLst(T); 5194is_ObservedEventsDescriptor_observedEventLst(_) -> 5195 false. 5196 5197chk_ObservedEventsDescriptor( 5198 #'ObservedEventsDescriptor'{requestId = RID1, 5199 observedEventLst = OEL1}, 5200 #'ObservedEventsDescriptor'{requestId = RID2, 5201 observedEventLst = OEL2}) -> 5202 validate(fun() -> chk_RequestID(RID1, RID2) end, 5203 'ObservedEventsDescriptor'), 5204 validate( 5205 fun() -> 5206 chk_ObservedEventsDescriptor_observedEventLst(OEL1, OEL2) 5207 end, 5208 'ObservedEventsDescriptor'), 5209 ok; 5210chk_ObservedEventsDescriptor(D1, D2) -> 5211 wrong_type('ObservedEventsDescriptor', D1, D2). 5212 5213chk_ObservedEventsDescriptor_observedEventLst([], []) -> 5214 ok; 5215chk_ObservedEventsDescriptor_observedEventLst([] = L1, L2) -> 5216 not_equal('ObservedEventsDescriptor_observedEventLst', L1, L2); 5217chk_ObservedEventsDescriptor_observedEventLst(L1, [] = L2) -> 5218 not_equal('ObservedEventsDescriptor_observedEventLst', L1, L2); 5219chk_ObservedEventsDescriptor_observedEventLst([H|T1], [H|T2]) -> 5220 case is_ObservedEvent(H) of 5221 true -> 5222 chk_ObservedEventsDescriptor_observedEventLst(T1, T2); 5223 false -> 5224 wrong_type('ObservedEventsDescriptor_observedEventLst_val', H) 5225 end; 5226chk_ObservedEventsDescriptor_observedEventLst([H1|T1], [H2|T2]) -> 5227 validate(fun() -> chk_ObservedEvent(H1, H2) end, 5228 'ObservedEventsDescriptor_observedEventLst_val'), 5229 chk_ObservedEventsDescriptor_observedEventLst(T1, T2); 5230chk_ObservedEventsDescriptor_observedEventLst(L1, L2) -> 5231 wrong_type('ObservedEventsDescriptor_observedEventLst', L1, L2). 5232 5233 5234%% -- ObservedEvent -- 5235 5236is_ObservedEvent(#'ObservedEvent'{eventName = Name, 5237 streamID = SID, 5238 eventParList = EPL, 5239 timeNotation = TN}) -> 5240 is_EventName(Name) andalso 5241 is_opt_StreamID(SID) andalso 5242 is_ObservedEvent_eventParList(EPL) andalso 5243 is_opt_TimeNotation(TN); 5244is_ObservedEvent(_) -> 5245 false. 5246 5247is_ObservedEvent_eventParList([]) -> 5248 true; 5249is_ObservedEvent_eventParList([H|T]) -> 5250 is_EventParameter(H) andalso is_ObservedEvent_eventParList(T); 5251is_ObservedEvent_eventParList(_) -> 5252 false. 5253 5254chk_ObservedEvent(E, E) -> 5255 chk_type(fun is_ObservedEvent/1, 'ObservedEvent', E); 5256chk_ObservedEvent(#'ObservedEvent'{eventName = Name1, 5257 streamID = SID1, 5258 eventParList = EPL1, 5259 timeNotation = TN1}, 5260 #'ObservedEvent'{eventName = Name2, 5261 streamID = SID2, 5262 eventParList = EPL2, 5263 timeNotation = TN2}) -> 5264 validate(fun() -> chk_EventName(Name1, Name2) end, 'ObservedEvent'), 5265 validate(fun() -> chk_opt_StreamID(SID1, SID2) end, 'ObservedEvent'), 5266 chk_ObservedEvent_eventParList(EPL1, EPL2), 5267 validate(fun() -> chk_opt_TimeNotation(TN1, TN2) end, 'ObservedEvent'), 5268 ok; 5269chk_ObservedEvent(E1, E2) -> 5270 wrong_type('ObservedEvent', E1, E2). 5271 5272chk_ObservedEvent_eventParList([], []) -> 5273 ok; 5274chk_ObservedEvent_eventParList([] = EPL1, EPL2) -> 5275 not_equal('ObservedEvent_eventParList', EPL1, EPL2); 5276chk_ObservedEvent_eventParList(EPL1, [] = EPL2) -> 5277 not_equal('ObservedEvent_eventParList', EPL1, EPL2); 5278chk_ObservedEvent_eventParList([H|T1], [H|T2]) -> 5279 case is_EventParameter(H) of 5280 true -> 5281 chk_ObservedEvent_eventParList(T1, T2); 5282 false -> 5283 wrong_type('ObservedEvent_eventParList_val', H) 5284 end; 5285chk_ObservedEvent_eventParList([H1|T1], [H2|T2]) -> 5286 validate(fun() -> chk_EventParameter(H1, H2) end, 5287 'ObservedEvent_eventParList'), 5288 chk_ObservedEvent_eventParList(T1, T2); 5289chk_ObservedEvent_eventParList(L1, L2) -> 5290 wrong_type('ObservedEvent_eventParList', L1, L2). 5291 5292 5293%% -- EventName -- 5294 5295is_EventName(N) -> is_PkgdName(N). 5296 5297chk_EventName(N, N) -> 5298 chk_type(fun is_EventName/1, 'EventName', N); 5299chk_EventName(N1, N2) -> 5300 case (is_EventName(N1) andalso is_EventName(N2)) of 5301 true -> 5302 not_equal('EventName', N1, N2); 5303 false -> 5304 wrong_type('EventName', N1, N2) 5305 end. 5306 5307 5308%% -- EventParameter -- 5309 5310is_EventParameter(#'EventParameter'{eventParameterName = Name, 5311 value = Val, 5312 extraInfo = EI}) -> 5313 d("is_EventParameter -> entery with" 5314 "~n Name: ~p" 5315 "~n Val: ~p" 5316 "~n EI: ~p", [Name, Val, EI]), 5317 is_Name(Name) andalso 5318 is_Value(Val) andalso 5319 is_EventParameter_extraInfo(EI); 5320is_EventParameter(_) -> 5321 false. 5322 5323is_EventParameter_extraInfo(asn1_NOVALUE) -> 5324 true; 5325is_EventParameter_extraInfo({Tag, Val}) -> 5326 is_EventParameter_extraInfo_tag(Tag) andalso 5327 is_EventParameter_extraInfo_val(Tag, Val); 5328is_EventParameter_extraInfo(_) -> 5329 false. 5330 5331is_EventParameter_extraInfo_tag(Tag) -> 5332 Tags = [relation, range, sublist], 5333 lists:member(Tag, Tags). 5334 5335is_EventParameter_extraInfo_val(relation, Val) -> 5336 is_Relation(Val); 5337is_EventParameter_extraInfo_val(range, Val) -> 5338 is_BOOLEAN(Val); 5339is_EventParameter_extraInfo_val(sublist, Val) -> 5340 is_BOOLEAN(Val). 5341 5342chk_EventParameter(#'EventParameter'{eventParameterName = Name1, 5343 value = Val1, 5344 extraInfo = EI1}, 5345 #'EventParameter'{eventParameterName = Name2, 5346 value = Val2, 5347 extraInfo = EI2}) -> 5348 validate(fun() -> chk_Name(Name1, Name2) end, 'EventParameter'), 5349 validate(fun() -> chk_Value(Val1, Val2) end, 'EventParameter'), 5350 chk_EventParameter_extraInfo(EI1, EI2), 5351 ok; 5352chk_EventParameter(P1, P2) -> 5353 wrong_type('EventParameter', P1, P2). 5354 5355chk_EventParameter_extraInfo(asn1_NOVALUE, asn1_NOVALUE) -> 5356 ok; 5357chk_EventParameter_extraInfo(EI, EI) -> 5358 chk_type(fun is_EventParameter_extraInfo/1, 5359 'EventParameter_extraInfo', EI); 5360chk_EventParameter_extraInfo({Tag, Val1} = EI1, {Tag, Val2} = EI2) -> 5361 case (is_EventParameter_extraInfo_tag(Tag) andalso 5362 is_EventParameter_extraInfo_val(Tag, Val1) andalso 5363 is_EventParameter_extraInfo_val(Tag, Val2)) of 5364 true -> 5365 chk_EventParameter_extraInfo_val(Tag, Val1, Val2); 5366 false -> 5367 wrong_type('EventParameter_extraInfo', EI1, EI2) 5368 end; 5369chk_EventParameter_extraInfo({Tag1, Val1} = EI1, {Tag2, Val2} = EI2) -> 5370 case ((is_EventParameter_extraInfo_tag(Tag1) andalso 5371 is_EventParameter_extraInfo_val(Tag1, Val1)) andalso 5372 (is_EventParameter_extraInfo_tag(Tag2) andalso 5373 is_EventParameter_extraInfo_val(Tag2, Val2))) of 5374 true -> 5375 not_equal('EventParameter_extraInfo', EI1, EI2); 5376 false -> 5377 wrong_type('EventParameter_extraInfo', EI1, EI2) 5378 end; 5379chk_EventParameter_extraInfo(EI1, EI2) -> 5380 wrong_type('EventParameter_extraInfo', EI1, EI2). 5381 5382chk_EventParameter_extraInfo_val(relation, Val1, Val2) -> 5383 validate(fun() -> chk_Relation(Val1, Val2) end, 5384 'EventParameter_extraInfo_val'); 5385chk_EventParameter_extraInfo_val(range, Val1, Val2) -> 5386 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 5387 'EventParameter_extraInfo_val'); 5388chk_EventParameter_extraInfo_val(sublist, Val1, Val2) -> 5389 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 5390 'EventParameter_extraInfo_val'). 5391 5392 5393%% -- ServiceChangeRequest -- 5394 5395is_ServiceChangeRequest(#'ServiceChangeRequest'{terminationID = Tids, 5396 serviceChangeParms = Parms}) -> 5397 is_TerminationIDList(Tids) andalso is_ServiceChangeParm(Parms); 5398is_ServiceChangeRequest(_) -> 5399 false. 5400 5401chk_ServiceChangeRequest(R, R) -> 5402 chk_type(fun is_ServiceChangeRequest/1, 'ServiceChangeRequest', R); 5403chk_ServiceChangeRequest( 5404 #'ServiceChangeRequest'{terminationID = Tids1, 5405 serviceChangeParms = Parms1}, 5406 #'ServiceChangeRequest'{terminationID = Tids2, 5407 serviceChangeParms = Parms2}) -> 5408 validate(fun() -> chk_TerminationIDList(Tids1, Tids2) end, 5409 'ServiceChangeRequest'), 5410 validate(fun() -> chk_ServiceChangeParm(Parms1, Parms2) end, 5411 'ServiceChangeRequest'), 5412 ok; 5413chk_ServiceChangeRequest(R1, R2) -> 5414 wrong_type('ServiceChangeRequest', R1, R2). 5415 5416 5417%% -- ServiceChangeReply -- 5418 5419is_ServiceChangeReply(#'ServiceChangeReply'{terminationID = Tids, 5420 serviceChangeResult = Res}) -> 5421 is_TerminationIDList(Tids) andalso is_ServiceChangeResult(Res); 5422is_ServiceChangeReply(_) -> 5423 false. 5424 5425chk_ServiceChangeReply(R, R) -> 5426 chk_type(fun is_ServiceChangeReply/1, 'ServiceChangeReply', R); 5427chk_ServiceChangeReply( 5428 #'ServiceChangeReply'{terminationID = Tids1, 5429 serviceChangeResult = Res1}, 5430 #'ServiceChangeReply'{terminationID = Tids2, 5431 serviceChangeResult = Res2}) -> 5432 validate(fun() -> chk_TerminationIDList(Tids1, Tids2) end, 5433 'ServiceChangeReply'), 5434 validate(fun() -> chk_ServiceChangeResult(Res1, Res2) end, 5435 'ServiceChangeReply'), 5436 ok; 5437chk_ServiceChangeReply(R1, R2) -> 5438 wrong_type('ServiceChangeReply', R1, R2). 5439 5440 5441%% -- ServiceChangeResult -- 5442 5443is_ServiceChangeResult({Tag, Val}) -> 5444 is_ServiceChangeResult_tag(Tag) andalso 5445 is_ServiceChangeResult_val(Tag, Val); 5446is_ServiceChangeResult(_) -> 5447 false. 5448 5449is_ServiceChangeResult_tag(Tag) -> 5450 Tags = [errorDescriptor, serviceChangeResParms], 5451 lists:member(Tag, Tags). 5452 5453is_ServiceChangeResult_val(errorDescriptor, Val) -> 5454 is_ErrorDescriptor(Val); 5455is_ServiceChangeResult_val(serviceChangeResParms, Val) -> 5456 is_ServiceChangeResParm(Val). 5457 5458chk_ServiceChangeResult(Res, Res) -> 5459 chk_type(fun is_ServiceChangeResult/1, 'ServiceChangeResult', Res); 5460chk_ServiceChangeResult({Tag, Val1} = Res1, {Tag, Val2} = Res2) -> 5461 case (is_ServiceChangeResult_tag(Tag) andalso 5462 is_ServiceChangeResult_val(Tag, Val1) andalso 5463 is_ServiceChangeResult_val(Tag, Val2)) of 5464 true -> 5465 chk_ServiceChangeResult_val(Tag, Val1, Val2); 5466 false -> 5467 wrong_type('ServiceChangeResult', Res1, Res2) 5468 end; 5469chk_ServiceChangeResult({Tag1, Val1} = Res1, {Tag2, Val2} = Res2) -> 5470 case ((is_ServiceChangeResult_tag(Tag1) andalso 5471 is_ServiceChangeResult_val(Tag1, Val1)) andalso 5472 (is_ServiceChangeResult_tag(Tag2) andalso 5473 is_ServiceChangeResult_val(Tag2, Val2))) of 5474 true -> 5475 not_equal('ServiceChangeResult', Res1, Res2); 5476 false -> 5477 wrong_type('ServiceChangeResult', Res1, Res2) 5478 end; 5479chk_ServiceChangeResult(Res1, Res2) -> 5480 wrong_type('ServiceChangeResult', Res1, Res2). 5481 5482chk_ServiceChangeResult_val(errorDescriptor, Val1, Val2) -> 5483 validate(fun() -> chk_ErrorDescriptor(Val1, Val2) end, 5484 'ServiceChangeResult'); 5485chk_ServiceChangeResult_val(serviceChangeResParms, Val1, Val2) -> 5486 validate(fun() -> chk_ServiceChangeResParm(Val1, Val2) end, 5487 'ServiceChangeResult'). 5488 5489 5490%% -- WildcardField -- 5491 5492is_WildcardField(WF) -> is_OCTET_STRING(WF, {exact, 1}). 5493 5494chk_WildcardField(WF, WF) -> 5495 case is_WildcardField(WF) of 5496 true -> 5497 ok; 5498 false -> 5499 wrong_type('WildcardField', WF) 5500 end; 5501chk_WildcardField(WF1, WF2) -> 5502 case (is_WildcardField(WF1) andalso is_WildcardField(WF2)) of 5503 true -> 5504 not_equal('WildcardField', WF1, WF2); 5505 false -> 5506 wrong_type('WildcardField', WF1, WF2) 5507 end. 5508 5509 5510%% -- TerminationID -- 5511 5512is_TerminationID(#'TerminationID'{wildcard = W, 5513 id = ID}) -> 5514 is_TerminationID_wildcard(W) andalso is_TerminationID_id(ID); 5515is_TerminationID(#megaco_term_id{contains_wildcards = _W, 5516 id = _ID}) -> 5517 true; % What are the types? 5518is_TerminationID(_) -> 5519 false. 5520 5521is_TerminationID_wildcard([]) -> 5522 true; 5523is_TerminationID_wildcard([H|T]) -> 5524 is_WildcardField(H) andalso is_TerminationID_wildcard(T); 5525is_TerminationID_wildcard(_) -> 5526 false. 5527 5528is_TerminationID_id(ID) -> is_OCTET_STRING(ID, {range, 1, 8}). 5529 5530chk_TerminationID(Id,Id) -> 5531 d("chk_TerminationID(1) -> entry with" 5532 "~n Id: ~p", [Id]), 5533 chk_type(fun is_TerminationID/1, 'TerminationID', Id); 5534chk_TerminationID(#'TerminationID'{wildcard = W1, 5535 id = I1}, 5536 #'TerminationID'{wildcard = W2, 5537 id = I2}) -> 5538 d("chk_TerminationID(2) -> entry with" 5539 "~n W1: ~p" 5540 "~n W2: ~p" 5541 "~n I1: ~p" 5542 "~n I2: ~p", [W1, W2, I1, I2]), 5543 chk_TerminationID_wildcard(W1, W2), 5544 chk_TerminationID_id(I1, I2), 5545 ok; 5546chk_TerminationID(#megaco_term_id{contains_wildcards = W1, 5547 id = I1}, 5548 #megaco_term_id{contains_wildcards = W2, 5549 id = I2}) -> 5550 d("chk_TerminationID(3) -> entry with" 5551 "~n W1: ~p" 5552 "~n W2: ~p" 5553 "~n I1: ~p" 5554 "~n I2: ~p", [W1, W2, I1, I2]), 5555 validate(fun() -> chk_BOOLEAN(W1, W2) end, 'TerminationID_wildcard'), 5556 chk_TerminationID_id(I1, I2), 5557 ok; 5558chk_TerminationID(Tid1, Tid2) -> 5559 d("chk_TerminationID(4) -> entry with" 5560 "~n Tid1: ~p" 5561 "~n Tid2: ~p", [Tid1, Tid2]), 5562 wrong_type('TerminationID', Tid1, Tid2). 5563 5564chk_TerminationID_wildcard([], []) -> 5565 ok; 5566chk_TerminationID_wildcard([] = WF1, WF2) -> 5567 not_equal('TerminationID_wildcard', WF1, WF2); 5568chk_TerminationID_wildcard(WF1, [] = WF2) -> 5569 not_equal('TerminationID_wildcard', WF1, WF2); 5570chk_TerminationID_wildcard([H|T1], [H|T2]) -> 5571 case is_WildcardField(H) of 5572 true -> 5573 chk_TerminationID_wildcard(T1, T2); 5574 false -> 5575 wrong_type('TerminationID_wildcard_val', H) 5576 end; 5577chk_TerminationID_wildcard([H1|T1], [H2|T2]) -> 5578 validate(fun() -> chk_WildcardField(H1, H2) end, 5579 'TerminationID_wildcard_val'), 5580 chk_TerminationID_wildcard(T1, T2); 5581chk_TerminationID_wildcard(WF1,WF2) -> 5582 not_equal('TerminationId_wildcard', WF1, WF2). 5583 5584chk_TerminationID_id(Id, Id) -> 5585 case is_OCTET_STRING(Id, {range, 1, 8}) of 5586 true -> 5587 ok; 5588 false -> 5589 wrong_type('TerminationID_id', Id, Id) 5590 end; 5591chk_TerminationID_id(Id1, Id2) -> 5592 Id12 = flatten_TerminationID_id(Id1, []), 5593 Id22 = flatten_TerminationID_id(Id2, []), 5594 case Id12 == Id22 of 5595 true -> 5596 ok; 5597 false -> 5598 not_equal(terminationId_id, Id1, Id2) 5599 end. 5600 5601flatten_TerminationID_id([], Acc) -> 5602 lists:flatten(lists:reverse(Acc)); 5603flatten_TerminationID_id([H|T], Acc) -> 5604 flatten_TerminationID_id(T, [string:tokens(H, [$/])|Acc]). 5605 5606%% -- TerminationIDList -- 5607 5608%% is_opt_TerminationIDList(asn1_NOVALUE) -> 5609%% true; 5610%% is_opt_TerminationIDList(TIDs) -> 5611%% is_TerminationIDList(TIDs). 5612 5613is_TerminationIDList([]) -> 5614 true; 5615is_TerminationIDList([H|T]) -> 5616 is_TerminationID(H) andalso is_TerminationIDList(T); 5617is_TerminationIDList(_) -> 5618 false. 5619 5620chk_opt_TerminationIDList(asn1_NOVALUE, asn1_NOVALUE) -> 5621 ok; 5622chk_opt_TerminationIDList(TIDs1, TIDs2) -> 5623 chk_TerminationIDList(TIDs1, TIDs2). 5624 5625chk_TerminationIDList([], []) -> 5626 ok; 5627chk_TerminationIDList([] = L1, L2) -> 5628 not_equal('TerminationIDList', L1, L2); 5629chk_TerminationIDList(L1, [] = L2) -> 5630 not_equal('TerminationIDList', L1, L2); 5631chk_TerminationIDList([H|T1], [H|T2]) -> 5632 case is_TerminationID(H) of 5633 true -> 5634 chk_TerminationIDList(T1, T2); 5635 false -> 5636 wrong_type('TerminationIDList', H) 5637 end; 5638chk_TerminationIDList([H1|T1], [H2|T2]) -> 5639 validate(fun() -> chk_TerminationID(H1, H2) end, 'TerminationIDList'), 5640 chk_TerminationIDList(T1, T2); 5641chk_TerminationIDList(L1, L2) -> 5642 wrong_type('TerminationIDList', L1, L2). 5643 5644 5645%% -- MediaDescriptor -- 5646 5647is_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TSD, 5648 streams = S}) -> 5649 d("is_MediaDescriptor -> entry with" 5650 "~n TSD: ~p" 5651 "~n S: ~p", [TSD, S]), 5652 is_opt_TerminationStateDescriptor(TSD) andalso 5653 is_MediaDescriptor_streams(S); 5654is_MediaDescriptor(_) -> 5655 false. 5656 5657is_MediaDescriptor_streams(asn1_NOVALUE) -> 5658 true; 5659is_MediaDescriptor_streams({Tag, Val}) -> 5660 is_MediaDescriptor_streams_tag(Tag) andalso 5661 is_MediaDescriptor_streams_val(Tag, Val); 5662is_MediaDescriptor_streams(_) -> 5663 false. 5664 5665is_MediaDescriptor_streams_tag(Tag) -> 5666 Tags = [oneStream, multiStream], 5667 lists:member(Tag, Tags). 5668 5669is_MediaDescriptor_streams_val(oneStream, SP) -> 5670 is_StreamParms(SP); 5671is_MediaDescriptor_streams_val(multiStream, SDL) -> 5672 is_MediaDescriptor_multiStream(SDL). 5673 5674is_MediaDescriptor_multiStream([]) -> 5675 true; 5676is_MediaDescriptor_multiStream([H|T]) -> 5677 is_StreamDescriptor(H) andalso is_MediaDescriptor_multiStream(T); 5678is_MediaDescriptor_multiStream(_) -> 5679 false. 5680 5681chk_MediaDescriptor(D, D) -> 5682 chk_type(fun is_MediaDescriptor/1, 'MediaDescriptor', D); 5683chk_MediaDescriptor(#'MediaDescriptor'{termStateDescr = TSD1, 5684 streams = S1}, 5685 #'MediaDescriptor'{termStateDescr = TSD2, 5686 streams = S2}) -> 5687 validate( 5688 fun() -> 5689 chk_opt_TerminationStateDescriptor(TSD1, TSD2) 5690 end, 5691 'MediaDescriptor'), 5692 validate( 5693 fun() -> 5694 chk_MediaDescriptor_streams(S1, S2) 5695 end, 5696 'MediaDescriptor'), 5697 ok; 5698chk_MediaDescriptor(D1, D2) -> 5699 wrong_type('MediaDescriptor', D1, D2). 5700 5701 5702chk_MediaDescriptor_streams(asn1_NOVALUE, asn1_NOVALUE) -> 5703 ok; 5704chk_MediaDescriptor_streams({oneStream, SP1}, {oneStream, SP2}) -> 5705 validate(fun() -> 5706 chk_StreamParms(SP1, SP2) 5707 end, 5708 'MediaDescriptor_streams'); 5709chk_MediaDescriptor_streams({multiStream, SDs1}, {multiStream, SDs2}) -> 5710 validate(fun() -> 5711 chk_MediaDescriptor_multiStream(SDs1, SDs2) 5712 end, 5713 'MediaDescriptor_streams'); 5714chk_MediaDescriptor_streams(S1, S2) -> 5715 wrong_type('MediaDescriptor_streams', S1, S2). 5716 5717chk_MediaDescriptor_multiStream([], []) -> 5718 ok; 5719chk_MediaDescriptor_multiStream([] = MS1, MS2) -> 5720 not_equal('MediaDescriptor_multiStream', MS1, MS2); 5721chk_MediaDescriptor_multiStream(MS1, [] = MS2) -> 5722 not_equal('MediaDescriptor_multiStream', MS1, MS2); 5723chk_MediaDescriptor_multiStream([H|T1], [H|T2]) -> 5724 case is_StreamDescriptor(H) of 5725 true -> 5726 chk_MediaDescriptor_multiStream(T1, T2); 5727 false -> 5728 wrong_type('MediaDescriptor_multiStream_val', H) 5729 end; 5730chk_MediaDescriptor_multiStream([H1|T1], [H2|T2]) -> 5731 validate(fun() -> chk_StreamDescriptor(H1, H2) end, 5732 'MediaDescriptor_multiStream_val'), 5733 chk_MediaDescriptor_multiStream(T1, T2); 5734chk_MediaDescriptor_multiStream(MS1, MS2) -> 5735 wrong_type('MediaDescriptor_multiStream_val', MS1, MS2). 5736 5737 5738%% -- StreamDescriptor -- 5739 5740is_StreamDescriptor(#'StreamDescriptor'{streamID = SID, 5741 streamParms = Parms}) -> 5742 d("is_StreamDescriptor -> entry with" 5743 "~n SID: ~p" 5744 "~n Parms: ~p", [SID, Parms]), 5745 is_StreamID(SID) andalso is_StreamParms(Parms); 5746is_StreamDescriptor(X) -> 5747 d("is_StreamDescriptor -> entry when ERROR with" 5748 "~n X: ~p", [X]), 5749 false. 5750 5751chk_StreamDescriptor(D, D) -> 5752 chk_type(fun is_StreamDescriptor/1, 'StreamDescriptor', D); 5753chk_StreamDescriptor(#'StreamDescriptor'{streamID = SID1, 5754 streamParms = Parms1}, 5755 #'StreamDescriptor'{streamID = SID2, 5756 streamParms = Parms2}) -> 5757 validate(fun() -> chk_StreamID(SID1, SID2) end, 'StreamDescriptor'), 5758 validate(fun() -> chk_StreamParms(Parms1, Parms2) end, 'StreamDescriptor'), 5759 ok; 5760chk_StreamDescriptor(D1, D2) -> 5761 wrong_type('StreamDescriptor', D1, D2). 5762 5763 5764%% -- StreamParms -- 5765 5766is_StreamParms(#'StreamParms'{localControlDescriptor = LCD, 5767 localDescriptor = LD, 5768 remoteDescriptor = RD, 5769 statisticsDescriptor = SD}) -> 5770 d("is_StreamParms -> entry with" 5771 "~n LCD: ~p" 5772 "~n LD: ~p" 5773 "~n RD: ~p" 5774 "~n SD: ~p", [LCD, LD, RD, SD]), 5775 is_opt_LocalControlDescriptor(LCD) andalso 5776 is_opt_LocalRemoteDescriptor(LD) andalso 5777 is_opt_LocalRemoteDescriptor(RD) andalso 5778 is_opt_StatisticsDescriptor(SD); 5779is_StreamParms(X) -> 5780 d("is_StreamParms -> entry when ERROR with" 5781 "~n X: ~p", [X]), 5782 false. 5783 5784chk_StreamParms(SP, SP) -> 5785 chk_type(fun is_StreamParms/1, 'StreamParms', SP); 5786chk_StreamParms(#'StreamParms'{localControlDescriptor = LCD1, 5787 localDescriptor = LD1, 5788 remoteDescriptor = RD1, 5789 statisticsDescriptor = SD1}, 5790 #'StreamParms'{localControlDescriptor = LCD2, 5791 localDescriptor = LD2, 5792 remoteDescriptor = RD2, 5793 statisticsDescriptor = SD2}) -> 5794 validate(fun() -> chk_opt_LocalControlDescriptor(LCD1, LCD2) end, 5795 'StreamParms_localControlDescriptor'), 5796 validate(fun() -> chk_opt_LocalRemoteDescriptor(LD1, LD2) end, 5797 'StreamParms_localDescriptor'), 5798 validate(fun() -> chk_opt_LocalRemoteDescriptor(RD1, RD2) end, 5799 'StreamParms_remoteDescriptor'), 5800 validate(fun() -> chk_opt_StatisticsDescriptor(SD1, SD2) end, 5801 'StreamParms_statisticsDescriptor'), 5802 ok; 5803chk_StreamParms(P1, P2) -> 5804 wrong_type('StreamParms', P1, P2). 5805 5806 5807%% -- LocalControlDescriptor -- 5808 5809is_opt_LocalControlDescriptor(D) -> 5810 d("is_opt_LocalControlDescriptor -> entry"), 5811 is_OPTIONAL(fun is_LocalControlDescriptor/1, D). 5812 5813is_LocalControlDescriptor(#'LocalControlDescriptor'{streamMode = SM, 5814 reserveValue = RV, 5815 reserveGroup = RG, 5816 propertyParms = PP}) -> 5817 d("is_LocalControlDescriptor -> entry with" 5818 "~n SM: ~p" 5819 "~n RV: ~p" 5820 "~n RG: ~p" 5821 "~n PP: ~p", [SM, RV, RG, PP]), 5822 is_opt_StreamMode(SM) andalso 5823 is_opt_BOOLEAN(RV) andalso 5824 is_opt_BOOLEAN(RG) andalso 5825 is_LocalControlDescriptor_propertyParms(PP); 5826is_LocalControlDescriptor(_) -> 5827 false. 5828 5829is_LocalControlDescriptor_propertyParms([]) -> 5830 d("is_LocalControlDescriptor_propertyParms -> entry when done"), 5831 true; 5832is_LocalControlDescriptor_propertyParms([H|T]) -> 5833 d("is_LocalControlDescriptor_propertyParms -> entry with" 5834 "~n H: ~p" 5835 "~n T: ~p", [H, T]), 5836 is_PropertyParm(H) andalso is_LocalControlDescriptor_propertyParms(T); 5837is_LocalControlDescriptor_propertyParms(_) -> 5838 false. 5839 5840chk_opt_LocalControlDescriptor(LCD1, LCD2) -> 5841 chk_OPTIONAL('LocalControlDescriptor', LCD1, LCD2, 5842 fun is_LocalControlDescriptor/1, 5843 fun chk_LocalControlDescriptor/2). 5844 5845chk_LocalControlDescriptor(LCD, LCD) -> 5846 chk_type(fun is_LocalControlDescriptor/1, 'LocalControlDescriptor', LCD); 5847chk_LocalControlDescriptor(#'LocalControlDescriptor'{streamMode = SM1, 5848 reserveValue = RV1, 5849 reserveGroup = RG1, 5850 propertyParms = PP1}, 5851 #'LocalControlDescriptor'{streamMode = SM2, 5852 reserveValue = RV2, 5853 reserveGroup = RG2, 5854 propertyParms = PP2}) -> 5855 validate( 5856 fun() -> chk_opt_StreamMode(SM1, SM2) end, 5857 'LocalControlDescriptor'), 5858 validate( 5859 fun() -> chk_opt_BOOLEAN(RV1, RV2) end, 5860 'LocalControlDescriptor_reserveValue'), 5861 validate( 5862 fun() -> chk_opt_BOOLEAN(RG1, RG2) end, 5863 'LocalControlDescriptor_reserveGroup'), 5864 chk_LocalControlDescriptor_propertyParms(PP1, PP2), 5865 ok; 5866chk_LocalControlDescriptor(LCD1, LCD2) -> 5867 wrong_type('LocalControlDescriptor', LCD1, LCD2). 5868 5869 5870chk_LocalControlDescriptor_propertyParms([], []) -> 5871 ok; 5872chk_LocalControlDescriptor_propertyParms([] = PP1, PP2) -> 5873 not_equal('LocalControlDescriptor_propertyParms', PP1, PP2); 5874chk_LocalControlDescriptor_propertyParms(PP1, [] = PP2) -> 5875 not_equal('LocalControlDescriptor_propertyParms', PP1, PP2); 5876chk_LocalControlDescriptor_propertyParms([H|T1], [H|T2]) -> 5877 case is_PropertyParm(H) of 5878 true -> 5879 chk_LocalControlDescriptor_propertyParms(T1, T2); 5880 false -> 5881 wrong_type('LocalControlDescriptor_propertyParms_val', H) 5882 end; 5883chk_LocalControlDescriptor_propertyParms([H1|T1], [H2|T2]) -> 5884 validate(fun() -> chk_PropertyParm(H1, H2) end, 5885 'LocalControlDescriptor_propertyParms_val'), 5886 chk_LocalControlDescriptor_propertyParms(T1, T2); 5887chk_LocalControlDescriptor_propertyParms(PP1, PP2) -> 5888 wrong_type('LocalControlDescriptor_propertyParms', PP1, PP2). 5889 5890 5891%% -- StreamMode -- 5892 5893is_opt_StreamMode(asn1_NOVALUE) -> 5894 true; 5895is_opt_StreamMode(SM) -> 5896 is_StreamMode(SM). 5897 5898is_StreamMode(SM) -> 5899 lists:member(SM, [sendOnly, recvOnly, sendRecv, inactive, loopBack]). 5900 5901chk_opt_StreamMode(asn1_NOVALUE, asn1_NOVALUE) -> 5902 ok; 5903chk_opt_StreamMode(SM1, SM2) -> 5904 chk_StreamMode(SM1, SM2). 5905 5906chk_StreamMode(SM, SM) -> 5907 chk_type(fun is_StreamMode/1, 'StreamMode', SM); 5908chk_StreamMode(SM1, SM2) -> 5909 case (is_StreamMode(SM1) andalso is_StreamMode(SM2)) of 5910 true -> 5911 not_equal('StreamMode', SM1, SM2); 5912 false -> 5913 wrong_type('StreamMode', SM1, SM2) 5914 end. 5915 5916 5917%% -- PropertyParm -- 5918 5919is_opt_PropertyParm(asn1_NOVALUE) -> 5920 true; 5921is_opt_PropertyParm(PP) -> 5922 is_PropertyParm(PP). 5923 5924is_PropertyParm(#'PropertyParm'{name = N, 5925 value = V, 5926 extraInfo = I}) -> 5927 d("is_PropertyParm -> entry with" 5928 "~n N: ~p" 5929 "~n V: ~p" 5930 "~n I: ~p", [N, V, I]), 5931 is_PkgdName(N) andalso 5932 is_PropertyParm_value(V) andalso 5933 is_PropertyParm_extraInfo(I); 5934is_PropertyParm(_) -> 5935 false. 5936 5937is_PropertyParm_value([]) -> 5938 d("is_PropertyParm_value -> entry when done"), 5939 true; 5940is_PropertyParm_value([H|T]) -> 5941 d("is_PropertyParm_value -> entry with" 5942 "~n H: ~p", [H]), 5943 is_OCTET_STRING(H) andalso is_PropertyParm_value(T); 5944is_PropertyParm_value(_) -> 5945 false. 5946 5947is_PropertyParm_extraInfo(asn1_NOVALUE) -> 5948 true; 5949is_PropertyParm_extraInfo({Tag, Val}) -> 5950 d("is_PropertyParm_extraInfo -> entry with" 5951 "~n Tag: ~p" 5952 "~n Val: ~p", [Tag, Val]), 5953 is_PropertyParm_extraInfo_tag(Tag) andalso 5954 is_PropertyParm_extraInfo_val(Tag, Val); 5955is_PropertyParm_extraInfo(_) -> 5956 false. 5957 5958is_PropertyParm_extraInfo_tag(Tag) -> 5959 Tags = [relation, range, sublist], 5960 lists:member(Tag, Tags). 5961 5962is_PropertyParm_extraInfo_val(relation, Val) -> 5963 is_Relation(Val); 5964is_PropertyParm_extraInfo_val(range, Val) -> 5965 is_BOOLEAN(Val); 5966is_PropertyParm_extraInfo_val(sublist, Val) -> 5967 is_BOOLEAN(Val). 5968 5969 5970chk_opt_PropertyParm(asn1_NOVALUE, asn1_NOVALUE) -> 5971 ok; 5972chk_opt_PropertyParm(P1, P2) -> 5973 chk_PropertyParm(P1, P2). 5974 5975chk_PropertyParm(P, P) -> 5976 chk_type(fun is_PropertyParm/1, 'PropertyParm', P); 5977chk_PropertyParm(#'PropertyParm'{name = N1, 5978 value = V1, 5979 extraInfo = I1}, 5980 #'PropertyParm'{name = N2, 5981 value = V2, 5982 extraInfo = I2}) -> 5983 validate(fun() -> chk_PkgdName(N1, N2) end, 'PropertyParm'), 5984 chk_PropertyParm_value(V1, V2), 5985 chk_PropertyParm_extraInfo(I1, I2), 5986 ok; 5987chk_PropertyParm(P1, P2) -> 5988 wrong_type('PropertyParm', P1, P2). 5989 5990chk_PropertyParm_value([], []) -> 5991 ok; 5992chk_PropertyParm_value([] = V1, V2) -> 5993 not_equal('PropertyParm_value', V1, V2); 5994chk_PropertyParm_value(V1, [] = V2) -> 5995 not_equal('PropertyParm_value', V1, V2); 5996chk_PropertyParm_value([H|T1], [H|T2]) -> 5997 case is_OCTET_STRING(H) of 5998 true -> 5999 chk_PropertyParm_value(T1, T2); 6000 false -> 6001 wrong_type('PropertyParm_value_val', H) 6002 end; 6003chk_PropertyParm_value([H1|_], [H2|_]) -> 6004 case (is_OCTET_STRING(H1) andalso is_OCTET_STRING(H2)) of 6005 true -> 6006 not_equal('PropertyParm_value_val', H1, H2); 6007 false -> 6008 wrong_type('PropertyParm_value_val', H1, H2) 6009 end; 6010chk_PropertyParm_value(V1, V2) -> 6011 wrong_type('PropertyParm_value', V1, V2). 6012 6013chk_PropertyParm_extraInfo(EI, EI) -> 6014 chk_type(fun is_PropertyParm_extraInfo/1, 'PropertyParm_extraInfo', EI); 6015chk_PropertyParm_extraInfo({Tag, Val1} = EI1, {Tag, Val2} = EI2) -> 6016 case (is_PropertyParm_extraInfo_tag(Tag) and 6017 is_PropertyParm_extraInfo_val(Tag, Val1) and 6018 is_PropertyParm_extraInfo_val(Tag, Val2)) of 6019 true -> 6020 chk_PropertyParm_extraInfo_val(Tag, Val1, Val2); 6021 false -> 6022 wrong_type('PropertyParm_extraInfo', EI1, EI2) 6023 end; 6024chk_PropertyParm_extraInfo({Tag1, Val1} = EI1, {Tag2, Val2} = EI2) -> 6025 case ((is_PropertyParm_extraInfo_tag(Tag1) and 6026 is_PropertyParm_extraInfo_val(Tag1, Val1)) and 6027 (is_PropertyParm_extraInfo_tag(Tag2) and 6028 is_PropertyParm_extraInfo_val(Tag2, Val2))) of 6029 true -> 6030 not_equal('PropertyParm_extraInfo', EI1, EI2); 6031 false -> 6032 wrong_type('PropertyParm_extraInfo', EI1, EI2) 6033 end; 6034chk_PropertyParm_extraInfo(EI1, EI2) -> 6035 wrong_type('PropertyParm_extraInfo', EI1, EI2). 6036 6037chk_PropertyParm_extraInfo_val(relation, Val1, Val2) -> 6038 validate(fun() -> chk_Relation(Val1, Val2) end, 'PropertyParm_extraInfo'); 6039chk_PropertyParm_extraInfo_val(range, Val1, Val2) -> 6040 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 'PropertyParm_extraInfo'); 6041chk_PropertyParm_extraInfo_val(sublist, Val1, Val2) -> 6042 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 'PropertyParm_extraInfo'). 6043 6044 6045%% -- Name -- 6046 6047is_Name(N) -> 6048 %% Binary: is_OCTET_STRING(N, {exact, 2}). 6049 case is_OCTET_STRING(N, {range, 1, 64}) of 6050 true -> 6051 is_NAME(N); 6052 false -> 6053 false 6054 end. 6055 6056is_NAME([H|T]) when H =< $z, $a =< H -> 6057 is_NAME2(T); 6058is_NAME([H|T]) when H =< $Z, $A =< H -> 6059 is_NAME2(T); 6060is_NAME(_) -> 6061 false. 6062 6063is_NAME2([]) -> 6064 true; 6065is_NAME2([$_|T]) -> 6066 is_NAME2(T); 6067is_NAME2([H|T]) when H =< $z, $a =< H -> 6068 is_NAME2(T); 6069is_NAME2([H|T]) when H =< $Z, $A =< H -> 6070 is_NAME2(T); 6071is_NAME2([H|T]) when H =< $9, $0 =< H -> 6072 is_NAME2(T); 6073is_NAME2(_) -> 6074 false. 6075 6076 6077 6078chk_Name(N, N) -> 6079 chk_type(fun is_Name/1, 'Name', N); 6080chk_Name(N1, N2) -> 6081 case (is_Name(N1) andalso is_Name(N2)) of 6082 true -> 6083 not_equal('Name', N1, N2); 6084 false -> 6085 wrong_type('Name', N1, N2) 6086 end. 6087 6088 6089%% -- PkgdName -- 6090 6091%% PkgdName is either "AB/CD" or just plain "ABCD" 6092%% Note that in ASN.1 the parts is exactly 2 char 6093%% each, unless you don't use the native config 6094%% option. In text and in binary without the native 6095%% option, it is 63 + 1 chars for each. 6096is_PkgdName(N) -> 6097 d("is_PkgdName -> entry with" 6098 "~n N: ~p", [N]), 6099 case string:tokens(N, "/") of 6100 ["*" = PackageName, "*" = ItemID] -> 6101 d("is_PkgdName -> tokenized (0): " 6102 "~n PackageName: ~p" 6103 "~n ItemID: ~p", [PackageName, ItemID]), 6104 true; 6105 [PackageName, "*" = ItemID] -> 6106 d("is_PkgdName -> tokenized (1): " 6107 "~n PackageName: ~p" 6108 "~n ItemID: ~p", [PackageName, ItemID]), 6109 is_Name(PackageName); 6110 [PackageName, ItemID] -> 6111 d("is_PkgdName -> tokenized (2): " 6112 "~n PackageName: ~p" 6113 "~n ItemID: ~p", [PackageName, ItemID]), 6114 is_Name(PackageName) andalso is_Name(ItemID); 6115 _ -> 6116 is_Name(N) 6117 end. 6118 6119chk_PkgdName(N, N) -> 6120 case is_PkgdName(N) of 6121 true -> 6122 ok; 6123 false -> 6124 wrong_type('PkgdName', N, N) 6125 end; 6126chk_PkgdName(N1, N2) -> 6127 case (is_PkgdName(N1) andalso is_PkgdName(N2)) of 6128 true -> 6129 not_equal('PkgdName', N1, N2); 6130 false -> 6131 wrong_type('PkgdName', N1, N2) 6132 end. 6133 6134 6135%% -- Relation -- 6136 6137is_Relation(R) -> 6138 lists:member(R, [greaterThan, smallerThan, unequalTo]). 6139 6140chk_Relation(R, R) -> 6141 chk_type(fun is_Relation/1, 'Relation', R); 6142chk_Relation(R1, R2) -> 6143 case (is_Relation(R1) andalso is_Relation(R2)) of 6144 true -> 6145 not_equal('Relation', R1, R2); 6146 false -> 6147 wrong_type('Relation', R1, R2) 6148 end. 6149 6150 6151%% -- LocalRemoteDescriptor -- 6152 6153is_opt_LocalRemoteDescriptor(D) -> 6154 d("is_LocalRemoteDescriptor -> entry"), 6155 is_OPTIONAL(fun is_LocalRemoteDescriptor/1, D). 6156 6157is_LocalRemoteDescriptor(#'LocalRemoteDescriptor'{propGrps = PGs}) -> 6158 d("is_LocalRemoteDescriptor -> entry with" 6159 "~n PGs: ~p", [PGs]), 6160 is_LocalRemoteDescriptor_propGrps(PGs); 6161is_LocalRemoteDescriptor(_) -> 6162 false. 6163 6164is_LocalRemoteDescriptor_propGrps([]) -> 6165 true; 6166is_LocalRemoteDescriptor_propGrps([H|T]) -> 6167 is_PropertyGroup(H) andalso is_LocalRemoteDescriptor_propGrps(T); 6168is_LocalRemoteDescriptor_propGrps(_) -> 6169 false. 6170 6171chk_opt_LocalRemoteDescriptor(D1, D2) -> 6172 chk_OPTIONAL('LocalRemoteDescriptor', D1, D2, 6173 fun is_LocalRemoteDescriptor/1, 6174 fun chk_LocalRemoteDescriptor/2). 6175 6176chk_LocalRemoteDescriptor(LRD, LRD) -> 6177 chk_type(fun is_LocalRemoteDescriptor/1, 'LocalRemoteDescriptor', LRD); 6178chk_LocalRemoteDescriptor(#'LocalRemoteDescriptor'{propGrps = PG1}, 6179 #'LocalRemoteDescriptor'{propGrps = PG2}) -> 6180 chk_LocalRemoteDescriptor_propGrps(PG1, PG2), 6181 ok; 6182chk_LocalRemoteDescriptor(LRD1, LRD2) -> 6183 wrong_type('LocalRemoteDescriptor', LRD1, LRD2). 6184 6185chk_LocalRemoteDescriptor_propGrps([], []) -> 6186 ok; 6187chk_LocalRemoteDescriptor_propGrps([] = PG1, PG2) -> 6188 not_equal('LocalRemoteDescriptor_propGrps', PG1, PG2); 6189chk_LocalRemoteDescriptor_propGrps(PG1, [] = PG2) -> 6190 not_equal('LocalRemoteDescriptor_propGrps', PG1, PG2); 6191chk_LocalRemoteDescriptor_propGrps([H|T1], [H|T2]) -> 6192 case is_PropertyGroup(H) of 6193 true -> 6194 chk_LocalRemoteDescriptor_propGrps(T1, T2); 6195 false -> 6196 wrong_type('LocalRemoteDescriptor_propGrps_val', H) 6197 end; 6198chk_LocalRemoteDescriptor_propGrps([H1|T1], [H2|T2]) -> 6199 validate(fun() -> chk_PropertyGroup(H1, H2) end, 6200 'LocalRemoteDescriptor_propGrps_val'), 6201 chk_LocalRemoteDescriptor_propGrps(T1, T2); 6202chk_LocalRemoteDescriptor_propGrps(PG1, PG2) -> 6203 wrong_type('LocalRemoteDescriptor_propGrps', PG1, PG2). 6204 6205 6206%% -- PropertyGroup -- 6207 6208is_PropertyGroup([]) -> 6209 true; 6210is_PropertyGroup([H|T]) -> 6211 is_PropertyParm(H) andalso is_PropertyGroup(T); 6212is_PropertyGroup(_) -> 6213 false. 6214 6215chk_PropertyGroup([], []) -> 6216 ok; 6217chk_PropertyGroup([] = PG1, PG2) -> 6218 not_equal('PropertyGroup', PG1, PG2); 6219chk_PropertyGroup(PG1, [] = PG2) -> 6220 not_equal('PropertyGroup', PG1, PG2); 6221chk_PropertyGroup([H|T1], [H|T2]) -> 6222 case is_PropertyParm(H) of 6223 true -> 6224 chk_PropertyGroup(T1, T2); 6225 false -> 6226 wrong_type('PropertyGroup_val', H) 6227 end; 6228chk_PropertyGroup([H1|T1], [H2|T2]) -> 6229 validate(fun() -> chk_PropertyParm(H1, H2) end, 'PropertyGroup_val'), 6230 chk_PropertyGroup(T1, T2); 6231chk_PropertyGroup(PG1, PG2) -> 6232 wrong_type('PropertyGroup', PG1, PG2). 6233 6234 6235%% -- TerminationStateDescriptor -- 6236 6237is_opt_TerminationStateDescriptor(D) -> 6238 is_OPTIONAL(fun is_TerminationStateDescriptor/1, D). 6239 6240is_TerminationStateDescriptor( 6241 #'TerminationStateDescriptor'{propertyParms = PP, 6242 eventBufferControl = EBC, 6243 serviceState = SS}) -> 6244 is_TerminationStateDescriptor_propertyParms(PP) andalso 6245 is_opt_EventBufferControl(EBC) andalso 6246 is_opt_ServiceState(SS); 6247is_TerminationStateDescriptor(_) -> 6248 false. 6249 6250is_TerminationStateDescriptor_propertyParms([]) -> 6251 true; 6252is_TerminationStateDescriptor_propertyParms([H|T]) -> 6253 is_PropertyParm(H) andalso is_TerminationStateDescriptor_propertyParms(T); 6254is_TerminationStateDescriptor_propertyParms(_) -> 6255 false. 6256 6257chk_opt_TerminationStateDescriptor(D1, D2) -> 6258 chk_OPTIONAL('TerminationStateDescriptor', D1, D2, 6259 fun is_TerminationStateDescriptor/1, 6260 fun chk_TerminationStateDescriptor/2). 6261 6262chk_TerminationStateDescriptor(D, D) -> 6263 chk_type(fun is_TerminationStateDescriptor/1, 6264 'TerminationStateDescriptor', D); 6265chk_TerminationStateDescriptor( 6266 #'TerminationStateDescriptor'{propertyParms = PP1, 6267 eventBufferControl = EBC1, 6268 serviceState = SS1}, 6269 #'TerminationStateDescriptor'{propertyParms = PP2, 6270 eventBufferControl = EBC2, 6271 serviceState = SS2}) -> 6272 chk_TerminationStateDescriptor_propertyParms(PP1, PP2), 6273 validate( 6274 fun() -> 6275 chk_opt_EventBufferControl(EBC1, EBC2) 6276 end, 6277 'TerminationStateDescriptor'), 6278 validate( 6279 fun() -> 6280 chk_opt_ServiceState(SS1, SS2) 6281 end, 6282 'TerminationStateDescriptor'), 6283 ok; 6284chk_TerminationStateDescriptor(D1, D2) -> 6285 wrong_type('TerminationStateDescriptor', D1, D2). 6286 6287 6288chk_TerminationStateDescriptor_propertyParms([], []) -> 6289 ok; 6290chk_TerminationStateDescriptor_propertyParms([] = P1, P2) -> 6291 not_equal('TerminationStateDescriptor_propertyParms', P1, P2); 6292chk_TerminationStateDescriptor_propertyParms(P1, [] = P2) -> 6293 not_equal('TerminationStateDescriptor_propertyParms', P1, P2); 6294chk_TerminationStateDescriptor_propertyParms([H|T1], [H|T2]) -> 6295 case is_PropertyParm(H) of 6296 true -> 6297 chk_TerminationStateDescriptor_propertyParms(T1, T2); 6298 false -> 6299 wrong_type('TerminationStateDescriptor_propertyParms_val', H) 6300 end; 6301chk_TerminationStateDescriptor_propertyParms([H1|_], [H2|_]) -> 6302 case (is_PropertyParm(H1) andalso is_PropertyParm(H2)) of 6303 true -> 6304 not_equal('TerminationStateDescriptor_propertyParms_val', H1, H2); 6305 false -> 6306 wrong_type('TerminationStateDescriptor_propertyParms_val', H1, H2) 6307 end; 6308chk_TerminationStateDescriptor_propertyParms(P1, P2) -> 6309 wrong_type('TerminationStateDescriptor_propertyParms', P1, P2). 6310 6311 6312%% -- EventBufferControl -- 6313 6314is_opt_EventBufferControl(asn1_NOVALUE) -> 6315 true; 6316is_opt_EventBufferControl(EBC) -> 6317 is_EventBufferControl(EBC). 6318 6319is_EventBufferControl(EBC) -> 6320 lists:member(EBC, [off, lockStep]). 6321 6322chk_opt_EventBufferControl(asn1_NOVALUE, asn1_NOVALUE) -> 6323 ok; 6324chk_opt_EventBufferControl(EBC1, EBC2) -> 6325 chk_EventBufferControl(EBC1, EBC2). 6326 6327chk_EventBufferControl(EBC, EBC) -> 6328 chk_type(fun is_EventBufferControl/1, 'EventBufferControl', EBC); 6329chk_EventBufferControl(EBC1, EBC2) -> 6330 case (is_EventBufferControl(EBC1) andalso is_EventBufferControl(EBC2)) of 6331 true -> 6332 not_equal('EventBufferControl', EBC1, EBC2); 6333 false -> 6334 wrong_type('EventBufferControl', EBC1, EBC2) 6335 end. 6336 6337 6338%% -- ServiceState -- 6339 6340is_opt_ServiceState(asn1_NOVALUE) -> 6341 true; 6342is_opt_ServiceState(SS) -> 6343 is_ServiceState(SS). 6344 6345is_ServiceState(SS) -> 6346 lists:member(SS, [test, outOfSvc, inSvc]). 6347 6348chk_opt_ServiceState(asn1_NOVALUE, asn1_NOVALUE) -> 6349 ok; 6350chk_opt_ServiceState(SS1, SS2) -> 6351 chk_ServiceState(SS1, SS2). 6352 6353chk_ServiceState(SS, SS) -> 6354 chk_type(fun is_ServiceState/1, 'ServiceState', SS); 6355chk_ServiceState(SS1, SS2) -> 6356 case (is_ServiceState(SS1) andalso is_ServiceState(SS2)) of 6357 true -> 6358 not_equal('ServiceState', SS1, SS2); 6359 false -> 6360 wrong_type('ServiceState', SS1, SS2) 6361 end. 6362 6363 6364%% -- MuxDescriptor -- 6365 6366is_MuxDescriptor(#'MuxDescriptor'{muxType = MT, 6367 termList = TL, 6368 nonStandardData = NSD}) -> 6369 is_MuxType(MT) andalso 6370 is_MuxDescriptor_termList(TL) andalso 6371 is_NonStandardData(NSD); 6372is_MuxDescriptor(_) -> 6373 false. 6374 6375is_MuxDescriptor_termList([]) -> 6376 true; 6377is_MuxDescriptor_termList([H|T]) -> 6378 is_TerminationID(H) andalso is_MuxDescriptor_termList(T); 6379is_MuxDescriptor_termList(_) -> 6380 false. 6381 6382chk_MuxDescriptor(D, D) -> 6383 chk_type(fun is_MuxDescriptor/1, 'MuxDescriptor', D); 6384chk_MuxDescriptor(#'MuxDescriptor'{muxType = MT1, 6385 termList = TL1, 6386 nonStandardData = NSD1}, 6387 #'MuxDescriptor'{muxType = MT2, 6388 termList = TL2, 6389 nonStandardData = NSD2}) -> 6390 validate(fun() -> chk_MuxType(MT1, MT2) end, 'MuxDescriptor'), 6391 chk_MuxDescriptor_termList(TL1, TL2), 6392 validate(fun() -> chk_NonStandardData(NSD1, NSD2) end, 'MuxDescriptor'), 6393 ok; 6394chk_MuxDescriptor(D1, D2) -> 6395 wrong_type('MuxDescriptor', D1, D2). 6396 6397chk_MuxDescriptor_termList([], []) -> 6398 ok; 6399chk_MuxDescriptor_termList([] = TL1, TL2) -> 6400 not_equal('MuxDescriptor_termList', TL1, TL2); 6401chk_MuxDescriptor_termList(TL1, [] = TL2) -> 6402 not_equal('MuxDescriptor_termList', TL1, TL2); 6403chk_MuxDescriptor_termList([H|T1], [H|T2]) -> 6404 case is_TerminationID(H) of 6405 true -> 6406 chk_MuxDescriptor_termList(T1, T2); 6407 false -> 6408 wrong_type('MuxDescriptor_termList_val', H) 6409 end; 6410chk_MuxDescriptor_termList([H1|T1], [H2|T2]) -> 6411 validate(fun() -> chk_TerminationID(H1, H2) end, 6412 'MuxDescriptor_termList_val'), 6413 chk_MuxDescriptor_termList(T1, T2); 6414chk_MuxDescriptor_termList(TL1, TL2) -> 6415 wrong_type('MuxDescriptor_termList', TL1, TL2). 6416 6417 6418%% -- MuxType -- 6419 6420is_MuxType(MT) -> 6421 lists:member(MT, [h221, h223, h226, v76, nx64k]). 6422 6423chk_MuxType(MT, MT) -> 6424 chk_type(fun is_MuxType/1, 'MuxType', MT); 6425chk_MuxType(MT1, MT2) -> 6426 case (is_MuxType(MT1) andalso is_MuxType(MT2)) of 6427 true -> 6428 not_equal('MuxType', MT1, MT2); 6429 false -> 6430 wrong_type('MuxType', MT1, MT2) 6431 end. 6432 6433 6434%% -- StreamID -- 6435 6436is_opt_StreamID(V) -> 6437 is_OPTIONAL(fun is_StreamID/1, V). 6438 6439is_StreamID(V) -> 6440 d("is_StreamID -> entry with" 6441 "~n V: ~p", [V]), 6442 is_INTEGER(V, {range, 0, 65535}). 6443 6444chk_opt_StreamID(V1, V2) -> 6445 chk_OPTIONAL('StreamID', V1, V2, fun is_StreamID/1, fun chk_StreamID/2). 6446 6447chk_StreamID(ID, ID) -> 6448 chk_type(fun is_StreamID/1, 'StreamID', ID); 6449chk_StreamID(ID1, ID2) -> 6450 case (is_StreamID(ID1) andalso is_StreamID(ID2)) of 6451 true -> 6452 not_equal('StreamID', ID1, ID2); 6453 false -> 6454 wrong_type('StreamID', ID1, ID2) 6455 end. 6456 6457 6458%% -- EventsDescriptor -- 6459 6460is_EventsDescriptor(#'EventsDescriptor'{requestID = RID, 6461 eventList = EVL}) -> 6462 d("is_EventsDescriptor -> entry with" 6463 "~n RID: ~p" 6464 "~n EVL: ~p", [RID, EVL]), 6465 is_opt_RequestID(RID) andalso is_EventsDescriptor_eventList(EVL); 6466is_EventsDescriptor(_) -> 6467 false. 6468 6469is_EventsDescriptor_eventList([]) -> 6470 true; 6471is_EventsDescriptor_eventList([H|T]) -> 6472 is_RequestedEvent(H) andalso is_EventsDescriptor_eventList(T); 6473is_EventsDescriptor_eventList(_) -> 6474 false. 6475 6476chk_EventsDescriptor(D, D) -> 6477 chk_type(fun is_EventsDescriptor/1, 'EventsDescriptor', D); 6478chk_EventsDescriptor(#'EventsDescriptor'{requestID = RID1, 6479 eventList = EVL1}, 6480 #'EventsDescriptor'{requestID = RID2, 6481 eventList = EVL2}) -> 6482 validate(fun() -> chk_opt_RequestID(RID1, RID2) end, 'EventsDescriptor'), 6483 chk_EventsDescriptor_eventList(EVL1, EVL2), 6484 ok; 6485chk_EventsDescriptor(D1, D2) -> 6486 wrong_type('EventsDescriptor', D1, D2). 6487 6488chk_EventsDescriptor_eventList([], []) -> 6489 ok; 6490chk_EventsDescriptor_eventList([] = EVL1, EVL2) -> 6491 not_equal('EventsDescriptor_eventList', EVL1, EVL2); 6492chk_EventsDescriptor_eventList(EVL1, [] = EVL2) -> 6493 not_equal('EventsDescriptor_eventList', EVL1, EVL2); 6494chk_EventsDescriptor_eventList([H|T1], [H|T2]) -> 6495 case is_RequestedEvent(H) of 6496 true -> 6497 chk_EventsDescriptor_eventList(T1, T2); 6498 false -> 6499 wrong_type('EventsDescriptor_eventList_val', H) 6500 end; 6501chk_EventsDescriptor_eventList([H1|T1], [H2|T2]) -> 6502 validate(fun() -> chk_RequestedEvent(H1, H2) end, 6503 'EventsDescriptor_eventList_val'), 6504 chk_EventsDescriptor_eventList(T1, T2); 6505chk_EventsDescriptor_eventList(EVL1, EVL2) -> 6506 wrong_type('EventsDescriptor_eventList', EVL1, EVL2). 6507 6508 6509%% -- RequestedEvent -- 6510 6511is_RequestedEvent(#'RequestedEvent'{pkgdName = N, 6512 streamID = SID, 6513 eventAction = EA, 6514 evParList = EPL}) -> 6515 d("is_RequestedEvent -> entry with" 6516 "~n N: ~p" 6517 "~n SID: ~p" 6518 "~n EA: ~p" 6519 "~n EPL: ~p", [N, SID, EA, EPL]), 6520 is_PkgdName(N) andalso 6521 is_opt_StreamID(SID) andalso 6522 is_opt_RequestedActions(EA) andalso 6523 is_RequestedEvent_evParList(EPL); 6524is_RequestedEvent(_) -> 6525 false. 6526 6527is_RequestedEvent_evParList([]) -> 6528 true; 6529is_RequestedEvent_evParList([H|T]) -> 6530 is_EventParameter(H) andalso is_RequestedEvent_evParList(T); 6531is_RequestedEvent_evParList(_) -> 6532 false. 6533 6534chk_RequestedEvent(RE, RE) -> 6535 chk_type(fun is_RequestedEvent/1, 'RequestedEvent', RE); 6536chk_RequestedEvent(#'RequestedEvent'{pkgdName = N1, 6537 streamID = SID1, 6538 eventAction = EA1, 6539 evParList = EPL1}, 6540 #'RequestedEvent'{pkgdName = N2, 6541 streamID = SID2, 6542 eventAction = EA2, 6543 evParList = EPL2}) -> 6544 validate(fun() -> chk_PkgdName(N1, N2) end, 'RequestedEvent'), 6545 validate(fun() -> chk_opt_StreamID(SID1, SID2) end, 'RequestedEvent'), 6546 validate(fun() -> chk_opt_RequestedActions(EA1, EA2) end, 6547 'RequestedEvent'), 6548 chk_RequestedEvent_evParList(EPL1, EPL2), 6549 ok; 6550chk_RequestedEvent(RE1, RE2) -> 6551 wrong_type('RequestedEvent', RE1, RE2). 6552 6553chk_RequestedEvent_evParList([], []) -> 6554 ok; 6555chk_RequestedEvent_evParList([] = EPL1, EPL2) -> 6556 not_equal('RequestedEvent_evParList', EPL1, EPL2); 6557chk_RequestedEvent_evParList(EPL1, [] = EPL2) -> 6558 not_equal('RequestedEvent_evParList', EPL1, EPL2); 6559chk_RequestedEvent_evParList([H|T1], [H|T2]) -> 6560 case is_EventParameter(H) of 6561 true -> 6562 chk_RequestedEvent_evParList(T1, T2); 6563 false -> 6564 wrong_type('RequestedEvent_evParList_val', H) 6565 end; 6566chk_RequestedEvent_evParList([H1|T1], [H2|T2]) -> 6567 validate(fun() -> chk_EventParameter(H1, H2) end, 6568 'RequestedEvent_evParList_val'), 6569 chk_RequestedEvent_evParList(T1, T2); 6570chk_RequestedEvent_evParList(EPL1, EPL2) -> 6571 wrong_type('RequestedEvent_evParList', EPL1, EPL2). 6572 6573 6574%% -- RegulatedEmbeddedDescriptor -- 6575 6576is_RegulatedEmbeddedDescriptor( 6577 #'RegulatedEmbeddedDescriptor'{secondEvent = SE, 6578 signalsDescriptor = SD}) -> 6579 is_opt_SecondEventsDescriptor(SE) andalso 6580 is_opt_SignalsDescriptor(SD); 6581is_RegulatedEmbeddedDescriptor(_) -> 6582 false. 6583 6584 6585chk_RegulatedEmbeddedDescriptor( 6586 #'RegulatedEmbeddedDescriptor'{secondEvent = SE1, 6587 signalsDescriptor = SD1}, 6588 #'RegulatedEmbeddedDescriptor'{secondEvent = SE2, 6589 signalsDescriptor = SD2}) -> 6590 chk_RegulatedEmbeddedDescriptor_secondEvent(SE1, SE2), 6591 chk_RegulatedEmbeddedDescriptor_signalsDescriptor(SD1, SD2), 6592 ok; 6593chk_RegulatedEmbeddedDescriptor(RED1, RED2) -> 6594 wrong_type('RegulatedEmbeddedDescriptor', RED1, RED2). 6595 6596chk_RegulatedEmbeddedDescriptor_secondEvent(SE1, SE2) -> 6597 validate(fun() -> chk_opt_SecondEventsDescriptor(SE1, SE2) end, 6598 'RegulatedEmbeddedDescriptor_secondEvent'). 6599 6600chk_RegulatedEmbeddedDescriptor_signalsDescriptor(SD1, SD2) -> 6601 validate(fun() -> chk_opt_SignalsDescriptor(SD1, SD2) end, 6602 'RegulatedEmbeddedDescriptor_signalsDescriptor'). 6603 6604 6605%% -- NotifyBehaviour -- 6606 6607tags_NotifyBehaviour() -> 6608 [ 6609 {notifyImmediate, 6610 fun is_NULL/1, 6611 fun chk_NULL/2}, 6612 6613 {notifyRegulated, 6614 fun is_RegulatedEmbeddedDescriptor/1, 6615 fun chk_RegulatedEmbeddedDescriptor/2}, 6616 6617 {neverNotify, 6618 fun is_NULL/1, 6619 fun chk_NULL/2} 6620 ]. 6621 6622is_opt_NotifyBehaviour(asn1_NOVALUE) -> 6623 true; 6624is_opt_NotifyBehaviour(NB) -> 6625 is_NotifyBehaviour(NB). 6626 6627is_NotifyBehaviour(NB) -> 6628 is_CHOICE(NB, tags_NotifyBehaviour()). 6629 6630chk_opt_NotifyBehaviour(asn1_NOVALUE, asn1_NOVALUE) -> 6631 ok; 6632chk_opt_NotifyBehaviour(NB1, NB2) -> 6633 chk_NotifyBehaviour(NB1, NB2). 6634 6635chk_NotifyBehaviour(NB1, NB2) -> 6636 chk_CHOICE(NB1, NB2, 'NotifyBehaviour', tags_NotifyBehaviour()). 6637 6638 6639%% -- RequestedActions -- 6640 6641is_opt_RequestedActions(asn1_NOVALUE) -> 6642 true; 6643is_opt_RequestedActions(RA) -> 6644 is_RequestedActions(RA). 6645 6646is_RequestedActions(#'RequestedActions'{keepActive = KA, 6647 eventDM = EDM, 6648 secondEvent = SE, 6649 signalsDescriptor = SD, 6650 notifyBehaviour = NB, 6651 resetEventsDescriptor = RED}) -> 6652 d("is_RequestedActions -> entry with" 6653 "~n KA: ~p" 6654 "~n EDM: ~p" 6655 "~n SE: ~p" 6656 "~n SD: ~p" 6657 "~n NB: ~p" 6658 "~n RED: ~p", [KA, EDM, SE, SD, NB, RED]), 6659 is_opt_BOOLEAN(KA) andalso 6660 is_opt_EventDM(EDM) andalso 6661 is_opt_SecondEventsDescriptor(SE) andalso 6662 is_opt_SignalsDescriptor(SD) andalso 6663 is_opt_NotifyBehaviour(SD) andalso 6664 is_opt_NULL(SD); 6665is_RequestedActions(_) -> 6666 false. 6667 6668chk_opt_RequestedActions(asn1_NOVALUE, asn1_NOVALUE) -> 6669 ok; 6670chk_opt_RequestedActions(RA1, RA2) -> 6671 chk_RequestedActions(RA1, RA2). 6672 6673chk_RequestedActions(RA, RA) -> 6674 chk_type(fun is_RequestedActions/1, 'RequestedActions', RA); 6675chk_RequestedActions(#'RequestedActions'{keepActive = KA1, 6676 eventDM = EDM1, 6677 secondEvent = SE1, 6678 signalsDescriptor = SD1, 6679 notifyBehaviour = NB1, 6680 resetEventsDescriptor = RED1}, 6681 #'RequestedActions'{keepActive = KA2, 6682 eventDM = EDM2, 6683 secondEvent = SE2, 6684 signalsDescriptor = SD2, 6685 notifyBehaviour = NB2, 6686 resetEventsDescriptor = RED2}) -> 6687 chk_RequestedActions_keepActive(KA1, KA2), 6688 chk_RequestedActions_eventDM(EDM1, EDM2), 6689 chk_RequestedActions_secondEvent(SE1, SE2), 6690 chk_RequestedActions_signalsDescriptor(SD1, SD2), 6691 chk_RequestedActions_notifyBehaviour(NB1, NB2), 6692 chk_RequestedActions_resetEventsDescriptor(RED1, RED2), 6693 ok; 6694chk_RequestedActions(RA1, RA2) -> 6695 wrong_type('RequestedActions', RA1, RA2). 6696 6697chk_RequestedActions_keepActive(V1, V2) -> 6698 validate(fun() -> chk_opt_BOOLEAN(V1, V2) end, 6699 'RequestedActions_keepActive'). 6700 6701chk_RequestedActions_eventDM(V1, V2) -> 6702 validate(fun() -> chk_opt_EventDM(V1, V2) end, 6703 'RequestedActions_eventDM'). 6704 6705chk_RequestedActions_secondEvent(V1, V2) -> 6706 validate(fun() -> chk_opt_SecondEventsDescriptor(V1, V2) end, 6707 'RequestedActions_secondEvent'). 6708 6709chk_RequestedActions_signalsDescriptor(V1, V2) -> 6710 validate(fun() -> chk_opt_SignalsDescriptor(V1, V2) end, 6711 'RequestedActions_signalsDescriptor'). 6712 6713chk_RequestedActions_notifyBehaviour(V1, V2) -> 6714 validate(fun() -> chk_opt_NotifyBehaviour(V1, V2) end, 6715 'RequestedActions_notifyBehaviour'). 6716 6717chk_RequestedActions_resetEventsDescriptor(V1, V2) -> 6718 validate(fun() -> chk_opt_NULL(V1, V2) end, 6719 'RequestedActions_resetEventsDescriptor'). 6720 6721 6722%% -- EventDM -- 6723 6724is_opt_EventDM(EDM) -> 6725 is_OPTIONAL(fun is_EventDM/1, EDM). 6726 6727is_EventDM({Tag, Val}) -> 6728 is_EventDM_tag(Tag) andalso is_EventDM_val(Tag, Val); 6729is_EventDM(_) -> 6730 false. 6731 6732is_EventDM_tag(Tag) -> 6733 Tags = [digitMapName, digitMapValue], 6734 lists:member(Tag, Tags). 6735 6736is_EventDM_val(digitMapName, Val) -> 6737 is_DigitMapName(Val); 6738is_EventDM_val(digitMapValue, Val) -> 6739 is_DigitMapValue(Val). 6740 6741chk_opt_EventDM(EDM1, EDM2) -> 6742 chk_OPTIONAL('EventDM', EDM1, EDM2, fun is_EventDM/1, fun chk_EventDM/2). 6743 6744chk_EventDM(EDM, EDM) -> 6745 chk_type(fun is_EventDM/1, 'EventDM', EDM); 6746chk_EventDM({Tag, Val1} = EDM1, {Tag, Val2} = EDM2) -> 6747 case (is_EventDM_tag(Tag) andalso 6748 is_EventDM_val(Tag, Val1) andalso 6749 is_EventDM_val(Tag, Val2)) of 6750 true -> 6751 chk_EventDM_val(Tag, Val1, Val2); 6752 false -> 6753 wrong_type('EventDM', EDM1, EDM2) 6754 end; 6755chk_EventDM({Tag1, Val1} = EDM1, {Tag2, Val2} = EDM2) -> 6756 case ((is_EventDM_tag(Tag1) andalso 6757 is_EventDM_val(Tag1, Val1)) andalso 6758 (is_EventDM_tag(Tag2) andalso 6759 is_EventDM_val(Tag2, Val2))) of 6760 true -> 6761 not_equal('EventDM', EDM1, EDM2); 6762 false -> 6763 wrong_type('EventDM', EDM1, EDM2) 6764 end; 6765chk_EventDM(EDM1, EDM2) -> 6766 wrong_type('EventDM', EDM1, EDM2). 6767 6768chk_EventDM_val(digitMapName, Val1, Val2) -> 6769 validate(fun() -> chk_DigitMapName(Val1, Val2) end, 'EventDM'); 6770chk_EventDM_val(digitMapValue, Val1, Val2) -> 6771 validate(fun() -> chk_DigitMapValue(Val1, Val2) end, 'EventDM'). 6772 6773 6774%% -- SecondEventsDescriptor -- 6775 6776is_opt_SecondEventsDescriptor(asn1_NOVALUE) -> 6777 true; 6778is_opt_SecondEventsDescriptor(D) -> 6779 is_SecondEventsDescriptor(D). 6780 6781is_SecondEventsDescriptor(#'SecondEventsDescriptor'{requestID = RID, 6782 eventList = EL}) -> 6783 is_opt_RequestID(RID) andalso is_SecondEventsDescriptor_eventList(EL); 6784is_SecondEventsDescriptor(_) -> 6785 false. 6786 6787is_SecondEventsDescriptor_eventList([]) -> 6788 true; 6789is_SecondEventsDescriptor_eventList([H|T]) -> 6790 is_SecondRequestedEvent(H) andalso is_SecondEventsDescriptor_eventList(T); 6791is_SecondEventsDescriptor_eventList(_) -> 6792 false. 6793 6794chk_opt_SecondEventsDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 6795 ok; 6796chk_opt_SecondEventsDescriptor(D1, D2) -> 6797 chk_SecondEventsDescriptor(D1, D2). 6798 6799chk_SecondEventsDescriptor(D, D) -> 6800 chk_type(fun is_SecondEventsDescriptor/1, 'SecondEventsDescriptor', D); 6801chk_SecondEventsDescriptor(#'SecondEventsDescriptor'{requestID = RID1, 6802 eventList = EL1}, 6803 #'SecondEventsDescriptor'{requestID = RID2, 6804 eventList = EL2}) -> 6805 validate(fun() -> chk_opt_RequestID(RID1, RID2) end, 6806 'SecondEventsDescriptor'), 6807 chk_SecondEventsDescriptor_eventList(EL1, EL2), 6808 ok; 6809chk_SecondEventsDescriptor(D1, D2) -> 6810 wrong_type('SecondEventsDescriptor', D1, D2). 6811 6812chk_SecondEventsDescriptor_eventList([], []) -> 6813 ok; 6814chk_SecondEventsDescriptor_eventList([] = EL1, EL2) -> 6815 not_equal('SecondEventsDescriptor_eventList', EL1, EL2); 6816chk_SecondEventsDescriptor_eventList(EL1, [] = EL2) -> 6817 not_equal('SecondEventsDescriptor_eventList', EL1, EL2); 6818chk_SecondEventsDescriptor_eventList([H|T1], [H|T2]) -> 6819 case is_SecondRequestedEvent(H) of 6820 true -> 6821 chk_SecondEventsDescriptor_eventList(T1, T2); 6822 false -> 6823 wrong_type('SecondEventsDescriptor_eventList_val', H) 6824 end; 6825chk_SecondEventsDescriptor_eventList([H1|T1], [H2|T2]) -> 6826 validate(fun() -> chk_SecondRequestedEvent(H1, H2) end, 6827 'SecondEventsDescriptor_eventList_val'), 6828 chk_SecondEventsDescriptor_eventList(T1, T2); 6829chk_SecondEventsDescriptor_eventList(L1, L2) -> 6830 wrong_type('SecondEventsDescriptor_eventList_val', L1, L2). 6831 6832 6833%% -- SecondRequestedEvent -- 6834 6835is_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N, 6836 streamID = SID, 6837 eventAction = EA, 6838 evParList = EPL}) -> 6839 is_PkgdName(N) andalso 6840 is_opt_StreamID(SID) andalso 6841 is_opt_SecondRequestedActions(EA) andalso 6842 is_SecondRequestedEvent_evParList(EPL); 6843is_SecondRequestedEvent(_) -> 6844 false. 6845 6846is_SecondRequestedEvent_evParList([]) -> 6847 true; 6848is_SecondRequestedEvent_evParList([H|T]) -> 6849 is_EventParameter(H) andalso is_SecondRequestedEvent_evParList(T); 6850is_SecondRequestedEvent_evParList(_) -> 6851 false. 6852 6853chk_SecondRequestedEvent(RE, RE) -> 6854 chk_type(fun is_SecondRequestedEvent/1, 'SecondRequestedEvent', RE); 6855chk_SecondRequestedEvent(#'SecondRequestedEvent'{pkgdName = N1, 6856 streamID = SID1, 6857 eventAction = EA1, 6858 evParList = EPL1}, 6859 #'SecondRequestedEvent'{pkgdName = N2, 6860 streamID = SID2, 6861 eventAction = EA2, 6862 evParList = EPL2}) -> 6863 validate(fun() -> chk_PkgdName(N1, N2) end, 'SecondRequestedEvent'), 6864 validate(fun() -> chk_opt_StreamID(SID1, SID2) end, 6865 'SecondRequestedEvent'), 6866 validate(fun() -> chk_opt_SecondRequestedActions(EA1, EA2) end, 6867 'SecondRequestedEvent'), 6868 chk_SecondRequestedEvent_evParList(EPL1, EPL2), 6869 ok; 6870chk_SecondRequestedEvent(RE1, RE2) -> 6871 wrong_type('SecondRequestedEvent', RE1, RE2). 6872 6873chk_SecondRequestedEvent_evParList([], []) -> 6874 ok; 6875chk_SecondRequestedEvent_evParList([] = EPL1, EPL2) -> 6876 not_equal('SecondRequestedEvent_evParList', EPL1, EPL2); 6877chk_SecondRequestedEvent_evParList(EPL1, [] = EPL2) -> 6878 not_equal('SecondRequestedEvent_evParList', EPL1, EPL2); 6879chk_SecondRequestedEvent_evParList([H|T1], [H|T2]) -> 6880 case is_EventParameter(H) of 6881 true -> 6882 chk_SecondRequestedEvent_evParList(T1, T2); 6883 false -> 6884 wrong_type('SecondRequestedEvent_evParList_val', H) 6885 end; 6886chk_SecondRequestedEvent_evParList([H1|T1], [H2|T2]) -> 6887 validate(fun() -> chk_EventParameter(H1, H2) end, 6888 'SecondRequestedEvent_evParList_val'), 6889 chk_SecondRequestedEvent_evParList(T1, T2); 6890chk_SecondRequestedEvent_evParList(EPL1, EPL2) -> 6891 wrong_type('SecondRequestedEvent_evParList', EPL1, EPL2). 6892 6893 6894%% -- SecondRequestedActions -- 6895 6896is_opt_SecondRequestedActions(asn1_NOVALUE) -> 6897 true; 6898is_opt_SecondRequestedActions(SRA) -> 6899 is_SecondRequestedActions(SRA). 6900 6901is_SecondRequestedActions( 6902 #'SecondRequestedActions'{keepActive = KA, 6903 eventDM = EDM, 6904 signalsDescriptor = SD, 6905 notifyBehaviour = NB, 6906 resetEventsDescriptor = RED}) -> 6907 is_opt_BOOLEAN(KA) andalso 6908 is_opt_EventDM(EDM) andalso 6909 is_opt_SignalsDescriptor(SD) andalso 6910 is_opt_NotifyBehaviour(NB) andalso 6911 is_opt_NULL(RED); 6912is_SecondRequestedActions(_) -> 6913 false. 6914 6915chk_opt_SecondRequestedActions(asn1_NOVALUE, asn1_NOVALUE) -> 6916 ok; 6917chk_opt_SecondRequestedActions(SRA1, SRA2) -> 6918 chk_SecondRequestedActions(SRA1, SRA2). 6919 6920chk_SecondRequestedActions(SRA, SRA) -> 6921 chk_type(fun is_SecondRequestedActions/1, 'SecondRequestedActions', SRA); 6922chk_SecondRequestedActions( 6923 #'SecondRequestedActions'{keepActive = KA1, 6924 eventDM = EDM1, 6925 signalsDescriptor = SD1, 6926 notifyBehaviour = NB1, 6927 resetEventsDescriptor = RED1}, 6928 #'SecondRequestedActions'{keepActive = KA2, 6929 eventDM = EDM2, 6930 signalsDescriptor = SD2, 6931 notifyBehaviour = NB2, 6932 resetEventsDescriptor = RED2}) -> 6933 chk_SecondRequestedActions_keepActive(KA1, KA2), 6934 chk_SecondRequestedActions_eventDM(EDM1, EDM2), 6935 chk_SecondRequestedActions_signalsDescriptor(SD1, SD2), 6936 chk_SecondRequestedActions_notifyBehaviour(NB1, NB2), 6937 chk_SecondRequestedActions_resetEventsDescriptor(RED1, RED2), 6938 ok; 6939chk_SecondRequestedActions(SRA1, SRA2) -> 6940 wrong_type('SecondRequestedActions', SRA1, SRA2). 6941 6942chk_SecondRequestedActions_keepActive(V1, V2) -> 6943 validate(fun() -> chk_opt_BOOLEAN(V1, V2) end, 6944 'SecondRequestedActions_keepActive'). 6945 6946chk_SecondRequestedActions_eventDM(V1, V2) -> 6947 validate(fun() -> chk_opt_EventDM(V1, V2) end, 6948 'SecondRequestedActions_eventDM'). 6949 6950chk_SecondRequestedActions_signalsDescriptor(V1, V2) -> 6951 validate(fun() -> chk_opt_SignalsDescriptor(V1, V2) end, 6952 'SecondRequestedActions_signalsDescriptor'). 6953 6954chk_SecondRequestedActions_notifyBehaviour(V1, V2) -> 6955 validate(fun() -> chk_opt_NotifyBehaviour(V1, V2) end, 6956 'SecondRequestedActions_notifyBehaviour'). 6957 6958chk_SecondRequestedActions_resetEventsDescriptor(V1, V2) -> 6959 validate(fun() -> chk_opt_NULL(V1, V2) end, 6960 'SecondRequestedActions_resetEventsDescriptor'). 6961 6962 6963%% -- EventBufferDescriptor -- 6964 6965is_EventBufferDescriptor(D) -> 6966 is_SEQUENCE_OF(D, fun is_EventSpec/1). 6967 6968chk_EventBufferDescriptor(D1, D2) -> 6969 chk_SEQUENCE_OF(D1, D2, 'EventBufferDescriptor', 6970 fun is_EventSpec/1, fun chk_EventSpec/2). 6971 6972 6973%% -- EventSpec -- 6974 6975is_EventSpec(#'EventSpec'{eventName = N, 6976 streamID = SID, 6977 eventParList = EPL}) -> 6978 is_EventName(N) andalso 6979 is_opt_StreamID(SID) andalso 6980 is_EventSpec_eventParList(EPL); 6981is_EventSpec(_) -> 6982 false. 6983 6984is_EventSpec_eventParList([]) -> 6985 true; 6986is_EventSpec_eventParList([H|T]) -> 6987 is_EventParameter(H) andalso is_EventSpec_eventParList(T); 6988is_EventSpec_eventParList(_) -> 6989 false. 6990 6991chk_EventSpec(ES, ES) -> 6992 chk_type(fun is_EventSpec/1, 'EventSpec', ES); 6993chk_EventSpec(#'EventSpec'{eventName = N1, 6994 streamID = SID1, 6995 eventParList = EPL1}, 6996 #'EventSpec'{eventName = N2, 6997 streamID = SID2, 6998 eventParList = EPL2}) -> 6999 validate(fun() -> chk_EventName(N1, N2) end, 'EventSpec'), 7000 validate(fun() -> chk_opt_StreamID(SID1, SID2) end, 'EventSpec'), 7001 chk_EventSpec_eventParList(EPL1, EPL2), 7002 ok; 7003chk_EventSpec(ES1, ES2) -> 7004 wrong_type('EventSpec', ES1, ES2). 7005 7006chk_EventSpec_eventParList([], []) -> 7007 ok; 7008chk_EventSpec_eventParList([] = EPL1, EPL2) -> 7009 not_equal('EventSpec_eventParList', EPL1, EPL2); 7010chk_EventSpec_eventParList(EPL1, [] = EPL2) -> 7011 not_equal('EventSpec_eventParList', EPL1, EPL2); 7012chk_EventSpec_eventParList([H|T1], [H|T2]) -> 7013 case is_EventParameter(H) of 7014 true -> 7015 chk_EventSpec_eventParList(T1, T2); 7016 false -> 7017 wrong_type('EventSpec_eventParList_val', H) 7018 end; 7019chk_EventSpec_eventParList([H1|T1], [H2|T2]) -> 7020 validate(fun() -> chk_EventParameter(H1, H2) end, 7021 'EventSpec_eventParList_val'), 7022 chk_EventSpec_eventParList(T1, T2); 7023chk_EventSpec_eventParList(EPL1, EPL2) -> 7024 wrong_type('EventSpec_eventParList', EPL1, EPL2). 7025 7026 7027%% -- SignalsDescriptor -- 7028 7029is_opt_SignalsDescriptor(asn1_NOVALUE) -> 7030 true; 7031is_opt_SignalsDescriptor(D) -> 7032 is_SignalsDescriptor(D). 7033 7034is_SignalsDescriptor(D) -> 7035 is_SEQUENCE_OF(D, fun is_SignalRequest/1). 7036 7037chk_opt_SignalsDescriptor(asn1_NOVALUE, asn1_NOVALUE) -> 7038 ok; 7039chk_opt_SignalsDescriptor(D1, D2) -> 7040 chk_SignalsDescriptor(D1, D2). 7041 7042chk_SignalsDescriptor(D1, D2) -> 7043 chk_SEQUENCE_OF(D1, D2, 'SignalsDescriptor', 7044 fun is_SignalRequest/1, fun chk_SignalRequest/2). 7045 7046 7047%% -- SignalRequest -- 7048 7049tags_SignalRequest() -> 7050 [ 7051 {signal, fun is_Signal/1, fun chk_Signal/2}, 7052 {seqSigList, fun is_SeqSigList/1, fun chk_SeqSigList/2} 7053 ]. 7054 7055is_SignalRequest(SR) -> 7056 is_CHOICE(SR, tags_SignalRequest()). 7057 7058chk_SignalRequest(R1, R2) -> 7059 chk_CHOICE(R1, R2, 'SignalRequest', tags_SignalRequest()). 7060 7061 7062%% -- SeqSigList -- 7063 7064%% fields_SeqSigList() -> 7065%% [ 7066%% {id, 7067%% 'INTEGER(0,65535)', 7068%% fun(ID) -> is_INTEGER(ID, {range, 0, 65535}) end, 7069%% fun(ID1, ID2) -> chk_INTEGER(ID1, ID2, {range, 0, 65535}) end}, 7070 7071%% {signalList, 7072%% 'SEQUENCE OF Signal', 7073%% fun(S) -> 7074%% is_SEQUENCE_OF(S, fun is_Signal/1) 7075%% end, 7076%% fun(S1, S2) -> 7077%% chk_SEQUENCE_OF(S1, S2, fun is_Signal/1, fun chk_Signal/2) 7078%% end} 7079%% ]. 7080 7081%% is_SeqSigList(V) -> 7082%% is_SEQUENCE(V, 'SeqSigList', fields_SeqSigList()). 7083 7084 7085is_SeqSigList(#'SeqSigList'{id = ID, 7086 signalList = SL}) -> 7087 is_INTEGER(ID, {range, 0, 65535}) andalso 7088 is_SeqSigList_signalList(SL); 7089is_SeqSigList(_) -> 7090 false. 7091 7092is_SeqSigList_signalList([]) -> 7093 true; 7094is_SeqSigList_signalList([H|T]) -> 7095 is_Signal(H) andalso is_SeqSigList_signalList(T); 7096is_SeqSigList_signalList(_) -> 7097 false. 7098 7099chk_SeqSigList(L, L) -> 7100 chk_type(fun is_SeqSigList/1, 'SeqSigList', L); 7101chk_SeqSigList(#'SeqSigList'{id = ID1, 7102 signalList = SL1}, 7103 #'SeqSigList'{id = ID2, 7104 signalList = SL2}) -> 7105 validate(fun() -> chk_INTEGER(ID1, ID2, {range, 0, 65535}) end, 7106 'SeqSigList'), 7107 chk_SeqSigList_signalList(SL1, SL2), 7108 ok; 7109chk_SeqSigList(L1, L2) -> 7110 wrong_type('SeqSigList', L1, L2). 7111 7112chk_SeqSigList_signalList([], []) -> 7113 ok; 7114chk_SeqSigList_signalList([] = L1, L2) -> 7115 not_equal('SeqSigList_signalList', L1, L2); 7116chk_SeqSigList_signalList(L1, [] = L2) -> 7117 not_equal('SeqSigList_signalList', L1, L2); 7118chk_SeqSigList_signalList([H|T1], [H|T2]) -> 7119 case is_Signal(H) of 7120 true -> 7121 chk_SeqSigList_signalList(T1, T2); 7122 false -> 7123 wrong_type('SeqSigList_signalList_val', H) 7124 end; 7125chk_SeqSigList_signalList([H1|T1], [H2|T2]) -> 7126 validate(fun() -> chk_Signal(H1, H2) end, 7127 'SeqSigList_signalList_val'), 7128 chk_SeqSigList_signalList(T1, T2); 7129chk_SeqSigList_signalList(L1, L2) -> 7130 wrong_type('SeqSigList_signalList', L1, L2). 7131 7132 7133%% -- Signal -- 7134 7135is_Signal(#'Signal'{signalName = N, 7136 streamID = SID, 7137 sigType = ST, 7138 duration = Dur, 7139 notifyCompletion = NC, 7140 keepActive = KA, 7141 sigParList = SPL, 7142 direction = Dir, 7143 requestID = RID, 7144 intersigDelay = ISD}) -> 7145 d("is_Signal -> entry with" 7146 "~n N: ~p" 7147 "~n SID: ~p" 7148 "~n ST: ~p" 7149 "~n Dur: ~p" 7150 "~n NC: ~p" 7151 "~n KA: ~p" 7152 "~n SPL: ~p" 7153 "~n Dir: ~p" 7154 "~n RID: ~p" 7155 "~n ISD: ~p", [N, SID, ST, Dur, NC, KA, SPL, Dir, RID, ISD]), 7156 is_SignalName(N) andalso 7157 is_opt_StreamID(SID) andalso 7158 is_opt_SignalType(ST) andalso 7159 is_opt_INTEGER(Dur, {range, 0, 65535}) andalso 7160 is_opt_NotifyCompletion(NC) andalso 7161 is_opt_BOOLEAN(KA) andalso 7162 is_Signal_sigParList(SPL) andalso 7163 is_opt_SignalDirection(Dir) andalso 7164 is_opt_RequestID(RID) andalso 7165 is_opt_INTEGER(ISD, {range, 0, 65535}). 7166 7167is_Signal_sigParList([]) -> 7168 true; 7169is_Signal_sigParList([H|T]) -> 7170 is_SigParameter(H) andalso is_Signal_sigParList(T); 7171is_Signal_sigParList(_) -> 7172 false. 7173 7174chk_Signal(S, S) -> 7175 chk_type(fun is_Signal/1, 'Signal', S); 7176chk_Signal(#'Signal'{signalName = N1, 7177 streamID = SID1, 7178 sigType = ST1, 7179 duration = Dur1, 7180 notifyCompletion = NC1, 7181 keepActive = KA1, 7182 sigParList = SPL1, 7183 direction = Dir1, 7184 requestID = RID1, 7185 intersigDelay = ISD1}, 7186 #'Signal'{signalName = N2, 7187 streamID = SID2, 7188 sigType = ST2, 7189 duration = Dur2, 7190 notifyCompletion = NC2, 7191 keepActive = KA2, 7192 sigParList = SPL2, 7193 direction = Dir2, 7194 requestID = RID2, 7195 intersigDelay = ISD2}) -> 7196 chk_Signal_signalName(N1, N2), 7197 chk_Signal_streamID(SID1, SID2), 7198 chk_Signal_sigType(ST1, ST2), 7199 chk_Signal_duration(Dur1, Dur2), 7200 chk_Signal_notifyCompletion(NC1, NC2), 7201 chk_Signal_keepActive(KA1, KA2), 7202 chk_Signal_sigParList(SPL1, SPL2), 7203 chk_Signal_direction(Dir1, Dir2), 7204 chk_Signal_requestID(RID1, RID2), 7205 chk_Signal_intersigDelay(ISD1, ISD2), 7206 ok; 7207chk_Signal(S1, S2) -> 7208 wrong_type('Signal', S1, S2). 7209 7210chk_Signal_signalName(N1, N2) -> 7211 validate(fun() -> chk_SignalName(N1, N2) end, 'Signal_signalName'). 7212 7213chk_Signal_streamID(V1, V2) -> 7214 validate(fun() -> chk_opt_StreamID(V1, V2) end, 'Signal_streamID'). 7215 7216chk_Signal_sigType(V1, V2) -> 7217 validate(fun() -> chk_opt_SignalType(V1, V2) end, 'Signal_sigType'). 7218 7219chk_Signal_duration(V1, V2) -> 7220 validate(fun() -> 7221 chk_opt_INTEGER(V1, V2, {range, 0, 65535}) 7222 end, 7223 'Signal_duration'). 7224 7225chk_Signal_notifyCompletion(V1, V2) -> 7226 validate(fun() -> chk_opt_NotifyCompletion(V1, V2) end, 7227 'Signal_notifyCompletion'). 7228 7229chk_Signal_keepActive(false, asn1_NOVALUE) -> 7230 ok; 7231chk_Signal_keepActive(asn1_NOVALUE, false) -> 7232 ok; 7233chk_Signal_keepActive(V1, V2) -> 7234 validate(fun() -> chk_opt_BOOLEAN(V1, V2) end, 'Signal_keepActive'). 7235 7236chk_Signal_sigParList([], []) -> 7237 ok; 7238chk_Signal_sigParList([] = L1, L2) -> 7239 not_equal('Signal_sigParList', L1, L2); 7240chk_Signal_sigParList(L1, [] = L2) -> 7241 not_equal('Signal_sigParList', L1, L2); 7242chk_Signal_sigParList([H|T1], [H|T2]) -> 7243 case is_SigParameter(H) of 7244 true -> 7245 chk_Signal_sigParList(T1, T2); 7246 false -> 7247 wrong_type('Signal_sigParList_val', H) 7248 end; 7249chk_Signal_sigParList([H1|T1], [H2|T2]) -> 7250 validate(fun() -> chk_SigParameter(H1, H2) end, 7251 'Signal_sigParList_val'), 7252 chk_Signal_sigParList(T1, T2); 7253chk_Signal_sigParList(L1, L2) -> 7254 wrong_type('Signal_sigParList', L1, L2). 7255 7256chk_Signal_direction(V1, V2) -> 7257 validate(fun() -> chk_opt_SignalDirection(V1, V2) end, 'Signal_direction'). 7258 7259chk_Signal_requestID(V1, V2) -> 7260 validate(fun() -> chk_opt_RequestID(V1, V2) end, 'Signal_requestID'). 7261 7262chk_Signal_intersigDelay(V1, V2) -> 7263 validate(fun() -> chk_opt_INTEGER(V1, V2, {range, 0, 65535}) end, 7264 'Signal_intersigDelay'). 7265 7266 7267%% -- SignalType -- 7268 7269is_opt_SignalType(T) -> 7270 is_OPTIONAL(fun is_SignalType/1, T). 7271 7272is_SignalType(T) -> 7273 d("is_SignalType -> entry with" 7274 "~n T: ~p", [T]), 7275 Types = [brief, onOff, timeOut], 7276 lists:member(T, Types). 7277 7278chk_opt_SignalType(T1, T2) -> 7279 chk_OPTIONAL('SignalType', T1, T2, 7280 fun is_SignalType/1, fun chk_SignalType/2). 7281 7282chk_SignalType(T, T) -> 7283 chk_type(fun is_SignalType/1, 'SignalType', T); 7284chk_SignalType(T1, T2) -> 7285 case (is_SignalType(T1) andalso is_SignalType(T2)) of 7286 true -> 7287 not_equal('SignalType', T1, T2); 7288 false -> 7289 wrong_type('SignalType', T1, T2) 7290 end. 7291 7292 7293%% -- SignalDirection -- 7294 7295is_opt_SignalDirection(T) -> 7296 is_OPTIONAL(fun is_SignalDirection/1, T). 7297 7298is_SignalDirection(Dir) -> 7299 d("is_SignalDirection -> entry with" 7300 "~n Dir: ~p", [Dir]), 7301 Dirs = [internal, external, both], 7302 lists:member(Dir, Dirs). 7303 7304chk_opt_SignalDirection(T1, T2) -> 7305 chk_OPTIONAL('SignalDirection', T1, T2, 7306 fun is_SignalDirection/1, fun chk_SignalDirection/2). 7307 7308chk_SignalDirection(Dir, Dir) -> 7309 chk_type(fun is_SignalDirection/1, 'SignalDirection', Dir); 7310chk_SignalDirection(Dir1, Dir2) -> 7311 case (is_SignalDirection(Dir1) andalso is_SignalDirection(Dir2)) of 7312 true -> 7313 not_equal('SignalDirection', Dir1, Dir2); 7314 false -> 7315 wrong_type('SignalDirection', Dir1, Dir2) 7316 end. 7317 7318 7319%% -- SignalName -- 7320 7321is_SignalName(N) -> 7322 d("is_SignalName -> entry with" 7323 "~n N: ~p", [N]), 7324 is_PkgdName(N). 7325 7326chk_SignalName(N1, N2) -> 7327 validate(fun() -> chk_PkgdName(N1, N2) end, 'SignalName'). 7328 7329 7330%% -- NotifyCompletion -- 7331 7332is_opt_NotifyCompletion(NC) -> 7333 is_OPTIONAL(fun is_NotifyCompletion/1, NC). 7334 7335is_NotifyCompletion(NC) -> 7336 d("is_NotifyCompletion -> entry with" 7337 "~n NC: ~p", [NC]), 7338 Valids = [onTimeOut, 7339 onInterruptByEvent, 7340 onInterruptByNewSignalDescr, 7341 otherReason], 7342 lists:all(fun(X) -> lists:member(X, Valids) end, NC). 7343 7344chk_opt_NotifyCompletion(NC1, NC2) -> 7345 chk_OPTIONAL('NotifyCompletion', NC1, NC2, 7346 fun is_NotifyCompletion/1, 7347 fun chk_NotifyCompletion/2). 7348 7349chk_NotifyCompletion(NC, NC) -> 7350 chk_type(fun is_NotifyCompletion/1, 'NotifyCompletion', NC); 7351chk_NotifyCompletion(NC1, NC2) -> 7352 case (is_NotifyCompletion(NC1) andalso is_NotifyCompletion(NC2)) of 7353 true -> 7354 not_equal('NotifyCompletion', NC1, NC2); 7355 false -> 7356 wrong_type('NotifyCompletion', NC1, NC2) 7357 end. 7358 7359 7360%% -- SigParameter -- 7361 7362is_SigParameter(#'SigParameter'{sigParameterName = N, 7363 value = V, 7364 extraInfo = I}) -> 7365 d("is_SigParameter -> entry with" 7366 "~n N: ~p" 7367 "~n V: ~p" 7368 "~n I: ~p", [N, V, I]), 7369 is_Name(N) andalso 7370 is_Value(V) andalso 7371 is_SigParameter_extraInfo(I); 7372is_SigParameter(_) -> 7373 false. 7374 7375is_SigParameter_extraInfo(asn1_NOVALUE) -> 7376 true; 7377is_SigParameter_extraInfo({Tag, Val}) -> 7378 is_SigParameter_extraInfo_tag(Tag) andalso 7379 is_SigParameter_extraInfo_val(Tag, Val); 7380is_SigParameter_extraInfo(_) -> 7381 false. 7382 7383is_SigParameter_extraInfo_tag(Tag) -> 7384 Tags = [relation, range, sublist], 7385 lists:member(Tag, Tags). 7386 7387is_SigParameter_extraInfo_val(relation, Val) -> 7388 is_Relation(Val); 7389is_SigParameter_extraInfo_val(range, Val) -> 7390 is_BOOLEAN(Val); 7391is_SigParameter_extraInfo_val(sublist, Val) -> 7392 is_BOOLEAN(Val). 7393 7394chk_SigParameter(P, P) -> 7395 chk_type(fun is_SigParameter/1, 'SigParameter', P); 7396chk_SigParameter(#'SigParameter'{sigParameterName = N1, 7397 value = V1, 7398 extraInfo = I1}, 7399 #'SigParameter'{sigParameterName = N2, 7400 value = V2, 7401 extraInfo = I2}) -> 7402 validate(fun() -> chk_Name(N1, N2) end, 'SigParameter'), 7403 validate(fun() -> chk_Value(V1, V2) end, 'SigParameter'), 7404 chk_SigParameter_extraInfo(I1, I2), 7405 ok; 7406chk_SigParameter(P1, P2) -> 7407 wrong_type('SigParameter', P1, P2). 7408 7409chk_SigParameter_extraInfo(EI, EI) -> 7410 chk_type(fun is_SigParameter_extraInfo/1, 'SigParameter_extraInfo', EI); 7411chk_SigParameter_extraInfo({Tag, Val1} = EI1, {Tag, Val2} = EI2) -> 7412 case (is_SigParameter_extraInfo_tag(Tag) and 7413 is_SigParameter_extraInfo_val(Tag, Val1) and 7414 is_SigParameter_extraInfo_val(Tag, Val2)) of 7415 true -> 7416 chk_SigParameter_extraInfo_val(Tag, Val1, Val2); 7417 false -> 7418 wrong_type('SigParameter_extraInfo', EI1, EI2) 7419 end; 7420chk_SigParameter_extraInfo({Tag1, Val1} = EI1, {Tag2, Val2} = EI2) -> 7421 case ((is_SigParameter_extraInfo_tag(Tag1) and 7422 is_SigParameter_extraInfo_val(Tag1, Val1)) and 7423 (is_SigParameter_extraInfo_tag(Tag2) and 7424 is_SigParameter_extraInfo_val(Tag2, Val2))) of 7425 true -> 7426 not_equal('SigParameter_extraInfo', EI1, EI2); 7427 false -> 7428 wrong_type('SigParameter_extraInfo', EI1, EI2) 7429 end; 7430chk_SigParameter_extraInfo(EI1, EI2) -> 7431 wrong_type('SigParameter_extraInfo', EI1, EI2). 7432 7433chk_SigParameter_extraInfo_val(relation, Val1, Val2) -> 7434 validate(fun() -> chk_Relation(Val1, Val2) end, 'SigParameter_extraInfo'); 7435chk_SigParameter_extraInfo_val(range, Val1, Val2) -> 7436 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 'SigParameter_extraInfo'); 7437chk_SigParameter_extraInfo_val(sublist, Val1, Val2) -> 7438 validate(fun() -> chk_BOOLEAN(Val1, Val2) end, 'SigParameter_extraInfo'). 7439 7440 7441%% -- RequestID -- 7442 7443is_opt_RequestID(asn1_NOVALUE) -> 7444 true; 7445is_opt_RequestID(V) -> 7446 is_RequestID(V). 7447 7448is_RequestID(V) -> is_INTEGER(V, {range, 0, 4294967295}). 7449 7450chk_opt_RequestID(asn1_NOVALUE, asn1_NOVALUE) -> 7451 ok; 7452chk_opt_RequestID(V1, V2) -> 7453 chk_RequestID(V1, V2). 7454 7455chk_RequestID(ID, ID) -> 7456 chk_type(fun is_RequestID/1, 'RequestID', ID); 7457chk_RequestID(ID1, ID2) -> 7458 case (is_RequestID(ID1) andalso is_RequestID(ID2)) of 7459 true -> 7460 not_equal('RequestID', ID1, ID2); 7461 false -> 7462 wrong_type('RequestID', ID1, ID2) 7463 end. 7464 7465 7466%% -- ModemDescriptor -- 7467 7468is_ModemDescriptor(D) when is_record(D, 'ModemDescriptor') -> 7469 true; 7470is_ModemDescriptor(_) -> 7471 false. 7472 7473chk_ModemDescriptor(D, D) when is_record(D, 'ModemDescriptor') -> 7474 ok; 7475chk_ModemDescriptor(#'ModemDescriptor'{mtl = MTL1, 7476 mpl = MPL1, 7477 nonStandardData = NSD1}, 7478 #'ModemDescriptor'{mtl = MTL2, 7479 mpl = MPL2, 7480 nonStandardData = NSD2}) -> 7481 chk_ModemDescriptor_mtl(MTL1, MTL2), 7482 chk_ModemDescriptor_mpl(MPL1, MPL2), 7483 chk_opt_NonStandardData(NSD1, NSD2), 7484 ok; 7485chk_ModemDescriptor(D1, D2) -> 7486 wrong_type('ModemDescriptor', D1, D2). 7487 7488chk_ModemDescriptor_mtl([], []) -> 7489 ok; 7490chk_ModemDescriptor_mtl([] = MTL1, MTL2) -> 7491 not_equal('ModemDescriptor_mtl', MTL1, MTL2); 7492chk_ModemDescriptor_mtl(MTL1, [] = MTL2) -> 7493 not_equal('ModemDescriptor_mtl', MTL1, MTL2); 7494chk_ModemDescriptor_mtl([H|T1], [H|T2]) -> 7495 case is_ModemType(H) of 7496 true -> 7497 chk_ModemDescriptor_mtl(T1, T2); 7498 false -> 7499 wrong_type('ModemDescriptor_mtl_val', H) 7500 end; 7501chk_ModemDescriptor_mtl([H1|T1], [H2|T2]) -> 7502 validate(fun() -> chk_ModemType(H1, H2) end, 'ModemDescriptor_mtl_val'), 7503 chk_ModemDescriptor_mtl(T1, T2); 7504chk_ModemDescriptor_mtl(MTL1, MTL2) -> 7505 wrong_type('ModemDescriptor_mtl', MTL1, MTL2). 7506 7507 7508chk_ModemDescriptor_mpl([], []) -> 7509 ok; 7510chk_ModemDescriptor_mpl([] = MPL1, MPL2) -> 7511 not_equal('ModemDescriptor_mpl', MPL1, MPL2); 7512chk_ModemDescriptor_mpl(MPL1, [] = MPL2) -> 7513 not_equal('ModemDescriptor_mpl', MPL1, MPL2); 7514chk_ModemDescriptor_mpl([H|T1], [H|T2]) -> 7515 case is_PropertyParm(H) of 7516 true -> 7517 chk_ModemDescriptor_mpl(T1, T2); 7518 false -> 7519 wrong_type('ModemDescriptor_mpl_val', H) 7520 end; 7521chk_ModemDescriptor_mpl([H1|T1], [H2|T2]) -> 7522 validate(fun() -> chk_PropertyParm(H1, H2) end, 'ModemDescriptor_mpl_val'), 7523 chk_ModemDescriptor_mpl(T1, T2); 7524chk_ModemDescriptor_mpl(MPL1, MPL2) -> 7525 wrong_type('ModemDescriptor_mpl', MPL1, MPL2). 7526 7527 7528%% -- ModemType -- 7529 7530chk_ModemType(MT, MT) -> 7531 case is_ModemType(MT) of 7532 true -> 7533 ok; 7534 false -> 7535 wrong_type('ModemType', MT, MT) 7536 end; 7537chk_ModemType(MT1, MT2) -> 7538 case (is_ModemType(MT1) andalso is_ModemType(MT2)) of 7539 true -> 7540 not_equal('ModemType', MT1, MT2); 7541 false -> 7542 wrong_type('ModemType', MT1, MT2) 7543 end. 7544 7545is_ModemType(MT) -> 7546 lists:member(MT, 7547 [v18, v22, v22bis, v32, v32bis, v34, v90, v91, synchISDN]). 7548 7549 7550%% -- DigitMapDescriptor -- 7551 7552is_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name, 7553 digitMapValue = Val}) -> 7554 is_opt_DigitMapName(Name) andalso is_opt_DigitMapValue(Val); 7555is_DigitMapDescriptor(_) -> 7556 false. 7557 7558chk_DigitMapDescriptor(D, D) -> 7559 chk_type(fun is_DigitMapDescriptor/1, 'DigitMapDescriptor', D); 7560chk_DigitMapDescriptor(#'DigitMapDescriptor'{digitMapName = Name1, 7561 digitMapValue = Val1}, 7562 #'DigitMapDescriptor'{digitMapName = Name2, 7563 digitMapValue = Val2}) -> 7564 d("chk_DigitMapDescriptor -> entry with" 7565 "~n Name1: ~p" 7566 "~n Name2: ~p" 7567 "~n Val1: ~p" 7568 "~n Val2: ~p", [Name1, Name2, Val1, Val2]), 7569 validate(fun() -> chk_opt_DigitMapName(Name1, Name2) end, 7570 'DigitMapDescriptor'), 7571 validate(fun() -> chk_opt_DigitMapValue(Val1, Val2) end, 7572 'DigitMapDescriptor'), 7573 ok; 7574chk_DigitMapDescriptor(D1, D2) -> 7575 wrong_type('DigitMapDescriptor', D1, D2). 7576 7577 7578%% -- DigitMapName -- 7579 7580is_opt_DigitMapName(asn1_NOVALUE) -> 7581 true; 7582is_opt_DigitMapName(N) -> 7583 is_DigitMapName(N). 7584 7585is_DigitMapName(N) -> is_Name(N). 7586 7587chk_opt_DigitMapName(asn1_NOVALUE, asn1_NOVALUE) -> 7588 ok; 7589chk_opt_DigitMapName(N1, N2) -> 7590 chk_DigitMapName(N1, N2). 7591 7592chk_DigitMapName(N, N) -> 7593 chk_type(fun is_DigitMapName/1, 'DigitMapName', N); 7594chk_DigitMapName(N1, N2) -> 7595 case (is_DigitMapName(N1) andalso is_DigitMapName(N2)) of 7596 true -> 7597 not_equal('DigitMapName', N1, N2); 7598 false -> 7599 wrong_type('DigitMapName', N1, N2) 7600 end. 7601 7602 7603%% -- DigitMapValue -- 7604 7605is_opt_DigitMapValue(V) -> 7606 is_OPTIONAL(fun is_DigitMapValue/1, V). 7607 7608is_DigitMapValue(#'DigitMapValue'{startTimer = Start, 7609 shortTimer = Short, 7610 longTimer = Long, 7611 digitMapBody = Body, 7612 durationTimer = Dur}) -> 7613 is_DigitMapValue_startTimer(Start) andalso 7614 is_DigitMapValue_shortTimer(Short) andalso 7615 is_DigitMapValue_longTimer(Long) andalso 7616 is_IA5String(Body) andalso 7617 is_DigitMapValue_durationTimer(Dur); 7618is_DigitMapValue(_) -> 7619 false. 7620 7621is_DigitMapValue_startTimer(asn1_NOVALUE) -> true; 7622is_DigitMapValue_startTimer(T) -> is_INTEGER(T, {range, 0, 99}). 7623 7624is_DigitMapValue_shortTimer(asn1_NOVALUE) -> true; 7625is_DigitMapValue_shortTimer(T) -> is_INTEGER(T, {range, 0, 99}). 7626 7627is_DigitMapValue_longTimer(asn1_NOVALUE) -> true; 7628is_DigitMapValue_longTimer(T) -> is_INTEGER(T, {range, 0, 99}). 7629 7630is_DigitMapValue_durationTimer(asn1_NOVALUE) -> true; 7631is_DigitMapValue_durationTimer(T) -> is_INTEGER(T, {range, 0, 99}). 7632 7633chk_opt_DigitMapValue(V1, V2) -> 7634 chk_OPTIONAL('DigitMapValue', V1, V2, 7635 fun is_DigitMapValue/1, fun chk_DigitMapValue/2). 7636 7637chk_DigitMapValue(#'DigitMapValue'{startTimer = Start1, 7638 shortTimer = Short1, 7639 longTimer = Long1, 7640 digitMapBody = Body1, 7641 durationTimer = Dur1}, 7642 #'DigitMapValue'{startTimer = Start2, 7643 shortTimer = Short2, 7644 longTimer = Long2, 7645 digitMapBody = Body2, 7646 durationTimer = Dur2}) -> 7647 d("chk_DigitMapValue -> entry with" 7648 "~n Start1: ~p" 7649 "~n Start2: ~p" 7650 "~n Short1: ~p" 7651 "~n Short2: ~p" 7652 "~n Long1: ~p" 7653 "~n Long2: ~p" 7654 "~n Body1: ~p" 7655 "~n Body2: ~p" 7656 "~n Dur1: ~p" 7657 "~n Dur2: ~p", [Start1, Start2, 7658 Short1, Short2, 7659 Long1, Long2, 7660 Body1, Body2, 7661 Dur1, Dur2]), 7662 chk_DigitMapValue_startTimer(Start1, Start2), 7663 chk_DigitMapValue_shortTimer(Short1, Short2), 7664 chk_DigitMapValue_longTimer(Long1, Long2), 7665 chk_DigitMapValue_digitMapBody(Body1, Body2), 7666 chk_DigitMapValue_durationTimer(Dur1, Dur2), 7667 ok; 7668chk_DigitMapValue(V1, V2) -> 7669 wrong_type('DigitMapValue', V1, V2). 7670 7671chk_DigitMapValue_startTimer(T, T) -> 7672 chk_type(fun is_DigitMapValue_startTimer/1, 'DigitMapValue_startTimer', T); 7673chk_DigitMapValue_startTimer(T1, T2) -> 7674 case (is_DigitMapValue_startTimer(T1) andalso 7675 is_DigitMapValue_startTimer(T2)) of 7676 true -> 7677 not_equal('DigitMapValue_startTimer', T1, T2); 7678 false -> 7679 wrong_type('DigitMapValue_startTimer', T1, T2) 7680 end. 7681 7682chk_DigitMapValue_shortTimer(T, T) -> 7683 chk_type(fun is_DigitMapValue_shortTimer/1, 'DigitMapValue_shortTimer', T); 7684chk_DigitMapValue_shortTimer(T1, T2) -> 7685 case (is_DigitMapValue_shortTimer(T1) andalso 7686 is_DigitMapValue_shortTimer(T2)) of 7687 true -> 7688 not_equal('DigitMapValue_shortTimer', T1, T2); 7689 false -> 7690 wrong_type('DigitMapValue_shortTimer', T1, T2) 7691 end. 7692 7693chk_DigitMapValue_longTimer(T, T) -> 7694 chk_type(fun is_DigitMapValue_longTimer/1, 'DigitMapValue_longTimer', T); 7695chk_DigitMapValue_longTimer(T1, T2) -> 7696 case (is_DigitMapValue_longTimer(T1) andalso 7697 is_DigitMapValue_longTimer(T2)) of 7698 true -> 7699 not_equal('DigitMapValue_longTimer', T1, T2); 7700 false -> 7701 wrong_type('DigitMapValue_longTimer', T1, T2) 7702 end. 7703 7704chk_DigitMapValue_durationTimer(T, T) -> 7705 chk_type(fun is_DigitMapValue_durationTimer/1, 7706 'DigitMapValue_durationTimer', T); 7707chk_DigitMapValue_durationTimer(T1, T2) -> 7708 case (is_DigitMapValue_durationTimer(T1) andalso 7709 is_DigitMapValue_durationTimer(T2)) of 7710 true -> 7711 not_equal('DigitMapValue_durationTimer', T1, T2); 7712 false -> 7713 wrong_type('DigitMapValue_durationTimer', T1, T2) 7714 end. 7715 7716chk_DigitMapValue_digitMapBody(B, B) -> 7717 d("chk_DigitMapValue_digitMapBody -> entry with" 7718 "~n B: ~p", [B]), 7719 chk_type(fun is_IA5String/1, 'DigitMapValue_digitMapBody', B); 7720chk_DigitMapValue_digitMapBody(B1, B2) -> 7721 d("chk_DigitMapValue_digitMapBody -> entry with" 7722 "~n B1: ~p" 7723 "~n B2: ~p", [B1, B2]), 7724 case (is_IA5String(B1) andalso is_IA5String(B2)) of 7725 true -> 7726 %% If they are different it could be because 7727 %% of trailing tab's and newline's. 7728 case compare_strings(B1, B2) of 7729 {[], []} -> 7730 ok; 7731 {Str1, []} -> 7732 case strip_tab_and_newline(Str1) of 7733 [] -> 7734 ok; 7735 _ -> 7736 not_equal('DigitMapValue_digitMapBody', B1, B2) 7737 end; 7738 {[], Str2} -> 7739 case strip_tab_and_newline(Str2) of 7740 [] -> 7741 ok; 7742 _ -> 7743 not_equal('DigitMapValue_digitMapBody', B1, B2) 7744 end; 7745 _ -> 7746 not_equal('DigitMapValue_digitMapBody', B1, B2) 7747 end; 7748 false -> 7749 wrong_type('DigitMapValue_digitMapBody', B1, B2) 7750 end. 7751 7752%% -- ServiceChangeParm -- 7753 7754is_ServiceChangeParm(#'ServiceChangeParm'{serviceChangeMethod = M, 7755 serviceChangeAddress = A, 7756 serviceChangeVersion = V, 7757 serviceChangeProfile = P, 7758 serviceChangeReason = R, 7759 serviceChangeDelay = D, 7760 serviceChangeMgcId = Id, 7761 timeStamp = TS, 7762 nonStandardData = NSD, 7763 serviceChangeInfo = I}) -> 7764 is_ServiceChangeMethod(M) andalso 7765 is_opt_ServiceChangeAddress(A) andalso 7766 is_opt_INTEGER(V, {range, 0, 99}) andalso 7767 is_opt_ServiceChangeProfile(P) andalso 7768 is_Value(R) andalso 7769 is_opt_INTEGER(D, {range, 0, 4294967295}) andalso 7770 is_opt_MId(Id) andalso 7771 is_opt_TimeNotation(TS) andalso 7772 is_opt_NonStandardData(NSD) andalso 7773 is_opt_AuditDescriptor(I); 7774is_ServiceChangeParm(_) -> 7775 false. 7776 7777chk_ServiceChangeParm(P, P) -> 7778 chk_type(fun is_ServiceChangeParm/1, 'ServiceChangeParm', P); 7779chk_ServiceChangeParm(#'ServiceChangeParm'{serviceChangeMethod = M1, 7780 serviceChangeAddress = A1, 7781 serviceChangeVersion = V1, 7782 serviceChangeProfile = P1, 7783 serviceChangeReason = R1, 7784 serviceChangeDelay = D1, 7785 serviceChangeMgcId = Id1, 7786 timeStamp = TS1, 7787 nonStandardData = NSD1, 7788 serviceChangeInfo = I1}, 7789 #'ServiceChangeParm'{serviceChangeMethod = M2, 7790 serviceChangeAddress = A2, 7791 serviceChangeVersion = V2, 7792 serviceChangeProfile = P2, 7793 serviceChangeReason = R2, 7794 serviceChangeDelay = D2, 7795 serviceChangeMgcId = Id2, 7796 timeStamp = TS2, 7797 nonStandardData = NSD2, 7798 serviceChangeInfo = I2}) -> 7799 validate(fun() -> chk_ServiceChangeMethod(M1, M2) end, 7800 'ServiceChangeParm'), 7801 validate(fun() -> chk_opt_ServiceChangeAddress(A1, A2) end, 7802 'ServiceChangeParm'), 7803 validate(fun() -> chk_opt_INTEGER(V1, V2, {range, 0, 99}) end, 7804 'ServiceChangeParm'), 7805 validate(fun() -> chk_opt_ServiceChangeProfile(P1, P2) end, 7806 'ServiceChangeParm'), 7807 validate(fun() -> chk_Value(R1, R2) end, 7808 'ServiceChangeParm'), 7809 validate(fun() -> chk_opt_INTEGER(D1, D2, {range, 0, 4294967295}) end, 7810 'ServiceChangeParm'), 7811 validate(fun() -> chk_opt_MId(Id1, Id2) end, 7812 'ServiceChangeParm'), 7813 validate(fun() -> chk_opt_TimeNotation(TS1, TS2) end, 7814 'ServiceChangeParm'), 7815 validate(fun() -> chk_opt_NonStandardData(NSD1, NSD2) end, 7816 'ServiceChangeParm'), 7817 validate(fun() -> chk_opt_AuditDescriptor(I1, I2) end, 7818 'ServiceChangeParm'), 7819 ok; 7820chk_ServiceChangeParm(P1, P2) -> 7821 wrong_type('ServiceChangeParm', P1, P2). 7822 7823 7824%% -- ServiceChangeAddress -- 7825 7826is_opt_ServiceChangeAddress(A) -> 7827 is_OPTIONAL(fun is_ServiceChangeAddress/1, A). 7828 7829is_ServiceChangeAddress({Tag, Val}) -> 7830 is_ServiceChangeAddress_tag(Tag) andalso 7831 is_ServiceChangeAddress_val(Tag, Val); 7832is_ServiceChangeAddress(_) -> 7833 false. 7834 7835is_ServiceChangeAddress_tag(Tag) -> 7836 Tags = [portNumber, ip4Address, ip6Address, domainName, deviceName, 7837 mtpAddress], 7838 lists:member(Tag, Tags). 7839 7840is_ServiceChangeAddress_val(portNumber, Val) -> 7841 is_INTEGER(Val, {range, 0, 65535}); 7842is_ServiceChangeAddress_val(ip4Address, Val) -> 7843 is_IP4Address(Val); 7844is_ServiceChangeAddress_val(ip6Address, Val) -> 7845 is_IP6Address(Val); 7846is_ServiceChangeAddress_val(domainName, Val) -> 7847 is_DomainName(Val); 7848is_ServiceChangeAddress_val(deviceName, Val) -> 7849 is_PathName(Val); 7850is_ServiceChangeAddress_val(mtpAddress, Val) -> 7851 is_OCTET_STRING(Val, {range, 2, 4}). 7852 7853 7854chk_opt_ServiceChangeAddress(A1, A2) -> 7855 chk_OPTIONAL('ServiceChangeAddress', A1, A2, 7856 fun is_ServiceChangeAddress/1, 7857 fun chk_ServiceChangeAddress/2). 7858 7859chk_ServiceChangeAddress(A, A) -> 7860 chk_type(fun is_ServiceChangeAddress/1, 'ServiceChangeAddress', A); 7861chk_ServiceChangeAddress({Tag, Val1} = A1, {Tag, Val2} = A2) -> 7862 case (is_ServiceChangeAddress_tag(Tag) andalso 7863 is_ServiceChangeAddress_val(Tag, Val1) andalso 7864 is_ServiceChangeAddress_val(Tag, Val2)) of 7865 true -> 7866 chk_ServiceChangeAddress_val(Tag, Val1, Val2); 7867 false -> 7868 wrong_type('ServiceChangeAddress', A1, A2) 7869 end; 7870chk_ServiceChangeAddress({Tag1, Val1} = A1, {Tag2, Val2} = A2) -> 7871 case ((is_ServiceChangeAddress_tag(Tag1) andalso 7872 is_ServiceChangeAddress_val(Tag1, Val1)) andalso 7873 (is_ServiceChangeAddress_tag(Tag2) andalso 7874 is_ServiceChangeAddress_val(Tag2, Val2))) of 7875 true -> 7876 not_equal('ServiceChangeAddress', A1, A2); 7877 false -> 7878 wrong_type('ServiceChangeAddress', A1, A2) 7879 end; 7880chk_ServiceChangeAddress(A1, A2) -> 7881 wrong_type('ServiceChangeAddress', A1, A2). 7882 7883chk_ServiceChangeAddress_val(portNumber, Val1, Val2) -> 7884 validate(fun() -> chk_INTEGER(Val1, Val2, {range, 0, 99}) end, 7885 'ServiceChangeAddress'); 7886chk_ServiceChangeAddress_val(ip4Address, Val1, Val2) -> 7887 validate(fun() -> chk_IP4Address(Val1, Val2) end, 7888 'ServiceChangeAddress'); 7889chk_ServiceChangeAddress_val(ip6Address, Val1, Val2) -> 7890 validate(fun() -> chk_IP6Address(Val1, Val2) end, 7891 'ServiceChangeAddress'); 7892chk_ServiceChangeAddress_val(domainName, Val1, Val2) -> 7893 validate(fun() -> chk_DomainName(Val1, Val2) end, 7894 'ServiceChangeAddress'); 7895chk_ServiceChangeAddress_val(deviceName, Val1, Val2) -> 7896 validate(fun() -> chk_PathName(Val1, Val2) end, 7897 'ServiceChangeAddress'); 7898chk_ServiceChangeAddress_val(mtpAddress, Val1, Val2) -> 7899 validate(fun() -> chk_OCTET_STRING(Val1, Val2, {range, 2, 4}) end, 7900 'ServiceChangeAddress'). 7901 7902 7903%% -- ServiceChangeResParm -- 7904 7905is_ServiceChangeResParm(#'ServiceChangeResParm'{serviceChangeMgcId = Id, 7906 serviceChangeAddress = A, 7907 serviceChangeVersion = V, 7908 serviceChangeProfile = P, 7909 timeStamp = TS}) -> 7910 is_opt_MId(Id) andalso 7911 is_opt_ServiceChangeAddress(A) andalso 7912 is_opt_INTEGER(V, {range, 0, 99}) andalso 7913 is_opt_ServiceChangeProfile(P) andalso 7914 is_opt_TimeNotation(TS); 7915is_ServiceChangeResParm(_) -> 7916 false. 7917 7918chk_ServiceChangeResParm(P, P) -> 7919 chk_type(fun is_ServiceChangeResParm/1, 'ServiceChangeResParm', P); 7920chk_ServiceChangeResParm( 7921 #'ServiceChangeResParm'{serviceChangeMgcId = Id1, 7922 serviceChangeAddress = A1, 7923 serviceChangeVersion = V1, 7924 serviceChangeProfile = P1, 7925 timeStamp = TS1}, 7926 #'ServiceChangeResParm'{serviceChangeMgcId = Id2, 7927 serviceChangeAddress = A2, 7928 serviceChangeVersion = V2, 7929 serviceChangeProfile = P2, 7930 timeStamp = TS2}) -> 7931 validate(fun() -> chk_opt_MId(Id1, Id2) end, 'ServiceChangeResParm'), 7932 validate(fun() -> chk_opt_ServiceChangeAddress(A1, A2) end, 7933 'ServiceChangeResParm'), 7934 validate(fun() -> chk_opt_INTEGER(V1, V2, {range, 0, 99}) end, 7935 'ServiceChangeResParm'), 7936 validate(fun() -> chk_opt_ServiceChangeProfile(P1, P2) end, 7937 'ServiceChangeResParm'), 7938 validate(fun() -> chk_opt_TimeNotation(TS1, TS2) end, 7939 'ServiceChangeResParm'), 7940 ok; 7941chk_ServiceChangeResParm(P1, P2) -> 7942 wrong_type('ServiceChangeResParm', P1, P2). 7943 7944 7945%% -- ServiceChangeMethod -- 7946 7947is_ServiceChangeMethod(M) -> 7948 Methods = [failover, forced, graceful, restart, disconnected, handOff], 7949 lists:member(M, Methods). 7950 7951chk_ServiceChangeMethod(M, M) -> 7952 chk_type(fun is_ServiceChangeMethod/1, 'ServiceChangeMethod', M); 7953chk_ServiceChangeMethod(M1, M2) -> 7954 case (is_ServiceChangeMethod(M1) andalso is_ServiceChangeMethod(M2)) of 7955 true -> 7956 not_equal('ServiceChangeMethod', M1, M2); 7957 false -> 7958 wrong_type('ServiceChangeMethod', M1, M2) 7959 end. 7960 7961 7962%% -- ServiceChangeProfile -- 7963 7964is_opt_ServiceChangeProfile(P) -> 7965 is_OPTIONAL(fun is_ServiceChangeProfile/1, P). 7966 7967is_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = N}) -> 7968 is_IA5String(N, {range, 1, 67}); 7969is_ServiceChangeProfile(_) -> 7970 false. 7971 7972chk_opt_ServiceChangeProfile(P1, P2) -> 7973 chk_OPTIONAL('ServiceChangeProfile', P1, P2, 7974 fun is_ServiceChangeProfile/1, 7975 fun chk_ServiceChangeProfile/2). 7976 7977chk_ServiceChangeProfile(P, P) -> 7978 chk_type(fun is_ServiceChangeProfile/1, 'ServiceChangeProfile', P); 7979chk_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = N1}, 7980 #'ServiceChangeProfile'{profileName = N2}) -> 7981 validate(fun() -> chk_IA5String(N1, N2, {range, 1, 67}) end, 7982 'ServiceChangeProfile'), 7983 ok; 7984chk_ServiceChangeProfile(P1, P2) -> 7985 wrong_type('ServiceChangeProfile', P1, P2). 7986 7987 7988%% -- PackagesDescriptor -- 7989 7990is_PackagesDescriptor([]) -> 7991 true; 7992is_PackagesDescriptor([H|T]) -> 7993 is_PackagesItem(H) andalso is_PackagesDescriptor(T); 7994is_PackagesDescriptor(_) -> 7995 false. 7996 7997chk_PackagesDescriptor([], []) -> 7998 ok; 7999chk_PackagesDescriptor([] = D1, D2) -> 8000 not_equal('PackagesDescriptor', D1, D2); 8001chk_PackagesDescriptor(D1, [] = D2) -> 8002 not_equal('PackagesDescriptor', D1, D2); 8003chk_PackagesDescriptor([H|T1], [H|T2]) -> 8004 case is_PackagesItem(H) of 8005 true -> 8006 chk_PackagesDescriptor(T1, T2); 8007 false -> 8008 wrong_type('PackagesDescriptor_val', H) 8009 end; 8010chk_PackagesDescriptor([H1|T1], [H2|T2]) -> 8011 validate(fun() -> chk_PackagesItem(H1, H2) end, 8012 'PackagesDescriptor_val'), 8013 chk_PackagesDescriptor(T1, T2); 8014chk_PackagesDescriptor(D1, D2) -> 8015 wrong_type('PackagesDescriptor_val', D1, D2). 8016 8017 8018%% -- PackagesItem -- 8019 8020is_PackagesItem(#'PackagesItem'{packageName = N, 8021 packageVersion = V}) -> 8022 is_Name(N) andalso is_INTEGER(V, {range, 0, 99}); 8023is_PackagesItem(_) -> 8024 false. 8025 8026chk_PackagesItem(I, I) -> 8027 chk_type(fun is_PackagesItem/1, 'PackagesItem', I); 8028chk_PackagesItem(#'PackagesItem'{packageName = N1, 8029 packageVersion = V1}, 8030 #'PackagesItem'{packageName = N2, 8031 packageVersion = V2}) -> 8032 validate(fun() -> chk_Name(N1, N2) end, 'PackagesItem'), 8033 validate(fun() -> chk_INTEGER(V1, V2, {range, 0, 99}) end, 'PackagesItem'), 8034 ok; 8035chk_PackagesItem(I1, I2) -> 8036 wrong_type('PackagesItem', I1, I2). 8037 8038 8039%% -- StatisticsDescriptor -- 8040 8041is_opt_StatisticsDescriptor(D) -> 8042 is_OPTIONAL(fun is_StatisticsDescriptor/1, D). 8043 8044is_StatisticsDescriptor([]) -> 8045 true; 8046is_StatisticsDescriptor([H|T]) -> 8047 is_StatisticsParameter(H) andalso is_StatisticsDescriptor(T); 8048is_StatisticsDescriptor(_) -> 8049 false. 8050 8051chk_opt_StatisticsDescriptor(D1, D2) -> 8052 chk_OPTIONAL('StatisticsDescriptor', D1, D2, 8053 fun is_StatisticsDescriptor/1, 8054 fun chk_StatisticsDescriptor/2). 8055 8056chk_StatisticsDescriptor([], []) -> 8057 ok; 8058chk_StatisticsDescriptor([] = D1, D2) -> 8059 not_equal('StatisticsDescriptor', D1, D2); 8060chk_StatisticsDescriptor(D1, [] = D2) -> 8061 not_equal('StatisticsDescriptor', D1, D2); 8062chk_StatisticsDescriptor([H|T1], [H|T2]) -> 8063 case is_StatisticsParameter(H) of 8064 true -> 8065 chk_StatisticsDescriptor(T1, T2); 8066 false -> 8067 wrong_type('StatisticsDescriptor_val', H) 8068 end; 8069chk_StatisticsDescriptor([H1|T1], [H2|T2]) -> 8070 validate(fun() -> chk_StatisticsParameter(H1, H2) end, 8071 'StatisticsDescriptor_val'), 8072 chk_StatisticsDescriptor(T1, T2); 8073chk_StatisticsDescriptor(D1, D2) -> 8074 wrong_type('StatisticsDescriptor_val', D1, D2). 8075 8076 8077%% -- StatisticsParameter -- 8078 8079is_StatisticsParameter(#'StatisticsParameter'{statName = N, 8080 statValue = V}) -> 8081 is_PkgdName(N) andalso is_opt_Value(V); 8082is_StatisticsParameter(_) -> 8083 false. 8084 8085chk_StatisticsParameter(P, P) -> 8086 chk_type(fun is_StatisticsParameter/1, 'StatisticsParameter', P); 8087chk_StatisticsParameter(#'StatisticsParameter'{statName = N1, 8088 statValue = V1}, 8089 #'StatisticsParameter'{statName = N2, 8090 statValue = V2}) -> 8091 validate(fun() -> chk_PkgdName(N1, N2) end, 'StatisticsParameter'), 8092 validate(fun() -> chk_opt_Value(V1, V2) end, 'StatisticsParameter'), 8093 ok; 8094chk_StatisticsParameter(P1, P2) -> 8095 wrong_type('StatisticsParameter', P1, P2). 8096 8097 8098%% -- NonStandardData -- 8099 8100is_opt_NonStandardData(asn1_NOVALUE) -> 8101 true; 8102is_opt_NonStandardData(NSD) -> 8103 is_NonStandardData(NSD). 8104 8105%% is_NonStandardData(#'NonStandardData'{nonStandardIdentifier = Id, 8106%% data = D}) -> 8107%% is_NonStandardIdentifier(Id) andalso is_OCTET_STRING(D); 8108%% is_NonStandardData(_) -> 8109%% false. 8110 8111is_NonStandardData(_) -> 8112 true. 8113 8114chk_opt_NonStandardData(asn1_NOVALUE, asn1_NOVALUE) -> 8115 true; 8116chk_opt_NonStandardData(NSD1, NSD2) -> 8117 chk_NonStandardData(NSD1, NSD2). 8118 8119chk_NonStandardData(NSD, NSD) -> 8120 chk_type(fun is_NonStandardData/1, 'NonStandardData', NSD); 8121%% chk_NonStandardData(#'NonStandardData'{nonStandardIdentifier = Id1, 8122%% data = D1}, 8123%% #'NonStandardData'{nonStandardIdentifier = Id2, 8124%% data = D2}) -> 8125%% validate(fun() -> chk_NonStandardIdentifier(Id1, Id2) end, 8126%% 'NonStandardData'), 8127%% validate(fun() -> chk_OCTET_STRING(D1, D2) end, 'NonStandardData'), 8128%% ok; 8129%% chk_NonStandardData(NSD1, NSD2) -> 8130%% wrong_type('NonStandardData', NSD1, NSD2). 8131chk_NonStandardData(NSD1, NSD2) -> 8132 not_equal('NonStandardData', NSD1, NSD2). 8133 8134 8135%% -- NonStandardIdentifier -- 8136 8137%% is_NonStandardIdentifier({Tag, Val}) -> 8138%% is_NonStandardIdentifier_tag(Tag) andalso 8139%% is_NonStandardIdentifier_val(Tag, Val); 8140%% is_NonStandardIdentifier(_) -> 8141%% false. 8142 8143%% is_NonStandardIdentifier_tag(Tag) -> 8144%% Tags = [object, h221NonStandard, experimental], 8145%% lists:member(Tag, Tags). 8146 8147%% is_NonStandardIdentifier_val(object, Val) -> 8148%% is_OBJECT_IDENTIFIER(Val); 8149%% is_NonStandardIdentifier_val(h221NonStandard, Val) -> 8150%% is_H221NonStandard(Val); 8151%% is_NonStandardIdentifier_val(experimental, Val) -> 8152%% is_IA5String(Val, {exact, 8}). 8153 8154%% chk_NonStandardIdentifier(Id, Id) -> 8155%% chk_type(fun is_NonStandardIdentifier/1, 'NonStandardIdentifier', Id); 8156%% chk_NonStandardIdentifier({Tag, Val1} = Id1, {Tag, Val2} = Id2) -> 8157%% case (is_NonStandardIdentifier_tag(Tag) andalso 8158%% is_NonStandardIdentifier_val(Tag, Val1) andalso 8159%% is_NonStandardIdentifier_val(Tag, Val1)) of 8160%% true -> 8161%% chk_NonStandardIdentifier_val(Tag, Val1, Val2); 8162%% false -> 8163%% wrong_type('NonStandardIdentifier', Id1, Id2) 8164%% end; 8165%% chk_NonStandardIdentifier({Tag1, Val1} = Id1, {Tag2, Val2} = Id2) -> 8166%% case ((is_NonStandardIdentifier_tag(Tag1) andalso 8167%% is_NonStandardIdentifier_val(Tag1, Val1)) andalso 8168%% (is_NonStandardIdentifier_tag(Tag2) andalso 8169%% is_NonStandardIdentifier_val(Tag2, Val1))) of 8170%% true -> 8171%% not_equal('NonStandardIdentifier', Id1, Id2); 8172%% false -> 8173%% wrong_type('NonStandardIdentifier', Id1, Id2) 8174%% end; 8175%% chk_NonStandardIdentifier(Id1, Id2) -> 8176%% wrong_type('NonStandardIdentifier', Id1, Id2). 8177 8178%% chk_NonStandardIdentifier_val(object, Val1, Val2) -> 8179%% chk_OBJECT_IDENTIFIER(Val1, Val2); 8180%% chk_NonStandardIdentifier_val(h221NonStandard, Val1, Val2) -> 8181%% chk_H221NonStandard(Val1, Val2); 8182%% chk_NonStandardIdentifier_val(experimental, Val1, Val2) -> 8183%% chk_IA5String(Val1, Val2, {exact, 8}). 8184 8185 8186%% -- H221NonStandard -- 8187 8188%% is_H221NonStandard(#'H221NonStandard'{t35CountryCode1 = CC1, 8189%% t35CountryCode2 = CC2, 8190%% t35Extension = Ext, 8191%% manufacturerCode = MC}) -> 8192%% is_INTEGER(CC1, {range, 0, 255}) andalso 8193%% is_INTEGER(CC2, {range, 0, 255}) andalso 8194%% is_INTEGER(Ext, {range, 0, 255}) andalso 8195%% is_INTEGER(Ext, {range, 0, 65535}); 8196%% is_H221NonStandard(_) -> 8197%% false. 8198 8199%% chk_H221NonStandard(NS, NS) -> 8200%% chk_type(fun is_H221NonStandard/1, 'H221NonStandard', NS); 8201%% chk_H221NonStandard(#'H221NonStandard'{t35CountryCode1 = CC11, 8202%% t35CountryCode2 = CC21, 8203%% t35Extension = Ext1, 8204%% manufacturerCode = MC1}, 8205%% #'H221NonStandard'{t35CountryCode1 = CC12, 8206%% t35CountryCode2 = CC22, 8207%% t35Extension = Ext2, 8208%% manufacturerCode = MC2}) -> 8209%% validate(fun() -> chk_INTEGER(CC11, CC12, {range, 0, 255}) end, 8210%% 'H221NonStandard'), 8211%% validate(fun() -> chk_INTEGER(CC21, CC22, {range, 0, 255}) end, 8212%% 'H221NonStandard'), 8213%% validate(fun() -> chk_INTEGER(Ext1, Ext2, {range, 0, 255}) end, 8214%% 'H221NonStandard'), 8215%% validate(fun() -> chk_INTEGER(MC1, MC2, {range, 0, 65535}) end, 8216%% 'H221NonStandard'), 8217%% ok; 8218%% chk_H221NonStandard(NS1, NS2) -> 8219%% wrong_type('H221NonStandard', NS1, NS2). 8220 8221 8222%% -- TimeNotation -- 8223 8224is_opt_TimeNotation(asn1_NOVALUE) -> 8225 true; 8226is_opt_TimeNotation(TN) -> 8227 is_TimeNotation(TN). 8228 8229is_TimeNotation(#'TimeNotation'{date = D, time = T}) -> 8230 is_IA5String(D, {exact, 8}) andalso is_IA5String(T, {exact, 8}); 8231is_TimeNotation(_) -> 8232 false. 8233 8234chk_opt_TimeNotation(asn1_NOVALUE, asn1_NOVALUE) -> 8235 ok; 8236chk_opt_TimeNotation(TN1, TN2) -> 8237 chk_TimeNotation(TN1, TN2). 8238 8239chk_TimeNotation(TN, TN) -> 8240 chk_type(fun is_TimeNotation/1, 'TimeNotation', TN); 8241chk_TimeNotation(#'TimeNotation'{date = D1, time = T1}, 8242 #'TimeNotation'{date = D2, time = T2}) -> 8243 validate(fun() -> chk_IA5String(D1, D2, {exact, 8}) end, 'TimeNotation'), 8244 validate(fun() -> chk_IA5String(T1, T2, {exact, 8}) end, 'TimeNotation'), 8245 ok; 8246chk_TimeNotation(TN1, TN2) -> 8247 wrong_type('TimeNotation', TN1, TN2). 8248 8249 8250%% -- Value -- 8251 8252is_opt_Value(V) -> 8253 is_OPTIONAL(fun is_Value/1, V). 8254 8255is_Value([]) -> 8256 true; 8257is_Value([H|T]) -> 8258 is_OCTET_STRING(H) andalso is_Value(T); 8259is_Value(_) -> 8260 false. 8261 8262chk_opt_Value(V1, V2) -> 8263 chk_OPTIONAL('Value', V1, V2, fun is_Value/1, fun chk_Value/2). 8264 8265chk_Value(V, V) -> 8266 case is_Value(V) of 8267 true -> 8268 ok; 8269 false -> 8270 wrong_type('Value', V, V) 8271 end; 8272chk_Value(V1, V2) -> 8273 case (is_Value(V1) andalso is_Value(V2)) of 8274 true -> 8275 not_equal('Value', V1, V2); 8276 false -> 8277 wrong_type('Value', V1, V2) 8278 end. 8279 8280 8281%% ---------------------------------------------------------------------- 8282%% Basic type check functions 8283%% ---------------------------------------------------------------------- 8284 8285 8286is_opt_BOOLEAN(B) -> 8287 is_OPTIONAL(fun is_BOOLEAN/1, B). 8288 8289is_BOOLEAN(B) -> 8290 d("is_BOOLEAN -> entry with" 8291 "~n B: ~p", [B]), 8292 lists:member(B, [true, false]). 8293 8294chk_opt_BOOLEAN(B1, B2) -> 8295 chk_OPTIONAL('BOOLEAN', B1, B2, fun is_BOOLEAN/1, fun chk_BOOLEAN/2). 8296 8297chk_BOOLEAN(B, B) -> 8298 chk_type(fun is_BOOLEAN/1, 'BOOLEAN', B); 8299chk_BOOLEAN(B1, B2) -> 8300 case (is_BOOLEAN(B1) andalso is_BOOLEAN(B2)) of 8301 true -> 8302 not_equal('BOOLEAN', B1, B2); 8303 false -> 8304 wrong_type('BOOLEAN', B1, B2) 8305 end. 8306 8307 8308is_IA5String(S) when is_list(S) -> 8309 true; 8310is_IA5String(_) -> 8311 false. 8312 8313% chk_IA5String(S, S) -> 8314% chk_type(fun is_IA5String/1, 'IA5String', S); 8315% chk_IA5String(S1, S2) -> 8316% case (is_IA5String(S1) andalso is_IA5String(S2)) of 8317% true -> 8318% not_equal('IA5String', S1, S2); 8319% false -> 8320% wrong_type('IA5String', S1, S2) 8321% end. 8322 8323is_IA5String(S, _) when is_list(S) -> 8324 true; 8325is_IA5String(_, _) -> 8326 false. 8327 8328chk_IA5String(S, S, R) -> 8329 chk_type(fun is_IA5String/2, 'IA5String', S, R); 8330chk_IA5String(S1, S2, R) -> 8331 case (is_IA5String(S1, R) andalso is_IA5String(S2, R)) of 8332 true -> 8333 not_equal('IA5String', S1, S2); 8334 false -> 8335 wrong_type('IA5String', S1, S2) 8336 end. 8337 8338 8339is_OCTET_STRING(L) -> is_OCTET_STRING(L, any). 8340 8341is_OCTET_STRING(L, any) when is_list(L) -> 8342 true; 8343is_OCTET_STRING(L, {exact, Len}) when is_list(L) andalso (length(L) =:= Len) -> 8344 true; 8345is_OCTET_STRING(L, {atleast, Len}) when is_list(L) andalso (Len =< length(L)) -> 8346 true; 8347is_OCTET_STRING(L, {atmost, Len}) when is_list(L) andalso (length(L) =< Len) -> 8348 true; 8349is_OCTET_STRING(L, {range, Min, Max}) 8350 when is_list(L) andalso (Min =< length(L)) andalso (length(L) =< Max) -> 8351 true; 8352is_OCTET_STRING(_, _) -> 8353 false. 8354 8355%% chk_OCTET_STRING(L1, L2) -> 8356%% chk_OCTET_STRING(L1, L2, any). 8357 8358chk_OCTET_STRING(L, L, R) -> 8359 chk_type(fun is_OCTET_STRING/2, 'OCTET STRING', L, R); 8360chk_OCTET_STRING(L1, L2, R) -> 8361 case (is_OCTET_STRING(L1, R) andalso is_OCTET_STRING(L2, R)) of 8362 true -> 8363 not_equal('OCTET STRING', L1, L2); 8364 false -> 8365 wrong_type('OCTET STRING', L1, L2) 8366 end. 8367 8368 8369%% is_OBJECT_IDENTIFIER(_) -> 8370%% true. 8371 8372%% chk_OBJECT_IDENTIFIER(X, X) -> 8373%% ok; 8374%% chk_OBJECT_IDENTIFIER(X1, X2) -> 8375%% not_equal('OBJECT IDENTIFIER', X1, X2). 8376 8377 8378is_opt_NULL(N) -> 8379 is_OPTIONAL(fun is_NULL/1, N). 8380 8381is_NULL('NULL') -> 8382 true; 8383is_NULL(_) -> 8384 false. 8385 8386chk_opt_NULL(N1, N2) -> 8387 chk_OPTIONAL('NULL', N1, N2, fun is_NULL/1, fun chk_NULL/2). 8388 8389chk_NULL(N, N) -> 8390 chk_type(fun is_NULL/1, 'NULL', N); 8391chk_NULL(N1, N2) -> 8392 case (is_NULL(N1) andalso is_NULL(N2)) of 8393 true -> 8394 not_equal('NULL', N1, N2); 8395 false -> 8396 wrong_type('NULL', N1, N2) 8397 end. 8398 8399 8400is_opt_INTEGER(I, R) -> 8401 d("is_opt_INTEGER -> entry with" 8402 "~n I: ~p" 8403 "~n R: ~p", [I, R]), 8404 is_OPTIONAL(fun(X) -> is_INTEGER(X, R) end, I). 8405 8406is_INTEGER(I, any) when is_integer(I) -> 8407 true; 8408is_INTEGER(I, {exact, I}) when is_integer(I) -> 8409 true; 8410is_INTEGER(I, {atleast, Min}) 8411 when is_integer(I) andalso is_integer(Min) andalso (Min =< I) -> 8412 true; 8413is_INTEGER(I, {atmost, Max}) 8414 when is_integer(I) andalso is_integer(Max) andalso (I =< Max) -> 8415 true; 8416is_INTEGER(I, {range, Min, Max}) 8417 when is_integer(I) andalso 8418 is_integer(Min) andalso 8419 is_integer(Max) andalso 8420 (Min =< I) andalso 8421 (I =< Max) -> 8422 true; 8423is_INTEGER(_, _) -> 8424 false. 8425 8426chk_opt_INTEGER(I1, I2, R) -> 8427 chk_OPTIONAL('INTEGER', I1, I2, 8428 fun(X) -> is_INTEGER(X, R) end, 8429 fun(Y1, Y2) -> chk_INTEGER(Y1, Y2, R) end). 8430 8431chk_INTEGER(I, I, R) -> 8432 chk_type(fun is_INTEGER/2, 'INTEGER', I, R); 8433chk_INTEGER(I1, I2, R) -> 8434 case (is_INTEGER(I1, R) andalso is_INTEGER(I2, R)) of 8435 true -> 8436 not_equal('INTEGER', I1, I2); 8437 false -> 8438 wrong_type('INTEGER', I1, I2) 8439 end. 8440 8441 8442%% ---------------------------------------------------------------------- 8443%% Various utility functions 8444%% ---------------------------------------------------------------------- 8445 8446 8447to_lower([C|Cs]) when (C >= $A) andalso (C =< $Z) -> 8448 [C+($a-$A)|to_lower(Cs)]; 8449to_lower([C|Cs]) -> 8450 [C|to_lower(Cs)]; 8451to_lower([]) -> 8452 []. 8453 8454 8455validate(F, Type) when is_function(F) -> 8456 case (catch F()) of 8457 {error, Reason} -> 8458 error({Type, Reason}); 8459 ok -> 8460 ok 8461 end. 8462 8463 8464chk_type(F, T, V) when is_function(F) andalso is_atom(T) -> 8465 case F(V) of 8466 true -> 8467 ok; 8468 false -> 8469 wrong_type(T, V) 8470 end. 8471 8472chk_type(F, T, V1, V2) when is_function(F) andalso is_atom(T) -> 8473 case F(V1, V2) of 8474 true -> 8475 ok; 8476 false -> 8477 wrong_type(T, V1) 8478 end. 8479 8480 8481is_OPTIONAL(_, asn1_NOVALUE) -> 8482 true; 8483is_OPTIONAL(F, Val) when is_function(F) -> 8484 F(Val). 8485 8486chk_OPTIONAL(_, asn1_NOVALUE, asn1_NOVALUE, _, _) -> 8487 ok; 8488chk_OPTIONAL(Type, asn1_NOVALUE = V1, V2, IS, _CHK) when is_function(IS) -> 8489 case IS(V2) of 8490 true -> 8491 not_equal(Type, V1, V2); 8492 false -> 8493 wrong_type(Type, V1, V2) 8494 end; 8495chk_OPTIONAL(Type, V1, asn1_NOVALUE = V2, IS, _CHK) when is_function(IS) -> 8496 case IS(V1) of 8497 true -> 8498 not_equal(Type, V1, V2); 8499 false -> 8500 wrong_type(Type, V1, V2) 8501 end; 8502chk_OPTIONAL(_Type, V1, V2, _IS, CHK) when is_function(CHK) -> 8503 CHK(V1, V2). 8504 8505 8506%% -- CHOICE -- 8507 8508is_CHOICE({Tag, Val}, Tags) when is_list(Tags) -> 8509 d("is_CHOICE -> entry with" 8510 "~n Tag: ~p" 8511 "~n Val: ~p", [Tag, Val]), 8512 is_CHOICE_tag(Tag, Tags) andalso 8513 is_CHOICE_val(Tag, Val, Tags); 8514is_CHOICE(_, _) -> 8515 false. 8516 8517is_CHOICE_tag(Tag, Tags) -> 8518 lists:keymember(Tag, 1, Tags). 8519 8520is_CHOICE_val(Tag, Val, Tags) -> 8521 {value, {_, IsVal, _}} = lists:keysearch(Tag, 1, Tags), 8522 IsVal(Val). 8523 8524 8525chk_CHOICE(V1, V2, Type, Tags) when is_atom(Type) and is_list(Tags) -> 8526 IsTag = fun(Tag) -> is_CHOICE_tag(Tag, Tags) end, 8527 IsVal = fun(Tag, Val) -> is_CHOICE_val(Tag, Val, Tags) end, 8528 ChkVal = fun(Tag, Val1, Val2) -> 8529 chk_CHOICE_val(Tag, Val1, Val2, Tags) 8530 end, 8531 chk_CHOICE(V1, V2, Type, IsTag, IsVal, ChkVal). 8532 8533chk_CHOICE_val(Tag, Val1, Val2, Tags) -> 8534 {value, {_, _, ChkVal}} = lists:keysearch(Tag, 1, Tags), 8535 ChkVal(Val1, Val2). 8536 8537chk_CHOICE({Tag, Val1} = V1, {Tag, Val2} = V2, Type, IsTag, IsVal, ChkVal) -> 8538 case (IsTag(Tag) andalso 8539 IsVal(Tag, Val1) andalso IsVal(Tag, Val2)) of 8540 true -> 8541 ChkVal(Tag, Val1, Val2); 8542 false -> 8543 wrong_type(Type, V1, V2) 8544 end; 8545chk_CHOICE({Tag1, Val1} = V1, {Tag2, Val2} = V2, Type, 8546 IsTag, IsVal, _ChkVal) -> 8547 case ((IsTag(Tag1) andalso IsVal(Tag1, Val1)) andalso 8548 (IsTag(Tag2) andalso IsVal(Tag2, Val2))) of 8549 true -> 8550 not_equal(Type, V1, V2); 8551 false -> 8552 wrong_type(Type, V1, V2) 8553 end; 8554chk_CHOICE(V1, V2, Type, _, _, _) -> 8555 wrong_type(Type, V1, V2). 8556 8557 8558%% -- SEQUENCE OF -- 8559 8560is_SEQUENCE_OF([], _) -> 8561 true; 8562is_SEQUENCE_OF([H|T], IS) when is_function(IS) -> 8563 IS(H) andalso is_SEQUENCE_OF(T, IS); 8564is_SEQUENCE_OF(_, _) -> 8565 false. 8566 8567chk_SEQUENCE_OF([], [], _, _, _) -> 8568 ok; 8569chk_SEQUENCE_OF([] = V1, V2, Type, _, _) -> 8570 not_equal(Type, V1, V2); 8571chk_SEQUENCE_OF(V1, [] = V2, Type, _, _) -> 8572 not_equal(Type, V1, V2); 8573chk_SEQUENCE_OF([H|T1], [H|T2], Type, IS, CHK) -> 8574 case IS(H) of 8575 true -> 8576 chk_SEQUENCE_OF(T1, T2, Type, IS, CHK); 8577 false -> 8578 Type2 = list_to_atom(atom_to_list(Type) ++ "_val"), 8579 wrong_type(Type2, H) 8580 end; 8581chk_SEQUENCE_OF([H1|T1], [H2|T2], Type, IS, CHK) -> 8582 Type2 = list_to_atom(atom_to_list(Type) ++ "_val"), 8583 validate(fun() -> CHK(H1, H2) end, Type2), 8584 chk_SEQUENCE_OF(T1, T2, Type, IS, CHK); 8585chk_SEQUENCE_OF(V1, V2, Type, _, _) -> 8586 wrong_type(Type, V1, V2). 8587 8588 8589%% ---------------------------------------------------------------------- 8590 8591compare_strings([] = L1, L2) -> 8592 {L1, L2}; 8593compare_strings(L1, [] = L2) -> 8594 {L1, L2}; 8595compare_strings([H|T1], [H|T2]) -> 8596 compare_strings(T1, T2); 8597compare_strings(L1, L2) -> 8598 {L1, L2}. 8599 8600strip_tab_and_newline([]) -> 8601 []; 8602strip_tab_and_newline([$\n|T]) -> 8603 strip_tab_and_newline(T); 8604strip_tab_and_newline([$\t|T]) -> 8605 strip_tab_and_newline(T); 8606strip_tab_and_newline([H|T]) -> 8607 [H|strip_tab_and_newline(T)]. 8608 8609 8610%% ---------------------------------------------------------------------- 8611 8612maybe_sort(L) when is_list(L) -> 8613 lists:sort(L); 8614maybe_sort(X) -> 8615 X. 8616 8617 8618%% ---------------------------------------------------------------------- 8619 8620atmost_once(Type, Val) -> 8621 error({atmost_once, {Type, Val}}). 8622 8623wrong_type(Type, Val) -> 8624 error({wrong_type, {Type, Val}}). 8625 8626wrong_type(Type, Val1, Val2) -> 8627 error({wrong_type, {Type, Val1, Val2}}). 8628 8629not_equal(What, Val1, Val2) -> 8630 error({not_equal, {What, Val1, Val2}}). 8631 8632error(Reason) -> 8633 throw({error, Reason}). 8634 8635 8636%% ---------------------------------------------------------------------- 8637 8638d(F) -> 8639 d(F, []). 8640 8641d(F, A) -> 8642 d(get(dbg), F, A). 8643 8644d(true, F, A) -> 8645 io:format("DBG:" ++ F ++ "~n", A); 8646d(_, _, _) -> 8647 ok. 8648 8649