<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Michael--<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​Sorry for the lapse, I've been pretty busy, but have broken away to look at this a little<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">closer.​</div><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 21, 2015 at 12:51 PM, Michael Ulitskiy <span dir="ltr"><<a href="mailto:mulitskiy@acedsl.com" target="_blank">mulitskiy@acedsl.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>
<div style="font-family:"Sans Serif";font-size:11pt;font-weight:400;font-style:normal">
<p style="margin:0px;text-indent:0px">Hi Steve,</p>
<p style="margin:0px;text-indent:0px"> </p>
<p style="margin:0px;text-indent:0px">In my opinion, while your idea sounds cool and dandy, going for a low-hanging fruit</p>
<p style="margin:0px;text-indent:0px">and making it possible to select endpoint match order (ip or from username) per-endpoint,</p>
<p style="margin:0px;text-indent:0px">would go a long way to improve current system and I'd have use case for it right now.</p>
<p style="margin:0px;text-indent:0px"> </p>
<p style="margin:0px;text-indent:0px">Currently endpoint match order is selected for the whole asterisk server by the order of loading</p>
<p style="margin:0px;text-indent:0px">res_pjsip_endpoint_identifier_* modules and that leaves much to be desired.</p></div></blockquote><div><br><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​This is interesting. I'm looking at the 13.5 code, and I see, in res_pjsip.c, the function: ast_sip_register_endpoint_identifier_with_name().<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">It is called as part of the load_module() process for each identify module.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">That function calls ast_sip_get_endpoint_identifier_order, which appears to return the string from the pjsip.conf file,<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">in the [global] section, the variable "endpoint_identifier_order"  (default in the sample file is: ip, username, anonymous).<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">It sets a priority that the code should respect, and force the list to be in that order, no matter what the <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">load order is.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">I also note that if you don't define that variable in the config file, the code just throws the modules into the list at the end,<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">which would sort them in order of loading. This seems to me a bug-- the sample file says there's a default, but<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">the code says otherwise.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">So, if you wish to set the global order, you should define the "endpoint_identifier_order" variable. And if it still<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">sorts by load order, then there's another bug to be fixed!<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">The function "ast_sip_identify_endpoint(rxdata)" is the function that gets called to actually find the endpoint for<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">the incoming sip message. It runs thru the endpoint_identifier_list as set up by the above _register func, and therefore,<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">the code should obey that order.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Mark Michelson also explained how the line=yes directive works in outbound registrations, as you would<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">expect from trunk providers, and that mechanism should work no matter what the endpoint_identifier_order was <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">set to be. I personally think this is a really cool way to tie incoming INVITES to the correct endpoint, when<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">several endpoints might otherwise qualify.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Here is a snippet from an email I got from Mark:<br><br><blockquote cite="mid:1514719270.40618.1445446271407.JavaMail.zimbra@nexvortex.com"><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><div>Question 1: Where should the ;line=xxxxx  field be included
          in the incoming invite, so that Asterisk can properly use it
          to select the correct endpoint?<br>
        </div>
        <div>(my personal guess: on the Contact: header ?)<br>
        </div>
      </div>
    </blockquote>
    <br>
    <span style="background-color:rgb(255,255,0)">Here's a bigger breakdown of how this works. Asterisk sends a
    REGISTER that looks something like:<br>
    REGISTER <a class="" href="mailto:sip:my_provider@my_provider.com" target="_blank">sip:my_provider@my_provider.com</a><br>
    From: <who_cares><br>
    To: <who_cares><br>
    Contact: <a class="" href="mailto:sip:my_contact_uri@my_pbx.com;line=ds824hds" target="_blank"><sip:my_contact_uri@my_pbx.com;line=ds824hds></a>;expires=3600<br>
    <br>
    So now, when the provider sends an INVITE to Asterisk, it should
    send INVITEs to <a class="" href="mailto:sip:my_contact_uri@my_pbx.com;line=ds824hds" target="_blank">sip:my_contact_uri@my_pbx.com;line=ds824hds</a>. That
    URI should be in either or both of the request-URI (i.e. the top
    line of the SIP packet) or the To header.<br>
    ...<br>... The trick here is that the line parameter is a URI parameter, rather
    than a parameter on the Contact header itself. The rule that the
    provider is following states that it needs to route the call to the
    URI that is bound to a particular AOR. If we bind a URI with a line
    parameter, then that line parameter had better show up in requests
    to us from the provider.<br>
    </span></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><span style="background-color:rgb(255,255,0)"><br></span></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">A little research shows that whoever you register to should regurgitate the URI you send in the contact header.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">And if "line=yes" is present, Asterisk will insert that "line=xxxxx" field in the contact URI, and when invites<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">arrives with the URI having that "line=xxxxx", it will match that to the correct specified endpoint.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">So, my idea applies to where the line=yes and the match= don't quite cut it.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">murf<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="font-family:"Sans Serif";font-size:11pt;font-weight:400;font-style:normal">
<p style="margin:0px;text-indent:0px"> </p>
<p style="margin:0px;text-indent:0px">Thanks,</p>
<p style="margin:0px;text-indent:0px">Michael</p><div><div>
<p style="margin:0px;text-indent:0px"> </p></div></div></div></blockquote><div> <br clear="all"></div></div><br>-- <br><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br>Steve Murphy<br>ParseTree Corporation<br>57 Lane 17<br>Cody, WY 82414<br>✉  murf at parsetree dot com<br>☎ <a href="tel:307-899-5535" value="+13078995535" target="_blank">307-899-5535</a></div></div></div></div></div></div>
</div></div>