diff options
author | Anders Svensson <[email protected]> | 2013-06-02 15:02:55 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2013-06-02 15:02:55 +0200 |
commit | 107625c4fd3e3a50f9c5cc3716899ff595bcda99 (patch) | |
tree | eb01db6e9606cc3fc432dd60626216def1da599f /lib/diameter/src/base/diameter_traffic.erl | |
parent | 28bb4559b2fada7028e253bb842b239ec8891345 (diff) | |
parent | 7417446d0e3c4e5e5a15f60b1879cabef1e26408 (diff) | |
download | otp-107625c4fd3e3a50f9c5cc3716899ff595bcda99.tar.gz otp-107625c4fd3e3a50f9c5cc3716899ff595bcda99.tar.bz2 otp-107625c4fd3e3a50f9c5cc3716899ff595bcda99.zip |
Merge branch 'maint'
Diffstat (limited to 'lib/diameter/src/base/diameter_traffic.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_traffic.erl | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl index 820d37535a..0b15e68ec7 100644 --- a/lib/diameter/src/base/diameter_traffic.erl +++ b/lib/diameter/src/base/diameter_traffic.erl @@ -479,10 +479,9 @@ answer_message(RC, #diameter_caps{origin_host = {OH,_}, origin_realm = {OR,_}}, Dict0, - #diameter_packet{avps = Avps} - = Pkt) -> + Pkt) -> ?LOG({error, RC}, Pkt), - {Dict0, answer_message(OH, OR, RC, Dict0, Avps)}. + {Dict0, answer_message(OH, OR, RC, Dict0, Pkt)}. %% resend/7 @@ -861,12 +860,14 @@ failed(Rec, FailedAvp, Dict) -> %% answer_message/5 -answer_message(OH, OR, RC, Dict0, Avps) -> +answer_message(OH, OR, RC, Dict0, #diameter_packet{avps = Avps, + errors = Es}) -> {Code, _, Vid} = Dict0:avp_header('Session-Id'), ['answer-message', {'Origin-Host', OH}, {'Origin-Realm', OR}, - {'Result-Code', RC} - | session_id(Code, Vid, Dict0, Avps)]. + {'Result-Code', RC}] + ++ session_id(Code, Vid, Dict0, Avps) + ++ failed_avp(RC, Es). session_id(Code, Vid, Dict0, Avps) when is_list(Avps) -> @@ -878,6 +879,15 @@ session_id(Code, Vid, Dict0, Avps) [] end. +%% Note that this should only match 5xxx result codes currently but +%% don't bother distinguishing this case. +failed_avp(RC, [{RC, Avp} | _]) -> + [{'Failed-AVP', [{'AVP', [Avp]}]}]; +failed_avp(RC, [_ | Es]) -> + failed_avp(RC, Es); +failed_avp(_, [] = No) -> + No. + %% find_avp/3 find_avp(Code, Vid, Avps) |