aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter/src/base/diameter_gen.erl
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2017-07-06 09:58:07 +0200
committerAnders Svensson <[email protected]>2017-08-03 17:14:27 +0200
commit722fa41564381dff0b7aa2b465193db30bb2f02f (patch)
tree67afd73ba56f5a55b4b804c0f99d6202d58ab65c /lib/diameter/src/base/diameter_gen.erl
parente30c38a44bbe2872e5b9b0ad46774c19b6af5292 (diff)
downloadotp-722fa41564381dff0b7aa2b465193db30bb2f02f.tar.gz
otp-722fa41564381dff0b7aa2b465193db30bb2f02f.tar.bz2
otp-722fa41564381dff0b7aa2b465193db30bb2f02f.zip
Add service_opt() record_decode
To control whether or not messages and grouped AVPs are decoded to records, in #diameter_packet.msg and #diameter_avp.value respectively. The decode became unnecessary for diameter's needs in parent commit, which decoupled it from the checking of AVP arities.
Diffstat (limited to 'lib/diameter/src/base/diameter_gen.erl')
-rw-r--r--lib/diameter/src/base/diameter_gen.erl15
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/diameter/src/base/diameter_gen.erl b/lib/diameter/src/base/diameter_gen.erl
index 6f11583868..4879ad8f6c 100644
--- a/lib/diameter/src/base/diameter_gen.erl
+++ b/lib/diameter/src/base/diameter_gen.erl
@@ -174,7 +174,7 @@ enc_AVP(_Name, {_Dict, _AvpName, _Data} = T, Opts, _) ->
decode_avps(Name, Recs, #{module := Mod} = Opts) ->
{Avps, {Rec, AM, Failed}}
= mapfoldl(fun(T,A) -> decode(Name, Opts, Mod, T, A) end,
- {newrec(Mod, Name), #{}, []},
+ {newrec(Mod, Name, Opts), #{}, []},
Recs),
%% AM counts the number of top-level AVPs, which missing/4 then
%% uses when adding 5005 errors.
@@ -624,6 +624,9 @@ too_many(FieldName, M, Map) ->
%% set/5
+set(_, _, _, _, undefined = No) ->
+ No;
+
set(1, F, Value, Mod, Rec) ->
Mod:'#set-'({F, Value}, Rec);
@@ -723,5 +726,15 @@ empty(Name, #{module := Mod} = Opts) ->
%% ------------------------------------------------------------------------------
+%% newrec/3
+
+newrec(_, _, #{record_decode := false}) ->
+ undefined;
+
+newrec(Mod, Name, _) ->
+ newrec(Mod, Name).
+
+%% newrec/2
+
newrec(Mod, Name) ->
Mod:'#new-'(Mod:name2rec(Name)).