@@ -279,6 +279,7 @@ modparam("aaa_diameter", "max_json_log_size", 4096)
279279 <itemizedlist >
280280 <listitem >
281281 <para ><emphasis role =' bold' >1</emphasis > - Success
282+ (the Diameter Answer has a 2xxx Result-Code)
282283 </para >
283284 </listitem >
284285 <listitem >
@@ -291,6 +292,15 @@ modparam("aaa_diameter", "max_json_log_size", 4096)
291292 before an Answer could be processed)
292293 </para >
293294 </listitem >
295+ <listitem >
296+ <para ><emphasis role =' bold' >-3</emphasis > - Diameter error
297+ reply (the Answer has a non-2xxx Result-Code or
298+ an Experimental-Result AVP). The
299+ <xref linkend =" pv_diameter_result_code" /> and
300+ <xref linkend =" pv_diameter_experimental_result_code" />
301+ pseudo-variables can be used to inspect the exact error codes.
302+ </para >
303+ </listitem >
294304 </itemizedlist >
295305
296306 <para >
@@ -388,6 +398,13 @@ $var(payload) = "[
388398]";
389399
390400$var(rc) = dm_send_request(42, 92001, $var(payload), $var(rpl_avps));
401+ if ($var(rc) == -3) {
402+ xlog("Diameter error: Result-Code=$diameter_result_code, \
403+ Experimental-Result-Code=$diameter_experimental_result_code\n");
404+ } else if ($var(rc) < 0) {
405+ xlog("dm_send_request failed: $var(rc)\n");
406+ }
407+
391408xlog("rc: $var(rc), AVPs: $var(rpl_avps)\n");
392409$json(avps) := $var(rpl_avps);
393410
@@ -515,10 +532,14 @@ $var(payload) = "[
515532 ]}
516533]";
517534
518- async(dm_send_request(42, 92001, $var(payload), $var(rpl_avps), dm_reply);
535+ async(dm_send_request(42, 92001, $var(payload), $var(rpl_avps)) , dm_reply);
519536
520537route[dm_reply] {
521538 xlog("rc: $retcode, AVPs: $var(rpl_avps)\n");
539+ if ($retcode == -3) {
540+ xlog("Diameter error: Result-Code=$diameter_result_code, \
541+ Experimental-Result-Code=$diameter_experimental_result_code\n");
542+ }
522543 $json(avps) := $var(rpl_avps);
523544}
524545
@@ -528,6 +549,44 @@ route[dm_reply] {
528549
529550 </section >
530551
552+ <section id =" exported_pseudo_variables" xreflabel =" Exported Pseudo-Variables" >
553+ <title >Exported Pseudo-Variables</title >
554+
555+ <section id =" pv_diameter_result_code" xreflabel =" $diameter_result_code" >
556+ <title ><varname >$diameter_result_code</varname ></title >
557+ <para >
558+ Set after a <xref linkend =" func_dm_send_request" /> call completes
559+ (both synchronous and asynchronous). Contains the value of the
560+ <emphasis >Result-Code</emphasis > AVP (268) from the Diameter Answer,
561+ or <emphasis >0</emphasis > if the AVP was not present.
562+ </para >
563+ <para >
564+ This is useful for distinguishing between different Diameter error
565+ conditions (e.g. 3xxx protocol errors, 4xxx transient failures,
566+ 5xxx permanent failures).
567+ </para >
568+ </section >
569+
570+ <section id =" pv_diameter_experimental_result_code" xreflabel =" $diameter_experimental_result_code" >
571+ <title ><varname >$diameter_experimental_result_code</varname ></title >
572+ <para >
573+ Set after a <xref linkend =" func_dm_send_request" /> call completes
574+ (both synchronous and asynchronous). Contains the value of the
575+ <emphasis >Experimental-Result-Code</emphasis > AVP (298) extracted
576+ from within the grouped <emphasis >Experimental-Result</emphasis >
577+ AVP (297) of the Diameter Answer, or <emphasis >0</emphasis > if
578+ the AVP was not present.
579+ </para >
580+ <para >
581+ The Experimental-Result AVP is used by many Diameter applications
582+ (e.g. 3GPP/IMS) to convey vendor-specific result codes. When
583+ this AVP is present, the <xref linkend =" func_dm_send_request" />
584+ function will return <emphasis role =' bold' >-3</emphasis >.
585+ </para >
586+ </section >
587+
588+ </section >
589+
531590 <section id =" exported_events" xreflabel =" Exported Events" >
532591 <title >Exported Events</title >
533592 <section id =" event_dm_request" xreflabel =" E_DM_REQUEST" >
0 commit comments