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