[asterisk-dev] PJSIP messaging : specifying the user portion of the request-URI

George Joseph gjoseph at sangoma.com
Tue May 4 13:30:01 CDT 2021


On Tue, May 4, 2021 at 8:49 AM Jean Aunis <jean.aunis at prescom.fr> wrote:

> Hi,
>
> I'm trying to send a SIP MESSAGE to a PJSIP endpoint, while specifying a
> destination number (that is, the "user" portion of the request URI in
> sip:user at domain.com).
>
> Currently, this is only possible by specifying the full request URI. For
> example, someone could use:
>
>  > MessageSend(pjsip:endpoint/sip:1000 at 12.0.0.1)
>
> to send a SIP MESSAGE to number 1000.
>
> But to do this, one needs to know the contact associated to the
> endpoint. This is a problem if the endpoint is dynamically registering
> to Asterisk: the contact information may change over time.
>
> When using the dialplan, there is a straightforward solution: using
> PJSIP_DIAL_CONTACTS.
>
> Things become tricky when using ARI or AMI. Retrieving the contact
> information requires sending an AMI request each time a SIP MESSAGE has
> to be sent... this can create a lot of overhead.
>
> chan_sip used to solve this problem this way: when calling
> MessageSend(sip:user at endpoint), "endpoint" was at first searched in the
> endpoints list before being used as a FQDN or an IP address.
>

The format that PJSIP_DIAL_CONTACTS returns is
PJSIP/user at endpoint/contact_uri
For example
PJSIP/8005551212 at provider/sip:sip.provider.com:5060

Dial() doesn't need the contact_uri  but it can be supplied.

I think the easiest way to solve this is to just allow MessageSend take
the same format as a simple dial string like so

MessageSend(pjsip:PJSIP/8005551212 at provider)
"pjsip:" routes the request to the pjsip channel driver.
"PJSIP/" tells the pjsip channel driver that what follows is formatted as a
dial string.

If you wanted to supply the contact_uri as well, you could do
MessageSend(pjsip:PJSIP/8005551212 at provider/sip:sip.provider.com:5060)
If not, we'd take the first contact of the first aor and use that.


>
> I understand this is more complex with PJSIP because there may be
> multiple AOR/ contacts for a single endpoint...
>

Yep, there's the issue and I'm not sure how to get around that other than
the caller specifying a specific contact uri or us trying every contact for
every aor associated to an endpoint and stopping when we get a
202 Message Accepted.

If we can stick to the first contact on the first aor or specifying
the specific contact uri, that's a quick  modification to my current
patch up on gerrit.  If we have to go down the route of trying
in turn, that's something that will need more thought.




>
> Any ideas ?
>
> Regards,
>
> Jean
>
>
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20210504/1367dae9/attachment.html>


More information about the asterisk-dev mailing list