<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=FR link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi Anders</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I will try with error=false instead of [] as it was coded.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I wrongly understood the text. I understood that the stack returns an error excepted if error field was set to [] or false. My fault.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thx for feedback.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Br</p><p class=MsoNormal>René</p><p class=MsoNormal>Provenance : <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Courrier</a> pour Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='border:none;padding:0cm'><b>De : </b><a href="mailto:anders.gs.svensson@ericsson.com">anders.gs.svensson@ericsson.com</a><br><b>Envoyé le :</b>lundi 25 juin 2018 10:01<br><b>À : </b><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><b>Cc : </b><a href="mailto:rveyland2@gmail.com">rveyland2@gmail.com</a>; <a href="mailto:chandrashekhar.mullaparthi@gmail.com">chandrashekhar.mullaparthi@gmail.com</a><br><b>Objet :</b>Re: erlang-questions Digest, Vol 378, Issue 6</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>rveyland2@gmail.com writes:</p><p class=MsoNormal>> </p><p class=MsoNormal>> Dear Erlang Community,</p><p class=MsoNormal>> </p><p class=MsoNormal>> I?m a beginner in Erlang, and i have a question on diameter stack behavior.</p><p class=MsoNormal>> </p><p class=MsoNormal>> I ?m working on a sw acting as diameter peer server with a S6A app.</p><p class=MsoNormal>> </p><p class=MsoNormal>> I have noticed that when an diameter request is received with an error (for example an additional AVP not supported by dict), even if the packet provided in return value of the handle_request call back contains a valid answer with an AVP result-code=Success and header with errors=[] and is_error=false, the diameter stack return to client peer a diameter packet with an error 5001 (unsupported_avp) which is corresponding to the initial error found on request decoding (and not the answer sent in {reply, Reply}.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The diameter application can indeed modify your answer, but you can</p><p class=MsoNormal>tell it not to. Here's the doc for the handle_request callback in</p><p class=MsoNormal>diameter_app(3):</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>  The errors field specifies any results codes identifying errors</p><p class=MsoNormal>  found while decoding the request. This is used to set Result-Code</p><p class=MsoNormal>  and/or Failed-AVP in a returned answer unless the callback returns a</p><p class=MsoNormal>  #diameter_packet{} whose errors field is set to either a non-empty</p><p class=MsoNormal>  list of its own, in which case this list is used instead, or the</p><p class=MsoNormal>  atom false to disable any setting of Result-Code and Failed-AVP.</p><p class=MsoNormal>  Note that the errors detected by diameter are of the 3xxx and 5xxx</p><p class=MsoNormal>  series, Protocol Errors and Permanent Failures respectively. The</p><p class=MsoNormal>  errors list is empty if the request has been received in the relay</p><p class=MsoNormal>  application.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>That is set the errors field to false instead of [] and you should get</p><p class=MsoNormal>what you're expecting. (As Chandru did in his example.)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> If the initial diameter request is valid verus dict, then the answer provided by callback is sent back to client peer as expected.</p><p class=MsoNormal>> </p><p class=MsoNormal>> I would like to confirm that it is due to a bug from my sw (most probably?? ) </p><p class=MsoNormal>> </p><p class=MsoNormal>> So I have some questions?:</p><p class=MsoNormal>> - Is it a normal of diameter stack behavior </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Yes. Far enough back in time this was the only possible behaviour, but</p><p class=MsoNormal>in more recent times you can ...</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> o  if yes how to avoid/bypass it?? (how to send a valid answer even if request is seen in error)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>... set errors = false, as above.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> o If not?: on which criteria a predefined answer is sent back to the transport layer instead of the application?s callback one??</p><p class=MsoNormal>> - More globally: What is the simplest way to debug diameter stack in order to verify that data sent back by callback handler are ??as expected???? </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Like Chandru said, tracing on diameter_codec lets you see what is</p><p class=MsoNormal>actually sent. Something like the following will do in this case.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>dbg:tracer().</p><p class=MsoNormal>dbg:p(all, c).</p><p class=MsoNormal>dbg:tp(diameter_codec, encode, x).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Or [] instead of x if you only want to see what's encoded.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>/Anders, Erlang/OTP</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> </p><p class=MsoNormal>> Thx a lot by advance for your support.</p><p class=MsoNormal>> </p><p class=MsoNormal>> BR</p><p class=MsoNormal>> </p><p class=MsoNormal>> Ren? Veyland</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>