<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <link href="chrome://translator/skin/floatingPanel.css"
      type="text/css" rel="stylesheet">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi fellow kamailio users,<br>
    <br>
    I'm playing actually with t_on_branch_failure, in a simultaneous
    forking scenario ( lookup("location") returns multiple contacts ).<br>
    <br>
    Any idea on how to get those "on_branch_failure" working ? <br>
    <br>
    Thanks in Advance !<br>
    <br>
    * Test by putting failure_exec_mode:<br>
    - at 1 => no branch failure being called, never.<br>
    - at 0 => t_relay does not fail if a single branch answers the
    transaction, even if all other branches are failing.<br>
    <br>
    * Test by moving the t_on_branch_failure("manage_branch_failure");
    line before or after the lookup("location") or on a _on_branch route
    to set it per branch.<br>
    - The on_route branch are executed, but never the failure one.<br>
    - tried also with failure_exec_mode = 0 or 1.<br>
    <br>
    * Using set_forward_no_connect, I can see in the logs a "Sending to
    branch X failed" but no failure route being executed. Without it,
    nothing in the logs indicating that the branch has timeout.<br>
    <br>
    * Config extract:<br>
    <br>
    # auto-discard branches from previous serial forking leg<br>
    modparam("tm", "failure_reply_mode", 3) # 3 by default<br>
    # default retransmission timeout: 30sec<br>
    modparam("tm", "fr_timer", 30000)<br>
    # default invite retransmission timeout after 1xx: 120sec<br>
    modparam("tm", "fr_inv_timer", 120000)<br>
    modparam("tm", "reparse_on_dns_failover", 0)<br>
    # 1: Allow branches to have a per branch failure route<br>
    # 0: t_relay should fail if a branch fail<br>
    modparam("tm", "failure_exec_mode", 1)<br>
    # Allow locally generated 408 to be forgotten in case a reply is
    received.<br>
    #modparam("tm", "faked_reply_prio", 2000)<br>
    <br>
    <br>
    # USER location service<br>
    route[LOCATION] {<br>
            t_on_branch_failure("manage_branch_failure");<br>
            if (!lookup("location")) {<br>
            ....<br>
            }<br>
            # Let's get back after 2.5s if no 100/Trying received.<br>
            t_set_fr(0, 2500);<br>
            # set_forward_no_connect();<br>
            #t_on_branch("SET_BRANCH_FAILURE");<br>
            route(RELAY);<br>
            exit;<br>
    }<br>
    <br>
    route[RELAY] {<br>
            ....<br>
            if (!t_relay()) {<br>
                    xlog("L_WARN","$rm|$ci|$fu|$tu|RELAY_FAILED");<br>
                    sl_reply_error();<br>
            }<br>
            exit();<br>
    }<br>
    <br>
    # set failure route per branch<br>
    branch_route[SET_BRANCH_FAILURE] {<br>
           
    xlog("L_WARN","$rm|$ci|$fu|$tu|SETTING_BrANCH_FAILURE_ROUTE");<br>
            t_on_branch_failure("manage_branch_failure");<br>
    }<br>
    <br>
    # manage failure routing cases per branch<br>
    event_route[tm:branch-failure:manage_branch_failure] {<br>
           
    xlog("L_WARN","$rm|$ci|$fu|$tu[$avp(dest_to)]|MANAGE_BRANCH_FAILURE");<br>
    }<br>
    <br>
    <br>
    <div style="bottom: auto; left: 161px; right: auto; top: 522px;
      display: none;" class="translator-theme-default"
      id="translator-floating-panel">
      <div title="Click to translate"
        id="translator-floating-panel-button"></div>
    </div>
  </body>
</html>