|Summary:||ASTERISK-24811: asterisk-publication sorcery object does not use realtime|
|Reporter:||Matt Hoskins (mhoskins)||Labels:|
|Date Opened:||2015-02-19 10:28:00.000-0600||Date Closed:||2015-02-21 18:42:45.000-0600|
|Environment:||ubuntu64 14.04||Attachments:||( 0) res_pjsip_publish_asterisk.c.patch|
|Description:||When configuring res_pjsip_publish_asterisk to use realtime in sorcery.conf, the module continues to use pjsip.conf. The expected behavior is to use the realtime system, defined in extconfig.
|Comments:||By: George Joseph (gjoseph) 2015-02-19 11:54:56.731-0600|
Matt, can you give me a config I can test with and some expected results?
By: Matt Hoskins (mhoskins) 2015-02-19 12:14:15.233-0600
Sure, no problem.
The intended configuration is this:
ps_asterisk_publication => odbc,asterisk-realtime
enabled => yes
dsn => asterisk-realtime-connector
pooling => yes
limit => 5
pre-connect => yes
With a mysql table with the following configuration:
CREATE TABLE `ps_asterisk_publication` (
`id` varchar(80) NOT NULL,
`devicestate_publish` varchar(40) DEFAULT NULL,
`mailboxstate_publish` varchar(40) DEFAULT NULL,
`device_state` enum('yes','no') DEFAULT 'no',
`mailbox_state` enum('yes','no') NOT NULL DEFAULT 'no',
`device_state_filter` varchar(80) DEFAULT NULL,
`mailbox_state_filter` varchar(80) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
With that configuration, When a SIP PUBLISH command is sent, asterisk responds with a 404 NOT FOUND:
<--- Received SIP request (582 bytes) from UDP:10.160.212.103:5060 --->
PUBLISH sip:email@example.com SIP/2.0
Via: SIP/2.0/UDP 10.160.212.103:5060;rport;branch=z9hG4bKPj97dca5b7-d4cf-46eb-9a3e-f8f66396adcb
CSeq: 55987 PUBLISH
<--- Transmitting SIP response (434 bytes) to UDP:10.160.212.103:5060 --->
SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 10.160.212.103:5060;rport=5060;received=10.160.212.103;branch=z9hG4bKPj97dca5b7-d4cf-46eb-9a3e-f8f66396adcb
CSeq: 55987 PUBLISH
However, if I use the attached patch, I receive a 200 OK and the devicestate and mwi are processed properly
By: Matt Hoskins (mhoskins) 2015-02-19 12:14:55.018-0600
possible patch to make res_pjsip_publish_asterisk use sorcery realtime.
By: Matt Hoskins (mhoskins) 2015-02-19 12:22:08.598-0600
I added some comments, not sure if I should have done that here, or not. I'm new to JIRA. :)
By: George Joseph (gjoseph) 2015-02-19 12:30:08.785-0600
The missing ast_sorcery_apply_config() is the culprit and I have a patch ready for that. Why did you comment out the reload?
By: Matt Hoskins (mhoskins) 2015-02-19 12:49:58.005-0600
Heh, out of pure ignorance. I literally copied the logic out of res_pjsip_pubsub.c and noticed that it did not have a reload section.
By: George Joseph (gjoseph) 2015-02-19 13:01:53.432-0600
Matt, can you test the patch from
and let me know.
By: Matt Hoskins (mhoskins) 2015-02-19 13:20:20.540-0600
Tested and I'm now getting the expected results. Thanks!
2 quick questions, if you don't mind:
Why the difference between creating a sorcery object and referring to it which each call vs using ast_sip_get_sorcery()?
Also, the documentation at https://wiki.asterisk.org/wiki/display/AST/Exchanging+Device+and+Mailbox+State+Using+PJSIP is wrong. It references using the 'endpoint' option on the asterisk-publication object, but that's not a valid option. I'd be happy to update that page with an additional set of pages to include using realtime configuration for SIP events.
By: George Joseph (gjoseph) 2015-02-19 13:35:21.810-0600
ast_sip_get_sorcery() is just a wrapper around the res_pjsip sorcery instance. It optimizes itself away and just saves the step of having to assign the sorcery instance pointer to a local variable. That being said, we're not very consistent about it. :)
Wiki updates would be most appreciated. You might want to add some comments to the page first and get some feedback.
I'm going to note in the review that you tested successfully if that's OK.
By: Matt Hoskins (mhoskins) 2015-02-19 13:42:25.737-0600
Sounds great. Thanks again for your quick replies. While I didn't actually commit code, I feel like I contributed. :)