xadhoom left a comment (kamailio/kamailio#4301)

In the end, since to properly un-topos it needs some step and my C knowledge is 
not that good, I was able to do it from the script.

For example:
```
route[MANGLE_REFER] {
  if (!has_totag()) return;

  if (!is_method("REFER")) return;

  if ($rt ne "") {
    $var(hdrs) = $(rt{uri.headers});
    $var(hdrs) = $(var(hdrs){s.urldecode.param});
    $var(uri-user) = $(rt{uri.user});

    if ($(var(hdrs){param.in,Replaces,&}) == 0) {
      xlog("L_DBG", "Detected blind transfer to $rt skipping mangling \n");
      return;
    }

    $var(replaces) = $(var(hdrs){param.value,Replaces,&});
    $var(from-tag) = $(var(replaces){param.value,from-tag});
    $var(to-tag) = $(var(replaces){param.value,to-tag});
    $var(call-id) = $(var(replaces){s.select,0,;});

    xlog("L_DBG", "Got Refer-To: $rt \n");
    xlog("L_DBG", "Got Refer-To headers $var(hdrs) \n");
    xlog("L_DBG", "Got Refer-To replaces $var(replaces) \n");
    xlog("L_DBG", "Got Refer-To uri user $var(uri-user) \n");
    xlog("L_DBG", "Got Refer-To call-id $var(call-id) \n");
    xlog("L_DBG", "Got Refer-To from tag $var(from-tag) \n");
    xlog("L_DBG", "Got Refer-To to tag $var(to-tag) \n");

    $var(query) = $_s(SELECT b_contact FROM topos_d WHERE a_callid = 
'$var(call-id)' AND a_uuid = '$var(uri-user)');
    sql_xquery("conn1", "$var(query)", "topos_rset");
    switch ($rc) {
      case 1:
        xlog("L_DBG", "B-Contact for refer is $xavp(topos_rset=>b_contact)\n");
        break;
      case -1:
        xlog("L_ERR", "Error in topos lookup of refer target contact \n");
        return;
        break;
      default:
        xlog("L_ERR", "Unhandled result $rc in lookup of refer target contact 
\n");
        return;
    }

    remove_hf("Refer-To");

    $var(params) = 
$_s($var(call-id);to-tag=$var(to-tag);from-tag=$var(from-tag));
    $var(params_enc) = $(var(params){s.urlencode.param});
    $var(new_replaces) = $_s(Replaces=$var(params_enc));

    xlog("L_DBG", "Replacing refer target contact with $var(new_replaces) \n");

    append_hf("Refer-To: 
<$xavp(topos_rset=>b_contact)?$var(new_replaces)>\r\n");
  } else {
    xlog("L_ERR", "Uh? Refer without Refer-To \n");

    return;
  }
}
```

and then (for example) in call it from the route WITHIN_DIALOG just before the 
loose_route relay.

This won't work if call-id is masked, but in my setup I'm not using call-id 
masking.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/4301#issuecomment-3031264737
You are receiving this because you are subscribed to this thread.

Message ID: <kamailio/kamailio/issues/4301/3031264...@github.com>
_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to