<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;}
@font-face
        {font-family:"Segoe UI Emoji";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* 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;}
/* List Definitions */
@list l0
        {mso-list-id:914390616;
        mso-list-template-ids:-1;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1
        {mso-list-id:1506869625;
        mso-list-template-ids:-1;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style></head><body lang=FR link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi Chandru</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thx for answer. I will crosscheck my sw again even if very similar. The issue is only visible if recevied diameter packet as an error raised.</p><p class=MsoNormal><br>For debuging, i will try your method too.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Br</p><p class=MsoNormal><br>René</p><p class=MsoNormal><o:p> </o:p></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:chandrashekhar.mullaparthi@gmail.com">Chandru</a><br><b>Envoyé le :</b>jeudi 21 juin 2018 18:32<br><b>À : </b><a href="mailto:rveyland2@gmail.com">René Veyland Mobile</a><br><b>Cc : </b><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><b>Objet :</b>Re: [erlang-questions] [OTP 19.3] [Diameter 1.12.2] Handle_requestwith error: reply not taken into account</p></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Hi René,</p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>On 21 June 2018 at 15:31, René Veyland Mobile <<a href="mailto:rveyland2@gmail.com" target="_blank">rveyland2@gmail.com</a>> wrote:</p></div><div><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Dear Erlang Community,</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I’m a beginner in Erlang, and i have a question on diameter stack behavior.</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I ‘m working on a sw acting as diameter peer server with a S6A app.</p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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 style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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 style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>I would like to confirm that it is due to a bug from my sw (most probably <span style='font-family:"Segoe UI Emoji",sans-serif'>☹</span> ) </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> </p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>So I have some questions :</p><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1'>Is it a normal of diameter stack behavior </li></ul><ul type=disc><ul type=circle><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level2 lfo1'> if yes how to avoid/bypass it ? (how to send a valid answer even if request is seen in error)</li></ul></ul></div></div></blockquote><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>This code works for me in the handle_request/3 callback:</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><p class=MsoNormal><span style='font-family:"Courier New"'>handle_request(#diameter_packet{msg = Req, transport_data = TD}, _SvcName, {_, Caps})</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>  when is_record(Req, 'diameter_gx_CCR') -></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    #diameter_caps{origin_host = {OH,_},</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                   origin_realm = {OR,_}}                = Caps,</span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    #'diameter_gx_CCR'{'Session-Id'          = Id,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                       'Auth-Application-Id' = AuthAppId,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                       'CC-Request-Type'     = ReqType,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                       'CC-Request-Number'   = ReqNum}  = Req,</span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    PolicyMap = get_policy(Req),</span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    CCA   = #'diameter_gx_CCA'{'Result-Code'                      = 2001,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Auth-Application-Id'              = AuthAppId,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Origin-Host'                      = OH,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Origin-Realm'                     = OR,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Session-Id'                       = Id,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'CC-Request-Type'                  = ReqType,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'CC-Request-Number'                = ReqNum,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Supported-Features'               = get_supported_features(),</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'QoS-Information'                  = get_qos(PolicyMap),</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                               'Charging-Rule-Install'            = get_crbn(PolicyMap)</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                              },</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    ReplyPacket = #diameter_packet{msg = CCA,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                                   header = #diameter_header{},</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                                   errors = false,</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>                                   transport_data = TD},</span></p></div><div><p class=MsoNormal><span style='font-family:"Courier New"'>    {reply, ReplyPacket};</span></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Also, when initialising the service, I tend to use the {strict_mbit, false} option this is a frequent annoyance.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><ul type=disc><ul type=circle><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo2'>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 » ?</li></ul></ul></div></div></blockquote><div><p class=MsoNormal>I've also found debugging diameter applications to be quite hard. I've had to resort to using dbg to trace calls in the diameter_codec module to figure out what was going wrong.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>regards,</p></div></div></div></div><p class=MsoNormal>Chandru</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>