[Home]

Summary:ASTERISK-28175: PJSIP support for TEL (RFC 3966)
Reporter:ast (ast@nashdl.com)Labels:pjsip
Date Opened:2018-11-20 07:19:41.000-0600Date Closed:2018-11-20 07:35:32.000-0600
Priority:CriticalRegression?
Status:Closed/CompleteComponents:Resources/res_pjsip_session
Versions:16.0.0 16.0.1 Frequency of
Occurrence
Related
Issues:
Environment:Ubuntu 18.0.1 LTSAttachments:
Description:Essentially set up pjsip.conf to register to ITSP and made an endpoint to receive incoming calls.

Unfortunately received response advising that TEL is unknown or at least not a ‘SIP’ URI, actual SIP error phrase is “416 Unsupported URI Scheme”.

Chan_SIP is RFC 3966 compliant from what I can see but i would like to use PJSIP because there are more features, and after trialing running both together the system is unreliable. My preference is to just use PJSIP.



   Optus NBN Australia

   PJSIP Logging enabled
   <— Received SIP request (1697 bytes) from UDP:210.49.225.101:5060 —>
   INVITE sip:+61732103210@192.168.1.100:5060;line={weirdnumbers} SIP/2.0
   Max-Forwards: 65
   Via: SIP/2.0/UDP 210.49.225.101:5060;branch={weirdnumbers}
   To: “SIPLineUser SIPLineUser” tel:+6173210321
   From: “Anonymous” sip:anonymous@anonymous.invalid;tag={weirdnumbers}
   Call-ID: {weirdnumbers}@10.194.0.25
   CSeq: 1 INVITE
   Contact: sip:sgc_c@210.49.225.101;transport=udp
   Record-Route: sip:210.49.225.101;transport=udp;lr
   Min-Se: 900
   Privacy: id
   Session-Expires: 1800
   Supported: com.nortelnetworks.firewall
   Supported: p-3rdpartycontrol
   Supported: nosec
   Supported: join
   Supported: x-nortel-sipvc
   Supported: gin
   Supported: com.nortelnetworks.im.encryption
   Supported: 100rel
   Supported: resource-priority
   Supported: replaces
   User-Agent: Nortel SESM 19.0.1.0
   Content-Type: application/sdp
   Content-Length: 574
   X-Nt-Service: brdplayed=yes
   X-Nt-Corr-Id: {weirdnumber}@10.194.0.25
   X-Nortel-Profile: DEFAULT
   Allow: ACK, BYE, CANCEL, INVITE, OPTIONS, INFO, SUBSCRIBE, REFER, NOTIFY, PRACK, UPDATE
   v=0
   o=- 3257871432 3257871432 IN IP4 210.49.225.101
   s=-
   e=unknown@invalid.net
   c=IN IP4 210.49.123.41
   t=0 0
   m=audio 48426 RTP/AVP 8 0 18 101 110 111
   b=AS:80
   a=rtpmap:8 PCMA/8000
   a=rtpmap:0 PCMU/8000
   a=rtpmap:18 G729/8000
   a=fmtp:18 annexb=no
   a=rtpmap:101 telephone-event/8000
   a=ptime:20
   a=maxptime:20
   a=3gOoBTC
   a=rtpmap:110 AMR/8000
   a=fmtp:110 mode-change-period=2; mode-change-capability=2; mode-change-neighbor=1; max-red=0
   a=rtpmap:111 AMR/8000
   a=fmtp:111 octet-align=1; mode-change-period=2; mode-change-capability=2; mode-change-neighbor=1; max-red=0

   <— Transmitting SIP response (534 bytes) to UDP:210.49.225.101:5060 —>
   SIP/2.0 416 Unsupported URI Scheme
   Via: SIP/2.0/UDP 210.49.225.101:5060;received=210.49.225.101;branch={weirdnumbers}
   Record-Route: sip:210.49.225.101;transport=udp;lr
   Call-ID: {weirdnumbers}@10.194.0.25
   From: “Anonymous” sip:anonymous@anonymous.invalid;tag={weirdnumbers}
   To: “SIPLineUser SIPLineUser” tel:+6173210321;tag={weirdnumbers}
   CSeq: 1 INVITE
   Server: “{User_Agent}”
   Content-Length: 0
   <— Received SIP request (489 bytes) from UDP:210.49.225.101:5060 —>
   ACK sip:+61732103210@192.168.2.22:5060;line={weirdnumbers} SIP/2.0
   Max-Forwards: 70
   Via: SIP/2.0/UDP 210.49.225.101:5060;received=210.49.225.101;branch={weirdnumbers}
   To: “SIPLineUser SIPLineUser” tel:+61732103210;tag={weirdnumbers}
   From: “Anonymous” sip:anonymous@anonymous.invalid;tag={weirdnumbers}
   Call-ID: {weirdnumbers}@10.194.0.25
   CSeq: 1 ACK
   Content-Length: 0

   *CLI> pjsip set logger off
   PJSIP Logging disabled

I’m hoping someone whos awsome and a wizard with Asterisk can help me out with a configuration setting or advise if its possible to patch the source code for Asterisk 16.0.1 to permit the correct handling of a tel: uri invite.
Comments:By: Asterisk Team (asteriskteam) 2018-11-20 07:19:42.490-0600

Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution.

A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.

Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].

By: Joshua C. Colp (jcolp) 2018-11-20 07:35:32.532-0600

Feature requests are not accepted on the issue tracker[1] at this time.

[1] https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines#AsteriskIssueGuidelines-Howtorequestafeature

By: ast (ast@nashdl.com) 2018-11-20 07:40:15.617-0600

I noticed the Wiki Bot identified PJSIP_PARSE_URI(uri,type)

Searching version 16.0.1 there is a lot of places where this is mentioned.   Can someone provide some guidance. Gaining an understanding the data structures and best debugging practices / scripts would be helpful too.

---------------------------------
./channels/chan_pjsip.c - found matches...
       if (!(contact->uri = pjsip_parse_uri(packet->pool, tmp.ptr, tmp.slen, PJSIP_PARSE_URI_AS_NAMEADDR))) {
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip.c - found matches...
       if (!(uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0)) ||
--
       dlg->local.info->uri = pjsip_parse_uri(dlg->pool, dlg->local.info_str.ptr, dlg->local.info_str.slen, 0);
--
                       contact_hdr->uri = pjsip_parse_uri(rdata->tp_info.pool, (char *)contact,
--
       sip_uri = pjsip_parse_uri(pool, remote_uri.ptr, remote_uri.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip_messaging.c - found matches...
       parsed_name_addr = (pjsip_name_addr *) pjsip_parse_uri(tdata->pool, to, strlen(to),
--
       parsed_name_addr = (pjsip_name_addr *) pjsip_parse_uri(tdata->pool, from,
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip_outbound_publish.c - found matches...
       if (!(parsed = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0))) {
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip_outbound_registration.c - found matches...
       if (!(uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0)) ||
--        uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0);
--
       uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0);
--
               uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip_refer.c - found matches...
        * as pjsip_parse_uri require a NULL terminated uri
--
       target = pjsip_parse_uri(rdata->tp_info.pool, uri, uri_size - 1, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./res/res_pjsip_registrar.c - found matches...
       pjsip_uri *contact_uri = pjsip_parse_uri(details->pool, (char*)contact->uri, strlen(contact->uri), 0);
--
       hdr->uri = pjsip_parse_uri(tdata->pool, uri.ptr, uri.slen, PJSIP_PARSE_URI_AS_NAMEADDR);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/include/pjsip/sip_parser.h - found matches...
   /** If this option is specified, function #pjsip_parse_uri will return
--
   /** If this option is specified, function #pjsip_parse_uri and other
--
typedef void* (pjsip_parse_uri_func)(pj_scanner *scanner, pj_pool_t *pool,
--
                                               pjsip_parse_uri_func *func);
--
                                                 pjsip_parse_uri_func *func);
--
PJ_DECL(pjsip_uri*) pjsip_parse_uri( pj_pool_t *pool,
--
PJ_DECL(void) pjsip_parse_uri_param_imp(pj_scanner *scanner, pj_pool_t *pool,
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsip/sip_dialog.c - found matches...
   dlg->target = pjsip_parse_uri(dlg->pool, tmp.ptr, tmp.slen, 0);
--
   dlg->local.info->uri = pjsip_parse_uri(dlg->pool,
--
   dlg->remote.info->uri = pjsip_parse_uri(dlg->pool,
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsip/sip_parser.c - found matches...
   pjsip_parse_uri_func    *parse;
--
static pjsip_parse_uri_func* find_uri_handler(const pj_str_t *scheme)
--
                                              pjsip_parse_uri_func *func)
--
PJ_DEF(pjsip_uri*) pjsip_parse_uri( pj_pool_t *pool,
--
PJ_DEF(void) pjsip_parse_uri_param_imp( pj_scanner *scanner, pj_pool_t *pool,
--
   pjsip_parse_uri_param_imp(scanner, pool, pname, pvalue,
--
           pjsip_parse_uri_func *func = find_uri_handler(&scheme);
--
       pjsip_parse_uri_func *func;
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsip/sip_util.c - found matches...
       target = pjsip_parse_uri( tdata->pool, tmp.ptr, tmp.slen, 0);
--
       from->uri = pjsip_parse_uri( tdata->pool, tmp.ptr, tmp.slen,
--
       to->uri = pjsip_parse_uri( tdata->pool, tmp.ptr, tmp.slen,
--
   uri = pjsip_parse_uri(tdata->pool, dst_uri.ptr, dst_uri.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsip-simple/publishc.c - found matches...
   pubc->target_uri = pjsip_parse_uri( pubc->pool, tmp.ptr, tmp.slen, 0);
--
   pubc->from_hdr->uri = pjsip_parse_uri(pubc->pool, tmp.ptr, tmp.slen,
--
   pubc->to_hdr->uri = pjsip_parse_uri(pubc->pool, tmp.ptr, tmp.slen,
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsip-ua/sip_reg.c - found matches...
   regc->srv_url = pjsip_parse_uri( regc->pool, tmp.ptr, tmp.slen, 0);
--
   regc->from_hdr->uri = pjsip_parse_uri(regc->pool, tmp.ptr, tmp.slen,
--
   regc->to_hdr->uri = pjsip_parse_uri(regc->pool, tmp.ptr, tmp.slen,
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsua-lib/pjsua_acc.c - found matches...
                   pjsip_parse_uri(acc->pool, acc_cfg->id.ptr,
--
       reg_uri = pjsip_parse_uri(acc->pool, acc_cfg->reg_uri.ptr,
--
                       pjsip_parse_uri(acc->pool, cfg->id.ptr, cfg->id.slen,
--
       reg_uri = pjsip_parse_uri(acc->pool, cfg->reg_uri.ptr,
--
   uri = pjsip_parse_uri(tmp_pool, tmp.ptr, tmp.slen, 0);
--
       uri = pjsip_parse_uri(pool, tmp.ptr, tmp.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsua-lib/pjsua_call.c - found matches...
       uri = pjsip_parse_uri(tmp_pool, dup.ptr, dup.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsua-lib/pjsua_core.c - found matches...
   p = pjsip_parse_uri(pool, url, len, 0);
--
   p = pjsip_parse_uri(pool, url, len, 0);
--
   uri_obj = pjsip_parse_uri(tmp_pool, tmp_uri.ptr, tmp_uri.slen, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/pjsua-lib/pjsua_pres.c - found matches...
   uri = pjsip_parse_uri(pool, input.ptr, input.slen, 0);
--
   url = (pjsip_name_addr*)pjsip_parse_uri(buddy->pool, tmp.ptr, tmp.slen,
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip/src/test/uri_test.c - found matches...
   parsed_uri = pjsip_parse_uri(pool, input, entry->len, 0);
--
                         "<tt>pjsip_parse_uri()</tt> per second "
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip-apps/src/python/_pjsua.c - found matches...
   uri = pjsip_parse_uri(pool, tmp, strlen(tmp), 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip-apps/src/samples/footprint.c - found matches...
   pjsip_parse_uri(NULL, NULL, 0, 0);
- - - - - - - - - - - - - - - - -
---------------------------------
./third-party/pjproject/source/pjsip-apps/src/samples/pjsip-perf.c - found matches...
   p = pjsip_parse_uri(pool, url, len, 0);
- - - - - - - - - - - - - - - - -





By: Asterisk Team (asteriskteam) 2018-11-20 07:40:15.946-0600

This issue has been reopened as a result of your commenting on it as the reporter. It will be triaged once again as applicable.

By: Joshua C. Colp (jcolp) 2018-11-20 07:44:16.931-0600

This is not the proper place for such discussion. The link I provided has information on the developer resources such as the mailing list and other things. Generally though you'll need to ask specific targeted questions.