diff options
Diffstat (limited to 'lib/diameter/src/base/diameter_types.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_types.erl | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl index 86b674dd48..79312dfe13 100644 --- a/lib/diameter/src/base/diameter_types.erl +++ b/lib/diameter/src/base/diameter_types.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2010-2017. All Rights Reserved. +%% Copyright Ericsson AB 2010-2022. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -247,9 +247,19 @@ 2 == A, 16 == size(B) -> list_to_tuple([N || <<N:A/unit:8>> <= B]); +%% Bytes for non-IP address types are left for the user to interpret. +'Address'(decode, <<A:16, B/binary>>, _) + when 2 < A, A < 65535 -> + {A, B}; + 'Address'(decode, B, _) -> ?INVALID_LENGTH(B); +%% Allow IP address types as both 2- and 4/8-tuples. +'Address'(encode, {A, B}, _) + when 0 < A, A < 65535 -> + <<A:16, B/binary>>; + 'Address'(encode, T, _) -> Ns = tuple_to_list(diameter_lib:ipaddr(T)), %% length 4 or 8 A = length(Ns) div 4, %% 1 or 2 |