summaryrefslogtreecommitdiff
path: root/lib/diameter/src/base/diameter_types.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/diameter/src/base/diameter_types.erl')
-rw-r--r--lib/diameter/src/base/diameter_types.erl12
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