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-0600 | Date Closed: | 2018-11-20 07:35:32.000-0600 |
Priority: | Critical | Regression? | |
Status: | Closed/Complete | Components: | Resources/res_pjsip_session |
Versions: | 16.0.0 16.0.1 | Frequency of Occurrence | |
Related Issues: | |||
Environment: | Ubuntu 18.0.1 LTS | Attachments: | |
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. |