diff options
author | Anders Svensson <[email protected]> | 2013-06-02 15:01:17 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2013-06-02 15:01:17 +0200 |
commit | 66afc0dfe18d33ac80ea6de949482c712e4beb9a (patch) | |
tree | c3751b39fe5092b4484fbf538b04717653dab21e /lib/diameter/src | |
parent | e87ef4db28bdb32299682a05314996e34cb5fe25 (diff) | |
parent | 21e778b998b895034453251d83c3e6aaa72fe395 (diff) | |
download | otp-66afc0dfe18d33ac80ea6de949482c712e4beb9a.tar.gz otp-66afc0dfe18d33ac80ea6de949482c712e4beb9a.tar.bz2 otp-66afc0dfe18d33ac80ea6de949482c712e4beb9a.zip |
Merge branch 'anders/diameter/5xxx_failed_avp/OTP-11092' into maint
* anders/diameter/5xxx_failed_avp/OTP-11092:
Fix setting of Failed-AVP on {answer_message, 5xxx} from handle_request
Diffstat (limited to 'lib/diameter/src')
-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) |