From 21e778b998b895034453251d83c3e6aaa72fe395 Mon Sep 17 00:00:00 2001 From: Anders Svensson Date: Fri, 31 May 2013 14:46:59 +0200 Subject: Fix setting of Failed-AVP on {answer_message, 5xxx} from handle_request RFC 6733 says that certain 5xxx result codes must be accompanied by Failed-AVP, and decode populates #diameter_packet.errors with Result-Code/AVP pairs for errors it detects. However, Failed-AVP was not set in the outgoing answer if the handle_request callback returned {answer_message, 5xxx}. It is now set with the AVP from the first pair with the specified Result-Code, if found. Note that {answer_message, 5xxx} doesn't handle all cases in which a 5xxx answer is required, only that in which the setting above is appropriate. If it isn't then handle_request should construct its answer and return {reply, Ans}. --- lib/diameter/doc/src/diameter_app.xml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'lib/diameter/doc') diff --git a/lib/diameter/doc/src/diameter_app.xml b/lib/diameter/doc/src/diameter_app.xml index d4fb792787..e6c9cc9a90 100644 --- a/lib/diameter/doc/src/diameter_app.xml +++ b/lib/diameter/doc/src/diameter_app.xml @@ -565,7 +565,8 @@ Equivalent to

where Avps sets the Origin-Host, Origin-Realm, the specified -Result-Code and (if the request contained one) Session-Id AVP's.

+Result-Code and (if the request contained one) Session-Id AVP's, and +possibly Failed-AVP as described below.

Returning a value other than 3xxx or 5xxx will cause the request @@ -573,6 +574,14 @@ process in question to fail, as will returning a 5xxx value if the peer connection in question has been configured with the RFC 3588 common dictionary diameter_gen_base_rfc3588. (Since RFC 3588 only allows 3xxx values in an answer-message.)

+ +

+When returning 5xxx, Failed-AVP will be populated with the AVP of the +first matching Result-Code/AVP pair in the errors field of the +argument &packet;, if found. +If this is not appropriate then an answer-message should be +constructed explicitly and returned in a reply tuple +instead.

{relay, Opts} @@ -592,8 +601,7 @@ header of the relayed request.

The returned Opts should not specify detach. A subsequent &handle_answer; callback for the relayed request must return its first -argument, the #diameter_packet{} record containing the answer -message. +argument, the &packet; containing the answer message. Note that the extra option can be specified to supply arguments that can distinguish the relay case from others if so desired. Any other return value (for example, from a -- cgit v1.2.3