1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2000-2020. 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 : Handle ASN.1 BER encoding of Megaco/H.248 24%%---------------------------------------------------------------------- 25 26-module(megaco_binary_encoder). 27 28-behaviour(megaco_encoder). 29 30%% API 31-export([encode_message/3, decode_message/3, 32 decode_mini_message/3, 33 34 encode_transaction/3, 35 encode_action_requests/3, 36 encode_action_request/3, 37 encode_action_reply/3, 38 39 version_of/2]). 40 41%% Backward compatible functions: 42-export([encode_message/2, decode_message/2]). 43 44-include_lib("megaco/src/engine/megaco_message_internal.hrl"). 45 46-define(BIN_LIB, megaco_binary_encoder_lib). 47 48 49%%---------------------------------------------------------------------- 50%% Convert a 'MegacoMessage' record into a binary 51%% Return {ok, Binary} | {error, Reason} 52%%---------------------------------------------------------------------- 53 54encode_message(EC, 55 #'MegacoMessage'{mess = #'Message'{version = V}} = MegaMsg) -> 56 encode_message(EC, V, MegaMsg). 57 58%% <BACKWARD-COMPAT-CLAUSE> 59encode_message([{version3,_}|EC], 1, MegaMsg) -> 60 AsnMod = megaco_ber_media_gateway_control_v1, 61 TransMod = megaco_binary_transformer_v1, 62 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 63%% </BACKWARD-COMPAT-CLAUSE> 64 65encode_message(EC, 1, MegaMsg) -> 66 AsnMod = megaco_ber_media_gateway_control_v1, 67 TransMod = megaco_binary_transformer_v1, 68 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 69 70%% <BACKWARD-COMPAT-CLAUSE> 71encode_message([{version3,_}|EC], 2, MegaMsg) -> 72 AsnMod = megaco_ber_media_gateway_control_v2, 73 TransMod = megaco_binary_transformer_v2, 74 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 75%% </BACKWARD-COMPAT-CLAUSE> 76 77encode_message(EC, 2, MegaMsg) -> 78 AsnMod = megaco_ber_media_gateway_control_v2, 79 TransMod = megaco_binary_transformer_v2, 80 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 81 82%% <DEPRECATED> 83encode_message([{version3,prev3c}|EC], 3, MegaMsg) -> 84 AsnMod = megaco_ber_media_gateway_control_prev3c, 85 TransMod = megaco_binary_transformer_prev3c, 86 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 87encode_message([{version3,prev3b}|EC], 3, MegaMsg) -> 88 AsnMod = megaco_ber_media_gateway_control_prev3b, 89 TransMod = megaco_binary_transformer_prev3b, 90 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 91encode_message([{version3,prev3a}|EC], 3, MegaMsg) -> 92 AsnMod = megaco_ber_media_gateway_control_prev3a, 93 TransMod = megaco_binary_transformer_prev3a, 94 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 95%% </DEPRECATED> 96 97%% <BACKWARD-COMPAT-CLAUSE> 98encode_message([{version3,v3}|EC], 3, MegaMsg) -> 99 AsnMod = megaco_ber_media_gateway_control_v3, 100 TransMod = megaco_binary_transformer_v3, 101 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list); 102%% </BACKWARD-COMPAT-CLAUSE> 103 104encode_message(EC, 3, MegaMsg) -> 105 AsnMod = megaco_ber_media_gateway_control_v3, 106 TransMod = megaco_binary_transformer_v3, 107 ?BIN_LIB:encode_message(EC, MegaMsg, AsnMod, TransMod, io_list). 108 109 110%%---------------------------------------------------------------------- 111%% Convert a transaction (or transactions in the case of ack) record(s) 112%% into a binary 113%% Return {ok, Binary} | {error, Reason} 114%%---------------------------------------------------------------------- 115 116%% <BACKWARD-COMPAT-CLAUSE> 117encode_transaction([{version3,_}|EC], 1, Trans) -> 118 AsnMod = megaco_ber_media_gateway_control_v1, 119 TransMod = megaco_binary_transformer_v1, 120 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 121%% </BACKWARD-COMPAT-CLAUSE> 122 123encode_transaction(EC, 1, Trans) -> 124 AsnMod = megaco_ber_media_gateway_control_v1, 125 TransMod = megaco_binary_transformer_v1, 126 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 127 128%% <BACKWARD-COMPAT-CLAUSE> 129encode_transaction([{version3,_}|EC], 2, Trans) -> 130 AsnMod = megaco_ber_media_gateway_control_v2, 131 TransMod = megaco_binary_transformer_v2, 132 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 133%% </BACKWARD-COMPAT-CLAUSE> 134 135encode_transaction(EC, 2, Trans) -> 136 AsnMod = megaco_ber_media_gateway_control_v2, 137 TransMod = megaco_binary_transformer_v2, 138 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 139 140%% <DEPRECATED> 141encode_transaction([{version3,prev3c}|EC], 3, Trans) -> 142 AsnMod = megaco_ber_media_gateway_control_prev3c, 143 TransMod = megaco_binary_transformer_prev3c, 144 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 145encode_transaction([{version3,prev3b}|EC], 3, Trans) -> 146 AsnMod = megaco_ber_media_gateway_control_prev3b, 147 TransMod = megaco_binary_transformer_prev3b, 148 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 149encode_transaction([{version3,prev3a}|EC], 3, Trans) -> 150 AsnMod = megaco_ber_media_gateway_control_prev3a, 151 TransMod = megaco_binary_transformer_prev3a, 152 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 153%% </DEPRECATED> 154 155%% <BACKWARD-COMPAT-CLAUSE> 156encode_transaction([{version3,v3}|EC], 3, Trans) -> 157 AsnMod = megaco_ber_media_gateway_control_v3, 158 TransMod = megaco_binary_transformer_v3, 159 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list); 160%% </BACKWARD-COMPAT-CLAUSE> 161 162encode_transaction(EC, 3, Trans) -> 163 AsnMod = megaco_ber_media_gateway_control_v3, 164 TransMod = megaco_binary_transformer_v3, 165 ?BIN_LIB:encode_transaction(EC, Trans, AsnMod, TransMod, io_list). 166 167 168%%---------------------------------------------------------------------- 169%% Convert a list of ActionRequest record's into a binary 170%% Return {ok, DeepIoList} | {error, Reason} 171%%---------------------------------------------------------------------- 172 173%% <BACKWARD-COMPAT-CLAUSE> 174encode_action_requests([{version3,_}|EC], 1, ActReqs) 175 when is_list(ActReqs) -> 176 AsnMod = megaco_ber_media_gateway_control_v1, 177 TransMod = megaco_binary_transformer_v1, 178 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 179%% </BACKWARD-COMPAT-CLAUSE> 180 181encode_action_requests(EC, 1, ActReqs) when is_list(ActReqs) -> 182 AsnMod = megaco_ber_media_gateway_control_v1, 183 TransMod = megaco_binary_transformer_v1, 184 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 185 186%% <BACKWARD-COMPAT-CLAUSE> 187encode_action_requests([{version3,_}|EC], 2, ActReqs) 188 when is_list(ActReqs) -> 189 AsnMod = megaco_ber_media_gateway_control_v2, 190 TransMod = megaco_binary_transformer_v2, 191 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 192%% </BACKWARD-COMPAT-CLAUSE> 193 194encode_action_requests(EC, 2, ActReqs) when is_list(ActReqs) -> 195 AsnMod = megaco_ber_media_gateway_control_v2, 196 TransMod = megaco_binary_transformer_v2, 197 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 198 199%% <DEPRECATED> 200encode_action_requests([{version3,prev3c}|EC], 3, ActReqs) 201 when is_list(ActReqs) -> 202 AsnMod = megaco_ber_media_gateway_control_prev3c, 203 TransMod = megaco_binary_transformer_prev3c, 204 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 205encode_action_requests([{version3,prev3b}|EC], 3, ActReqs) 206 when is_list(ActReqs) -> 207 AsnMod = megaco_ber_media_gateway_control_prev3b, 208 TransMod = megaco_binary_transformer_prev3b, 209 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 210encode_action_requests([{version3,prev3a}|EC], 3, ActReqs) 211 when is_list(ActReqs) -> 212 AsnMod = megaco_ber_media_gateway_control_prev3a, 213 TransMod = megaco_binary_transformer_prev3a, 214 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 215%% </DEPRECATED> 216 217%% <BACKWARD-COMPAT-CLAUSE> 218encode_action_requests([{version3,v3}|EC], 3, ActReqs) 219 when is_list(ActReqs) -> 220 AsnMod = megaco_ber_media_gateway_control_v3, 221 TransMod = megaco_binary_transformer_v3, 222 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list); 223%% </BACKWARD-COMPAT-CLAUSE> 224 225encode_action_requests(EC, 3, ActReqs) when is_list(ActReqs) -> 226 AsnMod = megaco_ber_media_gateway_control_v3, 227 TransMod = megaco_binary_transformer_v3, 228 ?BIN_LIB:encode_action_requests(EC, ActReqs, AsnMod, TransMod, io_list). 229 230 231%%---------------------------------------------------------------------- 232%% Convert a ActionRequest record into a binary 233%% Return {ok, DeepIoList} | {error, Reason} 234%%---------------------------------------------------------------------- 235 236%% <BACKWARD-COMPAT-CLAUSE> 237encode_action_request([{version3,_}|EC], 1, ActReq) -> 238 AsnMod = megaco_ber_media_gateway_control_v1, 239 TransMod = megaco_binary_transformer_v1, 240 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 241%% </BACKWARD-COMPAT-CLAUSE> 242 243encode_action_request(EC, 1, ActReq) -> 244 AsnMod = megaco_ber_media_gateway_control_v1, 245 TransMod = megaco_binary_transformer_v1, 246 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 247 248%% <BACKWARD-COMPAT-CLAUSE> 249encode_action_request([{version3,_}|EC], 2, ActReq) -> 250 AsnMod = megaco_ber_media_gateway_control_v2, 251 TransMod = megaco_binary_transformer_v2, 252 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 253%% </BACKWARD-COMPAT-CLAUSE> 254 255encode_action_request(EC, 2, ActReq) -> 256 AsnMod = megaco_ber_media_gateway_control_v2, 257 TransMod = megaco_binary_transformer_v2, 258 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 259 260%% <DEPRECATED> 261encode_action_request([{version3,prev3c}|EC], 3, ActReq) -> 262 AsnMod = megaco_ber_media_gateway_control_prev3c, 263 TransMod = megaco_binary_transformer_prev3c, 264 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 265encode_action_request([{version3,prev3b}|EC], 3, ActReq) -> 266 AsnMod = megaco_ber_media_gateway_control_prev3b, 267 TransMod = megaco_binary_transformer_prev3b, 268 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 269encode_action_request([{version3,prev3a}|EC], 3, ActReq) -> 270 AsnMod = megaco_ber_media_gateway_control_prev3a, 271 TransMod = megaco_binary_transformer_prev3a, 272 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 273%% </DEPRECATED> 274 275%% <BACKWARD-COMPAT-CLAUSE> 276encode_action_request([{version3,v3}|EC], 3, ActReq) -> 277 AsnMod = megaco_ber_media_gateway_control_v3, 278 TransMod = megaco_binary_transformer_v3, 279 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list); 280%% </BACKWARD-COMPAT-CLAUSE> 281 282encode_action_request(EC, 3, ActReq) -> 283 AsnMod = megaco_ber_media_gateway_control_v3, 284 TransMod = megaco_binary_transformer_v3, 285 ?BIN_LIB:encode_action_request(EC, ActReq, AsnMod, TransMod, io_list). 286 287 288%%---------------------------------------------------------------------- 289%% Convert a action reply into a deep io list 290%% Not yest supported by this binary codec! 291%% Return {ok, DeepIoList} | {error, Reason} 292%%---------------------------------------------------------------------- 293 294encode_action_reply(_EC, _V, _AcionReply) -> 295 {error, not_implemented}. 296 297 298%%---------------------------------------------------------------------- 299%% Detect (check) which version a message is 300%% Return {ok, Version} | {error, Reason} 301%%---------------------------------------------------------------------- 302 303%% <DEPRECATED> 304version_of([{version3,prev3c}|EC], Binary) -> 305 Decoders = [megaco_ber_media_gateway_control_v1, 306 megaco_ber_media_gateway_control_v2, 307 megaco_ber_media_gateway_control_prev3c], 308 ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); 309version_of([{version3,prev3b}|EC], Binary) -> 310 Decoders = [megaco_ber_media_gateway_control_v1, 311 megaco_ber_media_gateway_control_v2, 312 megaco_ber_media_gateway_control_prev3b], 313 ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); 314version_of([{version3,prev3a}|EC], Binary) -> 315 Decoders = [megaco_ber_media_gateway_control_v1, 316 megaco_ber_media_gateway_control_v2, 317 megaco_ber_media_gateway_control_prev3a], 318 ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); 319%% </DEPRECATED> 320 321%% <BACKWARD-COMPAT-CLAUSE> 322version_of([{version3,v3}|EC], Binary) -> 323 Decoders = [megaco_ber_media_gateway_control_v1, 324 megaco_ber_media_gateway_control_v2, 325 megaco_ber_media_gateway_control_v3], 326 ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders); 327%% </BACKWARD-COMPAT-CLAUSE> 328 329version_of(EC, Binary) -> 330 Decoders = [megaco_ber_media_gateway_control_v1, 331 megaco_ber_media_gateway_control_v2, 332 megaco_ber_media_gateway_control_v3], 333 ?BIN_LIB:version_of(EC, Binary, dynamic, Decoders). 334 335 336%%---------------------------------------------------------------------- 337%% Convert a binary into a 'MegacoMessage' record 338%% Return {ok, MegacoMessageRecord} | {error, Reason} 339%%---------------------------------------------------------------------- 340 341decode_message(EC, Binary) -> 342 decode_message(EC, 1, Binary). 343 344%% <DEPRECATED> 345decode_message([{version3,prev3c}|EC], dynamic, Binary) -> 346 Decoders = [{megaco_ber_media_gateway_control_v1, 347 megaco_binary_transformer_v1}, 348 {megaco_ber_media_gateway_control_v2, 349 megaco_binary_transformer_v2}, 350 {megaco_ber_media_gateway_control_prev3c, 351 megaco_binary_transformer_prev3c}], 352 ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); 353decode_message([{version3,prev3b}|EC], dynamic, Binary) -> 354 Decoders = [{megaco_ber_media_gateway_control_v1, 355 megaco_binary_transformer_v1}, 356 {megaco_ber_media_gateway_control_v2, 357 megaco_binary_transformer_v2}, 358 {megaco_ber_media_gateway_control_prev3b, 359 megaco_binary_transformer_prev3b}], 360 ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); 361decode_message([{version3,prev3a}|EC], dynamic, Binary) -> 362 Decoders = [{megaco_ber_media_gateway_control_v1, 363 megaco_binary_transformer_v1}, 364 {megaco_ber_media_gateway_control_v2, 365 megaco_binary_transformer_v2}, 366 {megaco_ber_media_gateway_control_prev3a, 367 megaco_binary_transformer_prev3a}], 368 ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); 369%% </DEPRECATED> 370 371%% <BACKWARD-COMPAT-CLAUSE> 372decode_message([{version3,v3}|EC], dynamic, Binary) -> 373 Decoders = [{megaco_ber_media_gateway_control_v1, 374 megaco_binary_transformer_v1}, 375 {megaco_ber_media_gateway_control_v2, 376 megaco_binary_transformer_v2}, 377 {megaco_ber_media_gateway_control_v3, 378 megaco_binary_transformer_v3}], 379 ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); 380%% </BACKWARD-COMPAT-CLAUSE> 381 382decode_message(EC, dynamic, Binary) -> 383 Decoders = [{megaco_ber_media_gateway_control_v1, 384 megaco_binary_transformer_v1}, 385 {megaco_ber_media_gateway_control_v2, 386 megaco_binary_transformer_v2}, 387 {megaco_ber_media_gateway_control_v3, 388 megaco_binary_transformer_v3}], 389 ?BIN_LIB:decode_message_dynamic(EC, Binary, Decoders, binary); 390 391 392%% -- Version 1 -- 393 394%% <BACKWARD-COMPAT-CLAUSE> 395decode_message([{version3,_}|EC], 1, Binary) -> 396 AsnMod = megaco_ber_media_gateway_control_v1, 397 TransMod = megaco_binary_transformer_v1, 398 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 399%% </BACKWARD-COMPAT-CLAUSE> 400 401decode_message(EC, 1, Binary) -> 402 AsnMod = megaco_ber_media_gateway_control_v1, 403 TransMod = megaco_binary_transformer_v1, 404 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 405 406 407%% -- Version 2 -- 408 409%% <BACKWARD-COMPAT-CLAUSE> 410decode_message([{version3,_}|EC], 2, Binary) -> 411 AsnMod = megaco_ber_media_gateway_control_v2, 412 TransMod = megaco_binary_transformer_v2, 413 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 414%% </BACKWARD-COMPAT-CLAUSE> 415 416decode_message(EC, 2, Binary) -> 417 AsnMod = megaco_ber_media_gateway_control_v2, 418 TransMod = megaco_binary_transformer_v2, 419 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 420 421 422%% -- Version 3 -- 423 424%% <DEPRECATED> 425decode_message([{version3,prev3c}|EC], 3, Binary) -> 426 AsnMod = megaco_ber_media_gateway_control_prev3c, 427 TransMod = megaco_binary_transformer_prev3c, 428 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 429decode_message([{version3,prev3b}|EC], 3, Binary) -> 430 AsnMod = megaco_ber_media_gateway_control_prev3b, 431 TransMod = megaco_binary_transformer_prev3b, 432 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 433decode_message([{version3,prev3a}|EC], 3, Binary) -> 434 AsnMod = megaco_ber_media_gateway_control_prev3a, 435 TransMod = megaco_binary_transformer_prev3a, 436 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 437%% </DEPRECATED> 438 439%% <BACKWARD-COMPAT-CLAUSE> 440decode_message([{version3,v3}|EC], 3, Binary) -> 441 AsnMod = megaco_ber_media_gateway_control_v3, 442 TransMod = megaco_binary_transformer_v3, 443 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary); 444%% </BACKWARD-COMPAT-CLAUSE> 445 446decode_message(EC, 3, Binary) -> 447 AsnMod = megaco_ber_media_gateway_control_v3, 448 TransMod = megaco_binary_transformer_v3, 449 ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary). 450 451 452%% <DEPRECATED> 453decode_mini_message([{version3,prev3c}|EC], dynamic, Bin) -> 454 Mods = [megaco_ber_media_gateway_control_v1, 455 megaco_ber_media_gateway_control_v2, 456 megaco_ber_media_gateway_control_prev3c], 457 ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); 458decode_mini_message([{version3,prev3b}|EC], dynamic, Bin) -> 459 Mods = [megaco_ber_media_gateway_control_v1, 460 megaco_ber_media_gateway_control_v2, 461 megaco_ber_media_gateway_control_prev3b], 462 ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); 463decode_mini_message([{version3,prev3a}|EC], dynamic, Bin) -> 464 Mods = [megaco_ber_media_gateway_control_v1, 465 megaco_ber_media_gateway_control_v2, 466 megaco_ber_media_gateway_control_prev3a], 467 ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); 468%% </DEPRECATED> 469 470%% <BACKWARD-COMPAT-CLAUSE> 471decode_mini_message([{version3,v3}|EC], dynamic, Bin) -> 472 Mods = [megaco_ber_media_gateway_control_v1, 473 megaco_ber_media_gateway_control_v2, 474 megaco_ber_media_gateway_control_v3], 475 ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); 476%% </BACKWARD-COMPAT-CLAUSE> 477 478decode_mini_message(EC, dynamic, Bin) -> 479 Mods = [megaco_ber_media_gateway_control_v1, 480 megaco_ber_media_gateway_control_v2, 481 megaco_ber_media_gateway_control_v3], 482 ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary); 483 484%% <BACKWARD-COMPAT-CLAUSE> 485decode_mini_message([{version3,_}|EC], 1, Bin) -> 486 AsnMod = megaco_ber_media_gateway_control_v1, 487 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 488%% </BACKWARD-COMPAT-CLAUSE> 489 490decode_mini_message(EC, 1, Bin) -> 491 AsnMod = megaco_ber_media_gateway_control_v1, 492 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 493 494%% <BACKWARD-COMPAT-CLAUSE> 495decode_mini_message([{version3,_}|EC], 2, Bin) -> 496 AsnMod = megaco_ber_media_gateway_control_v2, 497 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 498%% </BACKWARD-COMPAT-CLAUSE> 499 500decode_mini_message(EC, 2, Bin) -> 501 AsnMod = megaco_ber_media_gateway_control_v2, 502 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 503 504%% <DEPRECATED> 505decode_mini_message([{version3,prev3c}|EC], 3, Bin) -> 506 AsnMod = megaco_ber_media_gateway_control_prev3c, 507 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 508decode_mini_message([{version3,prev3b}|EC], 3, Bin) -> 509 AsnMod = megaco_ber_media_gateway_control_prev3b, 510 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 511decode_mini_message([{version3,prev3a}|EC], 3, Bin) -> 512 AsnMod = megaco_ber_media_gateway_control_prev3a, 513 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 514%% </DEPRECATED> 515 516%% <BACKWARD-COMPAT-CLAUSE> 517decode_mini_message([{version3,v3}|EC], 3, Bin) -> 518 AsnMod = megaco_ber_media_gateway_control_v3, 519 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary); 520%% </BACKWARD-COMPAT-CLAUSE> 521 522decode_mini_message(EC, 3, Bin) -> 523 AsnMod = megaco_ber_media_gateway_control_v3, 524 ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary). 525 526 527 528