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