From cf37640e614ca0d9172b2b630eeb0672967cb9e3 Mon Sep 17 00:00:00 2001 From: Anders Svensson Date: Wed, 24 Apr 2013 11:28:10 +0200 Subject: Ensure setting Failed-AVP is appropriate When setting Failed-AVP in a message record, it was never tested that the field was actually present. RFC 6733 says it should be, 3588 says MAY. --- lib/diameter/src/base/diameter_traffic.erl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'lib/diameter/src/base/diameter_traffic.erl') diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl index 25b902e3f2..1ba5cf0b3e 100644 --- a/lib/diameter/src/base/diameter_traffic.erl +++ b/lib/diameter/src/base/diameter_traffic.erl @@ -621,8 +621,8 @@ reset(#diameter_packet{msg = Msg, errors = Es} = Pkt, Dict) -> reset(Msg, Dict, Es) when is_list(Es) -> - {E3, E5, Fs} = partition(Es), - FailedAVP = failed_avp(Msg, lists:reverse(Fs), Dict), + {E3, E5, Failed} = partition(Es), + FailedAVP = failed_avp(Msg, Failed, Dict), reset(set(Msg, FailedAVP, Dict), Dict, choose(is_answer_message(Msg, Dict), E3, E5)); @@ -740,14 +740,14 @@ rc(Rec, T, Dict) -> failed_avp(_, [] = No, _) -> No; -failed_avp(Rec, Failed, Dict) -> - [fa(Rec, [{'AVP', Failed}], Dict)]. +failed_avp(Rec, Avps, Dict) -> + [failed(Rec, [{'AVP', lists:reverse(Avps)}], Dict)]. %% Reply as name and tuple list ... -fa([MsgName | Values], FailedAvp, Dict) -> - R = Dict:msg2rec(MsgName), +failed([MsgName | Values], FailedAvp, Dict) -> + RecName = Dict:msg2rec(MsgName), try - Dict:'#info-'(R, {index, 'Failed-AVP'}), + Dict:'#info-'(RecName, {index, 'Failed-AVP'}), {'Failed-AVP', [FailedAvp]} catch error: _ -> @@ -758,8 +758,10 @@ fa([MsgName | Values], FailedAvp, Dict) -> end; %% ... or record. -fa(Rec, FailedAvp, Dict) -> +failed(Rec, FailedAvp, Dict) -> try + RecName = element(1, Rec), + Dict:'#info-'(RecName, {index, 'Failed-AVP'}), {'Failed-AVP', [FailedAvp]} catch error: _ -> -- cgit v1.2.3