<div dir="ltr">Hi Alex,<div class="gmail_extra"><br><div class="gmail_quote">On 7 February 2018 at 18:05, Alex Balashov <span dir="ltr"><<a href="mailto:abalashov@evaristesys.com" target="_blank">abalashov@evaristesys.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
(1) Most of the endpoints in question are NAT'd, and I was using<br>
fix_nated_register() and the "received AVP" for mitigation.<br>
<br>
Although the "Received" address is replicated by DMQ, using Path to<br>
discover the adjacent "last hop" registrar overwrites the destination<br>
set and stops the 'received' parameter from being utilised. Moreover,<br>
there is no way to intercept it before the lookup() overwrites $du with<br>
Path instead of 'received'.<br></blockquote><div><br></div><div>I would typically append the received IP/port to the Path header before saving:</div><div><br></div><div>    append_hf("Path: <sip:$Ri:$Rp;received=sip:$si:$sp;lr>\r\n");<br></div><div><br></div><div>The last-hop registrar (as defined in Path uri) can then do something like...<br></div><div><br></div>    $du = $(hdr(Route){param.value,received});</div><div class="gmail_quote"><br></div><div class="gmail_quote">...before sending it on its way.</div><div class="gmail_quote"><br></div><div class="gmail_quote">I recall that we also set path_use_received parameter, although from memory I couldn't say for sure if the above depended on it.</div><div class="gmail_quote"><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"> <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
(2) When multiple Contact bindings are available for the same AOR, both<br>
local and remote, it would be desirable to have an easy way of selecting<br>
the most adjacent one (i.e. the local one, in preference to the ones<br>
removed by one Path hop).<br>
<br>
Is there a nonobvious easy way to accomplish this, or am I going to have<br>
to switch from lookup() to reg_fetch_contacts() or walk the lookup()'d<br>
branches and find the one I want?<br></blockquote><div><br></div><div>I'm unsure about that one, I'm afraid, since we generally just append branches for all contacts in parallel (which lookup(), combined with the above, does very well).</div><div><br></div><div>There may be something that can be done with dmq_usrloc and q value, to ensure that local contacts have a higher priority - and then set append_branches parameter to 0 - but I am unaware of any existing way to accomplish it without, as you suggest, switching to reg_fetch_contacts().</div><div><br></div><div>Cheers,</div><div><br></div><div>Charles</div></div>
</div></div>

<br>
<div><font color="gray" style="font-size:10pt;font-family:Helvetica,Arial,sans-serif">Sipcentric Ltd.
                Company registered in England & Wales no. 7365592.</font><span style="font-size:10pt;font-family:Helvetica,Arial,sans-serif"> </span><font color="gray" style="font-size:10pt;font-family:Helvetica,Arial,sans-serif">Registered
                office: Faraday Wharf, Innovation Birmingham Campus, Holt Street, Birmingham Science Park, Birmingham B7 4BB.</font></div>