2016-09-08 16:16 +0000 Asterisk Development Team * asterisk 13.11.1 Released. 2016-09-08 11:16 +0000 [d8a81fec53] gtjoseph * Release summaries: Remove previous versions 2016-09-08 11:16 +0000 [badd123db6] gtjoseph * .version: Update for 13.11.1 2016-09-08 11:16 +0000 [6cd23f388f] gtjoseph * .lastclean: Update for 13.11.1 2016-09-08 11:16 +0000 [c8f3fffc5b] gtjoseph * realtime: Add database scripts for 13.11.1 2016-09-08 10:55 +0000 [3e0e51e779] gtjoseph * ChangeLog: Updated for 13.11.1 2016-09-08 10:55 +0000 [6b205cc6b2] gtjoseph * Release summaries: Add summaries for 13.11.1 2016-09-08 10:55 +0000 [bb0fca4542] gtjoseph * Release summaries: Remove previous versions 2016-09-08 10:55 +0000 [3b9c0a4320] gtjoseph * .version: Update for 13.11.1 2016-09-08 10:55 +0000 [cd8a1dacf7] gtjoseph * .lastclean: Update for 13.11.1 2016-09-08 10:55 +0000 [3fd208aafc] gtjoseph * realtime: Add database scripts for 13.11.1 2016-08-23 06:35 +0000 [58c4b9671f] Corey Farrell (license 5909) * chan_sip: Don't allocate new RTP instances on top of old ones. In some scenarios dialog_initialize_rtp can be called multiple times on the same dialog. This can cause RTP instances to be leaked along with multiple file descriptors for each instance. This change makes it so the existing RTP instances are destroyed and not overwritten, stopping the memory leak. ASTERISK-26272 #close patches: ASTERISK-26272-13.patch submitted by Corey Farrell (license 5909) Change-Id: Id529de1184c68f2f4d254ab41a1f458dafdb5f73 2016-08-16 15:34 +0000 [aeb14872e2] Mark Michelson * res_pjsip: Do not crash on ACKs from unknown endpoints. The endpoint identification PJSIP module is intended to identify which endpoint an incoming request is from. If an endpoint is not identified, then an artificial endpoint is used in its place when proceeding. The problem is that the ACK request type is an exception to the rule. The artificial endpoint is not used when processing an ACK. This results in the possibility of having a NULL endpoint being used further on. The reason ACK is an exception is an attempt not to spam security logs with unidentified requests. Presumably, you've already logged the unidentified request on the preceeding INVITE. Up until Asterisk 13.10, retrieving a NULL endpoint in this fashion didn't cause an issue. A new change in 13.10 added endpoint ACL checking shortly after endpoint identification. Because we are accessing a NULL endpoint, this ACL check resulted in a crash. The fix here is to be sure to retrieve the artificial endpoint for all request types. ACKs still do not generate unidentified request security events. ASTERISK-26264 #close Reported by nappsoft AST-2016-006 Change-Id: Ie0c795ae2d72273decb972dd74b6a1489fb6b703 2016-09-01 16:23 +0000 Asterisk Development Team * asterisk 13.11.0 Released. 2016-09-01 11:23 +0000 [ca795030aa] Kevin Harwell * Release summaries: Add summaries for 13.11.0 2016-09-01 11:20 +0000 [7d843d0bb5] Kevin Harwell * Release summaries: Remove previous versions 2016-09-01 11:20 +0000 [e29b6f0326] Kevin Harwell * .version: Update for 13.11.0 2016-09-01 11:20 +0000 [7b5be70a53] Kevin Harwell * .lastclean: Update for 13.11.0 2016-09-01 11:20 +0000 [e22edb0481] Kevin Harwell * realtime: Add database scripts for 13.11.0 2016-09-01 11:14 +0000 [9cb51fb550] Kevin Harwell * ChangeLog: Updated for 13.11.0 2016-09-01 11:14 +0000 [5c3bffce09] Kevin Harwell * Release summaries: Add summaries for 13.11.0 2016-09-01 11:12 +0000 [7b9cb3c450] Kevin Harwell * Release summaries: Remove previous versions 2016-09-01 11:12 +0000 [ebd944a54d] Kevin Harwell * .version: Update for 13.11.0 2016-09-01 11:12 +0000 [fa7feca7dd] Kevin Harwell * .lastclean: Update for 13.11.0 2016-09-01 11:12 +0000 [dcb70dfaea] Kevin Harwell * realtime: Add database scripts for 13.11.0 2016-08-30 18:12 +0000 Asterisk Development Team * asterisk 13.11.0-rc2 Released. 2016-08-30 13:11 +0000 [3d2ed81c1b] Kevin Harwell * Release summaries: Add summaries for 13.11.0-rc2 2016-08-30 13:11 +0000 [313683b96d] Kevin Harwell * Release summaries: Remove previous versions 2016-08-30 13:11 +0000 [2a99049ea4] Kevin Harwell * .version: Update for 13.11.0-rc2 2016-08-30 13:11 +0000 [620046255f] Kevin Harwell * .lastclean: Update for 13.11.0-rc2 2016-08-30 13:11 +0000 [09647449e4] Kevin Harwell * realtime: Add database scripts for 13.11.0-rc2 2016-08-24 14:42 +0000 [e64170e493] gtjoseph * res_rtp_multicast: Fix SEGV in ast_multicast_rtp_create_options ast_multicast_rtp_create_options now checks for NULL or empty options Change-Id: Ib845eae46a67a9787e89a87ebd1027344e5e0362 (cherry picked from commit c9e83f6d0be9d89a3beaa509b46c423d78fac6d1) 2016-08-30 09:53 +0000 [91e415b970] Kevin Harwell * ChangeLog: Updated for 13.11.0-rc2 2016-08-30 09:53 +0000 [9c8a7bf1e9] Kevin Harwell * Release summaries: Add summaries for 13.11.0-rc2 2016-08-30 09:53 +0000 [c29eb6cad1] Kevin Harwell * Release summaries: Remove previous versions 2016-08-30 09:53 +0000 [53ab4718ac] Kevin Harwell * .version: Update for 13.11.0-rc2 2016-08-30 09:53 +0000 [98b7b9e101] Kevin Harwell * .lastclean: Update for 13.11.0-rc2 2016-08-30 09:53 +0000 [9de68f3d44] Kevin Harwell * realtime: Add database scripts for 13.11.0-rc2 2016-08-22 17:08 +0000 [6da8511a6a] Mark Michelson * res_pjsip: Default endpoints to the "offline" status. A recent change attempted to optimize startup by not updating contact status. Instead, code responsible for qualifying contacts updates the status as it becomes known. The code even accounts for contacts/AORs that are not set to be qualified. The problem, though, is when there are no contacts associated with an endpoint. A common case is when an endpoint is set to register its contacts but has not done so yet. In this case, prior to registration, the endpoint's device state will appear to be "not in use" and hints associated with that device will appear to be "idle". In actuality, the device state and hint should both appear as "unavailable". The reason for the failure is that the optimization change made all persistent endpoint states set to "unknown". The fix here is to change the hard-coded "unknown" to be "offline" instead. The default state will be offline until the qualifying code determines that the contact is actually online. This way, if there are no contacts at all, then the state stays as offline, and device state and hints appear correctly. ASTERISK-26269 #close Reported by nappsoft Change-Id: Ie99b84169393983453076f5e9c0d35ff313a456a (cherry picked from commit c16ef02318201f9db2e26512ec66cd62ec878d04) 2016-08-25 07:06 +0000 [884db40142] Joshua Colp * app_queue: Ensure member is removed from pending when hanging up. When dialing channels it is possible that they may not ever leave the not in use state (Local channels in particular) by the time we cancel them. If this occurs but we know they were dialed we explicitly remove them from the pending members container so that subsequent call attempts occur. ASTERISK-26299 #close Change-Id: I6ad0d17c36480c92cebf840626228ce3f7e4bd65 2016-07-17 18:28 +0000 [ba7582ba75] gtjoseph * pjproject_bundled: Update for pjproject 2.5.5 Add more --disable-* switches to Makefile.rules including --disable-opus which was causing bundled pjproject to fail with "undefined reference" errors in libasteriskpj. Changed PJ_ENABLE_EXTRA_CHECK to 1. Removed 2 obsolete patches and added a new one. The new one was merged by Teluu on 6/27/2016. ASTERISK-26148 #close Change-Id: Ib8af6c6a9d31f7238ce65b336134c2efdc855063 (cherry picked from commit 972cee2e4c402df3ddce237951e9d54281093be4) 2016-07-29 13:13 +0000 [e6c2a29ad2] Mark Michelson * Remove SILK payload mappings from Asterisk core. SILK is a bit of a hog when it comes to using up our limited number of dynamic payload types in the RTP engine. By freeing up four slots, it allows for other codecs to potentially take the place. Now, codec_silk.so will dynamically use the payload slots in the RTP engine when it loads. A better fix would be make RTP dynamic payload types actually dynamic. However, at this stage of Asterisk 14 development, this is a risky move that would be imprudent. Change-Id: I5774e09408f9a203db189529eabdc0d3f4c1e612 (cherry picked from commit d50895c7b04036aeaad58990089399e46db4c817) 2016-07-28 14:32 +0000 Asterisk Development Team * asterisk 13.11.0-rc1 Released. 2016-07-28 09:29 +0000 [3bfaf6b172] Mark Michelson * Release summaries: Add summaries for 13.11.0-rc1 2016-07-28 09:27 +0000 [ca145e1807] Mark Michelson * .version: Update for 13.11.0-rc1 2016-07-28 09:27 +0000 [918ebf79ff] Mark Michelson * .lastclean: Update for 13.11.0-rc1 2016-07-28 09:27 +0000 [d7afc1cf9d] Mark Michelson * realtime: Add database scripts for 13.11.0-rc1 2016-07-21 22:28 +0000 [159e437e5a] Richard Mudgett * dsp.c: Fix erroneous fax tone detection. The Goertzel calculations get less accurate the lower the signal level being worked with becomes because there is less resolution remaining. If it is too low we can erroneously detect a tone where none really exists. The searched for fax frequencies not only need to be so much stronger than the background noise they must also be a minimum strength. * Add needed minimum threshold test to tone_detect(). * Set TONE_THRESHOLD to allow low volume frequency spread detection. ASTERISK-26237 #close Reported by: Richard Mudgett Change-Id: I84dbba7f7628fa13720add6a88eae3b129e066fc 2016-07-22 14:44 +0000 [eda95236d1] Mark Michelson * Fix sqlalchemy error regarding identifier length. sqlalchemy was complaining: sqlalchemy.exc.IdentifierError: Identifier 'ps_contacts_qualifyfreq_exptime' exceeds maximum length of 30 characters This fixes the problem by changing the index name to be "ps_contacts_qualifyfreq_exp" instead. ASTERISK-26227 #close Reported by Mark Michelson Change-Id: I0ed784f87504be2a59ee8d3242ef6f625d5ed1a9 2016-07-22 05:46 +0000 [66c9dfb272] Alexander Traud * chan_sip: Enable Session-Timers for SIP over TCP (and TLS). Asterisk defaults to timers=accept/refresher=uas. In that scenario, only in that scenario, Sessions-Timers (RFC 4028) had no effect via TCP. This change enables Session-Timers for SIP over TCP (and for SIP over TLS). However with longer international calls via TCP, the SIP channel might break, because all hops on the Internet route must stay online (have not a single power outage, for example). Therefore with Session-Timers enabled (which are enabled at default), you might see dropped calls. Consequently even with this change, you might be better-off going for session-timers=refuse in your sip.conf. ASTERISK-19968 #close Change-Id: I1cd33453c77c56c8e1394cd60a6f17bb61c1d957 2016-07-15 16:16 +0000 [33716106e0] Richard Mudgett * res_pjsip: Whitespace and comment cleanup. Change-Id: I11139a4a95df34e223ba622aa6227e33ab8f6c38 2016-07-21 09:05 +0000 [52ab0bf258] gtjoseph * chan_sip: Prevent deadlock when issuing "sip show channels" sip_show_channels locks the dialogs container first then locks each sip_pvt so it can spit out the details. The rest of sip dialog processing locks the sip_pvt first then locks the dialogs container if it needs to. Both lock in the order they need but deadlocks can result. To fix, sip_show_channels and sip_show_channelstats have been converted to use an iterator rather than ao2_callback. This way the container is locked only while getting the next entry and is unlocked when the callback is called. ASTERISK-23013 #close Change-Id: Id9980419909e811f89484950ed46ef117b9eb990 2016-07-19 15:22 +0000 [5997ec7c9e] Alexei Gradinari * res_pjsip_pubsub: fixed a bug when pjsip_tx_data_dec_ref is called twice. This patch removed call of pjsip_tx_data_dec_ref in send_notify if send_request failed. The pjsip_dlg_send_request deletes the message on error by itself. It seems this patch fixes next issues: ASTERISK-26199 ASTERISK-26166 ASTERISK-26174 Change-Id: I8b05917c93d993f95d604c042ace5f1a5500f59a 2016-07-18 22:46 +0000 [7fdf7c3d4c] Corey Farrell * Add conditional support for noreturn functions. This adds support for tagging functions with the noreturn attribute. If DO_CRASH is enabled then ast_do_crash never returns. If AST_DEVMODE and DO_CRASH are enabled then failed assertions never return. This can resolve a large number of false positives with static analyzers. ASTERISK-26220 #close Change-Id: Icfb61e5fe54574eced4c3e88b317244f467ec753 2016-07-19 13:18 +0000 [dcb8aa8c1c] Richard Mudgett * chan_dahdi.c: Fix deadlock potential in fax redirection. The dahdi_handle_dtmf() and my_handle_dtmf() have the potential to deadlock if an incoming fax happens during the Playback or similar application. * Fixed the potential deadlock by not calling ast_async_goto() with the channel lock held. ASTERISK-26216 #close Reported by: Richard Mudgett Change-Id: I9144b84ade5f96690996624ec8a2d40c56af40aa 2016-07-13 18:49 +0000 [fa91cf3eec] Richard Mudgett * chan_sip.c: Fix deadlock potential in fax redirection. The sip_read() has the potential to deadlock if an incoming fax happens during the Playback or similar application. * Fixed the potential deadlock by not calling ast_async_goto() with the channel lock held. * Made always eat the fax detection frame whether there is a fax extension or not. ASTERISK-26216 Reported by: Richard Mudgett Change-Id: I6d3f5cccd4b77c3aa6ffc1a54c0f6bde61c9278e 2016-07-13 18:48 +0000 [2e1bdc3775] Richard Mudgett * chan_pjsip.c: Fix deadlock potential in fax redirection. The chan_pjsip_cng_tone_detected() has the potential to deadlock if an incoming fax happens during the Playback or similar application. * Fixed the potential deadlock by not calling ast_async_goto() with the channel lock held. * Made always eat the fax detection frame whether there is a fax extension or not. ASTERISK-26216 Reported by: Richard Mudgett Change-Id: I32aecbb4818af646dc5a619f0dc040e9b1f222e5 2016-07-12 17:33 +0000 [628e8c91d5] Richard Mudgett * res_fax.c: Fix deadlock potential in FAXOPT(faxdetect) framehook. The fax_detect_framehook() has the potential to deadlock if an incoming fax happens during the Playback or similar application. * Fixed the potential deadlock by not calling ast_async_goto() with the channel lock held. * Made always eat the fax detection frame whether there is a fax extension or not. * Made only detach the framehook if we detected a fax and not on other possible frames. ASTERISK-26216 Reported by: Richard Mudgett Change-Id: I99da35c26d1cd802626ffb4c1b4eb5b015581b6d 2016-07-12 17:24 +0000 [676aeede36] Richard Mudgett * res_fax: Fix FAXOPT(faxdetect) timeout option. The fax detection timeout option did not work because basically the wrong variable was checked in fax_detect_framehook(). As a result, the timer would timeout immediately and disable fax detection. * Fixed ignoring negative timeout values. We'd complain and then go right on using the negative value. * Fixed destroy_faxdetect() in the off-nominal case of an incomplete object creation. * Added more range checking to FAXOPT(gateway) timeout parameter. ASTERISK-26214 #close Reported by: Richard Mudgett Change-Id: Idc5e698dfe33572de9840bc68cd9fc043cbad976 2016-07-18 16:16 +0000 [652130feb2] Richard Mudgett * chan_dahdi: Add faxdetect_timeout option. The new option allows the channel driver's faxdetect option to timeout on a call after the specified number of seconds into a call. The new feature is disabled if the timeout is set to zero. The option is disabled by default. * Don't clear dsp_features after passing them to the dsp code in my_pri_ss7_open_media(). We should still remember them especially for the new faxdetect_timeout option. ASTERISK-26214 Reported by: Richard Mudgett Change-Id: Ieffd3fe788788d56282844774365546dce8ac810 2016-07-15 20:44 +0000 [851b1c3a17] Richard Mudgett * res_pjsip: Add fax_detect_timeout endpoint option. The new endpoint option allows the PJSIP channel driver's fax_detect endpoint option to timeout on a call after the specified number of seconds into a call. The new feature is disabled if the timeout is set to zero. The option is disabled by default. ASTERISK-26214 Reported by: Richard Mudgett Change-Id: Id5a87375fb2c4f9dc1d4b44c78ec8735ba65453d 2016-07-19 04:48 +0000 [021d4892cd] Alexander Traud * Makefile: Retain XML Declaration and DTD in docs. Since Asterisk 12, the documentation got an XML Stylesheet. Because of a typo, the XML Declaration and DTD were overwritten by this. ASTERISK-26212 #close Change-Id: If5ee4625068042e98ab3fcb22a25e2f15d0c68bd 2016-07-18 18:39 +0000 [c8e41d14a1] Corey Farrell * Unit tests: Use AST_TEST_DEFINE in conditional code only. If AST_TEST_DEFINE is not conditional to TEST_FRAMEWORK it produces dead code. This places all existing unit tests into a conditional block if they weren't already. ASTERISK-26211 #close Change-Id: I8ef83ee11cbc991b07b7a37ecb41433e8c734686 2016-07-18 05:13 +0000 [e404f51b42] Alexander Traud * res_rtp_asterisk: Count a roll-over of the sequence number even on lost packets. With this change, the initial RTP sequence number is randomly chosen not between 0 and 65535 (0xffff) but 0 and 32767 (0x7fff). This assures, the roll-over counter (ROC) synchronization is not lost for sRTP, when the very first RTP packets get lost; see http://srtp.sourceforge.net/faq.html#Q6 ASTERISK-26207 #close Change-Id: I9a527e3aa3ce8f3becc5131d7ba32b57b5845464 2016-07-18 04:14 +0000 [5f24874ebb] Alexander Traud * Makefile: Suppress echoing of target 'config' again. ASTERISK-26038 #close Change-Id: I5746cf639f3fdc6332e8a97cf01f979e30bf403f 2016-07-14 03:25 +0000 [76d4983c15] Corey Farrell * features.c: Remove unneeded adsi.h include. adsi.h is no longer used by features.c since parking was moved to a module. Change-Id: I2248b8a455225a17cb6ddaafd6c20c511a1eaf59 2016-07-14 18:06 +0000 [cb58f853e1] Alexei Gradinari * res_pjsip_mwi: remove unneeded check on endpoint's contacts. The function create_mwi_subscriptions_for_endpoint checks if there is active contacts by retrieving aors and contacts. This function is used to create all unsolicited mwi subscriptions on startup and is used when contact added. In both cases it's not necessary to check if there are contacts. The contacts are needed when asterisk sends mwi. ASTERISK-26200 #close Change-Id: I98e43bdc97f3c0829951cd9bf5f3c6348c6ac1fa 2016-06-30 15:58 +0000 [28501051b4] Mark Michelson * Update support for SILK format. This commit adds scaffolding in order to support the SILK audio format on calls. Roughly, this is what is added: * Cached silk formats. One for each possible sample rate. * ast_codec structures for each possible sample rate. * RTP payload mappings for "SILK". In addition, this change overhauls the res_format_attr_silk file in the following ways: * The "samplerate" attribute is scrapped. That's native to the format. * There are far more checks to ensure that attributes have been allocated before attempting to reference them. * We do not SDP fmtp lines for attributes set to 0. These changes make way to be able to install a codec_silk module and have it actually work. It also should allow for passthrough silk calls in Asterisk. Change-Id: Ieeb39c95a9fecc9246bcfd3c45a6c9b51c59380e 2016-07-14 07:45 +0000 [43b5f8d57b] Richard Miller (license 5685) * app_queue: Only remove queue member from pending when state changes. It is possible for a not in use state change to occur multiple times causing a queue member to be removed from the pending call container prematurely. The first not in use state change will remove the queue member from the container. At this moment the member may be called and placed in the pending container. After this another not in use state change can be received which will remove it from the container. Despite being called at this point the code will incorrectly see that there are no pending calls to it. This change only removes it from the pending container if the state has actually changed. ASTERISK-26133 #close patches: app_queue.diff submitted by Richard Miller (license 5685) Change-Id: Ie5a7f17a44f98e9159e9b85009ce3f8393aa78c0 2016-07-14 02:40 +0000 [a17b071e36] Corey Farrell * pbx: Fix leak of timezone for time based includes. Create include_free to run ast_destroy_timing and ast_free, use that in all places that freed an ast_include structure. This fixes a couple of paths that previously did not run ast_destroy_timing. ASTERISK-26196 #close Change-Id: I1671bd111bef0dc113e8bf8f77f89fcfc395d838 2016-07-13 17:45 +0000 [8cef8f35e7] Kevin Harwell * translate: explicit format destination not properly set If the destination format's name differed from the codec name then the translator's explict_dst field would be improperly set. In some circumstances it would end up setting it to a newly created format that has the same name as the codec when it actually needed to be the given destination codec. This could cause the translation path to use the wrong format. For instance, if an endpoint had specified 'myulaw' as a format the translator could end up using a 'ulaw' format (with whatever/default settings) instead. If the format attribute settings differed between the two then there may unexpected results during processing. This patch removes the name check when building the translation path. This should make it always set the translator's explicit_dst to the given destination format as long as the sample rate and types match. Change-Id: Iaf8a03831d68e657d89569d54b505074efbefab5 2016-07-08 11:46 +0000 [afbd10b0c5] Richard Mudgett * stasis_endpoint.c: Fix contactstatus_to_json(). The roundtrip_usec json member is optional. If it isn't present then don't put it into the converted json structure where ast_json_pack() will choke on it. Change-Id: I39bb2f86154ef54591270c58bfda8635070f9ea0 2016-07-13 13:45 +0000 [2be13d62fd] Corey Farrell * chan_sip: Fix reference leak in mwi_event_cb Cleanup the peer reference when stasis_subscription_final_message is true. Also free peer_name even if peer exists, after reload a new peer_name will be allocated. ASTERISK-26193 #close Change-Id: If7ecd52facdc5c227f701c760841e3f6ca53cc69 2016-06-22 07:13 +0000 [332beb27d8] Eugene Voityuk ,Alexander Traud * res_rtp_asterisk: Enable Forward Secrecy (PFS) for DTLS. Since July 2014, TLS based protocols (SIP over TLS, Secure WebSockets, HTTPS) support PFS thanks to ASTERISK-23905. In July 2015, the same feature was added for DTLS. The source code from main/tcptls.c should have been re-used to ease security audits. Therefore, this change rolls back the change from July 2015 and re-uses the code from July 2014. This has the additional benefits to work under CentOS 7 and enabling not just ECDHE but DHE based cipher suites as well. ASTERISK-25659 #close Reported by: StefanEng86, urbaniak, pay123 Tested by: sarumjanuch, traud patches: res_rtp_asterisk.patch submitted by sarumjanuch dtls_centos_step_1.patch submitted by traud dtls_centos_step_2.patch submitted by traud Change-Id: I537cadf4421f092a613146b230f2c0ee1be28d5c 2016-07-13 11:30 +0000 [672a64bda3] Corey Farrell * threadpool: Fix leak in ast_threadpool_serializer_group error path. ast_threadpool_serializer_group leaks a reference to ser when listener is allocated but tps is not. Although listener takes the reference to ser cleanup functions are not run without tps. ASTERISK-26191 #close Change-Id: Ie3ccf69a3f1e676c2ef62a77067c0cb57dc9a585 2016-07-11 10:22 +0000 [fea201f7e6] Richard Mudgett * pjsip_options.c: Fix container operation. aor_observer_deleted() needs to operate on all contacts found for the deleted AOR instead of only the first one found. This is really only a problem if there is more than one contact for the AOR. Change-Id: Id24ac0d5e8c931330231fb45dd2a331a84339dc1 2016-07-11 10:21 +0000 [02877b4b4f] Richard Mudgett * pjsip_configuration.c: Misc cleanups. * Fix some whitespace in various routines. * Rename i to iter in persistent_endpoint_update_state(). * Fix off-nominal copy/paste message wording in persistent_endpoint_contact_deleted_observer() Change-Id: Id8e34f5d09e7eebac3af22501c44c1110a3e29d8 2016-07-13 08:57 +0000 [148cd1b319] Alexander Traud * BuildSystem: Avoid obsolete warning with pthread.m4 on autoconf. Updated the macro-set autoconf/ax_pthread.m4 to its latest upstream version. ASTERISK-26046 #close Change-Id: I11abc11d17acd2b6a8a5a5be8ae8e0949dab9cc7 2016-07-11 10:25 +0000 [97b4c7a5b4] Richard Mudgett * res_pjsip: Fix statsd regression. The ASTERISK-25904 change-id I8fad8aae9305481469c38d2146e1ba3a56d3108f patch introduced several regressions when the newly created "Updated" state goes out for each endpoint registration refresh. 1) It restarted any OPTIONS RTT ping cycle. 2) It would interfere with a currently active ping and throw off that ping's resulting RTT calculation. 3) It cleared the RTT time each time the endpoint was refreshed. 4) The cleared RTT time was sent out as a statsd update each time. 5) It created two AMI events for each update. * Revert the original patch and reimplement it. Now the current contact status state is re-sent instead of the state being momentarily toggled every time the endpoint refreshes its registration. The statsd events are not created for the re-sent refresh because they are sent after every OPTIONS ping. ASTERISK-26160 #close Reported by: Matt Jordan Change-Id: Ie072be790fbb2a8f5c1c874266e4143fa31f66d1 2016-07-12 03:50 +0000 [3be6fa1e4b] Alexander Traud * BuildSystem: Allow own CFLAGS on ./configure. Before this change, make failed with the error Unknown value '' found in build_tools/menuselect-deps for NATIVE_ARCH when CFLAGS were supplied to the configure script. This was introduced with which disabled BUILD_NATIVE when CFLAGS were supplied. Those who need different -march= values, please, go for ./configure make menuselect.makeopts or make menuselect ./menuselect/menuselect --disable BUILD_NATIVE ASTERISK-25289 #close Change-Id: Ic6365d5a97bb9b3556858f06432a8d1cfa83eebc 2016-07-11 13:42 +0000 [5ee205d8bb] Richard Mudgett * ast_expr2: Fix off-nominal memory leak. Thanks to ibercom for pointing out a memory leak that was missed in the earlier patch for the issue. ASTERISK-26119 Reported by: Alexei Gradinari Change-Id: I9a151f5c4725d97fb82a9e938bc73dc659532b71 2016-07-11 10:17 +0000 [f5e9872016] Alexander Traud * install_prereq: Checkout of libSRTP 1.5.x. Since 5th November 2014, the master branch of libSRTP changed the prefix of several member names and is not compatible with the source code in Asterisk anymore. Therefore instead, this change checks out the latest version of the libSRTP 1.5.x branch. Furthermore now, libSRTP is compiled with OpenSSL as backend. This makes AES-GCM and AES-IN possible. ASTERISK-22131 #close Change-Id: I2e396cdc01da0ff610686e398ed210ca7408f7d6 2016-07-10 19:08 +0000 [17efed6cf7] Joshua Colp * func_odbc: Fix connection deadlock. The func_odbc module was modified to ensure that the previous behavior of using a single database connection was maintained. This was done by getting a single database connection and holding on to it. With the new multiple connection support in res_odbc this will actually starve every other thread from getting access to the database as it also maintains the previous behavior of having only a single database connection. This change disables the func_odbc specific behavior if the res_odbc module is running with only a single database connection active. The connection is only kept for the duration of the request. ASTERISK-26177 #close Change-Id: I9bdbd8a300fb3233877735ad3fd07bce38115b7f 2016-07-09 13:32 +0000 [06ba533bc7] Corey Farrell * chan_sip: Fix reference leaks in error paths. * get_sip_pvt_from_replaces leaks sip_pvt_ptr on any error. * build_peer leaks peer on failure to allocate the endpoint. This patch fixes get_sip_pvt by using an RAII_VAR, build_peer is fixed with an unref in the appropriate place. ASTERISK-26184 #close Change-Id: I728b424648ad041409f7d90880f4c28b3ce2ca12 2016-07-07 12:41 +0000 [9d4e664f62] Corey Farrell * REF_DEBUG: Prevent logging of container node objects. Using AO2_CONTAINER_ALLOC_OPT_DUPS_REPLACE can result in an unref being recorded to the refs log for the node being replaced. This prevents logging of those unrefs since they would produce errors in refcounter.py. ASTERISK-26181 #close Change-Id: Ie4fded84e8a1a58b3a59ce59dfd7eb0da3ddc5d4 2016-07-07 10:55 +0000 [e26bd15e7a] Scott Griepentrog * PJSIP: provide valid tcp nodelay option for reuse When using TCP transport with chan_pjsip, the TCP_NODELAY option value was allocated on the stack, then passed as a pointer to the tcp transport configuration structure, and later re-used on subsequently created sockets when it was no longer valid. This patch changes the allocation to be a static. ASTERISK-26180 #close Reported by: Scott Griepentrog Change-Id: I3251164c7f710dbdab031282f00e30a9770626a0 2016-07-07 10:38 +0000 [77b0145a25] Joshua Colp * chan_sip/res_pjsip_t38: Handle a request to negotiate T.38 after it is enabled. Some T.38 implementations may send another re-invite after the initial one which adds additional negotiation details (such as the max bitrate). Currently this will fail when passthrough is being done in chan_sip as we do nothing if T.38 is already active. Other handlers of T.38 inside of Asterisk (such as res_fax) handle this scenario so this change adds support for it to chan_sip and res_pjsip_t38. If a request to negotiate is received while T.38 is already enabled a new re-INVITE is sent and negotiation is done again. ASTERISK-26179 #close Change-Id: I0298494d3da6df3219bbfa4be9aa04015043145c 2016-07-04 16:38 +0000 [b4a9fa2c9e] Alexei Gradinari * res_sorcery_realtime: fix bug when successful UPDATE is treated as failed If the SQL UPDATE statement changes nothing then SQLRowCount returns 0. This value should be treated as success. But the function sorcery_realtime_update treats it as failed. This bug was found using stress tests on PJSIP. If there are 2 consecutive SIP REGISTER requests with the same contact data during 1 second then res_pjsip_registrar adds contact location on 1st request and tries to update contact location on 2nd. The update fails and res_pjsip_registrar even removes correct contact location. The test "object_update_uncreated" was removed from test_sorcery_realtime.c because it's now a valid situation. This patch also adds missing debug of extra SQL parameter. ASTERISK-26172 #close Change-Id: I05a7f3051455336c9dda29efc229decf86071303 2016-06-24 19:55 +0000 [1dfd3fc995] Matt Jordan * res/res_pjsip_session: Check for presence of an active negotiator It is possible in a hypothetical situation for a session refresh to be invoked on a PJSIP when the negotiatior on the INVITE session has not yet been established. While this shouldn't occur with existing uses of ast_sip_session_refresh, the crashes that occur due to improperly calling PJSIP functions that expect a non-NULL negotiatior are avoidable. PJSIP will create the negotiator in pjsip_inv_reinvite; this means that simply checking for the presence of the negotiator before passing it to other PJSIP functions that use it is allowable. As such, this patch adds checks for the presence of the negotiator before calling PJSIP functions that assume it is non-NULL. Change-Id: I1028323e7e01b0a531865e5412a71b6f6ec4276d 2015-10-19 18:55 +0000 [9dd0aeeb44] Matt Jordan * res/res_pjsip_pubsub: Add additional debug statements When something very sad and wrong occurs, it's challenging sometimes to figure out why. This patch adds some additional debug statements on off-nominal paths to try and make debugging easier. Change-Id: I7bffb73cc733b6f80193a23340881db4a102b640 2015-10-19 18:55 +0000 [1ec4f8dd00] Matt Jordan * res/res_corosync: Raise a Stasis message on node join/leave events When res_corosync detects that a node leaves or joins, it currently is informed of this via Corosync callbacks. However, there are a few limitations with the information presented: (1) While we have information that Corosync is aware of - such as the Corosync nodeid - that information is really only useful inside of Corosync or res_corosync. There's no way to translate a Corosync nodeid to some other internally useful unique identifier for the Asterisk instance that just joined or left the cluster. (2) While res_corosync is notified of the instance joining or leaving the cluster, it has no mechanism to inform the Asterisk core or other modules of this event. This limits the usefulness of res_corosync as a heartbeat mechanism for other modules. This patch addresses both issues. First, it adds the notion of a cluster discovery message both within the Stasis message bus, as well as the binary event messages that res_corosync uses to transmit data back and forth within the cluster. When Asterisk joins the cluster, it sends a discovery message to the other nodes in the cluster, which correlates the Corosync nodeid along with the Asterisk EID. res_corosync now maintains a hash of Corosync nodeids to Asterisk EIDs, such that it can map changes in cluster state with the Asterisk instance that has that nodeid. Likewise, when an Asterisk instance receives a discovery message from a node in the cluster, it now sends its own discovery message back to the originating node with the local Asterisk EID. This lets Asterisk instances within the cluster build a complete picture of the other Asterisk instances within the cluster. Second, it publishes the discovery messages onto the Stasis message bus. Said messages are published whenever a node joins or leaves the cluster. Interested modules can subscribe for the ast_cluster_discovery_type() message under the ast_system_topic() and be notified when changes in cluster state occur. Change-Id: I9015f418d6ae7f47e4994e04e18948df4d49b465 2016-07-04 13:54 +0000 [2c16a81dd5] Alexei Gradinari * res_pjsip: Added "subscribe_context" to endpoint If specified, incoming SUBSCRIBE requests will be searched for the matching extension in the indicated context. If no "subscribe_context" is specified, then the "context" setting is used. ASTERISK-25471 #close Change-Id: I3fb7a15f5bc154079bd348c08b7ad1cdd2d5e514 2016-07-04 05:58 +0000 [a1bd57884d] Alexander Traud * BuildSystem: Avoid obsolete warning with libcurl.m4 on autoconf. Updated the macro-set autoconf/libcurl.m4 to its latest upstream version. This avoids a warning about an obsolete macro on AC_HELP_STRING, because Asterisk is using AS_HELP_STRING everywhere else already. ASTERISK-26046 Change-Id: I8299faf504ceaeee3e39930c59293809e116c631 2016-06-30 15:17 +0000 [640fbbbe28] Richard Mudgett * features: Fix channel datastore access. Found as a result of the testsuite tests/callparking test crashing. Several calls to ast_get_chan_featuremap_config() and ast_get_chan_features_xfer_config() did not lock the channel before calling so the channel's datastore list was accessed without the lock's protection. Apparently another thread deleted a datastore on the channel's list while the crashing thread was walking the list. Crash at 0xdeaddead due to MALLOC_DEBUG's memory filler value as a result. * Add missing channel locks to calls that were not already protected as the doxygen for those calls indicates. Change-Id: Id273b3d305cc616406c353cbc841b2b7655efaa1 2016-06-22 17:26 +0000 [359134c8d3] Richard Mudgett * res_pjsip_session.c: Don't send extra BYE if SDP invalid. When an answer SDP is invalid we were disconnecting the outgoing call and sending two BYE requests. The first BYE was sent by PJPROJECT because of the invalid SDP answer. The second BYE was sent by Asterisk because it thought the canceled call was the result of the RFC5407 section 3.1.2 race condition. * Made not send the BYE on a canceled session if the SDP negotiation is incomplete because PJPROJECT has already sent a BYE for the failed negotiation. ASTERISK-25772 #close Reported by: Dmitriy Serov Change-Id: I44ad0bd0605e8eeb7035c890d6f97a1331f1a836 2016-06-27 17:19 +0000 [5fabcf2ca1] Richard Mudgett * res_pjsip_session.c: End call on initial invalid SDP negotiation. When an incoming call defers SDP negotiation and then sends us an invalid SDP in the ACK, we need to send a BYE to disconnect the call. In this case SDP negotiation has failed and we don't have valid media streams negotiated. ASTERISK-25772 Change-Id: Ia358516b0fc1e6c4c139b78246f10b9da7a2dfb8 2016-06-23 15:13 +0000 [38a4e983dc] Richard Mudgett * res_pjsip.c: Register PJMEDIA error code decoder. Registering the PJMEDIA error codes allows errors found when parsing an incoming SDP to be easier to figure out. "Missing SDP rtpmap for dynamic payload type (PJMEDIA_SDP_EMISSINGRTPMAP)" is much easier to understand than "Unknown error 220030". ASTERISK-25772 Change-Id: I44b2dcea656fedd7593171be9e845880a2c70ca0 2016-06-27 16:56 +0000 [1952434df5] Richard Mudgett * res_pjsip_session.c: Remove unused parameter from handle_incoming(). Change-Id: Iedd182d189ec947c42edc2c66c4bda3c22060daa 2016-06-22 18:02 +0000 [28928ba5c4] Richard Mudgett * res_pjsip: Add missing NULL checks when using pjsip_inv_end_session(). pjsip_inv_end_session() is documented as being able to return the passed in tdata parameter set to NULL on success. Change-Id: I09d53725c49b7183c41bfa1be3ff225f3a8d3047 2016-06-30 08:25 +0000 [43a78100c0] gtjoseph * configure: Fix HAVE_PJSIP_EVSUB_GRP_LOCK not set with external pjproject There was a typo in configure.ac preventing HAVE_PJSIP_EVSUB_GRP_LOCK from getting set when using an external pjproject. ASTERISK-26099 #close Reported-by: Ross Beer Change-Id: I709af70428e125fb5ccd44b171d25dd29141f0ae 2016-06-29 15:31 +0000 [99eff80e76] Matt Jordan * hep.conf.sample: Default 'enabled' to 'no' Following the principle of least surprise, we should not be sending massive numbers of PJSIP and RTCP HEP packets out into the ether to some only-slightly-random IP address. Having 'enabled' set to 'no' in the sample configuration file should prevent this from happening for those who run 'make samples'. ASTERISK-26159 #close Change-Id: I1753a64ca83a3442a6ebdc31061f8185c062d9b1 2016-06-29 15:09 +0000 [78960975f2] Matt Jordan * pjproject/patches/config_site: Increase the max number of ICE candidates When negotiating ICE candidates with WebRTC capable endpoints, many networks will result in a browser offering ICE candidates that exceeds the default number of max candidates, 16. This patch bumps the max candidates to 32, with the max checks at twice the number of candidates. In practice, this has shown to be sufficient for browser/WebRTC negotiation. Change-Id: Ifd8da8b315f5ae14814d4ce20e10d2e6355020e5 2016-06-28 09:00 +0000 [d07c8a0504] gtjoseph * codecs: Fix ABI incompatibility created by adding format_name to ast_codec Adding format_name even to the end of ast_codec caused issued with binary codec modules because the pointer would be garbage in asterisk when they registered. So, the ast_codec structure was reverted and an internal_ast_codec structure was created just for use in codec.c. A new internal-only API was also added (__ast_codec_register_with_format) so that codec_builtin could register codecs with the format_name in a separate parameter rather than in the ast_codec structure. ASTERISK-26144 #close Reported-by: Alexei Gradinari Change-Id: I6df1b08f6a6ae089db23adfe1ebc8636330265ba 2016-06-28 08:22 +0000 [f3d236ca7f] gtjoseph * BuildSystem: Fix a few issues hightlighted by gcc 6.x gcc 6.1.1 caught a few more issues. Made sure the unit tests still pass for the func_env and stdtime issues. ASTERISK-26157 #close Change-Id: I6664d8f34a45bc1481d2a854481c7878b0c1cf8e 2016-06-28 10:33 +0000 [9d5b0934d9] Matt Jordan * configs/basic-pbx/modules.conf: Remove 'bad' modules This patch removes the following modules: - pbx_functions: It never existed. - res_pjsip_log_forwarder: It no longer exists. - res_hep_pjsip: The base HEP module wasn't loaded, and most basic PBXs aren't going to be installing HOMER - res_pjsip_phoneprov_provider: The basic res_phoneprov module isn't loaded, and we aren't configured to make use of the module Change-Id: Id91f68cae7c9c8c3d370029fe1268cb51e4ff5a5 2016-06-22 11:19 +0000 [1dfc286418] Joshua Colp * siren: Add format attribute modules for Siren7 and Siren14. This change removes hardcoded SDP parsing and generation for Siren7 and Siren14 from chan_sip and moves it to format attribute modules so it can also be used by chan_pjsip. With this the fmtp lines for both are added with the bitrate information. ASTERISK-26021 Change-Id: Ibb004eda37a14c0a35ef0613f6237977fc800037 2016-06-23 04:33 +0000 [5f0a098243] Alexander Traud * BuildSystem: Avoid obsolete warning with AC_TYPE_SIGNAL on autoconf. Removed the obsolete macro AC_TYPE_SIGNAL because Asterisk does not use K&R C but requires ANSI C anyway. ASTERISK-26046 Change-Id: I914c014385e1862102d90fe7650621def78db02e 2016-06-02 17:26 +0000 [b3c787d1dd] Alexei Gradinari * res_pjsip: improve realtime performance #2 The patch removes updating all Endpoints' status on startup. Instead, only non-qualified aors with static contact and non-qualified non-expired contacts are retrieved from the realtime to update the endpoint status to ONLINE. The endpoint name was added to the contact object to simply find the endpoint that created this contact. The status of endpoints with qualified aors will be updated by 'qualify' functions. ASTERISK-26061 #close Change-Id: Id324c1776fa55d3741e0c5457ecac0304cb1a0df 2016-06-23 13:47 +0000 Asterisk Development Team * asterisk 13.10.0-rc1 Released. 2016-06-23 08:42 +0000 [62349ac1b4] Mark Michelson * Release summaries: Add summaries for 13.10.0-rc1 2016-06-23 08:38 +0000 [8da6ba4328] Mark Michelson * .version: Update for 13.10.0-rc1 2016-06-23 08:38 +0000 [170b85e3ae] Mark Michelson * .lastclean: Update for 13.10.0-rc1 2016-06-23 08:38 +0000 [4af7049b8f] Mark Michelson * realtime: Add database scripts for 13.10.0-rc1 2016-06-22 15:04 +0000 [3d904659ec] Corey Farrell * res_fax: Fix reference leak in fax_v21_session_new. fax_v21_session_new created a session details object but only released the allocation reference during error conditions. fax_session_new adds it's own reference to details if needed so the caller is always responsible for cleaning it's own reference. ASTERISK-26141 #close Change-Id: Ie7fc52a83b6596ce9ce2d5a2bd9f3e204f48fc88 2016-06-22 13:41 +0000 [48db4c2159] gtjoseph * res_rtp_asterisk: Fix a self-comparison identified by gcc 6 gcc 6 caught a previously unidentified self-comparison in ice_candidate_cmp. Fixed it and re-ordered the predicates for better short-circuiting. ASTERISK-26140 #close Change-Id: I3da713c568e24064430257b3502fbdafd35af7a7 2016-06-22 10:37 +0000 [bc69b03316] gtjoseph * chan_unistim: Fix memcpy in get_to_address A code block only enabled when HAVE_PKTINFO is not defined (FreeBSD) was using a pointer to a pointer as the destination of a memcpy and a '&' instead of '*' in the sizeof. ASTERISK-26138 #close Change-Id: Id4927ff256c0e470bdf7bcfc025146a2f656e708 2016-06-20 13:18 +0000 [1b79e2deff] Mark Michelson * Fix Alembic upgrades. A non-existent constraint was being referenced in the upgrade script. This patch corrects the problem by removing the reference. This patch fixes another realtime problem as well. Our Alembic scripts store booleans as yes or no values. However, Sorcery tries to insert "true" or "false" instead. This patch updates Sorcery to use "yes" and "no" ASTERISK-26128 #close Change-Id: I366dbbf91418a9cb160b3ca74b0e59b5ac284bec 2016-06-22 10:55 +0000 [e30602587c] Alexander Traud * BuildSystem: Avoid obsolete warning with AC_FUNC_SETVBUF_REVERSED on autoconf. Removed the obsolete macro AC_FUNC_SETVBUF_REVERSED because Asterisk does not support the platform SVR2 from the year 1987 anymore. ASTERISK-26046 Change-Id: I28161b037feb2d29ab46ed20e785928460226c22 2016-06-22 10:51 +0000 [77da168e58] gtjoseph * test_res_pjsip_scheduler: Add 'depends' on pjproject in MODULEINFO Since the file was missing the depends on pjproject, it wasn't picking up the pjproject related include path. If there was no system installed pjproject and pjproject-bundled was used, a compile would fail because pjsip.h wasn't found. ASTERISK-26139 #close Change-Id: I2ee64a999051452bc198c4e2c168c70769cd3757 2016-06-21 06:52 +0000 [dfcd466bf0] Torrey Searle * res_rtp_asterisk: fix memory leak in dtls ensure that cert bios get freed after creating the fingerprint ASTERISK-26129 #close Change-Id: I44d23aea07dce80176ca1ff877c5ace9452ef451 2016-06-21 17:42 +0000 [c982da0641] Richard Mudgett * res_pjproject.c: Replace inlined DEBUG_ATLEAST() with macro. Change-Id: I8799fb0a347ad76e747dafd0eacf1ea1086b9a8c 2016-06-12 11:19 +0000 [6a568bcc66] gtjoseph * res_pjsip_pubsub: Address SEGV when attempting to terminate a subscription Occasionally under load we'll attempt to send a final NOTIFY on a subscription that's already been terminated and a SEGV will occur down in pjproject's evsub_destroy function. This is a result of a race condition between all the paths that can generate a notify and/or destroy the underlying pjproject evsub object: * The client can send a SUBSCRIBE with Expires: 0. * The client can send a SUBSCRIBE/refresh. * The subscription timer can expire. * An extension state can change. * An MWI event can be generated. * The pjproject transaction timer (timer_b) can expire. Normally when our pubsub_on_evsub_state is called with a terminate, we push a task to the serializer and return at which point the dialog is unlocked. This is usually not a problem because the task runs immediately and locks the dialog again. When the system is heavily loaded though, there may be a delay between the unlock and relock during which another event may occur such as the subscription timer or timer_b expiring, an extension state change, etc. These may also cause a terminate to be processed and if so, we could cause pjproject to try to destroy the evsub structure twice. There's no way for us to tell that the evsub was already destroyed and the evsub's group lock can't tolerate this and SEGVs. The remedy is twofold. * A patch has been submitted to Teluu and added to the bundled pjproject which adds add/decrement operations on evsub's group lock. * In res_pjsip_pubsub: * configure.ac and pjproject-bundled's configure.m4 were updated to check for the new evsub group lock APIs. * We now add a reference to the evsub group lock when we create the subscription and remove the reference when we clean up the subscription. This prevents evsub from being destroyed before we're done with it. * A state has been added to the subscription tree structure so termination progress can be tracked through the asyncronous tasks. * The pubsub_on_evsub_state callback has been split so it's not doing double duty. It now only handles the final cleanup of the subscription tree. pubsub_on_rx_refresh now handles both client refreshes and client terminates. It was always being called for both anyway. * The serialized_on_server_timeout task was removed since serialized_pubsub_on_rx_refresh was almost identical. * Missing state checks and ao2_cleanups were added. * Some debug levels were adjusted to make seeing only off-nominal things at level 1 and nominal or progress things at level 2+. ASTERISK-26099 #close Reported-by: Ross Beer. Change-Id: I779d11802cf672a51392e62a74a1216596075ba1 2016-06-21 07:05 +0000 [ef97911a1c] Alexander Traud * res_rtp_asterisk: Use latest DTLS version available by underlying platform. Do not use DTLSv1_method() but DTLS_method() when available in OpenSSL of the underlying platform. This change enables DTLS 1.2 since OpenSSL 1.0.2, for WebRTC (DTLS-SRTP via SIP-over-WebSockets). This change enables AEAD-based cipher-suites. ASTERISK-26130 #close Change-Id: I41f24448d6d2953e8bdb97c9f4a6bc8a8f055fd0 2016-06-21 10:53 +0000 [69d58a1e37] Scott Griepentrog * PJSIP: provide transport type with received messages The receipt of a SIP MESSAGE may occur over any transport including TCP and TLS. When the message is received, the original URI is added to the message in the field PJSIP_RECVADDR, but this is insufficient to ensure a reply message can reach the originating endpoint. This patch adds the PJSIP_TRANSPORT field populated with the transport type. ASTERISK-26132 #close Change-Id: I28c4b1e40d573a056c81deb213ecf53e968f725e 2016-06-21 08:01 +0000 [cbfa9f771e] Alexander Traud * BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf. Some configure scripts used both AC_HELP_STRING and its replacement AS_HELP_STRING. For consistency and to avoid obsolete warnings, those were changed to AS_HELP_STRING. ASTERISK-26046 Change-Id: I8aad4fd2bdee40aa2a31ce3339a1eb33ff4f5b0f 2016-06-20 10:29 +0000 [ba0d9e7f7a] Joshua Colp * res_pjsip_session: Handle race condition at shutdown with timer. When shutting down res_pjsip_session will get unloaded before res_pjsip. The act of unloading unregisters all the PJSIP services and sets their module IDs to -1. In some cases it is possible for a timer to occur after this happens which calls into res_pjsip_session. The res_pjsip_session module can then try to get the session from the INVITE session using the module ID. Since the module ID is now -1 this fails. This change stores a copy of the module ID and uses it for the timer callback scenario. If the module ID is -1 the callback immediately returns but if the module ID is valid then it continues as normal. This works as the original ID of the module is guaranteed to still be valid when used with the INVITE session. ASTERISK-26127 #close Change-Id: I88df72525c4e9ef9f19c13aedddd3ac4a335c573 2016-06-20 12:13 +0000 [c1512f4108] Richard Mudgett * app_voicemail.c: Fix IMAP compile error. Fix compile error introduced by the patch for ASTERISK-26045 Change-Id: I5b02876266f2824f4cec2b54d6ff4db5de5778d3 2016-06-16 15:56 +0000 [5134a8043a] Alexei Gradinari * fix: memory leaks, resource leaks, out of bounds and bugs ASTERISK-26119 #close Change-Id: Iecbf7d0f360a021147344c4e83ab242fd1e7512c 2016-06-13 17:40 +0000 [cfebe3b94a] Mark Michelson * ARI: Ensure announcer channels are destroyed. Announcer channels were not being destroyed because the stasis_app_control structure that referenced them was not being destroyed. The control structure was not being destroyed because it was not being unlinked from its container. It was not being unlinked from its container because the after bridge callback for the announcer channel was not being run. The after bridge callback was not being run because the after bridge datastore was not being removed from the channel on destruction. The channel was not being destroyed because the hangup that used to destroy the channel was now only reducing the reference count to one. The reference count of the channel was only being reduced to one because the stasis_app_control structure was holding the final reference... The control structure used to not keep a reference to the channel, so that loop described above did not happen. The solution is to manually remove the control structure from its container when the playback on a bridge is complete. ASTERISK-26083 #close Reported by Joshua Colp Change-Id: I0ddc0f64484ea0016245800b409b567dfe85cfb4 2016-06-20 08:05 +0000 [76516bd79d] Alexander Traud * http: leverage 'bindaddr' for TLS in http.conf The internal HTTP/WebSocket server supports both TCP and TLS, which can be activated separately via the file http.conf. The source code intends to re-use the TCP parameter 'bindaddr' for TLS, even if 'tlsbindaddr' is not specified explicitly. This did not work because of a typo. This change resolves this typo. ASTERISK-26126 #close Change-Id: I5efb0409ae12044dfb3495b6b97b6d40a8c9c51f 2016-05-31 09:10 +0000 [89cc86fc38] Vasil Kolev * chan_sip: bigger buffers for headers, better failure mode Currently chan_sip can give weird messages if the contacts don't fit in the From: or To: headers. This fix changes the from,to and invite variables to use ast_str, allocates and deallocates them and resizes them if needed. ASTERISK-26069 #close Change-Id: I1b68fcbddca6f6cc7d7a92fe1cb0d5430282b2b3 2016-05-18 17:37 +0000 [d53a36ff33] Richard Mudgett * res_pjsip_transport_management.c: Misc cleanups to survive shutdown. * In unload_module(), reordered destroying things to minimize the window that the global transports container could be used by other threads on shutdown. When shutting down you need to stop things in the opposite order of creation. * Put the global transports container into an AO2_GLOBAL_OBJ_STATIC to eliminate the crash potential by other threads using the container on shutdown. * Made struct monitored_transport.sip_received not use ast_atomic_fetchadd_int() since it is used as a boolean value that is only set TRUE. It was previously incremented for every received SIP message and could theoretically overflow. * In monitored_transport_state_callback(), allocated the monitored transport object without a lock since the lock was unused. * In keepalive_global_loaded(), removed releasing the transports container if the keepalive_thread could not be started. I set it up to be tried again if the user reloads the configuration. Change-Id: I8d12d16ef564290fa6d25a32334bb5ce8fdf87ff 2016-01-05 19:08 +0000 [03953d8034] Richard Mudgett * res_pjsip.c: Add check that timer actually got scheduled. Change-Id: Iabaa2e5dccf0762c258101ea0eb1487cf6959ad1 2016-06-13 13:33 +0000 [32ab98116e] Richard Mudgett * res_rtp_multicast.c: Fix warning message typo. Change-Id: Ic9928208b9957e09866abe3d9649030942ec52b3 2016-02-11 18:15 +0000 [0429c53368] Richard Mudgett * res_pjsip_session.c: Reorganize ast_sip_session_terminate(). Change-Id: I68a2128bcba4830985d2d441e70dfd1ac5bd712b 2016-06-10 12:35 +0000 [5823f279f3] Richard Mudgett * chan_rtp: Backport changes from master. * Deprecate chan_multicast_rtp. Change-Id: Ib5a45e58c75ee8abd0b4f9575379b5321feb853e 2016-06-10 16:13 +0000 [dde58df318] Richard Mudgett * chan_rtp.c: Copy file from chan_multicast_rtp.c Change-Id: I1119b53f2152ab1cbec74b5be7ea44844dbda8ef 2016-06-08 06:15 +0000 [ca38a3cbb4] Alexander Traud * core: Not the configured but granted number of possible file descriptors. With CLI "core show settings", simply the parameter maxfiles of the file asterisk.conf was shown. If that parameter was not set, nothing was displayed although the environment might have set a default number itself. Or if maxfiles were not granted (completely), still maxfiles was shown. Now, the maximum number of possible file descriptors in the environment is shown. ASTERISK-26097 Change-Id: I2df5c58863b5007b34b77adbe28b885dfcdf7e0b 2016-06-07 18:45 +0000 [caf6cccc5c] Joshua Colp * cel: Ensure only one dial status per channel exists. CEL wrongly assumed that a channel would only have a single dial event on it. This is incorrect. Particularly in a queue each call attempt to a member will result in a dial event, adding a new dial status in CEL without removing the old one. This would cause the container to grow with only one dial status being removed when the channel went away. The other dial status entries would remain leaking memory. This change fixes the memory leak by ensuring that only one dial status will only ever exist for each channel. The behavior during the scenario where multiple events are received has also been improved. For failure cases the first failure will be the dial status. If an answer dial status is received, though, it will take priority and the dial status for the channel will be answer. Memory usage has also been decreased by storing the minimal amount of information and the code has been cleaned up slightly. ASTERISK-25262 #close Change-Id: I5944eb923db17b6a0faa7317ff6abc9307c009fe 2016-06-09 10:37 +0000 [715ef071a1] Mark Michelson * chan_pjsip: Lock channel when checking for RTP changes. bridge_native_rtp can call into an RTP-capable channel driver in order for the driver to update information about who the channel is communicating with. For SIP channel drivers, this means deactivating RTCP and sending a reinvite so that the endpoints can communicate directly. bridge_native_rtp does the right thing and has the channel locked when calling into the channel driver. chan_pjsip can't alter session properties in this thread, though. chan_pjsip queues a task on the session serializer in order to update properties there. The problem is that this queued task was not locking the channel. This meant that the queued task could attempt to deactivate RTCP at the same time that the channel thread was attempting to process an incoming RTCP packet. This could lead to a crash. This patch fixes the issue by locking the channel in the queued task when altering RTP properties. ASTERISK-26092 #close Reported by Niklas Larsson Change-Id: I3464e226a3c41f6b915f97891e07fa1599e2a159 2016-06-09 09:20 +0000 [a99ddc6a0d] gtjoseph * build: Fix ast_sockaddr initialization to be more portable A change to glibc 2.22 changed the order of the sockadddr_storage members which caused the places where we do an initialization of ast_sockaddr with '{ { 0, 0, } }' to fail compilation. Those initializers (which we shouldn't have been using anyway) have been replaced with memsets. Change-Id: Idd1b3b320903d8771bfe221f0b015685de628fa4 2016-06-08 12:26 +0000 [eabb398d71] Matt Jordan * res_hep_{pjsip|rtcp}: Decline module loads if res_hep had not loaded A crash can occur in res_hep_pjsip or res_hep_rtcp if res_hep has not loaded and does not have a configuration file. Previously when this occurred, checks were put in to see if the configuration was loaded successfully. While this is a good idea - and has been added to the offending function in res_hep - the reality is res_hep_pjsip and res_hep_rtcp have no business running if res_hep isn't also running. As such, this patch also adds a function to res_hep that returns whether or not it successfully loaded. Oddly enough, ast_module_check returns "everything is peachy" even if a module declined its load - so it cannot be solely relied on. res_hep_pjsip and res_hep_rtcp now also check this function to see if they should continue to load; if it fails, they decline their load as well. ASTERISK-26096 #close Change-Id: I007e535fcc2e51c2ca48534f48c5fc2ac38935ea 2016-06-08 05:58 +0000 [0d84421f93] Alexander Traud * astfd: Not maximum size of a single file but maximum file descriptors. With menuselect "DEBUG_FD_LEAKS" and CLI "core show fd", the maximum size of a single file was shown. Now, the maximum number of possible file descriptors is shown. ASTERISK-26097 Change-Id: Icf98d145774b38cac144ca76d19eaef42ce659a3 2016-06-02 14:53 +0000 [9c5a0b814b] Timo Teräs * Fix #include poll.h and sys/cdefs.h POSIX defines poll.h, sys/poll.h should not be used at is c-library internal header which may or may not exist. Notable in musl it generates warning of being incorrect. And add explict include of sys/cdefs.h where needed. Change-Id: I142930df53fe7585a06b854b6faddc5301e024be 2016-06-03 22:44 +0000 [9c35f34301] Richard Mudgett * res_pjsip_registrar.c: Eliminate rx REGISTER request race condition. This patch fixes a race condition processing received REGISTER requests and their retransmissions caused by REGISTER requests being processed by two threads. The "sip_transaction Unable to register REGISTER transaction (key exists)" message is a notable symptom of this issue. This issue was more likely to happen before the pjsip/distributor serializers were created. Instead of steps one and two below placing the REGISTER messages into the same pjsip/distributor they were placed in random pjsip/default serializers. 1) REGISTER requests come in and get placed on the pjsip/distributor serializer. 2) Before the first request is processed a retransmission comes in and is placed on the same pjsip/distributor serializer. 3) The first request goes up the pjsip stack and is then shunted off to the pjsip/aor/ serializer. 4) Before the first request is completed processing in the pjsip/aor/ serializer, the second request goes up the pjsip stack and is also shunted off to the pjsip/aor/ serializer. 5) The first request completes processing and sends out its response. 6) The second request completes processing and tries to send out its response but pjlib complains that the REGISTER transaction key already exists. 7) Sadness ensues. * The race is eliminated by removing the pjsip/aor/ serializer and continuing the processing in the pjsip/distributor serializer. Now any retransmissions queued in the pjsip/distributor serializer will be processed after the first message is completely processed. ASTERISK-26088 #close Reported by: Richard Mudgett Change-Id: I842d714346088bf717ea27437f1dd85bff0bab5a 2016-06-03 11:35 +0000 [557333ea4c] Richard Mudgett * stasis: Add setting subscription congestion levels. Stasis subscriptions and message routers create taskprocessors to process the event messages. API calls are needed to be able to set the congestion levels of these taskprocessors for selected subscriptions and message routers. * Updated CDR, CEL, and manager's stasis subscription congestion levels based upon stress testing. Increased the congestion levels to reduce the potential for bursty call setup/teardown activity from triggering the taskprocessor overload alert. CDRs in particular need an extra high congestion level because they can take awhile to process the stasis messages. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: Id0a716394b4eee746dd158acc63d703902450244 2016-06-02 18:19 +0000 [110d772467] Richard Mudgett * sorcery: Add setting object type congestion levels. Sorcery creates taskprocessors for object types to process object observer callbacks. An API call is needed to be able to set the congestion levels of these taskprocessors for selected object types. * Updated PJSIP's contact and contact_status sorcery object type observer default congestion levels based upon stress testing. Increased the congestion levels to reduce the potential for bursty register/unregister and subscribe/unsubscribe activity from triggering the taskprocessor overload alert. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I4542e83b556f0714009bfeff89505c801f1218c6 2016-06-02 16:08 +0000 [610eee2a36] Richard Mudgett * taskprocessors: Implement high/low water mark alerts. When taskprocessors get backed up, there is a good chance that we are being overloaded and need to defer adding new work to the system. * Implemented a high/low water alert mechanism for modules to check if the system is being overloaded and take appropriate action. When a taskprocessor is created it has default congestion levels set. A taskprocessor can later have those congestion levels altered for specific needs if stress testing shows that the taskprocessor is a symptom of overloading or needs to handle bursty activity without triggering an overload alert. * Add CLI "core show taskprocessor" low/high water columns. * Fixed __allocate_taskprocessor() to not use RAII_VAR(). RAII_VAR() was never a good thing to use when creating a taskprocessor because of the nature of how its references needed to be cleaned up on a partial creation. * Made res_pjsip's distributor check if the taskprocessor overload alert is active before placing a message representing brand new work onto a distributor serializer. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I182f1be603529cd665958661c4c05ff9901825fa 2016-05-27 17:31 +0000 [26e3492246] Richard Mudgett * res_pjsip_session: Use distributor serializer for incoming calls. We must continue using the serializer that the original INVITE came in on for the dialog. There may be retransmissions already enqueued in the original serializer that can result in reentrancy and message sequencing problems. Outgoing call legs create the pjsip/outsess/ serializers for their dialogs. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I24d7948749c582b8045d5389ba3f6588508adbbc 2016-05-27 16:28 +0000 [ceb1007ed7] Richard Mudgett * res_pjsip_pubsub.c: Recreate subscriptions using distributor serializer. * Resolves potential reentrancy problems if system restarted in the middle of subscription message transactions. * Fixes memory leak recreating persistent subscriptions when the subscription resource tree could not be created. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I71e34d7ae8ed35a694f1030e820e2548c48697be 2016-05-27 12:50 +0000 [27bafc3a8b] Richard Mudgett * res_pjsip_pubsub.c: Use distributor serializer for incoming subscriptions. We must continue using the serializer that the original SUBSCRIBE came in on for the dialog. There may be retransmissions already enqueued in the original serializer that can result in reentrancy and message sequencing problems. The "sip_transaction Unable to register SUBSCRIBE transaction (key exists)" message is a notable symptom of this issue. Outgoing subscriptions still create the pjsip/pubsub/ serializers for their dialogs. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I18b00bb74a56747b2c8c29543a82440b110bf0b0 2016-05-26 17:35 +0000 [16b08444da] Richard Mudgett * pjsip_distributor.c: Consistently pick a serializer for messages. Incoming messages that are not part of a dialog or a recognized response to one of our requests need to be sent to a consistent serializer. Under load we may be queueing retransmissions before we can process the original message. We don't need to throw these messages onto random serializers and cause reentrancy and message sequencing problems. * Created a pool of pjsip/distributor serializers that get picked by hashing the call-id and remote tag strings of the received messages. * Made ast_sip_destroy_distributor() destroy items in the reverse order of creation. ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I2ce769389fc060d9f379977f559026fbcb632407 2016-06-02 12:51 +0000 [993b769524] Richard Mudgett * pjsip_distributor.c: Ignore messages until fully booted. We should not be processing any incoming messages until we are fully booted. We may not have dialplan or other needed configuration loaded yet. ASTERISK-26089 #close Reported by: Scott Griepentrog ASTERISK-26088 Reported by: Richard Mudgett Change-Id: I584aefb4f34b885a8927e1f13a2c64babd606264 2016-06-02 12:04 +0000 [321a9b128f] Joshua Colp * res_odbc: Implement a connection pool. Testing has shown that our usage of UnixODBC is problematic due to bugs within UnixODBC itself as well as the heavy weight cost of connecting and disconnecting database connections, even when pooling is enabled. For users of UnixODBC 2.3.1 and earlier crashes would occur due to insufficient protection of the disconnect operation. This was fixed in UnixODBC 2.3.2 and above. For users of UnixODBC 2.3.3 and higher a slow-down would occur under heavy database use due to repeated connection establishment. A regression is present where on each connection the database configuration is cached again, with the cache growing out of control. The connection pool implementation present in this change helps to mitigate these issues by reducing how much we connect and disconnect database connections. We also solve the issue of crashes under UnixODBC 2.3.1 by defaulting the maximum number of connections to 1, returning us to the previous working behavior. For users who may have a fixed version the maximum concurrent connection limit can be increased helping with performance. The connection pool works by keeping a list of active connections. If the connection limit has not been reached a new connection is established. If the connection limit has been reached then the request waits until a connection becomes available before continuing. ASTERISK-26074 #close ASTERISK-26054 #close Change-Id: I6774bf4bac49a0b30242c76a09c403d2e856ecff 2016-06-07 05:45 +0000 [c6ee4a0f44] Alexander Traud * res_srtp: Instead of libSRTP use OpenSSL as random source. Since libSRTP 1.5, its Random Number Generator (RNG) is not maintained anymore. Therefore, the symbol RAND_bytes is used instead of crypto_get_random. ASTERISK-24436 #close Change-Id: Iea0bae4d4e3c9aa0926ea442b6484b5159789d96 2016-06-07 02:16 +0000 [d38b8e6399] Alexander Traud * BuildSystem: Avoid 'ar cru' and use 'ar cr' instead. In several internal library projects, the files are archived with the help of 'ar cr'. Only the projects editline and the Objective Open H.323 stack implementation in C (ooh323c) use 'ar cru' instead. Recently, some platforms changed the default parameters of AR which creates "/usr/bin/ar: `u' modifier ignored since `D' is the default (see `U')". For consistency and to avoid this message all projects use 'ar cr' now. ASTERISK-26091 #close Change-Id: I710a9b1c01c1b5a1931a646098c044c8161ead40 2016-05-27 14:49 +0000 [c27c232057] gtjoseph * ari/resource_channels: Add 'formats' to channel create/originate If you create a local channel and don't specify an originator channel to take capabilities from, we automatically add all audio formats to the new channel's capabilities. When we try to make the channel compatible with another, the "best format" functions pick the best format available, which in this case will be slin192. While this is great for preserving quality, it's the worst for performance and overkill for the vast majority of applications. In the absense of any other information, adding all formats is the correct thing to do and it's not always possible to supply an originator so a new parameter 'formats' has been added to the channel create/originate functions. It's just a comma separated list of formats to make availalble for the channel. Example: "ulaw,slin,slin16". 'formats' and 'originator' are mutually exclusive. To facilitate determination of format names, the format name has been added to "core show codecs". ASTERISK-26070 #close Change-Id: I091b23ecd41c1b4128d85028209772ee139f604b 2016-06-02 04:59 +0000 [cda3385409] Joshua Colp * alembic: Fix migration. The 81b01a191a46_pjsip_add_contact_reg_server.py script was attempting to use UniqueConstraint and failing. It was not imported and after importing it also continued to fail. I've changed the script to use the explicit name of the constraint instead. Change-Id: I2438b0be90b7ce583b47dd27983c0c1a02cea5b9 2016-06-01 13:57 +0000 [e2132dd358] Richard Mudgett * logging,cdr,cel: Fix stringfield memory leak. The stringfields refactor to allow adding stringfields to the end of a structure (f6f4cf459f43f072604927209b39646f84aaa2e2) exposed some incomplete cleanup code by some stringfield users. The most noticeable leaker is the logging system where there is a leak for every log message generated. ASTERISK-26078 #close Reported by: Etienne Lessard Patches: jira_asterisk_26078_v13.patch (license #5621) patch uploaded by Richard Mudgett Change-Id: If6a08b31336b492c3de6f9dfd07c447f8d5a8782 2016-05-25 10:34 +0000 [2de58c6d01] Alexei Gradinari * core/dial: New channel variable FORWARDERNAME Added a new channel variable FORWARDERNAME which indicates which channel was responsible for a forwarding requests received on dial attempt. Fixed a bug in the app_queue: FORWARD_CONTEXT is not used. ASTERISK-26059 #close Change-Id: I34e93e8c1b5e17776a77b319703c48c8ca48e7b2 2016-05-31 13:02 +0000 [b2ce0e354b] Richard Mudgett * pjsip_distributor.c: Use correct rdata info access method (Part 2). The pjproject doxygen for rdata->msg_info.info says to call pjsip_rx_data_get_info() instead of accessing the struct member directly. You need to call the function mostly because the function will generate the struct member value if it is not already setup. Change-Id: I4d519385a577f3e9d9193a88125e493cf17fa799 2016-05-30 19:27 +0000 [fe305ccf01] gtjoseph * res_pjsip_mwi_body_generator: Re-order the body items Re-ordered the body items so Message-Account is second. Messages-Waiting: no Message-Account: sip:1571@:5060 Voice-Message: 0/0 (0/0) ASTERISK-26065 #close Reported-by: Ross Beer Change-Id: If5d35a64656eac98c2dd5e490cc0b2807bed80c3 2016-05-30 10:58 +0000 [e8abfdcdc5] gtjoseph * pjproject_bundled: Move to pjproject 2.5 Although all the patches we had against 2.4.5 were applied by Teluu, a new bug was introduced preventing re-use of tcp and tls transports This patch removes all the previous patches against 2.4.5, updates the version to 2.5, and adds a new patch to correct the transport re-use problem. Change-Id: I0dc6c438c3910f7887418a5832ca186aea23d068 2016-05-27 12:25 +0000 [37d039fdf3] Rusty Newton * res_pjsip: Add clarifying documentation to PJSIP_HEADER help text Added notes about when you can read or write headers. Specifically about being able to read on the inbound channel and write on an outbound channel. ASTERISK-26063 #close Reported by: Private Name Tested by: Rusty Newton Change-Id: Ibeb64af17d1f6451028b3c29855a3f151a01d8c5 2016-05-25 18:30 +0000 [03d5b3ce5c] Richard Mudgett * pjsip_distributor.c: Use correct rdata info access method. The pjproject doxygen for rdata->msg_info.info says to call pjsip_rx_data_get_info() instead of accessing the struct member directly. You need to call the function mostly because the function will generate the struct member value if it is not already setup. Change-Id: Iafe8b01242b7deb0ebfdc36685e21374a43936d2 2016-05-20 13:56 +0000 [859bbec09b] Alexei Gradinari * app_voicemail: fix bugs, imap mm_status log change to debug Fixed some bugs: - create dirpath when save downloading message from IMAP storage. - create IMAP folder if not exists when saving to IMAP storage - check if file successfully opened before write to it - some IMAP checks - remove non-standard flag 'Unseen' etc Change to debug IMAP mm_status log instead of verbose. Remove unused X-Asterisk-VM-Caller-channel message header for security reason. The clients should not know name of peer/endpoint. ASTERISK-26045 #close Change-Id: I7f83d88b69b36934e2539c114b9fb612deed971b 2016-05-19 14:56 +0000 [230686f4ec] Alexei Gradinari * res_pjsip: add "via_addr", "via_port", "call_id" to contact As res_pjsip_nat rewrites contact's address, only the last Via header can contain the source address of registered endpoint. Also Call-Id header may contain the source address of registered endpoint. Added "via_addr", "via_port", "call_id" to contact. Added new fields ViaAddress, CallID to AMI event ContactStatus. ASTERISK-26011 Change-Id: I36bcc0bf422b3e0623680152d80486aeafe4c576 2016-05-24 16:56 +0000 [04c12561a7] Alexei Gradinari * res_pjsip: chatty verbose messages There are a lot of verbose messages about Endpoint and Contact status changes if there are many dynamic endpoints. The patch sets verbose level 2 for Endpoint status changes and verbose level 3 for Contact status changes. ASTERISK-26055 #close Change-Id: Ie64e261ddbbc41bfff0f0190241152cc123fe6d7 2016-02-12 09:59 +0000 [a42bea3314] Corey Farrell * threadpool: Fix potential data race. worker_start checked for ZOMBIE status without holding a lock. All other read/write of worker status are performed with a lock, so this check should do the same. ASTERISK-25777 #close Change-Id: I5e33685a5c26fdb300851989a3b82be8c4e03781 2016-05-18 10:58 +0000 [a32616d60c] Tzafrir Cohen * Makefile: remove OSARCH check for init install There are more specific checks for the platform. Specifically this allows installing OS/X init scripts. ASTERISK-26038 #close Change-Id: If08933621145b10362a0cfe73c079301d9c13f50 Signed-off-by: Tzafrir Cohen 2016-05-21 05:42 +0000 [9ddaab789e] Jesper (License 5518) * func_curl: Don't trim response text on non-ASCII characters The characters 0x80-0xFF were trimmed as well as 0x00-0x20 because of a signed comparison. ASTERISK-25669 #close Reported by: Jesper patches: strings.curl.trim.patch submitted by Jesper (License 5518) Change-Id: Ia51e169f24e3252a7ebbaab3728630138ec6f60a 2016-05-20 16:59 +0000 [9453d1187a] Richard Mudgett * parking.h: Update ast_parking_park_call() doxygen to reality. ASTERISK-26029 Change-Id: I2db14d102a48d3224010e6d1c69e856373cc1260 2016-05-10 14:30 +0000 [cd89501d48] Alexei Gradinari * func_odbc: single database connection should be optional func_odbc was changed in Asterisk 13.9.0 to make func_odbc use a single database connection per DSN because of reported bug ASTERISK-25938 with MySQL/MariaDB LAST_INSERT_ID(). This is drawback in performance when func_odbc is used very often in dialplan. Single database connection should be optional. ASTERISK-26010 Change-Id: I57d990616c957dabf7597dea5d5c3148f459dfb6 2016-05-20 09:39 +0000 [c0b190dd9a] Mark Michelson * res_pjsip: Match dialogs on responses better. When receiving an incoming response to a dialog-starting INVITE, we were not matching the response to the INVITE dialog. Since we had not recorded the to-tag to the dialog structure, the PJSIP-provided method to find the dialog did not match. Most of the time, this was not a problem, because there is a fall-back that makes the response get routed to the same serializer that the request was sent on. However, in cases where an asynchronous DNS lookup occurs in the PJSIP core, the thread that sends the INVITE is not actually a threadpool serializer thread. This means we are unable to record a serializer to handle the incoming response. Now, imagine what happens when an INVITE is sent on a non-serialized thread, and an error response (such as a 486) arrives. The 486 ends up getting put on some random threadpool thread. Eventually, a hangup task gets queued on the INVITE dialog serializer. Since the 486 is being handled on a different thread, the hangup task can execute at the same time that the 486 is being handled. The hangup task assumes that it is the sole owner of the INVITE session and channel, so it ends up potentially freeing the channel and NULLing the session's channel pointer. The thread handling the 486 can crash as a result. This change has the incoming response match the INVITE transaction, and then get the dialog from that transaction. It's the same method we had been using for matching incoming CANCEL requests. By doing this, we get the INVITE dialog and can ensure that the 486 response ends up being handled by the same thread as the hangup, ensuring that the hangup runs after the 486 has been completely handled. ASTERISK-25941 #close Reported by Javier Riveros Change-Id: I0d4cc5d07e2a8d03e9db704d34bdef2ba60794a0 2016-05-19 11:41 +0000 [ddcf983e39] Joshua Colp * res_sorcery_astdb: Filter fields to only the registered ones. This change introduces the same filtering that is done in res_sorcery_realtime to the res_sorcery_astdb module. This allows persisted sorcery objects that may contain unknown fields to still be read in from the AstDB and used. This is particularly useful when switching between different versions of Asterisk that may have introduced additional fields. ASTERISK-26014 #close Change-Id: Ib655130485a3ccfd635b7ed5546010ca14690fb2 2016-05-09 21:40 +0000 [39fedfa423] snuffy * res_pjsip_empty_info: Respond to empty SIP INFO packets Some SBCs require responses to empty SIP INFO packets after establishing call via INVITE, if not responded to they may drop your call after unspecified timeout of X minutes. They are identified by having no Content-Type, check for this and respond with 200 - OK message. ASTERISK-24986 #close Reported-by: Ilya Trikoz, Federico Santulli Change-Id: Ib27e4f07151e5aef28fa587e4ead36c5b87c43e0 2016-05-18 07:54 +0000 [935e0496c4] gtjoseph * udptl: Don't eat sequence numbers until OK is received Scenario: Local fax -> Asterisk w/ firewall -> Provider -> Remote fax * Local fax starts rtp call to remote fax * Remote fax starts t38 call back to local fax. * Local fax sends t38 no-signal to Asterisk before sending an OK. * udptl processes the frame and increments the expected sequence number. * chan_sip drops the frame because the call isn't up so nothing goes out the external interface to open the port for incoming packets. * Local fax sends OK and Asterisk sends OK to the remote fax. * Remote fax sends t38 packets which are dropped by the firewall. * Local fax re-sends t38 no-signal with the same sequence number. * udptl drops the frame because it thinks it's a dup. * Still no outgoing packets to open the firewall. * t38 negotiation fails. The patch drops frames t38 received before udptl sequence processing when the call hasn't been answered yet. The second no-signal frame is then seen as new and is relayed out the external interface which opens the port and allows negotiation to continue. ASTERISK-26034 #close Change-Id: I11744b39748bd2ecbbe8ea84cdb4f3c5943c5af9 2016-05-17 11:14 +0000 [77e8ec162b] gtjoseph * chan_sip: Prevent extra Session-Expires headers from being added When chan_sip does a re-INVITE to refresh a session and authentication is required, the INVITE with the Authorization header containes a second Session-Expires header without the ";refersher=" parameter. This is causing some proxies to return a 400. Also, when Asterisk is the uas and the refresher, it is including the Session-Expires and Min-SE headers in OPTIONS messages which is not allowed per RFC4028. This patch (based on the reporter's) Checks to see if a Session-Expires header is already in the message before adding another one. It also checks that the method is INVITE or UPDATE. ASTERISK-26030 #close Change-Id: I58a7b07bab5a3177748d8a7034fb8ad8e11ce1d9 2016-05-16 15:29 +0000 [3f6ef63099] gtjoseph * res_pjsip_outbound_registration: Clean up state when registration is deleted Nothing was cleaning up the registration state object when ast_sorcery_delete was called on a registration. So, the registration was deleted from sorcery but the state object went right on refreshing the registration (or failing to refresh the registration) with the peer. * Added a 'deleted' observer on registration that removes the state object. ASTERISK-25964 #close Reported-by Matt Jordan Change-Id: I2db792145cdb1f72ebbf57dd9099596dbbf12c23 2016-05-15 19:05 +0000 [b6f9392a12] gtjoseph * res_pjsip: Set TCP_NODELAY on TCP transports Although it's perfectly legal to place multiple SIP messages in the same packet, it can cause problems because the Linux default is to enable Path MTU Discovery which sets the Don't Fragment bit on the packets. If adding a second message to the packet causes the MTU to be exceeded, and the destination isn't equipped to send a FRAGMENTATION NEEDED response to a large packet, the packet will just be dropped. We can't specifically tell the stack to send only 1 message per packet, but we can turn on TCP_NODELAY when we create the transport. This will at least tell the stack to send packets as soon as possible. ASTERISK-26005 #close Reported-by: Ross Beer Change-Id: I820f23227183f2416ca5e393bec510e8fe1c8fbd 2016-05-14 21:48 +0000 [361a16f316] Matt Jordan * configs/samples/pjsip.conf.sample: Fix typo A ':' is not a valid token for starting a comment. Change-Id: I123592d93a83d1bdde3e352822881eb9da85e5ad 2016-05-12 07:08 +0000 [f91a7dc993] Matt Jordan * res/res_hep_pjsip: Fix reported local IP address when bound to 'any' When bound to an 'any' address, e.g., 0.0.0.0, PJSIP reports as its local address the 'any' address, as opposed to the IP address we actually received the packet on. This can cause some confusion in Homer, as it will dutifully report what we send it. This patch uses the PJSIP inspection routines to determine which IP address we probably received the packet on based on the remote party's IP address. In the event that this fails, it falls back to the IP address natively reported by the transport. Change-Id: I076f835d2aef489e1ee1d01595b211eb2ce62da3 2016-05-14 12:29 +0000 [9de5cd209e] Sean Bright * res_ari: Correct Location headers returned by some ARI resources The Location headers returned by: * /bridges/{bridgeId}/play * /bridges/{bridgeId}/record * /channels/{channelId}/play * /channels/{channelId}/record Did not have the '/ari' prefix, and in the case of the 'play' resources, were using 'playback' instead of 'playbacks.' Change-Id: I957c58a3a1471bf477dae7c67faa1b74fcd9241c 2016-05-13 11:38 +0000 [524a302974] Alexei Gradinari * res_pjsip: Endpoint IP Access Controls With the old SIP module we can use IP access controls per peer. PJSIP module missing this feature. This patch added next configuration Endpoint options: "acl" - list of IP ACL section names in acl.conf "deny" - List of IP addresses to deny access from "permit" - List of IP addresses to permit access from "contact_acl" - List of Contact ACL section names in acl.conf "contact_deny" - List of Contact header addresses to deny "contact_permit" - List of Contact header addresses to permit This patch also better logging failed request: add custom message instead of "No matching endpoint found" add SIP method to logging ASTERISK-25900 Change-Id: I456dea3909d929d413864fb347d28578415ebf02 2016-05-11 20:17 +0000 [89ae4466ea] Matt Jordan * res_hep: Provide an option to pick the UUID type At one point in time, it seemed like a good idea to use the Asterisk channel name as the HEP correlation UUID. In particular, it felt like this would be a useful identifier to tie PJSIP messages and RTCP messages together, along with whatever other data we may eventually send to Homer. This also had the benefit of keeping the correlation UUID channel technology agnostic. In practice, it isn't as useful as hoped, for two reasons: 1) The first INVITE request received doesn't have a channel. As a result, there is always an 'odd message out', leading it to be potentially uncorrelated in Homer. 2) Other systems sending capture packets (Kamailio) use the SIP Call-ID. This causes RTCP information to be uncorrelated to the SIP message traffic seen by those capture nodes. In order to support both (in case someone is trying to use res_hep_rtcp with a non-PJSIP channel), this patch adds a new option, uuid_type, with two valid values - 'call-id' and 'channel'. The uuid_type option is used by a module to determine the preferred UUID type. When available, that source of a correlation UUID is used; when not, the more readily available source is used. For res_hep_pjsip: - uuid_type = call-id: the module uses the SIP Call-ID header value - uuid_type = channel: the module uses the channel name if available, falling back to SIP Call-ID if not For res_hep_rtcp: - uuid_type = call-id: the module uses the SIP Call-ID header if the channel type is PJSIP and we have a channel, falling back to the Stasis event provided channel name if not - uuid_type = channel: the module uses the channel name ASTERISK-25352 #close Change-Id: Ide67e59a52d9c806e3cc0a797ea1a4b88a00122c 2016-05-10 02:56 +0000 [a73d79c22f] Tzafrir Cohen * basic-cfg: asterisk.conf: remove [directories] A minimal configuration does not need to explicitly spell out the directories. The built-in defaults will do just fine. In many cases they are wrong. Change-Id: Id1a671e5c5e9923765a4156b57f9f7e263fdd26c Signed-off-by: Tzafrir Cohen 2016-05-10 03:06 +0000 [1c56de9453] Tzafrir Cohen * basic-cfg: asterisk.conf: defaults of options Note the default of remmed-out options. To clarify that those values are not the defaults. Change-Id: I849c29b7a710f0abc37355fcb5bfee335ae30738 Signed-off-by: Tzafrir Cohen 2016-05-10 03:08 +0000 [d7af591c59] Tzafrir Cohen * basic-cfg: asterisk.conf: debug level 5 spams Don't suggest users to use debug level 5, which spews (usually non-useful) debug information. Reduce the suggestion to (an arbitrarily-selected) level 2. Change-Id: Ib53195f78945970956ff59ef13fa89b90e0fcd60 Signed-off-by: Tzafrir Cohen 2016-05-10 03:10 +0000 [9b7db18fc1] Tzafrir Cohen * basic-cfg: asterisk.conf: don't set languages * No need to set language in a miniml configuration. 'en' will do just fine. * It would be useful to have an example of setting it to a different language. * Setting the documentation language explicitly is likewise not required. Setting it to a different value is not common. At least until there is a set of translated documentation. Change-Id: I94d91ea34e129925f25af81ef8dc0906fb568cb7 Signed-off-by: Tzafrir Cohen 2016-05-10 08:17 +0000 [eec539a46e] Tzafrir Cohen * followme: delete the right recorded name file FollowMe with the option a records the name of the caller and plays it to the callee. However it has failed to clean up that recorded file as it tried to delete the file name without the '.sln' extension. ASTERISK-26008 #close Change-Id: I79d7b1be7d5cde57bf076d9389e2a8a4422776ec Signed-off-by: Tzafrir Cohen 2016-05-12 14:36 +0000 [02d30e171e] Mark Michelson * Use doubles instead of floats for conversions when comparing strings. In 13.9.0, there was an issue where PJSIP contacts added to an AOR would be deleted at seemingly random times. One reason this was happening was because of an operation to retrieve the contacts whose expiration time was less than or equal to the current time. When retrieving existing contacts, the contact's expiration time and the current time were converted from a string to a float, and those two floats were compared. On some systems, including mine, this conversion was horribly off. For instance, I could regularly see the string "1463079214" get converted into 1463079168.000000. When switching from using a float to using a double, the conversion was as expected. Why was the conversion to float off? My best guess is that the conversion to float was attempting to store the entire value in the 23 bit significand of the IEEE-754 floating point number. In particular, if you take only the 23 most significant bits of 1463079214, you get the messed up 1463079168 that we were seeing in the conversion. It likely was possible to get a more precise value by composing the number using an exponent, but the conversion did not work that way. With a double, you have a 52 bit significand, allowing the entire value to fit there, and thereby allowing an accurate conversion. ASTERISK-26007 #close Reported by Greg Siemon Change-Id: I83ca7944aae8b7cd994b254c78ec02411d321070 2016-05-12 09:13 +0000 [e2df15bae9] gtjoseph * pjsip_distributor: Add missing newline to NOTICE There was a newline missing from the end of the "no matching endpoint" notice. Change-Id: Idc11fe5bc0354072291663dbffe648c471e39181 2016-05-10 10:19 +0000 [a94a12bbf7] Sebastian Damm * res_pjsip_outbound_registration: generate correct Contact URI for TLS There are two types of SIP URIs indicating a secure transport: * sips:user@example.org * sip:user@example.org;transport=tls When using a sips URI, Asterisk checks incoming INVITEs and answers from the other side for sips URIs, and rejects the packet if there are only sip URIs. So Asterisk should only generate a sips Contact URI if the other side supports it. This patch makes Asterisk generate either a sip or sips Contact URI depending on the format of the server URI. If you want a sip URI, use: server_uri=sip:example.org\;transport=tls If you want a sips URI, use: server_uri=sips:example.org ASTERISK-25990 #close Reported-by: Sebastian Damm Change-Id: I5ae57d6531ce940b5fc64d5cd2673e60db0f9ba2 2016-05-05 16:41 +0000 [36d66a23e0] Alexei Gradinari * logger: Add PID to syslog messages. During refactoring of this support the addition of the PID to messages was removed. This change adds it back in. ASTERISK-25538 #close Change-Id: Ie2d43b0652e59b7ac319a7dba94501540d70ba36 2016-05-11 14:07 +0000 [37214b0bdf] Matt Jordan * configure: Fix errors with AST_UNDEFINED_SANITIZER/AST_LEAK_SANITIZER When running on a system that does not support or use AST_UNDEFINED_SANITIZER or AST_LEAK_SANITIZER, the configure script would incorrectly set those constants to a blank value, e.g., 'AST_UNDEFINED_SANITIZER='. This would cause menuselect to error out, complaining that a blank value is not a valid option. This patch corrects the issue by setting the value to 0 if the options that those constants enable/disable is not found. Change-Id: Ib39814aaf940f308d500c1e026edb3d70de47fba 2016-05-03 15:43 +0000 [49b25a0956] Kevin Harwell * res_pjsip_outbound_publish: state potential dropped on reloads/realtime fetches When reloading, or fetching realtime data, if the "apply" failed for any numerous reasons the current state object would not be maintained. This potentially resulted in publishes being stopped for some states/clients when they should not have been. This patch makes it so the current state object is kept upon any type of reload/ fetch failures. Change-Id: Iab6020c116d628ed2ae81183e987e2eaa3c90b30 2016-05-03 15:31 +0000 [1b5c91b7be] Kevin Harwell * res_pjsip_outbound_publish: Potential crash due to off nominal path It was possible for the explicit publish destroy function to be called without the pjsip client ever being initialized. This fix checks to make sure there is a client to destroy before attempting. Change-Id: I8eea1bfa3bd472149bfc255310be2a6248688f5c 2016-05-03 15:35 +0000 [10de553c9d] Kevin Harwell * res_pjsip_outbound_publishing: After unloading the library won't load again The same thing was happening in res_pjsip_publish_asterisk. When the library was unloaded it did not unregister the object type from sorcery. Subsequent loads resulted in a failed load due to the sorcery type already existing. Change-Id: Ifdc25e94e4cd40bc5a19eb4d0a00b86c2e9fedc9 2016-05-03 14:59 +0000 [1a833b9739] Kevin Harwell * res_pjsip_outbound_publish: Ref leak in off nominal callback paths There were a few spots where the client object's reference was being leaked in sip_outbound_publish_callback. This patch cleans up those leaks. Change-Id: I485d0bc9335090f373026f77c548042e258461df 2016-05-03 15:39 +0000 [4752ef02e0] Kevin Harwell * res_pjsip_outbound_publish: Won't unload if condition wait times out When res_pjsip_outbound_publish unloads it has to wait for all current publishing objects to get done. However if the wait condition times out then it does not fail the unload. This sometimes results in an infinite loop check while unloading. This patch now fails the unload operation if the condition times out. Change-Id: Id57b8cbed9d61222690fcba1e4f18e259df4c7ec 2016-05-05 11:37 +0000 [4d063814ba] Kevin Harwell * res_pjsip_authenticator_digest: Don't use source port in nonce verification From the issue reporter: "res_pjsip_outbound_authenticator_digest builds a nonce that is a hash of the timestamp, the source address, the source port, a server UUID that is calculated at startup, and the authentication realm. Rather than caching nonces that we create, we instead attempt to re-calculate the nonce when receiving an incoming request with authentication. We then compare the re-calculated nonce to the incoming nonce, and if they don't match, then authentication has failed early. The problem is that it is possible, especially when using TCP, to receive two requests from the same endpoint but have differing source ports for those requests. Asterisk itself commonly will use different source ports for outbound TCP requests." This patch removes the source port dependency when building the nonce. ASTERISK-25978 #close Change-Id: I871b5f4adce102df1c4988066283095ec509dffe 2016-05-07 14:39 +0000 [fb6227a372] gtjoseph * config_transport: Tell pjproject to allow all SSL/TLS protocols The default tls settings for pjproject only allow TLS 1, TLS 1.1 and TLS 1.2. SSL is not allowed. So, even if you specify "sslv3" for a transport method, it's silently ignored and one of the TLS protocols is used. This was a new behavior of pjsip_tls_setting_default() in 2.4 (when tls.proto was added) that we never caught. Now we need to set tls.proto = 0 after we call pjsip_tls_setting_default(). This tells pjproject to set the socket protocol to match the method. ASTERISK-26004 #close Change-Id: Icfb55c1ebe921298dedb4b1a1d3bdc3ca41dd078 2016-05-04 02:40 +0000 [2db17a793c] Jaco Kroon * app_confbridge: Add a regcontext option for confbridge bridge profiles. This patch allows for having app_confbridge register the name of the conference as an extension into a specific context, similar to regcontext for chan_sip. This variant is not quite as involved as the one in chan_sip and doesn't allow for multiple contexts or custom extensions, you can only specify the context and the conference name will always be used as the extension to register. ASTERISK-25989 #close Change-Id: Icacf94d9f2b5dfd31ef36f6cb702392619a7902f 2016-05-08 20:19 +0000 [2a7130b8b0] gtjoseph * pjproject_bundled: Check for python-dev and TEST_FRAMEWORK The pjsua and pjsystest apps are now built only if TEST_FRAMEWORK is set. The python bindings are now built only if TEST_FRAMEWORK is set and a python development package is installed. libresample was also disabled. ASTERISK-25993 #close Reported-by: Joshua Colp Change-Id: If4e91c503a02f113d5b71bc8b972081fa3ff6f03 2016-05-04 15:16 +0000 [72eb7c8301] Alexei Gradinari * res_pjsip: module load priority The res_pjsip_authenticator_digest, res_pjsip_endpoint_identifier_* and res_pjsip_registrar modules should load ASAP to avoid "No matching endpoint found" for legitimate endpoint. ASTERISK-25994 Change-Id: Iac95d95ad031e0be104189d29e923a2ad7c24a1b 2016-05-04 03:17 +0000 [dd00c71aae] Chris Trobridge * config_options.c: Expand #ifdef to contain whole if statement. ASTERISK-25956 #close Change-Id: If6961ec54be276d5ab4f012ee7e7b420cb45de38 2016-05-05 15:16 +0000 [e6eb17efd9] Alexei Gradinari * stasis_endpoints: Add new Status and Headers to ContactStatus ASTERISK-25903 added a new headers to AMI Event ContactStatusDetail. ASTERISK-25904 added a new Status to AMI Event ContactStatusDetail. These additions should be also in stasis_endpoints to include in command "manager show event ContactStatus" Change-Id: I7610ad02a998e1f26c20caa27aa50279d0164f6a 2016-05-05 05:07 +0000 [fa11f4c920] Joshua Colp * file: Ensure nativeformats remains valid for lifetime of use. It is possible for the nativeformats of a channel to change throughout its lifetime. As a result a user of it needs to either ensure the channel is locked when accessing the formats or keep a reference to the nativeformats themselves. This change fixes the file playback support so it keeps a reference to the nativeformats when accessing things. ASTERISK-25998 #close Change-Id: Ie45b65475e1481ddf05b874ee48f63e39fff8915 2016-04-15 09:32 +0000 [9c2032240e] Alexei Gradinari * res_pjsip: improve realtime performance This patch modified pjsip_options to retrieve only permament contacts for aor if the qualify_frequency is > 0 and persisted contacts if the qualify_frequency is > 0. This patch also fixed a bug in res_sorcery_astdb. res_sorcery_astdb doesn't save object data retrived from astdb. ASTERISK-25826 Change-Id: I1831fa46c4578eae5a3e574ee3362fddf08a1f05 2016-05-04 16:11 +0000 [fe38d21c2a] Alexei Gradinari * pjsip: Added "reg_server" to contacts (fixed alembic) ASTERISK-25931 Change-Id: Icc4321a88f5c93ff809da3f372eebbf69c6a8549 2016-04-07 16:33 +0000 [7a14e669f0] Alexei Gradinari * res_pjsip/AMI: add contact.updated event With the old SIP module AMI sends PeerStatus event on every successfully REGISTER requests, ie, on start registration, update registration and stop registration. With PJSIP AMI sends ContactStatus only when status is changed. Regarding registration: on start registration - Created on stop registration - Removed but on update registration nothing This patch added contact.updated event. ASTERISK-25904 Change-Id: I8fad8aae9305481469c38d2146e1ba3a56d3108f 2016-05-02 16:08 +0000 [06d4ac0355] Alexei Gradinari * res_fax: add FAXMODE variable The app_fax set FAXMODE variable, but res_fax missing this feature. This patch add FAXMODE variable which is set to either "audio" or "T38". ASTERISK-25980 Change-Id: Ie3dcbfb72cc681e9e267a60202f7fb8723a51b6b 2016-05-02 16:52 +0000 [2d17fe06c5] Alexei Gradinari * res_fax/t38_gateway: Peer V.21 session is created on wrong channel The channel and peer V.21 sessions are created on the same channel now. The peer V.21 session should be created only on peer channel when one of channel can handle T.38. Also this patch enable debug for T.38 gateway session if global fax debug enabled. ASTERISK-25982 Change-Id: I78387156ea521a77eb0faf170179ddd37a50430e 2016-05-01 02:21 +0000 [a2f19d82a8] Diederik de Groot * configs/basic-pbx/asterisk.conf: contains incorrect path separator Note: When packagers use these files (as an example) the paths are never really used when they are split using '='. Note: Thirdparty applications will also have trouble parsing the file when expecting '=>'. Change-Id: I0ada647f588e81f023fb1333ca15a1a333fd6004 2016-04-30 17:52 +0000 [f39089f17c] gtjoseph * pjproject_bundled: Various fixes discovered during testing of OSes For all OSes: * Disabled third-party codecs in pjproject and added '--disable-speex-codec --disable-speex-aec --disable-gsm-codec' to the configure options since we don't use the pjsip codec capability. FreeBSD: * Added FreeBSD support to install_prereq. * Changed pjproject/configure.m4 to use $GNU_MAKE instead of hardcoding "make". * Added __progname and environ to asterisk.exports.in. * Reverted the use of ldconfig to create shared library symlinks to ln. * Only enable epoll in pjproject if `uname -s` is Linux. * Added a patch to pjproject to take the name of the 'make' command from an environment variable if supplied. This is needed for the python bindings. (merged by Teluu into pjproject trunk 5/3/2016) FreeBSD support isn't complete. Still some general issues regarding make/gmake having nothing to do with pjproject. With some handholding it DOES build successfully. CentOS: Added 'patch' and 'bzip2' to install_prereq PACKAGES_RH. CentOS 6/7 32/64 build and run the pjsip testsuite successfully. Ubuntu: No changes required. Ubuntu 15/16 32/64 build and run the pjsip testsuite successfully. Debian: No changes required. Debian 6/7/8 32/64 build and run the pjsip testsuite successfully. There will utimately be a follow-up patch to create an install_prereq for the testsuite as I've discovered a few missing requirements. ASTERISK-25968 #close Change-Id: I5756a07facfc63798115a5e73a8709382fe9259c 2016-03-17 14:29 +0000 [8028fc7585] Andrew Nagy * app_voicemail: always copy dynamic struct to avoid race condition Voicemail email addresses can be corrupt or voicemail emails can end up being sent to the wrong email address if asterisk is reading voicemail.conf during a reload and processing an email at the same time. This patch always copies the struct that would otherwise only be copied once. ASTERISK-24463 #close Reported by: John Campbell Tested by: Etienne Lessard Tested by: Andrew Nagy Change-Id: I3a0643813116da84e2617291903d0d489b7425fb 2016-04-15 14:26 +0000 [3cb8934de0] Alexei Gradinari * pjsip: Added "reg_server" to contacts. If the Asterisk system name is set in asterisk.conf, it will be stored into the "reg_server" field in the ps_contacts table to facilitate multi-server setups. ASTERISK-25931 Change-Id: Ia8f6bd2267809c78753b52bcf21835b9b59f4cb8 2016-04-28 11:35 +0000 [7992923c70] Richard Mudgett * res_pjsip: Start body generator users after suppliers. Change-Id: I8f0b57841feaab56c8a4e821b5ccb4e05e5fbadb 2016-04-28 16:06 +0000 [5dc0e082b2] Richard Mudgett * res_pjsip_pubsub.c: Add useful information to some messages. Change-Id: Ia0b2e15773894c599e5c5748bbc70e99f434192a 2016-04-26 15:58 +0000 [f9e416f053] Richard Mudgett * res_pjsip_pubsub.c: Fix body generator registration race. Change-Id: Id8752073ef06472a2fd96080f4009fac42843e67 2016-04-26 15:13 +0000 [b1b2019046] Richard Mudgett * res_pjsip_pubsub.h: Fix doxygen association. Change-Id: I110d3e3572598289fcd4215d966cf0c858f98632 2016-04-25 16:00 +0000 [b7f07fdff5] Richard Mudgett * res_pjsip_outbound_publish.c: Remove redundant flag check. Change-Id: I0da80a3c3e0eae0c52ff27e7412ba027d6f52353 2016-04-28 16:54 +0000 [719ece5659] gtjoseph * pjproject_bundled: Disable PJSIP_UNESCAPE_IN_PLACE When pjsip_parse_uri is called with PJSIP_UNESCAPE_IN_PLACE enabled, the input uri string will become corrupted if it contains escape sequences. It's not possible to automatically strdup or strdupa the input string because the output uri pj_str_t's will have pointers to chunks of the input string. Getting around this would require more memory management code and wouldn't be worth the savings of doing the unescape in place. ASTERISK-25970 #close Reported-by: Dmitriy Serov Change-Id: I28dc0e599b5108f7959b9c46dc8278371b372f88 2016-03-07 18:34 +0000 [38bed4515d] gtjoseph * res_pjsip: Add ability to identify by Authorization username A feature of chan_sip that service providers relied upon was the ability to identify by the Authorization username. This is most often used when customers have a PBX that needs to register rather than identify by IP address. From my own experiance, this is pretty common with small businesses who otherwise don't need a static IP. In this scenario, a register from the customer's PBX may succeed because From will usually contain the PBXs account id but an INVITE will contain the caller id. With nothing recognizable in From, the service provider's Asterisk can never match to an endpoint and the INVITE just stays unauthorized. The fixes: A new value "auth_username" has been added to endpoint/identify_by that will use the username and digest fields in the Authorization header instead of username and domain in the the From header to match an endpoint, or the To header to match an aor. This code as added to res_pjsip_endpoint_identifier_user rather than creating a new module. Although identify_by was always a comma-separated list, there was only 1 choice so order wasn't preserved. So to keep the order, a vector was added to the end of ast_sip_endpoint. This is only used by res_pjsip_registrar to find the aor. The res_pjsip_endpoint_identifier_* modules are called in globals/endpoint_identifier_order. Along the way, the logic in res_pjsip_registrar was corrected to match most-specific to least-specific as res_pjsip_endpoint_identifier_user does. The order is: username@domain username@domain_alias username Auth by username does present 1 problem however, the first INVITE won't have an Authorization header so the distributor, not finding a match on anything, sends a securty_alert. It still sends a 401 with a challenge so the next INVITE will have the Authorization header and presumably succeed. As a result though, that first security alert is actually a false alarm. To address this, a new feature has been added to pjsip_distributor that keeps track of unidentified requests and only sends the security alert if a configurable number of unidentified requests come from the same IP in a configurable amout of time. Those configuration options have been added to the global config object. This feature is only used when auth_username is enabled. Finally, default_realm was added to the globals object to replace the hard coded "asterisk" used when an endpoint is not yet identified. The testsuite tests all pass but new tests are forthcoming for this new feature. ASTERISK-25835 #close Reported-by: Ross Beer Change-Id: I30ba62d208e6f63439600916fcd1c08a365ed69d 2016-04-27 13:23 +0000 [677d5b5151] Mark Michelson * func_odbc: Check connection status before executing queries. A recent change to func_odbc made it so that a single connection was maintained per DSN. The problem was that the code was optimistic about the health of the connection after initially opening it and did nothing to re-connect in case the connection had died. This change adds a check before executing a query to ensure that the connection to the database is still up and running. ASTERISK-25963 #close Reported by Ross Beer Change-Id: Id33c86eb04ff48ca088bb2e3086c27b3b683491d 2016-04-15 11:59 +0000 [df3639700a] Alexei Gradinari * res_pjsip: disable multi domain to improve realtime performace This patch added new global pjsip option 'disable_multi_domain'. Disabling Multi Domain can improve Realtime performance by reducing number of database requests. ASTERISK-25930 #close Change-Id: I2e7160f3aae68475d52742107949a799aa2c7dc7 2016-04-26 11:13 +0000 [949bf6b282] Joshua Colp * chan_sip: Give more time for TCP/TLS threads to stop. The unload process currently tells each TCP/TLS to terminate but does not wait for them to do so. This introduces a race condition where the container holding the threads may be destroyed before the threads are able to remove themselves from it. When they finally do the container is invalid and can't be used causing a crash. A previous change existed which waited a bit to wait for any stranglers to finish. This change extends this and waits longer. ASTERISK-25961 #close Change-Id: Idc6262b670ca49ede32061159e323b7b63c6f3c6 2016-04-26 05:48 +0000 [6959f5484b] Joshua Colp * app_queue: Fix crash when unloading module. When unloading the app_queue module the members in each queue are destroyed and as part of this they are removed from the pending members container. Unfortunately a crash would occur as the container was destroyed before the members were removed. This change tweaks ordering so the container destruction occurs after the members are destroyed. ASTERISK-16115 Change-Id: I48c728668c55aee3d05b751a5d450fb57e87f44b 2016-04-24 22:51 +0000 [b38f1146e5] gtjoseph * config: Fix ast_config_text_file_save2 writability check for missing files A patch I did back in 2014 modified ast_config_text_file_save2 to check the writability of the main file and include files before truncating and re-writing them. An unintended side-effect of this was that if a file doesn't exist, the check fails and the write is aborted. This patch causes ast_config_text_file_save2 to check the writability of the parent directory of missing files instead of checking the file itself. This allows missing files to be created again. A unit test was also added to test_config to test saving of config files. The regression was discovered when app_voicemail's passwordlocation=spooldir feature stopped working. ASTERISK-25917 #close Reported-by: Jonathan Rose Change-Id: Ic4dbe58c277a47b674679e49daed5fc6de349f80 2016-04-21 23:53 +0000 [29bab0d1a4] Kirill Katsnelson * chan_sip: Make autocreated peers send PeerStatus events Since Stasis has been introduced, an attempt to send AMI messages by an autocreated peer caused a crash, and all events from autocreated peers were semi-inadvertently disabled altogether in 0b83761. This change restores the disabled functionality. ASTERISK-25950 Change-Id: Iecc350f23db603fadb2f302064643ebe9664e974 2016-04-21 14:23 +0000 [c345e530f4] Kevin Harwell * app_queue: queue members can receive multiple calls It was possible for a queue member that is a member of at least 2 or more queues to receive mulitiple calls at the same time. This happened because of a race between when a member was being rung and when the device state notified the other queue(s) member object of the state change. This patch makes it so when a queue member is being rung it gets added to a global pool of queue members. If that same member is tried again, e.g. from another queue, and it is found to already exist in the pending member container then it will not ring that member. ASTERISK-16115 #close Change-Id: I546dd474776d158c2b6be44205353dee5bac7e48 2016-04-25 08:11 +0000 [c0688a6398] Javier Acosta * Fix case sensitive actions in AMI QueueSummary and QueueStatus ASTERISK-25954 #close Reported by: Javier Acosta Change-Id: I00be83d45cc7e8385de2523012bd196aafeeb256 2016-04-22 15:25 +0000 [ebf0724a83] Richard Mudgett * test_message.c: Wait longer in case dialplan also processes the test message. Bumped the wait from 1 second to 5 seconds. The test message was hitting my default call handler and failing the test because it took longer. Change-Id: I3a03737f25e92983de00548fcc7bbc50dd7544ba 2016-04-12 15:29 +0000 [ba63aa7c9e] Richard Mudgett * Manager: Short circuit AMI message processing. Improve AMI message processing performance if there are no consumers listening for the messages. We now skip creating the AMI event message text strings. Change-Id: I7b22fc5ec4e500d00635c1a467aa8ea68a1bb2b3 2016-04-13 17:54 +0000 [d5ee6acf28] Richard Mudgett * manager.c: Eliminate most RAII_VAR usage. * Made ast_manager_event_blob_create() not allocate the ao2 event object with a lock as it is not needed. Change-Id: I8e11bfedd22c21316012e0b9dd79f5918f644b7c 2016-04-13 17:09 +0000 [7303e3dc96] Richard Mudgett * manager_channels.c: Fix allocation failure crash. An earlier allocation failure failed to create a channel snapshot for the AMI HangupRequest/SoftHangupRequest event which resulted in a crash in channel_hangup_request_cb(). Where the stasis message gets generated cannot tell if the NULL snapshot returned was because of an allocation failure or the channel was a dummy channel. * Made channel_hangup_request_cb() check if the channel blob has a snapshot and exit if it doesn't. * Eliminated the RAII_VAR usage in channel_hangup_request_cb(). Change-Id: I0b6a1c4e95cbb7d80b2a7054c6eadecc169dfd24 2016-04-13 13:50 +0000 [1e93f3d723] Richard Mudgett * Bridge system: Fix memory leaks and double frees on impart failure. You cannot reference the passed in features struct after calling ast_bridge_impart(). Even if the call fails. Change-Id: I902b88ba0d5d39520e670fb635078a367268ea21 2016-04-13 13:20 +0000 [5e388d4188] Richard Mudgett * bridge_softmix.c: Fix crash if channel fails to join mixing tech. softmix_bridge_join() failed because of an allocation failure. To address this, the softmix bridge technology now checks if the channel failed to join softmix successfully. In addition, the bridge now begins the process of kicking the channel out of the bridge so we don't have channels partially in the bridge for very long. * Fix the test_channel_feature_hooks.c unit tests. The test channel must have a valid codec to join the simple_bridge technology. This patch makes joining a bridge more strict by not allowing partially joined channels to remain in the bridge. Change-Id: I97e2ade6a2bcd1214f24fb839fda948825b61a2b 2016-03-17 12:28 +0000 [9740277713] gtjoseph * res_pjsip: Add serialized scheduler (res_pjsip/pjsip_scheduler.c) There are several places that do scheduled tasks or periodic housecleaning, each with its own implementation: * res_pjsip_keepalive has a thread that sends keepalives. * pjsip_distributor has a thread that cleans up expired unidentified requests. * res_pjsip_registrar_expire has a thread that cleans up expired contacts. * res_pjsip_pubsub uses ast_sched directly and then calls ast_sip_push_task. * res_pjsip_sdp_rtp also uses ast_sched to send keepalives. There are also places where we should be doing scheduled work but aren't. A good example are the places we have sorcery observers to start registration or qualify. These don't work when changes are made to a backend database without a pjsip reload. We need to check periodically. As a first step to solving these issues, a new ast_sip_sched facility has been created. ast_sip_sched wraps ast_sched but only uses ast_sched as a scheduled queue. When a task is ready to run, ast_sip_task_pusk is called for it. This ensures that the task is executed in a PJLIB registered thread and doesn't hold up the ast_sched thread so it can immediately continue processing the queue. The serializer used by ast_sip_sched is one of your choosing or a random one from the res_pjsip pool if you don't choose one. Another feature is the ability to automatically clean up the task_data when the task expires (if ever). If it's an ao2 object, it will be dereferenced, if it's a malloc'd object it will be freed. This is selectable when the task is scheduled. Even if you choose to not auto dereference an ao2 task data object, the scheduler itself maintains a reference to it while the task is under it's control. This prevents the data from disappearing out from under the task. There are two scheduling models. AST_SIP_SCHED_TASK_PERIODIC specifies that the invocations of the task occur at the specific interval. That is, every "interval" milliseconds, regardless of how long the task takes. If the task takes longer than the interval, it will be scheduled at the next available multiple of interval. For exmaple: If the task has an interval of 60 secs and the task takes 70 secs (it better not), the next invocation will happen at 120 seconds. AST_SIP_SCHED_TASK_DELAY specifies that the next invocation of the task should start "interval" milliseconds after the current invocation has finished. Also, the same ast_sched facility for fixed or variable intervals exists. The task's return code in conjunction with the AST_SIP_SCHED_TASK_FIXED or AST_SIP_SCHED_TASK_VARIABLE flags controls the next invocation start time. One res_pjsip.h housekeeping change was made. The pjsip header files were added to the top. There have been a few cases lately where I've needed res_pjsip.h just for ast_sip calls and had compiles fail spectacularly because I didn't add the pjsip header files to my source even though I never referenced any pjsip calls. Finally, a few new convenience APIs were added to astobj2 to make things a little easier in the scheduler. ao2_ref_and_lock() calls ao2_ref() and ao2_lock() in one go. ao2_unlock_and_unref() does the reverse. A few macros were also copied from res_phoneprov because I got tired of having to duplicate the same hash, sort and compare functions over and over again. The AO2_STRING_FIELD_(HASH|SORT|CMP)_FN macros will insert functions suitable for aor_container_alloc into your source. This facility can be used immediately for the situations where we already have a thread that wakes up periodically or do some scheduled work. For the registration and qualify issues, additional sorcery and schema changes would need to be made so that we can easily detect changed objects on a periodic basis without having to pull the entire database back to check. I'm thinking of a last-updated timestamp on the rows but more on this later. Change-Id: I7af6ad2b2d896ea68e478aa1ae201d6dd016ba1c 2016-04-25 21:43 +0000 Asterisk Development Team * asterisk 13.9.0-rc1 Released. 2016-04-25 16:42 +0000 [5237b7cd47] Joshua Colp * Release summaries: Add summaries for 13.9.0-rc1 2016-04-25 16:40 +0000 [5a3850ecba] Joshua Colp * .version: Update for 13.9.0-rc1 2016-04-25 16:40 +0000 [60b39040e4] Joshua Colp * .lastclean: Update for 13.9.0-rc1 2016-04-25 16:40 +0000 [5078454464] Joshua Colp * realtime: Add database scripts for 13.9.0-rc1 2016-04-22 17:53 +0000 [eb7c581806] gtjoseph * res_agi: Prevent run_agi from eating frames it shouldn't The run_agi function is eating control frames when it shouldn't be. This is causing issues when an AGI is run from CONNECTED_LINE_SEND_SUB in a blond transfer. Alice calls Bob. Bob attended transfers to Charlie but hangs up before Charlie answers. Alice gets the COLP UPDATE indicating Charlie but Charlie never gets an UPDATE and is left thinking he's connected to Bob. In this case, when CONNECTED_LINE_SEND_SUB runs on Alice's channel and it calls an AGI, the extra eaten frames prevent CONNECTED_LINE_SEND_SUB from running on Charlie's channel. The fix was to accumulate deferrable frames in the "forever" loop instead of dropping them, and re-queue them just before running the actual agi command or exiting. ASTERISK-25951 #close Change-Id: I0f4bbfd72fc1126c2aaba41da3233a33d0433645 2016-04-22 13:49 +0000 [068ae54c76] Mark Michelson * func_odbc: Use one connection per DSN. res_odbc was changed in Asterisk 13.8.0 to remove connection management, opting instead to let unixodbc maintain open connections and return those to Asterisk as requested. This was a boon for realtime, since it meant that multiple threads could potentially run parallel queries since they could each be using their own database connections. However, on the user-facing side, func_odbc, there were some inherent behaviors being relied on that no longer hold true after the change. One such reported behavior was that MySQL's LAST_INSERTED_ID() works per-connection. This means that if Asterisk uses separate connections for every database operation, whereas before it used one connection for everything, we have broken expectations and functionality. The fix provided in this patch is to make func_odbc use a single database connection per DSN. This way, user-facing database usage will have the same behavior as it did pre-13.8.0. However, realtime, which is the real workhorse of database interaction, will continue to let unixodbc manage connections. ASTERISK-25938 #close Reported by Edwin Vandamme Change-Id: Iac961fe79154c6211569afcdfec843c0c24c46dc 2016-04-22 13:02 +0000 [6aeefa89bc] Leif Madsen * Remove reference to non-existent sip.conf option Option was removed in commit 7f883ef495b57ae9182e47213d01d5e8009dbf3f ASTERISK-25927 #close Change-Id: I92f9b0196d9fc41d1d58354c07340c465ef1fcf8 2016-04-21 08:26 +0000 [e750ea9b5b] Diederik de Groot * lock.c: Check *lt before dereferencing it *lt is NULL if t->tracking == 0 ASTERISK-25948 #close Change-Id: I4a81af28f9c82a74aa82413d772a7dc8fa6f45ba 2016-04-15 14:36 +0000 [a036c35903] Richard Mudgett * res_stasis: Handle re-enter stasis bridge with swap channel. We lose the fact that there is a swap channel if there is one. We currently wind up rejoining the stasis bridge as a normal join after the swap channel has already been kicked from the bridge. This patch preserves the swap channel so the AMI/ARI events can note that the channel joining the bridge is swapping with another channel. Another benefit to swaqpping in one operation is if there are any channels that get lonely (MOH, bridge playback, and bridge record channels). The lonely channels won't leave before the joining channel has a chance to come back in under stasis if the swap channel is the only reason the lonely channels are staying in the bridge. ASTERISK-25947 #close Reported by: Richard Mudgett ASTERISK-24649 Reported by: John Bigelow ASTERISK-24782 Reported by: John Bigelow Change-Id: If37ea508831d1fed6dbfac2f191c638fc0a850ee 2016-04-19 16:58 +0000 [9942d50aa5] Richard Mudgett * bridge: Hold off more than one imparting channel at a time. An earlier patch blocked the ast_bridge_impart() call until the channel either entered the target bridge or it failed. Unfortuantely, if the target bridge is stasis and the imprted channel is not a stasis channel, stasis bounces the channel out of the bridge to come back into the bridge as a proper stasis channel. When the channel is bounced out, that released the block on ast_bridge_impart() to continue. If the impart was a result of a transfer, then it became a race to see if the swap channel would get hung up before the imparted channel could come back into the stasis bridge. If the imparted channel won then everything is fine. If the swap channel gets hung up first then the transfer will fail because the swap channel is leaving the bridge. * Allow a chain of ast_bridge_impart()'s to happen before any are unblocked to prevent the race condition described above. When the channel finally joins the bridge or completely fails to join the bridge then the ast_bridge_impart() instances are unblocked. ASTERISK-25947 Reported by: Richard Mudgett ASTERISK-24649 Reported by: John Bigelow ASTERISK-24782 Reported by: John Bigelow Change-Id: I8fef369171f295f580024ab4971e95c799d0dde1 2016-04-19 17:52 +0000 [516c626a7d] gtjoseph * res_pjsip_callerid: Clear out display name if id->name is not valid When create_new_id_hdr creates a new RPID or PAI header, it starts by cloning the From header, then it overwrites the display name and uri from the channel's connected.id. If the connected.id.name wasn't valid, create_new_id_hdr was leaving the display name from the From header in the new RPID or PAI header. On an attended transfer where the originator had a caller id number set but not a display name, the re-INVITE to the final transferee had the number of the originator but the display name of the transferer. Added a check to clear out the display name in the new header if connected.id.name was invalid. ASTERISK-25942 #close Change-Id: I60b4bf7a7ece9b7425eba74151c0b4969cd2738b 2016-04-19 13:02 +0000 [ded3794fc6] Joshua Colp * app_talkdetect: Make the module core supported. This module is used as part of testsuite tests to confirm stuff works. I'm accordingly marking it as core as it is required by those tests. Change-Id: I558e7af7679b22b8ed641d7dd37ee4ca35b11e88 2016-04-18 12:12 +0000 [efae187217] Mark Michelson * PJSIP: Remove PJSIP parsing functions from uri length validation. The PJSIP parsing functions provide a nice concise way to check the length of a hostname in a SIP URI. The problem is that in order to use those parsing functions, it's required to use them from a thread that has registered with PJLib. On startup, when parsing AOR configuration, the permanent URI handler may not be run from a PJLib-registered thread. Specifically, this could happen when Asterisk was started in daemon mode rather than console-mode. If PJProject were compiled with assertions enabled, then this would cause Asterisk to crash on startup. The solution presented here is to do our own parsing of the contact URI in order to ensure that the hostname in the URI is not too long. The parsing does not attempt to perform a full SIP URI parse/validation, since the hostname in the URI is what is important. ASTERISK-25928 #close Reported by Joshua Colp Change-Id: Ic3d6c20ff3502507c17244a8b7e2ca761dc7fb60 2016-04-18 17:00 +0000 [f436b9ab11] Mark Michelson * res_pjsip_registrar: Fix bad memory-ness with user_agent. Recent changes to the PJSIP registrar resulted in tests failing due to missing AOR_CONTACT_ADDED test events. The reason for this was that the user_agent string had junk values in it, resulting in being unable to generate the event. I'm going to be honest here, I have no idea why this was happening. Here are the steps needed for the user_agent variable to get messed up: * REGISTER is received * First contact in the REGISTER results in a contact being removed * Second contact in the REGISTER results in a contact being added * The contact, AOR, expiration, and user agent all have to be passed as format parameters to the creation of a string. Any subset of those parameters would not be enough to cause the problem. Looking into what was happening, the thing that struck me as odd was that the user_agent variable was meant to be set to the value of the User-Agent SIP header in the incoming REGISTER. However, when removing a contact, the user_agent variable would be set (via ast_strdupa inside a loop) to the stored contact's user_agent. This means that the user_agent's value would be incorrect when attempting to process further contacts in the incoming REGISTER. The fix here is to use a different variable for the stored user agent when removing a contact. Correcting the behavior to be correct also means the memory usage is less weird, and the issue no longer occurs. ASTERISK-25929 #close Reported by Joshua Colp Change-Id: I7cd24c86a38dec69ebcc94150614bc25f46b8c08 2016-04-18 13:41 +0000 [49bfdc9ac0] Joshua Colp * res_pjsip_transport_management: Allow unload to occur. At shutdown it is possible for modules to be unloaded that wouldn't normally be unloaded. This allows the environment to be cleaned up. The res_pjsip_transport_management module did not have the unload logic in it to clean itself up causing the res_pjsip module to not get unloaded. As a result the res_pjsip monitor thread kept going processing traffic and timers when it shouldn't. Change-Id: Ic8cadee131e3b2c436a81d3ae8bb5775999ae00a 2016-04-15 11:41 +0000 [f4693d1897] Richard Mudgett * bridge_channel.c: Ignore role setup failure in channel push. We have to setup the channel roles after the bridge class push is called because the bridge class push callback may have set roles on the incoming channel. Since we have already partially pushed the channel into the bridge and reversing what we have already done could be problematic, the only thing we can do is press on to complete pushing the channel into the bridge. * Ignore any channel role setup errors after pushing the channel into a bridge. The channel may behave incorrectly in the bridge but we can no longer abort the push at this time. Change-Id: I08a97082b729052ee65cdca6bb730cf1289ede00 2016-04-17 15:37 +0000 [22335fe18a] Jaco Kroon * chan_sip: Don't verify table if rtupdate=no If rtupdate=no do not verify sipregs/peers table has updatable fields. ASTERISK-25934 #close Change-Id: Iaa2c53037b93daccc7e7333c40d61861847b856d 2016-04-18 04:53 +0000 [3b9d8b60b2] ibercom * app_queue: Frequent segfaults in function can_ring_entry() ASTERISK-25888 #close Change-Id: I007a2f2dd99823e04fb5be3ff01f02b0a2956117 2016-04-15 16:51 +0000 [724acb6ce7] Richard Mudgett * stasis_bridge.c: Update stasis bridge push diagnostic messages. Change-Id: I195b14994c9dcccb9452491ca20a885d2a54605a 2016-04-14 13:49 +0000 [5f78801859] Mark Michelson * transport management: Register thread with PJProject. The scheduler thread that kills idle TCP connections was not registering with PJProject properly and causing assertions if PJProject was built in debug mode. This change registers the thread with PJProject the first time that the scheduler callback executes. AST-2016-005 Change-Id: I5f7a37e2c80726a99afe9dc2a4a69bdedf661283 2016-03-08 12:12 +0000 [7fb3724a77] Mark Michelson * res_pjsip_transport_management: Kill idle TCP connections. "Idle" here means that someone connects to us and does not send a SIP request. PJProject will not automatically time out such connections, so it's up to Asterisk to do it instead. When we receive an incoming TCP connection, we will start a timer (equivalent to transaction timer D) waiting to receive an incoming request. If we do not receive a request in that timeframe, then we will shut down the TCP connection. ASTERISK-25796 #close Reported by George Joseph AST-2016-005 Change-Id: I7b0d303e5d140d0ccaf2f7af562071e3d1130ac6 2016-03-08 10:52 +0000 [707fd4dcd0] Mark Michelson * Rename res_pjsip_keepalive res_pjsip_transport_management ASTERISK-25796 Reported by George Joseph AST-2016-005 Change-Id: Id322a05f927392293570599730050bc677d99433 2016-04-14 07:15 +0000 [0b4bb19e0b] Mark Michelson * AST-2016-004: Fix crash on REGISTER with long URI. Due to some ignored return values, Asterisk could crash if processing an incoming REGISTER whose contact URI was above a certain length. ASTERISK-25707 #close Reported by George Joseph Patches: 0001-res_pjsip-Validate-that-URIs-don-t-exceed-pjproject-.patch AST-2016-004 Change-Id: I0ed3898fe7ab10121b76c8c79046692de3a1be55 2016-04-12 13:10 +0000 [f6e080c6a4] Richard Mudgett * bridge_softmix.c: Fix crash if could not allocate the dsp. Fix off nominal crash where we could not setup the channel to process frames for the softmix bridge technology because of allocation failure. Change-Id: Ic307a8386e46bf551e48fcd1eb97276714d56372 2016-04-12 15:41 +0000 [cf15a2f2d3] gtjoseph * pjproject: Add patch for removing strip of '[]' from header params From the patch submitted to Teluu on 4/12/2016 <<<<<<<<< The wholesale stripping of '[]' from header parameters causes issues if something (like a port) occurs after the final ']'. '[2001:a::b]' will correctly parse to '2001:a::b' '[2001:a::b]:8080' will correctly parse to '2001:a::b' but the scanner is left with ':8080' and parsing stops with a syntax error. I can't even find a case where stripping the '[]' is a good thing anyway. Even if you continued to parse and resulted in a string that looks like this... '2001:a::b:8080', it's not valid. This came up in Asterisk because Kamailio sends us a Contact with an alias URI parameter that has an IPv6 address in it like this: Contact: which should be legal but causes a syntax error because of the characters after the final ']'. Even if it didn't, the '[]' should still not be stripped. I've run the Asterisk Test Suite for PJSIP (252 tests) many of which are IPv6 enabled. No issues were caused by removing the code that strips the '[]'. >>>>>>>>>>> ASTERISK-25123 #close Reported-by: Anthony Messina Change-Id: I5cb33f4ebf07ee1f2b26d07caae715e2ec65595a 2016-04-12 09:10 +0000 [daa086fae4] Joshua Colp * app_voicemail: Fix test_voicemail_notify_endl test. The test_voicemail_notify_endl test checks the end-of-line characters of an email message to confirm that they are consistent. The test wrongfully assumed that reading from the email message into a buffer will always result in more than 1 character being read. This is incorrect. If only 1 character was read the test would go outside of the buffer and access other memory causing a crash. The test now checks to ensure that 2 or more characters are read in ensuring the test stays within the buffer. ASTERISK-25874 #close Change-Id: Ic2c89cea6e90f2c0bc2d8138306ebbffd4f8b710 2016-04-07 12:02 +0000 [f896136460] Alexei Gradinari * app_voicemail/IMAP: function 'save_to_folder' creates wrong folder If try to move message to Cust1 (number 5) the function 'save_to_folder' tries to create Greeting folder instead of Cust1. This patch fixed it by setting GREETINGS_FOLDER = -1 ASTERISK-24927 #close Change-Id: I03d1a761894bcc2d130ec9b003bbcddc28e25c51 2016-04-07 16:18 +0000 [70b7673f09] Alexei Gradinari * res_pjsip: Add headers to AMI Event ContactStatusDetail * Added Useragent and RegExpire headers to AMI Event ContactStatusDetail with associated documentation. ASTERISK-25903 #close Change-Id: If3d121e943e588d016ba51d4eb9c6a421a562239 2016-04-11 16:20 +0000 [64ecd41c8f] Alexei Gradinari * Codecs: strip codec name while parsing allow/disallow options Failed registration using PJSIP/Realtime if one of the codec name in allow/disallow option is wrong or contains space. This patch strip codec name. ASTERISK-25914 Change-Id: Ifdf02de94e5ddbce305640f6f0666084a3b9283d 2016-04-11 14:26 +0000 [3f6c4667b8] Jaco Kroon * core_unreal: Fix hangupcauses not getting set on Local channels ASTERISK-25912 #close Change-Id: I8e72e6894feaf36c9450f2788d205d07baec23aa 2016-04-01 13:30 +0000 [fe7e48db03] gtjoseph * res_pjsip contact: Lock expiration/addition of contacts Contact expiration can occur in several places: res_pjsip_registrar, res_pjsip_registrar_expire, and automatically when anyone calls ast_sip_location_retrieve_aor_contact. At the same time, res_pjsip_registrar may also be attempting to renew or add a contact. Since none of this was locked it was possible for one thread to be renewing a contact and another thread to expire it immediately because it was working off of stale data. This was the casue of intermittent registration/inbound/nominal/multiple_contacts test failures. Now, the new named lock functionality is used to lock the aor during contact expire and add operations and res_pjsip_registrar_expire now checks the expiration with the lock held before deleting the contact. ASTERISK-25885 #close Reported-by: Josh Colp Change-Id: I83d413c46a47796f3ab052ca3b349f21cca47059 2016-04-10 14:16 +0000 [0c414eaf35] gtjoseph * pjproject: Add patch to fix Via IPv6 parsing There's a bug in pjproject's sip_parser where the ":" wasn't correctly interpreted. This is causing IPv6 addresses in the "received" parameter of the Via header to cause a syntax check failure. This patch was submitted to Teluu on 4/10/2016. ASTERISK-25910 #close Reported-by: Anthony Messina Change-Id: Ic7e4c4aa14ded61860401ec349f5177568c4d922 2016-03-31 20:04 +0000 [772ff3048f] gtjoseph * lock: Add named lock capability Locking some objects like sorcery objects can be tricky because the underlying ao2 object may not be the same for all callers. For instance, two threads that call ast_sorcery_retrieve_by_id on the same aor name might actually get 2 different ao2 objects if the underlying wizard had to rehydrate the aor from a database. Locking one ao2 object doesn't have any effect on the other even if those objects had locks in the first place. Named locks allow access control by keyspace and key strings. Now an "aor" named "1000" can be locked and any other thread attempting to lock "aor" "1000" will wait regardless of whether the underlying ao2 object is the same or not. Mutex and rwlocks are supported. This capability will initially be used to lock an aor when multiple threads may be attempting to prune expired contacts from it. Change-Id: If258c0b7f92b02d07243ce70e535821a1ea7fb45 2016-04-05 16:56 +0000 [fd601f26f7] Alexei Gradinari * res_pjsip_outbound_publish: Add transport for outbound PUBLISH The first available transport of the appropriate type is used now. This patch adds new config option 'transport' for outbound-publish. If transport is set then outbound PUBLISH requests will use this transport. ASTERISK-25901 #close Change-Id: Ib389130489b70e36795b0003fa5fd386e2680151 2016-04-07 16:39 +0000 [5f768d2a9c] Alexei Gradinari * res_pjsip_dialog_info: Add missing "direction" attribute in NOTIFY event BLF pickup isn't working on Cisco SPA and Snom phones if the direction="recipient" attribute is missing in 'dialog' tag. This patch adds direction="recipient" if extension state is Ringing. ASTERISK-24601 #close Change-Id: I5b2c097ca29fd59e92ba237ca5d397cb1b0bcd8c 2016-04-07 10:59 +0000 [82638fb0c7] Richard Mudgett * pbx.c: Minor code rearangements. * Pull out a loop invariant. * Convert an else-if ladder to a switch statement. Change-Id: I0a95cfa9474a4600b9865f7b444534d275b37e95 2016-04-07 11:37 +0000 [bc320df173] Alexei Gradinari * app_voicemail/IMAP: IMAP access FATAL error: Out of memory Sometimes uw-imap function 'mail_fetchbody' returns huge len which then pass to uw-imap function 'rfc822_base64'. uw-imap tries to allocate huge memory and abort() on fail. This patch check the len. If the len more than max size (128 Mbytes) log error. This patch also set variables len, newlen to avoid uninizialezed len. This patch also check pointer returned by rfc822_base64. ASTERISK-25899 #close Change-Id: I4a0e7d655f11abef6a5224e2169df6d5c1f1caca 2016-04-07 12:26 +0000 [2ef8a954b3] Richard Mudgett * pbx: Update doxygen for extension state watchers. Change-Id: Id1403b12136de62a272c01bb355aef65fd2c2d1e 2016-04-07 11:49 +0000 [d312fdeb1b] gtjoseph * alembic: Remove batch operations (and sqlite support) Because SQLite doesn't support full ALTER capabilities, alembic scripts require batch operations. However, that capability wasn't available until 0.7.0 which some distributions haven't reached yet. Therefore, the batch operations introduced in commit 86d6e44cc (review 2319) have been reverted and SQLite is unsupported again, for now anyway. Tested the full upgrade and downgrade on MySQL/Mariadb and Postgresql. ASTERISK-25890 #close Reported-by: Harley Peters Change-Id: I82eba5456736320256f6775f5b0b40133f4d1c80 2016-04-07 11:05 +0000 [901e8d78c4] Joshua Colp * res_pjsip_registrar_expire: Fix race condition at shutdown. When shutting down, the PJSIP sorcery is destroyed. The registrar expiration module queries the PJSIP sorcery to determine what to expire. As there was no synchronization between termination of the expiration thread and the unloading of the module it was possible for the thread to try to access the PJSIP sorcery after it had been destroyed. This change ensures that the thread is shut down before allowing the module to be considered unloaded. Change-Id: I69fd239edbaaf160c2d37ae00d3ac06e5596fe8b 2016-04-06 16:28 +0000 [8207372e66] Joshua Colp * res_pjsip: Fix configuration setting of "regcontext". Due to a merge problem two options were swapped causing the regcontext setting to not get set. Change-Id: Icb33edc668e7357bacbaec2861a6b5ac64edaff1 2016-04-06 08:01 +0000 [0735a4d6d7] Jacek Konieczny * frame.c: Copy the whole subclass in ast_frdup(). The problem is ast_frdup() does not copy whole frame.subclass for voice, video and image frames, only the format is copied. For video frames, the subclass structure contains the .frame_ending flag used to put the RTP marker where it needs to be. ASTERISK-25894 #close Change-Id: I812ca90e84ed5d4f473b997d0dd0d3c5a915fe33 2016-04-05 14:23 +0000 [c61dca6419] Mark Michelson * res_pjsip: Handle deferred SDP hold/unhold properly. Some SIP devices indicate hold/unhold using deferred SDP reinvites. In other words, they provide no SDP in the reinvite. A typical transaction that starts hold might look something like this: * Device sends reinvite with no SDP * Asterisk sends 200 OK with SDP indicating sendrecv on streams. * Device sends ACK with SDP indicating sendonly on streams. At this point, PJMedia's SDP negotiator saves Asterisk's local state as being recvonly. Now, when the device attempts to unhold, it again uses a deferred SDP reinvite, so we end up doing the following: * Device sends reinvite with no SDP * Asterisk sends 200 OK with SDP indicating recvonly on streams * Device sends ACK with SDP indicating sendonly on streams The problem here is that Asterisk offered recvonly, and by RFC 3264's rules, if an offer is recvonly, the answer has to be sendonly. The result is that the device is not taken off hold. What is supposed to happen is that Asterisk should indicate sendrecv in the 200 OK that it sends. This way, the device has the freedom to indicate sendrecv if it wants the stream taken off hold, or it can continue to respond with sendonly if the purpose of the reinvite was something else (like a session timer refresher). The fix here is to alter the SDP negotiator's state when we receive a reinvite with no SDP. If the negotiator's state is currently in the recvonly or inactive state, then we alter our local state to be sendrecv. This way, we allow the device to indicate the stream state as desired. ASTERISK-25854 #close Reported by Robert McGilvray Change-Id: I7615737276165eef3a593038413d936247dcc6ed 2016-03-27 23:33 +0000 [50b0922a22] gtjoseph * config: Allow filters when appending to a category In sorcery based config files where there are multiple categories with the same name, you can't use the (+) operator to reliably append to a category because config.c stops looking when it finds the first one with the same name. Example: [1000] type = endpoint [1000] type = aor [1000](+) authenticate_qualify = yes This config will fail because config.c appends authenticate_qualify to the first category it finds, the endpoint, and that's not valid for endpoint. Solution: The capability to find a category that contains a certain variable already exists so the only real change was to parse anything after the '+' that's not a comma, as a filter string. [1000] type = endpoint [1000] type = aor [1000](+type=aor) authenticate_qualify = yes This now works as expected. Although the following example doesn't make any sense for pjsip, you can even specify multiple filters: [1000](+type=aor&qualify_frequency=10) ASTERISK-25868 #close Reported-by: Nick Repin Change-Id: I10773da4c79db36fbf1993961992af63d3441580 2016-04-05 10:21 +0000 [cb56ef8069] Joshua Colp * res_http_websocket: Make core supported. Websockets are a core part of ARI support and as such this module should also be core supported. Change-Id: I8f9283c6a167152761b92984779bb39e3db51a9c 2016-03-25 23:22 +0000 [f6f4cf459f] gtjoseph * stringfields: Refactor to allow fields to be added to the end of structures String fields are great, except that you can't add new ones without breaking ABI compatibility because it shifts down everything else in the structure. The only alternative is to add your own char * field to the end of the structure and manage the memory yourself which isn't ideal, especially since you then can't use the OPT_STRINGFIELD_T type. Background: The reason string fields had to be declared inside the AST_DECLARE_STRING_FIELDS block was to facilitate iteration over all declared fields for initialization, compare and copy. Since AST_DECLARE_STRING_FIELDS declared the pool, then the fields, then the manager, you could use the offsets of the pool and manager and iterate over the sequential addresses in between to access the fields. The actual pool, field allocation and field set operations don't actually care where the field is. It's just iteration over the fields that was the problem. Solution: Extended String Fields An extended string field is one that is declared outside the AST_DECLARE_STRING_FIELDS block but still (anywhere) inside the parent structure. Other than using AST_STRING_FIELD_EXTENDED instead of AST_STRING_FIELD, it looks the same as other string fields. It's storage comes from the pool and it participates in string field compare and copy operations peformed on the parent structure. It's also a valid target for the OPT_STRINGFIELD_T aco option type. Implementation: To keep track of the extended fields and make sure that ABI isn't broken, the existing embedded_pool pointer in the manager structure was repurposed to be a pointer to a separate header structure that contains the embedded_pool pointer plus a vector of fields. The length of the manager structure didn't change and the embedded_pool pointer isn't used in the macros, only the stringfields C code. A side benefit of this is that changing the header structure in the future won't break ABI. ast_string_fields_init initializes the normal string fields and appends them to the vector, and subsequent calls to ast_string_field_init_extended initialize and append the extended fields. Cleanup, ast_string_fields_cmp, and ast_string_fields_copy can now work on the vector instead of sequentially traversing the addresses between the pool and manager. The total size of a structure using string fields didn't change, whether using extended fields or not, nor have the offsets of any structure members, either inside the original block or outside. Adding an extended field to the end of a structure is the same as adding a char *. Details: The stringfield C code was pulled out from utils.c and into stringfields.c. It just made sense. Additional work was done in ast_string_field_init and ast_calloc_with_stringfields to handle the allocation of the new header structure and the vector, and the associated cleanup. In the process some additional NULL pointer checking was added. A lot of work was done in stringfields.h since the logic for compare and copy is there. Documentation was added as well as somne additional NULL checking. The ability to call ast_calloc_with_stringfields with a number of structures greater than 1 never really worked. Well, the calloc worked but there was no way to access the additional structures or clean them up. It was agreed that there was no use case for requesting more than 1 structure so an ast_assert was added to prevent it and the iteration code removed. Testing: The stringfield unit tests were updated to test both normal and extended fields. Tests for ast_string_field_ptr_set_by_fields and ast_calloc_with_stringfields were also added. As an ABI test, 13 was compiled from git and the res_pjsip_* modules, except res_pjsip itself, saved off. The patch was then added and a full compile and install was performed. Then the older res_pjsip_* moduled were copied over the installed versions so res_pjsip was new and the rest were old. No issues. contact->aor, which is a char * at the end of contact, was then changed to an extended string field and a recompile and reinstall was performed, again leaving stock versions of the the res_pjsip_* modules. Again, no issues with the res_pjsip_* modules using the old stringfield implementation and with contact->aor as a char *, and res_pjsip itself using the new stringfield implementation and contact->aor being an extended string field. Finally, several existing string fields were converted to extended string fields to test OPT_STRINGFIELD_T. Again, no issues. Change-Id: I235db338c5b178f5a13b7946afbaa5d4a0f91d61 2016-04-04 18:02 +0000 [fe448ac8a7] gtjoseph * res_pjsip_mwi: Fix segv caused by 16c7d8e74a9af13f98c3c22aa9c43ce39965f6b7 I forgot the new voicemail_extension wasn't a stringfield and didn't check for NULL where I should have. Change-Id: I029482d5c2ab72474838750461bd46b0809c90fb 2016-04-03 11:47 +0000 [9d4318f798] gtjoseph * install_prereq: Fix check_installed_debs remove subversion check_installed_debs wasn't handling virtual packages like libsrtp-dev and libresample-dev and on multiarch systems it was accidentally filtering out all packages if any :i386 packages were found instead of just filtering out the :i386 packages themselves. Change-Id: Ifd68da0d1ee30cc84df14de3f9b9079d7c3cecda 2016-04-01 13:09 +0000 [566601837e] gtjoseph * utils.c: Fix typo in handle_show_locks ast_cli_allow_on_shutdown(e) should have been ast_cli_allow_at_shutdown(e). Change-Id: I4f092495c0b2bfd85c2651e0b5877bf4d05d9faf 2016-03-30 18:34 +0000 [964f54bd5d] gtjoseph * pjproject_bundled: Fix use of LDCONFIG for shared library link creation LDCONFIG apparently isn't set to something sane on all systems so the creation of the shared library links fails. Instead of just testing for non-blank, main/Makefile now checks that LDCONFIG is actually executable and reverts to LN if it isn't. This applies to both libasteriskpj and libasteriskssl. Thanks to 'abelbeck' for pointing out that the issue was LDCONFIG. ASTERISK-25873 #close Reported-by: Hans van Eijsden Change-Id: I25b76379bc637726ec044b2c0e709b56b3701729 2016-03-30 13:31 +0000 [5f73c2ef0a] Richard Mudgett * res_stasis.c: Protect channel datastore list from stasis end. Change-Id: Ifadc469590bd4d5368e19d3763db3bd1f80fdb95 2016-03-29 18:06 +0000 [74d63f56ee] Richard Mudgett * res_ari: Cannot get control also means channel is unavailable. The only caller of ari_bridges_play_found() has this note: If ari_bridges_play_found fails because the channel is unavailable for playback, The channel will be removed from the playback list soon. We can keep trying to get channels from the list until we either get one that will work or else there isn't a channel for this bridge anymore, in which case we'll revert to ari_bridges_play_new. Change-Id: Ib068141b367ccaa17be0dab4181c98e26c5127d6 2016-03-29 14:29 +0000 [cf49b44090] Richard Mudgett * res_stasis_recording.c: Cleanup stasis_app_recording_find_by_name(). Change-Id: Ic7d93c402c498677a122505558859c853d4e5ac7 2016-03-28 14:23 +0000 [7f53f1d89e] Richard Mudgett * core_unreal.c: Add clarification comment about channel ref. Change-Id: I0be0627260cd8d6b6c3cc345949dcfdf32eff1f3 2016-03-29 13:47 +0000 [ecf4102d02] Richard Mudgett * res_stasis: Add control ref to playback and recording structs. The stasis_app_playback and stasis_app_recording structs need to have a struct stasis_app_control ref. Other threads can get a reference to the playback and recording structs from their respective global container. These other threads can then use the control pointer they contain after the control struct has gone. * Add control ref to stasis_app_playback and stasis_app_recording structs. With the refs added, the control command queue can now have a circular control reference which will cause the control struct to never get released if the control's command queue is not flushed when the channel leaves the Stasis application. Also the command queue needs better protection from adding commands if the control->is_done flag is set. * Flush the control command queue on exit. ASTERISK-25882 #close Change-Id: I3cf1fb59cbe6f50f20d9e35a2c07ac07d7f4320d 2016-03-28 18:10 +0000 [a179aba65e] Richard Mudgett * res_stasis: Fix crash on a hanging up channel. * Give the struct stasis_app_control ao2 object a ref to the channel held in the object. Now the channel will still be around if a thread needs to post a stasis message instead of crash because the topic was destroyed. * Moved stopping any lingering silence generator out of the struct stasis_app_control destructor and made it a part of exiting the Stasis application. Who knows which thread the destructor will be called under so it cannot affect the channel's silence generator. Not only was the channel unprotected when the silence generator was stopped, stasis may no longer even control the channel. ASTERISK-25882 Change-Id: I21728161b5fe638cef7976fa36a605043a7497e4 2016-03-30 12:38 +0000 [16c7d8e74a] gtjoseph * res_pjsip_mwi: Allow subscribe to vm access extension as an alias Background: If your extension is 1000 and the voicemail access extension is 1571 and you dial 1571, usually a dialplan rule calls voicemailmain with your extension and you are placed directly in your mailbox. Therefore most admins program the voicemail (or other speed dial) button on their phones to the access extension. Some phones (Snom at least) use whatever is programmed there to also subscribe for MWI and so can't dial one number and subscribe to another. This works fine in chan_sip because chan_sip completely ignores the user portion of the SUBSCRIBE message request URI. If it can match the peer, is subscribes to the peer's mailbox. The user could be set to anything or nothing and you'd still get subscribed to your mailbox. Issue: chan_pjsip actually uses the user portion of the URI to find an aor and its mailboxes. Therefore a subscribe to 1571 results in a 404. Sure, you can create an aor for 1571 but you certainly can't add your entire voicemail system's mailboxes to it and everyone would get notified of every MWI. Solution: When an MWI subscribe comes in and an aor can't be found that matches the resource directly, check the resource against the endpoint's aors. If an aor is found that has a voicemail_extension that matches the resource, use it. ASTERISK-25865 Reported-by: Ross Beer Change-Id: I770ea185f751f1ada888fafb4b452115f1c06e9e 2016-03-24 22:55 +0000 [d8f0bc3572] gtjoseph * res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited res_pjsip_mwi was missing the chan_sip "vmexten" functionality which adds the Message-Account header to the MWI NOTIFY. Also, specifying mailboxes on endpoints for unsolicited mwi and on aors for subscriptions required that the admin know in advance which the client wanted. If you specified mailboxes on the endpoint, subscriptions were rejected even if you also specified mailboxes on the aor. Voicemail extension: * Added a global default_voicemail_extension which defaults to "". * Added voicemail_extension to both endpoint and aor. * Added ast_sip_subscription_get_dialog for support. * Added ast_sip_subscription_get_sip_uri for support. When an unsolicited NOTIFY is constructed, the From header is parsed, the voicemail extension from the endpoint is substituted for the user, and the result placed in the Message-Account field in the body. When a subscribed NOTIFY is constructed, the subscription dialog local uri is parsed, the voicemail_extension from the aor (looked up from the subscription resource name) is substituted for the user, and the result placed in the Message-Account field in the body. If no voicemail extension was defined, the Message-Account field is not added to the NOTIFY body. mwi_subscribe_replaces_unsolicited: * Added mwi_subscribe_replaces_unsolicited to endpoint. The previous behavior was to reject a subscribe if a previous internal subscription for unsolicited MWI was found for the mailbox. That remains the default. However, if there are mailboxes also set on the aor and the client subscribes and mwi_subscribe_replaces_unsolicited is set, the existing internal subscription is removed and replaced with the external subscription. This allows an admin to configure mailboxes on both the endpoint and aor and allows the client to select which to use. ASTERISK-25865 #close Reported-by: Ross Beer Change-Id: Ic15a9415091760539c7134a5ba3dc4a6a1217cea 2016-03-30 09:46 +0000 [8dc8d6ceb8] gtjoseph * res_rtp_asterisk: Fix placement of txcount increment Commit 1bce690ccb36a4744a327c07af23a9a3a0fa20cd was incrementing txcount for rtcp packets as well as rtp packets and that was causing sender reports to be generated instead of receiver reports in cases where no rtp was actually being sent. Moved the txcount increment from __rtp_sento, which handles both rtp and rtcp, to rtp_sento which only handles rtp packets. Discovered by the hep/rtcp-receiver test. Change-Id: Ie442e4bb947a68847a676497021ba10ffaf376d5 2016-03-26 22:33 +0000 [c7eb18d865] gtjoseph * chan_pjsip: Add 'pjsip show channelstats' Added the ability to show channel statistics to chan_pjsip (cli_functions.c) Moved the existing 'pjsip show channel(s)' functionality from pjsip_configuration to cli_functions.c. The stats needed chan_pjsip's private header so it made sense to move the existing channel commands as well. Now using stasis_cache_dump to get the channel snapshots rather than retrieving all endpoints, then getting each one's channel snapshots. Much more efficient. Change-Id: I03b114522126d27434030b285bf6d531ddd79869 2016-03-10 19:52 +0000 [1583559a06] gtjoseph * res_pjsip/pjsip_options: Fix From generation on outgoing OPTIONS No one seemed to notice but every time an OPTIONS goes out, it goes out with a From of "asterisk" (or whatever the default from_user is set to), even if you specify an endpoint. The issue had several causes... qualify_contact is only called with an endpoint if called from the CLI. If the endpoint is NULL, qualify_contact only looks up the endpoint if authenticate_qualify=yes. Even then, it never passes it on to ast_sip_create_request where the From header is set. Therefore From is always "asterisk" (or whatever the default from_user is set to). Even if ast_sip_create_request were to get an endpoint, it only sets the From if endpoint->from_user is set. The fix is 4 parts... First, create_out_of_dialog_request was modified to use the endpoint id if endpoint was specified and from_user is not set. Second, qualify_contact was modified to always look up an endpoint if one wasn't specified regardless of authenticate_qualify. It then passes the endpoint on to create_out_of_dialog_request. Third (and most importantly), find_an_endpoint was modified to find an endpoint by using an "aors LIKE %contact->aor%" predicate with ast_sorcery_retrieve_by_fields. As such, this patch will only work if the sorcery realtime optimizations patch goes in. Otherwise we'd be pulling the entire endpoints database every time we send an OPTIONS. Since we already know the contact's aor, the on_endpoint callback was also modified to just check if the contact->aor is an exact match to one of the endpoint's. Finally, since we now have an endpoint for every OPTIONS request, res_pjsip/endpt_send_request (which handles out-of-dialog reqests) was updated to get the transport from the endpoint and set it on tdata. Now the correct transport is used. Change-Id: I2207e12bb435e373bd1e03ad091d82e5aba011af 2016-03-25 10:59 +0000 [0cfab30b28] Jacek Konieczny * res_rtp_asterisk: Use separate SRTP session for RTCP with DTLS Asterisk uses separate UDP ports for RTP and RTCP traffic and RFC 5764 explicitly states: There MUST be a separate DTLS-SRTP session for each distinct pair of source and destination ports used by a media session This means RTP keying material cannot be used for DTLS RTCP, which was the reason why RTCP encryption would fail. ASTERISK-25642 Change-Id: I7e8779d8b63e371088081bb113131361b2847e3a 2016-03-25 10:42 +0000 [6a9c18fb59] Jacek Konieczny * app_echo: forward and generate VIDUPDATE frames When using app_echo via WebRTC with VP8 video the video would appear only after a few minutes, because there would be nothing to request a full reference frame. This fixes the problem in both ways: - echos any VIDUPDATE frames received on the channel - sends one such frame when first video frame is to be forwarded This makes the echo work with Firefox and Chrome WebRTC implementation. ASTERISK-25867 #close Change-Id: I73bda87bf7532ee8bfb28d917045a21034908c1e 2016-03-27 12:53 +0000 [1bce690ccb] gtjoseph * res_rtp_asterisk: Fix packet stats on bridged connection rxcount, txcount, rxoctetcount and txoctetcount weren't being calculated for bridged streams because the calulations were being done after the bridged short-circuit. Actually, rxoctetcount wasn't ever being calculated. Moved the calculations so they occur for all valid received packets and all transmitted packets. Also added rxoctetcount and txoctetcount to ast_rtp_instance_stat. Change-Id: I08fb06011a82d38c3b4068867a615068fbe59cbb 2016-03-25 23:19 +0000 [50f90d4099] Philip Correia * res_parking: Fix blind transfer dynamic lots creation. Blind transfers to a recognized parking extension need to use the parker's channel variable values to create the dynamic parking lot. This is because there is always only one parker while the parkee may actually be a multi-party bridge. A multi-party bridge can never supply the needed channel variables to create the dynamic parking lot. In the multi-party bridge blind transfer scenario, the parker's CHANNEL(parkinglot) value and channel variables are inherited by the local channel used to park the bridge. * In park_common_setup(), make use the parker instead of the parkee to supply the dynamic parking lot channel variable values. In all but one case, the parkee is the same as the parker. However, in the recognized parking extension blind transfer scenario for a two party bridge they are different channels. For consistency, we need to use the parker channel. * In park_local_transfer(), pass the CHANNEL(parkinglot) value to the local channel when blind transferring a multi-party bridge to a recognized parking extension. * When a local channel starts a call, the Local;2 side needs to inherit the CHANNEL(parkinglot) value from Local;1. The DTMF one-touch parking case wasn't even trying to create dynamic parking lots before it aborted the attempt. * In parking_park_call(), add missing code to create a dynamic parking lot. A DTMF bridge hook is documented as returning -1 to remove the hook. Though the hook caller is really coded to accept non-zero. See the ast_bridge_hook_callback typedef. * In feature_park_call(), don't remove the DTMF one-touch parking hook because of an error. ASTERISK-24605 #close Reported by: Philip Correia Patches: call_park.patch (license #6672) patch uploaded by Philip Correia Change-Id: I221d3a8fcc181877a1158d17004474d35d8016c9 2016-03-08 15:55 +0000 [5aa5c49413] gtjoseph * sorcery/res_pjsip: Refactor for realtime performance There were a number of places in the res_pjsip stack that were getting all endpoints or all aors, and then filtering them locally. A good example is pjsip_options which, on startup, retrieves all endpoints, then the aors for those endpoints, then tests the aors to see if the qualify_frequency is > 0. One issue was that it never did anything with the endpoints other than retrieve the aors so we probably could have skipped a step and just retrieved all aors. But nevermind. This worked reasonably well with local config files but with a realtime backend and thousands of objects, this was a nightmare. The issue really boiled down to the fact that while realtime supports predicates that are passed to the database engine, the non-realtime sorcery backends didn't. They do now. The realtime engines have a scheme for doing simple comparisons. They take in an ast_variable (or list) for matching, and the name of each variable can contain an operator. For instance, a name of "qualify_frequency >" and a value of "0" would create a SQL predicate that looks like "where qualify_frequency > '0'". If there's no operator after the name, the engines add an '=' so a simple name of "qualify_frequency" and a value of "10" would return exact matches. The non-realtime backends decide whether to include an object in a result set by calling ast_sorcery_changeset_create on every object in the internal container. However, ast_sorcery_changeset_create only does exact string matches though so a name of "qualify_frequency >" and a value of "0" returns nothing because the literal "qualify_frequency >" doesn't match any name in the objset set. So, the real task was to create a generic string matcher that can take a left value, operator and a right value and perform the match. To that end, strings.c has a new ast_strings_match(left, operator, right) function. Left and right are the strings to operate on and the operator can be a string containing any of the following: = (or NULL or ""), !=, >, >=, <, <=, like or regex. If the operator is like or regex, the right string should be a %-pattern or a regex expression. If both left and right can be converted to float, then a numeric comparison is performed, otherwise a string comparison is performed. To use this new function on ast_variables, 2 new functions were added to config.c. One that compares 2 ast_variables, and one that compares 2 ast_variable lists. The former is useful when you want to compare 2 ast_variables that happen to be in a list but don't want to traverse the list. The latter will traverse the right list and return true if all the variables in it match the left list. Now, the backends' fields_cmp functions call ast_variable_lists_match instead of ast_sorcery_changeset_create and they can now process the same syntax as the realtime engines. The realtime backend just passes the variable list unaltered to the engine. The only gotcha is that there's no common realtime engine support for regex so that's been noted in the api docs for ast_sorcery_retrieve_by_fields. Only one more change to sorcery was done... A new config flag "allow_unqualified_fetch" was added to reg_sorcery_realtime. "no": ignore fetches if no predicate fields were supplied. "error": same as no but emit an error. (good for testing) "yes": allow (the default); "warn": allow but emit a warning. (good for testing) Now on to res_pjsip... pjsip_options was modified to retrieve aors with qualify_frequency > 0 rather than all endpoints then all aors. Not only was this a big improvement in realtime retrieval but even for config files there's an improvement because we're not going through endpoints anymore. res_pjsip_mwi was modified to retieve only endpoints with something in the mailboxes field instead of all endpoints then testing mailboxes. res_pjsip_registrar_expire was completely refactored. It was retrieving all contacts then setting up scheduler entries to check for expiration. Now, it's a single thread (like keepalive) that periodically retrieves only contacts whose expiration time is < now and deletes them. A new contact_expiration_check_interval was added to global with a default of 30 seconds. Ross Beer reports that with this patch, his Asterisk startup time dropped from around an hour to under 30 seconds. There are still objects that can't be filtered at the database like identifies, transports, and registrations. These are not going to be anywhere near as numerous as endpoints, aors, auths, contacts however. Back to allow_unqualified_fetch. If this is set to yes and you have a very large number of objects in the database, the pjsip CLI commands will attempt to retrive ALL of them if not qualified with a LIKE. Worse, if you type "pjsip show endpoint " guess what's going to happen? :) Having a cache helps but all the objects will have to be retrieved at least once to fill the cache. Setting allow_unqualified_fetch=no prevents the mass retrieve and should be used on endpoints, auths, aors, and contacts. It should NOT be used for identifies, registrations and transports since these MUST be retrieved in bulk. Example sorcery.conf: [res_pjsip] endpoint=config,pjsip.conf,criteria=type=endpoint endpoint=realtime,ps_endpoints,allow_unqualified_fetch=error ASTERISK-25826 #close Reported-by: Ross Beer Tested-by: Ross Beer Change-Id: Id2691e447db90892890036e663aaf907b2dc1c67 2016-03-23 14:24 +0000 [05fc3a96d1] Richard Mudgett * res_parking: Cleanup find_channel_parking_lot_name() usage. Change-Id: I8f7a8890aef27824301c642d4d15407ac83e6f02 2016-03-18 14:01 +0000 [a4189763ab] Richard Mudgett * res_parking: Misc fixes. res/parking/parking_applications.c: * Add malloc fail checks in setup_park_common_datastore(). * Fix playing parking failed announcement to only happen on non-blind transfers in park_app_exec(). It could never go out before because a test was provedly always false. res/parking/parking_bridge.c: * Fix NULL tolerance in generate_parked_user() because bridge_parking_push() can theoretically pass a NULL parker channel if the parker channel went away for some reason. * Clarify some weird code dealing with blind_transfer in bridge_parking_push(). res/parking/parking_bridge_features.c: * Made park_local_transfer() set BLINDTRANSFER on the Local;1 channel which will be bulk copied to the Local;2 channel on the subsequent ast_call(). The additional advantage is if the parker channel has the BLINDTRANSFER and ATTENDEDTRANSFER variables set they are now guaranteed to be overridden. res/parking/parking_manager.c: * Fix AMI Park action input range checking of the Timeout header in manager_park(). * Reduced locking scope to where needed in manager_park(). res/res_parking.c: * Fix some off nominal missing unlocks by eliminating the returns. Change-Id: Ib64945bc285acb05a306dc12e6f16854898915ca 2014-12-15 05:23 +0000 [6f95b5eda1] Philip Correia * res_parking: Update parking documentation for dynamic parking lots. * Remove duplicate res_parking.conf courtesytone config option documentation. ASTERISK-24596 #close Reported by: Philip Correia ASTERISK-24605 Reported by: Philip Correia Patches: call_park_app_doc.patch (license #6672) patch uploaded by Philip Correia Change-Id: I90a92a891c6494dc08173e675856afcc4764c5b5 2016-03-24 14:08 +0000 [81ce60f6d4] Alexander Traud * chan_sip: Do not send all codecs on INVITE. Do not break on Session-Timers. Asterisk 13.7.0 included a fix for ASTERISK-24543, not to send all those codecs, which the caller did not request/support. That fix was not complete because on the second Session Timer all codecs were sent again. Some VoIP/SIP clients interpreted that complete codec-list as a change in the SIP session. Because of that, Asterisk did not send the RTP audio via NAT anymore which created a non-audio scenario after the second Session Timer fired. ASTERISK-24543 #close Change-Id: I1881827816ab7fd47eb4287a95961179b34a0b66 2016-03-19 07:34 +0000 [c6e4c48e67] Gianluca Merlo * config: fix flags in uint option handler The configuration unsigned integer option handler sets flags for the parser as if the option should be a signed integer (PARSE_INT32), leading to errors on "out of range" values. Fix flags (PARSE_UINT32). A fix to res_pjsip is also present which stops invalid flags from being passed when registering sorcery object fields for qualify status. ASTERISK-25612 #close Change-Id: I96b539336275e0e72a8e8033487d2c3344debd3e 2016-03-10 16:58 +0000 [59c8e189fd] Mark Michelson * Restrict CLI/AMI commands on shutdown. During stress testing, we have frequently seen crashes occur because a CLI or AMI command attempts to access information that is in the process of being destroyed. When addressing how to fix this issue, we initially considered fixing individual crashes we observed. However, the changes required to fix those problems would introduce considerable overhead to the nominal case. This is not reasonable in order to prevent a crash from occurring while Asterisk is already shutting down. Instead, this change makes it so AMI and CLI commands cannot be executed if Asterisk is being shut down. For AMI, this is absolute. For CLI, though, certain commands can be registered so that they may be run during Asterisk shutdown. ASTERISK-25825 #close Change-Id: I8887e215ac352fadf7f4c1e082da9089b1421990 2016-03-24 07:45 +0000 [ff3eebf454] Walter Doekes * musiconhold: Only warn if music class is not found in memory and database. The log message when a MusicOnHold music class was not found was changed from debug level to WARNING level in Asterisk 11.19 and 13.5. For those using realtime musiconhold, this message is wrong because it warns before checking the database. This changeset delays the warning until after the database has been checked. Reported-by: Conrad de Wet ASTERISK-25444 #close Change-Id: I6cfb2db2f9cfbd2bb3d30566ecae361c4abf6dbf 2016-03-24 05:38 +0000 [82e55e4883] Walter Doekes * core/logging: Fix broken syslog levels on older glibc. The fix to ASTERISK-25407 introduced the usage of LOG_MAKEPRI. However this macro is broken in older glibc (< 2.17); it would left-shift the facility a second time, causing the resultant priority to become invalid. The syslog manpage mentions nothing about LOG_MAKEPRI and suggests this: The priority argument is formed by ORing the facility and the level values [...]. ASTERISK-25510 #close Reported by: Michael Newton Change-Id: Ia89debe7fac5ad090c7ef595c0707f31bb1e3d03 2016-03-23 08:59 +0000 [d963a33749] gtjoseph * pjproject-bundled: Cleanups for reported issues PortAudio should no longer be required PJSIP_MAX_PKT_LEN is now 6000 Older autoconf issue fixed. (CentOS 6) Change-Id: I463fa9586cbe7c6b3b603289f535bd8e361611dd 2015-11-20 08:02 +0000 [c5170677e7] Francesco Castellano * chan_sip.c: Space after port causes unnecessary resolution attempt check_via() already skips leading blanks where the sent-by address (with the optional port) should be placed. Since RFC 3261 allows for blanks between the port ant the Via parameters: > https://tools.ietf.org/html/rfc3261#section-20.42 (actually it allows a lot of blanks more ;-)). I just switched from ast_skip_blanks() to ast_strip() on the local copy of the string. ASTERISK-21301 #close Change-Id: Ie5b8fe5a07067b7c0dc9bcdd1707e99b23b02b06 2016-03-19 17:49 +0000 [51deadee38] gtjoseph * progdocs: Exclude ./third-party from documentation generation We don't need pjproject's documentation embedded in Asterisk's. Change-Id: Iea6f5a621c0f4e3168dda3321eaab258d9f24a17 2016-03-18 20:32 +0000 [aa2fcd244e] Gianluca Merlo * func_aes: fix misuse of strlen on binary data The encryption code for AES_ENCRYPT evaluates the length of the data to be encoded in base64 using strlen. The data is binary, thus the length of it can be underestimated at the first NULL character. Reuse the write pointer offset to evaluate it, instead. ASTERISK-25857 #close Change-Id: If686b5d570473eb926693c73461177b35b13b186 2016-04-20 10:46 +0000 Asterisk Development Team * asterisk 13.8.2 Released. 2016-04-20 05:45 +0000 [26d67ce885] Joshua Colp * Release summaries: Remove previous versions 2016-04-20 05:45 +0000 [d9909232ed] Joshua Colp * .version: Update for 13.8.2 2016-04-20 05:45 +0000 [fc57bb9b15] Joshua Colp * .lastclean: Update for 13.8.2 2016-04-20 05:45 +0000 [ac04474f38] Joshua Colp * realtime: Add database scripts for 13.8.2 2016-04-18 17:00 +0000 [91a3e1184f] Mark Michelson * res_pjsip_registrar: Fix bad memory-ness with user_agent. Recent changes to the PJSIP registrar resulted in tests failing due to missing AOR_CONTACT_ADDED test events. The reason for this was that the user_agent string had junk values in it, resulting in being unable to generate the event. I'm going to be honest here, I have no idea why this was happening. Here are the steps needed for the user_agent variable to get messed up: * REGISTER is received * First contact in the REGISTER results in a contact being removed * Second contact in the REGISTER results in a contact being added * The contact, AOR, expiration, and user agent all have to be passed as format parameters to the creation of a string. Any subset of those parameters would not be enough to cause the problem. Looking into what was happening, the thing that struck me as odd was that the user_agent variable was meant to be set to the value of the User-Agent SIP header in the incoming REGISTER. However, when removing a contact, the user_agent variable would be set (via ast_strdupa inside a loop) to the stored contact's user_agent. This means that the user_agent's value would be incorrect when attempting to process further contacts in the incoming REGISTER. The fix here is to use a different variable for the stored user agent when removing a contact. Correcting the behavior to be correct also means the memory usage is less weird, and the issue no longer occurs. ASTERISK-25929 #close Reported by Joshua Colp Change-Id: I7cd24c86a38dec69ebcc94150614bc25f46b8c08 (cherry picked from commit f436b9ab111f1ff57c6dd3970051f123b42c1103) 2016-04-18 13:41 +0000 [70e25ced60] Joshua Colp * res_pjsip_transport_management: Allow unload to occur. At shutdown it is possible for modules to be unloaded that wouldn't normally be unloaded. This allows the environment to be cleaned up. The res_pjsip_transport_management module did not have the unload logic in it to clean itself up causing the res_pjsip module to not get unloaded. As a result the res_pjsip monitor thread kept going processing traffic and timers when it shouldn't. Change-Id: Ic8cadee131e3b2c436a81d3ae8bb5775999ae00a (cherry picked from commit 49bfdc9ac029e0ef17cd8e85d8d7b7731387a34e) 2016-04-18 12:12 +0000 [856931edc2] Mark Michelson * PJSIP: Remove PJSIP parsing functions from uri length validation. The PJSIP parsing functions provide a nice concise way to check the length of a hostname in a SIP URI. The problem is that in order to use those parsing functions, it's required to use them from a thread that has registered with PJLib. On startup, when parsing AOR configuration, the permanent URI handler may not be run from a PJLib-registered thread. Specifically, this could happen when Asterisk was started in daemon mode rather than console-mode. If PJProject were compiled with assertions enabled, then this would cause Asterisk to crash on startup. The solution presented here is to do our own parsing of the contact URI in order to ensure that the hostname in the URI is not too long. The parsing does not attempt to perform a full SIP URI parse/validation, since the hostname in the URI is what is important. ASTERISK-25928 #close Reported by Joshua Colp Change-Id: Ic3d6c20ff3502507c17244a8b7e2ca761dc7fb60 (cherry picked from commit efae187217750e322cd6167705a33f888b631427) 2016-04-14 20:26 +0000 Asterisk Development Team * asterisk 13.8.1 Released. 2016-04-14 15:26 +0000 [18e6f12e83] Kevin Harwell * Release summaries: Remove previous versions 2016-04-14 15:26 +0000 [625c07711a] Kevin Harwell * .version: Update for 13.8.1 2016-04-14 15:26 +0000 [584f1fb3c7] Kevin Harwell * .lastclean: Update for 13.8.1 2016-04-14 15:26 +0000 [1e37a63379] Kevin Harwell * realtime: Add database scripts for 13.8.1 2016-04-14 13:49 +0000 [dcf1b3c098] Mark Michelson * transport management: Register thread with PJProject. The scheduler thread that kills idle TCP connections was not registering with PJProject properly and causing assertions if PJProject was built in debug mode. This change registers the thread with PJProject the first time that the scheduler callback executes. AST-2016-005 Change-Id: I5f7a37e2c80726a99afe9dc2a4a69bdedf661283 2016-03-08 12:12 +0000 [efafbb1319] Mark Michelson * res_pjsip_transport_management: Kill idle TCP connections. "Idle" here means that someone connects to us and does not send a SIP request. PJProject will not automatically time out such connections, so it's up to Asterisk to do it instead. When we receive an incoming TCP connection, we will start a timer (equivalent to transaction timer D) waiting to receive an incoming request. If we do not receive a request in that timeframe, then we will shut down the TCP connection. ASTERISK-25796 #close Reported by George Joseph AST-2016-005 Change-Id: I7b0d303e5d140d0ccaf2f7af562071e3d1130ac6 2016-03-08 10:52 +0000 [159f639770] Mark Michelson * Rename res_pjsip_keepalive res_pjsip_transport_management ASTERISK-25796 Reported by George Joseph AST-2016-005 Change-Id: Id322a05f927392293570599730050bc677d99433 2016-04-14 07:15 +0000 [c164ff004d] Mark Michelson * AST-2016-004: Fix crash on REGISTER with long URI. Due to some ignored return values, Asterisk could crash if processing an incoming REGISTER whose contact URI was above a certain length. ASTERISK-25707 #close Reported by George Joseph Patches: 0001-res_pjsip-Validate-that-URIs-don-t-exceed-pjproject-.patch AST-2016-004 Change-Id: I0ed3898fe7ab10121b76c8c79046692de3a1be55 2016-03-29 19:39 +0000 Asterisk Development Team * asterisk 13.8.0 Released. 2016-03-29 14:39 +0000 [0f885f0076] Mark Michelson * Release summaries: Add summaries for 13.8.0 2016-03-29 14:34 +0000 [a1fa37aebd] Mark Michelson * Release summaries: Remove previous versions 2016-03-29 14:34 +0000 [e7de5fd439] Mark Michelson * .version: Update for 13.8.0 2016-03-29 14:34 +0000 [8baf813848] Mark Michelson * .lastclean: Update for 13.8.0 2016-03-29 14:34 +0000 [42469df205] Mark Michelson * realtime: Add database scripts for 13.8.0 2016-03-22 18:31 +0000 Asterisk Development Team * asterisk 13.8.0-rc1 Released. 2016-03-22 13:26 +0000 [a698424678] Mark Michelson * Release summaries: Add summaries for 13.8.0-rc1 2016-03-22 13:21 +0000 [e395a0b973] Mark Michelson * .version: Update for 13.8.0-rc1 2016-03-22 13:21 +0000 [38a86b2dbf] Mark Michelson * .lastclean: Update for 13.8.0-rc1 2016-03-22 13:21 +0000 [e0c8c8bf4a] Mark Michelson * realtime: Add database scripts for 13.8.0-rc1 2016-03-18 14:31 +0000 [6a40520fe9] Kevin Harwell * chan_pjsip: ref leak when checking direct_media_glare Fix the reference leak introduced in the following commit: 9444ddadf8525d1ce66a1faf1db97f9f6c265ca4 ASTERISK-25849 Change-Id: I5cfefd5ee6c1c3a1715c050330aaa10e4d2a5e85 2016-03-16 12:37 +0000 [9444ddadf8] Kevin Harwell * chan_pjsip: transfers with direct media reinvite has wrong address/port During a transfer involving direct media a race occurs between when the transferer channel is swapped out, initiating rtp changes/updates, and the subsequent reinvites. When Alice, after speaking with Charlie (Bob is on hold), connects Bob and Charlie invites are sent to each in order to establish the call between them. Bob is taken off hold and Charlie is told to have his media flow through Asterisk. However, if before those invites go out the bridge updates Bob's and/or Charlie's rtp information with direct media data (i.e. address, port) then the invite(s) will contain the remote data in the SDP instead of the Asterisk data. The race occurs in the native bridge glue code when updating the peer. The direct_media_address can get set twice before sending out the first invite during call connection. This can happen because the checking/setting of the direct_media_address happened in one thread while the sending of the invite(s) happened in another thread. This fix removes the race condition by moving the checking/setting of the direct_media_address to be in the same thread as the sending of the invites(s). This serializes the checking/setting and sending so they can no longer happen out of order. ASTERISK-25849 #close Change-Id: Idfea590175e74f401929a601dba0c91ca1a7f873 2015-10-19 07:11 +0000 [88240f98d9] Rodrigo Ramírez Norambuena * install_prereq: Update repositories before install on Debian systems When to install packages the indexed local is more old of the version of software on the repository they have been upgraded by security update then get the package will give 404 not found. The patch prevent by update local index to repository for aptitude before install. ASTERISK-25495 #close Reporte by: Rodrigo Ramírez Norambuena Change-Id: I645959e553aac542805ced394cac2dca964051fa (cherry picked from commit 88f3dbaec9509bfba8bc1de7799aa0dc65304bb5) 2015-06-03 20:12 +0000 [efcf9a96db] Rodrigo Ramírez Norambuena * install_prereq: Check if is installed aptitude otherwise to install. If in Debian or system based, dont have aptitude installed the script do nothing. This patch checked if aptitude installed, if not installed. Also, if execute script with all packages installed yet, the script not show nothing and return exit 1 because the command 'grep' get nothing from pipe from 'awk'. ASTERISK-25113 #close Reported By: Rodrigo Ramírez Norambuena Change-Id: Iebdff55805d3917166e5e08e0a1e2176f36ff27f (cherry picked from commit 6737ded0581a9e1256bdfe30c1d747e7ca93f8b3) 2016-03-03 04:43 +0000 [2b1b8e382a] Sergio Medina Toledo * res_pjsip_refer.c: Fix seg fault in process of Refer-to header. The "Refer-to" header of an incoming REFER request is parsed by pjsip_parse_uri(). That function requires the URI parameter to be NULL terminated. Unfortunately, the previous code added the NULL terminator by overwriting memory that may not be safe. The overwritten memory results could be benign, memory corruption, or a segmentation fault. Now the URI is NULL terminated safely by copying the URI to a new chunk of memory with the correct size to be NULL terminated. ASTERISK-25814 #close Change-Id: I32565496684a5a49c3278fce06474b8c94b37342 2016-03-11 12:22 +0000 [de04308ae4] Richard Mudgett * chan_sip.c: Fix mwi resub deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 #close Change-Id: I96d429c57a48861fd8bde63dd93db4e92dc3adb6 2016-03-10 17:01 +0000 [5f6627a8a4] Richard Mudgett * chan_sip.c: Fix registration timeout and expire deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 Change-Id: I2e40de89efc8ae6e8850771d089ca44bc604b508 2016-03-10 12:17 +0000 [32bd7a64f9] Richard Mudgett * chan_sip.c: Fix t38id deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 Change-Id: If595e4456cd059d7171880c7f354e844c21b5f5f 2016-03-09 16:34 +0000 [43556b800b] Richard Mudgett * chan_sip.c: Fix reinviteid deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 Change-Id: I9c11b9d597468f63916c99e1dabff9f4a46f84c1 2016-03-09 16:32 +0000 [38c1cdab2c] Richard Mudgett * chan_sip.c: Fix packet retransid deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. * Fix retrans_pkt() to call check_pendings() with both the owner channel and the private objects locked as required. * Refactor dialog retransmission packet list to safely remove packet nodes. The list nodes are now ao2 objects. The list has a ref and the scheduled entry has a ref. ASTERISK-25023 Change-Id: I50926d81be53f4cd3d572a3292cd25f563f59641 2016-03-09 16:26 +0000 [e4ad55c888] Richard Mudgett * chan_sip.c: Fix waitid deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. * Made always run check_pendings() under the scheduler thread so scheduler ids can be checked safely. ASTERISK-25023 Change-Id: Ia834d6edd5bdb47c163e4ecf884428a4a8b17d52 2016-03-08 15:08 +0000 [98d5669c28] Richard Mudgett * chan_sip.c: Fix session timers deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 Change-Id: I6d65269151ba95e0d8fe4e9e611881cde2ab4900 2016-03-07 13:21 +0000 [9cb8f73226] Richard Mudgett * chan_sip.c: Fix autokillid deadlock potential. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. * Fix clearing autokillid in __sip_autodestruct() even though we could reschedule. ASTERISK-25023 Change-Id: I450580dbf26e2e3952ee6628c735b001565c368f 2016-03-07 18:28 +0000 [c5c7f48a15] Richard Mudgett * chan_sip.c: Fix provisional_keepalive_sched_id deadlock. This patch is part of a series to resolve deadlocks in chan_sip.c. Stopping a scheduled event can result in a deadlock if the scheduled event is running when you try to stop the event. If you hold a lock needed by the scheduled event while trying to stop the scheduled event then a deadlock can happen. The general strategy for resolving the deadlock potential is to push the actual starting and stopping of the scheduled events off onto the scheduler/do_monitor() thread by scheduling an immediate one shot scheduled event. Some restructuring may be needed because the code may assume that the start/stop of the scheduled events is immediate. ASTERISK-25023 Change-Id: I98a694fd42bc81436c83aa92de03226e6e4e3f48 2016-03-09 11:22 +0000 [f959d84dfd] Richard Mudgett * chan_sip.c: Adjust how dialog_unlink_all() stops scheduled events. This patch is part of a series to resolve deadlocks in chan_sip.c. * Make dialog_unlink_all() unschedule all items at once in the sched thread. ASTERISK-25023 Change-Id: I7743072fb228836e8228b72f6dc46c8cc50b3fb4 2016-03-10 21:54 +0000 [5f3225ddcc] Richard Mudgett * chan_sip.c: Clear scheduled immediate events on unload. This patch is part of a series to resolve deadlocks in chan_sip.c. The reordering of chan_sip's shutdown is to handle any immediate events that get put onto the scheduler so resources aren't leaked. The typical immediate events at this time are going to be concerned with stopping other scheduled events. ASTERISK-25023 Change-Id: I3f6540717634f6f2e84d8531a054976f2bbb9d20 2016-03-15 14:51 +0000 [7a74971771] Richard Mudgett * sip/dialplan_functions.c: Fix /channels/chan_sip/test_sip_rtpqos crash. This patch is part of a series to resolve deadlocks in chan_sip.c. Delaying destruction of the chan_sip sip_pvt structures caused the /channels/chan_sip/test_sip_rtpqos unit test to crash. That test registers a special test ast_rtp_engine with the rtp engine module. When the unit test completes it cleans up by unregistering the test ast_rtp_engine and exits. Since the delayed destruction of the sip_pvt happens after the unit test returns, the destructor tries to call the rtp engine destroy callback of the test ast_rtp_engine auto variable which no longer exists on the stack. * Change the test ast_rtp_engine auto variable to a static variable. Now the variable can still exist after the unit test exits so the delayed sip_pvt destruction can complete successfully. ASTERISK-25023 Change-Id: I61e34a12d425189ef7e96fc69ae14993f82f3f13 2016-03-15 13:31 +0000 [d2c09ed73b] Andrew Nagy * app_stasis: Don't hang up if app is not registered This prevents pbx_core from hanging up the channel if the app isn't registered. ASTERISK-25846 #close Change-Id: I63216a61f30706d5362bc0906b50b6f0544aebce 2016-03-07 15:50 +0000 [b2d2906445] Richard Mudgett * sched.c: Ensure oldest expiring entry runs first. This patch is part of a series to resolve deadlocks in chan_sip.c. * Updated sched unit test to check new behavior. ASTERISK-25023 Change-Id: Ib69437327b3cda5e14c4238d9ff91b2531b34ef3 2016-03-04 18:25 +0000 [9ae21b510f] Richard Mudgett * chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full(). Change-Id: I90f04208a089f95488a2460185a8dbc3f6acca12 2016-03-07 18:56 +0000 [56bcb97a3c] Richard Mudgett * chan_sip.c: Simplify sip_pvt destructor call levels. Remove destructor calling destroy_it calling really_destroy_it for no benefit. Just make the destructor the really_destroy_it function. Change-Id: Idea0d47b27dd74f2488db75bcc7f353d8fdc614a 2016-03-14 08:59 +0000 [677a65fcbb] Joshua Colp * build: Add configure check for proto field of PJSIP TLS transport setting. Older versions of PJSIP do not have the proto field on the TLS transport setting structure. This change adds a configure check so even if it is not present we will still be able to build. Change-Id: Ibf3f47befb91ed1b8194bf63888baa6fee05aba9 2016-03-12 16:02 +0000 [32f0a3d52a] gtjoseph * build_system: Split COMPILE_DOUBLE from DONT_OPTIMIZE I can't ever recall actually needing the intermediate files or the checking that a double compile produces. What I CAN remember is every DONT_OPTIMIZE build needing 3 invocations of gcc instead of 1 just to do the checks and produce those intermediate files. Having said that, Richard pointed out that the reason for the double compile was that there were cases in the past where a submitted patch failed to compile because the submitter never tried it with the optimizations turned on. To get the best of both worlds, COMPILE_DOUBLE has been split into its own option. If DONT_OPTIMIZE is turned on, COMPILE_DOUBLE will also be selected BUT you can then turn it off if all you need are the debugging symbols. This way you have to make an informed decision about disabling COMPILE_DOUBLE. To allow COMPILE_DOUBLE to be both auto-selected and turned off, a new feature was added to menuselect. The element can now contain an "autoselect" attribute which will turn the used member on but not create a hard dependency. The cflags.xml implementation for COMPILE_DOUBLE looks like this... COMPILE_DOUBLE core * app_chanspy: Fix occasional deadlock with ChanSpy and Local channels. Channel masquerading had a conflict with autochannel locking. When locking autochannel->channel, the channel is fetched from the autochannel and then locked. During the fetch, the autochannel -- which has no locks itself -- can be modified by someone who owns the channel lock. That means that the value of autochan->channel cannot be trusted until you hold the lock. In practice, this caused problems with Local channels getting masqueraded away while the ChanSpy attempted to get info from that channel. The old channel which was about to get removed got locked, but the new (replaced) channel got unlocked (no-op). Because the replaced channel was now locked (and would never get unlocked), it couldn't get removed from the channel list in a timely manner, and would now cause deadlocks when iterating over the channel list. This change checks the autochannel after locking the channel for changes to the autochannel. If the channel had been changed, the lock is reobtained on the new channel. In theory it seems possible that after this fix, the lock attempt on the old (wrong) channel can be on an already destroyed lock, maybe causing a crash. But that hasn't been observed in the wild and is harder induce than the current deadlock. Thanks go to Filip Frank for suggesting a fix similar to this and especially to IRC user hexanol for pointing out why this deadlock was possible and testing this fix. And to Richard for catching my rookie while loop mistake ;) ASTERISK-25321 #close Change-Id: I293ae0014e531cd0e675c3f02d1d118a98683def 2016-03-07 21:34 +0000 [875d5e9872] gtjoseph * pjproject_bundled: Remove --with-external-pa from configure options. Not sure why it was there in the first place as we already specify --disable-sound. Change-Id: Ia80a40e8b1e1acc287955ab11ba1fbd0c7d4cff9 2016-03-06 14:38 +0000 [530cff5f5f] gtjoseph * res_pjsip: Strip spaces from items parsed from comma-separated lists Configurations like "aors = a, b, c" were either ignoring everything after "a" or trying to look up " b". Same for mailboxes, ciphers, contacts and a few others. To fix, all the strsep(©, ",") calls have been wrapped in ast_strip. To facilitate this, ast_strip, ast_skip_blanks and ast_skip_nonblanks were updated to handle null pointers. In some cases, an ast_strlen_zero() test was added to skip consecutive commas. There was also an attempt to ast_free an ast_strdupa'd string in ast_sip_for_each_aor which was causing a SEGV. I removed it. Although this issue was reported for realtime, the issue was in the res_pjsip modules so all config mechanisms were affected. ASTERISK-25829 #close Reported-by: Mateusz Kowalski Change-Id: I0b22a2cf22a7c1c50d4ecacbfa540155bec0e7a2 2016-03-04 20:37 +0000 [3c8076a83b] gtjoseph * install_prereq: Add packages for bundled pjproject RedHat/CentOS needs python-devel Debian/Ubuntu needs automake, libsrtp-dev and python-dev Ubuntu also needed libncurses5-dev for cmenuselect so while not needed for pjproject, I adedd it anyway. Change-Id: Idf5fa16e2d87c687439621507e122cb9461d7089 2016-02-24 17:25 +0000 [27f32cd0a6] gtjoseph * res_pjsip_caller_id: Anonymize 'From' when caller id presentation is prohibited Per RFC3325, the 'From' header is now anonymized on outgoing calls when caller id presentation is prohibited. TID = trust_id_outbound PRO = Set(CALLERID(pres)=prohib) USR = endpoint/from_user DOM = endpoint/from_domain PAI = YES(privacy=off), NO(not sent), PRI(privacy=full) (assumes send_pai=yes) Conditions |Result --------------------|---------------------------------------------------- TID PRO USR DOM |PAI FROM --------------------|---------------------------------------------------- Y Y abc def.ghi |PRI "Anonymous" Y Y abc |PRI "Anonymous" Y Y def.ghi |PRI "Anonymous" Y Y |PRI "Anonymous" Y N abc def.ghi |YES Y N abc |YES > Y N def.ghi |YES "Caller Name" @def.ghi> Y N |YES "Caller Name" @> N Y abc def.ghi |NO "Anonymous" N Y abc |NO "Anonymous" N Y def.ghi |NO "Anonymous" N Y |NO "Anonymous" N N abc def.ghi |YES N N abc |YES > N N def.ghi |YES "Caller Name" @def.ghi> N N |YES "Caller Name" @> ASTERISK-25791 #close Reported-by: Anthony Messina Change-Id: I2c82a5ca1413c2c00fb62ea95b0ae8e97af54dc9 2016-03-03 17:34 +0000 [7cf7b0a4f9] gtjoseph * third_party/Makefile.rules: Replace unsupported != operator with $(shell ...) Apparently the != operator is fairly new so I've replaced it with the old $(shell ...) syntax. Change-Id: I16b2e1878a4f91e7e9740abd427f9639f933c479 Reported-by: Richard Mudgett 2016-01-23 15:50 +0000 [53f57001f2] gtjoseph * loader: Retry dlopen when loading fails Although we use the RTLD_LAZY flag when calling dlopen the first time on a module, this only defers resolution for function calls. Pointer references to functions are determined at link time so dlopen expects them to be there. Since we don't cross-module link, pointers to functions in other modules won't be available and dlopen will fail. Doing a "hardened" build also causes problems because it typically sets "-z now" on the ld command line which overrides RTLD_LAZY at run time. If the failing module isn't a GLOBAL_SYMBOLS module, then dlopen will be called again after all the GLOBAL_SYMBOLS modules have been loaded and they'll eventually resolve. If the calling module IS a GLOBAL_SYMBOLS module itself and a third module depends on it, then there's an issue because the second time through the dlopen loop, GLOBAL_SYMBOLS modules aren't given any special treatment and since the order in which dlopen is called isn't deterministic, the dependent may again be tried before the module it needs is loaded. Simple solution: Save modules that fail load_resource because of a dlopen error in a list and retry them immediately after the first pass. Keep retrying until the failed list is empty or we reach a #defined max retries. Error messages are suppressed until the final pass which also gets rid of those confusing error messages about module failures that are later corrected. Change-Id: Iddae1d97cd2f00b94e61662447432765755f64bb 2016-03-01 16:18 +0000 [40d9e9e238] Kevin Harwell * bridge.c: Crash during attended transfer when missing a local channel half It's possible for the transferer channel to get hung up early during the attended transfer process. For instance, a phone may send a "bye" immediately upon receiving a sip notify that contains a sip frag 100 (I'm looking at you Jitsi). When this occurs a race begins between the transferer being hung up and completion of the transfer code. If the channel hangs up too early during a transfer involving stasis bridging for instance, then when the created local channel goes to look up its swap channel (and associated datastore) it can't find it (since it is no longer in the bridge) thus it fails to enter the stasis application. Consequently, the created local channel(s) hang up as well. If the timing is just right then the bridging code attempts to add the message link with missing local channel(s). Hence the crash. Unfortunately, there is no great way to solve the problem of the unexpected "bye". While we can't guarantee we won't receive an early hangup, and in this case still fail to enter the stasis application, we can make it so asterisk does not crash. This patch does just that by locking the local channel structure, checking that the local channel's peer has not been lost, and then continuing. This keeps the local channel's peer from being ripped out from underneath it by the local/unreal hangup code while attempting to set the stasis message link. ASTERISK-25771 Change-Id: Ie6d6061e34c7c95f07116fffac9a09e5d225c880 2016-03-01 18:08 +0000 [ff3da61c35] Kevin Harwell * res_pjsip_refer.c: Delay sending the initial SIP Notify with frag 100 During the transfer process, some phones (okay it was the Jitsi softphone, but maybe others are out there) send a "bye" immediately after receiving a SIP Notify. When a "bye" is received early for some types of transfers the transferer channel may no longer be available during late stage transfer processing. For instance, during an attended transfer involving stasis bridging at one point the created local channel looks for an associated swap channel in order to retrieve the stasis application name. If the transferer has hung up then the local channel will fail to find it. The local channel then has no way to know which stasis app to enter, so it fails and hangs up as well. Thus the transfer does not complete as expected. This patch delays the sending of the initial notify in order to give the transfer process enough time to gather the necessary data for a successful transfer. ASTERISK-25771 Change-Id: I09cfc9a5d6ed4c007bc70625e0972b470393bf16 2016-03-03 08:26 +0000 [26b8f2692e] Joshua Colp * res_pjsip_dtmf_info: NULL terminate the message body. PJSIP does not ensure that when printing the message body the buffer will be NULL terminated. This is problematic when searching for the signal and duration values of the DTMF. This change ensures the buffer is always NULL terminated. Change-Id: I52653a1a60c93092d06af31a27408d569cc98968 2016-03-01 20:03 +0000 [86d6e44cc1] gtjoseph * alembic: Fix downgrade and tweak for sqlite Downgrade had a few issues. First there was an errant 'update' statement in add_auto_dtmf_mode that looks like it was a copy/paste error. Second, we weren't cleaning up the ENUMs so subsequent upgrades on postgres failed because the types already existed. For sqlite... sqlite doesn't support ALTER or DROP COLUMN directly. Fortunately alembic batch_operations takes care of this for us if we use it so the alter and drops were converted to use batch operations. Here's an example downgrade: with op.batch_alter_table('ps_endpoints') as batch_op: batch_op.drop_column('tos_audio') batch_op.drop_column('tos_video') batch_op.add_column(sa.Column('tos_audio', yesno_values)) batch_op.add_column(sa.Column('tos_video', yesno_values)) batch_op.drop_column('cos_audio') batch_op.drop_column('cos_video') batch_op.add_column(sa.Column('cos_audio', yesno_values)) batch_op.add_column(sa.Column('cos_video', yesno_values)) with op.batch_alter_table('ps_transports') as batch_op: batch_op.drop_column('tos') batch_op.add_column(sa.Column('tos', yesno_values)) # Can't cast integers to YESNO_VALUES, so dropping and adding is required batch_op.drop_column('cos') batch_op.add_column(sa.Column('cos', yesno_values)) Upgrades from base to head and downgrades from head to base were tested repeatedly for postgresql, mysql/mariadb, and sqlite3. Change-Id: I862b0739eb3fd45ec3412dcc13c2340e1b7baef8 2016-03-02 15:55 +0000 [6f0d7ce9db] gtjoseph * config_transport: Fix objects returned by ast_sip_get_transport_states ast_sip_get_transport_states was returning a container of internal_state objects instead of ast_sip_transport_state objects. This was causing transport lookups to fail, most noticably in res_pjsip_nat, which couldn't find the correct external addresses. This was causing contacts to go out with internal ip addresses. ASTERISK-25830 #close Reported-by: Sean Bright Change-Id: I1aee6a2fd46c42e8dd0af72498d17de459ac750e 2016-03-02 11:17 +0000 [1ea7a5a774] Scott Griepentrog * CHAOS: cleanup possible null vars on msg alloc failure In message.c, if msg_alloc fails to init the string field, vars may be null, so use a null tolerant cleanup. In res_pjsip_messaging.c, if msg_data_create fails, mdata will be null, so use a null tolerant cleanup. ASTERISK-25323 Change-Id: Ic2d55c2c3750d5616e2a05ea92a19c717507ff56 2016-03-02 09:34 +0000 [3c37c7071f] Scott Griepentrog * CHAOS: prevent crash on failed strdup This patch avoids crashing on a null pointer if the strdup() allocation fails. ASTERISK-25323 Change-Id: I3f67434820ba53b53663efd6cbb42749f4f6c0f5 2016-02-29 18:11 +0000 [9633be9d25] Richard Mudgett * func_callerid.c: Update REDIRECTING reason documentation. Change-Id: I6e8d39b0711110a4bceafa652e58b30465e28386 2016-02-26 18:57 +0000 [4165ea7778] Richard Mudgett * SIP diversion: Fix REDIRECTING(reason) value inconsistencies. Previous chan_sip behavior: Before this patch chan_sip would always strip any quotes from an incoming reason and pass that value up as the REDIRECTING(reason). For an outgoing reason value, chan_sip would check the value against known values and quote any it didn't recognize. Incoming 480 response message reason text was just assigned to the REDIRECTING(reason). Previous chan_pjsip behavior: Before this patch chan_pjsip would always pass the incoming reason value up as the REDIRECTING(reason). For an outgoing reason value, chan_pjsip would send the reason value as passed down. With this patch: Both channel drivers match incoming reason values with values documented by REDIRECTING(reason) and values documented by RFC5806 regardless of whether they are quoted or not. RFC5806 values are mapped to the equivalent REDIRECTING(reason) documented value and is set in REDIRECTING(reason). e.g., an incoming RFC5806 'unconditional' value or a quoted string version ('"unconditional"') is converted to REDIRECTING(reason)'s 'cfu' value. The user's dialplan only needs to deal with 'cfu' instead of any of the aliases. The incoming 480 response reason text supported by chan_sip checks for known reason values and if not matched then puts quotes around the reason string and assigns that to REDIRECTING(reason). Both channel drivers send outgoing known REDIRECTING(reason) values as the unquoted RFC5806 equivalent. User custom values are either sent as is or with added quotes if SIP doesn't allow a character within the value as part of a RFC3261 Section 25.1 token. Note that there are still limitations on what characters can be put in a custom user value. e.g., embedding quotes in the middle of the reason string is silly and just going to cause you grief. * Setting a REDIRECTING(reason) value now recognizes RFC5806 aliases. e.g., Setting REDIRECTING(reason) to 'unconditional' is converted to the 'cfu' value. * Added missing malloc() NULL return check in res_pjsip_diversion.c set_redirecting_reason(). * Fixed potential read from a stale pointer in res_pjsip_diversion.c add_diversion_header(). The reason string needed to be copied into the tdata memory pool to ensure that the string would always be available. Otherwise, if the reason string returned by reason_code_to_str() was a user's reason string then the string could be freed later by another thread. Change-Id: Ifba83d23a195a9f64d55b9c681d2e62476b68a87 2016-02-26 18:54 +0000 [41f4af4ce5] Richard Mudgett * res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm reason. Change-Id: Id6350b3c7d4ec8df7ec89863566645e2b0f441fd 2016-02-29 20:41 +0000 [4c5998ff55] Richard Mudgett * res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref. * Fix double unref of other_party channel in off nominal path. * This is unlikely to be a real problem. However, for safety, in handle_incoming_request() keep the datastore ref with the other_party channel ref until we are finished with the other_party channel. Change-Id: I78f22547bf0bb99fb20814ceab75952bd857f821 2016-01-18 21:54 +0000 [b59956a875] gtjoseph * build-system: Allow building with static pjproject Background here: http://lists.digium.com/pipermail/asterisk-dev/2016-January/075266.html From CHANGES: * To help insure that Asterisk is compiled and run with the same known version of pjproject, a new option (--with-pjproject-bundled) has been added to ./configure. When specified, the version of pjproject specified in third-party/versions.mak will be downloaded and configured. When you make Asterisk, the build process will also automatically build pjproject and Asterisk will be statically linked to it. Once a particular version of pjproject is configured and built, it won't be configured or built again unless you run a 'make distclean'. To facilitate testing, when 'make install' is run, the pjsua and pjsystest utilities and the pjproject python bindings will be installed in ASTDATADIR/third-party/pjproject. The default behavior remains building with the shared pjproject installation, if any. Building: All you have to do is include the --with-pjproject-bundled option on the ./configure command line (and remove any existing --with-pjproject option if specified). Everything else is automatic. Behind the scenes: The top-level Makefile was modified to include 'third-party' in the list of MOD_SUBDIRS. The third-party directory was created to contain any third party packages that may be needed in the future. Its Makefile automatically iterates over any subdirectories passing on targets. The third-party/pjproject directory was created to house the pjproject source distribution. Its Makefile contains targets to download, patch configure, generate dependencies, compile libs, apps and python bindings, sanitized build.mak and generate a symbols list. When bootstrap.sh is run, it automatically includes the configure.m4 file in third-party/pjproject. This file has a macro to download and conifgure pjproject and get and set PJPROJECT_INCLUDE, PJPROJECT_DIR and PJPROJECT_BUNDLED. It also tests for the capabilities like PJ_TRANSACTION_GRP_LOCK by parsing preprocessor output as opposed to trying to compile. Of course, bootstrap.sh is only run once and the configure file is incldued in the patch. When configure is run with the new options, the macro in configure.m4 triggers the download, patch, conifgure and tests. No compilation is performed at this time. The downloaded tarball is cached in /tmp so it doesn't get downloaded again on a distclean. When make is run in the top-level Asterisk source directory, it will automatically descend all the subdirectories in third_party just as it does for addons, apps, etc. The top-level Makefile makes sure that the 'third-party' is built before 'main' so that dependencies from the other directories are built first. When main does build, a new shared library (libasteriskpj) is created that links statically to the pjproject .a files and exports all their symbols. The asterisk binary links to that, just as it does with libasteriskssl. When Asterisk is installed, the pjsua and pjsystest apps, and the pjproject python bindings are installed in ASTDATADIR/third-party/pjproject. This will facilitate testing, including running the testsuite which will be updated to check that directory for the pjsua module ahead of the system python library. Modules should continue to depend on pjproject if they use pjproject APIs directly. They should not care about the implementation. No changes to any res_pjsip modules were made. Change-Id: Ia7a60c28c2e9ba9537c5570f933c1ebcb20a3103 2016-02-22 16:59 +0000 [18a323e542] Richard Mudgett * chan_sip.c: Fix T.38 issues caused by leaving a bridge. chan_sip could not handle AST_T38_TERMINATED frames being sent to it when the channel left the bridge. The action resulted in overlapping outgoing reINVITEs. The testsuite tests/fax/sip/directmedia_reinvite_t38 was not happy. * Force T.38 to be remembered as locally bridged. Now when the channel leaves the native RTP bridge after T.38, the channel remembers that it has already reINVITEed the media back to Asterisk. It just needs to terminate T.38 when the AST_T38_TERMINATED arrives. * Prevent redundant AST_T38_TERMINATED from causing problems. Redundant AST_T38_TERMINATED frames could cause overlapping outgoing reINVITEs if they happen before the T.38 state changes to disabled. Now the T.38 state is set to disabled before the reINVITE is sent. ASTERISK-25582 #close Change-Id: I53f5c6ce7d90b3f322a942af1a9bcab6d967b7ce 2016-02-18 18:27 +0000 [263a39f2cc] Richard Mudgett * res_pjsip_t38.c: Back out part of an earlier fix attempt. This backs out item 4 of the 4875e5ac32f5ccad51add6a4216947bfb385245d commit. Item 4 added the t38_bye_supplement. Unfortunately, the frame that it puts into the bridge may or may not be processed by the time the bridged peer is kicked out of the bridge. If it is processed then all is well. However, if it is not processed then that channel is stuck in fax mode until it hangs up or maybe if it joins another bridge for T.38 faxing. ASTERISK-25582 Change-Id: Ib20a03ecadf1bf8a0dcadfadf6c2f2e60919a9f7 2016-02-22 13:54 +0000 [221422be50] Richard Mudgett * bridge core: Add owed T.38 terminate when channel leaves a bridge. The channel is now going to get T.38 terminated when it leaves the bridging system and the bridged peers are going to get T.38 terminated as well. ASTERISK-25582 Change-Id: I77a9205979910210e3068e1ddff400dbf35c4ca7 2016-02-19 16:01 +0000 [0a5bc64491] Richard Mudgett * channel api: Create is_t38_active accessor functions. ASTERISK-25582 Change-Id: I69451920b122de7ee18d15bb231c80ea7067a22b 2016-02-19 19:06 +0000 [513638a5f4] Richard Mudgett * bridge_channel: Don't settle owed events on an optimization. Local channel optimization could cause DTMF digits to be duplicated. Pending DTMF end events would be posted to a bridge when the local channel optimizes out and is replaced by the channel further down the chain. When the real digit ends, the channel would get another DTMF end posted to the bridge. A -- LocalA;1/n -- LocalA;2/n -- LocalB;1 -- LocalB;2 -- B 1) LocalA has the /n flag to prevent optimization. 2) B is sending DTMF to A through the local channel chain. 3) When LocalB optimizes out it can move B to the position of LocalB;1 4) Without this patch, when B swaps with LocalB;1 then LocalB;1 would settle an owed DTMF end to the bridge toward LocalA;2. 5) When B finally ends its DTMF it sends the DTMF end down the chain. 6) Without this patch, A would hear the DTMF digit end when LocalB optimizes out and when B ends the original digit. ASTERISK-25582 Change-Id: I1bbd28b8b399c0fb54985a5747f330a4cd2aa251 2016-02-22 12:15 +0000 [7c4495cb70] Richard Mudgett * channel.c: Route all control frames to a channel through the same code. Frame hooks can conceivably return a control frame in exchange for an audio frame inside ast_write(). Those returned control frames were not handled quite the same as if they were sent to ast_indicate(). Now it doesn't matter if you use ast_write() to send an AST_FRAME_CONTROL to a channel or ast_indicate(). ASTERISK-25582 Change-Id: I5775f41421aca2b510128198e9b827bf9169629b 2016-02-25 15:13 +0000 [48d713a832] gtjoseph * sorcery: Refactor create, update and delete to better deal with caches The ast_sorcery_create, update and delete function have been refactored to better deal with caches and errors. The action is now called on all non-caching wizards first. If ANY succeed, the action is called on all caching wizards and the observers are notified. This way we don't put something in the cache (or update or delete) before knowing the action was performed in at least 1 backend and we only call the observers once even if there were multiple writable backends. ast_sorcery_create was never adding to caches in the first place which was preventing contacts from getting added to a memory_cache when they were created. In turn this was causing memory_cache to emit errors if the contact was deleted before being retrieved (which would have populated the cache). ASTERISK-25811 #close Reported-by: Ross Beer Change-Id: Id5596ce691685a79886e57b0865888458d6e7b46 2016-02-25 15:39 +0000 [ee947d4a7a] gtjoseph * res_pjsip_mwi: Turn some NOTICEs and WARNINGs into debug 1s. There are a few cases where we're emitting notices or warnings for things that really need neither, like a client retrying to subscribe to mwi when they're not conifgured for it. They get a 404 so there's no need for non-debug messages. Change-Id: I05e38a7ff6c2f2521146f4be6a79731b9864e61f 2016-02-25 14:17 +0000 [6e70e8ccdb] gtjoseph * res_sorcery_memory_cache: Fix SEGV in some CLI commands A few of the CLI commands weren't checking for enough arguments and were SEGVing. Change-Id: Ie6494132ad2fe54b4f014bcdc112a37c36a9b413 2016-02-25 10:29 +0000 [4417f64d83] Leif Madsen * Add initial support to build Docker images This work-in-progress is the first step to being able to reliably build Asterisk containers from the Asterisk source. I'm submitting this based on feedback gained at AstriDevCon 2015. Information about how to use this is provided in contrib/docker/README.md and will result in a local Asterisk container being built right from your source. I believe this can eventually be automated via hub.docker.com. Change-Id: Ifa070706d40e56755797097b6ed72c1e243bd0d1 2016-02-22 19:31 +0000 [e7a6abbbd3] Richard Mudgett * rtp_engine.h: Remove extraneous semicolons. Change-Id: Ib462633d396fa941379dfef648dcd2245e350084 2016-02-23 14:57 +0000 [6656afffa0] Richard Mudgett * chan_sip.c: Suppress T.38 SDP c= line if addr is the same. Use the correct comparison function since we only care if the address without the port is the same. Change-Id: Ibf6c485f843a1be6dee58a47b33d81a7a8cbe3b0 2016-02-16 08:14 +0000 [ea9deff996] Christof Lauber * res_config_sqlite3: Fix crashes when reading peers from sqlite3 tables Introduced realloaction of ast_str buf in sqlite3_escape functions in case the returned buffer from threadstorage was actually too small. Change-Id: I3c5eb43aaade93ee457943daddc651781954c445 2016-02-11 11:01 +0000 [d2a1457e0b] gtjoseph * res_pjsip/config_transport: Allow reloading transports. The 'reload' mechanism actually involves closing the underlying socket and calling the appropriate udp, tcp or tls start functions again. Only outbound_registration, pubsub and session needed work to reset the transport before sending requests to insure that the pjsip transport didn't get pulled out from under them. In my testing, no calls were dropped when a transport was changed for any of the 3 transport types even if ip addresses or ports were changed. To be on the safe side however, a new transport option was added (allow_reload) which defaults to 'no'. Unless it's explicitly set to 'yes' for a transport, changes to that transport will be ignored on a reload of res_pjsip. This should preserve the current behavior. Change-Id: I5e759850e25958117d4c02f62ceb7244d7ec9edf 2016-02-07 17:34 +0000 [6b921f706d] gtjoseph * res_pjproject: Add ability to map pjproject log levels to Asterisk log levels Warnings and errors in the pjproject libraries are generally handled by Asterisk. In many cases, Asterisk wouldn't even consider them to be warnings or errors so the messages emitted by pjproject directly are either superfluous or misleading. A good exampe of this are the level-0 errors pjproject emits when it can't open a TCP/TLS socket to a client to send an OPTIONS. We don't consider a failure to qualify a UDP client an "ERROR", why should a TCP/TLS client be treated any differently? A config file for res_pjproject has bene added (pjproject.conf) and a new log_mappings object allows mapping pjproject levels to Asterisk levels (or nothing). The defaults if no pjproject.conf file is found are the same as those that were hard-coded into res_pjproject initially: 0,1 = LOG_ERROR, 2 = LOG_WARNING, 3,4,5 = LOG_DEBUG Change-Id: Iba7bb349c70397586889b8f45b8c3d6c6c8c3898 2016-02-18 10:55 +0000 [f295088764] Alexei Gradinari * res_pjsip_outbound_publish: Fix processing 412 response When Asterisk receives a 412 (Conditional Request Failed) response it has to recreate publish session. There is bug in res_pjsip_outbound_publish.c The function sip_outbound_publish_client_alloc is called with wrong object while processing 412 (Conditional Request Failed) response. This patch fixes it. ASTERISK-25229 #close Change-Id: I3b62f2debf6bb1e5817cde7b13ea39ef2bf14359 2016-02-18 11:15 +0000 [f1f79812c1] Mark Michelson * Fix failing threadpool_auto_increment test. The threadpool_auto_increment test fails infrequently for a couple of reasons * The threadpool listener was notified of fewer tasks being pushed than were actually pushed * The "was_empty" flag was set to an unexpected value. The problem is that the test pushes three tasks into the threadpool. Test expects the threadpool to essentially gather those three tasks, and then distribute those to the threadpool threads. It also expects that as the tasks are pushed in, the threadpool listener is alerted immediately that the tasks have been pushed. In reality, a task can be distributed to the threadpool threads quicker than expected, meaning that the threadpool has already emptied by the time each subsequent task is pushed. In addition, the internal threadpool queue can be delayed so that the threadpool listener is not alerted that a task has been pushed even after the task has been executed. From the test's point of view, there's no way to be able to predict exactly the order that task execution/listener notifications will occur, and there is no way to know which listener notifications will indicate that the threadpool was previously empty. For this reason, the test has been updated to only check the things it can check. It ensures that all tasks get executed, that the threads go idle after the tasks are executed, and that the listener is told the proper number of tasks that were pushed. Change-Id: I7673120d74adad64ae6894594a606e102d9a1f2c 2016-02-16 23:37 +0000 [79dc5e2f00] Rodrigo Ramírez Norambuena * app_queue: fix Calculate talktime when is first call answered Fix calculate of average time for talktime is wrong when is completed the first call beacuse the time for talked would be that call. ASTERISK-25800 #close Change-Id: I94f79028935913cd9174b090b52bb300b91b9492 2016-02-17 13:30 +0000 [5a3a857dd6] Richard Mudgett * cel.c: Fix mismatch in ast_cel_track_event() return type. The return type of ast_cel_track_event() is not large enough to return all 64 potential bits of the event enable mask. Fortunately, the defined CEL events do not really need all 64 bits and the return value is only used to determine if the requested CEL event is enabled. * Made the ast_cel_track_event() return 0 or 1 only so the return value can fit inside an int type instead of zero or a truncated 64 bit non-zero value. Change-Id: I783d932320db11a95c7bf7636a72b6fe2566904c 2016-02-16 16:37 +0000 [87ab65c557] gtjoseph * res_odbc: Fix exports.in for missing symbols res_odbc.exports.in was missing a few symbols. Changed to wildcards. Change-Id: Ieadd76df24e43ea92577f651d478a0f7b742c30c 2016-02-16 12:20 +0000 [c0f3062031] gtjoseph * res_statsd: Fix exports.in for missing symbols res_statsd.export.in was missing the _va variations of the log functions causing Asterisk to crash in res_pjsip if OPTIONAL_API wasn't enabled. ASTERISK-25727 #close Reported-by: Gergely Dömsödi Change-Id: I395729f9f51bdd33c5ca757f5f96ebedad74077b 2016-02-15 21:31 +0000 [5e848dae7b] gtjoseph * res_pjsip_config_wizard: Add command to export primitive objects A new command (pjsip export config_wizard primitives) has been added that will export all the pjsip objects it created to the console or a file suitable for reuse in a pjsip.conf file. ASTERISK-24919 #close Reported-by: Ray Crumrine Change-Id: Ica2a5f494244b4f8345b0437b16d06aa0484452b 2016-02-15 15:37 +0000 [34c64707d1] gtjoseph * res_pjsip_caller_id: Fix segfault when replacing rpid or pai header If the PJSIP_HEADER dialplan function adds a PAI or RPID header and send_rpid or send_pai is set, res_pjsip_caller_id attemps to retrieve, parse and modify the header added by the dialplan function. Since the header added by the dialplan function is generic string, there are no virtual functions to parse the uri and we get a segfault when we try. Since the modify, was really only an overwrite, we now just delete the old header if it was type PJSIP_H_OTHER and recreate it. This raises a question for another time though: What should happen with duplicate headers? Right now res_pjsip_header_funcs doesn't check for dups so if it's session supplement is loaded after res_pjsip_caller_id's (or any other module that adds headers), there'll be dups in the message. ASTERISK-25337 #close Change-Id: I5e296b52d30f106b822c0eb27c4c2b0e0f71c7fa 2016-02-15 13:08 +0000 [ebe167f792] Mark Michelson * Fix creation race of contact_status structures. It is possible when processing a SIP REGISTER request to have two threads end up creating contact_status structures in sorcery. contact_status is created using a "find or create" function. If two threads call into this at the same time, each thread will fail to find an existing contact_status, and so both will end up creating a new contact status. During testing, we would see sporadic failures because the PJSIP_CONTACT() dialplan function would operate on a different contact_status than what had been updated by res_pjsip/pjsip_options. The fix here is two-fold: 1) The "find or create" function for contact_status now has a lock around the entire operation. This way, if two threads attempt the operation simultaneously, the first to get there will create the object, and the second will find the object created by the first thread. 2) res_sorcery_memory has had its create callback updated so that it will not allow for objects with duplicate IDs to be created. Change-Id: I55b1460ff1eb0af0a3697b82d7c2bac9f6af5b97 2016-02-15 12:52 +0000 [1c4f2a920d] Joshua Colp * res_pjsip_pubsub: Move where the subscription is stored to after initialized. A problem arose when testing the AMI subscription listing actions where it was possible for a subscription that had not been fully initialized to be listed. This was problematic as the underlying listing code would crash. This change makes it so the subscription tree is fully set up before it is added to the list of subscriptions. This ensures that when the listing actions get the subscription it is valid. ASTERISK-25738 #close Change-Id: Iace2b13641c31bbcc0d43a39f99aba1f340c0f48 2015-02-20 20:51 +0000 [ac00c6bc2d] Corey Farrell * main/asterisk.c: Reverse #if statement in listener() to fix code folding. listener() opens the same code block in two places (#if and #else). This confuses some folding editors causing it to think that an extra code block was opened. Folding in 'geany' causes all code after listener() to be folded as if it were part of that procedure. ASTERISK-24813 #close Change-Id: I4b8c766e6c91e327dd445e8c18f8a6f268acd961 2016-02-09 17:34 +0000 [b1b797e0e7] gtjoseph * res_pjsip: Refactor load_module/unload_module load_module was just too hairy with every step having to clean up all previous steps on failure. Some of the pjproject init calls have now been moved to a separate load_pjsip function and the unload_pjsip function was enhanced to clean up everything if an error happened at any stage of the load process. In the process, a bunch of missing pj_shutdowns, serializer_pool_shutdowns and ast_threadpool_shutdowns were also corrected. Change-Id: I5eec711b437c35b56605ed99537ebbb30463b302 2016-02-09 22:42 +0000 [20e9792fbc] Badalyan Vyacheslav * Resources/res_phoneprov: fix memory leak and heap-use-after-free * heap-use-after-free happens when we free "cfg" but then use "value" which refers to it * A memory leak occurs because in some cases it is not released "defaults" ASTERISK-25721 #close Reported by: Badalyan Vyacheslav Tested by: Badalyan Vyacheslav Change-Id: I3807d3f4726df6864430ec144cf6265d3f538469 2016-02-11 11:21 +0000 [962a9d61f8] Etienne Lessard (license #6394) * func_iconv: Ensure output strings are properly terminated. ASTERISK-25272 #close Reported by: Etienne Lessard patches: AST-25272.patch submitted by Etienne Lessard (license #6394) Change-Id: Id75ad202300960a1e91afe15e319d992936ecc17 2016-02-10 16:16 +0000 [c1bf014ea0] gtjoseph * res_pjsip: Handle pjsip_dlg_create_uas deprecation Pjproject has deprecated pjsip_dlg_create_uas in 2.5 and replaced it with pjsip_dlg_create_uas_and_inc_lock which, as the name implies, automatically increments the lock on the returned dialog. To account for this, configure.ac now detects the presence of pjsip_dlg_create_uas_and_inc_lock and res_pjsip.c has an #ifdef HAVE_PJSIP_DLG_CREATE_UAS_AND_INC_LOCK to decide whether to use the original call or the new one. If the new one was used, the ref count is decremented before returning. ASTERISK-25751 #close Reported-by Josh Colp Change-Id: I1be776b94761df03bd0693bc7795a75682615ca8 2016-02-09 23:40 +0000 [bd07b6f0dd] Badalyan Vyacheslav * Build: Added testing compiler to support the system sanitizes In older versions of the compiler was not sanitizes. Compilers other than GCC can not support the Usan and TSAN or have other options for *FLAGS. ASTERISK-25767 #close Reported by: Badalyan Vyacheslav Tested by: Badalyan Vyacheslav Change-Id: Iefce6608221fa87884b82ae3cb5649b7b1804916 2016-02-09 20:57 +0000 [e9e896abd1] Badalyan Vyacheslav * Build: Fix menuselect USAN conflicts USAN can be used together with other sanitizers. Reported by: Badalyan Vyacheslav Tested by: Badalyan Vyacheslav Change-Id: I3bffa350d70965c3026651dba3a12414d0aaa45f 2016-02-09 14:21 +0000 [93e8ed0154] Corey Farrell * Simplify and fix conditional in FD_SET. FD_SET contains a conditional statement to protect against buffer overruns. The statement was overly complicated and prevented use of the last array element of ast_fdset. We now just verify the fd is less than ast_FDMAX. Change-Id: I41895c0b497b052aef5bf49d75c817c48b326f40 2016-02-09 07:11 +0000 [a7c8d4cd6b] Joshua Colp * tests/test_sorcery_memory_cache_thrash: Improve termination process. When terminating the threads thrashing a sorcery memory cache each would be told to stop and then we would wait on them. During at least one thrashing test this was problematic due to the specific usage pattern in use. It would take some time for termination of the thread to occur. This would occur due to contention between the threads retrieving and the threads updating the cache. As the retrieving threads are given priority it may be some time before the updating threads are able to proceed. This change makes it so all threads are told to stop and then each are joined to ensure they stop. This way all the threads should stop at around the same time instead of waiting for one to stop, the next to stop, then the next, and so on. As a result of this the execution time for each thrash test is much closer to their expected value than previously seen as well. Change-Id: I04a53470b0ea4170b8819180b0bd7475f3642827 2016-01-29 17:56 +0000 [2451d4e455] gtjoseph * res_pjsip: Fix infinite recursion when loading transports from realtime Attempting to load a transport from realtime was forcing asterisk into an infinite recursion loop. The first thing transport_apply did was to do a sorcery retrieve by id for an existing transport of the same name. For files, this just returns the previous object from res_sorcery_config's internal container, if any. For realtime, the res_sourcery_realtime driver looks in the database and finds the existing row but now it has to rehydrate it into a sorcery object which means calling... transport_apply. And so it goes. The main issue with loading from realtime (apart from the loop) was that transport stores structures and pointers directly in the ast_sip_transport structure instead of the separate ast_transport_state structure. This patch separates those items into the ast_sip_transport_state structure. The pattern is roughly the same as res_pjsip_outbound_registration. Although all current usages of ast_sip_transport and ast_sip_transport_state were modified to use the new ast_sip_get_transport_state API, the original items are left in ast_sip_transport and kept updated to maintain ABI compatability for third-party modules. They are marked as deprecated and noted that they're now in ast_sip_transport_state. ASTERISK-25606 #close Reported-by: Martin Moučka Change-Id: Ic7a836ea8e786e8def51fe3f8cce855ea54f5f19 2016-01-25 17:36 +0000 [6f978fbfe5] Richard Mudgett * app_confbridge: Only use b_profile options from the conference. A user cannot set new bridge options after the conference is created by the first user. Attempting to do so is documented as undefined behavior. This patch ensures that the bridge profile options used are from the conference and not what a subsequent user may have tried to set. Change-Id: I1b6383eba654679e5739d5a8de98199cf074a266 2016-02-05 10:29 +0000 [ec8fd6714d] gtjoseph * chan_misdn: Fix a few issues causing compile errors Change-Id: I54b48c24d7ca88ed80496fdfd142d08772a7ab98 2016-02-04 16:17 +0000 [6a799cd78f] Mark Michelson * Check for OpenSSL defines before trying to use them. The SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TLSv1_2 defines did not exist prior to OpenSSL version 1.0.1. A recent commit attempts to, by default, set these options, which can cause problems on systems with older OpenSSL installations. This commit adds a configure script check for those defines and will not attempt to make use of those if they do not exist. We will print a warning urging the user to upgrade their OpenSSL installation if those defines are not present. Change-Id: I6a2eb9a43fd0738b404d8f6f2cf4b5c22d9d752d 2016-02-03 14:25 +0000 [953d1cc11a] gtjoseph * pjsip/alembic: Add missing columns to system and registration ps_systems needed disable_tcp_switch ps_registrations needed line and endpoint ASTERISK-25737 #close Change-Id: Iaf9c2d69e62243d9fa53104c28c5339c47d4ac19 2016-02-04 11:39 +0000 [23829b3253] Mark Michelson * res_stasis_device_state: Fix refcounting error. Device state subscription lifetimes were governed by when the subscription was established and unsubscribed from. However, it is possible that at the time of unsubscription, there could be device state events still in flight. When those device state events occur, the device state callback could attempt to dereference a freed pointer. Crash. This change ensures that the lifetime of the device state subscription does not end until the underlying stasis subscription has confirmed that its final message has been sent. Change-Id: I25a0f1472894c1a562252fb7129671478e25e9b2 2016-01-27 10:44 +0000 [4e8e6d3922] Sean Bright * res_rtp_asterisk: Allow ICE host candidates to be overriden During ICE negotiation the IPs of the local interfaces are sent to the remote peer as host candidates. In many cases Asterisk is behind a static one-to-one NAT, so these host addresses will be internal IP addresses. To help in hiding the topology of the internal network, this patch adds the ability to override the host candidates by matching them against a user-defined list of replacements. Change-Id: I1c9541af97b83a4c690c8150d19bf7202c8bff1f 2015-12-07 12:46 +0000 [c6b1b2b1c8] Richard Mudgett * AST-2016-003 udptl.c: Fix uninitialized values. Sending UDPTL packets to Asterisk with the right amount of missing sequence numbers and enough redundant 0-length IFP packets, can make Asterisk crash. ASTERISK-25603 #close Reported by: Walter Doekes ASTERISK-25742 #close Reported by: Torrey Searle Change-Id: I97df8375041be986f3f266ac1946a538023a5255 2016-02-03 12:05 +0000 [f8acadde2c] Joshua Colp * AST-2016-001 http: Provide greater control of TLS and set modern defaults. This change exposes the configuration of various aspects of the TLS support and sets the default to the modern standards. The TLS cipher is now set to the best values according to the Mozilla OpSec team, different TLS versions can now be disabled, and the cipher order can be forced to be that of the server instead of the client. ASTERISK-24972 #close Change-Id: I0a10f2883f7559af5e48dee0901251dbf30d45b8 2015-09-28 17:07 +0000 [3c81a052c8] Richard Mudgett * AST-2016-002 chan_sip.c: Fix retransmission timeout integer overflow. Setting the sip.conf timert1 value to a value higher than 1245 can cause an integer overflow and result in large retransmit timeout times. These large timeout times hold system file descriptors hostage and can cause the system to run out of file descriptors. NOTE: The default sip.conf timert1 value is 500 which does not expose the vulnerability. * The overflow is now detected and the previous timeout time is calculated. ASTERISK-25397 #close Reported by: Alexander Traud Change-Id: Ia7231f2f415af1cbf90b923e001b9219cff46290 2016-02-03 14:07 +0000 [2a6ee8caeb] gtjoseph * logging: Remove/fix some message annoyances test_dlinklists doesn't need to NOTICE everyone that every macro worked. res_phoneprov doesn't need to VERBOSE everyone that a phoneprov extension or provider was registered. res_odbc was missing a newline at the end of one message. Change-Id: I6c06361518ef3711821795e535acd439782a995e 2016-02-02 10:52 +0000 [32fc784284] Alexei Gradinari License #5691 * res_sorcery_realtime: Fix regex regression. A regression was introduced where searching for realtime PJSIP objects by regex by starting the regex with a leading "^" would cause no items to be returned. This was due to a change which attempted to drop the requirement for a leading "^" to be present due to how some CLI commands formulate their regexes. However, the change, rather than simply eliminating the requirement, caused any regexes that did begin with "^" to end up not returning the expected results. This change fixes the problem by inspecting the regex and formulating the realtime query differently depending on if it begins with "^". ASTERISK-25702 #close Reported by Nic Colledge Patches: realtime_retrieve_regex.patch submitted by Alexei Gradinari License #5691 Change-Id: I055df608a6e6a10732044fa737a9fe8dca602693 2016-02-02 04:05 +0000 [0405c31756] Karsten Wemheuer * res_xmpp: Does not connect in component mode The module res_xmpp does not accept usernames in the form used in component mode (XEP-0114). In component mode there is no @something in the name. In component mode the connection is now not dropped anymore. If the xmpp server sends out a "stream" tag before handshake is finished, the connection gets dropped in res_xmpp. Now this tag will be ignored and the connection will be established. After connecting there will be an exchange of presence states. This does not work as expected in component mode. The responsible function "xmpp_pak_presence" is left before the states get sent out. Sending presence states in component mode is now moved to the top of the function. ASTERISK-25735 #close Change-Id: I70e036f931c3124ebb2ad1e56f93ed35cfdd9d5c 2016-02-01 13:04 +0000 [8804d0973c] gtjoseph * build_system: Fix some warnings highlighted by clang Fix some warnings found with clang. Change-Id: I5195b6189b148c2ee3ed4a19d015a6d4ef3e77bd 2016-02-01 13:16 +0000 [109b0aff6b] gtjoseph * res/Makefile: Fix bug in "clean" target for ari The "clean" target was attempting to clean res/ari from inside the res directory which doesn't remove anything. Removed the res/ prefix. Change-Id: Ib1a518d54efa81b9fd5a42742d43cc3767435bf6 2016-01-31 20:13 +0000 [a85fab7c44] gtjoseph * pjsip/alembic: Fix definition of qualify_timeout A recent commit set qualify_timeout to Decimal which isn't supported. This path corrects it to Float. Change-Id: I038f5274ba8cb60f8518a5845ce448d49306aadf 2016-01-29 07:39 +0000 [aa9348ab9a] Stefan Engström * chan_sip.c: AMI & CLI notify methods get different values of asterisk's own ip. When I ask asterisk to send a SIP NOTIFY message to a sip peer using either a) AMI action: SIPnotify or b) cli command: sip notify , I expect asterisk to include the same value for its own ip in both cases a) and b), but it seems a) produces a contact header like Contact: whereas b) produces a contact header like . 0.0.0.0:8060 is my udpbindaddr in sip.conf My guess is that manager_sipnotify should call ast_sip_ouraddrfor(&p->sa, &p->ourip, p) the same way sip_cli_notify does, because after applying this patch, both cases a) and b) produce the contact header that I expect: Reported by: Stefan Engström Tested by: Stefan Engström Change-Id: I86af5e209db64aab82c25417de6c768fb645f476 2015-12-23 15:07 +0000 [65bd4fcc3f] Mark Michelson * res_odbc: Remove connection management Asterisk by default will create a single database connection and share it among all threads that attempt to access the database. In previous versions of Asterisk, this was tolerable, because the most used channel driver, chan_sip, mostly accessed the database from a single thread. With PJSIP, however, many threads may be attempting to perform database operations, and there is the potential for many more database accesses, meaning the concurrency is a horrible bottleneck if only one connection is shared. Asterisk has a connection pooling facility built into it, but the implementation has flaws. For one, there is a strict limit on the number of simultaneous connections that could be made to the database. Anything beyond the maximum would result in a failed operation. Attempting to predict what the maximum should be is nearly impossible even for someone intimately familiar with Asterisk's threading model. In addition, use of transactions in the dialplan can cause some severe bugs if connection pooling is enabled. This commit seeks to fix the concurrency problem by removing all connection management code from Asterisk and leaving that to the underlying unixODBC code instead. Now, Asterisk does not share a single connection, nor does it try to maintain a connection pool. Instead, all Asterisk ever does is request a connection from unixODBC and allow unixODBC to either allocate those connections or retrieve them from a pool. Doing this has a bit of a ripple effect. For one, since connections are not long-lived objects, several of the safeguards that previously existed have been removed. We don't have to worry about trying to use a connection that has gone stale. In every case, when we request a connection, it has just been made and we don't need to perform any sanity checks to be sure it's still active. Another major player affected by this change is transactions. Transactions and their respective connections were so tightly coupled that it was almost pornographic. This code change moves transaction-related code to its own file separate from the core ODBC functionality. This way, the core of ODBC does not even have to know that transactions exist. In making this large change, I had to look at a lot of code and understand it. When making this change, I discovered several places where the behavior is definitely not ideal, but it seemed outside the scope of this change to be fixing it. Instead, any place where I saw some sort of room for improvement has had a XXX comment added explaining what could be altered to improve it. Change-Id: I37a84def5ea4ddf93868ce8105f39de078297fbf 2016-01-28 12:44 +0000 [2a9e623ff9] Richard Mudgett * config_options.c: Fix warning message wording. Change-Id: I915ea437936320393afde0e7552cf0a980a6b2e4 2016-01-25 17:34 +0000 [ed3c9c1512] Richard Mudgett * app_confbridge.c: Replace inlined code with existing function. Change-Id: Ida5594e9f8d7c1fc18eeb733a11f8fb96326da51 2016-01-25 16:05 +0000 [1d0abf86e7] Richard Mudgett * app_confbridge: Add ability to get the muted conference state. * Added CONFBRIDGE_INFO(muted,) for querying the muted conference state. * Added Muted header to AMI ConfbridgeListRooms action response list events to indicate the muted conference state. * Added Muted column to CLI "confbridge list" output to indicate the muted conference state and made the locked column a yes/no value instead of a locked/unlocked value. ASTERISK-20987 Reported by: hristo Change-Id: I4076bd8ea1c23a3afd4f5833e9291b49a0c448b1 2016-01-26 17:59 +0000 [f0d40afa69] Richard Mudgett * app_confbridge.c: Update CONFBRIDGE and CONFBRIDGE_INFO documentation. Change-Id: Ic1f9e22ba1f2ff3b3f5cb017c5ddcd9bd48eccc7 2016-01-25 15:48 +0000 [3e51e5c7fd] Richard Mudgett * app_confbridge: Make non-admin users join a muted conference muted. ASTERISK-20987 #close Reported by: hristo Change-Id: Ic61a2b524ab3a4cfadf227fc6b3506527bc03f38 2016-01-27 13:02 +0000 [9da18af992] gtjoseph * res_pjsip: Add res_pjproject dependency to UPGRADE.txt and samples Since res_pjsip now depends on res_pjproject, this is now mentioned in UPGRADE.txt and the basic-pbx modules.conf has been updated. Change-Id: I42826597d5e10f08e518208860c44c96e52f1b2d 2016-01-27 10:29 +0000 [aee8448bc2] gtjoseph * build_system: Prevent goals needing makeopts from running when it's missing The Makefile only optionally includes makeopts so when goals like uninstall that dont depend on anything else are run after a distclean, rules like 'rm -f "$(DESTDIR)$(ASTMODDIR)/"*' get run as 'rm -f ""/*' which attempts to remove everything in the root directory. Although there's a rule defined for makeopts which prints a message and does an 'exit 1', since '-include makepopts' was specified (with the -), the exit was ignored letting the rest of the rules run. This patch makes makeopts required unless the goal has the string 'clean' in it. ASTERISK-25730 #close Reported-by: George Joseph Change-Id: I1bce59a7ea4f48e7a468e22b2abbb13c63417ac7 2016-01-25 09:35 +0000 [f22074e5d9] Joshua Colp * config: Allow options to register when documentation is unavailable. The config options framework is strict in that configuration options must be documented unless XML documentation support is not available. In practice this is useful as it ensures documentation exists however in off-nominal cases this can cause strange problems. If it is expected that a config option has a non-zero or non-empty default value but the config option documentation is unavailable this reasonable expectation will not be met. This can cause obscure crashes and weirdness depending on how the code handles it. This change tweaks the behavior to ensure that the config option is still allowed to register, apply default values, and be set when devmode is not enabled. If devmode is enabled then the option can NOT be set. This also does not remove the initial documentation error message that is output on load when registering the configuration option. ASTERISK-25725 #close Change-Id: Iec42fca6b35f31326c33fcdc25473f6fd7bc8af8 2016-01-25 10:23 +0000 [4a3275abb9] Mark Michelson * Stasis: Use custom structure when setting variables. A recent change to queue channel variable setting to the Stasis control queue caused a regression. When setting channel variables, it is possible to give a NULL channel variable value in order to unset the variable (i.e. remove it from the channel variable list). The change introduced a call to ast_variable_new(), which is not tolerant of NULL channel variable values. This new change switches from using ast_variable to using a custom channel variable struct that is lighter weight and NULL value-tolerant. Change-Id: I784d7beaaa3c036ea936d103e7caf0bb1562162d 2016-01-25 16:56 +0000 [b2c8a99f9e] Rusty Newton * sounds/Makefile: Incremented core and extra sounds versions to 1.5 Core and extra sounds 1.5 was recently released! The tarballs contain change descriptions however I figure more people will see this one so I'll try to be a bit detailed. Approximately 60 sounds were moved from Extra to Core for en, en_GB, fr and added for languages that didn't already have Extra sound sets (it,ja,ru). In addition all of the English and Russian sounds have been completely re-recorded. Sounds moved and added: activated,added,all-circuits-busy-now,astcc-followed-by-pound at-tone-time-exactly,call-forwarding,call-fwd-no-ans,call-fwd-on-busy ,call-fwd-unconditional,calling,call-waiting,cancelled, cannot-complete-as-dialed,check-number-dial-again,conf-full,de-activated ,disabled,do-not-disturb,enabled,enter-num-blacklist,entr-num-rmv-blklist ,extension,feature-not-avail-line,for,from-unknown-caller,goodbye,hello ,if-correct-press,im-sorry,info-about-last-call,is,is-in-use,is-set-to ,location,number,number-not-answering,num-was-successfully,one-moment-please ,please-try-again,pls-hold-while-try,pls-try-call-later,pm-invalid-option ,privacy-to-blacklist-last-caller,removed,simul-call-limit-reached ,something-terribly-wrong,sorry,sorry-youre-having-problems,speed-dial ,speed-dial-empty,telephone-number,time,to-call-this-number,to-extension ,to-listen-to-it,to-rerecord-it,unidentified-no-callback,with,you-entered ,your There were also a few random fixes here and there to file names for a few of the languages. ASTERISK-25068 #close Change-Id: I2b594344ec585d7dfd922b40c1af43b1508828b3 2016-01-25 16:51 +0000 [8261bda1bf] Mark Michelson * res_pjsip_pubsub: Prevent crash from AMI command on freed subscription. A test recently uncovered that running an ill-timed AMI command to show inbound subscriptions could cause a crash since Asterisk will try to operate on a freed subscription. The fix for this is to remove the subscription tree from the list of subscriptions at the time that we are sending our final NOTIFY request out. This way, as the subscription is in the process of dying, it is inaccessible from AMI. Change-Id: Ic0239003d8d73e04c47c12dd2a7e23867e5b5b23 2016-01-25 11:03 +0000 [a6823bb0c4] Corey Farrell * chan_sip: Fix buffer overrun in sip_sipredirect. sip_sipredirect uses sscanf to copy up to 256 characters to a stacked buffer of 256 characters. This patch reduces the copy to 255 characters to leave room for the string null terminator. ASTERISK-25722 #close Change-Id: Id6c3a629a609e94153287512c59aa1923e8a03ab 2016-01-22 15:08 +0000 [1003c2eb05] Mark Michelson * Stasis: Fix potential memory leak of control data. When queuing tasks onto the Stasis control queue, you can pass an arbitrary data pointer and a function to free that data. All ARI commands that use the Stasis control queue made the assumption that the destructor function would be called in all paths, whether the task was queued successfully or not. However, this was not correct. If a task was queued onto a control structure that was already completed, the allocated data would not be freed properly. This patch corrects this by making sure that all return paths call the data destructor. Change-Id: Ibf06522094f8e5c4cce652537dc5d7222b1c4fcb 2016-01-21 10:58 +0000 [eedd77fda0] Mark Michelson * Stasis: Use control queue to prevent crash. A crash occurred when attempting to set a channel variable on a channel that had already been hung up. This is because there is a small window between when a control is grabbed and when the channel variable is set that the channel can be hung up. The fix here is to queue the setting of the channel variable onto the control queue. This way, the manipulation of the channel happens in a thread where it is safe to be done. In this change, I also noticed that the setting of bridge roles on channels was being done outside of the control queue, so I also changed those operations to be done in the control queue. ASTERISK-25709 #close Reported by Mark Michelson Change-Id: I2a0a4d51bce6fba6f1d9954e40935e42f366ea78 2016-01-22 11:48 +0000 [1c95b211a0] Richard Mudgett * logger.c: Fix buffer overrun found by address sanitizer. The null terminator of the tail struct member was not being allocated when no logger.conf config file is installed. ASTERISK-25714 #close Reported by: Badalian Vyacheslav Change-Id: I45770fdd08af39506a3bc33ba279c4f16e047a30 2016-01-21 16:40 +0000 [6ff945ab87] Corey Farrell * Build System: Add support for checking alembic branches. * Add 'check-alembic' target to root Makefile. * Create build_tools/make_check_alembic to do the actual checks. ASTERISK-25685 Change-Id: Ibb3cae7d1202ac23dc70b0f3b5801571ad46b004 2016-01-19 18:20 +0000 [02035212de] Richard Mudgett * res/res_pjsip/presence_xml.c: Add missing 2nd call presence state case. ASTERISK-25712 #close Reported by: Richard Mudgett Change-Id: I70634df24f8c6c3a2c66c45af61d021e4999253f 2016-01-18 03:49 +0000 [c68c66c61f] Diederik de Groot * main/asterisk.c: ast_el_read_char Make sure buf[res] is not accessed at res=-1 (buffer underrun). Address Sanitizer will complain about this quite loudly. ASTERISK-24801 #close Change-Id: Ifcd7f691310815a31756b76067c56fba299d3ae9 2016-01-13 16:49 +0000 [f87c3275cc] Richard Mudgett * res_pjsip: Add CLI "pjsip dump endpt [details]" Dump the res_pjsip endpt internals. In non-developer mode we will not document or make easily accessible the "details" option even though it is still available. The user has to know it exists to use it. Presumably they would also be aware of the potential crash warning below. Warning: PJPROJECT documents that the function used by this CLI command may cause a crash when asking for details because it tries to access all active memory pools. Change-Id: If2d98a3641c9873364d1daaad971376311aef3cb 2016-01-18 17:16 +0000 [46b2de55f9] Matt Jordan * funcs/func_cdr: Correctly report high precision values for duration and billsec When CDRs were refactored, func_cdr's ability to report high precision values for duration and billsec (the 'f' option) was broken. This was due to func_cdr incorrectly interpreting the duration/billsec values provided by the CDR engine in milliseconds, as opposed to seconds. Since the CDR engine only provides duration and billsec in seconds, and does not expose either attribute with sufficient precision to merely pass back the underlying value, this patch fixes the bug by re-calculating duration and billsec with microsecond precision based on the start/answer/end times on the CDR. ASTERISK-25179 #close Change-Id: I8bc63822b496537a5bf80baf6102c06206bee841 2016-01-18 19:20 +0000 [137fe5ae01] gtjoseph * res_pjproject: Add module providing pjproject logging and utils res_pjsip_log_forwarder has been renamed to res_pjproject and enhanced as follows: As a follow-on to the recent 'Add CLI "pjsip show buildopts"' patch, a new ast_pjproject_get_buildopt function has been added. It allows the caller to get the value of one of the buildopts. The initial use case is retrieving the runtime value of PJ_MAX_HOSTNAME to insure we don't send a hostname greater than pjproject can handle. Since it can differ between the version of pjproject that Asterisk was compiled against and the version of pjproject that Asterisk is running against, we can't use the PJ_MAX_HOSTNAME macro directly in Asterisk source code. Change-Id: Iab6e82fec3d7cf00c1cf6185c42be3e7569dee1e 2016-01-19 17:15 +0000 [b5c13c1545] Joshua Colp * test_threadpool: Wait for each task to complete and fix memory leak. This change makes the thread_timeout_thrash unit test wait for each task to complete. This fixes the problem where the test would prematurely end when all threads were gone and a new one had to be started to handle the last task. It also increases the thrasing as it is now more likely for each task to encounter the above scenario. This also fixes a memory leak where the data for each task was not being freed. ASTERISK-25611 #close Change-Id: I5017d621a4dc911f509074c16229b86bff2fb3c6 2016-01-18 19:44 +0000 [0ab89182d9] Richard Mudgett * taskprocessor.c: Increase CLI "core ping taskprocessor" timeout. Change-Id: I4892d6acbb580d6c207d006341eaf5e0f8f2a029 2016-01-18 19:43 +0000 [a2a8ea3330] Richard Mudgett * taskprocessor.c: Fix some taskprocessor unrefs. You have to call ast_taskprocessor_unref() outside of the taskprocessor implementation code. Taskprocessor use since v12 has become more transient than just the singleton uses in earlier versions. Change-Id: If7675299924c0cc65f2a43a85254e6f06f2d61bb 2016-01-19 13:44 +0000 [d604a9afc8] Richard Mudgett * Fix alembic branches on v13. Change-Id: I313449b609ede18ad1e1763a655dd23b9210a8e0 2016-01-18 18:45 +0000 [a0c79f3a4f] gtjoseph * pjsip_loging_refactor: Rename res_pjsip_log_forwarder to res_pjproject Change-Id: I5387821f29e5caa0cba0b7d62b0fc0d341e7e20b 2016-01-14 09:26 +0000 [018ccf680b] Rusty Newton * func_channel: Add help text for undocumented CHANNEL function arguments Adding help text documentation for: * hangupsource * appname * appdata * exten * context * channame * uniqueid * linkedid ASTERISK-24097 #close Reported by: Steven T. Wheeler Tested by: Rusty Newton Change-Id: Ib94b00568b0433987df87d5b67ea529b5905754d 2016-01-16 13:18 +0000 [5644bca9f9] Daniel Journo * Update version number in features.conf.sample Update the version number in the comments from Asterisk 12 to Asterisk 12+ Change-Id: Ie692ac8cda3c993c3bf10f27f51a1cca3317ec7b 2016-01-15 19:52 +0000 [3f5f30cf82] Corey Farrell * main/config: Clean config maps on shutdown. ASTERISK-25700 #close Change-Id: I096da84f9c62c6095f68bcf98eac4b7c7868e808 2016-01-14 14:42 +0000 [660fedecb7] Kevin Harwell * bridge_basic: don't cache xferfailsound during an attended transfer The xferfailsound was read from the channel at the beginning of the transfer, and that value is "cached" for the duration of the transfer. Therefore, changing the xferfailsound on the channel using the FEATURE() dialplan function does nothing once the transfer is under way. This makes it so the transfer code instead gets the xferfailsound configuration options from the channel when it is actually going to be used. This patch also fixes a potential memory leak of the props object as well as making sure the condition variable gets initialized before being destroyed. ASTERISK-25696 #close Change-Id: Ic726b0f54ef588bd9c9c67f4b0e4d787934f85e4 2015-07-10 10:37 +0000 [9cda1de34d] Richard Mudgett * taskprocessor.c: Simplify ast_taskprocessor_get() return code. Change-Id: Id5bd18ef1f60ef8be453e677e98478298358a9d1 2016-01-13 18:20 +0000 [a79af2b312] Richard Mudgett * astmm.c: Add more stats to CLI "memory show" commands. * Add freed regions totals to allocations and summary. * Add totals for all allocations and not just the selected allocations. Change-Id: I61d5a5112617b0733097f2545a3006a344b4032a 2016-01-14 16:00 +0000 [83feb7db3b] Kevin Harwell * bridge_basic: don't play an attended transfer fail sound after target hangs up If the attended transfer destination answers (picks call up or goes to voicemail) and then hangs up on the transferer then transferer hears the fail sound. This patch makes it so the fail sound is not played when the transfer destination/target hangs up after answering. ASTERISK-25697 #close Change-Id: I97f142fe4fc2805d1a24b7c16143069dc03d9ded 2016-01-14 13:22 +0000 [935d641f3b] Mark Michelson * Remove res/ari/* content during 'make clean'. 'make clean' and 'make distclean' can leave behind .o files in the res/ari/ directory. One observed consequence of this is that running Asterisk with MALLOC_DEBUG can cause Asterisk to crash immediately on startup sometimes. By ensuring that we are making a clean build, we can be sure that stale files are not being included in the build and causing problems when build options should have caused files to be re-built. ASTERISK-25683 #close Reported by yaron nahum Change-Id: I1f48baa904d2468eddeefb42ee68a56af7adc7b7 2016-01-13 15:58 +0000 [46f21df302] Daniel Journo * pjsip/alembic: Fix qualify_timeout column definition Corrects the qualify_timeout column type from Integer to Decimal ASTERISK-25686 #close Reported-by: Marcelo Terres Change-Id: I757d0e3c011ee9be6cd5abd48bc92441a405d3c8 2016-01-12 11:14 +0000 [32b29d7b02] Joshua Colp * app: Queue hangup if channel is hung up during sub or macro execution. This issue was exposed when executing a connected line subroutine. When connected or redirected subroutines or macros are executed it is expected that the underlying applications and logic invoked are fast and do not consume frames. In practice this constraint is not enforced and if not adhered to will cause channels to continue when they shouldn't. This is because each caller of the connected or redirected logic does not check whether the channel has been hung up on return. As a result the the hung up channel continues. This change makes it so when the API to execute a subroutine or macro is invoked the channel is checked to determine if it has hung up. If it has then a hangup is queued again so the caller will see it and stop. ASTERISK-25690 #close Change-Id: I1f9a8ceb1487df0389f0d346ce0f6dcbcaf476ea 2016-01-13 07:20 +0000 [e7cfda0b38] Sean Bright * res_musiconhold: Prevent multiple simultaneous reloads. There are two ways in which the reload() function in res_musiconhold can be called from the CLI: * module reload res_musiconhold.so * moh reload In the former case, the module loader holds a lock that prevents multiple concurrent calls, but in the latter there is no such protection. This patch changes the 'moh reload' CLI command to invoke the module loader directly, rather than call reload() explicitly. ASTERISK-25687 #close Change-Id: I408968b4c8932864411b7f9ad88cfdc7b9ba711c 2016-01-12 14:25 +0000 [5586abc957] Richard Mudgett * res_pjsip_log_forwarder.c: Add CLI "pjsip show buildopts". PJPROJECT has a function available to dump the compile time options used when building the library. * Add CLI "pjsip show buildopts" command. * Update contrib/scripts/autosupport to get pjproject information. Change-Id: Id93a6a916d765b2a2e5a1aeb54caaf83206be748 2016-01-12 10:36 +0000 [4cd58c3b20] Mark Michelson * res_sorcery_realtime: Remove leading ^ requirement. res_sorcery_realtime's search-by-regex callback performed a check to ensure that the passed-in regex began with a caret (^). If it did not, then no results would be returned. This callback only started to become used when "like" support was added to PJSIP CLI commands. The CLI command for listing objects would pass an empty regex ("") to the sorcery backend if no "like" statement was present. For most sorcery backends, this resulted in returning all objects. However, for realtime, this resulted in returning no objects. This commit seeks to fix the regression by removing the requirement from res_sorcery_realtime for the passed-in-regex to begin with a caret. ASTERISK-25689 #close Reported by Marcelo Terres Change-Id: I22b4dc5d7f3f11bb29ac2e42ef94682e9bab3b20 2016-01-07 11:57 +0000 [219c204a41] gtjoseph * pjsip_sdp_rtp: Add option endpoint/bind_rtp_to_media_address On a system with multiple ip addresses in the same subnet, if a transport is bound to a specific ip address and endpoint/media_address is set, the SIP/SDP will have the correct address in all fields but the rtp stream MAY still originate from one of the other ip addresses, most probably the "primary" ip address. This happens because res_pjsip_sdp_rtp/create_rtp always calls ast_instance_new with the "all" ip address (0.0.0.0 or ::). The new option causes res_pjsip_sdp_rtp/create_rtp to call ast_rtp_instance_new with the endpoint's media_address (if specified) instead of the "all" address. This causes the packets to originate from the specified address. ASTERISK-25632 ASTERISK-25637 Reported-by: Olivier Krief Reported-by: Dan Journo Change-Id: I3dfaa079e54ba7fb7c4fd1f5f7bd9509bbf8bd88 2016-01-10 16:22 +0000 [22801a06ee] Daniel Journo * pjsip: Add option global/regcontext Added new global option (regcontext) to pjsip. When set, Asterisk will dynamically create and destroy a NoOp priority 1 extension for a given endpoint who registers or unregisters with us. ASTERISK-25670 #close Reported-by: Daniel Journo Change-Id: Ib1530c5b45340625805c057f8ff1fb240a43ea62 2016-01-08 15:22 +0000 [1600ebca7d] Kevin Harwell * pbx: Deadlock between contexts container and context_merge locks Recent changes (ASTERISK-25394 commit 2bd27d12223fe33b58c453965ed5c6ed3af7c4f5) introduced the possibility of a deadlock. Due to the mentioned modifications ast_change_hints now needs to keep both merge/delete and state callbacks from occurring while it executes. Unfortunately, sometimes ast_change_hints can be called with the contexts container locked. When this happens it's possible for another thread to grab the context_merge_lock before the thread calling into ast_change_hints does and then try to obtain the contexts container lock. This of course causes a deadlock between the two threads. The thread calling into ast_change_hints waits for the other thread to release context_merge_lock and the other thread is waiting on that one to release the contexts container lock. Unfortunately, there is not a great way to fix this problem. When hints change, the subsequent state callbacks cannot run at the same time as a merge/delete, nor when the usual state callbacks do. This patch alleviates the problem by having those particular callbacks (the ones run after a hint change) occur in a serialized task. By moving the context_merge_lock to a task it can now safely be attempted or held without a deadlock occurring. ASTERISK-25640 #close Reported by: Krzysztof Trempala Change-Id: If2210ea241afd1585dc2594c16faff84579bf302 2016-01-10 17:08 +0000 [0fc3dad965] Corey Farrell * devicestate: Cleanup engine thread during graceful shutdown. ASTERISK-25681 #close Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1 2016-01-10 13:51 +0000 [f34dd10495] Corey Farrell * manager: Cleanup manager_channelvars during shutdown. ASTERISK-25680 #close Change-Id: I3251d781cbc3f48a6a7e1b969ac4983f552b2446 2016-01-10 13:27 +0000 [1d3a1167fc] Corey Farrell * res_calendar: Cleanup scheduler context at unload. ASTERISK-25679 #close Change-Id: I839159bf6882cccc1b23494c7aa2bc2a2624613f 2016-01-08 11:49 +0000 [3a160cdbf6] Joshua Colp * res_rtp_asterisk: Revert DTLS negotiation changes. Due to locking issues within pjnath these changes are being reverted until pjnath can be changed. ASTERISK-25645 Revert "res_rtp_asterisk.c: Fix DTLS negotiation delays." This reverts commit 24ae124e4f7310cfa64c187b944b2ffc060da28d. Change-Id: I2986cfb2c43dc14455c1bcaf92c3804f9da49705 Revert "res_rtp_asterisk: Resolve further timing issues with DTLS negotiation" This reverts commit 965a0eee46d24321f74c244e23c5a5f45e67e12b. Change-Id: Ie68fafde27dad4b03cb7a1e27ce2a8502c3f7bbe 2016-01-09 17:57 +0000 [4b10fc9173] gtjoseph * Revert "pjsip_location: Delete contact_status object when contact is deleted" This reverts commit 0a9941de9d24093b5ff44096d1d7406f29d11e45. Matt, This patch causes another problem and should not have been needed. Before this patch, persistent_endpoint_contact_deleted_observer WAS deleting the contact_status when ast_sip_location_delete_contact was called. By deleting it yourself in ast_sip_location_delete_contact it was gone before the observer could run and the observer therefore was throwing an error and not sending stasis/AMI/statsd messages. So, I don't think this was the cause of your original issue. I also had verified the contact AMI and statsd lifecycle and it was working. I'll double check now though. ASTERISK-25675 Reported-by: Daniel Journo Change-Id: Ib586a6b7f90acb641b0c410f659743ab90e84f1a 2016-01-09 18:04 +0000 [79b4309881] Corey Farrell * pbx_dundi: Run cleanup on failed load. During failed startup of pbx_dundi no cleanup was performed. Add a call to unload_module before returning AST_MODULE_LOAD_DECLINE. ASTERISK-25677 #close Change-Id: I8ffa226fda4365ee7068ac1f464473f1a4ebbb29 2016-01-09 13:28 +0000 [a5406b1f9e] Corey Farrell * res_crypto: Perform cleanup at shutdown. This change causes res_crypto to unregister CLI at shutdown while still preventing the module from being unloaded. ASTERISK-25673 #close Change-Id: Ie5d57338dc2752abfc0dd05d0eec86413f2304fc 2016-01-06 19:10 +0000 [cf8e7a580b] Richard Mudgett * res_pjsip: Create human friendly serializer names. PJSIP name formats: pjsip/aor/- -- registrar thread pool serializer pjsip/default- -- default thread pool serializer pjsip/messaging -- messaging thread pool serializer pjsip/outreg/- -- outbound registration thread pool serializer pjsip/pubsub/- -- pubsub thread pool serializer pjsip/refer/- -- REFER thread pool serializer pjsip/session/- -- session thread pool serializer pjsip/websocket- -- websocket thread pool serializer Change-Id: Iff9df8da3ddae1132cb2ef65f64df0c465c5e084 2016-01-06 19:09 +0000 [4276f185f0] Richard Mudgett * Sorcery: Create human friendly serializer names. Sorcery name formats: sorcery/- -- Sorcery thread pool serializer Change-Id: Idc2e5d3dbab15c825b97c38c028319a0d2315c47 2016-01-06 19:09 +0000 [f02ac1b7f9] Richard Mudgett * Stasis: Create human friendly taskprocessor/serializer names. Stasis name formats: subm:- -- Stasis subscription mailbox task processor subp:- -- Stasis subscription thread pool serializer Change-Id: Id19234b306e3594530bb040bc95d977f18ac7bfd 2016-01-07 16:15 +0000 [ec1f1c6742] Richard Mudgett * taskprocessor.c: New API for human friendly taskprocessor names. * Add new API call to get a sequence number for use in human friendly taskprocessor names. * Add new API call to create a taskprocessor name in a given buffer and append a sequence number. Change-Id: Iac458f05b45232315ed64aa31b1df05b875537a9 2016-01-06 17:19 +0000 [d8bc3e0c8b] Richard Mudgett * taskprocessor.c: Fix CLI "core show taskprocessors" output format. Update the CLI "core show taskprocessors" output format to not be distorted because UUID names are longer than previously used taskprocessor names. Change-Id: I1a5c82ce3e8f765a0627796aba87f8f7be077601 2016-01-07 21:07 +0000 [2c4b7502de] Richard Mudgett * taskprocessor.c: Fix CLI "core show taskprocessors" unref. Change-Id: I1d9f4e532caa6dfabe034745dd16d06134efdce5 2016-01-07 20:44 +0000 [3b33ac7a46] Richard Mudgett * taskprocessor.c: Sort CLI "core show taskprocessors" output. Change-Id: I71e7bf57c7b908c8b8c71f1816348ed7c5a5d51e 2016-01-06 19:00 +0000 [0fc32c4dd3] Richard Mudgett * ccss.c: Replace space in taskprocessor name. The CLI "core ping taskprocessor" command does not work very well with taskprocessor names that have spaces in them. You have to put quotes around the name so using tab completion becomes awkward. Change-Id: I29e806dd0a8a0256f4e2e0a7ab88c9e19ab0eda0 2016-01-05 16:54 +0000 [0e0c24ad78] Richard Mudgett * taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock. Change-Id: I78247e0faf978bf850b5ba4e9f4933ab3c59d17b 2016-01-07 03:33 +0000 [0f79c8839b] Diederik de Groot * main: Use ast_strdup instead of strdup Fix compile error in main/utils.c because strdup was used in dummy_start Change-Id: Id61a6cf4f3cbf235450441e10e7da101a6335793 2016-01-07 03:21 +0000 [4285dee778] Diederik de Groot * include/asterisk/time.h: Renamed global declaration:tv Renamed global declaration:tv to dummy_tv_var_for_types, which would oltherwise cause 'shadow' warnings when 'tv' was declared as a local variable elsewhere. Added comment to note that dummy_tv_var_for_types is never really exported and only used as a place holder. ASTERISK-25627 #close Change-Id: I9a6e17995006584f3627efe8988e3f8aa0f5dc28 2016-01-07 15:37 +0000 [96094feab6] Mark Michelson * PJSIP: Prevent deadlock due to dialog/transaction lock inversion. A deadlock was observed where the monitor thread was stuck, therefore resulting in no incoming SIP traffic being processed. The problem occurred when two 200 OK responses arrived in response to a terminating NOTIFY request sent from Asterisk. The first 200 OK was dispatched to a threadpool worker, who locked the corresponding transaction. The second 200 OK arrived, resulting in the monitor thread locking the dialog. At this point, the two threads are at odds, because the monitor thread attempts to lock the transaction, and the threadpool thread loops attempting to try to lock the dialog. In this case, the fix is to not have the monitor thread attempt to hold both the dialog and transaction locks at the same time. Instead, we release the dialog lock before attempting to lock the transaction. There have also been some debug messages added to the process in an attempt to make it more clear what is going on in the process. ASTERISK-25668 #close Reported by Mark Michelson Change-Id: I4db0705f1403737b4360e33a8e6276805d086d4a 2016-01-07 09:39 +0000 [52e9de0016] Corey Farrell * ast_format_cap_append_by_type: Resolve codec reference leak. This resolves a reference leak caused by ASTERISK-25535. The pointer returned by ast_format_get_codec is saved so it can be released. ASTERISK-25664 #close Change-Id: If9941b1bf4320b2c59056546d6bce9422726d1ec 2016-01-04 04:26 +0000 [86eae38d7e] Aaron An * cel/cel_radius: Fix wrong pointer. The macro ADD_VENDOR_CODE defined in the cel_radius.c should use the parameter y not the address of y. I capture the radius UDP packet via tcpdump, and the AV pairs are not correct, then i review the source code and compare it with cdr/cdr_radius.c. Fix it and it works. ASTERISK-25647 #close Reported by: Aaron An Tested by: Aaron An Change-Id: I72889bccd8fde120d47aa659edc0e7e6d4d019f0 2016-01-05 14:52 +0000 [881dc862e0] gtjoseph * asterisk.h: Add ASTERISK_REGISTER_FILE macro The 11/13 branches and master use 2 different file version macros. 11/13 uses ASTERISK_FILE_VERSION but master uses ASTERISK_REGISTER_FILE. This means a new file added to 11/13 can't just be cherry-picked to master because the macro has to be changed. To make cherry-picking possible, ASTERISK_REGISTER_FILE was added to asterisk.h as a simple alias for ASTERISK_FILE_VERSION(__FILE__, NULL) The "$Revision$" tag doesn't do anything since Asterisk moved to git so just passing NULL as the verison works fine. asterisk.h was also annotated to deprecate ASTERISK_FILE_VERSION and suggest using ASTERISK_REGISTER_FILE for all new files. Finally, 2 recent file additions, pbx_builtins.c and pbx_functions.c, were modified to use the new macro to make sure it actually worked. 'core show file version' showed the correct output. Change-Id: I5867ed898818d26ee49bb6e5c7d4c1a45d4789a5 2016-01-05 11:06 +0000 [d228b62fd4] gtjoseph * stasis_cache_pattern: Backport to 13 Somehow stasis_cache_pattern got out of sync between 13 and master and it was causing duplicate channel message issues in 13 when related to a specific endpoint. I.E. from statsd, 'endpoints.PJSIP.1174.channels 0|g' was being emitted twice. Backporting stasis_cache_pattern from master to 13 solved the issue and running the unit and testsuite tests confirmed that no new ones were created. ASTERISK-25317 #close Change-Id: Ia8707462f62d15eed14541c37f332a7bbbceb548 2016-01-04 20:23 +0000 [e462f0063f] Corey Farrell * main/pbx: Move hangup handler routines to pbx_hangup_handler.c. This is the sixth patch in a series meant to reduce the bulk of pbx.c. This moves hangup handler management functions to their own source. Change-Id: Ib25a75aa57fc7d5c4294479e5cc46775912fb104 2016-01-04 19:46 +0000 [ab191d124c] Corey Farrell * main/pbx: Move dialplan application management routines to pbx_app.c. This is the sixth patch in a series meant to reduce the bulk of pbx.c. This moves dialplan application management functions to their own source. Change-Id: I444c10fb90a3cdf9f3047605d6a8aad49c22c44c 2016-01-04 18:20 +0000 [09a9b93896] Corey Farrell * main/pbx: Move switch routines to pbx_switch.c. This is the fifth patch in a series meant to reduce the bulk of pbx.c. This moves ast_switch functions to their own source. Change-Id: Ic2592a18a5c4d8a3c2dcf9786c9a6f650a8c628e 2016-01-04 18:00 +0000 [c608274a39] Corey Farrell * main/pbx: Move timing routines to pbx_timing.c. This is the fourth patch in a series meant to reduce the bulk of pbx.c. This moves pbx timing functions to their own source. Change-Id: I05c45186cb11edfc901e95f6be4e6a8abf129cd6 2015-12-29 04:31 +0000 [338a8ffed6] Martin Tomec * app_queue: Add member flag "in_call" to prevent reading wrong lastcall time Member lastcall time is updated later than member status. There was chance to check wrapuptime for available member with wrong (old) lastcall time. New boolean flag "in_call" is set to true right before connecting call, and reset to false after update of lastcall time. Members with "in_call" set to true are treat as unavailable. ASTERISK-19820 #close Change-Id: I1923230cf9859ee51563a8ed420a0628b4d2e500 2015-12-28 17:23 +0000 [e13719bff1] Rodrigo Ramírez Norambuena * app_queue: Added reason pause of member In app_queue added value Paused Reason on QueueMemberStatus when a member on queue is paused and the reason was set. ASTERISK-25480 #close Reporte by: Rodrigo Ramírez Norambuena Change-Id: Ia5db503482f50764c15e2020196c785f59d4a68e 2015-12-30 10:49 +0000 [4ec85a9f07] gtjoseph * voicemail: Move app_voicemail / res_mwi_external conflict to runtime The menuselect conflict between app_voicemail and res_mwi_external makes it hard to package 1 version of Asterisk. There no actual build dependencies between the 2 so moving this check to runtime seems like a better solution. The ast_vm_register and ast_vm_greeter_register functions in app.c were modified to return AST_MODULE_LOAD_DECLINE instead of -1 if there is already a voicemail module registered. The modules' load_module functions were then modified to return DECLINE instead of -1 to the loader. Since -1 is interpreted by the loader as AST_MODULE_LOAD_FAILURE, the modules were incorrectly causing Asterisk to stop so this needed to be cleaned up anyway. Now you can build both and use modules.conf to decide which voicemail implementation to load. The default menuselect options still build app_voicemail and not res_mwi_external but if both ARE built, res_mwi_external will load first and become the voicemail provider unless modules.conf rules prevent it. This is noted in CHANGES. Change-Id: I7d98d4e8a3b87b8df9e51c2608f0da6ddfb89247 2016-01-04 16:22 +0000 [7fdcfd7724] Corey Farrell * main/pbx: Move variable routines to pbx_variables.c. This is the third patch in a series meant to reduce the bulk of pbx.c. This moves channel and global variable routines to their own source. Change-Id: Ibe8fb4647db11598591d443a99e3f99200a56bc6 2015-12-04 17:22 +0000 [80a8b2a4cd] Richard Mudgett * app_dial: Immediately exit dial if the caller is already hung up. If a caller hangs up before dial is executed within an AGI then the AGI has likely eaten all queued frames before executing the dial in DeadAGI mode. With the caller hung up and no pending frames from the caller's read queue, dial would not know that the call has hung up until a called channel answers. It is rather annoying to whoever just answered the non-existent call. Dial should not continue execution in DeadAGI mode, hangup handlers, or the h exten. * Added a check early in dial to abort dialing if the caller has hungup. ASTERISK-25307 #close Reported by: David Cunningham Change-Id: Icd1bc0764726ef8c809f76743ca008d0f102f418 2016-01-02 10:26 +0000 [1087b0c6ed] Matt Jordan * main/cdr: Allow setting properties on a finalized CDR if it is the last one Prior to this patch, we explicitly disallowed setting any properties on a finalized CDR. This seemed like a good idea at the time; in practice, it was more restrictive. There are weird and strange scenarios where setting a property on a finalized CDR is definitely wrong. For example, we may Fork a CDR, finalizing the previous one, then change a property. In said case, the old CDR is supposed to now be 'immutable' (so to speak), and should not be updated. From the perspective of the code, a forked CDR that is finalized is just finalized. Hence why we decided these should not be updated. In practice, it is much more common to want to set a property on a CDR in the h extension or in a hangup handler. Disallowing a common scenario to make an esoteric behaviour work isn't good. This patch fixes this by allowing callers to set a property IF we are the last CDR in the chain. This preserves the finalized CDR if it was forked, while allowing the more common case to function. ASTERISK-25458 #close Change-Id: Icf3553c607b9f561152a41e6d8381d594ccdf4b9 2016-01-02 10:23 +0000 [1f23e65b89] Matt Jordan * main/cdr: Set the end time on a CDR if endbeforehexten is Yes Prior to this patch, the CDR engine attempted to set the end time on a CDR that was executing hangup logic and with endbeforehexten set to Yes by calling a function that inspects the properties on the Party A snapshot to determine if we are ready to set the end time. That always failed. This is because a Party A snapshot is not updated for CDRs that are executing hangup logic with endbeforehexten=Yes. Instead of calling a function that looks at the Party A snapshot, we just simply set the end time on the CDR. This is safe to call multiple times, and is safe to call at this point as we know that (a) we are executing hangup logic, and (b) we are supposed to set the end time at this point. ASTERISK-25458 Change-Id: I0c27b493861f9c13c43addbbb21257f79047a3b3 2015-12-30 20:51 +0000 [2ffade4574] Corey Farrell * main/pbx: Move custom function routines to pbx_functions.c. This is the second patch in a series meant to reduce the bulk of pbx.c. This moves custom function management routines to their own source. Change-Id: I34a6190282f781cdbbd3ce9d3adeac3c3805e177 2015-12-28 19:18 +0000 [20b8474f20] gtjoseph * main/pbx: Move pbx_builtin dialplan applications to pbx_builtins.c We joked about splitting pbx.c into multiple files but this first step was fairly easy. All of the pbx_builtin dialplan applications have been moved into pbx_builtins.c and a new pbx_private.h file was added. load_pbx_builtins() is called by asterisk.c just after load_pbx(). A few functions were renamed and are cross-exposed between the 2 source files. Change-Id: I87066be3dbf7f5822942ac1449d98cc43fc7561a 2015-12-24 20:26 +0000 [e4a566918a] Matt Jordan * tests/test_stasis_endpoints: Remove expected duplicate events The cache_clear test was written to expect duplicate Stasis messages sent from the technology endpoint to the all caching topic. This patch fixes the test to no longer expect these duplicate messages. ASTERISK-25137 Change-Id: I58075d70d6cdf42e792e0fb63ba624720bfce981 2015-12-28 14:02 +0000 [a280400758] Joshua Colp * test_time: Provide a timeout when waiting. The test_timezone_watch unit test is written to expect a condition to be signaled when the inotify daemon thread runs. There exists a small window where the test_timezone_watch thread can signal the inotify daemon thread while it is not reading on the underlying file descriptor. If this occurs the test_timezone_watch thread will wait indefinitely for a signal that will never arrive. This change adds a timeout to the condition so it will return regardless after a period of time. Change-Id: Ifed981879df6de3d93acd3ee0a70f92546517390 2015-05-27 13:22 +0000 [3a1c4885be] gtjoseph * endpoint/stasis: Eliminate duplicate events on endpoint status change When an endpoint is created, its messages are forwarded to both the tech endpoint topic and the all endpoints topic. This is done so that various parties interested in endpoint messages can subscribe to just the tech endpoint and receive all messages associated with that particular technology, as opposed to subscribing to the all endpoints topic. Unfortunately, when the tech endpoint is created, it also forwards all of its messages to the all topic. This results in duplicate messages whenever an endpoint publishes its messages. This patch resolves the duplicate message issue by creating a new function for Stasis caching topics, stasis_cp_sink_create. In most respects, this acts as a normal caching topic, save that it no longer forwards messages it receives to the all endpoints topic. This allows it to act as an aggregation "sink", while preserving the necessary caching behaviour. ASTERISK-25137 #close Reported-by: Vitezslav Novy ASTERISK-25116 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: Ie47784adfb973ab0063e59fc18f390d7dd26d17b 2015-12-24 22:19 +0000 [136c537695] Dade Brandon * res_http_websocket.c: prevent avoidable disconnections caused by write errors Updated ast_websocket_write to encode the entire frame in to one write operation, to ensure that we don't end up with a situation where the websocket header has been sent, while the body can not be written. Previous to August's patch in commit b9bd3c14, certain network conditions could cause the header to be written, and then the sub-sequent body to fail - which would cause the next successful write to contain a new header, and a new body (resulting in the peer receiving two headers - the second of which would be read as part of the body for the first header). This was patched to have both write operations individually fail by closing the websocket. In a case available to the submitter of this patch, the same body which would consistently fail to write, would succeed if written at the same time as the header. This update merges the two operations in to one, adds debug messages indicating the reason for a websocket connection being closed during a write operation, and clarifies some variable names for code legibility. Change-Id: I4db7a586af1c7a57184c31d3d55bf146f1a40598 2015-12-27 22:38 +0000 [f2efbb5d75] Corey Farrell * Remove res_jabber file that was left behind. Change-Id: I9d88fac0394d5bbaff0900a2ee911c4e4478846b 2015-12-13 13:09 +0000 [dde7f3c1c4] Matt Jordan * res_pjsip_history: Add a module that provides PJSIP history for debugging This patch adds a new module, res_pjsip_history, that provides a slightly better way of debugging SIP message traffic on a busy Asterisk system. The existing mechanisms all rely on passively dumping a SIP message to the CLI. While this is perfectly fine for logging purposes and well controlled environments, on many installations, the amount of SIP messages Asterisk receives will quickly swamp the CLI. This makes it difficult to view/capture those messages that you want to diagnose in real time. This patch provides another way of handling this. When enabled, the module will store SIP message traffic in memory. This traffic can then be queried at leisure. In order to make the querying useful, a CLI command has been implemented, 'pjsip show history', that supports a basic expression syntax similar to SQL or other query languages. A small number of useful fields have been added in this initial patch; additional fields can easily be added in later improvements. Those fields are: - number: The entry index in the history - timestamp: The time the message was recieved - addr: The source/destination address of the message - sip.msg.request.method: The request method - sip.msg.call-id: The Call-ID header Note - this is a resurrection of the module initially proposed on Review Board here: https://reviewboard.asterisk.org/r/4053/ Change-Id: I39bd74ce998e99ad5ebc0aab3e84df3a150f8e36 2015-12-25 09:56 +0000 [be050f2638] Dade Brandon * chan_sip.c: fix websocket_write_timeout default value websocket_write_timeout was not being set to its default value during sip config reload, which meant that prior to this commit, 1) the default value of 100 was not used, unless an invalid value (or 1) was specified in sip.conf for websocket_write_timeout, and 2) if the websocket_write_timeout directive was removed from sip.conf without a full restart of asterisk, then the previous value would continue to be used indefinitely. This essentially lead to a 0ms write timeout (the first write attempt in ast_careful_fwrite must have succeeded) in websocket write requests from chan_sip, unless websocket_write_timeout was explicitely set in sip.conf. Changes to websocket_write_timeout still only apply to new websocket sessions, after the sip reload -- timeouts on existing sessions are not adjusted during sip reload. Change-Id: Ibed3816ed29cc354af6564c5ab3e75eab72cb953 2015-12-23 17:40 +0000 [b3024cad10] Richard Mudgett * bridge_basic.c: Fix GOTO_ON_BLINDXFR Use of GOTO_ON_BLINDXFR would not work at all. The target location would never be executed by the transferring channel. * Made feature_blind_transfer() call ast_bridge_set_after_go_on() with valid context, exten, and priority parameters from the transferring channel. * Renamed some feature_blind_transfer() local variables for clarity. ASTERISK-25641 #close Reported by Dmitry Melekhov Change-Id: I19bead9ffdc4aee8d58c654ca05a198da1e4b7ac 2015-12-24 12:19 +0000 [0a9941de9d] Matt Jordan * res/res_pjsip_location: Delete contact_status object when contact is deleted In 450579e908, a change was made that removed the deletion of the 'contact_status' object when a 'contact' object is deleted in sorcery. This unfortunately means that the 'contact_status' object persists, even when something has explicitly removed a contact. The result is that the state of the contact will not be regenerated if that contact is re-created, and the stale state will be reported/used for that contact. It also results in no ContactStatusChanged events being generated for either ARI or AMI. This patch restores the deletion logic that was removed. Doing so now results in the expected events being generated again. Change-Id: I28789a112e845072308b5b34522690e3faf58f07 2015-12-24 10:18 +0000 [1e24a0ca8a] Kevin Harwell * res_rtp_asterisk: rtp->ice check not wrapped in HAVE_PJPROJECT ifdef Change-Id: I19b49112e1b630bd04e859f14ccf96f8ebd6b151 2015-12-20 21:33 +0000 [1d3d20dd68] Dade Brandon * app_amd: Correct documentation to reflect functionality Update documentation to reflect that maximum_number_of_words has functionality inconsistent with the variable name (and inconsistent with prior documentation.) Update documentation for silence_threshold, which previously implied that it was measuring time, rather than noise averages in the sample. Update the comments in amd.conf.sample. ASTERISK-25639 #close Change-Id: I4b1451e5dc9cb3cb06d59b6ab872f5275ba79093 2015-12-17 19:05 +0000 [965a0eee46] Dade Brandon * res_rtp_asterisk: Resolve further timing issues with DTLS negotiation Resolves an edge case dtls negotiation delay for certain networks which somehow manage to drop the rtcp side's packet when these are both sent ast_rtp_remote_address_set, causing it to have to time-out and restart the handshake. Move dtls pending bio flush in to it's own function, and call it from ast_rtp_on_ice_complete, when we're rtp->ice, rather than when ast_rtp_remote_address_set. Keep the existing flush from the recent change to res_rtp_remote_address_set if ice is not being used. ASTERISK-25614 #close Reported-by: XenCALL Tested by: XenCALL Change-Id: Ie2caedbdee1783159f375589b6fd3845c8577ba5 2015-12-18 09:54 +0000 [ae428d8460] Carlos Oliva * app_queue: update RT members when the 1st call joins a queue with no agents If a call enters on a queue and the members on that queue are updated in realtime (ex: using mysql inserting a new agent) the queue members are never refreshed and the call will stay in the queue until other event occurs. This happens only if this is the first call of the queue and there is no agents servicing. This patch prevent this issue, ensuring realtime members are updated if there is one call in the queue and no available agents ASTERISK-25442 #close Change-Id: If1e036d013a5c1d8b0bf60d71d48fe98694a8682 2015-12-05 10:01 +0000 [59d5bb0613] Joshua Colp * res_sorcery_memory_cache: Add support for a full backend cache. This change introduces the configuration option 'full_backend_cache' which changes the cache to be a full mirror of the backend instead of a per-object cache. This allows all sorcery retrieval operations to be carried out against it and is useful for object types which are used in a "retrieve all" or "retrieve some" pattern. ASTERISK-25625 #close Change-Id: Ie2993487e9c19de563413ad5561c7403b48caab5 2015-12-17 10:25 +0000 [0cefcabd58] Joshua Colp * rtp_engine: Ignore empty filenames in DTLS configuration. When applying an empty DTLS configuration the filenames in the configuration will be empty. This is actually valid to do and each filename should simply be ignored. Change-Id: Ib761dc235638a3fb701df337952f831fc3e69539 2015-12-17 08:10 +0000 [158a0a5422] Joshua Colp * chan_sip: Enable WebSocket support by default. Per the documentation the WebSocket support in chan_sip is supposed to be enabled by default but is not. This change corrects that. Change-Id: Icb02bbcad47b11a795c14ce20a9bf29649a54423 2015-12-14 12:04 +0000 [a9d6fc571d] Joshua Colp * json: Audit ast_json_* usage for thread safety. The JSON library Asterisk uses, jansson, is not thread safe for us in a few ways. To help with this wrappers for JSON object reference count increasing and decreasing were added which use a global lock to ensure they don't clobber over each other. This does not extend to reference count manipulation within the jansson library itself. This means you can't safely use the object borrowing specifier (O) in ast_json_pack and you can't share JSON instances between objects. This change removes uses of the O specifier and replaces them with the o specifier and an explicit ast_json_ref. Some cases of instance sharing have also been removed. ASTERISK-25601 #close Change-Id: I06550d8b0cc1bfeb56cab580a4e608ae4f1ec7d1 2015-12-16 11:28 +0000 [53bd5a539a] Mark Michelson * Alembic: Increase column size of PJSIP AOR "contact". When running the PJSIP AMI "show_endpoint" test with automatic conversion to realtime, the test would fail. This was because the AOR "contact" column was sized at 40, and the configured contact was larger than that. This commit increases the size of the contact column to 255 characters. Change-Id: Ia65bc7fd37699b7c0eaef9629a1a31eab9a24ba1 2015-12-16 11:25 +0000 [da17dc4d75] Mark Michelson * Alembic: Add PJSIP global keep_alive_interval. The keep_alive_interval option was added about a year ago, but no alembic revision was created to add the appropriate column to the database. This commit fixes the problem and adds the column. This was discovered by running the testsuite with automatic conversion to realtime enabled. Change-Id: If3ef92a7c4f4844d08f8aae170d2178aec5c4c1a 2015-12-08 13:04 +0000 [fe8011cc50] sungtae kim * AMI: Fixed OriginateResponse message When the asterisk sending OriginateResponse message, it doesn't set the "Uniqueid". And it didn't support correct response message for Application originate. ASTERISK-25624 #close Change-Id: I26f54f677ccfb0b7cfd4967a844a1657fd69b74d 2015-12-15 18:01 +0000 Asterisk Development Team * asterisk 13.7.0-rc1 Released. 2015-12-15 11:57 +0000 [0370acecfc] Kevin Harwell * Release summaries: Add summaries for 13.7.0-rc1 2015-12-15 11:54 +0000 [d1bb33fe0b] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:54 +0000 [d06a65de01] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:54 +0000 [fb37b44660] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-15 11:48 +0000 [20b7164b8c] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:48 +0000 [6cbf2414c3] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:48 +0000 [ba1794464d] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-15 11:39 +0000 [b3e9753a23] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:39 +0000 [b0df64b5f0] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:39 +0000 [ce9a59faf6] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-15 11:28 +0000 [2e26bef5bb] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:28 +0000 [5e9b47516d] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:28 +0000 [034112c574] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-15 11:19 +0000 [d1f8ff1789] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:19 +0000 [9376488bef] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:19 +0000 [a894c9e7a9] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-15 11:12 +0000 [52afb0f112] Kevin Harwell * .version: Update for 13.7.0-rc1 2015-12-15 11:12 +0000 [2de343eb85] Kevin Harwell * .lastclean: Update for 13.7.0-rc1 2015-12-15 11:12 +0000 [184de2a160] Kevin Harwell * realtime: Add database scripts for 13.7.0-rc1 2015-12-14 13:53 +0000 [24ae124e4f] server-pandora * res_rtp_asterisk.c: Fix DTLS negotiation delays. - Trigger pending DTLS packets to send out, once the RTP instance's remote address is set. - Avoids locking the DTLS structure unnecessarily by only doing this if DTLS is passive. - Add DTLS locks around the structurally sensitive calls in the SSL portion of __rtp_recvfrom, since dtls_srtp_check_pending does not lock inside of itself, and we're dealing with the SSL BIO in at least two threads. WebRTC channels may receive a DTLS handshake before ast_rtp_remote_address_set is called, which causes there to be a pending response to send out. Previous to 1ad827, this was handled by calling dtls_srtp_check_pending on receipt of any RTP packet - a STUN or RTP packet could trigger the pending handshake response. Since that was rightfully removed, whenever the DTLS handshake is received before the remote address is set, we would have to wait until another SSL packet arrives. As of Chrome M47's optimizations to their handshake process, WebRTC conversations between Chrome M47+ and Asterisk, where Asterisk is passive, experience a 1 second delay without this patch, because the SSL handshake is received before ICE negotation stores the remote_address, and the next SSL packet isn't received until after a 1 second timeout in Chrome, which causes a new handshake request. ASTERISK-25614 #close Change-Id: I547f1be7e302dbf71f6553dd8cbc0657b1d0b908 2015-12-14 15:25 +0000 [36097a185d] Richard Mudgett * Fix sscanf() format string type mismatch. ASTERISK-25615 Reported by: George Joseph Change-Id: Ieff35307254ca193f3d473cff2e396ca57c7ce0b 2015-12-13 13:13 +0000 [94f9927784] Matt Jordan * main/utils: Don't emit an ERROR message if the read end of a pipe closes An ERROR or WARNING message should generally indicate that something has gone wrong in Asterisk. In the case of writing to a file descriptor, Asterisk is not in control of when the far end closes its reading on a file descriptor. If the far end does close the file descriptor in an unclean fashion, this isn't a bug or error in Asterisk, particularly when the situation can be gracefully handled in Asterisk. Currently, when this happens, a user would see the following somewhat cryptic ERROR message: "utils.c: write() returned error: Broken pipe" There's a few problems with this: (1) It doesn't provide any context, other than 'something broke a pipe' (2) As noted, it isn't actually an error in Asterisk (3) It can get rather spammy if the thing breaking the pipe occurs often, such as a FastAGI server (4) Spammy ERROR messages make Asterisk appear to be having issues, or can even mask legitimate issues This patch changes ast_carefulwrite to only log an ERROR if we actually had one that was reasonably under our control. For debugging purposes, we still emit a debug message if we detect that the far side has stopped reading. Change-Id: Ia503bb1efcec685fa6f3017bedf98061f8e1b566 2015-12-12 11:08 +0000 [5b867fa904] gtjoseph * pjsip/config_transport: Check pjproject version at runtime for async ops pjproject < 2.5.0 will segfault on a tls transport if async_operations is greater than 1. A runtime version check has been added to throw an error if the version is < 2.5.0 and async_operations > 1. To assist in the check, a new api "ast_compare_versions" was added to utils which compares 2 major.minor.patch.extra version strings. ASTERISK-25615 #close Change-Id: I8e88bb49cbcfbca88d9de705496d6f6a8c938a98 Reported-by: George Joseph Tested-by: George Joseph 2015-12-10 11:44 +0000 [14b41115e3] Jonathan Rose * chan_sip: Add TCP/TLS keepalive to TCP/TLS server Adds the TCP Keep Alive option to TCP and TLS server sockets. Previously this option was only being set on session sockets. http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ According to the link above, the SO_KEEPALIVE option is useful for knowing when a TCP connected endpoint has severed communication without indicating it or has become unreachable for some reason. Without this patch, keep alive is not set on the socket listening for incoming TCP sessions and in Komatsu's report this resulted in the thread listening for TCP becoming stuck in a waiting state. ASTERISK-25364 #close Reported by: Hiroaki Komatsu Change-Id: I7ed7bcfa982b367dc64b4b73fbd962da49b9af36 2015-12-09 09:48 +0000 [cd119ed4a2] Tyler Cambron * res_chan_stats: Fix bug to send correct statistics to StatsD Fixed a bug that originally would show a negative number of active calls occuring in Asterisk. A gauge is persistent so incrementing and decrementing it results in a more consistent performance. Also changed to the call to StatsD to use ast_statsd_log_string() so that a "+" could be sent to StatsD. ASTERISK-25619 #close Change-Id: Iaaeff5c4c6a46535366b4d16ea0ed0ee75ab2ee7 2015-12-07 13:07 +0000 [ddf4dddf4f] Corey Farrell * app_meetme: Set default value for audio_buffers. The default value was never set for audio_buffers, causing bad audio quality. This ensures the default is always set. ASTERISK-25569 #close Change-Id: I2d2ee3e644120b0f9f6ea6ab9286d7d590942a44 2015-12-08 01:57 +0000 [142d4fefb8] Filip Jenicek * chan_sip: Check sip_pvt pointer in ast_channel_get_t38_state(c) Asterisk may crash when calling ast_channel_get_t38_state(c) on a locked channel which is being hung up. ASTERISK-25609 #close Change-Id: Ifaa707c04b865a290ffab719bd2e5c48ff667c7b 2015-12-08 17:49 +0000 [21962dad93] gtjoseph * res_pjsip: Add existence and readablity checks for tls related files Both transport and endpoint now check for the existence and readability of tls certificate and key files before passing them on to pjproject. This will cause the object to not load rather than waiting for pjproject to discover that there's a problem when a session is attempted. NOTE: chan_sip also uses ast_rtp_dtls_cfg_parse but it's located in build_peer which is gigantic and I didn't want to disturb it. Error messages will emit but it won't interrupt chan_sip loading. ASTERISK-25618 #close Change-Id: Ie43f2c1d653ac1fda6a6f6faecb7c2ebadaf47c9 Reported-by: George Joseph Tested-by: George Joseph 2015-12-02 12:42 +0000 [28d9243079] Eugene Voityuk * chan_sip.c: Start ICE negotiation when response is sent or received. The current logic for ICE negotiation starts it when receiving an SDP with ICE candidates. This is incorrect as ICE negotiation can only start when each call party have at least one pair of local and remote candidate. Starting ICE negotiation early would result in negotiation failure and ultimately no audio. This change makes it so ICE negotiation is only started when a response with SDP is received or when a response with SDP is sent. ASTERISK-24146 Change-Id: I55a632bde9e9827871b09141d82747e08379a8ca 2015-12-08 11:03 +0000 [e03582a1c2] gtjoseph * res_pjsip/config_transport: Prevent async_operations > 1 when protocol = tls See ASTERISK-25615. If the transport protocol is tls and async_operations > 1, pjproject will segfault if more than one operation is attempted on the same socket. Until this is fixed upstream, a check has been added to throw an error if a tls transport config has async_operations set to > 1. ASTERISK-25615 Change-Id: I76b9a5b2a5a0054fe71ca5851e635f2dca7685a6 Reported-by: George Joseph Tested-by: George Joseph 2015-12-08 08:39 +0000 [876600ce6e] Alexander Traud * codec_resample: Increase buffer for Opus Codec with FEC. ASTERISK-25599 #close Change-Id: Idbd187f711b2ec63dda949ca0f79aa0c1a0a0b6e 2015-12-08 03:46 +0000 [69e3d40ad7] Alexander Traud * translate: Avoid a warning message when doing FEC within Opus Codec. ASTERISK-25616 #close Change-Id: Ibe729aaf2e6e25506cff247cec5149ec1e589319 2015-12-04 15:36 +0000 [2b992014dc] Richard Mudgett * chan_sip: Fix crash involving the bogus peer during sip reload. A crash happens sometimes when performing a CLI "sip reload". The bogus peer gets refreshed while it is in use by a new call which can cause the crash. * Protected the global bogus peer object with an ao2 global object container. ASTERISK-25610 #close Change-Id: I5b528c742195681abcf713c6e1011ea65354eeed 2015-12-06 16:32 +0000 [529535f0c2] Matt Jordan * Revert "bridges/bridge_t38: Add a bridging module for managing T.38 state" This reverts commit 6614babea27fbafbe11820ea03737dd5c4f9ecec. Unfortunately, using a bridge to manage T.38 state will cause severe deadlocks in core_unreal/chan_local. Local channels attempt to reach across both their peer and the peer's bridge to inspect T.38 state. Given the propensity of Local channel chains, managing the locking situation in such a scenario is practically infeasible. Change-Id: Ic687397ffea08dfb899345a443bd990ec3d0416a 2015-12-04 16:23 +0000 [450579e908] gtjoseph * res_pjsip/contacts/statsd: Make contact lifecycle events more consistent It will never be perfect or even pretty, mostly because of the differences between static and dynamic contacts. Created: Can't use the contact or contact_status alloc functions because the objects come and go regardless of the actual state. Can't use the contact_apply_handler, ast_sip_location_add_contact or a sorcery created handler because they only get called for dynamic contacts. Similarly, permanent_uri_handler only gets called for static contacts. So, Matt had it right. :) ast_res_pjsip_find_or_create_contact_status is the only place it can go and not have duplicated code. Both permanent_uri_handler and contact_apply_handler call find_or_create. Removed: Can't use the destructors for the same reason as above. The only place to put this is in persistent_endpoint_contact_deleted_observer which I believe is the "correct" place but even that will handle only dynamic contacts. This doesn't called on shutdown however. There is no hook to use for static contacts that may be removed because of a config change while asterisk is in operation. I moved the cleanup of contact_status from ast_sip_location_delete_contact to the handler as well. Status Change and RTT: Although they worked fine where they were (in update_contact_status) I moved them to persistent_endpoint_contact_status_observer to make it more consistent with removed. There was logic there already to detect a state change. Finally, fixed a nit in permanent_uri_handler rmudgett reported eralier. ASTERISK-25608 #close Change-Id: I4b56e7dfc3be3baaaf6f1eac5b2068a0b79e357d Reported-by: George Joseph Tested-by: George Joseph 2015-11-21 06:02 +0000 [5a18193dc0] Alexander Traud * res_format_attr_vp8: In SDP, forward max-fr and max-fs for video-codec VP8. ASTERISK-25584 #close Change-Id: Iae00071b4ff1ae76f24995aeac4d00284fd14f91 2015-11-21 05:21 +0000 [3e2178c05e] Alexander Traud * res_format_attr_opus: Update to latest RFC 7587. Beside that, the format-attribute module sends only non-default values in the line fmtp, now. This avoids unnecessary overhead in SDP messages. Furthermore, previously the parameter stereo was not parsed when being the first parameter. ASTERISK-25583 #close Change-Id: Iae85ba3e5960bfd5d51cf65bcffad00dd4875a73 2015-12-02 14:11 +0000 [072d94183c] Jonathan Rose * Fix crash in audiohook translate to slin This patch fixes a crash which would occur when an audiohook was applied to a channel using an audio codec that could not be translated to signed linear (such as when using pass-through codecs like OPUS or when the codec translator module for the format in use is not loaded). ASTERISK-25498 #close Reported by: Ben Langfeld Change-Id: Ib6ea7373fcc22e537cad373996136636201f4384 2015-12-03 12:07 +0000 [9184fbeb34] gtjoseph * res_pjsip: Use a MD5 hash for static Contact IDs When 90d9a70789 was merged, it mostly tested dynamic contacts created as a result of registering a PJSIP endpoint. Contacts generated in this fashion typically have a long alphanumeric string as their object identifier, which maps reasonably well for StatsD. Unfortunately, this doesn't work in the general case. StatsD treats both '.' and ':' characters as special characters. In particular, having a ':' appear in the middle of a StatsD metric will result in the metric being rejected. This causes some obvious issues with SIP URIs. The StatsD API should not be responsible for escaping the metric name passed to it. The metric is treated as a single long string, and it would be challenging to know what to escape in the string passed to the function. Likewise, we don't want to escape the metric in PJSIP, as that involves overhead that is wasted when either res_statsd isn't loaded or enabled. This patch takes an alternative approach. The Contact ID has been changed to be "aor@@uri_hash" instead of "aor@@uri". This (a) won't contain any of the aforementioned special characters, (b) can be done on Contact creation, which has minimal impact on run-time performance, and (c) also conforms to an earlier commit that changed the ID for dynamic contacts. The downside of this is that StatsD users will have to map SHA1 hashes back to the Contacts that are emitting the statistics. To that end, the CLI commands have been updated to include the first 10 characters of the MD5 hash, which should be enough to match what is shown in Graphite (or some other StatsD backend). ASTERISK-25595 #close Change-Id: Ic674a3307280365b4a45864a3571c295b48a01e2 Reported-by: Matt Jordan Tested-by: George Joseph 2015-11-30 22:19 +0000 [ed9134282e] gtjoseph * res_pjsip: Update logging to show contact->uri in messages An earlier commit changed the id of dynamic contacts to contain a hash instead of the uri. This patch updates status change logging to show the aor/uri instead of the id. This required adding the aor id to contact and contact_status and adding uri to contact_status. The aor id gets added to contact and contact_status in their allocators and the uri gets added to contact_status in pjsip_options when the contact_status is created or updated. ASTERISK-25598 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: I56cbec1d2ddbe8461367dd8b6da8a6f47f6fe511 2015-12-01 16:11 +0000 [eadad24b59] Jonathan Rose * Unset BRIDGEPEER when leaving a bridge Currently if a channel is transferred out of a bridge, the BRIDGEPEER variable (also BRIDGEPVTCALLID) remain set even once the channel is out of the bridge. This patch removes these variables when leaving the bridge. ASTERISK-25600 #close Reported by: Mark Michelson Change-Id: I753ead2fffbfc65427ed4e9244c7066610e546da 2015-11-30 14:22 +0000 [bb0b60619d] Richard Mudgett * res_sorcery_memory_cache.c: Fix off nominal ref leak. Change-Id: If83d63cf11cbc6df9b15251848b01feb570ade49 2015-11-30 16:42 +0000 [e7c88e11aa] Richard Mudgett * sched.c: Make not return a sched id of 0. According to the API doxygen a sched ID of 0 is valid. Unfortunately, 0 was never returned historically and several users incorrectly coded usage of the returned sched ID assuming that 0 was invalid. ASTERISK-25476 Change-Id: Ib19c7ebb44ec9fd393ef6646dea806d4f34e3a20 2015-11-25 12:23 +0000 [4aed349a7b] Richard Mudgett * Audit improper usage of scheduler exposed by 5c713fdf18f. (v13 additions) chan_sip.c: * Initialize mwi subscription scheduler ids earlier because of ASTOBJ to ao2 conversion. * Initialize register scheduler ids earlier because of ASTOBJ to ao2 conversion. chan_skinny.c: * Fix more scheduler usage for the valid 0 id value. ASTERISK-25476 Change-Id: If9f0e5d99638b2f9d102d1ebc9c5a14b2d706e95 2015-11-24 12:44 +0000 [6d9156d10f] Richard Mudgett * Audit improper usage of scheduler exposed by 5c713fdf18f. channels/chan_iax2.c: * Initialize struct chan_iax2_pvt scheduler ids earlier because of iax2_destroy_helper(). channels/chan_sip.c: channels/sip/config_parser.c: * Fix initialization of scheduler id struct members. Some off nominal paths had 0 as a scheduler id to be destroyed when it was never started. chan_skinny.c: * Fix some scheduler id comparisons that excluded the valid 0 id. channel.c: * Fix channel initialization of the video stream scheduler id. pbx_dundi.c: * Fix channel initialization of the packet retransmission scheduler id. ASTERISK-25476 Change-Id: I07a3449f728f671d326a22fcbd071f150ba2e8c8 2015-12-01 07:55 +0000 [b76c196e13] Alexander Traud * codec_resample: Increase buffer for Opus Codec. ASTERISK-25599 #close Change-Id: I1f88a88c59fb4e1e62bbdbb100c7152d48e73f10 2015-11-28 08:46 +0000 [6614babea2] Matt Jordan * bridges/bridge_t38: Add a bridging module for managing T.38 state When 4875e5ac32 was merged, it fixed several issues with a direct media bridge transitioning to handling a T.38 fax. However, it uncovered a race condition caused by the bridging core. When a channel involved in a T.38 fax leaves a bridge, the frame queued by the channel driver that should inform the far side that it is no longer in a T.38 fax may not make it across the bridge. The bridging framework is *extremely* aggressive in tearing down the bridge, and control frames that are currently in flight *may* get dropped. This patch adds a new module to the bridging framework, bridge_t38. This module maintains some notion of the T.38 state for the two channels in a bridge. When the bridge detects that it is being torn down or when one of the two channels leaves, it informs the respective channel(s) that they should stop faxing. This ensures that channels switch back to audio if they survive and are ejected out of a bridge while faxing. ASTERISK-25582 Change-Id: If5b0bb478eb01c4607c9f4a7fc17c7957d260ea0 2015-11-27 07:39 +0000 [3fcf160fae] Niklas Larsson * CHANGES: Fix a typo Change-Id: Iceb3d9bb78140c376174a7bee197dfcf8ef9cda7 2015-11-25 15:26 +0000 [45efbf8503] Kevin Harwell * fastagi: record file closed after sending result The fastagi record-file testsuite test sometimes fails reporting an empty recorded file. This was happening because Asterisk was sending the agi result notification prior to actually closing the file and the data, being buffered, had not been written to the file yet when the test attempts to check the file size. This patch makes it so the record file stream is closed prior to sending the agi result notification. ASTERISK-25593 #close Change-Id: I6b2b3be3ae37f7c7b18e672c419a89b3b8513cde 2015-11-25 13:29 +0000 [b2787876d6] Walter Doekes * main: Slight refactor of main. Improve color situation. Several issues are addressed here: - main() is large, and half of it is only used if we're not rasterisk; fixed by spliting up the daemon part into a separate function. - Call ast_term_init from rasterisk as well. - Remove duplicate code reading/writing asterisk history file. - Attempt to tackle background color issues and color changes that occur. Tested by starting asterisk -c until the colors stopped changing at odd locations. ASTERISK-25585 #close Change-Id: Ib641a0964c59ef9fe6f59efa8ccb481a9580c52f 2015-11-24 13:54 +0000 [59881fbb99] David M. Lee * Fixed some typos Fixes some minor typos in the CHANGES file, plus an embarrasing typo in the StatsD API. Change-Id: I9ca4858c64a4a07d2643b81baa64baebb27a4eb7 2015-11-24 13:07 +0000 [b75f587d15] Corey Farrell * res_pjsip_notify: Fix CLI usage info The usage info for 'pjsip send notify' previously referenced the chan_sip configuration sip_notify.conf. Fix this to reference the correct configuration pjsip_notify.conf. ASTERISK-25590 #close Change-Id: I3898271a8e8a8b1db201741e790ebe2c6bf5cdea 2015-11-23 14:27 +0000 [fc45f4040d] Richard Mudgett * res_sorcery_realtime.c: Fix crash from NULL sorcery object type. If the sorcery object type is not found a NULL is returned. Unfortunately, sorcery_realtime_filter_objectset() will crash after complaining about not finding the object type and saying to expect errors. * Use ao2_cleanup() instead of ao2_ref() to prevent the crash. ASTERISK-25165 Reported by Corey Farrell Change-Id: Ic3b64453ea3058cb68d5c26d97d4fe7b8eea2e97 2015-11-20 21:08 +0000 [4875e5ac32] Matt Jordan * chan_pjsip: Handle T.38 faxes with direct media bridges When a channel is in a direct media bridge, a re-INVITE may arrive that forces Asterisk to re-negotiate the media to a T.38 fax. When this occurs, the bridge must change its technology to a simple bridge, and re-INVITE the media back to Asterisk. Generally, this logic mostly already exists in Asterisk. However, prior to this patch, there were a few bugs: (1) The T.38 framehook currently prevents a channel capable of T.38 faxes from ever entering into a direct media bridge. This applies even when the only media being passed over the channel is audio. This patch fixes this bug by having the framehook specify that it defers caring about any frame type. This allows the channels to enter into a direct media bridge, which will be broken when a re-INVITE is received. (2) When a re-INVITE is received, nothing instructed the bridging layer to re-inspect the allowed bridging technology. This now occurs when either a re-INVITE is received from a peer, or when a response is received from the far end (that is, when the T.38 state changes to either T38_PEER_REINVITE or T38_LOCAL_REINVITE). (3) chan_pjsip needs to do a small amount of work to prevent a direct media bridge from being chosen when a T.38 session is in progress. When a T.38 session supplement has a t38 datastore - which is added when we detect we should start thinking about T.38 on a channel - we now refuse a native RTP bridge. (4) When a BYE request is received, we don't terminate the T.38 session. If the other side of a T.38 fax survives the hangup (due to the 'g' flag in Dial, for example), we don't currently re-INVITE the media on the other channel back to audio. This patch now has res_pjsip_t38 intercept BYE requests and inform the far side that the T.38 session is terminated. This naturally causes the correct re-INVITEs to be sent. ASTERISK-25582 Change-Id: Iabd6aa578e633d16e6b9f342091264e4324a79eb 2015-11-20 21:07 +0000 [2b94d9a10d] Matt Jordan * res/res_pjsip_t38: Add debug statements This patch adds some debug statements to res_pjsip_t38. These statements help to determine which SDP negotiation callbacks are being executed, and, when a particular callback exits, why a callback may not have applied its logic to the local or remote SDP. Change-Id: I61b3fb9183b7ebbb5da8e9f48b59a5d9d7042d77 2015-10-22 09:44 +0000 [af288b2d96] Matt Jordan * main/cli: Use proper string methods to check existence of context/exten/app Because the context, extension, and application are stored in stringfields, checking for them being NULL doesn't work so well. This patch uses the appropriate string library call, ast_strlen_zero, to see if there is a value in the context/exten/app values. Change-Id: Ie09623bfdf35f5a8d3b23dd596647fe3c97b9a23 2015-11-18 09:43 +0000 [d27aac0a9d] Matt Jordan * res/res_endpoint_stats: Add module to emit endpoint StatsD statistics This patch adds a module that emits StatsD statistics about Asterisk endpoints. This includes: * A GUAGE statistic for endpoint states, tracking how many endpoints are in a particular state. * A GUAGE statistic for each endpoint, counting the number of channels currently associated with an endpoint. ASTERISK-25572 Change-Id: If7e1333c5aeda8d136850b30c2101c0ee1c97305 2015-11-18 10:07 +0000 [90d9a70789] Matt Jordan * res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contacts This patch adds the ability to send StatsD statistics related to the state of PJSIP contacts. This includes: * A GUAGE statistic measuring the count of contacts in a particular state. This measures how many contacts are reachable, unreachable, etc. * The RTT time for each contact, if those contacts are qualified. This provides StatsD engines useful time-based data about each contact. ASTERISK-25571 Change-Id: Ib8378d73afedfc622be0643b87c542557e0b332c 2015-11-13 10:34 +0000 [75097a0955] Matt Jordan * res/res_pjsip_outbound_registration: Add registration statistics for StatsD This patch adds outbound registration statistics for StatsD. This includes the following: * A GUAGE metric for the overall count of outbound registrations. * A GUAGE metric for each state an outbound registration can be in. As the outbound registrations change state, the overall count of how many outbound registrations are in the particular state is changed. These statistics are particularly useful for systems with a large number of SIP trunks, and where measuring the change in state of the trunks is useful for monitoring. ASTERISK-25571 Change-Id: Iba6ff248f5d1c1e01acbb63e9f0da1901692eb37 2015-11-19 09:40 +0000 [8f71263e72] Matt Jordan * res/res_pjsip_outbound_registration: Apply configuration on object type load When Asterisk is configured to use a dynamic sorcery backend (such as res_sorcery_astdb) with 'registration' objects, it will fail to create the internal state objects associated with the registration objects on module load. This is due to nothing actually querying for the specific objects and calling their sorcery apply handler during module load. This patch fixes that by calling get_registrations in the sorcery observer's object_type_loaded handler. Doing this causes the sorcery backends to be asked for the current state of all registration objects, which causes the apply handler to be called and the internal run-time state to be created. ASTERISK-25575 #close Change-Id: Ie9306e797098c6d4da7bcf4a5434a15891508b23 2015-11-11 11:51 +0000 [0b508789ab] Alexander Traud * translate: Provide translation modules the result of SDP negotiation. Previously, a trancoding module did not have access to the joint but cached format. Therefore, the module did not have access to the attributes negotiated via SDP (line fmtp). Now, a translation module receives the joint format. ASTERISK-25545 #close Change-Id: Id6878a989b50573298dab115d3371ea369e1a718 2015-11-19 01:14 +0000 [1aa552b2a2] Alexander Traud * res_format_attr_h264: Do not reset string buffer. When no parameter is present, Asterisk does not generate the line fmtp, as expected. However, because a buffer was reset, even rtpmap and fmtp of previous media codecs got removed. Now, Asterisk does not reset other codecs in case of no parameter for H.264. ASTERISK-25573 #close Change-Id: I93811331f4a28c45418a9e14ee46c0debd47a286 2015-11-18 10:05 +0000 [3354b325c6] Matt Jordan * res_statsd: Add functions that support variable arguments Often, the metric names of statistics we are generating for StatsD have some dynamic component to them. This can be the name of a particular resource, or some internal status label in Asterisk. With the current set of functions, callers of the statsd API must first build the metric name themselves, then pass this to the API functions. This results in a large amount of boilerplate code and usage of either fixed length static buffers or dynamic memory allocation, neither of which is desireable. This patch adds two new functions to the StatsD API that support a printf style format specifier for constructing the metric name. A dynamic string, allocated in threadstorage, is used to build the metric name. This eases the burden on users of the StatsD API. Change-Id: If533c72d1afa26d807508ea48b4d8c7b32f414ea 2015-11-17 14:53 +0000 [d4a522d587] Richard Mudgett * res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts. Change-Id: Ie16f5053ebde0dc6507845393709b4d6a3ea526d 2015-11-17 14:53 +0000 [e44ab3816c] Richard Mudgett * res_pjsip_outbound_registration.c: Fix 423 response handling. Receiving a 423 Interval Too Brief response after authentication for an outbound registration attempt results in assuming that the registrar has rejected the registration permanently. If there are no configured retries for fatal responses then the outbound registration is stopped for that endpoint. For registrations, PJSIP/PJPROJECT intercepts the handling of 423 responses and does not include any authentication in the updated registration request. When the updated request is challenged then the Asterisk code assumes that we were challenged again because the peer rejected the authentication we sent earlier. * Made registration challenges keep track of the CSeq number to determine if the received challenge response was for the request we thought we sent. If the response's CSeq number differs from the CSeq number we last sent with authentication then authenticate again because it is a challenge to a different request. Change-Id: I81b4bd36d1be095bab606e34b8b44e6302971b09 2015-11-03 14:36 +0000 [1e0040b88f] Tyler Cambron * StatsD: Add res_statsd compatibility Added a new api to res_statsd.c to allow it to receive a character pointer for the value argument. This allows for a '+' and a '-' to easily be sent with the value. ASTERISK-25419 Reported By: Ashley Sanders Change-Id: Id6bb53600943d27347d2bcae26c0bd5643567611 2015-11-16 13:56 +0000 [f62b642fe3] Matt Jordan * res/res_pjsip: Fix off nominal crash with requests that fail and have a timer When a request is sent using pjsip_endpt_send_request and fails, a condition exists where the request wrapper, which is an AO2 object, may be de-ref'd more times than it should. This occurs when the request's callback is called, and, in the callback, the timer on the PJSIP heap is cancelled. When that occurs, the request wrapper's lifetime is decremented. When pjsip_endpt_send_request fails, we unilaterally decrement the lifetime of the request wrapper again, even though we've already cancelled the reference associated with the timer. This patch checks the return result of pj_timer_heap_cancel_if_active before removing the reference associated with the timer. We now only decrement it in this case if a timer is cancelled as a result of the function call. Change-Id: I21332343a1a019c1117076f9bf2df27be2850102 2015-11-13 14:03 +0000 [fdd2afcd16] Mark Michelson * Confbridge: Add a user timeout option This option adds the ability to specify a timeout, in seconds, for a participant in a ConfBridge. When the user's timeout has been reached, the user is ejected from the conference with the CONFBRIDGE_RESULT channel variable set to "TIMEOUT". The rationale for this change is that there have been times where we have seen channels get "stuck" in ConfBridge because a network issue results in a SIP BYE not being received by Asterisk. While these channels can be hung up manually via CLI/AMI/ARI, adding some sort of automatic cleanup of the channels is a nice feature to have. ASTERISK-25549 #close Reported by Mark Michelson Change-Id: I2996b6c5e16a3dda27595f8352abad0bda9c2d98 2015-11-16 04:29 +0000 [7debb986a5] Alec Davis * app_queue: (try_calling): mutex 'qe->chan' freed more times than we've locked! commit aae45acbd (Mark Michelson 2015-04-15 10:38:02 -0500 6525) refer ASTERISK-24958 above commit removed ast_channel_lock(qe->chan); but failed to remove corresponding ast_channel_unlock(qe->chan); ASTERISK-25561 #close Reported Alec Davis Change-Id: Ie05f4e2d08912606178bf1fded57cc022c7a2e1a 2015-11-14 07:02 +0000 [afd9a89e5a] Joshua Colp * hashtab: Add NULL check when destroying iterator. The hashtab API is pretty NULL tolerant which has resulted in remaining callers not doing much checks themselves. Unfortunately the function to destroy an iterator does not do a NULL check and will result in a crash if passed NULL. This change fixes that. ASTERISK-25552 #close Change-Id: Ic1bf8eec3639e5a440f1c941d3ae3893ac6ed619 2015-11-13 14:32 +0000 [c0f2f8de45] Richard Mudgett * res_pjsip_rfc3326.c: Fix crash when channel goes away. If an authenticated incoming caller does not respond to our 200 OK INVITE response with an ACK then PJSIP will hangup the call. Unfortunately, there is a chance that the session's channel will go away between one use of the channel pointer and another when building the BYE request because the BYE is being built by the monitor thread and not the call's serializer thread. * Added a check to ensure that the thread trying to add the Reason header is the call's serializer thread. This ensures that the channel will not go away on us. Change-Id: I866388d2b97ea2032eaae3f3ab3f1ca6cbd2df89 2015-11-13 14:19 +0000 [4f43b85c92] Mark Michelson * Taskprocessors: Increase high-water mark In practical tests, we have seen certain taskprocessors, specifically Stasis subscription taskprocessors, cross the recently-added high-water mark and emit a warning. This high-water mark warning is only intended to be emitted when things have tanked on the system and things are heading south quickly. In the practical tests, the Stasis taskprocessors sometimes had a max depth of 180 tasks in them, and Asterisk wasn't in any danger at all. As such, this ups the high-water mark to 500 tasks instead. It also redefines the SIP threadpool request denial number to be a multiple of the taskprocessor high-water mark. Change-Id: Ic8d3e9497452fecd768ac427bb6f58aa616eebce 2015-11-11 11:46 +0000 [d8d3991390] Alexander Traud * format: Register format-attribute module with cached formats. In Asterisk 13, cached formats are created before their corresponding format- attribute module is registered. Cached formats are involved when a local extension is called. Therefore, ast_format_generate_sdp_fmtp did not work on local extensions. This change affects the Opus Codec, H.263 (Plus), H.264, and format-attribute modules provided externally. ASTERISK-25160 #close Change-Id: I1ea1f0483e5261e2a050112e4ebdfc22057d1354 2015-11-12 11:17 +0000 [367972e42d] Mark Michelson * res_pjsip distributor: Don't send 503 response to responses. When the SIP threadpool is backed up with tasks, we send 503 responses to ensure that we don't try to overload ourselves. The problem is that we were not insuring that we were not trying to send a 503 to an incoming SIP response. This change makes it so that we only send the 503 on incoming requests. Change-Id: Ie2b418d89c0e453cc6c2b5c7d543651c981e1404 2015-11-11 17:11 +0000 [2f9cb7d62b] Mark Michelson * res_pjsip: Deny requests when threadpool queue is backed up. We have observed situations where the SIP threadpool may become deadlocked. However, because incoming traffic is still arriving, the SIP threadpool's queue can continue to grow, eventually running the system out of memory. This change makes it so that incoming traffic gets rejected with a 503 response if the queue is backed up too much. Change-Id: I4e736d48a2ba79fd1f8056c0dcd330e38e6a3816 2015-11-12 06:24 +0000 [4e5bf12b33] Joshua Colp * format_cap: Don't append the 'none' format when appending all. When appending all formats of a type all the codecs are iterated and added. This operation was incorrectly adding the ast_format_none format which is special in that it is supposed to be used when no format is present. It shouldn't be appended. ASTERISK-25535 Change-Id: I7b00f3bdf4a5f3022e483d6ece602b1e8b12827c 2015-11-11 04:16 +0000 [07583c2888] Steve Davies * Further fixes to improper usage of scheduler When ASTERISK-25449 was closed, a number of scheduler issues mentioned in the comments were missed. These have since beed raised in ASTERISK-25476 and elsewhere. This patch attempts to collect all of the scheduler issues discovered so far and address them sensibly. ASTERISK-25476 #close Change-Id: I87a77d581e2e0d91d33b4b2fbff80f64a566d05b 2015-11-11 11:04 +0000 [b818d70533] Joshua Colp * threadpool: Handle worker thread transitioning to dead when going active. This change adds handling of dead worker threads when moving them to be active. When this happens the worker thread is removed from both the active and idle threads container. If no threads are able to be moved to active then the pool grows as configured. A unit test has also been added which thrashes the idle timeout and thread activation to exploit any race conditions between the two. ASTERISK-25546 #close Change-Id: I6c455f9a40de60d9e86458d447b548fb52ba1143 2015-11-10 09:27 +0000 [4bf84459c7] Alexander Traud * rtp_engine: Init a format-attribute module to its RFC defaults. Previously, format-attribute modules relied on an existing fmtp line in SDP negotiation. However, fmtp is optional for several formats like the Opus Codec. Now, the format-attribute module is called with an empty fmtp, which allows the module to initialise itself to RFC defaults. Furthermore now, Asterisk is able to differentiate between internally and externally created formats. ASTERISK-25537 #close Change-Id: I28f680cef7fdf51c0969ff8da71548edad72ec52 2015-11-09 03:04 +0000 [1bff400df7] Alexander Traud * ast_format_cap_get_names: To display all formats, the buffer was increased. ASTERISK-25533 #close Change-Id: Ie1a9d1a6511b3f1a56b93d04475fbf8a4e40010a 2015-11-09 07:04 +0000 [f3ac4d8090] Alexander Traud * ast_format_cap: Avoid format creation on module load, use cache instead. Since Asterisk 13, formats are immutable and cached. However while loading a module like chan_sip, some formats were created instead using cached ones. ASTERISK-25535 #close Change-Id: I479cdc220d5617c840a98f3389b3bd91e91fbd9b 2015-11-06 07:54 +0000 [6d1bdb9d3b] Walter Doekes * func_callerid: Document that CALLERID(pres) is available. CALLERPRES() says that it's deprecated in favor of CALLERID(num-pres) and CALLERID(name-pres). But for channel driver that don't make a distinction between the two (e.g. SIP), it makes more sense to get/set both at once. This change reveals the availability of CALLERID(pres), CONNECTEDLINE(pres), REDIRECTING(orig-pres), REDIRECTING(to-pres) and REDIRECTING(from-pres). ASTERISK-25373 #close Change-Id: I5614ae4ab7d3bbe9c791c1adf147e10de8698d7a 2015-11-06 07:52 +0000 [8410336681] Walter Doekes * docs: Fix a few typo's in app docs (more then, resourse). Change-Id: Iba57efadf6c0b822e762c7a001bc89611d98afd7 2015-11-06 07:36 +0000 [0d425f2eb4] Walter Doekes * xmldoc: Improve xmldoc wrapping of 'core show ...' output. Previously, the wrapping did both lookahead and lookback, which, together with color escape sequences, caused some lines to be wrapped way earlier than other lines. This led to inconsistent output. This simplifies the wrapping code and makes it more sane: if maxcolumns is hit, we simply jump back to the last space and wrap there. ASTERISK-25527 #close Change-Id: I56d01c6f9a812642b1b05535c98d4db48d17c957 2015-11-06 06:57 +0000 [33752e0837] Sean Bright (license #5060) * res_pjsip_sdp_rtp: Enable Opus to be negotiated via SIP/SDP. In SIP/SDP, Opus has two channels always (see RFC 7587 section 7). The actual amount of channels is negotiated in-band. Therefore now, the Opus codec and its attribute rtpmap are registered with two channels. ASTERISK-24779 #close Reported by: PowerPBX Tested by: Alexander Traud patches: asterisk-24779.patch submitted by Sean Bright (license #5060) Change-Id: Ic7ac13cafa1d3450b4fa4987350924b42cbb657b 2015-11-03 16:19 +0000 [6ff48319d9] Jonathan Rose * taskprocessor: Add high water mark warnings If a taskprocessor's queue grows large, this can indicate that there may be a problem with tasks not leaving the processor or else that the number of available task processors for a given type of task is too low. This patch makes it so that if a taskprocessor's task queue grows above 100 queued tasks that it will emit a warning message. Warning messages are emitted only once per task processor. ASTERISK-25518 #close Reported by: Jonathan Rose Change-Id: Ib1607c35d18c1d6a0575b3f0e3ff5d932fd6600c 2015-11-04 14:31 +0000 [506aea26e6] Matt Jordan * main/dial: Protect access to the format_cap structure of the requesting channel When a dial attempt is made that involves a requesting channel, we previously were not: a) Protecting access to the native format capabilities structure on the requesting channel. That is inherently unsafe. b) Reference bumping the lifetime of the format capabilities structure. In both cases, something else could sneak in, blow away the format capabilities, and we'd be holding onto an invalid format_cap structure. When the newly created channel attempts to construct its format capabilities, things go poorly. This patch: a) Ensures that we get a reference to the native format capabilities while the requesting channel is locked b) Holds a reference to the native format capabilities during the creation of the new channel. ASTERISK-25522 #close Change-Id: I0bfb7ba8b9711f4158cbeaae96edf9626e88a54f 2015-10-30 22:57 +0000 [d098d00424] Corey Farrell * Fix cli display of build options. A previous commit reduced the AST_BUILDOPTS compiler define to only include options that affected ABI. This included some options that were previously displayed by cli "core show settings". This change corrects the CLI display while still restricting buildopts.h to ABI effecting options only. ASTERISK-25434 #close Reported by: Rusty Newton Change-Id: Id07af6bedd1d7d325878023e403fbd9d3607e325 2015-11-03 11:15 +0000 [afec1b1b64] Matt Jordan * res_pjsip/location: Destroy contact_status objects on contact deletion The contact_status Sorcery objects are currently not destroyed when a contact is deleted. This causes the contact's last known RTT/status to be 'sticky' when the contact itself may no longer exist. This patch causes the contact_status objects associated with both dynamic and static contacts to be destroyed if the AoR holding those contacts is also destroyed (or via other paths where a contact may be deleted.) Change-Id: I7feec8b9278cac3c5263a4c0483f4a0f3b62426e 2015-11-03 10:58 +0000 [715f770c9f] Matt Jordan * pjsip_configuration: On delete, remove the persistent version of an endpoint When an endpoint is deleted (such as through an API), the persistent endpoint currently continues to lurk around. While this isn't harmful from a memory consumption perspective - as all persistent endpoints are reclaimed on shutdown - it does cause Stasis endpoint related operations to continue to believe that the endpoint may or may not exist. This patch causes the persistent endpoint related to a PJSIP endpoint to be destroyed if the PJSIP endpoint is deleted. Change-Id: I85ac707b4d5e6aad882ac275b0c2e2154affa5bb 2015-11-03 08:15 +0000 [f0f190af08] Matt Jordan * main/stasis_endpoints: Fix ContactStatusChange JSON for roundtrip_usec field The JSON packing for the ContactStatusChange event forgot to include the roundtrip_usec field. As a result, the field never showed up in any event, even when the data was available. This patch corrects that error by properly packing the JSON blob with the data. Change-Id: I8df80da659a44010afbd48f645967518ff5daa17 2015-11-02 20:24 +0000 [0393bd6bed] Corey Farrell * chan_sip: Allow websockets to be disabled. This patch adds a new setting "websockets_enabled" to sip.conf. Setting this to false allows chan_sip to be used without causing conflicts with res_pjsip_transport_websocket. ASTERISK-24106 #close Reported by: Andrew Nagy Change-Id: I04fe8c4f2d57b2d7375e0e25826c91a72e93bea7 2015-11-02 17:19 +0000 [6fbffe42e1] Mark Michelson * res_pjsip: Set threadpool max size default to 50. During a stress test of subscriptions, a huge blast of subscription-related traffic resulted in the threadpool expanding to a ridiculous number of threads. The balooning of threads resulted in an increase of memory, which led to a crash due to being out of memory. An easy fix for the particular test was to limit the size of the threadpool, thus reining in the amount of memory that would be used. It was decided that there really is no downside to having a non-infinite default value for the maximum size of the threadpool, so this change introduces 50 threads as the maximum threadpool size for the SIP threadpool. ASTERISK-25513 #close Reported by John Bigelow Change-Id: If0b9514f1d9b172540ce1a6e2f2ffa1f2b6119be 2015-11-02 06:57 +0000 [11e54b1932] Matt Jordan * pjsip_options: Schedule/unschedule qualifies on AoR creation/destruction When an AoR is created or destroyed dynamically, the scheduled OPTIONS requests that qualify the contacts on the AoR are not necessarily started or destroyed, particularly for persistent contacts created for that AoR. This patch adds create/update/delete sorcery observers for an AoR, which schedule/unschedule the qualifies as expected. Change-Id: Ic287ed2e2952a7808ee068776fe966f9554bdf7d 2015-10-30 13:22 +0000 [118d628e08] Matt Jordan * Makefile: Add a rule 'basic-pbx' that installs the Basic PBX configs This patch adds a rule for installing the Super Awesome Company based 'Basic PBX' configuration files. As part of adding this rule, a bit of the content that makes up installing the configuration files under the 'samples' target was refactored into a make subroutine for usage by additional later config make targets. Change-Id: I6c2e27906f73e2919a2b691da0be20ae70302404 2015-10-29 08:28 +0000 [9a021a42ad] Joshua Colp * res_pjsip_pubsub: Fix assertion when UAS dialog creation fails. When compiled with assertions enabled one will occur when destroying the subscription tree when UAS dialog creation fails. This is because the code assumes that a dialog will always exist on a subscription tree when in reality during this specific scenario it won't. This change makes it so a dialog is not removed from the subscription tree if it is not present. ASTERISK-25505 #close Change-Id: Id5c182b055aacc5e66c80546c64804ce19218dee 2015-10-26 11:42 +0000 [1256aedf66] Alexander Traud * chan_sip: Do not send all codecs on INVITE. Since version 13, Asterisk sent all allowed codecs as callee, even when the caller did not request/support them. In case of dynamic RTP payloads, this led to the same ID for different codecs, which is not allowed by SIP/SDP. Now, the intersection between the requested and the supported codecs is send again. ASTERISK-24543 #close Change-Id: Ie90cb8bf893b0895f8d505e77343de3ba152a287 2015-10-24 13:08 +0000 [5f593e7c38] gtjoseph * build: GCC 5.1.x catches some new const, array bounds and missing paren issues Fixed 1 issue in each of the affected files. ASTERISK-25494 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: I818f149cd66a93b062df421e1c73c7942f5a4a77 2015-10-20 16:02 +0000 [162acd45f7] gtjoseph * res_pjsip: Add "like" processing to pjsip list and show commands Add the ability to filter output from pjsip list and show commands using the "like" predicate like chan_sip. For endpoints, aors, auths, registrations, identifyies and transports, the modification was a simple change of an ast_sorcery_retrieve_by_fields call to ast_sorcery_retrieve_by_regex. For channels and contacts a little more work had to be done because neither of those objects are true sorcery objects. That was just removing the non-matching object from the final container. Of course, a little extra plumbing in the common pjsip_cli code was needed to parse the "like" and pass the regex to the get_container callbacks. Some of the get_container code in res_pjsip_endpoint_identifier was also refactored for simplicity. ASTERISK-25477 #close Reported by: Bryant Zimmerman Tested by: George Joseph Change-Id: I646d9326b778aac26bb3e2bcd7fa1346d24434f1 2015-10-21 11:51 +0000 [c58091737d] Kevin Harwell * res_pjsip_outbound_registration: registration stops due to fatal 4xx response During outbound registration it is possible to receive a fatal (any permanent/ non-temporary 4xx, 5xx, 6xx) response from the registrar that is simply due to a problem with the registrar itself. Upon receiving the failure response Asterisk terminates outbound registration for the given endpoint. This patch adds an option, 'fatal_retry_interval', that when set continues outbound registration at the given interval up to 'max_retries' upon receiving a fatal response. ASTERISK-25485 #close Change-Id: Ibc2c7b47164ac89cc803433c0bbe7063bfa143a2 2015-10-22 17:07 +0000 [ebe69dee0d] Mark Michelson * format_cap: Detect vector allocation failures. A crash was seen on a system that ran out of memory due to Asterisk not checking for vector allocation failures in format_cap.c. With this change, if either of the AST_VECTOR_INIT calls fail, we will return a value indicating failure. Change-Id: Ieb9c59f39dfde6d11797a92b45e0cf8ac5722bc8 2015-10-02 15:32 +0000 [3b19efefef] Mark Michelson * res_pjsip_pubsub: Prevent sending NOTIFY on destroyed dialog. A certain situation can result in our attempting to send a NOTIFY on a destroyed dialog. Say we attempt to send a NOTIFY to a subscriber, but that subscriber has dropped off the network. We end up retransmitting that NOTIFY until the appropriate SIP timer says to destroy the NOTIFY transaction. When the pjsip evsub code is told that the transaction has been terminated, it responds in kind by alerting us that the subscription has been terminated, destroying the subscription, and then removing its reference to the dialog, thus destroying the dialog. The problem is that when we get told that the subscription is being terminated, we detect that we have not sent a terminating NOTIFY request, so we queue up such a NOTIFY to be sent out. By the time that queued NOTIFY gets sent, the dialog has been destroyed, so attempting to send that NOTIFY can result in a crash. The fix being introduced here is actually a reintroduction of something the pubsub code used to employ. We hold a reference to the dialog and wait to decrement our reference to the dialog until our subscription tree object is destroyed. This way, we can send messages on the dialog even if the PJSIP evsub code wants to terminate earlier than we would like. In doing this, some NULL checks for subscription tree dialogs have been removed since NULL dialogs are no longer actually possible. Change-Id: I013f43cddd9408bb2a31b77f5db87a7972bfe1e5 2015-09-29 14:53 +0000 [0a346f095f] Mark Michelson * res_pjsip_pubsub: Ensure dialog lock balance. When sending a NOTIFY, we lock the dialog and then unlock the dialog when finished. A recent change made it so that the subscription tree's dialog pointer will be set NULL when sending the final NOTIFY request out. This means that when we attempt to unlock the dialog, we pass a NULL pointer to pjsip_dlg_dec_lock(). The result is that the dialog remains locked after we think we have unlocked it. When a response to the NOTIFY arrives, the monitor thread attempts to lock the dialog, but it cannot because we never released the dialog lock. This results in Asterisk being unable to process incoming SIP traffic any longer. The fix in this patch is to use a local pointer to save off the pointer value of the subscription tree's dialog when locking and unlocking the dialog. This way, if the subscription tree's dialog pointer is NULLed out, the local pointer will still have point to the proper place and the dialog lock will be unlocked as we expect. Change-Id: I7ddb3eaed7276cceb9a65daca701c3d5e728e63a 2015-09-28 16:36 +0000 [ad39508095] Mark Michelson * res_pjsip_pubsub: Prevent crashes on final NOTIFY. The SIP dialog is removed from the subscription tree when the final NOTIFY is sent. However, after the final NOTIFY is sent, the persistence update function still attempts to access the cseq from the dialog, resulting in a crash. This fix removes the subscription persistence at the same time that the dialog is removed from the subscription tree. This way, there is no attempt to update persistence when the subscription is being destroyed. Change-Id: Ibb46977a6cef9c51dc95f40f43446e3d11eed5bb 2015-09-17 17:28 +0000 [067f408760] Mark Michelson * res_pjsip_pubsub: Remove serializer when sending final NOTIFY. There have been crashes seen where a taskprocessor's listener is NULL unexpectedly. Looking at backtraces, the problem was specifically seen in PJSIP serializers. Subscriptions make the mistake of removing a serializer from a dialog during subscription tree destruction. Since subscription trees are reference-counted, guaranteeing the circumstances behind the destruction are not possible. This makes it so that the dialog serializer can be removed while not holding the dialog lock. This makes it possible for the distributor to get a pointer to the dialog serializer and have that serializer get freed out from under it. The fix for this is to remove the serializer from a subscription dialog when sending the final NOTIFY. This guarantees that the serializer is removed with the dialog lock held. By doing this, we guarantee that if the distributor gains access to the dialog's serializer, it will not be possible for the serializer to get freed by another thread. Change-Id: I21f5dac33529f65cec45679bdace60670800ff66 2015-09-02 09:14 +0000 [1bcc592765] Mark Michelson * res_pjsip_pubsub: Fix crash on destruction of empty subscription tree. If an old persistent subscription is recreated but then immediately destroyed because it is out of date, the subscription tree will have no leaf subscriptions on it. This was resulting in a crash when attempting to destroy the subscription tree. A simple NULL check fixes this problem. Change-Id: I85570b9e2bcc7260a3fe0ad85904b2a9bf36d2ac 2015-09-01 15:47 +0000 [b3cc2bd7df] Mark Michelson * res_pjsip_pubsub: Solidify lifetime and ownership of objects. There have been crashes and general instability seen in the pubsub code, so this patch introduces three changes to increase the stability. First, the ownership model for subscriptions has been modified. Due to RLS, subscriptions are stored in memory as a tree structure. Prior to my patch, the PJSIP subscription was the owner of the subscription tree. When the PJSIP subscription told us that it was terminating, we started destroying the subscription tree along with all of the individual leaf subscriptions that belong to the tree. The problem with this model is that the two actors in play here, the PJSIP subscription and the individual leaf subscriptions, need to have joint ownership of the subscription tree. So now, the PJSIP subscription and the individual leaf subscriptions each have a reference to the subscription tree. This way, we will not actually free memory until no players are left that care. The PJSIP subscription is a bigger stakeholder, in that if the PJSIP subscription's reference to the subscription tree is removed, the subscription tree instructs the leaf subscriptions to shut down and drop their references to the subscription tree when possible. The individual leaf subscriptions, upon being told to shut down, can drop their stasis subscriptions or whatever they use to learn of new state, and then drop their reference to the subscription tree once they are ready to die. Second, the lifetime of a PJSIP subscription's reference to our subscription tree has been altered. As I learned from doing a deep dive, the PJSIP evsub code can tell Asterisk multiple times that the subscription has been terminated, and not all of these times are especially helpful. I have altered the message flow that we use for SIP subscriptions such that we will always drop the PJSIP subscription's reference to the subscription tree when we send the NOTIFY that terminates a SIP subscription. This also means that we will now queue NOTIFY requests to be sent after responding to incoming SUBSCRIBEs so that we can have predictable state changes from the PJSIP evsub code. Third, the synchronization of operations has been improved. PJSIP can call into our code from a serializer thread (e.g. upon receiving an incoming request) or from the monitor thread (e.g. when a subscription times out). Because of this, there is the possibility of competing threads stepping on each other. PJSIP attempts to do some synchronization on its own by always keeping the dialog lock held when it calls into us. However, since we end up pushing tasks into the serializer, the result was that serialized operations were not grabbing the dialog lock and could, as a result, step on something that was being attempted by a different thread. Now we ensure that serialized operations grab the dialog lock, then check for extenuating circumstances, then proceed with their operation if they can. Change-Id: Iff2990c40178dad9cc5f6a5c7f76932ec644b2e5 2015-10-19 15:28 +0000 [c8c65dfa41] Richard Mudgett * strings.c: Fix __ast_str_helper() to always return a terminated string. Users of functions which call __ast_str_helper() such as the ones listed below are likely to not check the return value for failure so ensuring that the string is always nil terminated is a good safety measure. ast_str_set_va() ast_str_append_va() ast_str_set() ast_str_append() Change-Id: I36ab2d14bb6015868b49329dda8639d70fbcae07 2015-10-19 15:27 +0000 [b271d4a28a] Richard Mudgett * Add missing failure checks to ast_str_set_va() callers. Change-Id: I0c2cdcd53727bdc6634095c61294807255bd278f 2015-10-21 11:44 +0000 [f2725c8b77] Joshua Colp * res_pjsip: Move URI validation to use time. In a realtime based system with a limited number of threadpool threads it is possible for a deadlock to occur. This happens when permanent endpoint state is updated, which will cause database queries to be done. These queries may result in URI validation being done which is done synchronously using a PJSIP thread. If all PJSIP threads are in use processing traffic they themselves may be blocked waiting to get the permanent endpoint container lock when identifying an endpoint. This change moves URI validation to occur at use time instead of configuration time. While this comes at a cost of not seeing a problem until you use it it does solve the underlying deadlock problem. ASTERISK-25486 #close Change-Id: I2d7d167af987d23b3e8199e4a68f3359eba4c76a 2015-10-21 08:08 +0000 [84ff075d41] Alexander Traud * format: Update the maximum packetization time for iLBC 30. In September 2006, the maximum packetization time (ptime) were set to such a low value, packetization was disabled for many codecs actually. This was fixed for many codecs but not for iLBC 30. This enables packetization for iLBC which can be enabled for example via allow=ilbc:60,gsm,alaw,ulaw in the file sip.conf. ASTERISK-7803 Change-Id: I2ef90023d35efb7cb8fe96ed74f53f6846ffad12 2015-10-21 09:51 +0000 [869ef2a8ee] Alexander Traud * chan_sip: Fix autoframing=yes. With Asterisk 13, the structures ast_format and ast_codec changed. Because of that, the paketization timing (framing) of the RTP channel moved away from the formats/codecs. In the course of that change, the ptime of the callee was not honored anymore, when the optional autoframing was enabled. ASTERISK-25484 #close Change-Id: Ic600ccaa125e705922f89c72212c698215d239b4 2015-10-20 22:24 +0000 [9fd2adc204] Matt Jordan * rest-api-templates: Wikify error code response reasons Error response code descriptions may contain wiki markup that need to be escaped. Without this patch, Confluence will reject the document being sent and the responsible script will raise an exception. Change-Id: I21fcb66fee7f6332381f2b99b1b0195dff215ee5 2015-10-20 12:06 +0000 [72cbb6df55] Matt Jordan * funcs/func_holdintercept: Actually add the HOLD_INTERCEPT function When ab803ec342 was committed, it accidentally forgot to actually *add* the HOLD_INTERCEPT function. This highlights two interesting points: * Gerrit forces you to put the patch as it is going to into the repo up for review, which Review Board did not. Yay Gerrit. * No one apparently bothered to use this feature, or else they don't know about it. I'm going to go with the latter explanation. ASTERISK-24922 Change-Id: Ida38278f259dd07c334a36f9b7d5475b5db72396 2015-10-19 19:59 +0000 [9fc9777fa3] Matt Jordan * contrib/scripts/autosupport: Update for Asterisk 13 This patch adds some minor tweaks for autosupport to update it for Asterisk 13. This includes: * Finally removing most references to Zaptel * Adding support for some additional 'core' commands, and fixing nomenclature that generally hasn't been used for some time * Adding some PJSIP/SIP commands to gather endpoints/peers and active channels Change-Id: Ic997b418cbd9313588b6608e50f47b0ce6f4f1f1 2015-10-14 14:15 +0000 [dc6ec661b3] mdu113 * res_config_pgsql.c: Fix deadlock loading realtime configuration. On v13, loading several thousand PJSIP endpoints on Asterisk start causes a deadlock most of the time. Thanks to mdu113 for discovering that there was a call to pgsql_exec() not protected by the pgsql_lock reentrancy lock. {quote} I believe a code path exists that attempts to use pgsql connection without locking pgsql_lock. I believe what happens during that deadlock that I see is two concurrent threads are both attempting to send query to pgsql, one of the thread is using a code path without locking pgsql_lock. If they managed to send queries at the same time, it seems postgres ignores one of the queries and replies only to the one of them. If it happens so that the thread holding the lock didn't receive the reply it will wait for it (and hold the lock) forever (or at least for very long time), thus completely blocking all access to db. {quote} * Added missing reentrancy locking around pgsql_exec() in find_table(). * Moved unlock of pgsql_lock in unload_module() to avoid locking inversion between the psql_tables list lock and the pgsql_lock. ASTERISK-25455 #close Reported by: mdu113 Patches: res_config_pgsql.c-connlock2.diff (license #5543) patch uploaded by mdu113 Change-Id: Id9e7cdf8a3b65ff19964b0cf942ace567938c4e2 2015-10-13 14:13 +0000 [f8707ae9a5] Olle Johansson (License 5267) * channels/chan_sip: Set cause code to 44 on RTP timeout To quote Olle: "When issuing a hangup due to RTP timeouts the cause code is not set. I have selected 44 based on Cisco's implementation..." ASTERISK-25135 #close Reported by: Olle Johansson patches: rtp-timeout-cause-1.8.diff uploaded by Olle Johansson (License 5267) Change-Id: Ia62100c55077d77901caee0bcae299f8dc7375fc 2015-10-10 15:20 +0000 [486b172b50] Ivan Poddubny * Build: Add menuselect options for using compiler sanitizers This patch adds menuselect options for building Asterisk with various sanitizers provided by gcc and clang. When one of *SANITIZER flags is set in menuselect, the appropriate option is added to CFLAGS ad LDFLAGS for the build. Information on sanitizers in the project wiki: https://github.com/google/sanitizers/wiki GCC Manual: https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html Clang Compiler User's Manual: http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation ASTERISK-24718 #close Reported by: Badalian Vyacheslav Change-Id: Iafa51b792b7bcb20e848b99d16cf362d08590fa0 2015-10-12 11:21 +0000 [e14023ca35] Richard Mudgett * config.c: Fix off-nominal memory leak. Change-Id: I06e346e9a5c63cc5071e7eda537310c4b43bffe0 2015-10-12 11:20 +0000 [a99e821520] Richard Mudgett * config.c: Fix potential memory corruption after [section](+). The memory corruption could happen if the [section](+) is the last section in the file with trailing comments. In this case process_text_line() has left *last_cat is set to newcat and newcat is destroyed. Change-Id: I0d1d999f553986f591becd000e7cc6ddfb978d93 2015-10-12 11:21 +0000 [8d31d2526b] Richard Mudgett * config.c: Fix #include after [section](+). An #include right after a [section](+) would associate any variable assignments before a new section in the #include with the wrong section. * Fix section association by setting the current section to the appended section. * Fix '+' and '!' section flag interaction corner case depending upon which flag came first. If the '!' came first then it would be ignored. If the '!' came after then it would affect the appended section. The '!' will now no longer be ignored. ASTERISK-25461 #close Reported by: Sean Pimental Change-Id: Ic9d3191c8758048e2cbce6432f854b32531731c3 2015-10-06 18:01 +0000 [3329c714f7] Richard Mudgett * res_pjsip: Fix deadlock when sending out-of-dialog requests. The struct send_request_wrapper has a pjsip lock associated with it that is created non-recursive. There is a code path for the struct send_request_wrapper lock that will attempt to lock it recursively. The reporter's deadlock showed that the thread calling endpt_send_request() deadlocked itself right after the wrapper object got created. Out-of-dialog requests such as MESSAGE, qualify OPTIONS, and unsolicited MWI NOTIFY messages can hit this deadlock. * Replaced the struct send_request_wrapper pjsip lock with the mutex lock that can come with an ao2 object since all of Asterisk's mutexes are recursive. Benefits include removal of code maintaining the pjsip non-recursive lock since ao2 objects already know how to maintain their own lock and the lock will show up in the CLI "core show locks" output. ASTERISK-25435 #close Reported by: Dmitriy Serov Change-Id: I458e131dd1b9816f9e963f796c54136e9e84322d 2015-10-06 11:05 +0000 [a1435aa3fa] Stefan Engström * res/res_rtp_asterisk.c: Fix incorrect assignment of frame->subclass.frame_ending In ast_rtp_read, the value of the variable 'mark' which we try to assign to a frame->subclass.frame_ending may be 0, 1 or (1<<23), but we should translate it to 0 or 1. ASTERISK-25451 #close Change-Id: I53bdf5c026041730184a6a809009c028549ce626 2015-10-07 01:24 +0000 [3357678b94] Ivan Poddubny * func_presencestate: Return "not_set" when no data is set in AstDB Return AST_PRESENCE_NOT_SET when CustomPresence AstDB key does not exist, i.e. when a new CustomPresence is added in the dialplan. ASTERISK-25400 #close Reported by: Andrew Nagy Change-Id: I6fb17b16591b5a55fbffe96f3994ec26b1b1723a 2015-10-06 20:43 +0000 [b714b2152d] Matt Jordan * res/res_rtp_asterisk: Fix assignment after ao2 decrement When we decide we will no longer schedule an RTCP write, we remove the reference to the RTP instance, then assign -1 to the stored scheduler ID in case something else comes along and wants to see if anything is scheduled. That scheduler ID is on the RTP instance. After 60a9172d7ef2 was merged to fix the regression introduced by 3cf0f29310, this improper assignment on a potentially destroyed object started getting tripped on the build agents. Frankly, this should have been crashing a lot more often earlier. I can only assume that the timing was changed just enough by both changes to start actually hitting this problem. As it is, simply moving the assignment prior to the ao2 deference is sufficient to keep the RTP instance from being referenced when it is very, truly, aboslutely dead. (Note that it is still good practice to assign -1 to the scheduler ID when we know we won't be scheduling it again, as the ao2 deref *may* not always destroy the ao2 object.) ASTERISK-25449 Change-Id: Ie6d3cb4adc7b1a6c078b1c38c19fc84cf787cda7 2015-10-06 12:40 +0000 [f939e2bd48] Florian Sauerteig * chan_sip: Fix port parsing for IPv6 addresses in SIP Via headers. If a Via header containes an IPv6 address and a port number is ommitted, as it is the standard port, we now leave the port empty and to not set it to the value after the first colon of the IPv6 address. ASTERISK-25443 #close Change-Id: Ie3c2f05471cd006bf04ed15598589c09577b1e70 2015-10-05 16:53 +0000 [426263a64d] Richard Mudgett * chan_pjsip: Fix crash on reINVITE before initial INVITE completes. Apparently some endpoints attempt to send a reINVITE before completing the initial INVITE transaction. In this case PJSIP responds appropriately to the reINVITE with a 491 INVITE request pending. Unfortunately chan_pjsip is using the initial INVITE transaction state to determine if an INVITE is the initial INVITE or a reINVITE. Since the initial INVITE transaction has not been confirmed yet chan_pjsip thinks the reINVITE is an initial INVITE and starts another PBX thread on the channel. The extra PBX thread ensures that hilarity ensues. * Fix checks for a reINVITE on incoming requests to look for the presence of a to-tag instead of the initial INVITE transaction state. * Made caller_id_incoming_request() determine what to do if there is a channel on the session or not. After a channel is created it is too late to just store the new party id on the session because the session's party id has already been copied to the channel's caller id. ASTERISK-25404 #close Reported by: Chet Stevens Change-Id: Ie78201c304a2b13226f3a4ce59908beecc2c68be 2015-10-05 21:34 +0000 [50fa9ff997] Matt Jordan * Fix improper usage of scheduler exposed by 5c713fdf18f When 5c713fdf18f was merged, it allowed for scheduled items to have an ID of '0' returned. While this was valid per the documentation for the API, it was apparently never returned previously. As a result, several users of the scheduler API viewed the result as being invalid, causing them to reschedule already scheduled items or otherwise fail in interesting ways. This patch corrects the users such that they view '0' as valid, and a returned ID of -1 as being invalid. Note that the failing HEP RTCP tests now pass with this patch. These tests failed due to a duplicate scheduling of the RTCP transmissions. ASTERISK-25449 #close Change-Id: I019a9aa8b6997584f66876331675981ac9e07e39 2015-08-26 16:58 +0000 [8f777ab584] Debian Amtelco * chan_pjsip: Add Referred-By header to the PJSIP REFER packet. Some systems require the REFER packet to include a Referred-By header. If the channel variable SIPREFERREDBYHDR is set, it passes that value as the Referred-By header value. Otherwise, it adds the current dialog’s local info. Reported by: Dan Cropp Tested by: Dan Cropp Change-Id: I3d17912ce548667edf53cb549e88a25475eda245 2015-10-03 06:27 +0000 [74635b5638] Ivan Poddubny * manager: Fix GetConfigJSON returning invalid JSON When GetConfigJSON was introduced back in 1.6, it returned each section as an array of strings: ["key=value", "key2=value2"]. Afterwards, it was changed a few times and became ["key": "value", "key2": "value2"], which is not a correct JSON. This patch fixes that by constructing a JSON object {} instead of an array []. Also, the keys "istemplate" and "tempates" that are used to indicate templates and their inherited categories are now wrapped in quotes. ASTERISK-25391 #close Reported by: Bojan Nemčić Change-Id: Ibbe93c6a227dff14d4a54b0d152341857bcf6ad8 2015-09-30 17:28 +0000 [40c69e78f5] Richard Mudgett * res_sorcery_memory_cache.c: Fix deadlock with scheduler. A deadlock can happen when a sorcery object is being expired from the memory cache when at the same time another object is being placed into the memory cache. There are a couple other variations on this theme that could cause the deadlock. Basically if an object is being expired from the sorcery memory cache at the same time as another thread tries to update the next object expiration timer the deadlock can happen. * Add a deadlock avoidance loop in expire_objects_from_cache() to check if someone is trying to remove the scheduler callback from the scheduler. ASTERISK-25441 #close Change-Id: Iec7b0bdb81a72b39477727b1535b2539ad0cf4dc 2015-10-01 14:30 +0000 [dfeb513e85] Richard Mudgett * res_sorcery_memory_cache.c: Replace inline code with function. Make sorcery_memory_cache_close() call remove_all_from_cache() instead of partially inlining it. ASTERISK-25441 Change-Id: I1aa6cb425b1a4307096f3f914d17af8ec179a74c 2015-10-01 14:27 +0000 [ced0a2d71b] Richard Mudgett * res_sorcery_memory_cache.c: Shutdown in a less crash potential order. Basically you should shutdown in the opposite order of how you setup since later setup pieces likely depend on earlier setup pieces. e.g., Registering your external API with the rest of the system should be the last thing setup and the first thing unregistered during shutdown. Change-Id: I5715765b723100c8d3c2642e9e72cc7ad5ad115e 2015-09-30 17:27 +0000 [cc279eea11] Richard Mudgett * res_sorcery_memory_cache.c: Misc tweaks. Change-Id: I8cd32dffbb4f33bb0c39518d6e4c991e73573160 2015-09-30 17:27 +0000 [9af3b613f6] Richard Mudgett * res_sorcery_memory_cache.c: Made use OBJ_SEARCH_MASK. Change-Id: Ibca6574dc3c213b29cc93486e01ccd51f5caa46c 2015-09-30 13:42 +0000 [56ed7b9dd5] Joshua Colp * res_rtp_asterisk: Move "Set role" warning to be debug. In practice the set_role API callback can be invoked even when no ICE is present on an RTP instance. This can occur if ICE has not been enabled on it. ASTERISK-25438 #close Change-Id: I0e17e4316f0f0d7f095c78c3d4fd73a913b6ba69 2015-09-28 15:31 +0000 [ddebb217f0] Richard Mudgett * sched.c: Add warning about negative time interval request. Change-Id: Ib91435fb45b7f5f7c0fc83d0eec20b88098707bc 2015-09-29 21:15 +0000 Asterisk Development Team * asterisk 13.6.0-rc1 Released. 2015-09-29 16:12 +0000 [bba1c4066b] Kevin Harwell * Release summaries: Add summaries for 13.6.0-rc1 2015-09-29 16:08 +0000 [82c4aecdbb] Kevin Harwell * .version: Update for 13.6.0-rc1 2015-09-29 16:08 +0000 [bc18db7388] Kevin Harwell * .lastclean: Update for 13.6.0-rc1 2015-09-29 16:08 +0000 [b9c53f95e3] Kevin Harwell * realtime: Add database scripts for 13.6.0-rc1 2015-09-29 14:53 +0000 [d30939b6e8] Kevin Harwell * ARI: Changed version from 1.8.0 to 1.9.0 Change-Id: I510991c60d28d171f47c4b58bba4947f7fc71b13 2015-09-25 18:37 +0000 [5f19c9bade] Richard Mudgett * res/ari/config.c: Fix user sort compare function. Made use the ao2 sort compare template function and OBJ_SEARCH_xxx identifiers. Change-Id: Ic53005dc5aafa7a36c72300dd89b75fb63c92f4c 2015-09-25 17:26 +0000 [3a85764039] Richard Mudgett * res/ari/config.c: Optimize conf_alloc() object init. * Now conf_alloc() has more off nominal error checking. * Eliminated RAII_VAR() use in conf_alloc(). * Eliminated a dubius shortcut when destroying cfg->general in conf_destructor() that would cause a crash if cfg->general failed to get allocated. * Add some ACO registration section comments. Change-Id: Ia40c2b1b2d0777d641605118ae019c5a73865e1a 2015-09-25 16:48 +0000 [028033e5a8] Richard Mudgett * res/ari/config.c: Fix conf_alloc() object init. Need to finish initializing the string fields in the ao2 object before putting any default strings into them. ASTERISK-25383 #close Reported by: yaron nahum Change-Id: I9f7f3a03f0c4991a01593abf8697b9a587c0ea84 2015-09-27 20:45 +0000 [90165e306d] Matt Jordan * res/res_stasis: Fix accidental subscription to 'all' bridge topic When b99a7052621700a1aa641a1c24308f5873275fc8 was merged, subscribing to a NULL bridge will now cause app_subscribe_bridge to implicitly subscribe to all bridges. Unfortunately, the res_stasis control loop did not check that a bridge changing on a channel's control object was actually also non-NULL. As a result, app_subscribe_bridge will be called with a NULL bridge when a channel leaves a bridge. This causes a new subscription to be made to the bridge. If an application has also subscribed to the bridge, the application will now have two subscriptions: (1) The explicit one created by the app (2) The implicit one accidentally created by the control structure As a result, the 'BridgeDestroyed' event can be sent multiple times. This patch corrects the control loop such that it only subscribes an application to a new bridge if the bridge pointer is non-NULL. ASTERISK-24870 Change-Id: I3510e55f6bc36517c10597ead857b964463c9f4f 2015-09-04 13:51 +0000 [e1223ff6db] Scott Griepentrog * Scripts: check file versions of Asterisk and dependencies To help in diagnosing mismatched modules and libraries, this script scans for version, repository, and source information and reports what is found. ASTERISK-25376 #close Reported by: Ashley Sanders Change-Id: Ib0642d0fb96712476f59760d6d137a24633fe2d6 2015-09-24 14:56 +0000 [6b1e7583c1] Richard Mudgett * app_queue.c: Force COLP update if outgoing channel name changed. * When a call is answered and the outgoing channel name has changed then force a connected line update because the channel is no longer the same. The channel was masqueraded into by another channel. This is usually because of a call pickup. Note: Forwarded calls are handled in a controlled manner so the original channel name is replaced with the forwarded channel. ASTERISK-25423 #close Reported by: John Hardin Change-Id: Ie275ea9e99c092ad369db23e0feb08c44498c172 2015-09-24 14:20 +0000 [6bf304bf25] Richard Mudgett * app_queue.c: Factor out a connected line update routine. Replace inlined code with update_connected_line_from_peer(). ASTERISK-25423 Reported by: John Hardin Change-Id: I33bbd033596fcb0208d41d8970369b4e87b806f3 2015-09-24 13:27 +0000 [e36b5f1e8e] Richard Mudgett * app_dial.c: Make 'A' option pass COLP updates. While the 'A' option is playing the announcement file allow the caller and peer to exchange COLP update frames. ASTERISK-25423 Reported by: John Hardin Change-Id: Iac6cf89b56d26452c6bb88e9363622bbf23895f9 2015-09-24 12:59 +0000 [747bfac895] Richard Mudgett * app_dial.c: Force COLP update if outgoing channel name changed. * When a call is answered and the outgoing channel name has changed then force a connected line update because the channel is no longer the same. The channel was masqueraded into by another channel. This is usually because of a call pickup. Note: Forwarded calls are handled in a controlled manner so the original channel name is replaced with the forwarded channel. ASTERISK-25423 Reported by: John Hardin Change-Id: I2e01f7a698fbbc8c26344a59c2be40c6cd98b00c 2015-09-24 12:37 +0000 [14481d9aa0] Richard Mudgett * app_dial.c: Factor out a connected line update routine. Replace inlined code with update_connected_line_from_peer(). ASTERISK-25423 Reported by: John Hardin Change-Id: Ia14f18def417645cd7fb453e1bdac682630a5091 2015-09-23 17:41 +0000 [bbeda190c3] Richard Mudgett * app_dial.c: Remove some no-op code. Change-Id: Ice1884a94315d3cb7e3bbd47a9fba76a27276c54 2015-09-23 14:02 +0000 [f050fa76eb] Mark Michelson * logger: Prevent duplicate dynamic channels from being added. There was a problem observed where the "logger add channel" CLI command would allow for a channel with the same name to be added multiple times. This would result in each message being written out to the same file multiple times. The problem was due to the difference in how logger channel filenames are stored versus the format they are allowed to be presented when they are added. For instance, if adding the logger channel "foo" through the CLI, the result would be a logger channel with the file name /var/log/asterisk/foo being stored. So when trying to add another "foo" channel, "foo" would not match "/var/log/asterisk/foo" so we'd happily add the duplicate channel. The fix presented here is to introduce two new methods in the logger code: * make_filename(): given a logger channel name, this creates the filename for that logger channel. * find_logchannel(): given a logger channel name, this calls make_filename() and then traverses the list of logchannels in order to find a match. This change has made use of make_filename() and find_logchannel() throughout to more consistently behave. ASTERISK-25305 #close Reported by Mark Michelson Change-Id: I892d52954d6007d8bc453c3cbdd9235dec9c4a36 2015-09-24 14:49 +0000 [629458d349] Mark Michelson * Do not swallow frames on channels leaving bridges. When leaving a bridge, indications on a channel could be swallowed by the internal indication logic because it appears that the channel is on its way to be hung up anyway. One such situation where this is detrimental is when channels on hold are redirected out of a bridge. The AST_CONTROL_UNHOLD indication from the bridging code is swallowed, leaving the channel in question to still appear to be on hold. The fix here is to modify the logic inside ast_indicate_data() to not drop the indication if the channel is simply leaving a bridge. This way, channels on hold redirected out of a bridge revert to their expected "in use" state after the redirection. ASTERISK-25418 #close Reported by Mark Michelson Change-Id: If6115204dfa0551c050974ee138fabd15f978949 2015-09-22 17:08 +0000 [5f15cd93f0] Richard Mudgett * app_page.c: Fix crash when forwarding with a predial handler. Page uses the async method of dialing with the dial API. When a call gets forwarded there is no calling channel available. If the predial handler was set then the calling channel could not be put into auto-service for the forwarded call because it doesn't exist. A crash is the result. * Moved the callee predial parameter string processing to before the string is passed to the dial API rather than having the dial API do it. There are a few benefits do doing this. The first is the predial parameter string processing doesn't need to be done for each channel called by the dial API. The second is in async mode and the forwarded channel is to have the predial handler executed on it then the non-existent calling channel does not need to be present to process the predial parameter string. * Don't start auto-service on a non-existent calling channel to execute the predial handler when the dial API is in async mode and forwarding a call. ASTERISK-25384 #close Reported by: Chet Stevens Change-Id: If53892b286d29f6cf955e2545b03dcffa2610981 2015-09-03 21:19 +0000 [b50e372394] Matt Jordan * ARI: Add events for Contact and Peer Status changes This patch adds support for receiving events regarding Peer status changes and Contact status changes. This is particularly useful in scenarios where we are subscribed to all endpoints and channels, where we often want to know more about the state of channel technology specific items than a single endpoint's state. ASTERISK-24870 Change-Id: I6137459cdc25ce27efc134ad58abf065653da4e9 2015-09-04 12:24 +0000 [3502c0431d] Matt Jordan * res/res_stasis_device_state: Allow for subscribing to 'all' device state This patch adds support for subscribing to all device state changes. This is done either by subscribing to an empty device, e.g., 'eventSource=deviceState:', or by the WebSocket connection specifying that it wants all state in the system. ASTERISK-24870 Change-Id: I9cfeca1c9e2231bd7ea73e45919111d44d2eda32 2015-09-04 12:25 +0000 [4c9f613309] Matt Jordan * ARI: Add the ability to subscribe to all events This patch adds the ability to subscribe to all events. There are two possible ways to accomplish this: (1) On initial WebSocket connection. This patch adds a new query parameter, 'subscribeAll'. If present and True, Asterisk will subscribe the applications to all ARI events. (2) Via the applications resource. When subscribing in this manner, an ARI client should merely specify a blank resource name, i.e., 'channels:' instead of 'channels:12354'. This will subscribe the application to all resources of the 'channels' type. ASTERISK-24870 #close Change-Id: I4a943b4db24442cf28bc64b24bfd541249790ad6 2015-09-21 08:16 +0000 [ec514ad64d] Elazar Broad * core/logging: Fix logging to more than one syslog channel Currently, Asterisk will log to the last configured syslog channel in logger.conf. This is due to the fact that the final call to openlog() supersedes all of the previous calls. This commit removes the call to openlog() and passes the facility to ast_log_vsyslog(), along with utilizing the LOG_MAKEPRI macro to ensure that the message is routed to the correct facility and with the correct priority. ASTERISK-25407 #close Reported by: Elazar Broad Tested by: Elazar Broad Change-Id: Ie2a2416bc00cce1b04e99ef40917c2011953ddd2 2015-09-21 18:06 +0000 [aeddee39fb] Kevin Harwell * app_record: RECORDED_FILE variable not being populated The RECORDED_FILE variable is empty unless a '%d' is specified in the filename. This patch makes it so the variable is always set to the filename. ASTERISK-25410 #close Change-Id: I4ec826d8eb582ae2ad184e717be8668b74d37653 2015-09-16 08:22 +0000 [2bd27d1222] Joshua Colp * pbx: Update device and presence state when changing a hint extension. When changing a hint extension without removing the hint first the device state and presence state is not updated. This causes the state of the hint to be that of the previous extension and not the current one. This state is kept until a state change occurs as a result of something (presence state change, device state change). This change updates the hint with the current device and presence state of the new extension when it is changed. Any state callbacks which may have been added before the hint extension is changed are also informed of the new device and presence state if either have changed. ASTERISK-25394 #close Change-Id: If268f1110290e502c73dd289c9e7e7b27bc8432f 2015-09-17 16:34 +0000 [c94f46080f] Scott Griepentrog * CHAOS: avoid crash if string create fails Validate string buffer allocation before using them. ASTERISK-25323 Change-Id: Ib9c338bdc1e53fb8b81366f0b39482b83ef56ce0 2015-09-17 04:52 +0000 [b59c4d82b5] Walter Doekes * chan_sip: Fix From header truncation for extremely long CALLERID(name). The CALLERID(num) and CALLERID(name) and other info are placed into the `char from[256]` in initreqprep. If the name was too long, the addr-spec and params wouldn't fit. Code is moved around so the addr-spec with params is placed there first, and then fitting in as much of the display-name as possible. ASTERISK-25396 #close Change-Id: I33632baf024f01b6a00f8c7f35c91e5f68c40260 2015-09-17 16:59 +0000 [4cc59533b9] Richard Mudgett * CHAOS: res_pjsip_diversion avoid crash if allocation fails Validate ast_malloc buffer returned before using it in set_redirecting_value(). ASTERISK-25323 Change-Id: I15d2ed7cb0546818264c0bf251aa40adeae83253 2015-09-17 16:47 +0000 [4fb95bbc4e] Kevin Harwell * app_queue: AgentComplete event has wrong reason When a queued caller transfers an agent to another extension sometimes the raised AgentComplete event has a reason of "caller" and sometimes "transfer". Since a transfer has taken place this should always be transfer. This occurs because sometimes the stasis hangup event arrives before the transfer event thus writing a different reason out. With this patch, when a hangup event is received during a transfer it will check to see if the channel that is hanging up is part of a transfer. If so it will return and let the subsequently received transfer event handler take care of the cleanup. ASTERISK-25399 #close Change-Id: Ic63c49bd9a5ed463ea7a032fd2ea3d63bc81a50d 2015-09-17 13:09 +0000 [fb6b5c684b] Scott Griepentrog * PJSIP: avoid crash when getting rtp peer Although unlikely, if the tech private is returned as a NULL, chan_pjsip_get_rtp_peer() would crash. ASTERISK-25323 Change-Id: Ie231369bfa7da926fb2b9fdaac228261a3152e6a 2015-09-17 11:31 +0000 [6409e7b11a] Kevin Harwell * app_queue: Crash when transferring During some transfer scenarios involving queues Asterisk would sometimes crash when trying to obtain a channel snapshot (could happen on caller or member channels). This occurred because the underlying channel had already disappeared when trying to obtain the latest snapshot. This patch adds a reference to both the member and caller channels that extends to the lifetime of the queue'd call, thus making sure the channels will always exist when retrieving the latest snapshots. ASTERISK-25185 #close Reported by: Etienne Lessard Change-Id: Ic397fa68fb4ff35fbc378e745da9246a7b552128 2015-09-16 17:36 +0000 [fe5077b1f8] Mark Michelson * res_pjsip_pubsub: Eliminate race during initial NOTIFY. There is a slim chance of a race condition occurring where two threads can both attempt to manipulate the same area. Thread A can be handling an incoming initial SUBSCRIBE request. Thread A lets the specific subscription handler know that the subscription has been established. At this point, Thread B may detect a state change on the subscribed resource and queue up a notification task on Thread C, the subscription serializer thread. Now Thread A attempts to generate the initial NOTIFY request to send to the subscriber at the same time that Thread C attempts to generate a state change NOTIFY request to send to the subscriber. The result is that Threads A and C can step on the same memory area, resulting in a crash. The crash has been observed as happening when attempting to allocate more space to hold the body for the NOTIFY. The solution presented here is to queue the subscription establishment and initial NOTIFY generation onto the subscription serializer thread (Thread C in the above scenario). This way, there is no way that a state change notification can occur before the initial NOTIFY is sent, and if there is a quick succession of NOTIFYs, we can guarantee that the two NOTIFY requests will be sent in succession. Change-Id: I5a89a77b5f2717928c54d6efb9955e5f6f5cf815 2015-08-28 15:42 +0000 [b88c54fa4b] Alexander Traud * translate: Fix transcoding while different in frame size. When Asterisk translates between codecs, each with a different frame size (for example between iLBC 30 and Speex-WB), too large frames were created by ast_trans_frameout. Now, ast_trans_frameout is called with the correct frame length, creating several frames when necessary. Affects all transcoding modules which used ast_trans_frameout: GSM, iLBC, LPC10, and Speex. ASTERISK-25353 #close Change-Id: I2e229569d73191d66a4e43fef35432db24000212 2015-09-10 17:19 +0000 [5c713fdf18] Mark Michelson * scheduler: Use queue for allocating sched IDs. It has been observed that on long-running busy systems, a scheduler context can eventually hit INT_MAX for its assigned IDs and end up overflowing into a very low negative number. When this occurs, this can result in odd behaviors, because a negative return is interpreted by callers as being a failure. However, the item actually was successfully scheduled. The result may be that a freed item remains in the scheduler, resulting in a crash at some point in the future. The scheduler can overflow because every time that an item is added to the scheduler, a counter is bumped and that counter's current value is assigned as the new item's ID. This patch introduces a new method for assigning scheduler IDs. Instead of assigning from a counter, a queue of available IDs is maintained. When assigning a new ID, an ID is pulled from the queue. When a scheduler item is released, its ID is pushed back onto the queue. This way, IDs may be reused when they become available, and the growth of ID numbers is directly related to concurrent activity within a scheduler context rather than the uptime of the system. Change-Id: I532708eef8f669d823457d7fefdad9a6078b99b2 2015-08-21 21:50 +0000 [865377fc38] Rodrigo Ramírez Norambuena * chan_sip.c: Validation on module reload Change validation on reload module because now used the cli function for reload. The sip_reload() function never fail and ever return NULL for this reason on reload() now use the call the sip_reload() and return AST_MODULE_LOAD_SUCCESS. This problem is dectected on reload by PUT method on ARI, getting always 404 http code when the module is reloaded. ASTERISK-25325 #close Reporte by: Rodrigo Ramírez Norambuena Change-Id: I41215877fb2cfc589e0d4d464000cf6825f4d7fb 2015-08-21 17:39 +0000 [e75aff53e6] Richard Mudgett * res_pjsip_pubsub.c: Mark ast_sip_create_subscription() as not used. Change-Id: I2b8db18eac36c01a5c7eb9467699124e203fd093 2015-09-09 12:24 +0000 [4d91d01df1] Richard Mudgett * res_pjsip_pubsub.c: Add some notification comments. Change-Id: Ie62ff1f4b7adc1a12fa0303f53926af249b25e20 2015-08-21 18:01 +0000 [f36a9d1221] Richard Mudgett * res_pjsip_pubsub.c: Set dlg_status code instead of sending SIP response. We should not try to send a SIP response message because we may be restoring a persistent subscription where we are not responding to a SIP request. Change-Id: Id89167ef90320c5563f37e632db0dda6cb9e7dec 2015-08-21 17:40 +0000 [94582f8fab] Richard Mudgett * res_pjsip_pubsub.c: Fix off-nominal memory leak. Fix off-nominal visited vector leak in build_resource_tree(). Change-Id: If0399c7941c9c0b1038bcfb7b9a371760977831c 2015-08-21 15:26 +0000 [8b3ed52239] Richard Mudgett * res_pjsip_pubsub.c: Fix one byte buffer overrun error. ast_sip_pubsub_register_body_generator() did not account for the null terminator set by sprintf() in the allocated output buffer. Change-Id: I388688a132e479bca6ad1c19275eae0070969ae2 2015-08-21 15:25 +0000 [4329bd1e4c] Richard Mudgett * res_pjsip_pubsub.c: Use ast_alloca() instead of alloca(). Change-Id: Ia396096b4fedc2874649ca11137612c3f55e83e3 2015-08-21 11:04 +0000 [a456a20ecf] Richard Mudgett * res_pjsip_pubsub.c: Add missing error return in load_module(). Change-Id: I15debd0f717f16ee2f78e7f56151c3b3b97b72fc 2015-08-21 11:03 +0000 [f58f4c6e27] Richard Mudgett * res_pjsip/location.c: Use the builtin ao2_callback() match function instead. Change-Id: I364906d6d2bad3472929986704a0286b9a2cbe3f 2015-09-10 09:49 +0000 [9d1f176e29] Mark Michelson * res_pjsip: Copy default_from_user to avoid crash. The default_from_user retrieval function was pulling the default_from_user from the global configuration struct in an unsafe way. If using a database as a backend configuration store, the global configuration struct is short-lived, so grabbing a pointer from it results in referencing freed memory. The fix here is to copy the default_from_user value out of the global configuration struct. Thanks go to John Hardin for discovering this problem and proposing the patch on which this fix is based. ASTERISK-25390 #close Reported by Mark Michelson Change-Id: I6b96067a495c1259da768f4012d44e03e7c6148c 2015-09-10 08:39 +0000 [1dd0e220bf] Matt Jordan * res/res_pjsip_nat: Ignore REGISTER requests when looking for a Record-Route We will only rewrite the Contact header if there is no Record-Route header in the received request. If a malfunctioning proxy places a Record-Route header into a REGISTER request, we will decide that we shouldn't update the IP/port in the Contact header, and we will end up storing a contact with an AoR that contains the NAT'd IP address. While it is nice to have the proxy *not* send a Record-Route in a REGISTER request, it's also a good idea to not process the header in a non-dialog message. This patch updates the code to explicitly ignore the Record-Route header in REGISTER requests. ASTERISK-25387 #close Change-Id: I4bd3bcccc4003d460cc354d986b0dea2e433ef3f 2015-09-03 21:15 +0000 [4eedd9ef9d] Matt Jordan * main/config_options: Check for existance of internal object before derefing Asterisk can load and register an object type while still having an invalid sorcery mapping. This can cause an issue when a creation call is invoked. For example, mis-configuring PJSIP's endpoint identifier by IP address mapping in sorcery.conf will cause the sorcery mechanism to be invalidated; however, a subsequent ARI invocation to create the object will cause a crash, as the internal type may not be registered as sorcery expects. Merely checking for a NULL pointer here solves the issue. Change-Id: I54079fb94a1440992f4735a9a1bbf1abb1c601ac 2015-09-09 16:46 +0000 [71408df2b8] Alexander Anikin * chan_ooh323: Add ProgressIndicator IE with inband info available Add ProgressIndicator IE with inband info present to Progress and Alerting Q.931 message ASTERISK-25227 #close Reported by: Alexandr Dranchuk Change-Id: I326ad13cb1db9a72b3fd902bafed3c28a3684203 2015-09-08 10:35 +0000 [f72f9ceefc] Scott Griepentrog * pjsip: avoid possible crash req_caps allocation failure Make certain that the pjsip session has not failed to allocate the format capabilities structure, which can otherwise cause a crash when referenced. ASTERISK-25323 Change-Id: I602790ba12714741165e441cc64a3ecde4cb5750 2015-09-03 14:07 +0000 [fbf720db91] Jonathan Rose * ParkAndAnnounce: Add variable inheritance In Asterisk 11, the announcer channel would receive channel variables from the channel being parked by means of normal channel inheritance. This functionality was lost during the big res_parking project in Asterisk 12. This patch restores that functionality. ASTERISK-25369 #close Review: https://gerrit.asterisk.org/#/c/1180/ Change-Id: Ie47e618330114ad2ea91e2edcef1cb6f341eed6e 2015-09-04 16:33 +0000 [695f26cbb7] David M. Lee * res_rtp_asterisk: Add more ICE debugging In working through a recent ICE negotiation bug, I found the debug logging in res_rtp_asterisk to be lacking. This patch adds a number of debug and warning statements that were helpful. Change-Id: I950c6d8f13a41f14b3d6334b4cafe7d4e997be80 2015-09-01 10:16 +0000 [4ed9c9a280] Guido Falsi * Core/General: Add #ifdef needed on FreeBSD. pthread_attr_init() defaults to PTHREAD_EXPLICIT_SCHED on FreeBSD too. ASTERISK-25310 #close Reported by: Guido Falsi Change-Id: Iae6befac9028b5b9795f86986a4a08a1ae6ab7c4 2015-09-08 07:21 +0000 [5469caa9dd] Joshua Colp * res_pjsip: Use hash for contact object identity instead of Contact URI. In the wild it is possible for Contact URIs to be quite long as parameters can exist on them. This can present a problem when storing them in the AstDB as the URI is used as part of the object name and there is a fixed length limit for the AstDB. This will cause the contact to not get stored. This change uses the MD5 hash of the Contact URI as part of the object name instead. This has a fixed length which is guaranteed to not exceed the AstDB length limit. ASTERISK-25295 #close Change-Id: Ie8252a75331ca00b41b9f308f42cc1fbdf701a02 2015-09-07 13:19 +0000 [480c443e26] Alexander Anikin * chan_ooh323: call ast_rtp_instance_stop on ooh323_destroy Call ast_rtp_instance_stop on ooh323_destroy to free resources allocated by rtp instance ASTERISK-25299 #close Report by: Alexandr Dranchuk Change-Id: I455096bd7da016b871afe90af86067c2c7c9f33f 2015-09-07 11:15 +0000 [c3e6debdb9] Matt Jordan * res/res_pjsip: Purge contacts when an AoR is deleted When an AoR is deleted by an external mechanism, such as through ARI, we currently do not remove dynamic contacts that were created for that AoR as a result of a received REGISTER request. As a result, re-creating the AoR will cause the dynamic contact to be interpreted as a persistent contact, leading to some rather strange state being created for the contacts/endpoints. This patch adds a sorcery observer for the 'aor' object. When a delete is issued on the underlying sorcery object, the observer is called, and all contacts created and persisted in sorcery for that AoR are also removed. Note that we don't want to perform this action when an AO2 object that is an AoR is destroyed, as the AoR can still exist in the backing storage (and we would thus be removing valid contacts from an AoR that still "exists".) ASTERISK-25381 #close Change-Id: I6697e51ef6b2858b5d63401f35dc378bb0f90328 2015-09-05 14:58 +0000 [78d0b9d97e] Matt Jordan * channels/pjsip/dialplan_functions: Add an option for extracting the SIP call-id This patch adds a new option to the CHANNEL function that allows for the extraction of the SIP call-id. It is used in conjunction with the 'pjsip' option, and will return the Call-ID of the INVITE request that established the PJSIP channel. ASTERISK-25352 Change-Id: I278d1f8bcfe3a53c5aa1dadebc14e92b0abd476a 2015-09-04 16:06 +0000 [61c6c6aa6c] David M. Lee * Fix when remote candidates exceed PJ_ICE_MAX_CAND We were passing the wrong count into pj_ice_sess_create_check_list(), causing the create to fail if we ever received more than PJ_ICE_MAX_CAND candidates. Change-Id: I0303d8e1ecb20a8de9fe629a3209d216c4028378 2015-09-04 14:40 +0000 [ac62928d6b] Mark Michelson * res_pjsip: Change default from user value. When Asterisk sends an outbound SIP request, if there is no direct reason to place a specific value for the username in the From header, Asterisk would generate a UUID. For example, this would happen when sending outbound OPTIONS requests when qualifying or when sending outbound INVITE requests when originating (if no explicit caller ID were provided). The issue is that some SIP providers reject these sorts of requests with a "Name too long" error response. This patch aims to fix this by changing the default outbound username in From headers to "asterisk". This value can be overridden by changing the default_from_user option in the global options if desired. ASTERISK-25377 #close Reported by Mark Michelson Change-Id: I6a4d34a56ff73ff4f661b0075aeba5461b7f3190 2015-09-04 09:26 +0000 [6002472a62] Scott Griepentrog * endpoint snapshot: avoid second cleanup on alloc failure In ast_endpoint_snapshot_create(), a failure to init the string fields results in two attempts to ao2_cleanup the same pointer. Removed RAII_VAR to eliminate problem. ASTERISK-25375 #close Reported by: Scott Griepentrog Change-Id: If4d9dfb1bbe3836b623642ec690b6d49b25e8979 2015-09-04 05:33 +0000 [d32e516c7c] Martin Tomec * res/pjsip: Mark WSS transport as secure Pjsip is refusing to use unsecure transport with "sips" in url. WSS should be considered as secure transport. ASTERISK-24602 #comment Partially fixed by setting WSS as secure Change-Id: Iddac406c6deba6240c41a603b8859dfefe1a5353 2015-09-02 17:26 +0000 [ad9cb6c2ce] Mark Michelson * res_pjsip: Fix contact refleak on stateful responses. When sending a stateful response, creation of the transaction can fail, most commonly because we are trying to create a transaction from a retransmitted request. When creation of the transaction fails, we end up leaking a reference to a contact that was bumped when the response was created. This patch adds the missing deref and fixes the reference leak. Change-Id: I2f97ad512aeb1b17e87ca29ae0abacb4d6395f07 2015-09-02 12:41 +0000 [cc1363209e] Joshua Colp * pbx: Fix crash when issuing "core show hints" with long pattern match. When issuing the "core show hints" CLI command a combination of both the hint extension and context is created. This uses a fixed size buffer expecting that the extension will not exceed maximum extension length. When the extension is actually a pattern match this constraint does not hold true, and the extension may exceed the maximum extension length. In this case extra characters are written past the end of the fixed size buffer. This change makes it so the construction of the combined hint extension and context can not exceed the size of the buffer. ASTERISK-25367 #close Change-Id: Idfa1b95d0d4dc38e675be7c1de8900b3f981f499 2015-09-01 09:05 +0000 [d58c8d73af] Mark Michelson * res_pjsip_pubsub: re-re-fix persistent subscription storage. A recent change to res_pjsip_pubsub switched to using pjsip_msg_print as a means of writing an appropriate packet to persistent storage. While this partially solved the issue, it had its own problems. pjsip_msg_print will always add a Content-Length header to the message it prints. Frequent restarts of Asterisk can result in persistent subscriptions being written with five or more Content-Length headers. In addition, sometimes some apparent corruption of individual headers could be seen. This aims to fix the problem by not running a parsed message through an interpreter but rather by taking the raw message and saving it. The logic for what to save is going to be different depending on whether a SUBSCRIBE was received from the wire or if it was pulled from persistence. When receiving a packet from the wire, when using a streaming transport, the rdata->pkt_info.packet may contain multiple SIP messages or fragments. However, the rdata->msg_info.msg_buf will always contain the current SIP message to be processed. When pulling from persistence, though, the rdata->msg_info.msg_buf will be NULL since no transport actually handled the packet. However, since we know that we will always ever pull one SIP message from persistence, we are free to save directly from rdata->pkt_info.packet instead. ASTERISK-25365 #close Reported by Mark Michelson Change-Id: I33153b10d0b4dc8e3801aaaee2f48173b867855b 2015-08-31 15:24 +0000 [03fe79f29e] Mark Michelson * Fix deadlock on presence state changes. A deadlock was observed where three threads were competing for different locks: * One thread held the hints lock and was attempting to lock a specific hint. * One thread was holding the specific hint's lock and was attempting to lock the contexts lock * One thread was holding the contexts lock and attempting to lock the hints lock. Clearly the second thread was doing the wrong thing here. The fix for this is to make sure that the hint's lock is not held on presence state changes. Something similar is already done (and commented about) for device state changes. ASTERISK-25362 #close Reported by Mark Michelson Change-Id: I15ec2416b92978a4c0c08273b2d46cb21aff97e2 2015-08-29 10:36 +0000 [a676ba2aad] Joshua Colp * taskprocessor: Fix race condition between unreferencing and finding. When unreferencing a taskprocessor its reference count is checked to determine if it should be unlinked from the taskprocessors container and its listener shut down. In between the time when the reference count is checked and unlinking it is possible for another thread to jump in, find it, and get a reference to it. If the thread then uses the taskprocessor it may find that it is not in the state it expects. This change locks the taskprocessors container during almost the entire unreference operation to ensure that any other thread which may attempt to find the taskprocessor has to wait. ASTERISK-25295 Change-Id: Icb842db82fe1cf238da55df92e95938a4419377c 2015-08-28 20:22 +0000 [1b1561f4c8] Joshua Colp * res_pjsip_sdp_rtp: Fix multiple keepalive scheduled items. The keepalive support in res_pjsip_sdp_rtp currently assumes that a stream will only be negotiated once. This is false. If the stream is replaced and later added back it can be negotiated again causing multiple keepalive scheduled items to exist. This change explicitly deletes the existing keepalive scheduled item before adding the new one. The res_pjsip_sdp_rtp module also does not stop RTP keepalives or timeout timer if the stream has been replaced. This change adds a callback to the session media interface to allow a media stream to be stopped without the resources being destroyed. This allows the scheduled items and RTP to be stopped when the stream no longer exists. ASTERISK-25356 #close Change-Id: Ibe6a7cc0927c87326fd5f1c0d4ad889dbfbea1de 2015-08-28 19:57 +0000 [85e1cb51b2] Joshua Colp * sched: ast_sched_del may return prematurely due to spurious wakeup When deleting a scheduled item if the item in question is currently executing the ast_sched_del function waits until it has completed. This is accomplished using ast_cond_wait. Unfortunately the ast_cond_wait function can suffer from spurious wakeups so the predicate needs to be checked after it returns to make sure it has really woken up as a result of being signaled. This change adds a loop around the ast_cond_wait to make sure that it only exits when the executing task has really completed. ASTERISK-25355 #close Change-Id: I51198270eb0b637c956c61aa409f46283432be61 2015-08-27 12:26 +0000 [c2c7319082] Joshua Colp * res_pjsip_session: Don't invoke session supplements twice for BYE requests. When a BYE request is received the PJSIP invite session implementation creates and sends a 200 OK response before we are aware of it. This causes the INVITE session state callback to be called into and ultimately the session supplements run on the BYE request. Once this response has been sent the normal transaction state callback is invoked which invokes the session supplements on the BYE request again. This can be problematic in particular with res_pjsip_rfc3326 as it may attempt to update the hangup cause code on the channel while it is in the process of being hung up. This change makes it so the session supplements are only invoked once by the INVITE session state callback. ASTERISK-25318 #close Change-Id: I69c17df55ccbb61ef779ac38cc8c6b411376c19a 2015-08-26 15:26 +0000 [6862c2a167] Scott Griepentrog * Chaos: handle failed allocation in get_media_encryption_type If the ast_strndup() call fails to allocate a copy of the transport string for parsing, fail gracefully. ASTERISK-25323 Reported by: Scott Griepentrog Change-Id: Ia4b905ce6d03da53fea526224455c1044b1a5a28 2015-08-26 14:25 +0000 [f1cd636658] Scott Griepentrog * Chaos: make hangup NULL tolerant In chan_pjsip_new, if allocation of the pvt structure fails, ast_hangup is called. But it was written to assume pvt was valid, and this change corrects that. ASTERISK-25323 Reported by: Scott Griepentrog Change-Id: I5f47860fe9cee4cd56abd3f79b108678ab72cc87 2015-08-26 05:40 +0000 [c01111223f] Joshua Colp * chan_sip: Allow call pickup to set the hangup cause. The call pickup implementation in chan_sip currently sets the channel hangup cause to "normal clearing" if call pickup is successfully performed. This action overwrites the "answered elsewhere" hangup cause set by the call pickup code and can result in the SIP device in question showing a missed call when it should not. This change sets the hangup cause to "normal clearing" as a default initially but allows the call pickup to change it as needed. ASTERISK-25346 #close Change-Id: I00ac2c269cee9e29586ee2c65e83c70e52a02cff 2015-08-25 07:17 +0000 [2a4eee0cd9] Joshua Colp * res_pjsip: Add common ast_sip_get_host_ip API. Modules commonly used the pj_gethostip function for retrieving the IP address of the host. This function does not cache the result and may result in a DNS lookup occurring, or additional work. If the DNS server is unreachable or network issues arise this can cause the pj_gethostip function to block for a period of time. This change adds an ast_sip_get_host_ip and ast_sip_get_host_ip_string function which does the same thing but caches the host IP address at module load time. This results in no additional work being done each time the local host IP address is needed. ASTERISK-25342 #close Change-Id: I3205deb679b01fa5ac05a94b623bfd620a2abe1e 2015-08-24 11:04 +0000 [7c4d0c3506] Joshua Colp * res_pjsip_pubsub: On recreated notify fail deleted sub_tree is referenced When recreating a subscription it is possible for a freed sub_tree to be referenced when the initial NOTIFY fails to be created. Change-Id: I681c215309aad01b21d611c2de47b3b0a6022788 2015-08-24 06:21 +0000 [6c2dab1e88] Joshua Colp * bridge: Kick channel from bridge if hung up during action. When executing an action in a bridge it is possible for the channel to be hung up without the bridge becoming aware of it. This is most easily reproducible by hanging up when the bridge is streaming DTMF due to a feature timeout. This change makes it so after action execution the channel is checked to determine if it has been hung up and if it has it is kicked from the bridge. ASTERISK-25341 #close Change-Id: I6dd8b0c3f5888da1c57afed9e8a802ae0a053062 2015-08-23 18:26 +0000 [bc6fe07f5c] Matt Jordan * res_pjsip/pjsip_configuration: Disregard empty auth values When an endpoint is backed by a non-static conf file backend (such as the AstDB or Realtime), the 'auth' object may be returned as being an empty string. Currently, res_pjsip will interpret that as being a valid auth object, and will attempt to authenticate inbound requests. This isn't desired; is an auth value is empty (which the name of an auth object cannot be), we should instead interpret that as being an invalid auth object and skip it. ASTERISK-25339 #close Change-Id: Ic32b0c6eb5575107d5164a8c40099e687cd722c7 2015-08-19 12:10 +0000 [0582776f7f] Richard Mudgett * ari/ari_websockets.c: Fix ast_debug parameter type mismatch. This is a type mismatch fix of the debugging commit c63316eec10e1990a88bf4712238d6deb375bfa9 made to find out why a testsuite test was failing only on one of the continuous integration build agents. Change-Id: Iba34f6e87cec331f6ac80e4daff6476ea6f00a75 2015-08-19 10:30 +0000 [504213f542] Scott Griepentrog * contrib: script install_prereq should install sqlite3 Asterisk needs the sqlite 3 library, which is package sqlite-devel in CentOS. By adding this package to the script, a problem with configure failing is resolved. ASTERISK-25331 #close Reported by: Kevin Harwell Change-Id: I90efaf6a01914fea03f21e5cdbd91c348f44b0ec 2015-08-18 16:06 +0000 [77518d5434] Richard Mudgett * res_http_websocket.c: Fix some off nominal path cleanup. * Remove extraneous unlock on off-nominal path. * Add missing HTTP error reply. Change-Id: I1f402bfe448fba8696b507477cab5f060ccd9b2b 2015-08-18 14:46 +0000 [c61547fee6] Richard Mudgett * res_ari.c: Add missing off nominal unlock and remove a RAII_VAR(). Change-Id: I0c5e7b34057f26dadb39489c4dac3015c52f5dbf 2015-08-17 16:41 +0000 [bd867cd078] Richard Mudgett * app_queue.c: Extract some functions for simpler code. * Extract set_queue_member_pause() from set_member_paused() for simpler and more consistent code. * Extract set_queue_member_ringinuse() from set_member_ringinuse_help_members() for simpler code. Change-Id: Iecc1f4119c63347341d7ea6b65f5fc4963706306 2015-08-14 12:55 +0000 [e5f5b9f384] Richard Mudgett * app_queue.c: Fix setting QUEUE_MEMBER 'paused' and 'ringinuse'. Setting the 'paused' and 'ringinuse' options on a queue member using the dialplan function QUEUE_MEMBER did not behave the same way as the equivalent dialplan applications or AMI actions. * Made queue_function_mem_write() call the set_member_paused() and set_member_value() for the 'paused' and 'ringinuse' options respectively. A beneficial side effect is that the queue name is now optional and sets the value in all queues the interface is a member. * Update QUEUE_MEMBER XML documentation. * Fix error checking in QUEUE_MEMBER() write. ASTERISK-25215 #close Reported by: Lorne Gaetz Change-Id: I3a016be8dc94d63a9cc155295ff9c9afa5f707cb 2015-08-17 13:34 +0000 [ded51e3d77] Richard Mudgett * app_queue.c: Fix error checking in QUEUE_MEMBER() read. Change-Id: I7294e13d27875851c2f4ef6818adba507509d224 2015-08-17 11:00 +0000 [ab373f2cef] Scott Griepentrog * CHAOS: prevent sorcery object with null id When allocating a sorcery object, fail if the id value was not allocated. ASTERISK-25323 Reported by: Scott Griepentrog Change-Id: I152133fb7545a4efcf7a0080ada77332d038669e 2015-08-14 15:46 +0000 [b719f56c72] Mark Michelson * res_pjsip_sdp_rtp: Restore removed NULL check. When sending an RTP keepalive, we need to be sure we're not dealing with a NULL RTP instance. There had been a NULL check, but the commit that added the rtp_timeout and rtp_hold_timeout options removed the NULL check. Change-Id: I2d7dcd5022697cfc6bf3d9e19245419078e79b64 2015-08-13 12:30 +0000 [cea5dc7b8a] Richard Mudgett * audiohook.c: Simplify variable usage in audiohook_read_frame_both(). Change-Id: I58bed58631a94295b267991c5b61a3a93c167f0c 2015-08-13 12:22 +0000 [b3a56bee83] Richard Mudgett * audiohook.c: Fix MixMonitor crash when using the r() or t() options. The built frame format in audiohook_read_frame_both() is now set to a signed linear format before the rx and tx frames are duplicated instead of only for the mixed audio frame duplication. ASTERISK-25322 #close Reported by Sean Pimental Change-Id: I86f85b5c48c49e4e2d3b770797b9d484250a1538 2015-08-12 12:59 +0000 [25af2d71c8] Kevin Harwell * chan_sip.c: wrong peer searched in sip_report_security_event In chan_sip, after handling an incoming invite a security event is raised describing authorization (success, failure, etc...). However, it was doing a lookup of the peer by extension. This is fine for register messages, but in the case of an invite it may search and find the wrong peer, or a non existent one (for instance, in the case of call pickup). Also, if the peers are configured through realtime this may cause an unnecessary database lookup when caching is enabled. This patch makes it so that sip_report_security_event searches by IP address when looking for a peer instead of by extension after an invite is processed. ASTERISK-25320 #close Change-Id: I9b3f11549efb475b6561c64f0e6da1a481d98bc4 2015-08-13 05:26 +0000 [e18c300550] Joshua Colp * res_http_websocket: When shutting down a session don't close closed socket Due to the use of ast_websocket_close in session termination it is possible for the underlying socket to already be closed when the session is terminated. This occurs when the close frame is attempted to be written out but fails. Change-Id: I7572583529a42a7dc911ea77a974d8307d5c0c8b 2015-08-11 05:24 +0000 [b4e9416138] Joshua Colp * res_http_websocket: Forcefully terminate on write errors. The res_http_websocket module will currently attempt to close the WebSocket connection if fatal cases occur, such as when attempting to write out data and being unable to. When the fatal cases occur the code attempts to write a WebSocket close frame out to have the remote side close the connection. If writing this fails then the connection is not terminated. This change forcefully terminates the connection if the WebSocket is to be closed but is unable to send the close frame. ASTERISK-25312 #close Change-Id: I10973086671cc192a76424060d9ec8e688602845 2015-08-10 13:43 +0000 [256bc52b66] Richard Mudgett * chan_dahdi.c: Flush the DAHDI write buffer after starting DTMF. Pressing DTMF digits on a phone to go out on a DAHDI channel can result in the digit not being recognized or even heard by the peer. Phone -> Asterisk -> DAHDI/channel Turns out the DAHDI behavior with DTMF generation (and any other generated tones) is exposed by the "buffers=" setting in chan_dahdi.conf. When Asterisk requests to start sending DTMF then DAHDI waits until its write buffer is empty before generating any samples for the DTMF tones. When Asterisk subsequently requests DAHDI to stop sending DTMF then DAHDI immediately stops generating the DTMF samples. As a result, the more samples there are in the DAHDI write buffer the shorter the time DTMF actually gets sent on the wire. If there are more samples in the write buffer than the time DTMF is supposed to be sent then no DTMF gets sent on the wire. With the "buffers=12,half" setting and each buffer representing 20 ms of samples then the DAHDI write buffer is going to contain around 120 ms of samples. For DTMF to be recognized by the peer the actual sent DTMF duration needs to be a minimum of 40 ms. Therefore, the intended duration needs to be a minimum of 160 ms for the peer to receive the minimum DTMF digit duration to recognize it. A simple and effective solution to work around the DAHDI behavior is for Asterisk to flush the DAHDI write buffer when sending DTMF so the full duration of DTMF is actually sent on the wire. When someone is going to send DTMF they are not likely to be talking before sending the tones so the flushed write samples are expected to just contain silence. * Made dahdi_digit_begin() flush the DAHDI write buffer after requesting to send a DTMF digit. ASTERISK-25315 #close Reported by John Hardin Change-Id: Ib56262c708cb7858082156bfc70ebd0a220efa6a 2015-08-05 14:21 +0000 [800e0ea48d] Richard Mudgett * chan_dahdi.c: Lock private struct for ast_write(). There is a window of opportunity for DTMF to not go out if an audio frame is in the process of being written to DAHDI while another thread starts sending DTMF. The thread sending the audio frame could be past the currently dialing check before being preempted by another thread starting a DTMF generation request. When the thread sending the audio frame resumes it will then cause DAHDI to stop the DTMF tone generation. The result is no DTMF goes out. * Made dahdi_write() lock the private struct before writing to the DAHDI file descriptor. ASTERISK-25315 Reported by John Hardin Change-Id: Ib4e0264cf63305ed5da701188447668e72ec9abb 2015-08-10 18:23 +0000 [c126afe18f] Richard Mudgett * res_pjsip.c: Fix crash from corrupt saved SUBSCRIBE message. If the saved SUBSCRIBE message is not parseable for whatever reason then Asterisk could crash when libpjsip tries to parse the message and adds an error message to the parse error list. * Made ast_sip_create_rdata() initialize the parse error rdata list. The list is checked after parsing to see that it remains empty for the function to return successful. ASTERISK-25306 Reported by Mark Michelson Change-Id: Ie0677f69f707503b1a37df18723bd59418085256 2015-08-10 07:40 +0000 [f68c995bc9] Alexander Traud * chan_sip: Fix negotiation of iLBC 30. iLBC 20 was advertised in a SIP/SDP negotiation. However, only iLBC 30 is supported. Removes "a=fmtp:x mode=y" from SDP. Because of RFC 3952 section 5, only iLBC 30 is negotiated now. ASTERISK-25309 #close Change-Id: I92d724600a183eec3114da0ac607b994b1a793da 2015-08-09 18:42 +0000 [8e194047ac] Matt Jordan * res/res_format_attr_silk: Expose format attributes to other modules This patch adds the .get callback to the format attribute module, such that the Asterisk core or other third party modules can query for the negotiated format attributes. Change-Id: Ia24f55cf9b661d651ce89b4f4b023d921380f19c 2015-08-09 17:56 +0000 [a0f451c35e] Matt Jordan * main/format: Add an API call for retrieving format attributes Some codecs that may be a third party library to Asterisk need to have knowledge of the format attributes that were negotiated. Unfortunately, when the great format migration of Asterisk 13 occurred, that ability was lost. This patch adds an API call, ast_format_attribute_get, to the core format API, along with updates to the unit test to check the new API call. A new callback is also now available for format attribute modules, such that they can provide the format attribute values they manage. Note that the API returns a void *. This is done as the format attribute modules themselves may store format attributes in any particular manner they like. Care should be taken by consumers of the API to check the return value before casting and dereferencing. Consumers will obviously need to have a priori knowledge of the type of the format attribute as well. Change-Id: Ieec76883dfb46ecd7aff3dc81a52c81f4dc1b9e3 2015-08-07 22:11 +0000 [26f0559a94] David M. Lee * Replace htobe64 with htonll We don't have a compatability function to fill in a missing htobe64; but we already have one for the identical htonll. Change-Id: Ic0a95db1c5b0041e14e6b127432fb533b97e4cac 2015-08-07 14:20 +0000 [df9ce36366] Scott Emidy * ARI: Retrieve existing log channels An http request can be sent to get the existing Asterisk logs. The command "curl -v -u user:pass -X GET 'http://localhost:8088 /ari/asterisk/logging'" can be run in the terminal to access the newly implemented functionality. * Retrieve all existing log channels ASTERISK-25252 Change-Id: I7bb08b93e3b938c991f3f56cc5d188654768a808 2015-08-07 11:14 +0000 [e9f1bc08cb] Scott Emidy * ARI: Creating log channels An http request can be sent to create a log channel in Asterisk. The command "curl -v -u user:pass -X POST 'http://localhost:088/ari/asterisk/logging/mylog? configuration=notice,warning'" can be run in the terminal to access the newly implemented functionality for ARI. * Ability to create log channels using ARI ASTERISK-25252 Change-Id: I9a20e5c75716dfbb6b62fd3474faf55be20bd782 2015-08-06 15:18 +0000 [78364132ce] Scott Emidy * ARI: Deleting log channels An http request can be sent to delete a log channel in Asterisk. The command "curl -v -u user:pass -X DELETE 'http://localhost:8088 /ari/asterisk/logging/mylog'" can be run in the terminal to access the newly implemented functionally for ARI. * Able to delete log channels using ARI ASTERISK-25252 Change-Id: Id6eeb54ebcc511595f0418d586ff55914bc3aae6 2015-08-06 12:48 +0000 [e25569ef95] Mark Michelson * res_pjsip_pubsub: More accurately persist packet. The pjsip_rx_data structure has a pkt_info.packet field on it that is the packet that was read from the transport. For datagram transports, the packet read from the transport will correspond to the SIP message that arrived. For streamed transports, however, it is possible to read multiple SIP messages in one packet. In a recent case, Asterisk crashed on a system where TCP was being used. This is because at some point, a read from the TCP socket resulted in a 200 OK response as well as an incoming SUBSCRIBE request being stored in rdata->pkt_info.packet. When the SUBSCRIBE was processed, the combination 200 OK and SUBSCRIBE was saved in persistent storage. Later, a restart of Asterisk resulted in the crash because the persistent subscription recreation code ended up building the 200 OK response instead of a SUBSCRIBE request, and we attempted to access request-specific data. The fix here is to use the pjsip_msg_print() function in order to persist SUBSCRIBE requests. This way, rather than using the raw socket data, we use the parsed SIP message that PJSIP has given us. If we receive multiple SIP messages from a single read, we will be sure only to save off the relevant SIP message. There also is a safeguard put in place to make sure that if we do end up reconstructing a SIP response, it will not cause a crash. ASTERISK-25306 #close Reported by Mark Michelson Change-Id: I4bf16f7b76a2541d10b55de82bcd14c6e542afb2 2015-08-04 16:12 +0000 [8521a86367] Joshua Colp * res_pjsip: Ensure sanitized XML is NULL terminated. The ast_sip_sanitize_xml function is used to sanitize a string for placement into XML. This is done by examining an input string and then appending values to an output buffer. The function used by its implementation, strncat, has specific behavior that was not taken into account. If the size of the input string exceeded the available output buffer size it was possible for the sanitization function to write past the output buffer itself causing a crash. The crash would either occur because it was writing into memory it shouldn't be or because the resulting string was not NULL terminated. This change keeps count of how much remaining space is available in the output buffer for text and only allows strncat to use that amount. Since this was exposed by the res_pjsip_pidf_digium_body_supplement module attempting to send a large message the maximum allowed message size has also been increased in it. A unit test has also been added which confirms that the ast_sip_sanitize_xml function is providing NULL terminated output even when the input length exceeds the output buffer size. ASTERISK-25304 #close Change-Id: I743dd9809d3e13d722df1b0509dfe34621398302 2015-08-05 05:23 +0000 [9a12804e59] Joshua Colp * res_rtp_asterisk: Don't leak temporary key when enabling PFS. A change recently went in which enabled perfect forward secrecy for DTLS in res_rtp_asterisk. This was accomplished two different ways depending on the availability of a feature in OpenSSL. The fallback method created a temporary instance of a key but did not free it. This change fixes that. ASTERISK-25265 Change-Id: Iadc031b67a91410bbefb17ffb4218d615d051396 2015-08-04 09:47 +0000 [27dc2094e9] Mark Michelson * res_http_websocket: Debug write lengths. Commit 39cc28f6ea2140ad6d561fd4c9e9a66f065cecee attempted to fix a test failure observed on 32 bit test agents by ensuring that a cast from a 32 bit unsigned integer to a 64 bit unsigned integer was happening in a predictable place. As it turns out, this did not cause test runs to succeed. This commit adds several redundant debug messages that print the payload lengths of websocket frames. The idea here is that this commit will not cause tests to succeed for the faulty test agent, but we might deduce where the fault lies more easily this way by observing at what point the expected value (537) changes to some ungangly huge number. If you are wondering why something like this is being committed to the branch, keep in mind that in commit 39cc28f6ea2140ad6d561fd4c9e9a66f065cecee I noted that the observed test failures only happen when automated tests are run. Attempts to run the tests by hand manually on the test agent result in the tests passing. Change-Id: I14a65c19d8af40dadcdbd52348de3b0016e1ae8d 2015-08-03 11:06 +0000 [39cc28f6ea] Mark Michelson * res_http_websocket: Avoid passing strlen() to ast_websocket_write(). We have seen a rash of test failures on a 32-bit build agent. Commit 48698a5e21d7307f61b5fb2bd39fd593bc1423ca solved an obvious problem where we were not encoding a 64-bit value correctly over the wire. This commit, however, did not solve the test failures. In the failing tests, ARI is attempting to send a 537 byte text frame over a websocket. When sending a frame this small, 16 bits are all that is required in order to encode the payload length on the websocket frame. However, ast_websocket_write() thinks that the payload length is greater than 65535 and therefore writes out a 64 bit payload length. Inspecting this payload length, the lower 32 bits are exactly what we would expect it to be, 537 in hex. The upper 32 bits, are junk values that are not expected to be there. In the failure, we are passing the result of strlen() to a function that expects a uint64_t parameter to be passed in. strlen() returns a size_t, which on this 32-bit machine is 32 bits wide. Normally, passing a 32-bit unsigned value to somewhere where a 64-bit unsigned value is expected would cause no problems. In fact, in manual runs of failing tests, this works just fine. However, ast_websocket_write() uses the Asterisk optional API, which means that rather than a simple function call, there are a series of macros that are used for its declaration and implementation. These macros may be causing some sort of error to occur when converting from a 32 bit quantity to a 64 bit quantity. This commit changes the logic by making existing ast_websocket_write() calls use ast_websocket_write_string() instead. Within ast_websocket_write_string(), the 64-bit converted strlen is saved in a local variable, and that variable is passed to ast_websocket_write() instead. Note that this commit message is full of speculation rather than certainty. This is because the observed test failures, while always present in automated test runs, never occur when tests are manually attempted on the same test agent. The idea behind this commit is to fix a theoretical issue by performing changes that should, at the least, cause no harm. If it turns out that this change does not fix the failing tests, then this commit should be reverted. Change-Id: I4458dd87d785ca322b89c152b223a540a3d23e67 2015-07-28 05:33 +0000 [aed068844c] Mark Duncan * res/res_rtp_asterisk: Add ECDH support This will add ECDH support to Asterisk. It will detect auto ECDH support in OpenSSL (1.0.2b and above) during ./configure. If this is available, it will use it, otherwise it will fall back to prime256v1 (this behavior is consistent with other projects such as Apache and nginx). This fixes WebRTC being broken in Firefox 38+ due to Firefox now only supporting ciphers with perfect forward secrecy. ASTERISK-25265 #close Change-Id: I8c13b33a2a79c0bde2e69e4ba6afa5ab9351465b 2015-07-29 14:17 +0000 [1ae762634c] Benjamin Ford * ARI: Rotate log channels. An http request can be sent to rotate a specified log channel. If the channel does not exist, an error response will be returned. The command "curl -v -u user:pass -X PUT 'http://localhost:8088 /ari/asterisk/logging/logChannelName/rotate'" can be run in the terminal to access this new functionality. * Added the ability to rotate log files through ARI ASTERISK-25252 Change-Id: Iaefa21cbbc1b29effb33004ee3d89c977e76ab01 2015-07-29 13:49 +0000 [aeeb170fc4] Richard Mudgett * rtp_engine.c: Fix performance issue with several channel drivers that use RTP. ast_rtp_codecs_get_payload() gets called once or twice for every received RTP frame so it would be nice to not allocate an ao2 object to then have it destroyed shortly thereafter. The ao2 object gets allocated only if the payload type is not set by the channel driver as a negotiated value. The issue affects chan_skinny, chan_unistim, chan_rtp, and chan_ooh323. * Made static_RTP_PT[] an array of ao2 objects that ast_rtp_codecs_get_payload() can return instead of an array of structs that must be copied into a created ao2 object. ASTERISK-25296 #close Reported by: Richard Mudgett Change-Id: Icb6de5cd90bfae07d44403a1352963db9109dac0 2015-07-29 17:00 +0000 [84262749d2] Richard Mudgett * res_rtp_asterisk.c: Fix off-nominal crash potential. ASTERISK-25296 Reported by: Richard Mudgett Change-Id: I08549fb7c3ab40a559f41a3940f3732a4059b55b 2015-07-29 13:48 +0000 [1519eb44a7] Richard Mudgett * rtp_engine.c: Must protect mime_types_len with mime_types_lock. Change-Id: I44220dd369cc151ebf5281d5119d84bb9e54d54e 2015-07-24 18:42 +0000 [a93b7a927c] Richard Mudgett * res_pjsip_sdp_rtp.c: Fix processing wrong SDP media list. Change-Id: I7c076826c2d3c6ae8c923ca73b7a71980cca11f2 2015-07-24 18:38 +0000 [741fa0d26d] Richard Mudgett * res_pjsip_sdp_rtp.c: Fixup some whitespace. Change-Id: Ib4eb7ef7dcaf93ddc26538f0a498aaf110d7a973 2015-07-27 19:10 +0000 [89b21fd9a3] Richard Mudgett * rtp_engine.h: No sense allowing payload types larger than RFC allows. * Tweaked add_static_payload() to not use magic numbers. Change-Id: I1719ff0f6d3ce537a91572501eae5bcd912a420b 2015-07-23 14:04 +0000 [7427c7f13b] Richard Mudgett * rtp_engine.c: Minor tweaks. * Fix off nominial ref leak of new_type in ast_rtp_codecs_payloads_set_m_type(). * No need to lock static_RTP_PT_lock in ast_rtp_codecs_payloads_set_m_type() and ast_rtp_codecs_payloads_set_rtpmap_type_rate() before the payload type parameter sanity check. * No need to create ast_rtp_payload_type ao2 objects with a lock since the lock is not used. Change-Id: I64dd1bb4dfabdc7e981e3f61448beac9bb7504d4 2015-07-23 12:41 +0000 [e20f435b60] Richard Mudgett * rtp_engine.h: Misc comment fixes. Change-Id: If98139264d5d97427b4685ecbdc54518f725bc43 2015-07-17 16:23 +0000 [bc5d7f9c37] Richard Mudgett * chan_sip.c: Tweak glue->update_peer() parameter nil value. Change glue->update_peer() parameter from 0 to NULL to better indicate it is a pointer. Change-Id: I8ff2e5087f0e19f6998e3488a712a2470cc823bd 2015-07-30 17:05 +0000 [13eb491e35] Richard Mudgett * res_pjsip_session.c: Fix crashes seen when call cancelled. Two testsuite tests crashed in the same place as a result of an INVITE being CANCELed. tests/channels/pjsip/resolver/srv/failover/in_dialog/transport_unspecified tests/channels/pjsip/resolver/srv/failover/in_dialog/transport_tcp The session pointer is no longer in the inv->mod_data[session_module.id] location because the INVITE transaction has reached the terminated state. ASTERISK-25297 #close Reported by: Richard Mudgett Change-Id: Idb75fdca0321f5447d5dac737a632a5f03614427 2015-07-29 14:35 +0000 [48698a5e21] Mark Michelson * res_http_websocket: Properly encode 64 bit payload A test agent was continuously failing all ARI tests when run against Asterisk 13. As it turns out, the reason for this is that on those test runs, for some reason we decided to use the super extended 64 bit payload length for websocket text frames instead of the extended 16 bit payload length. For 64-bit payloads, the expected byte order over the network is 7, 6, 5, 4, 3, 2, 1, 0 However, we were sending the payload as 3, 2, 1, 0, 7, 6, 5, 4 This meant that we were saying to expect an absolutely MASSIVE payload to arrive. Since we did not follow through on this expected payload size, the client would sit patiently waiting for the rest of the payload to arrive until the test would time out. With this change, we use the htobe64() function instead of htonl() so that a 64-bit byte-swap is performed instead of a 32 bit byte-swap. Change-Id: Ibcd8552392845fbcdd017a8c8c1043b7fe35964a 2015-07-29 12:23 +0000 [10ba72a927] Mark Michelson * Add a test event for inband ringing. This event is necessary for the bridge_wait_e_options test to be able to confirm that ringing is being played on the local channel that runs the BridgeWait() application with the e(r) option. ASTERISK-25292 #close Reported by Kevin Harwell Change-Id: Ifd3d3d2bebc73344d4b5310d0d55c7675359d72e 2015-07-16 12:16 +0000 [8458b8d441] Jonathan Rose * holding_bridge: ensure moh participants get frames Currently, if a blank musiconhold.conf is used, musiconhold will fail to start for a channel going into a holding bridge with an anticipation of getting music on hold. That being the case, no frames will be written to the channel and that can pose a problem for blind transfers in PJSIP which may rely on frames being written to get past the REFER framehook. This patch makes holding bridges start a silence generator if starting music on hold fails and makes it so that if no music on hold functions are installed that the ast_moh_start function will report a failure so that consumers of that function will be able to respond appropriately. ASTERISK-25271 #close Change-Id: I06f066728604943cba0bb0b39fa7cf658a21cd99 2015-07-24 22:20 +0000 Asterisk Development Team * asterisk 13.5.0-rc1 Released. 2015-07-24 17:15 +0000 [a4b527393b] Matt Jordan * Release summaries: Add summaries for 13.5.0-rc1 2015-07-24 17:11 +0000 [158b0b8ebf] Matt Jordan * .version: Update for 13.5.0-rc1 2015-07-24 17:11 +0000 [a0a7650e34] Matt Jordan * .lastclean: Update for 13.5.0-rc1 2015-07-24 17:11 +0000 [4d238af086] Matt Jordan * realtime: Add database scripts for 13.5.0-rc1 2015-07-24 12:56 +0000 [f78a4b52b8] Matt Jordan * Bump the ARI version to 1.8.0 Due to backwards compatible changes, the ARI version should be bumped to 1.8.0 prior to the release of 13.5.0. Note that a previous patch already bumped the version of AMI for this release. Change-Id: I419033bfbbc0d3533a29ccb32b2981f39e0883e7 2015-07-18 11:16 +0000 [2749721791] Joshua Colp * pjsip: Add rtp_timeout and rtp_timeout_hold endpoint options. This change adds support for the 'rtp_timeout' and 'rtp_timeout_hold' endpoint options. These allow the channel to be hung up if RTP is not received from the remote endpoint for a specified number of seconds. ASTERISK-25259 #close Change-Id: I3f39daaa7da2596b5022737b77799d16204175b9 2015-07-24 09:46 +0000 [b4e19e414a] Mark Michelson * res_pjsip: Add rtp_keepalive to sample config file. Change-Id: I5f62d0c5684f8b2335f9f8ac2d79ee04fbdafb19 2015-07-23 13:11 +0000 [f635520527] Mark Michelson * Local channels: Alternate solution to ringback problem. Commit 54b25c80c8387aea9eb20f9f4f077486cbdf3e5d solved an issue where a specific scenario involving local channels and a native local RTP bridge could result in ringback still being heard on a calling channel even after the call is bridged. That commit caused many tests in the testsuite to fail with alarming consequences, such as not sending DialBegin and DialEnd events, and giving incorrect hangup causes during calls. This commit reverts the previous commit and implements and alternate solution. This new solution involves only passing AST_CONTROL_RINGING frames across local channels if the local channel is in AST_STATE_RING. Otherwise, the frame does not traverse the local channels. By doing this, we can ensure that a playtones generator does not get started on the calling channel but rather is started on the local channel on which the ringing frame was initially indicated. ASTERISK-25250 #close Reported by Etienne Lessard Change-Id: I3bc87a18a38eb2b68064f732d098edceb5c19f39 2015-07-22 12:24 +0000 [f509730cb9] Joshua Colp * audiohook: Use manipulated frame instead of dropping it. Previous changes to sample rate support in audiohooks accidentally removed code responsible for allowing the manipulate audiohooks to work. Without this code the manipulated frame would be dropped and not used. This change restores it. ASTERISK-25253 #close Change-Id: I3ff50664cd82faac8941f976fcdcb3918a50fe13 2015-07-22 09:46 +0000 [54b25c80c8] Mark Michelson * Local channels: Do not block control -1 payloads. Control frames with a -1 payload are used as a special signal to stop playtones generators on channels. This indication is sent both by app_dial as well as by ast_answer() when a call is answered in case any tones were being generated on a calling channel. This control frame type was made to stop traversing local channel pairs as an optimization, because it was thought that it was unnecessary to send these indications, and allowing such unnecessary control frames to traverse the local channels would cause the local channels to optimize away less quickly. As it turns out, through some special magic dialplan code, it is possible to have a tones being played on a non-local channel, and it is important for the local channel to convey that the tones should be stopped. The result of having tones continue to be played on the non-local channel is that the tones play even once the channel has been bridged. By not blocking the -1 control frame type, we can ensure that this situation does not happen. ASTERISK-25250 #close Reported by Etienne Lessard Change-Id: I0bcaac3d70b619afdbd0ca8a8dd708f33fd2f815 2015-07-22 05:16 +0000 [f1493f900e] Joshua Colp * audiohook: Read the correct number of samples based on audiohook format. Due to changes in audiohooks to support different sample rates the underlying storage of samples is in the format of the audiohook itself and not of the format being requested. This means that if a channel is using G722 the samples stored will be at 16kHz. If something subsequently reads from the audiohook at a format which is not the same sample rate as the audiohook the number of samples needs to be adjusted. Given the following example: 1. Channel writing into audiohook at 16kHz (as it is using G722). 2. Chanspy reading from audiohook at 8kHz. The original code would read 160 samples from the audiohook for each 20ms of audio. This is incorrect. Since the audio in the audiohook is at 16kHz the actual number needing to be read is 320. Failure to read this much would cause the audiohook to reset itself constantly as the buffer became full. This change adjusts the requested number of samples by determining the duration of audio requested and then calculating how many samples that would be in the audiohook format. ASTERISK-25247 #close Change-Id: Ia91ce516121882387a315fd8ee116b118b90653d 2015-07-20 12:39 +0000 [62c64c3bd1] Rusty Newton * Documentation: A couple of trivial fixes in sip.conf.sample and func_cdr.c * In sip.conf.sample fix sentence where we said that WS or WSS are supported transports for use in an outbound register definition. They are not supported in that case. * In func_cdr.c made it clear that the Disable option for CDR_PROP can be used to enable CDR on a channel. ASTERISK-24867 #close Reported by: Rusty Newton ASTERISK-24853 #close Reported by: PSDK Change-Id: I3d698bc6302b9d00a0a995b5c4ad9a42d69b48ca 2015-07-09 14:17 +0000 [d9094ddd73] Mark Michelson * res_pjsip: Add rtp_keepalive endpoint option. This adds an "rtp_keepalive" option for PJSIP endpoints. Similar to the chan_sip option, this specifies an interval, in seconds, at which we will send RTP comfort noise frames. This can be useful for keeping RTP sessions alive as well as keeping NAT associations alive during lulls. ASTERISK-25242 #close Reported by Mark Michelson Change-Id: I06660ba672c0a343814af4cec838e6025cafd54b 2015-07-16 09:13 +0000 [a23adcca3d] Michael Cargile * res/res_musiconhold: Add a warning when MOH does not exist Change-Id: Ifdfbd0b97cf31478d29923ec30aabce28d01740b 2015-07-19 09:11 +0000 [03064daeb2] Matt Jordan * res/res_sorcery_config: Prevent crash from misconfigured sorcery.conf Misconfiguring sorcery.conf with a 'config' wizard with no extra data will currently crash Asterisk on startup, as the wizard requires a comma delineated list to parse. This patch updates res_sorcery_config to check for the presence of the data before it starts manipulating it. Change-Id: I4c97512e8258bc82abe190627a9206c28f5d3847 2015-07-16 09:46 +0000 [2c626ceb64] Joshua Colp * chan_pjsip: Don't change formats when frame of unsupported format is received. Receipt of an RTP packet currently causes the formats on an PJSIP channel to change to the format of the RTP packet. In some off-nominal cases it's possible for this to be a format that has not been configured or negotiated. This change makes it so only formats explicitly configured on the endpoint are allowed. ASTERISK-25258 #close Change-Id: If93d641fb6418a285928839300d7854cab8c1020 2015-07-17 04:59 +0000 [abb14ac5b8] Patric Marschall * sig_pri.h: force_restart_unavailable_chans in wrong scope In channels/sig_pri.h, struct sig_pri_span, the field force_restart_unavailable_chans is only defined if #if defined(HAVE_PRI_MCID) is true. All other occurences of force_restart_unavailable_chans are outside of the #if defined(HAVE_PRI_MCID) endif scope. ASTERISK-25257 #close Reported by: Patric Marschall Change-Id: I071de89cc2cd0d85927a013036e235851f672549 2015-07-14 16:55 +0000 [875aee4c09] Richard Mudgett * pbx.c: Post AMI VarSet event if delete a non-empty dialplan variable. ASTERISK-25256 #close Reported by: Richard Mudgett Change-Id: I0b6be720b66fa956f6a798cd22ef8934eb0c0ff3 2015-07-08 16:39 +0000 [8bcf6d2801] Matt Jordan * ARI: Add support for push configuration of dynamic object This patch adds support for push configuration of dynamic, i.e., sorcery, objects in Asterisk. It adds three new REST API calls to the 'asterisk' resource: * GET /asterisk/{configClass}/{objectType}/{id}: retrieve the current object given its ID. This returns back a list of ConfigTuples, which define the fields and their present values that make up the object. * PUT /asterisk/{configClass}/{objectType}/{id}: create or update an object. A body may be passed with the request that contains fields to populate in the object. The same format as what is retrieved using the GET operation is used for the body, save that we specify that the list of fields to update are contained in the "fields" attribute. * DELETE /asterisk/{configClass}/{objectType}/{id}: remove a dynamic object from its backing storage. Note that the success/failure of these operations is somewhat configuration dependent, i.e., you must be using a sorcery wizard that supports the operation in question. If a sorcery wizard does not support the create or delete mechanisms, then the REST API call will fail with a 403 forbidden. ASTERISK-25238 #close Change-Id: I28cd5c7bf6f67f8e9e437ff097f8fd171d30ff5c 2015-07-15 15:40 +0000 [e31cb6b248] Richard Mudgett * strings.h: Fix issues with escape string functions. Fixes for issues with the ASTERISK-24934 patch. * Fixed ast_escape_alloc() and ast_escape_c_alloc() if the s parameter is an empty string. If it were an empty string the functions returned NULL as if there were a memory allocation failure. This failure caused the AMI VarSet event to not get posted if the new value was an empty string. * Fixed dest buffer overwrite potential in ast_escape() and ast_escape_c(). If the dest buffer size is smaller than the space needed by the escaped s parameter string then the dest buffer would be written beyond the end by the nul string terminator. The num parameter was really the dest buffer size parameter so I renamed it to size. * Made nul terminate the dest buffer if the source string parameter s was an empty string in ast_escape() and ast_escape_c(). * Updated ast_escape() and ast_escape_c() doxygen function description comments to reflect reality. * Added some more unit test cases to /main/strings/escape to cover the empty source string issues. ASTERISK-25255 #close Reported by: Richard Mudgett Change-Id: Id77fc704600ebcce81615c1200296f74de254104 2015-07-14 14:29 +0000 [243c0d1609] Richard Mudgett * parking_applications.c: Fix ast_verb() line terminator. Change-Id: I8797238c71563e243c48c6145b4f1ae58f91f775 2015-07-14 14:36 +0000 [c782320c68] Richard Mudgett * res_parking: Fix crash if ATTENDEDTRANSFER set empty before Park. setup_park_common_datastore() was assuming that a non-NULL string returned for the ATTENDEDTRANSFER and BLINDTRANSFER channel variables are not empty strings. Things got crashy as a result. * Made setup_park_common_datastore() treat the channel variable values the same whether they are NULL or empty for ATTENDEDTRANSFER and BLINDTRANSFER. ASTERISK-25254 #close Reported by: Richard Mudgett Change-Id: I9a9c174b33f354f35f82cc6b7cea8303adbaf9c2 2015-07-10 18:01 +0000 [2735dd5b2d] Richard Mudgett * res_pjsip_session.c: Extract sip_session_defer_termination_stop_timer(). Change-Id: I9e115dee74bd72e06081d0ee73ecdeb886caa5fb 2015-07-10 10:42 +0000 [3d0ca343ca] Richard Mudgett * res_pjsip_session.c: Add some helpful comments and minor tweaks. Change-Id: I742aeeaf5f760593f323a00fb691affe22e35743 2015-07-10 10:43 +0000 [8d08bb179c] Richard Mudgett * res_pjsip_session.c: Fix off nominal crash potential in debug message. Change-Id: I09928297927ee85f7655289acee3a586816466bc 2015-07-15 10:31 +0000 [0a1a550593] Matt Jordan * apps/app_dictate: Fix typo in attribution Last time I checked, it's "Sangoma", not "Samgoma". Thanks to Brian (GameGamer43) for pointing that out. Change-Id: I43d7b196f6d7a2b2517b84915e3a8dfbc2894106 2015-07-15 10:28 +0000 [3384e64ef6] Benjamin Ford * ARI: Fixed unload mode for unload module. Changed the unload mode to AST_FORCE_SOFT from AST_FORCE_FIRM, which would unload a module even if it was in use. * Changed unload mode to proper mode ASTERISK-25173 Change-Id: If2402487b5bce05d9770f25f65f5c8e292ad5533 2015-07-08 16:38 +0000 [0b6ff77afb] Matt Jordan * res/res_sorcery_astdb: Add a debugging message for when retrieval by ID fails Having a debug message tell us that we attempted to look up an item but failed is nice in circumstances when it isn't clear if the wizard was queried correctly or not. Change-Id: I2600c3bbea87f252196358f62e73f4c7da8632f7 2015-07-08 16:37 +0000 [2f0d6d346c] Matt Jordan * res/res_pjsip_outbound_registration: Fix WARNING message Newlines are nice. Change-Id: Icf0d915db02882e47cd9077ed9009f5d44140d42 2015-07-08 16:35 +0000 [cd2213f1ae] Matt Jordan * res_pjsip/configuration: Fix a variety of default value problems This patch fixes some bad default value handling in the following settings: * The 'message_context' and 'accountcode' settings are not mandatory. As such, we can allow their stringfield values to be empty. * The 'media_encryption' setting applies a default value of 'none' to the setting, which it then can't parse or understand. Since the value is documented to be 'no', this will now apply that as the default value. Change-Id: Ib9be7f97a7a5b9bc7aee868edf5acf38774cff83 2015-07-08 16:32 +0000 [2e4bdbd78a] Matt Jordan * main/sorcery: Provide log messages when a wizard does not support an operation If a sorcery wizard does not support one of the 'optional' CRUD operations (namely the CUD), log a WARNING message so we are aware of why the operation failed. This also removes an assert in this case, as the CUD operation may have been triggered by an external system, in which case it is not a programming error but a configuration error. Change-Id: Ifecd9df946d9deaa86235257b49c6e5e24423b53 2015-07-10 18:17 +0000 [653f2087e0] Richard Mudgett * res_pjsip_session.c: Fix crash on call disconnect. The crash fix for ASTERISK-25183 backported some code from master to try to make sure that a BYE response is processed by the same serializer used by the BYE request. The identified race condition causing that backport was the BYE request code had not finished processing after sending the BYE before the BYE response came in for processing under a different thread. Unfortunately, there is still a race condition. Now the race condition is between destroying the call session's serializer in ast_taskprocessor_unreference() and using ast_taskprocessor_get() to get a reference to the serializer for a BYE response. Even worse, the new race condition is a design limitation of the taskprocessor implementation that didn't matter in versions before v12. Back then, taskprocessors were only destroyed when a module unloaded. Now res_pjsip can destroy them when a call ends. However, as noted on the ASTERISK-25183 commit, session_inv_on_state_changed() is disassociating the dialog from the session when the invite dialog state becomes PJSIP_INV_STATE_DISCONNECTED. This is a tad too soon because our BYE request transaction has not completed yet. * Split session_end() that is called by session_inv_on_state_changed() to hold off session destruction until the BYE transaction timeout occurs or a failed initial INVITE transaction timeout occurs in session_inv_on_tsx_state_changed(). ASTERISK-25201 #close Reported by: Matt Jordan Change-Id: Iaf8dc8485fd8392a2a3ee4ad3b7f7f04a0dcc961 2015-07-14 13:12 +0000 [1aafadf814] Benjamin Ford * ARI: Added new functionality to reload a single module. An http request can be sent to reload an Asterisk module. If the module can not be reloaded or is not already loaded, an error response will be returned. The command "curl -v -u user:pass -X PUT 'http://localhost:8088 /ari/asterisk/modules/{moduleName}'" (or something similar, based on configuration) can be run in the terminal to access this new functionality. For more information, see: https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource * Added new ARI functionality * Asterisk modules can be reloaded through http requests ASTERISK-25173 Change-Id: I289188bcae182b2083bdbd9ebfffd50b62f58ae1 2015-07-14 08:55 +0000 [9dcae23cfc] Benjamin Ford * ARI: Added new functionality to unload a single module. An http request can be sent to unload an Asterisk module. If the module can not be unloaded or is already unloaded, an error response will be returned. The command "curl -v -u user:pass -X DELETE 'http://localhost:8088 /ari/asterisk/modules/{moduleName}'" (or something similar, depending on configuration) can be run in the terminal to access this new functionality. For more information, see: https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource * Added new ARI functionality * Asterisk modules can be unloaded through http requests ASTERISK-25173 Change-Id: I535a95f5676deb02651522761ecbdc0b00b5ac57 2015-07-13 16:00 +0000 [c219a98d2b] Benjamin Ford * ARI: Added new functionality to load a single module. An http request can be sent to load an Asterisk module. If the module can not be loaded or is loaded already, an error response will be returned. The command curl -v -u user:pass -X POST 'http://localhost:8088/ari /asterisk/modules/{moduleName}'" (or something similar, depending on configuration) can be run in the terminal to access this new functionality. For more information, see: https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource * Added new ARI functionality * Asterisk modules can be loaded through http requests ASTERISK-25173 Change-Id: I9e05d5b8c5c666ecfef341504f9edc1aa84fda33 2015-07-13 10:54 +0000 [73e35d20de] Benjamin Ford * ARI: Added new functionality to get information on a single module. An http request can be sent to retrieve information on a single module, including the resource name, description, use count, status, and support level. The command "curl -v -u user:pass -X GET 'http://localhost:8088/ari /asterisk/modules/{moduleName}'" (or something similar, depending on configuration) can be run in the terminal to access this new functionality. For more information, see: https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource * Added new ARI functionality * Information on a single module can now be retrieved ASTERISK-25173 Change-Id: Ibce5a94e70ecdf4e90329cf0ba66c33a62d37463 2015-07-08 14:56 +0000 [97ee0ee6c6] Kevin Harwell * bridge.c: Fixed race condition during attended transfer During an attended transfer a thread is started that handles imparting the bridge channel. From the start of the thread to when the bridge channel is ready exists a gap that can potentially cause problems (for instance, the channel being swapped is hung up before the replacement channel enters the bridge thus stopping the transfer). This patch adds a condition that waits for the impart thread to get to a point of acceptable readiness before allowing the initiating thread to continue. ASTERISK-24782 Reported by: John Bigelow Change-Id: I08fe33a2560da924e676df55b181e46fca604577 2015-07-08 16:28 +0000 [bb76b88baf] Matt Jordan * main/sorcery: Don't fail object set creation from JSON if field fails Some individual fields may fail their conversion due to their default values being invalid for their custom handlers. In particular, configuration values that depend on others being enabled (and thus have an empty default value) are notorious for tripping this routine up. An example of this are any of the DTLS options for endpoints. Any of the DTLS options will fail to be applied (as DTLS is not enabled), causing the entire object set to be aborted. This patch makes it so that we log a debug message when skipping a field, and rumble on anyway. ASTERISK-25238 Change-Id: I0bea13de79f66bf9f9ae6ece0e94a2dc1c026a76 2015-07-08 16:21 +0000 [5f13c2226a] Matt Jordan * main/format_cap: Parse capabilities generated by ast_format_cap_get_names We have a strange relationship between the parsing of format capabilities from a string and their representation as a string. We expect the format capabilities to be expressed as a string in the following format: allow = !all,ulaw,alaw disallow = g722 While we would generate the string representation of those formats as: allow = (ulaw|alaw) disallow = (ulaw|alaw|g729...) When the configuration framework needs to store values as a string, it generates the format capabilities using the second representation; this representation however cannot be parsed when the entry is rehydrated. This patch fixes that by updating ast_format_cap_update_by_allow_disallow to parse an entry as if it were in the generated format if it has a leading '(' and a trailing ')'. ASTERISK-25238 Change-Id: I904d43caf4cf45af06f6aee0c9e58556eb91d6ca 2015-06-27 17:53 +0000 [2325b106fd] Matt Jordan * tests/test_devicestate: Add additional tests for the device state API This patch adds more tests that exercise the device state API. This includes: * Tests that cover adding a device state provider, as well as deleting a device state provider. This also verifies that you cannot add an already added device state provider, and cannot delete an already deleted device state provider. * A test that covers changing device state and receiving said updates from a device state subscriber. This also covers hitting both the device state cache as well as a custom device state provider. * A test that covers converting device state to channel state and device state values to a string representation and back. * A test that covers obtaining device state from an active channel and a channel driver that provides its own device state. Change-Id: I2adca67ffb405cd8625a5d6df1e3f9b3d945c08d 2015-06-27 17:51 +0000 [328f0be806] Matt Jordan * main/devicestate: Prevent duplicate registration of device state providers Currently, the device state provider API will allow you to register a device state provider with the same case insensitive name more than once. This could cause strange issues, as the duplicate device state providers will not be queried when a device's state has to be polled. This patch updates the API such that a device state provider with the same name as one that has already registered will be rejected. Change-Id: I4a418a12280b7b6e4960bd44f302e27cd036ceb2 2015-07-10 22:25 +0000 [bee41eec62] Matt Jordan * res/res_sorcery_memory_cache: Fix test registration issues Again, tests now need to not end with a newline. This patch makes it so the tests can register again, unit tests will actually pass, and we can stop wasting time trying to figure out why builds are failing when they really aren't failing. Change-Id: Ide519fbeba89f413c733446c5ff7b224fc4ce840 2015-07-10 21:42 +0000 [4d738e9026] Matt Jordan * tests/test_sorcery_memory_cache_thrash: Fix test loading problems Because unit tests now want descriptions to not end with a newline, the sorcery memory cache thrash tests failed to register. This patch corrects their descriptions. Change-Id: Id004b1becfdeed8ee3c846f49beab76a5c0f68b6 2015-06-26 10:57 +0000 [47ea312b24] Benjamin Ford * ARI: Added new functionality to get all module information. An http request can be sent to retrieve a list of all existing modules, including the resource name, description, use count, status, and support level. The command "curl -v -u user:pass -X GET 'http://localhost:8088/ari/ asterisk/modules" (or something similar, depending on configuration) can be run in the terminal to access this new functionality. For more information, see: https://wiki.asterisk.org/wiki.display/~bford/Asterisk+ARI+Resource * Added new ARI functionality * Information on modules can now be retrieved Change-Id: I63cbbf0ec0c3544cc45ed2a588dceabe91c5e0b0 2015-07-09 09:18 +0000 [d558b00c85] Joshua Colp * bridge_native_rtp.c: Don't start native RTP bridging after attended transfer. The bridge_native_rtp module adds a frame hook to channels which are in a native RTP bridge. This frame hook is used to intercept when a hold or unhold frame traverses the bridge so native RTP can be stopped or started as appropriate. This is expected but exposes a specific bug when attended transfers are involved. Upon completion of an attended transfer an unhold frame is queued up to take one of the channels involved off hold. After this is done the channel is moved between bridges. When the frame hook is involved in this case for the unhold it releases the channel lock and acquires the bridge lock. This allows the bridge core to step in and move the channel (potentially changing the bridging techology) from another thread. Once completed the bridge lock is released by the bridge core. The frame hook is then able to acquire the bridge lock and wrongfully starts native RTP again, despite the channel no longer being in the bridge or needing to start native RTP. In fact at this point the frame hook is no longer attached to the channel. This change makes it so the native RTP bridge data is available to the frame hook when it is invoked. Whether the frame hook has been detached or not is stored on the native RTP bridge data and is checked by the frame hook before starting or stopping native RTP bridging. If the frame hook has been detached it does nothing. ASTERISK-25240 #close Change-Id: I13a73186a05f4e5a764f81e5cd0ccec1ed1891d2 2015-05-16 17:02 +0000 [b74b071369] Joshua Colp * res_sorcery_memory_cache: Backport to 13 Gerrit is complaining of conflicts when trying to create a patch series of all of the cherry-picked master commits, so I have instead squashed it all into one commit. ASTERISK-25067 #close Reported by: Matt Jordan Change-Id: I6dda90343fae24a75dc5beec84980024e8d61eb9 2015-07-08 04:21 +0000 [7ff1ac8797] Joshua Colp * res_rtp_asterisk: Ensure DTLS timeout timer is -1 if DTLS is not used. This change fixes a bug where the DTLS timeout timer would be initialized to 0 if DTLS was not used for an RTP session. ASTERISK-25103 Change-Id: If8d26bb054f1d300838850da5b8db9044c2fe2ac 2015-07-01 07:55 +0000 [05e8e14982] Joshua Colp * res_rtp_asterisk: Prevent simultaneous access to DTLS SSL context. This change moves logic for setting up the DTLS SSL contexts to when the SDP is done being processed instead of when ICE negotiation completes. It also stops handshakes from being initiated when we are acting as a server. Manipulating the SSL context when ICE negotiation has completed is problematic as the SSL context is not protected and if acting as a client the remote side may have started DTLS negotiation already. The retransmission timeout timer code has also been split up and simplified some. Both RTP and RTCP now have their own timers and the points at which the timer is stopped and started is now more specific. When a packet is sent the timer is started. When a response is received but before it is processed the timer is stopped. This provides a guarantee that the timeout is not occurring while the response is processed. ASTERISK-22805 #close ASTERISK-24550 #close ASTERISK-24651 #close ASTERISK-24832 #close ASTERISK-25103 #close ASTERISK-25127 #close Change-Id: Ib75ea2546f29d6efc3d2d37c58df6986c7bd9b91 2015-06-26 16:10 +0000 [38bace4fbb] Richard Mudgett * res_pjsip_t38.c: Fix always false if test. Calling t38_change_state() sets the t38 state so it makes little sense to then check the state right after the call for something else. * Made the code in t38_interpret_parameters() reject or exit T.38 mode as intended but not implemented. Change-Id: Ib281263a6ed44da9448132c4e6df1e183b8a3df2 2015-06-30 11:17 +0000 [2f7688c788] Richard Mudgett * res_pjsip_mwi.c: Use safer loop coding in mwi_subscription_mailboxes_str(). Change-Id: I6f39d809a6d1b47b35bb32b298f5a12f35d6f907 2015-06-30 11:14 +0000 [74be3a50d7] Richard Mudgett * res_pjsip_mwi.c: Eliminate a simple RAII_VAR. Change-Id: Ib1843f81e826a6c760c424c88eb70c350d9d61da 2015-06-30 11:11 +0000 [589e93617a] Richard Mudgett * res_pjsip_mwi.c: Fix mid-line log message line breaks. * Add create_mwi_subscriptions_for_endpoint() doxygen comment. Change-Id: I3c3f921f4ec749fb65b62d2f6fa0d4d1888b94e2 2015-06-26 18:48 +0000 [0d67e04359] Richard Mudgett * res_pjsip_mwi.c: Fix MWI subscription memory corruption crash. MWI subscriptions can crash or corrupt memory when using the subscription datastore to access the MWI subscription object because the datastore is not holding a reference to the object. * Give the subscription datastore a ref to the MWI subscription object. It is unfortunate that the ref causes a circular ref chain that must be explicitly broken to allow the memory to get released. The loop is broken when the subscription is shutdown and if the subscription setup fails. ASTERISK-25168 #close Reported by: Carl Fortin Change-Id: Ice4fa823f138ff10a6c74d280699c41a82836d4f 2015-07-02 14:51 +0000 [0422433f47] Richard Mudgett * PJSIP XML, XPIDF: Fix buffer size overwrite memory corruption error. When res_pjsip body generator modules were generating XML or XPIDF response bodies, there was a chance that the generated body would be the exact size of the supplied buffer. Adding the nul string terminator would then write beyond the end of the buffer and potentially corrupt memory. * Fix MALLOC_DEBUG high fence violations caused by adding a nul string terminator on the end of a buffer for XML or XPIDF response bodies. * Made calls to pj_xml_print() safer if the XML prolog is requested. Due to a bug in pjproject, the return value could be -1 _or_ AST_PJSIP_XML_PROLOG_LEN if the supplied buffer is not large enough. * Updated the doxygen comment of AST_PJSIP_XML_PROLOG_LEN to describe the return value of pj_xml_print() when the supplied buffer is not large enough. ASTERISK-25168 Reported by: Carl Fortin Change-Id: Id70e1d373a6a2b2bd9e678b5cbc5e55b308981de 2015-06-26 10:36 +0000 [8ea214aed7] Richard Mudgett * PJSIP FAX: Fix T.38 automatic reject timer NULL channel pointer dereferences. When a caller calls a FAX number and then hangs up right after the call is answered then the T.38 re-INVITE automatic reject timer may still be running after the channel goes away. * Added session NULL channel checks on the code paths that get executed by t38_automatic_reject() to prevent a crash when the T.38 re-INVITE automatic reject timer expires. ASTERISK-25168 Reported by: Carl Fortin Change-Id: I07b6cd23815aedce5044f8f32543779e2f7a2403 2015-06-05 15:37 +0000 [ada7346792] Richard Mudgett * res_pjsip: Need to use the same serializer for a pjproject SIP transaction. All send/receive processing for a SIP transaction needs to be done under the same threadpool serializer to prevent reentrancy problems inside pjproject and res_pjsip. * Add threadpool API call to get the current serializer associated with the worker thread. * Pick a serializer from a pool of default serializers if the caller of res_pjsip.c:ast_sip_push_task() does not provide one. This is a simple way to ensure that all outgoing SIP request messages are processed under a serializer. Otherwise, any place where a pushed task is done that would result in an outgoing out-of-dialog request would need to be modified to supply a serializer. Serializers from the default serializer pool are picked in a round robin sequence for simplicity. A side effect is that the default serializer pool will limit the growth of the thread pool from random tasks. This is not necessarily a bad thing. * Made pjsip_distributor.c save the thread's serializer name on the outgoing request tdata struct so the response can be processed under the same serializer. This is a cherry-pick from master. **** ASTERISK-25115 Change-Id: Iea71c16ce1132017b5791635e198b8c27973f40a NOTE: session_inv_on_state_changed() is disassociating the dialog from the session when the invite dialog becomes PJSIP_INV_STATE_DISCONNECTED. Unfortunately this is a tad too soon because our BYE request transaction has not completed yet. ASTERISK-25183 #close Reported by: Matt Jordan Change-Id: I8bad0ae1daf18d75b8c9e55874244b7962df2d0a 2015-07-04 18:22 +0000 [55137c3d12] Joshua Colp * res/res_http_websocket: Don't send HTTP response fragmented. This change makes it so that when accepting a WebSocket connection the HTTP response is sent as one packet instead of fragmented. Browsers don't like it when you send it fragmented. ASTERISK-25103 Change-Id: I9b82c4ec2949b0bce692ad0bf6f7cea9709e7f69 2015-06-27 18:47 +0000 [49f81ddb85] Matt Jordan * Makefile: Remove coverage files on 'make clean' This patch updates a variety of Makefiles in Asterisk's build system to remove .gcda and .gcno files when 'make clean' is executed. These files are generated when '--enable-coverage' is passed to the Asterisk configure script. Change-Id: Ib70b41eea2ee2908885bff02e80faf9f40c84602 2015-07-02 09:08 +0000 [e0f565663b] Walter Doekes * chan_sip: Fix early call pickup channel leak. When handle_invite_replaces() was called, and either ast_bridge_impart() failed or there was no bridge (because the channel we're picking up was still ringing), chan_sip would leak a channel. Thanks Matt and Corey for checking the bridge path. ASTERISK-25226 #close Change-Id: Ie736bb182170a73eef5bcef0ab0376f645c260c8 2015-07-02 06:19 +0000 [a5a262be78] Walter Doekes * chan_mgcp: Don't call close on fd -1. ASTERISK-25220 #close Change-Id: Ic48f3a82f51ada87f2fb0e016c9efe0ad56f1ee3 2015-07-02 06:10 +0000 [b835312b4c] Walter Doekes * rtp_engine: Skip useless self-assignment in ast_rtp_engine_unload_format. When running valgrind on Asterisk, it complained about: ==32423== Source and destination overlap in memcpy(0x85a920, 0x85a920, 304) ==32423== at 0x4C2F71C: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/...) ==32423== by 0x55BA91: ast_rtp_engine_unload_format (rtp_engine.c:2292) ==32423== by 0x4EEFB7: ast_format_attr_unreg_interface (format.c:1437) The code in question is a struct assignment, which may be performed by memcpy as a compiler optimization. It is changed to only copy the struct contents if source and destination are different. ASTERISK-25219 #close Change-Id: I6d3546c326b03378ca8e9b8cefd41c16e0088b9a 2015-07-02 05:16 +0000 [6551e16e03] Walter Doekes * astfd: Fix buffer overflow in DEBUG_FD_LEAKS. If DEBUG_FD_LEAKS was used and more file descriptors than the default of 1024 were available, some DEBUG_FD_LEAKS-patched functions would overwrite memory past the fixed-size (1024) fdleaks buffer. This change: - adds bounds checks to __ast_fdleak_fopen and __ast_fdleak_pipe - consistently uses ARRAY_LEN() instead of sizeof() or 1023 or 1024 - stores pointers to constants instead of copying the contents - reorders the fdleaks struct for possibly tighter packing - adds a tiny bit of documentation ASTERISK-25212 #close Change-Id: Iacb69e7701c0f0a113786bd946cea5b6335a85e5 2015-07-02 04:57 +0000 [f4dd9560cf] Walter Doekes * res_timing: Don't close FD 0 when out of open files. This fixes so a failure to get a timer file descriptor does not cascade to closing FD 0. On error, both res_timing_kqueue and res_timing_timerfd would call the destructor before setting the file handle. The file handle had been initialized to 0, causing FD 0 to be closed. This in turn, resulted in floods of "CLI>" messages and an unusable terminal. ASTERISK-19277 #close Reported by: Barry Chern For the 13 branch, this was already fixed. This patch only ensures that we do not attempt to close a negative file descriptor. Change-Id: I147d7e33726c6e5a2751928d56561494f5800350 2015-07-01 17:25 +0000 [78a1f4aa46] Richard Mudgett * chan_vpb.cc: Fix compiler warning Jenkins found. Change-Id: I0ec7fd10d56d90d5a60b12b5a7d6807f265ac5e0 2015-07-01 13:34 +0000 [6b16fbfc22] Scott Griepentrog * Channel alert pipe: improve diagnostic error return When a frame is queued on a channel, any failure in ast_channel_alert_write is logged along with errno. This change improves the diagnostic message through aligning the errno value with actual failure cases. ASTERISK-25224 Reported by: Andrey Biglari Change-Id: I1bf7b3337ad392789a9f02c650589cd065d20b5b 2015-07-01 16:04 +0000 [8e07ab145d] Matt Jordan * sorcery/realtime: Add a bit of debug and warning messages for bad configs When a mapping does not exist between a sorcery.conf defined object and a realtime mapping in extconf, currently, the user will receive a slew of ERROR messages that don't really tell what is happening. Some ERROR messages may even be misleading, as they occur after the sorcery API has already given up on the attempt to load and create the sorcery object. This patch adds a bit of debug and a useful WARNING message for when a wizard's open callback fails for a particular object type. In the bad configurations that resulted in this patch, this provided a 'root cause' WARNING message that pointed in the right direction of the configuration problem. Change-Id: I1cc7344f2b015b8b9c85a7e6ebc8cb4753a8f80b 2015-06-29 12:45 +0000 [156395e743] Mark Michelson * res_sorcery_realtime: Fix leak of sorcery object type. This prevents a leak of a sorcery object type when realtime sorcery objects are retrieved by fields or when multiple objects are retrieved. The extent of this leak is that sorcery object types would be leaked. These are allocated whenever an object type is registered with sorcery, meaning that on module shutdown, these objects would be leaked. This could be problematic if many reloads were performed, but it is not as severe as if every sorcery object retrieved from realtime were being leaked. ASTERISK-25165 #close Reported by Corey Farrell Change-Id: I625c3b50eee4576670b7eeb013c81ad043b4b4f8 2015-06-26 22:02 +0000 [a5e9c4e9b2] Matt Jordan * res/res_corosync: Always decline module load, instead of failing Returns a 'failure' from the module load routine indicates to Asterisk that it should abort loading completely. This is rarely - in fact, really, never - a good option. Aborting load of Asterisk from a dynamic module implies that the core, and the rest of the dynamic modules, don't matter: we should abandon all processing. res_corosync is really not that important. This patch updates the module such that, if it fails to load, it politely declines (emitting ERROR messages along the way), and allows Asterisk to continue to function. Note that this issue was keeping Asterisk unit tests from running on certain build agents. Change-Id: I252249e81fb9b1a68e0da873f54f47e21d648f0f 2015-06-26 20:38 +0000 [399cd8bcd9] Matt Jordan * main/pbx: Resolve case sensitivity regression in PBX hints When 8297136f was merged for ASTERISK-25040, a regression was introduced surrounding the case sensitivity of device names within hints. Previously, device names - such as 'sip/foo' - were compared in a case insensitive fashion. Thus, 'sip/foo' was equivalent to 'SIP/foo'. After that patch, only the case sensitive name would match, i.e., 'SIP/foo'. As a result, some dialplan hints stopped working. This patch re-introduces case insensitive matching for device names in hints. ASTERISK-25040 ASTERISK-25202 #close Change-Id: If5046a7d14097e1e3c12b63092b9584bb1e9cb4c (cherry picked from commit 96bbcf495a1da9e607d9b04a44b5c4f49e83cc03) 2015-06-26 16:12 +0000 [24eec5a10b] Mark Michelson * res_pjsip_nat: Adjust when contact should be rewritten. A previous change made the contact only get rewritten if the dialog's route set was not marked frozen. Unfortunately, while the intent of this is correct, the dialog's route set actually gets marked as frozen earlier than expected, especially for UAS dialogs. Instead, the idea is that the contact needs to not be rewritten if there is a pre-existing route set on the dialog. This is now accomplished by checking the dialog's route set list instead of checking if the route set is frozen. Doing this causes some broken tests to begin passing again. ASTERISK-25196 Reported by Mark Michelson Change-Id: I525ab251fd40a52ede327a52a2810a56deb0529e 2015-06-19 18:27 +0000 [0ec461a637] Richard Mudgett * res_pjsip_outbound_registration.c: Add a serializer shutdown group. The client_state objects contain a serializer used to send the outbound REGISTER messages. Once all those message transactions are complete then the module can shutdown. ASTERISK-24907 #close Reported by: Kevin Harwell Change-Id: Ibb2fe558f98190f2a06da830e0fadfa25516f547 2015-06-26 10:41 +0000 [05a2cc1293] Mark Michelson * res_pjsip_refer: Prevent sending duplicate headers. res_pjsip_refer will attempt to add Referred-By or Replaces headers to outbound INVITEs at times. If the INVITE gets challenged for authentication, then we will resend the INVITE. Prior to this patch, the Referred-By or Replaces header would be re-added to the outbound INVITE, resulting in duplicated headers. ASTERISK-25204 #close Reported by Mark Michelson Change-Id: I59fb5c08b4d253c0dba9ee3d3950b5025358222d 2015-06-23 17:43 +0000 [028fa54620] Mark Michelson * res_pjsip_nat: Rewrite route set when required. When performing some provider testing, the rewrite_contact option was interfering with proper construction of a route set when sending an ACK after receiving a 200 OK response to an INVITE. The initial INVITE was sent to address sip:foo. The 200 OK had a Contact header with URI sip:bar. In addition, the 200 OK had Record-Route headers for sip:baz and sip:foo, in that order. Since the Record-Route headers had the lr parameter, the result should have been: * Set R-URI of the ACK to sip:bar. * Add Route headers for sip:foo and sip:baz, in that order. However, the rewrite_contact option resulted in our rewriting the Contact header on the 200 OK to sip:foo. The result was: * R-URI remained sip:foo. * We added Route headers for sip:foo and sip:baz, in that order. The result was that sip:bar was not indicated in the ACK at all, so the far end never received our ACK. The call eventually dropped. The intention of rewrite_contact is to rewrite the most immediate destination of our SIP request to be the same address on which we received a request or response. In the case of processing a SIP response with Record-Route headers, this means that instead of rewriting the Contact header, we should instead rewrite the bottom-most Record-Route header. In the case of processing a SIP request with Record-Route headers, this means we rewrite the top-most Record-route header. Like when we rewrite the Contact header, we also ensure to update the dialog's route set if it exists. ASTERISK-25196 #close Reported by Mark Michelson Change-Id: I9702157c3603a2d0bd8a8215ac27564d366b666f 2015-06-19 16:16 +0000 [84c12f9e0c] Richard Mudgett * threadpool, res_pjsip: Add serializer group shutdown API calls. A module trying to unload needs to wait for all serializers it creates and uses to complete processing before unloading. ASTERISK-24907 Reported by: Kevin Harwell Change-Id: I8c80b90f2f82754e8dbb02ddf3c9121e5e966059 2015-06-16 15:06 +0000 [602c4b74b5] Richard Mudgett * res_pjsip_outbound_registration.c: Fix handle_client_state_destruction() refs * handle_client_state_destruction() must always be passed a ref to client_state because it will always unref client_state. handle_registration_response() was not passing a client_state ref. * Made the final un-REGISTER message get sent normally using the pjproject register control structure in handle_client_state_destruction(). The previous code attempted to short circuit the response handling for the module to unload. That doesn't work for a couple reasons. One, pjsip_regc_send() may call the registered callback before it returns and unbalance the client_state ref count. Two, the registered callback handles any authentication for the un-REGISTER message. * Made the distinction between internal registration state and external registration status with sip_outbound_registration_status_str(). This is necessary to avoid altering documented AMI messages with internal changes. * Removed references to client_state->client outside of the serializer thread. When handle_client_state_destruction() destroys the pjproject register control structure that memory is freed and cannot be referenced anymore. These accesses were to provide information for debug and off-nominal warning messages. * In sip_outbound_registration_timer_cb() you should not access entry->id after unrefing client_state because the passed in entry is normally pointing to the timer entry in the client_state object. ASTERISK-24907 Reported by: Kevin Harwell Change-Id: Ia7b446d8644b6b4550ef5bea49527671de65183f 2015-06-15 15:28 +0000 [8c6a95a9ac] Richard Mudgett * res_pjsip_outbound_registration.c: Use ast_sorcery_object_unregister() API The sorcery pjsip 'registration' config object needs to be destroyed on module unload. Otherwise, a reload of res_pjsip could try to use callbacks for a previously unloaded instance of the module provided by ast_sorcery_object_register() or one of the variants. Also, if res_pjsip_outbound_registration were subsequently reloaded, the sorcery config field objects would be registered in sorcery twice. ASTERISK-24907 Reported by: Kevin Harwell Change-Id: I304fad13dece2604af48353f6c6d9d5c7b064697 2015-06-25 06:42 +0000 [e4a2ef9e4e] Joshua Colp * channel: Remove ignore of answer on non-outgoing channels. Due to the way that channels can now be moved around inside of Asterisk it is possible for the outgoing flag of a channel to get cleared before it has been answered. This results in the bridge not receiving notification that the outgoing leg has been answered. This most easily exhibits itself with DTMF based blond transfers. Since the answer of the outgoing leg is ignored the other party continues to receive both a locally generated ringing and the media stream of the outgoing leg upon its answer. This results in no media being heard. This change removes the ignore of the answer and allows it to pass through. ASTERISK-25171 #close Change-Id: I82aedcec4f89f34a2e5472086dfc9a6c775bca8e 2015-06-15 15:28 +0000 [20f3d77ab9] Richard Mudgett * sorcery: Add ast_sorcery_object_unregister() API call. Find and unlink the specified sorcery object type to complement ast_sorcery_object_register(). Without this function you cannot completely unload individual modules that use sorcery for configuration. ASTERISK-24907 Reported by: Kevin Harwell Change-Id: I1c04634fe9a90921bf676725c7d6bb2aeaab1c88 2015-06-15 13:38 +0000 [4313f32969] Richard Mudgett * res_pjsip_outbound_registration.c: Reorder load_module() and unload_module(). It is best if the loading code creates and initializes the module's infrastructure before letting the system know of its existence. The unloading code needs to reverse the actions of the loading code and in the reverse order. ASTERISK-24907 Reported by: Kevin Harwell Change-Id: I5d151383e9787b5b60aa5e1627b10f040acdded4 2015-06-23 14:34 +0000 [890c923786] Richard Mudgett * AMI: Add Linkedid to the standard channel snapshot AMI event headers. * The AMI version is bumped to 2.8.0. ASTERISK-25189 #close Reported by: John Hardin Change-Id: I2b1778c3fdc1dca0ed55db4e3a639eddfb16c2ac 2015-06-24 14:30 +0000 [2602a7484b] Richard Mudgett * test.c: Add unit test registration checks for summary and description. Added checks when a unit test is registered to see that the summary and description strings do not end with a new-line '\n' for consistency. The check generates a warning message and will cause the /main/test/registrations unit test to fail. * Updated struct ast_test_info member doxygen comments. Change-Id: I295909b6bc013ed9b6882e85c05287082497534d 2015-06-24 14:39 +0000 [2b0482d699] Richard Mudgett * Unit tests: Fix unit test description strings. Analyzing the code shows that the unit test summary and description strings should not end with a new-line character. Where these strings are used in the code a new-line is provided for output. Change-Id: I129284f5e7ca93d82532334076da4c462d3d9fba 2015-06-23 11:21 +0000 [e99e654d75] Joshua Colp * app_dial: Hold reference to calling channel formats when dialing outbound. Currently when requesting a channel the native formats of the calling channel are provided to the core for usage when dialing the outbound channel. This occurs without holding the channel lock or keeping a reference to the formats. This is problematic as the channel driver may end up changing the formats during this time. In the case of chan_sip this happens when an SDP negotiation completes. This change makes it so app_dial keeps a reference to the native formats of the calling channel which guarantees that they will remain valid for the period of time needed. ASTERISK-25172 #close Change-Id: I2f0a67bd0d5d14c3bdbaae552b4b1613a283f0db 2015-06-17 05:04 +0000 [80e82dc97f] Joshua Colp * res_pjsip_mwi: Set up unsolicited MWI upon registration. The res_pjsip_mwi previously required a reload to set up the proper subscriptions to allow unsolicited MWI to work. This change makes it so the act of registering will also cause this to occur. This is particularly useful if realtime is involved as no reload needs to occur within Asterisk to cause the MWI information to get sent. ASTERISK-25180 #close Change-Id: Id847b47de4b8b3ab8858455ccc2f07b0f915f252 2015-06-22 15:11 +0000 [35a99b6394] Kevin Harwell * bridge.c: Hangup attended transfer target if bridged After completing an attended transfer the transfer target channel was not being hung up after leaving the bridge. Added an explicit softhangup to hangup said channel, but only if it was previously bridged. ASTERISK-24782 #close Reported by: John Bigelow Change-Id: Idde9543d56842369384a5e8c00d72a22bbc39ada 2015-06-17 16:23 +0000 [036bc0012f] Richard Mudgett * res_pjsip_outbound_registration.c: Add missing line endings to CLI commands Change-Id: I39ae612746d892d2dbe86f3ff2d7027fa1da57f7 2015-06-12 14:29 +0000 [bec7435945] Richard Mudgett * res_pjsip_outbound_registration.c: Eliminate simple RAII_VAR() usage. Change-Id: I399cb9d61bbba706b48c98e0bf75e98984cd9a9e 2015-06-12 13:33 +0000 [c2519fdf1c] Richard Mudgett * res_pjsip_outbound_registration.c: Misc code cleanups. * Break some long lines. * Fix doxygen comment. Change-Id: I8f12ba6822f84d5e7bb575280270cd7e2fefb305 2015-06-22 09:26 +0000 [a419c69def] Alexander Traud (License 6520) * chan_sip: Reload peer without its old capabilities. On reload, previously allowed codecs were not removed. Therefore, it was not possible to remove codecs while Asterisk was running. Furthermore, newly added codecs got appended behind the previous codecs. Therefore, it was not possible to add a codec with a priority of #1. This change removes the old capabilities before the current ones are added. ASTERISK-25182 #close Reported by: Alexander Traud patches: asterisk_13_allow_codec_reload.patch uploaded by Alexander Traud (License 6520) Change-Id: I62a06bcf15e08e8c54a35612195f97179ebe5802 2015-06-20 19:38 +0000 [74616ae43d] Joshua Colp * chan_sip: Destroy peers without holding peers container lock. Due to the use of stasis_unsubscribe_and_join in the peer destructor it is possible for a deadlock to occur when an event callback is occurring at the same time. This happens because the peer may be destroyed while holding the peers container lock. If this occurs the event callback will never be able to acquire the container lock and the unsubscribe will never complete. This change makes it so the peers that have been removed from the peers container are not destroyed with the container lock held. ASTERISK-25163 #close Change-Id: Ic6bf1d9da4310142a4d196c45ddefb99317d9a33 2015-06-18 13:16 +0000 [9015bb4c8c] Mark Michelson * Resolve race conditions involving Stasis bridges. This resolves two observed race conditions. First, a bit of background on what the Stasis application does: 1a Creates a stasis_app_control structure. This structure is linked into a global container and can be looked up using a channel's unique ID. 2a Puts the channel in an event loop. The event loop can exit either because the stasis_app_control structure has been marked done, or because of some other factor, such as a hangup. In the event loop, the stasis_app_control determines if any specific ARI commands need to be run on the channel and will run them from this thread. 3a Checks if the channel is bridged. If the channel is bridged, then ast_bridge_depart() is called since channels that are added to Stasis bridges are always imparted as departable. 4a Unlink the stasis_app_control from the container. When an ARI command is received by Asterisk, the following occurs 1b A thread is spawned to handle the HTTP request 2b The stasis_app_control(s) that corresponds to the channel(s) in the request is/are retrieved. If the stasis_app_control cannot be retrieved, then it is assumed that the channel in question has exited the Stasis app or perhaps was never in Stasis in the first place. 3b A command is queued onto the stasis_app_control, and the channel's event loop thread is signaled to run the command. 4b While most ARI commands do nothing further, some, such as adding or removing channels from a bridge, will block until the command they issued has been completed by the channel's event loop. The first race condition that is solved by this patch involves a crash that can occur due to faulty detection of the channel's bridged status in step 3a. What can happen is that in step 2a, the event loop may run the ast_bridge_impart() function to asynchronously place the channel into a bridge, then immediately exit the event loop because the channel has hung up. In step 3a, we would detect that the channel was not bridged and would not call ast_bridge_depart(). The reason that the channel did not appear to be bridged was that the depart_thread that is spawned by ast_bridge_impart() had not yet started. That is the thread where the channel is marked as being bridged. Since we did not call ast_bridge_depart(), the Stasis application would exit, and then the channel would be destroyed Then the depart_thread would start up and try to manipulate the destroyed channel, causing a crash. The fix for this is to switch from using ast_channel_is_bridged() to checking the NULLity of ast_channel_internal_bridge_channel() to determine if ast_bridge_depart() needs to be called. The channel's internal bridge_channel is set when ast_bridge_impart() is called and is NULLed by the call to ast_bridge_depart(). If the channel's internal bridge_channel is non-NULL, then the channel must have been imparted into the bridge and needs to be departed, even if the actual bridging operation has not yet started. By departing the channel when necessary, the thread that is running the Stasis application will block until the bridge gives the okay that the depart_thread has exited. The second race condition that is solved by this patch involves a leak of HTTP handler threads. The problem was that step 2b would successfully retrieve a stasis_app_control structure. Then step 2a would exit the channel from the event loop due to a hangup. Steps 3a and 4a would execute, and then finally steps 3b and 4b would. The problem is that at step 4b, when attempting to add a channel to a bridge, the thread would block forever since the channel would never execute the queued command since it was finished with the event loop. This meant that the HTTP handling thread would be leaked, along with any references that thread may have owned (in my case, I was seeing bridges leaked). The fix for this is to hone in better on when the channel has exited the event loop. The stasis_app_control structure has an is_done field that is now set at each point where the channel may exit the event loop. If step 2b retrieves a valid stasis_app_control structure but the control is marked as done, then the attempted operation exits immediately since there will be nothing to service the attempted command. ASTERISK-25091 #close Reported by Ilya Trikoz Change-Id: If66265b73b4c9f8f58599124d777fedc54576628 2015-06-16 11:13 +0000 [723a9d4225] Mark Michelson * Parking: Add documentation for AMI ParkedCallSwap event. This event was added some time ago in order to clarify when a channel took the place of another channel in a parking lot. However, there was no XML documentation added for the event. This patch adds the XML documentation. ASTERISK-24900 #close Reported by Rusty Newton Change-Id: I4cfe7777c4b94bbff91c9221c6096a7a02a92eac 2015-06-15 16:40 +0000 [79bf56c78a] Corey Farrell * func_pjsip_aor: Fix leaked contact from iterator. ASTERISK-25162 #close Change-Id: Id79aa3c6fe490016ee98efc97ac4c1d3f461f97e 2015-06-12 16:58 +0000 [31c77b157b] Kevin Harwell * res_pjsip: Add option to force G.726 to be treated as AAL2 packed. Some phones send g.726 audio packed for AAL2, which differs from what is recommended by RFC 3351. If Asterisk receives audio formatted as such when negotiating g.726 then it sounds a bit distorted. Added an option to res_pjsip_endpoint that allows g.726 negotiated audio to be treated as g.726 AAL2 packed. ASTERISK-25158 #close Reported by: Steve Pitts Change-Id: Ie7e21f75493d7fe53e75e12c971e72f5afa33615 2015-06-14 19:48 +0000 [de8c7f46ed] Matt Jordan * main/cdr: Carry over the disable flag when 'disable all' is specified The CDR_PROP function (as well as the NoCDR application) set the 'disable all' flag (AST_CDR_FLAG_DISABLE_ALL) on the current CDR. This flag is supposed to be applied to all CDRs that are currently in the chain, as well as all CDRs that may be created in the future. Currently, however, the flag is only applied to the existing CDRs in the chain; new CDRs do not receive the 'disable all' flag. In particular, this affects parallel dials, which generate new CDRs for each pair of channels in the dial attempt. This patch carries over the 'disable all' flag when it is specified on a CDR and a new CDR is generated for the chain. ASTERISK-24344 #close Change-Id: I91a0f0031e4d147bdf8a68ecd08304d506fb6a0e 2015-06-12 14:28 +0000 [78ea356e78] Matt Jordan * main/cdr: Copy context/exten on chained CDRs for parallel dials in subroutines When a parallel dial occurs, a new CDR will be created for each dial attempt that is made. In most circumstances, the act of creating each CDR in the chain will include a step that updates the Party A snapshot, which causes the context/extension of the Party A to be copied onto the CDR object. However, when the Party A is in a subroutine, we explicitly do *not* copy the context/extension onto the CDR. This prevents the Macro or GoSub routine name from blowing away the context/extension that the channel was originally executing in. For the original CDR, this is not a problem: the original CDR already recorded the last known 'good' state of the channel just prior to it going into the subroutine. However, for newly generated CDRs in a chain, there is no context/extension set on them. Since we are in a subroutine, we will never set the Party A's context/extension on the CDR, and we end up with a CDR with no destination recorded on it. This patch updates the creation of a chained CDR such that it copies over the original CDR's context/extension. This is the last known "good" state of the CDR, and is a reasonable starting point for the newly generated CDR. In the case where we are not in a subroutine, subsequent code will update the location of the CDR from the Party A information; in the case where we are in a subroutine, the context/extension on the original CDR is the correct information. ASTERISK-24443 #close Change-Id: I6a3ef0d6e458d3b9b30572feaec70f2964f3bc2a 2015-06-11 08:18 +0000 [3f57f3f8ec] Damian Ivereigh * chan_sip.c: Update dialog fromtag after request with auth If a client sends and INVITE which is 401 rejected, then subsequently sends a new INVITE with the auth info and uses a different fromtag from the first INVITE, Asterisk will accept the new INVITE as part of the original dialog - match_req_to_dialog() specifically ignores the fromtag. However it does not update the stored dialog with the new fromtag. This results in Asterisk being unable to match future packets that are part of this dialog (such as the ACK to the OK or the OK to the BYE), and the call is dropped. This problem was originally found when using an NEC-i SV8100-GE (NEC SIP Card). * After a successful match of a packet to the dialog, if the packet is not a SIP_RESPONSE, authentication is present and the fromtags are different, the stored fromtag is updated with the one from the recent INVITE. ASTERISK-25154 #close Reported by: Damian Ivereigh Tested by: Damian Ivereigh Change-Id: I5c16cf3b409e5ef9f2b2fe974b6bd2a45a6aa17e 2015-06-11 18:52 +0000 [30a0f2d9ac] Matt Jordan * chan_pjsip: Set the context and extension on the channel when created Prior to this patch, chan_pjsip was failing to pass the endpoint's context and the desired extension to the ast_channel_alloc_* routine. This caused a new channel snapshot to be issued without a context and extension, which can cause some reporting issues for users of AMI, CEL, and other APIs. The channel driver would later set the context and extension on the channel such that the channel would start in the correct location in the dialplan, but the information reported in the initial event would be incorrect. This patch modifies the channel driver such that it now passes the context and extension directly into the allocation routine. This provides the information in the new channel snapshot published over Stasis. ASTERISK-25156 #close Reported by: cloos Change-Id: Ic6f8542836e596db8f662071d118e8f934fdf25e 2015-06-10 18:28 +0000 [dbb067279e] Joshua Colp * bridge: When performing a blonde transfer update connected line information. When performing a blonde transfer the code uses the old masquerade mechanism to move a channel around. As a result of this certain information, such as connected line, is moved between the channels involved. Upon completion of the move a frame is queued which is supposed to update the connected line information on the channel. This does not occur as the code considers it a redundant update since the masquerade operation updated the channel (but did not inform it of the new connected line information). The code also does not queue a connected line update to be handled by the thread handling the channel. Without this any other channel that may be loosely involved does not know it is talking to a different caller. This change does the following to resolve this: 1. The indicated connected line information is cleared upon completion of the masquerade operation when doing a blonde transfer. This prevents the connected line update from being considered redundant. 2. A connected line update frame is now queued upon the completion of the masquerade operation so any other channel loosely involved knows that there is a different caller. ASTERISK-25157 #close Reported by: Joshua Colp Change-Id: Ibb8798184a1dab3ecd35299faecc420034adbf20 2015-06-11 14:39 +0000 [a2f4d03c87] Richard Mudgett * app_directory: Fix crash when using the alias option 'a'. The voicemail.conf mailbox key/value pair is defined as: =[[,[,[,[,]]]]] Where all fields in the value including the field values are optional. Since the parsing code for the mailbox key/value pair is sloppy, this patch tightens the parsing for the directory information. * Renamed the 'pos' and 'bufptr' variables to 'name' and 'options' respectively in search_directory_sub(). Those names make more sense. * Made sure that search_directory_sub() is dealing with the voicemail.conf mailbox options field if it even exists when looking for the 'hidefromdir' and 'alias' options. * Fix crash if a voicemail.conf mailbox is just =, when the 'a' option is used. If there were no fields after the name then the 'options' pointer was not checked for NULL. * Fix users.conf alias processing if the 'a' option is used. The wrong variable was used. ASTERISK-25087 #close Reported by: Chet Stevens Change-Id: I86052ea77307beddddba5279824d39dc0d593374 2015-06-09 15:31 +0000 [a2b718f4f6] Richard Mudgett * res_pjsip.h: Fix some doxygen comments. Change-Id: I4615771077c3c6a0a7273da6d7b5f77af7e8d976 2015-06-05 13:46 +0000 [32ddf6d86b] Richard Mudgett * taskprocessor.c: Remove extra unref from off-nominal path. Change-Id: Iee3bd8c8a528776056972066698fe735f0f6cf60 2015-04-20 16:00 +0000 [cf98c744d5] Yousf Ateya * chan_iax2: Prevent deadlock between hangup and sending lagrq/ping channels/chan_iax.c: Prevent the deadlock between iax2_hangup and send_lagrq/ send_ping. This deadlock happens because the scheduled task send_lagrq(or send_ping) starts execution after the call hangup procedure starts but before it deletes the tasks in the scheduler. The solution is to delete scheduled lagrq (and ping) task asynchronously (i.e. schedule AST_SCHED_DEL for these tasks); By this, AST_SCHED_DEL will be called in a new context (doesn't have callno locked). This commit also cleans up the procedure of sending LAGRQ and PING. main/sched.c: Do not assert when deleting non existant entry from scheduler. This assert seems to be the reason for a lot of awkward code to avoid it. ASTERISK-24983 #close Reported by: Y Ateya Change-Id: I03bec1fc8faacb89630269e935fa667c6d6c080c 2015-05-31 12:37 +0000 [8af6c9cf6b] Ivan Poddubny * res_pjsip_transport_websocket: Fix use-after-free bugs. This patch fixes use-after-free bugs caught by AddressSanitizer. 1. PJSIP transport manager may decide to destroy transport on its own. For example, when the contact registered via websocket has not renewed its registration in time. The transport was destoyed, but the websocket listener thread was still active until the socket closes, and then tried to call transport_shutdown on transport that has been freed. Also, the transport destructor accessed wstransport->rdata.tp_info.pool right after freeing memory that contained wstransport itself. This patch converts transport to an ao2 object, allowing it to be refcounted, so that it is available until both websocket listener and pjsip transport manager are finished with it. 2. The websocket listener deletes the last reference on websocket session when the tcp connection is closed, and it gets destroyed, but the transport manager may still use it, for example when disconnect happens in the middle of a SIP transaction. A new reference to websocket session has been added that is released with the transport to prevent this. ASTERISK-25096 #close Reported by: Josh Kitchens ASTERISK-24963 #close Reported by: Badalian Vyacheslav Change-Id: Idc0b63eb6e459c1ddfb2430127d34b3c4d8d373b 2015-06-09 13:41 +0000 [3046bc17ed] ibercom * weakref attribute detection broken with gcc 4.6 and higher GCC 4.7 Manual: http://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Function-Attributes.html weakref ("target") A weak reference is an alias that does not by itself require a definition to be given for the target symbol. ASTERISK-22559 #close Reported by: Ibercom Change-Id: I36a136cae947b65187a697533416f9ff9a0b8cdf 2015-06-08 10:09 +0000 [55c8daf88b] Corey Farrell * Fix unsafe uses of ast_context pointers. Although ast_context_find, ast_context_find_or_create and ast_context_destroy perform locking of the contexts table, any context pointer can become invalid at any time that the contexts table is unlocked. This change adds locking around all complete operations involving these functions. Places where ast_context_find was followed by ast_context_destroy have been replaced with calls ast_context_destroy_by_name. ASTERISK-25094 #close Reported by: Corey Farrell Change-Id: I1866b6787730c9c4f3f836b6133ffe9c820734fa 2015-06-04 07:14 +0000 [e0090216db] ibercom * CLI: Cosmetic issue - core show uptime Show uptime information ends with an unnecessary space. Now NEEDCOMMA is better defined. Change-Id: I11b360504a0703309ff51772ff8f672287f3c5a1 2015-06-03 17:41 +0000 [88212ccb7f] Mark Michelson * res_pjsip: Prevent access of NULL channels. It is possible to receive incoming requests or responses after the channel on an ast_sip_session has been destroyed and NULLed out. Handlers of these sorts of requests or responses need to be prepared for the possibility that the channel is NULL or else they could cause a crash. While several places have been amended to deal with NULL channels, there were still a couple of places that needed updating. res_pjsip_dtmf_info.c: When handling incoming INFO requests, we need to return early if there is no channel on the session. res_pjsip_session.c: When handling a 302 response, we need to stop the redirecting attempt if there is no channel on the session. ASTERISK-25148 #close reported by Mark Michelson Change-Id: Id1a75ffc3d0eaa168b0b28188fb54d6cf9fc47a9 2015-06-01 11:45 +0000 [f5d5aa67dc] Kevin Harwell * AMI: Escape string values. So this issue is a bit complicated. Since it is possible to pass values to AMI that contain a '\r\n' (or other similar sequences) these values need to be escaped. One way to solve this is to escape the values and then pass the escaped values to the AMI variable parameter string building function. However, this puts the onus on the pre-build function to escape all string values. This potentially requires a fair amount of changes along with a lot of string allocations/freeing for all values. Surely there is a way to push this complexity down a level into the string building function itself? This of course is possible, but ends up requiring a way to distinguish between strings that need to be escaped and those that don't. The best way to handle this is by introducing a new format specifier in the format string. For instance a %s (no escape) and %S (escape). However, that is a bit weird and unexpected. So faced with those possibilities this patch implements a limited version of the first option. Instead of attempting to escape all string values this patch only escapes those values that make sense. This approach limits the number of changes and doesn't suffer from the odd format specifier problem. ASTERISK-24934 #close Reported by: warren smith Change-Id: Ib55a5b84fe0481b0f2caaaab68c566f392c0aac0 2015-06-03 13:17 +0000 [5dc9fb4198] gtjoseph * res_pjsip/location: Fix ref leak in contact_apply_handler contact_apply_handler calls ast_res_pjsip_find_or_create_contact_status to force the creation of a contact_status object whenever a new contact is added but it didn't unref the returned object. Added an ao2_cleanup(status) to plug the leak. ASTERISK-25141 Change-Id: Icc1401cae142855a1abc86ab5179dfb3ee861c40 Reported-by: Corey Farrell 2015-06-02 15:07 +0000 [d908272b7e] David M. Lee * Fixes for OS X * Add some type casting so tv_usec can really be a long, instead of some strange platform specific type. * Add some .dylib style files to .gitignore. * Switch from using -Xlinker to -Wl,. For [reasons unknown][], newer versions of GCC, when compiling the Homebrew formula for Asterisk, are not properly passing the -Xlinker options to the linker. Given that -Wl, does exactly the [same thing][], and does it properly, this patch changes the -Xlinker options to use -Wl, instead. [reasons unknown]: http://bit.ly/1SUbEYx [same thing]: https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html Change-Id: Id5e6b3c6cc86282ea5fca630dc3991137c5bf4dd 2015-05-30 20:22 +0000 [9e7827e3ac] Corey Farrell * pjsip_configuration: Fix leak in persistent_endpoint_update_state. The loop to find the first available contact of an endpoint grabbed contact from the iterator, then checked for offline state. This caused the first contact after the state was found to leak a reference. ASTERISK-25141 Change-Id: Id0f1d87410fc63742db0594eb4b18b36e99aec08 2015-05-31 11:33 +0000 [888bb49618] Ivan Poddubny * Fix buffer overflow in slin sample frames generation. The length of frames retured by sample functions was twice as large as real, what caused global buffer overflow caught by AddressSanitizer. ASTERISK-24717 #close Reported by: Badalian Vyacheslav Change-Id: Iec2fe682aef13e556684912f906bedf7c18229c6 2015-05-29 16:19 +0000 [857166b5e5] gtjoseph * res_pjsip/location: Fix memory leak in permanent_uri_handler When permanent_uri_handler was creating the contact status object for each contact, it wasn't unreffing it at the end of the loop. ASTERISK-25141 #close Reported-by: Corey Farrell Change-Id: I7bb127994677bb3d459f87952f8425c9b9967b12 2015-05-29 14:52 +0000 [1558a89129] gtjoseph * Revert "endpoint/stasis: Eliminate duplicate events on endpoint status change" This reverts commit 35c699086ae2fd81b2473307ccb2ae79ad32375a. Change-Id: Ia98c2b4820cf579a5b9bb75e9e05d7a233205fb7 2015-05-27 13:22 +0000 [35c699086a] gtjoseph * endpoint/stasis: Eliminate duplicate events on endpoint status change When an endpoint was created, it's messages were being forwarded to both the tech endpoint topic and the all endpoints topic. Since the tech topic was also forwarded to all, this was resulting in duplicate messages whenever an endpoint published. This patch causes the endpoint to only forward to the tech topic and lets the tech topic forward to all. To accomplish this, the existing stasis_cp_single_create function (which both creates and forwards) was cloned and split into 2 functions, one that creates the topic and one that sets up the forwarding. This allows endpoint_internal_create to create the topic from the endpoint_all cache without forwarding it there, then allows it to do the forward to the tech's topic. ASTERISK-25137 #close Reported-by: Vitezslav Novy ASTERISK-25116 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: I26d7d4926a0861748fd3bdffe316b75b549a801c 2015-05-26 13:56 +0000 [fe21f2e52f] Richard Mudgett * res_pjsip_session: Fix in-dialog authentication. When the remote peer requires authentication for in-dialog requests then re-INVITEs to the peer cause the call to be disconnected and other in-dialog requests to the peer like MESSAGE just don't go through. * Made session_inv_on_tsx_state_changed() handle in-dialog authentication for re-INVITEs and other methods. Initial INVITEs cannot be handled here because the INVITE transaction must be restarted earlier. * Pulled needed code from res/res_pjsip/pjsip_outbound_auth.c in preparation for removing the file. The generic outbound authentication code did not work as well as anticipated. * Created outbound_invite_auth() to only handle initial outbound INVITEs. Re-INVITEs cannot be handled here. The re-INVITE transaction is still in progress and the PJSIP library cannot handle the overlapping INVITE transactions. Other method types should not be handled here as this code only works on outgoing calls and we need to handle incoming and outgoing calls. ASTERISK-25131 #close Reported by: Richard Mudgett Change-Id: I12bdd7ddccc819b4ce4b091e826d1e26334601b0 2015-05-21 17:21 +0000 [262d590819] gtjoseph * res_pjsip: Add AMI events for chan_pjsip contact lifecycle changes Add a new ContactStatus AMI event. Publish the following status/state changes: Created Removed Reachable Unreachable Unknown Contact URI, new status/state, aor and endpoint names, and the last qualify rtt result are included in the event. ASTERISK-25114 #close Change-Id: Id25aae5f7122facba183273efb3e8f36c20fb61e Reported-by: George Joseph Tested-by: George Joseph 2015-05-26 07:44 +0000 [5a42397018] Joshua Colp * sorcery: Fix cache creation callback. The cache creation callback function expects to receive a sorcery_details structure and not just a standalone object. Change-Id: I3e4a5a137cb25292eb52d7a14cbb6daa09213450 2015-05-24 13:47 +0000 [97a6ce1717] Ivan Poddubny * Astobj2: Correctly treat hash_fn returning INT_MIN The code in astobj2_hash.c wrongly assumed that abs(int) is always > 0. However, abs(INT_MIN) = INT_MIN and is still negative, as well as abs(INT_MIN) % num_buckets, and as a result this led to a crash. One way to trigger the bug is using host=::80 or 0.0.0.128 in peer configuration section in chan_sip or chan_iax. This patch takes the remainder before applying abs, so that bucket number is always in range. ASTERISK-25100 #close Reported by: Mark Petersen Change-Id: Id6981400ad526f47e10bcf7b847b62bd2785e899 2015-05-23 04:36 +0000 [554bd1e39c] Ivan Poddubny * res_pjsip_transport_websocket: Fix crash on receiving large SIP packets Incoming SIP packets larger than PJSIP_MAX_PKT_LEN were themselves truncated before passing to pjsip_tpmgr_receive_packet, but the length was passed unaltered, thus causing memory corruption and segfault. ASTERISK-25122 #close Change-Id: I608a6b6b7f229eacc33a0a7d771d18e27e5b08ab 2015-05-22 21:50 +0000 [0d266cbe02] Corey Farrell * Stasis: Fix unsafe use of stasis_unsubscribe in modules. Many uses of stasis_unsubscribe in modules can be reached through unload. These have been switched to stasis_unsubscribe_and_join. Some subscription callbacks do nothing, for these I've created a noop callback function in stasis.c. This is used by some modules that monitor MWI topics in order to enable cache, since the callback does not become invalid after dlclose it is safe to use stasis_unsubscribe on these, even during module unload. ASTERISK-25121 #close Change-Id: Ifc2549fbd8eef7d703c222978e8f452e2972189c 2015-05-22 12:22 +0000 [51ffed5e61] Matt Jordan * res/res_pjsip_pubsub: Note that 'dialog' is also a valid event type for RLS In addition to specifying lists of 'presence' and 'message-summary', users can also create lists of type 'dialog'. These should be treated in the same fashion as 'presence'. Change-Id: I583bb69cd9f88b0b29bf09ddaddeac4e84189f6e 2015-05-22 12:18 +0000 [7950b65e4f] Matt Jordan * res/res_pjsip_exten_state: Fix confusing NOTICE message When a SUBSCRIBE request is made to a dialplan hint that doesn't exist, the current NOTICE message informing users of this swaps the context and extension parameters. This can cause a bit of confusion. Thanks to CptBurger in #asterisk for helping to point this out. Change-Id: Ie584d1a58ae217385c87a450ca25b55ca0e36e43 2015-05-17 20:36 +0000 [5ac65ddfb4] Matt Jordan * res/ari: Register Stasis application on WebSocket attempt Prior to this patch, when a WebSocket connection is made, ARI would not be informed of the connection until after the WebSocket layer had accepted the connection. This created a brief race condition where the ARI client would be notified that it was connected, a channel would be sent into the Stasis dialplan application, but ARI would not yet have registered the Stasis application presented in the HTTP request that established the WebSocket. This patch resolves this issue by doing the following: * When a WebSocket attempt is made, a callback is made into the ARI application layer, which verifies and registers the apps presented in the HTTP request. Because we do not yet have a WebSocket, we cannot have an event session for the corresponding applications. Some defensive checks were thus added to make the application objects tolerant to a NULL event session. * When a WebSocket connection is made, the registered application is updated with the newly created event session that wraps the WebSocket connection. ASTERISK-24988 #close Reported by: Joshua Colp Change-Id: Ia5dc60dc2b6bee76cd5aff0f69dd53b36e83f636 2015-05-20 11:11 +0000 [60e2fbfe62] gtjoseph * res_pjsip: Refactor endpt_send_transaction (qualify_timeout) This patch refactors the transaction timeout processing to eliminate calling the lower level public pjsip functions and reverts to calling pjsip_endpt_send_request again. This is the result of me noticing a possible incompatibility with pjproject-2.4 which was causing contact status flapping. The original version of this feature used the lower level calls to get access to the tsx structure in order to cancel the transaction when our own timer expires. Since we no longer have that access, if our own timer expires before the pjsip timer, we call the callbacks and just let the pjsip transaction take it's own course. When the transaction ends, it discovers the callbacks have already been run and just cleans itself up. A few messages in pjsip_configuration were also added/cleaned up. ASTERISK-25105 #close Change-Id: I0810f3999cf63f3a72607bbecac36af0a957f33e Reported-by: George Joseph Tested-by: George Joseph 2015-05-20 00:45 +0000 [42476e6633] demon-ru * res_pjsip_outbound_registration: Check request URI for line. When an inbound call is received the To header is checked for the "line" option. Some remote servers will place this in the request URI instead. This adds an additional check for the option in the request URI. ASTERISK-25072 #close Reported by: Dmitriy Serov Change-Id: Id4e44debbb80baad623b914a88574371575353c8 2015-05-21 17:51 +0000 [e7edb59db6] Corey Farrell * res_mwi_external_ami: Use module version of AMI registration. Use ast_manager_register_xml for res_mwi_external_ami manager actions. This ensures the module is held open while any of the actions are being run. ASTERISK-25117 #close Reported by: Corey Farrell Change-Id: Iececfdc2da498b2c32b9e09042f5f12292007ac7 2015-05-21 19:59 +0000 Asterisk Development Team * asterisk 13.4.0-rc1 Released. 2015-05-21 14:56 +0000 [3fb2b375fe] Matt Jordan * Release summaries: Remove previous versions 2015-05-21 14:56 +0000 [9d9ae03842] Matt Jordan * .version: Update for 13.4.0-rc1 2015-05-21 14:56 +0000 [53a39083e5] Matt Jordan * .lastclean: Update for 13.4.0-rc1 2015-05-21 14:56 +0000 [7af8ef9346] Matt Jordan * realtime: Add database scripts for 13.4.0-rc1 2015-05-21 14:52 +0000 [20982c68d4] Matt Jordan * Release summaries: Correct summaries for 13.4.0-rc1 2015-05-21 13:17 +0000 [1bb62b037f] mjordan * ChangeLog: Updated for 13.4.0-rc1 2015-05-21 13:17 +0000 [1e98a36699] mjordan * Release summaries: Add summaries for 13.4.0-rc1 2015-05-21 13:15 +0000 [5c12e5ba72] mjordan * .version: Update for 13.4.0-rc1 2015-05-21 13:15 +0000 [69292a9f11] mjordan * .lastclean: Update for 13.4.0-rc1 2015-05-21 13:15 +0000 [628680803a] mjordan * realtime: Add database scripts for 13.4.0-rc1 2015-05-21 13:05 +0000 [9d8a462356] Matt Jordan * ARI: Update version to 1.7.0 This patch updates the version of ARI to 1.7.0 to reflect the backwards compatible changes that will be introduced in 13.4.0. Change-Id: I6c36e6144da426412f25828a868e4df916bff60a 2015-05-21 07:22 +0000 [620054c527] Matt Jordan * Merge "audiohook.c: Difference in read/write rates caused continuous buffer resets" into 13 2015-05-21 07:21 +0000 [f5e195b44e] Matt Jordan * Merge "Logger: Reset defaults before processing config." into 13 2015-05-21 07:20 +0000 [e8a4e01c32] Matt Jordan * Merge "res/res_http_websocket: Add a pre-session established callback" into 13 2015-05-21 05:15 +0000 [3c98544543] Joshua Colp * Merge "main/sdp_srtp.c: allow SDP crypto tag to be up to 9 digits" into 13 2015-05-20 20:53 +0000 [9b6e228419] Corey Farrell * Logger: Reset defaults before processing config. Reset options to default values before reloading config. This ensures that if a setting is removed or commented out of the configuration file it is unset on reload. ASTERISK-25112 #close Reported by: Corey Farrell Change-Id: Id24bb1fb0885c2c14cf8bd6f69a0c2ee7cd6c5bd 2015-05-20 19:05 +0000 [7fcf0a97b8] George Joseph * app_playback: Suppress warnings on playback if channel hung up If a channel hangs up while an audio file is playing, there's no need to clutter up the logs with a warning so suppress it if ast_check_hangup returns true. Also, change warning to debug/2 in file.c if writing a frame fails. Same reasoning. Change-Id: I2e66191af3c5b6e951c98e8f1c3fe3cf2cf7ed89 Reported-by: George Joseph Tested-by: George Joseph 2015-05-14 15:21 +0000 [b1e8c0b9eb] Kevin Harwell * audiohook.c: Difference in read/write rates caused continuous buffer resets Currently, everytime a sample rate change occurs (on read or write) the associated factory buffers are reset. If the requested sample rate on a read differed from that of a write then the buffers are continually reset on every read and write. This has the side effect of emptying the buffer, thus there being no data to read and then write to a file in the case of call recording. This patch fixes it so that an audiohook_list's rate always maintains the maximum sample rate among hooks and formats. Audiohook sample rates are only overwritten by this value when slin native compatibility is turned on. Also, the audiohook sample rate can only overwrite the list's sample rate when its rate is greater than that of the list or if compatibility is turned off. This keeps the rate from constantly switching/resetting. ASTERISK-24944 #close Reported by: Ronald Raikes Change-Id: Idab4dfef068a7922c09cc631dda27bc920a6c76f 2015-05-20 15:22 +0000 [4a450f863b] Matt Jordan * Merge "Fix potential crash after unload of func_periodic_hook or test_message." into 13 2015-05-19 13:01 +0000 [17d6ede337] Corey Edwards * main/sdp_srtp.c: allow SDP crypto tag to be up to 9 digits ASTERISK-24887 #close Reported by: Makoto Dei Tested by: tensai Change-Id: I6a96f572adb17f76b3acafe503a01c48eb5dd9bf 2015-05-13 09:55 +0000 [31cc24aad6] Matt Jordan * res/res_http_websocket: Add a pre-session established callback This patch updates http_websocket and its corresponding implementation with a pre-session established callback. This callback allows for WebSocket server consumers to be notified when a WebSocket connection is attempted, but before we accept it. Consumers can choose to reject the connection, if their application specific logic allows for it. As a result, this patch pulls out the previously private websocket_protocol struct and makes it public, as ast_websocket_protocol. In order to preserve backwards compatibility with existing modules, the existing APIs were left as-is, and new APIs were added for the creation of the ast_websocket_protocol as well as for adding a sub-protocol to a WebSocket server. In particular, the following new API calls were added: * ast_websocket_add_protocol2 - add a protocol to the core WebSocket server * ast_websocket_server_add_protocol2 - add a protocol to a specific WebSocket server * ast_websocket_sub_protocol_alloc - allocate a sub-protocol object. Consumers can populate this with whatever callbacks they wish to support, then add it to the core server or a specified server. ASTERISK-24988 Reported by: Joshua Colp Change-Id: Ibe0bbb30c17eec6b578071bdbd197c911b620ab2 2015-05-14 22:05 +0000 [f9114179e6] snuffy * chan_pjsip: Fix crash during off-nominal when no endpoint specified. Add missing return -1 when no endpoint name is specified. ASTERISK-25086 #close Reported by: snuffy Change-Id: I9de76c2935a1f4e3f0cffe97a670106f5605e89e 2015-05-14 18:01 +0000 [dd78ab42e4] George Joseph * res_pjsip_config_wizard/config: Fix template processing The config wizard was always pulling the first occurrence of a variable from an ast_variable list but this gets the template value from the list instead of any overridden value. This patch creates ast_variable_find_last_in_list() in config.c and updates res_pjsip_config_wizard to use it instead of ast_variable_find_in_list. Now the overridden values, where they exist, are used instead of template variables. Updated test_config to test the new API. ASTERISK-25089 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: Ifa7ddefc956a463923ee6839dd1ebe021c299de4 2015-05-15 01:54 +0000 [091b436007] snuffy * cdr: Fix 'core show channel' CDR variable truncation. When the new Bridging API was implemented, the workspace variable changed to a malloc'd string, causing sizeof() to always be 8 (char). Revert back to stored on stack string for workspace. ASTERISK-25090 #close Change-Id: I51e610ae87371df771ce7693a955510efb90f8f7 2015-05-14 15:20 +0000 [8697a49ef9] Joshua Colp * Merge "sorcery: Add API to insert/remove a wizard to/from an object type's list" into 13 2015-05-14 15:19 +0000 [aea349a87e] Joshua Colp * Merge "Message.c: Clear message channel frames on cleanup" into 13 2015-05-14 00:06 +0000 [6b7282ca40] Corey Farrell * Fix potential crash after unload of func_periodic_hook or test_message. These modules save a pointer to the context they create on load, and use that pointer to destroy the context at unload. It is not safe to save this pointer, it is replaced during load of pbx_config, pbx_lua or pbx_ael. This change causes the modules to pass NULL to ast_context_destroy, a safer way to perform the unregistration since it does not use a pointer that could become invalid. ASTERISK-25085 #close Reported by: Corey Farrell Change-Id: I6a00ec8e38046058f97dc703e1adcde9bf517835 2015-05-14 05:02 +0000 [8f8d54a18e] Joshua Colp * Merge "main/manager.c: Bugfix sort action_manager by alphabetically" into 13 2015-05-13 15:41 +0000 [02c5130589] Jonathan Rose * Message.c: Clear message channel frames on cleanup The message channel is a special channel that doesn't actually process frames. However, certain actions can cause frames to be placed in the channel's read queue including the Hangup application which is called on the channel after each message is processed. Since the channel will continually be reused for many messages, it's necessary to flush these frames at some point. ASTERISK-25083 #close Reported by: Jonathan Rose Change-Id: Idf18df73ccd8c220be38743335b5c79c2a4c0d0f 2015-05-13 15:44 +0000 [586da882bc] Joshua Colp * Merge "app_voicemail: fix moving when old messages full" into 13 2015-05-12 17:45 +0000 [d49d64b79c] Jonathan Rose * app_voicemail: fix moving when old messages full When completing voicemail playback of a message in the 'INBOX', the message gets moved to the 'Old' messages folder. Without this patch, if the 'Old' folder is already at its set limit, then the 'INBOX' message will simply be deleted. With this patch, the flag to delete the message will be removed if the save_to_folder function indicates that the message could not be moved due to a full folder. ASTERISK-25082 #close Reported by: Jonathan Rose Review: https://gerrit.asterisk.org/#/c/448/ Change-Id: I2be440a09f42e2d06d50975c40d1ad7f836ecb3f 2015-05-13 14:20 +0000 [51478575e4] Joshua Colp * Merge "General: Fix recent menuselect-related cross compile regression" into 13 2015-05-13 12:26 +0000 [5fcaf727cc] Joshua Colp * Merge "res_config_mysql: Fix broken column type checking" into 13 2015-05-13 12:24 +0000 [6a12b0634b] Joshua Colp * Merge "chan_dahdi/sig_pri: Fix crash on ISDN call hangup collision." into 13 2015-05-04 20:11 +0000 [9b13536fed] Rodrigo Ramírez Norambuena * main/manager.c: Bugfix sort action_manager by alphabetically Fix the alphabetic order added on ast_manager_register_struct. The order for struct manager_action added is not working, this change fixes the problem. Change-Id: I149da0cd06c3c4445d7516cc303358e9f26f8b4b 2015-05-08 18:01 +0000 [e67e8d5c7f] Alexandre Fournier * res_config_mysql: Fix broken column type checking MySQL configuration engine contains a bug in require_mysql(). This function is used for column type checking in tables. This bug only affects DATETIME, DATE and FLOAT types. It came from mixing the first condition (switch-case-like if/then/else), to check the expected column type, with the second condition, to check the actual column type against the expected column type. Both conditions must be checked separately in order to avoid the execution of the wrong block. ASTERISK-18252 #comment This patch might fix the issue Reported by: Gareth Blades ASTERISK-25041 #close Reported by: Alexandre Fournier Tested by: Alexandre Fournier Change-Id: I0b8bf7e68ab938be8e6525a249260cb648cb0bfa 2015-05-10 07:37 +0000 [16f602f5c2] Yousf Ateya * res_rtp_asterisk: Correction for the limit which detects that a packet is DTLS. First byte of DTLS packet shall be in range 20-63, not 20-64. Refer to RFC https://tools.ietf.org/html/rfc5764#section-5.1.2 for correct values. Change-Id: Iae6fa0d72b37c36a27fe40686e0ae6fba3afec31 2015-05-13 04:35 +0000 [62422712f7] Joshua Colp * Merge "cdr_pgsql: Use PQescapeStringConn for escaping names." into 13 2015-05-12 17:34 +0000 [c780b6e431] Richard Mudgett * chan_dahdi/sig_pri: Fix crash on ISDN call hangup collision. If an ISDN call is hungup by both sides at the same time a crash could happen. * Added missing NULL checks for the owner channel after calling pri_queue_pvt_cause_data() in two places. Code after those calls need to check the owner channel pointer for NULL before use because pri_queue_pvt_cause_data() needs to do deadlock avoidance to lock the owner and the owner may get hung up. ASTERISK-21893 #close Reported by: Alexandr Gordeev Change-Id: Ica3e266ebc7a894b41d762326f08653e1904bb9a 2015-05-10 02:26 +0000 [6627de830b] Sebastian Kemper * General: Fix recent menuselect-related cross compile regression MAKE_MENUSELECT currently sets CC to CC, which is the compiler for the target platform. But menuselect is to be run on the build system, so BUILD_CC needs to be used instead - like it was in the past, before the recent changes (https://reviewboard.asterisk.org/r/4370/). This is the patch for ASTERISK-25074. ASTERISK-25074 #close Reported by: Sebastian Kemper Tested by: Sebastian Kemper Change-Id: I8a2b1fc5deb6ad2b80f49baca35b1b13d468ebf8 2015-05-05 15:32 +0000 [637c8f065e] George Joseph * sorcery: Add API to insert/remove a wizard to/from an object type's list Currently you can 'apply' a wizard to an object type but the wizard always goes at the end of the object type's wizard list. This patch adds a new ast_sorcery_insert_wizard_mapping function that allows you to insert a wizard anyplace in the list. I.E. You could add a caching wizard to an object type and place it before all wizards. ast_sorcery_get_wizard_mapping_count and ast_sorcery_get_wizard_mapping were added to allow examination of the mapping list. ast_sorcery_remove_mapping was added to remove a mapping by name. As part of this patch, the object type's wizard list was converted from an ao2_container to an AST_VECTOR_RW. A new test was added to test_sorcery for this capability. ASTERISK-25044 #close Change-Id: I9d2469a9296b2698082c0989e25e6848dc403b57 2015-05-12 01:31 +0000 [3cdb7950f0] Corey Farrell * Fix processing of asterisk.conf debug=yes. The code which reads asterisk.conf supports processing the debug option with ast_true, but ast_true returns -1. This causes debug to still be off, convert to 1 so debug will be on as requested. ASTERISK-25042 Reported by: Corey Farrell Change-Id: I3c898b7d082d914b057e111b9357fde46bad9ed6 2015-05-01 23:43 +0000 [6553a00770] Rodrigo Ramírez Norambuena * cdr_pgsql: Use PQescapeStringConn for escaping names. Use function PQescapeStringConn for escaping the name of the table and schema instead of doing it manually. Change-Id: I6709165e2d00463e9c813d24f17830ad4910b599 2015-05-12 05:38 +0000 [8523a5ed09] Joshua Colp * Merge "vector: Add REMOVE, ADD_SORTED and RESET macros" into 13 2015-05-09 16:58 +0000 [ea917fefaf] George Joseph * vector: Add REMOVE, ADD_SORTED and RESET macros Based on feedback from Corey Farrell and Y Ateya, a few new macros have been added... AST_VECTOR_REMOVE which takes a parameter to indicate if order should be preserved. AST_VECTOR_ADD_SORTED which adds an element to a sorted vector. AST_VECTOR_RESET which cleans all elements from the vector leaving the storage intact. Change-Id: I41d32dbdf7137e0557134efeff9f9f1064b58d14 2015-05-11 07:07 +0000 [d5864a358c] Ivan Poddubny * pbx/pbx_spool: Fix issue when call files were executed too early pbx_spool used to delete/move the call file upon successful outgoing call completion, but did not delete it from in-memory list of files (dirlist, used only when compiled with inotify/kqueue support). That resulted in an extra attempt to process that filename after retrytime seconds. Then, if a new file with the same name appears that is scheduled in future further than the completed one plus its retrytime, then it gets executed earlier than expected. This patch fixes remove_from_queue function to also remove the entry from the dirlist. ASTERISK-17069 #close Reported by: Jeremy Kister ASTERISK-24442 #close Reported by: tootai Change-Id: If9ec9b88073661ce485d6b008fd0b2612e49a28b 2015-05-08 14:47 +0000 [4dbd4021c9] Rusty Newton * configs/basic-pbx: Modified main IVR to play new Allison prompt. The main IVR was playing demo-congrats. I've switched it over to the basic-pbx-ivr-main file that we added in core sounds 1.4.27. This prompt has Allison prompting the user with the actual IVR menu. ASTERISK-24892 #close Change-Id: Ifb749616ff8e156a1031ddaddfcc9244767a095d 2015-05-08 15:55 +0000 [7111ba6df4] Matt Jordan * Merge "tcptls: Avoiding ERR_remove_state in OpenSSL." into 13 2015-05-08 10:39 +0000 [613a461c3d] Sean Bright * res_rtp_asterisk: Issue ERROR if res_srtp is not found. While trying to get WebRTC working with chan_pjsip, I was running into the following error: Attempted to set an invalid DTLS-SRTP configuration on RTP instance... Josh helpfully pointed out that res_srtp.so might not be loaded, and sure enough, it wasn't. This patch adds a ERROR indiciating as much to hopefully help others having a similar problem. Change-Id: I13aa477b47b299876728a21b130998a0ea6cd19f 2015-05-07 17:49 +0000 [394fcb5eab] Rusty Newton * sounds: Add Swedish sounds to Makefile and XML Added the necessary lines to the Makefile and sounds.xml so we'll have the Swedish sounds in all available formats in menuselect. See also: Swedish sounds were added into the core sounds release 1.4.27. ASTERISK-24744 #close Reported by: Tove Hjelm Tested by: Rusty Newton Change-Id: Ib6f4fd177afd1667b2402735034001d4d055a908 2015-05-08 09:54 +0000 [30c3b254c5] Joshua Colp * Merge "doc: Make progdocs play nice with git" into 13 2015-05-05 11:35 +0000 [2115f11b54] Alexander Traud (License 6520) * tcptls: Avoiding ERR_remove_state in OpenSSL. ERR_remove_state was deprecated with OpenSSL 1.0.0 and was replaced by ERR_remove_thread_state. ERR_load_SSL_strings and ERR_load_BIO_strings were called by SSL_load_error_strings already and got removed. These changes allow OpenSSL forks like BoringSSL to be used with Asterisk. ASTERISK-25043 #close Reported by: Alexander Traud patches: asterisk_with_BoringSSL.patch uploaded by Alexander Traud (License 6520) Change-Id: If1c0871ece21a7e0763fafbd2fa023ae49d4d629 (cherry picked from commit 247fef66537b59649e7571d64e2c574a106dbd65) 2015-05-07 14:54 +0000 [5392e970d0] George Joseph * doc: Make progdocs play nice with git Moved contrib/asterisk-ng-doxygen to doc/asterisk-ng-doxygen.in Changed /Makefile to copy asterisk-ng-doxygen.in to asterisk-ng-doxygen then modify it with version instead of modifying asterisk-ng-doxygen directly. Updated clean targets as well. Updated /.gitignore and doc/.gitignore. Change-Id: I38712d3e334fa4baec19d30d05de8c6f28137622 2015-05-07 15:10 +0000 [1e44d1bef9] Joshua Colp * Merge "res_pjsip_exten_state: Fix race condition between sending NOTIFY and termination" into 13 2015-05-04 14:43 +0000 [608f0a94ee] Ivan Poddubny * contrib/editors: Fix vim syntax highlighting of comments in config files * Added a lookbehind to one-line comment matcher to skip escaped semicolons. * Added support for block comments. Change-Id: Id17dfaeda8ed4be572e8107a0c010066584aaee7 2015-05-07 13:30 +0000 [22c6c12af2] Matt Jordan * Merge "vector: Additional enhancements and fixes" into 13 2015-05-06 13:24 +0000 [d649d682c4] Joshua Colp * res_pjsip_exten_state: Fix race condition between sending NOTIFY and termination The res_pjsip_exten_state module currently has a race condition between processing the extension state callback from the PBX core and processing the subscription shutdown callback from res_pjsip_pubsub. There is currently no synchronization between the two. This can present a problem as while the SIP subscription will remain valid the tree it points to may not. This is in particular a problem as a task to send a NOTIFY may get queued which will try to use the tree that may no longer be valid. This change does the following to fix this problem: 1. All access to the subscription tree is done within the task that sends the NOTIFY to ensure that no other thread is modifying or destroying the tree. This task executes on the serializer for the subscriptions. 2. A reference to the subscription serializer is kept to ensure it remains valid for the lifetime of the extension state subscription. 3. The NOTIFY task has been changed so it will no longer attempt to send a NOTIFY if the subscription has already been terminated. ASTERISK-25057 #close Reported by: Matt Jordan Change-Id: I0b3cd2fac5be8d9b3dc5e693aaa79846eeaf5643 2015-05-07 07:02 +0000 [9322bc6ff6] Matt Jordan * Merge "chan_dahdi: Improve force_restart_unavailable_chans option description." into 13 2015-05-07 06:39 +0000 [b1514362ef] Matt Jordan * Merge "res_stasis_snoop: Spying on a single direction continually increases CPU" into 13 2015-05-07 06:28 +0000 [652ee2ff83] Joshua Colp * Merge "features: Fix crash when transferee hangs up during DTMF attended transfer." into 13 2015-05-05 20:22 +0000 [5f9aea8e3c] George Joseph * vector: Additional enhancements and fixes After using the new vector stuff for real I found... A bug in AST_VECTOR_INSERT_AT that could cause a seg fault. The callbacks needed to be closer to ao2_callback in behavior WRT to CMP_MATCH and CMP_STOP behavior and the ability to return a vector of matched entries. A pre-existing issue with APPEND and REPLACE was also fixed. I also added a new macro to test.h that acts like ast_test_validate but also accepts a return code variable and a cleanup label. As well as printing the error, it sets the rc variable to AST_TEST_FAIL and does a goto to the specified label on error. I had a local version of this in test_vector so I just moved it. ASTERISK-25045 Change-Id: I05e5e47fd02f61964be13b7e8942bab5d61b29cc 2015-05-04 17:28 +0000 [68513e00f7] Kevin Harwell * res_stasis_snoop: Spying on a single direction continually increases CPU Creating a snoop channel in ARI and spying only on a single direction (in or out) results in CPU utilization continually increasing until the CPU is fully consumed. This occurs because frames are being put in the opposing direction's slin factory queue, but not being removed. Fixed the problem by always reading and disposing of frames from the opposite queue of the direction selected. ASTERISK-24938 #closes Change-Id: I935bfd15f1db958f364d9d6b3b45582c0113dd60 2015-05-06 16:00 +0000 [904f5d98f6] Richard Mudgett * chan_dahdi: Improve force_restart_unavailable_chans option description. ASTERISK-25034 Reported by: Richard Mudgett Change-Id: I1ff8f02124d2f4abd632a050da52c64285bb7f30 2015-05-06 07:42 +0000 [d6ffbe39b0] Joshua Colp * Merge "app_queue: Fix queue_log EXITWITHTIMEOUT containing only 1 parameter" into 13 2015-05-06 06:13 +0000 [dfb292ce3e] Matt Jordan * Merge "res_ari_bridges: Add missing dependencies." into 13 2015-05-05 21:05 +0000 [50e90f9121] Matt Jordan * Merge "pbx_config: Register manager actions with module version of macro." into 13 2015-05-05 18:17 +0000 [be1260a35f] Richard Mudgett * features: Fix crash when transferee hangs up during DTMF attended transfer. A crash happens with this sequence of steps: 1) Party A is connected to party B. 2) Party B starts a DTMF attended transfer. 3) Party A hangs up while party B is dialing party C. When party A hangs up the bridge that party A and party B are in is dissolved and party B is kicked out of the bridge. When party B finishes dialing party C he attempts to move to the new bridge with party C. Since party B is no longer in a bridge the attempted move dereferences a NULL bridge_channel pointer and crashes. * Made the hold(), unhold(), ringing(), and the bridge_move() functions tolerant of the channel not being in a bridge. The assertion that party B is always in a bridge is not true if the bridged peer of party B hangs up and dissolves the bridge. Being tolerant of not being in a bridge allows the peer hangup stimulus to be processed by the FSM. * Made the bridge_move() function return void since where the return value for a failed move was checked generated a FSM coding ERROR message for a normal off-nominal condition. * Eliminated most uses of RAII_VAR in bridge_basic.c. ASTERISK-25003 #close Reported by: Artem Volodin Change-Id: Ie2c1b14e5e647d4ea6de300bf56d69805d7bcada 2015-05-05 15:40 +0000 [8b0f85ac06] George Joseph * test_vector: Fix build breakage caused by ASTERISK_REGISTER_FILE My 13 version of test_vector had an ASTERISK_REGISTER_FILE() macro call at the top which is only supported in master. Once removed builds are successful. Change-Id: I7cac8b669bed6de543bbf4e2eec3cffc9741acdd 2015-05-05 14:48 +0000 [87263b47b5] Ivan Poddubny * app_queue: Fix queue_log EXITWITHTIMEOUT containing only 1 parameter This patch fixes EXITWITHTIMEOUT queue_log entry to always come with 3 parameters: position, original position and waiting time. ASTERISK-25038 #close Reported by: Etienne Lessard Change-Id: I0c62045922e26bee2125e93aee1dee17eee79618 2015-05-05 13:13 +0000 [2d9081b5ec] Matt Jordan * Merge "stasis: Fix dial masquerade datastore lifetime" into 13 2015-05-05 12:45 +0000 [8ca25dfd7e] Matt Jordan * Merge "vector: Traversal, retrieval, insert and locking enhancements" into 13 2015-05-05 09:47 +0000 [366ea63438] Corey Farrell * res_ari_bridges: Add missing dependencies. Missed this module in the previous commit. res_ari_bridges uses symbols from res_stasis_playback and res_stasis_recording. ASTERISK-25027 #close Reported by: Corey Farrell Change-Id: I90bf756abd25adfc4920d2869ebe7feb636b8c5f 2015-05-05 09:27 +0000 [69ae8cf0a4] Corey Farrell * pbx_config: Register manager actions with module version of macro. Switch manager actions in pbx_config to use the registration macro that passes the module pointer, allowing pbx_config reference to be bumped while the manager actions run. ASTERISK-25061 #close Reported by: Corey Farrell Change-Id: I422c50dd74814616ac10c5e9c6598a0b1bc2c44e 2015-05-04 12:16 +0000 [181ae3b8d9] Joshua Colp * stasis: Fix dial masquerade datastore lifetime A recent change went into Asterisk which added reference counts to the channels stored in a dial masquerade datastore. Unfortunately this included a reference to the caller in a dialing operation. While all of the dialed targets have the datastore removed from them upon dialing completion this did not occur for the caller, causing it to have a reference to itself that could go never go away (as it depended on the destruction of the datastore which only happened when the channel was destroyed). This resulted in the caller channel remaining on the system despite it having hung up. This change does the following to fix this issue: 1. The dial masquerade datastore is now removed from the caller upon dialing completion, just like the dialed targets. 2. Upon destruction of the caller all the dialed targets are also removed from the dial masquerade datastore (just in case). 3. The reference to the caller has been removed as it should not be possible for the datastore to now be valid/useful after the lifetime of the caller has ended. ASTERISK-25025 #close Change-Id: I1ef4ca5ca04980028604cc2af5d2992ac3431b3f 2015-05-01 19:25 +0000 [7a7e9733c2] George Joseph * vector: Traversal, retrieval, insert and locking enhancements Renamed AST_VECTOR_INSERT to AST_VECTOR_REPLACE because it really does replace not insert. The few users of AST_VECTOR_INSERT were refactored. Because these are macros, there should be no ABI compatibility issues. Added AST_VECTOR_INSERT_AT that actually inserts an element into the vector at a specific index pushing existing elements to the right. Added AST_VECTOR_GET_CMP that can retrieve from the vector based on a user-provided compare function. Added AST_VECTOR_CALLBACK function that will execute a function for each element in the vector. Similar to ao2_callback and ao2_callback_data functions although the vector callback can take a variable number of arguments. This should allow easy migration to a vector where a container might be too heavy. Added read/write locked vector and lock manipulation macros. Added unit tests. ASTERISK-25045 #close Change-Id: I2e07ecc709d2f5f91bcab8904e5e9340609b00e0 2015-05-03 13:55 +0000 [040d2f8558] Corey Farrell * main/test.c: Add test to verify there were no registration errors. This adds a test that will fail if any test failed to register. Also fail if any test registration produced a warning about missing a leading or trailing slash. ASTERISK-25053 #close Reported by: Corey Farrell Change-Id: I93e50b8fcbcfa7f1f5b41b2c44a51685c09529c3 2015-05-04 09:26 +0000 [626bffc4c2] Matt Jordan * Merge "contrib/ast-db-manage: Add Postgres ENUM type support in auto DTMF mode update" into 13 2015-05-04 09:26 +0000 [87fb7fc165] Matt Jordan * Merge "cdr/cdr_csv.c: Add a new option to enable columns added in Asterisk 1.8" into 13 2015-05-04 09:25 +0000 [81c27127aa] Matt Jordan * Merge "Format Interfaces: Prevent unload except by shutdown." into 13 2015-05-04 07:46 +0000 [743fed71fc] Matt Jordan * Merge "res_odbc: Use negative connection cache for all connections" into 13 2015-04-21 11:52 +0000 [3dcec04ab5] Martin Tomec * res_odbc: Use negative connection cache for all connections Apply the negative connection cache setting to all connections, even those that are not pooled. This ensures that the connection will not be re-established before the negative connection cache time is met. ASTERISK-22708 #close Change-Id: I431cc2e8584ab0b6908b3523d0a0e18c9a527271 2015-05-04 04:03 +0000 [74799b3fe2] Matt Jordan * Merge "Remove unneeded uses of optional_api providers." into 13 2015-05-04 04:03 +0000 [78c02f8e88] Matt Jordan * Merge "Update configure.ac/Makefile for clang" into 13 2015-05-03 21:03 +0000 [f38066fcad] Corey Farrell * Format Interfaces: Prevent unload except by shutdown. Format interfaces cannot be unregistered, so the modules that provide them need to be held open except by shutdown. ASTERISK-25054 #close Reported by: Corey Farrell Change-Id: Iadbd9675bf0d30b8fded5a739b163db3ea2db8f3 2015-05-03 20:28 +0000 [e76a6a97bf] Matt Jordan * contrib/ast-db-manage: Add Postgres ENUM type support in auto DTMF mode update The upgrade script for auto DTMF mode (31cd4f4891ec) added in 88b0fa7755 failed to add ENUM support for Postgres databases. This requires a specific import from the sqlalchemy.dialects.postgresql package. This patch corrects this error, which allows for Postgres update scripts to be generated. ASTERISK-24706 Change-Id: I4742ac8efa533cd6f18e0bdd907b339a9aedf015 2015-05-01 19:50 +0000 [92120247e9] D Tucny * term: send proper reset sequence when black background is forced When using the force black background command-line option or configuration option an invalid reset sequence is sent following a coloured output item in the CLI, the result is that the colour is not 'turned off' and continues until the next non-default coloured text output. A reset sequence is already defined in term.c, but the ast_term_reset function doesn't use it, instead building it's own invalid sequence and returning that. This patch changes that behaviour, removing the building of a reset sequence and instead using the pre-built constant 'enddata' which is a suitable reset sequence for this purpose. ASTERISK-24896 #close Reported by: Dan Tucny Change-Id: I56323899123ae3264900389cae1f5b252aa3bf43 2015-05-03 09:20 +0000 [13819a34c4] Matt Jordan * Merge "Build System: Prevent unneeded changes to asterisk/buildopts.h." into 13 2015-05-03 09:19 +0000 [b518ba1c6c] Matt Jordan * Merge "res_pjsip_dlg_options: Fix MODULEINFO section." into 13 2015-05-02 18:58 +0000 [ad6ea29697] Corey Farrell * Remove unneeded uses of optional_api providers. A few cases exist where headers of optional_api provders are included but not needed. This causes unneeded calls to ast_optional_api_use. * Don't include optional_api.h from sip_api.h. * Move 'struct ast_channel_monitor' to channel.h. * Don't include monitor.h from chan_sip.c, channel.c or features.c. The move of struct ast_channel_monitor is needed since channel.c depends on it. This has no effect on users of monitor.h since channel.h is included from monitor.h. ASTERISK-25051 #close Reported by: Corey Farrell Change-Id: I53ea65a9fc9693c89f8bcfd6120649bfcfbc3478 2015-05-02 10:19 +0000 [9888562c8c] Matt Jordan * Merge "include/asterisk/channel.h: Fix typo" into 13 2015-05-02 10:17 +0000 [b4000f2d44] Matt Jordan * Merge "Astobj2: Fix initialization order of refdebug and AO2_DEBUG." into 13 2015-04-30 02:07 +0000 [525c8c8689] Rodrigo Ramírez Norambuena * include/asterisk/channel.h: Fix typo Change-Id: Ie584b85e16a94c255e60d0b1732ef9686464fef3 2015-05-02 02:15 +0000 [63196a8256] Corey Farrell * res_pjsip_dlg_options: Fix MODULEINFO section. Removed the extra space before "MODULEINFO" in res_pjsip_dlg_options. This extra space prevented any of the dependencies from being seen by menuselect, so building with default options would fail if PJSIP was not installed. This also makes the tool that extracts information for menuselect tolerant of multiple spaces in the future. ASTERISK-25033 #close Reported by: Peter Whisker Change-Id: Iccd54846f70c4a7a50cb5bf70b7bb5cb4bab3698 2015-04-29 03:03 +0000 [ac1f0090eb] Corey Farrell * Build System: Prevent unneeded changes to asterisk/buildopts.h. * Add AST_DEVMODE to BUILDOPTS * Remove CFLAGS that do not effect ABI from BUILDOPTS. * Use BUILDOPTS to generate AST_BUILDOPT_SUM. * Remove loop that defined AST_MODULE_* These changes ensure that only ABI effecting options are considered for AST_BUILDOPT_SUM. This also reduces unneeded full system rebuilds caused by enabling or disabling one module that another is dependent on. ASTERISK-25028 Reported by: Corey Farrell Change-Id: I2c516d93df9f6aaa09ae079a8168c887a6ff93a2 2015-05-01 13:22 +0000 [5875bf183c] Corey Farrell * Astobj2: Fix initialization order of refdebug and AO2_DEBUG. This ensures that refdebug is initialized before AO2_DEBUG if both are enabled, since AO2_DEBUG allocates a container. This change also makes AO2_DEBUG initialization critical, a failure will abort Asterisk startup. This is needed since the failure would be caused by reg_containers allocation failure, and that would result in a segmentation fault by ao2_container_register later in startup. ASTERISK-25048 #close Reported by: Corey Farrell Change-Id: I9a243ea3fc5653b48b931ba6d61971cb2e530244 2015-04-29 14:49 +0000 [1b19c15f17] Matt Jordan * main/pbx: Improve performance of dialplan reloads with a large number of hints The PBX core maintains two hash tables for hints: a container of the actual hints (hints), along with a container of devices that are watching that hint (hintdevices). When a dialplan reload occurs, each hint in the hints container is destroyed; this requires a lookup in the container of devices to find the device => hint mapping object. In the current code, this performs an ao2_callback, iterating over each of the device to hint objects in the hintdevices container. For a large number of hints, this is extremely expensive: dialplan reloads with 20000 hints could take several minutes in just this phase. This patch improves the performance of this step in the dialplan reloads by caching which devices are watching a hint on the hint object itself. Since we don't want to create a circular reference, we just cache the name of the device. This allows us to perform a smarter ao2_callback on the hintdevices container during hint removal, hashing on the name of the device and returning an iterator to the matching names. The overall performance improvement is rather large, taking this step down to a number of seconds as opposed to minutes. In addition, this patch also registers the hint containers in the PBX core with the astobj2 library. This allows for reasonable debugging to hash collisions in those containers. ASTERISK-25040 #close Reported by: Matt Jordan Change-Id: Iedfc97a69d21070c50fca42275d7b3e714e59360 2015-05-01 06:55 +0000 [ec0f80b6e8] Matt Jordan * Merge "res_pjsip_outbound_authenticator_digest: Add missing outbound authenticator callback." into 13 2015-05-01 06:55 +0000 [ed51fbbe9c] Matt Jordan * Merge "Prevent potential crash on blond transfer." into 13 2015-04-30 15:54 +0000 [3efe0df044] Corey Farrell * Sample Configs: Fix syntax error in pjsip.conf The sample pjsip.conf has a few comment lines that are missing the semicolons at the start of the comment, causing the config to fail load. Change-Id: I776a38c916a7df7ee3e072fd0b21dbf4cc457352 2015-04-30 15:20 +0000 [077979618b] Mark Michelson * Prevent potential crash on blond transfer. Scenario: Alice calls Bob. Bob performs a blond transfer to Carol. Carol rejects the incoming call (or some other immediate circumstance causes Carol not to answer the call) What occurs in this case is that when the bridge between Alice and Bob breaks, Alice is told to masquerade into Bob's channel that had placed the call to Carol. The actual masquerade goes down without a hitch. However, a channel fixup callback that attempts to publish dial events over Stasis has a crash. The reason for this crash is that the datastore on Bob's channel that placed the outbound call to Carol only had a bare pointer to Carol's channel. Since Carol rejected the incoming call, Carol's channel has been hung up and freed, meaning accessing her channel results in a crash. The fix here is simple. The dial fixup code has been altered to hold references to the involved channels and to drop those references when freeing data. ASTERISK-25025 #close Reported by Chet Stevens Change-Id: I54eedda207b8ec7a69263353b43abe5746aea197 2015-04-30 14:09 +0000 [4b8cddfb36] Mark Michelson * res_pjsip_outbound_authenticator_digest: Add missing outbound authenticator callback. The Asterisk 13 version of the fix for outbound registration was missing a key component that set the outbound authenticator's callback that creates an authenticated request based on an old request. This was picked up by some outbound registration tests failing in the testsuite. Change-Id: I5ca9379698c606da36bc38eaffccedaf64211ce3 2015-04-30 13:42 +0000 [415a0d0745] Joshua Colp * res_ari_device_states: Fix dependency on res_stasis_device_state. The res_ari_device_states module depends on res_stasis_device_state, not res_stasis_device_states. Change-Id: I26e02ad37f9e36bcc859867e2fad1b90452ec3de 2015-04-30 11:11 +0000 [e0c6f88010] Mark Michelson * Merge "chan_dahdi: Add the chan_dahdi.conf force_restart_unavailable_chans option." into 13 2015-04-30 10:53 +0000 [d1bc86fc99] Matt Jordan * Merge "res_pjsip_outbound_registration: Add virtual line support." into 13 2015-04-29 14:29 +0000 [d3c310a28c] Richard Mudgett * chan_dahdi: Add the chan_dahdi.conf force_restart_unavailable_chans option. Some telco switches occasionally ignore ISDN RESTART requests. The fix for ASTERISK-19608 added an escape clause for B channels in the restarting state if the telco ignores a RESTART request. If the telco fails to acknowledge the RESTART then Asterisk will assume the telco acknowledged the RESTART on the second call attempt requesting the B channel by the telco. The escape clause is good for dealing with RESTART requests in general but it does cause the next call for the restarting B channel to be rejected if the telco insists the call must go on that B channel. chan_dahdi doesn't really need to issue a RESTART request in response to receiving a cause 44 (Requested channel not available) code. Sending the RESTART in such a situation is not required (nor prohibited) by the standards. I think chan_dahdi does this for historical reasons to deal with buggy peers to get channels unstuck in a similar fashion as the chan_dahdi.conf resetinterval option. * Add the chan_dahdi.conf force_restart_unavailable_chans compatability option that when disabled will prevent chan_dahdi from trying to RESTART the channel in response to a cause 44 code. ASTERISK-25034 #close Reported by: Richard Mudgett Change-Id: Ib8b17a438799920f4a2038826ff99a1884042f65 2015-04-30 06:38 +0000 [7f611fa0e8] Rodrigo Ramírez Norambuena * cdr/cdr_csv.c: Add a new option to enable columns added in Asterisk 1.8 This patch adds a new option to cdr.conf, 'newcdrcolumns', that will handle CDR columns added in Asterisk 1.8. The columns are: * peeraccount * linkedid * sequence When enabled, the columns in the database entry will be populated with the data from the CDR. ASTERISK-24976 #close Change-Id: I51a57063f4ae5e194a9d933a8df45dc8a4534f0b 2015-04-30 06:04 +0000 [e332c7ed5e] Joshua Colp * res_pjsip_outbound_registration: Fix double unref on error return. When the PJSIP pjsip_regc_send function is invoked and an error status returned the caller currently decrements the reference count of the client state that it just incremented, assuming the registration callback would not have been invoked. In practice this is not correct. If the failure happens after the transaction has been set up the callback will still be invoked. This will cause the reference count to be incorrectly decremented twice, once by the registration callback and second by the caller of pjsip_regc_send. This change makes it so that whether the callback is invoked or not is known by the caller of pjsip_regc_send. Depending on this it can know whether it is responsible for decrementing the reference count of the client state or not. ASTERISK-25037 #close Reported by: Joshua Colp Change-Id: I749dc12f3a22115c49c5d7d95ff42a5fa45319de 2015-04-20 13:03 +0000 [9c3ed42875] Diederik de Groot * Update configure.ac/Makefile for clang Created autoconf/ast_check_raii.m4: contains AST_CHECK_RAII which checks compiler requirements for RAII: gcc: -fnested-functions support clang: -fblocks (and if required -lBlocksRuntime) The original check was implemented in configure.ac and now has it's own file. This function also sets C_COMPILER_FAMILY to either gcc or clang for use by makefile Created autoconf/ast_check_strsep_array_bounds.m4 (contains AST_CHECK_STRSEP_ARRAY_BOUNDS): which checks if clang is able to handle the optimized strsep & strcmp functions (linux). If not, the standard libc implementation should be used instead. Clang + the optimized macro's work with: strsep(char *, char []), but not with strsepo(char *, char *). Instead of replacing all the occurences throughout the source code, not using the optimized macro version seemed easier See 'define __strcmp_gc(s1, s2, l2) in bits/string2.h': llvm-comment: Normally, this array-bounds warning are suppressed for macros, so that unused paths like the one that accesses __s1[3] are not warned about. But if you preprocess manually, and feed the result to another instance of clang, it will warn about all the possible forks of this particular if statement. Instead of switching of this optimization, another solution would be to run the preproces- sing step with -frewrite-includes, which should preserve enough information so that clang should still be able to suppress the diag- nostic at the compile step later on. See also "https://llvm.org/bugs/show_bug.cgi?id=20144" See also "https://llvm.org/bugs/show_bug.cgi?id=11536" Makefile.rules: If C_COMPILER_FAMILY=clang then add two warning suppressions: -Wno-unused-value -Wno-parentheses-equality In an earlier review (reviewboard: 4550 and 4554), they were deemed a nuisace and less than benefitial. configure.ac: Added AST_CHECK_RAII() see earlier Added AST_CHECK_STRSEP_ARRAY_BOUNDS() see earlier Removed moved content ASTERISK-24917 Change-Id: I12ea29d3bda2254ad3908e279b7effbbac6a97cb 2015-04-29 16:43 +0000 [37a193da18] Matt Jordan * Merge "ARI: Fix missing dependencies." into 13 2015-04-29 16:42 +0000 [6a86b3555b] Matt Jordan * Merge "res_fax: allow 2400 transmission rate according to v.27ter standard" into 13 2015-04-29 16:15 +0000 [d4e207e27e] Matt Jordan * main/rtp_engine: Fix DTLS double-free introduced by 0b6410c4f8 The patch in 0b6410c4f8 did correctly fix a memory leak of the DTLS structures in the RTP engine. However, when a 'core reload' is issued, a double free of the memory pointed to by the char *'s in the DTLS configuration struct can occur, as ast_rtp_dtls_cfg_free does not set the pointers to NULL when they are freed. This patch sets those pointers to NULL, preventing a second call to ast_rtp_dtls_cfg_free from corrupting memory. ASTERISK-25022 Change-Id: I820471e6070a37e3c26f760118c86770e12f6115 2015-04-29 13:05 +0000 [3fb6daeb55] Kevin Harwell * res_fax: allow 2400 transmission rate according to v.27ter standard A previous set of patches (see: ASTERISK-22790 & ASTERISK-23231) made it so a v.27 modem was not allowed to have a minimum transmission rate of 2400 bits per second. This reverts all or some of those patches since according to the v.27ter standard a rate of 2400 bits per second is also supported. One of the original patches also added 9600 bits per second support for v.27. This patch also removes that since v.27ter only supports 2400/4800 bits per second. Also, since Asterisk specifically supports v.27ter the enum was renamed to better reflect this. ASTERISK-24955 #close Reported by: Matt Jordan Change-Id: I4b9dfb6bf7eff08463ab47ee1a74224f27cae733 2015-04-29 10:46 +0000 [49ef81c15c] Joshua Colp * res_sorcery_config: Fix build issue due to syntax error. Change-Id: Ic8322f04e37842848ad72cf2871bd0378f67c4ac 2015-04-28 00:29 +0000 [3278fe5327] Ashley Sanders * chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR Sections Exist in pjsip.conf This patch modifies the current loading strategy of the pjsip configuration. If duplicate sections (e.g. sections containing the same [id/type]) are defined in [pjsip.conf], the loader will consider the configuration for the given type as invalid when the duplicate section is encountered. The entire configuration (including what was previously loaded) for the duplicate [id/type] sections will be rejected and destroyed, an error message is logged and the load processing for the given stops. ASTERISK-24996 Reported By: Ashley Sanders Change-Id: I35090ca4cd40f1f34881dfe701a329145c347aef 2014-11-04 06:03 +0000 [89f6719f7a] Joshua Colp * res_pjsip_outbound_registration: Add virtual line support. Virtual line support establishes a relationship between messages related to an outbound registration and a local endpoint. This is accomplished by attaching a parameter to the Contact of the outbound registration and looking for it on any received requests. If the parameter exists and can be matched to an outbound registration the configured endpoint is associated with the request. ASTERISK-24949 #close Reported by: Joshua Colp Change-Id: I7df909d2625479110a83fdd354c21ac539e8615d 2015-04-29 06:39 +0000 [d61f03c4f9] Corey Farrell * ARI: Fix missing dependencies. ARI modules that are generated by 'make ari-stubs' are all dependent on res_ari_model. Additionally some of the same modules depend on one or more res_stasis_* modules. ASTERISK-25027 #close Reported by: Corey Farrell Change-Id: I8e07fe7e81fedacb87232f2b6f8b5f47927b4153 2015-04-29 06:26 +0000 [3e4624ad21] Corey Farrell * res_pjsip: Remove incorrect MODULEINFO from presence_xml.c. Remove incorrect MODULEINFO block and unneeded header includes from presence_xml.c. ASTERISK-25027 Reported by: Corey Farrell Change-Id: I977c609ab9d1fe05373027c4138900f6985990eb 2015-04-29 06:17 +0000 [fed9faab8d] Corey Farrell * Git Migration: Create doc/rest-api when needed. Create the directory './doc/rest-api' at the start of 'make ari-stubs' to prevent an error when documentation is generated. The directory is also added to git ignores. ASTERISK-25027 Reported by: Corey Farrell Change-Id: Iaccc7f0138501c23aa78feaca2f3cce9e68cbc1b 2015-04-29 05:17 +0000 [df23c8a86b] Joshua Colp * res_pjsip_outbound_registration: Fix build due to removal of transaction. Change-Id: I7a8a7beec3334cec304943f2dd7597eabe2e3150 2015-04-28 19:18 +0000 [95ab9fdb1a] Joshua Colp * Merge "res_pjsip_outbound_registration: Add debugging messages." into 13 2015-04-28 19:18 +0000 [0e70dc0dc8] Joshua Colp * Merge "res_pjsip_outbound_registration: Don't fail on delayed processing: 13." into 13 2015-04-27 16:56 +0000 [e39bd6ba46] Mark Michelson * res_pjsip_outbound_registration: Don't fail on delayed processing: 13. This is the Asterisk 13 version of a change to master that allows for registration responses to be processed successfully potentially after the original transaction has timed out. The main difference between this and the master change is that the master version has API changes that are unacceptable for 13. For 13, this is worked around by adding a new API call that the outbound registration code uses instead. The following is the text from the master version of this commit: Odd behaviors have been observed during outbound registrations. The most common problem witnessed has been one where a request with authentication credentials cannot be created after receiving a 401 response. Other behaviors include apparently processing an incorrect SIP response. Inspecting the code led to an apparent issue with regards to how we handle transactions in outbound registration code. When a response to a REGISTER arrives, we save a pointer to the transaction and then push a task onto the registration serializer. Between the time that we save the pointer and push the task, it's possible for the transaction to be destroyed due to a timeout. It's also possible for the address to be reused by the transaction layer for a new transaction. To allow for authentication of a REGISTER request to be authenticated after the transaction has timed out, we now also hold a reference to the original REGISTER request instead of the transaction. The function for creating a request with authentication has been altered to take the original request instead of the transaction where the original request was sent. ASTERISK-25020 Reported by Mark Michelson Change-Id: If1ee5f601be839479a219424f0358a229f358f7c 2015-04-27 14:44 +0000 [1bf008fc76] Mark Michelson * res_pjsip_outbound_registration: Add debugging messages. When problems occur regarding outbound registrations, it currently is difficult to debug. Most off-nominal paths had warning messages, but sometimes we want to know what's going on before hitting the off-nominal path. This patch adds lots of debugging output that should give a clearer picture of what is happening with regards to outbound registrations. ASTERISK-25020 Reported by Mark Michelson Change-Id: I577bde7860be0a6c872b5bcb4d5047340bf45d45 2015-04-28 07:13 +0000 [7ee05892d6] Joshua Colp * Merge "Example script for scan-build (the llvm static analyzer)" into 13 2015-04-28 05:38 +0000 [0b6410c4f8] Steve Davies * res_rtp_asterisk: Resolve 2 discrete memory leaks in DTLS ao2 ref leak in res_rtp_asterisk.c when a DTLS policy is created. The resources are linked into a table, but the original alloc refs are never released. ast_strdup leak in rtp_engine.c. If ast_rtp_dtls_cfg_copy() is called twice on the same destination struct, a pointer to an alloc'd string is overwritten before the string is free'd. ASTERISK-25022 Reported by: one47 Change-Id: I62a8ceb8679709f6c3769136dc6aa9a68202ff9b 2015-04-28 06:55 +0000 [427209603d] Joshua Colp * Merge "cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version" into 13 2015-04-27 12:11 +0000 [99fb87ae13] George Joseph * res_pjsip: Fix SEGV on pending-qualify contacts Permanent contacts that hadn't been qualified yet were missing their contact_status entries causing SEGVs when running CLI commands. This patch makes sure that contact_statuses are created for both dynamic and permanent contacts when they are created. It also adds checks in the CLI code to make sure there's a contact_status, just in case. ASTERISK-25018 #close Reported-by: Ivan Poddubny Tested-by: Ivan Poddubny Tested-by: George Joseph Change-Id: I3cc13e5cedcafb24c400368b515b02d7fb81e029 2015-04-15 18:55 +0000 [d5dd43856e] Rodrigo Ramírez Norambuena * cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version Add new column to INSERT new columns added in cdr 1.8 version. The columns are: * peeraccount * linkedid * sequence This feature is configurable in cdr_odbc.conf using a new configuration option, 'newcdrcolumns'. ASTERISK-24976 #close Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127 2015-04-26 17:21 +0000 [e9788056e9] Matt Jordan * channels/chan_skinny: Fix compilation error introduced in f8e21a1adf A typo in commit f8e21a1adf resulted in a compilation error in chan_skinny. This patch fixes the typo. ASTERISK-24917 Change-Id: Id7f4ad1fe948eb2408622e80c27936ce4516c33c 2015-04-26 15:53 +0000 [2d277996b7] Matt Jordan * Merge "Clang: Fix some more tautological-compare warnings." into 13 2015-04-24 13:07 +0000 [145f65598c] Matt Jordan * Merge "app_confbridge: Default the template option to a compatible default profile." into 13 2015-04-23 15:11 +0000 [7e5056b393] Kevin Harwell * app_confbridge: Default the template option to a compatible default profile. Confbridge dynamic profiles did not have a default profile unless you explicitly used Set(CONFBRIDGE(bridge,template)=default_bridge). If a template was not set prior to the bridge being created then some options were left with no default values set. This patch makes it so the default templates are set to the default bridge and user profiles. ASTERISK-24749 #close Reported by: philippebolduc Change-Id: I1bd6e94b38701ac2112d842db68de63d46f60e0a 2015-04-24 09:17 +0000 [1da9ec969d] Mark Michelson * res_pjsip_outbound_authenticator: Increase CSeq on authed requests. The way PJSIP generates an authenticated request is to use a previous request as a template. This means that the authenticated request will have the same Call-ID, From header (including tag), and CSeq as the original request. PJSIP generates a new branch on the Via header to indicate that this is a new transaction, though. There are some SIP implementations, though, that do not notice the change in the branch and therefore will match the authed request to the original request's transaction. Since the CSeq is the same, the server will repeat the response it sent to the original request. This patch aids interoperability by increasing the CSeq of the authed request by one. ASTERISK-24845 #close Reported by: Carl Fortin Tested by: Carl Fortin Change-Id: I39c4ca52e688a9f83bcc1878371334becdc5be01 2015-04-24 09:24 +0000 [bf3d9db4a6] Matt Jordan * Merge "res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX." into 13 2015-04-20 13:06 +0000 [cb318f3960] Diederik de Groot * Example script for scan-build (the llvm static analyzer) - Added Pre-amble (Options / Flags / Usage Example / GNU License) - Extended Configurability - Made Executable ASTERISK-24917 Change-Id: I70405fe54e4be7dbfbcb62e291690069b88617a8 2015-04-23 17:23 +0000 [b3cd5bc77f] Mark Michelson * Merge "Clang: change previous tautological-compare fixes." into 13 2015-04-23 12:54 +0000 [eabf3b5a3c] Mark Michelson * res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX. When Asterisk originates a channel to an application, the channel is hung up once the application finishes executing. When the application in question is SendFax, the Asterisk PJSIP code will attempt to reinvite the T.38 session to audio after the FAX completes. The hangup of the channel happens in the midst of this reinvite transaction. In most circumstances, this works out okay because the BYE is delayed until the reinvite transaction can complete. However, if the reinvite that Asterisk sends receives a 401/407 response, then Asterisk's attempt to re-send the reinvite with authentication will fail. This is because the session supplement in res_pjsip_t38 makes the assumption that the channel on the session will always be non-NULL. Since the channel has been hung up, though, the channel is now NULL. Attempting to operate on the channel causes a crash. This patch fixes the issue by ensuring that the channel on the session is not NULL before attempting to mess with the T.38 framehook. This patch also contains some corrections for comments that were incorrect and really confused me when I first started looking at the code. ASTERISK-25004 #close Reported by Mark Michelson Change-Id: Ic5a1230668369dda4bb13524098aed9306ab45a0 2015-04-23 09:16 +0000 [f70d21b2cf] George Joseph * res_pjsip: Validate that contact uris start with sip: or sips: Currently we use pjsip_parse_hdr to validate contact uris but it appears that it allows uris without a scheme if there's a port supplied. I.E myexample.com will fail but myexample.com:5060 will pass even though it has no scheme. This causes SEGVs later on whenever the uri is used. To prevent this, permanent_contact_validate has been updated to check that the scheme is either 'sip' or 'sips'. 2 uses of possibly-null endpoint have also been fixed in create_out_of_dialog_request. ASTERISK-24999 Change-Id: Ifc17d16a4923e1045d37fe51e43bbe29fa556ca2 Reported-by: Brad Latus 2015-04-23 08:00 +0000 [1bb16bedc7] Diederik de Groot * Clang: change previous tautological-compare fixes. clang can warn about a so called tautological-compare, when it finds comparisons which are logically always true, and are therefor deemed unnecessary. Exanple: unsigned int x = 4; if (x > 0) // x is always going to be bigger than 0 Enum Case: Each enumeration is its own type. Enums are an integer type but they do not have to be *signed*. C leaves it up to the compiler as an implementation option what to consider the integer type of a particu- lar enumeration is. Gcc treats an enum without negative values as an int while clang treats this enum as an unsigned int. rmudgett & mmichelson: cast the enum to (unsigned int) in assert. The cast does have an effect. For gcc, which seems to treat all enums as int, the cast to unsigned int will eliminate the possibility of negative values being allowed. For clang, which seems to treat enums without any negative members as unsigned int, the cast will have no effect. If for some reason in the future a negative value is ever added to the enum the assert will still catch the negative value. ASTERISK-24917 Change-Id: I0557ae0154a0b7de68883848a609309cdf0aee6a 2015-04-23 06:50 +0000 [a06924e9d9] Matt Jordan * Merge "Astobj2: Ensure all calls to __adjust_lock pass a valid object." into 13 2015-04-22 16:22 +0000 [1474bb05f6] George Joseph * res_corosync: Add check for config file before calling corosync apis On some systems, res_corosync isn't compatible with the installed version of corosync so corosync_cfg_initialize fails, load_module returns LOAD_FAILURE, and Asterisk terminates. The work around has been to remember to add res_corosync as a noload in modules.conf. A better solution though is to have res_corosync check for its config file before attempting to call corosync apis and return LOAD_DECLINE if there's no config file. This lets Asterisk loading continue. If you have a res_corosync.conf file and res_corosync fails, you get the same behavior as today and the fatal error tells you something is wrong with the install. ASTERISK-24998 Change-Id: Iaf94a9431a4922ec4ec994003f02135acfdd3889 2015-04-22 15:17 +0000 [73efb093b8] Corey Farrell * Astobj2: Ensure all calls to __adjust_lock pass a valid object. __adjust_lock doesn't check for invalid objects, and doesn't have an appropriate return value for invalid objects. Most callers of __adjust_lock pass objects that have already been confirmed valid, this change adds checks before the remaining calls. ASTERISK-24997 #close Reported by: Corey Farrell Change-Id: I669100f87937cc3f867cec56a27ae9c01292908f 2015-04-22 16:32 +0000 [b0e929219b] George Joseph * .gitignore: Add .gcno and .gcda Products of --enable-coverage Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3 2015-04-22 14:25 +0000 [5a3948a66f] Matt Jordan * Merge "Fix/Update clang-RAII macro implementation" into 13 2015-04-22 14:07 +0000 [2ef1e1fc68] Mark Michelson * Merge "res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers." into 13 2015-04-22 04:17 +0000 [d6dfc85666] Diederik de Groot * Clang: Fix some more tautological-compare warnings. clang can warn about a so called tautological-compare, when it finds comparisons which are logically always true, and are therefor deemed unnecessary. Exanple: unsigned int x = 4; if (x > 0) // x is always going to be bigger than 0 Enum Case: Each enumeration is its own type. Enums are an integer type but they do not have to be *signed*. C leaves it up to the compiler as an implementation option what to consider the integer type of a particu- lar enumeration is. Gcc treats an enum without negative values as an int while clang treats this enum as an unsigned int. rmudgett & mmichelson: cast the enum to (unsigned int) in assert. The cast does have an effect. For gcc, which seems to treat all enums as int, the cast to unsigned int will eliminate the possibility of negative values being allowed. For clang, which seems to treat enums without any negative members as unsigned int, the cast will have no effect. If for some reason in the future a negative value is ever added to the enum the assert will still catch the negative value. ASTERISK-24917 Change-Id: Ief23ef68916192b9b72dabe702b543ecfeca0b62 2015-04-22 05:45 +0000 [edd9e54818] Joshua Colp * Merge "Check for ao2_alloc failure in __ast_channel_internal_alloc." into 13 2015-04-14 14:04 +0000 [7b57116833] Joshua Colp * res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers. Currently the res_pjsip_mwi module only sends an unsolicited MWI NOTIFY upon a mailbox state change (such as a new message being left, or one being deleted). In practice this is not sufficient to keep clients aware of the current MWI status. This change makes the module send unsolicited MWI NOTIFY on startup so that clients are guaranteed to have the most up to date MWI information. It also makes clients receive an unsolicited MWI NOTIFY upon registration so if they are unaware of the current MWI status they receive it. ASTERISK-24982 #close Reported by: Joshua Colp Change-Id: I043f20230227e91218f18a82c7d5bb2aa62b1d58 2015-04-22 05:29 +0000 [4423d5f755] Joshua Colp * Merge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs." into 13 2015-04-21 15:17 +0000 [ad1a118632] Corey Farrell * Check for ao2_alloc failure in __ast_channel_internal_alloc. Fix a crash that could occur in __ast_channel_internal_alloc if ao2_alloc fails. ASTERISK-24991 #close Change-Id: I4ca89189eb22f907408cb87d0a1645cfe1314a90 2015-04-20 14:30 +0000 [3327560cb2] Mark Michelson * res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs. When SUBSCRIBE dialogs were established, we never associated the endpoint that created the subscription with the dialog we end up creating. In most cases, this ended up not causing any problems. The actual bug that was observed was that when a device that was behind NAT established a subscription with Asterisk, Asterisk would end up sending in-dialog NOTIFY requests to the device's private IP addres instead of the public address of the NAT router. When Asterisk receives the initial SUBSCRIBE from the device, res_pjsip_nat rewrites the contact to the public address on which the SUBSCRIBE was received. This allows for the dialog to have its target address set to the proper public address. Asterisk then would send a 200 OK response to the SUBSCRIBE, then a NOTIFY with the initial subscription state. The device would then send a 200 OK response to Asterisk's NOTIFY. Here's where things went wrong. When the 200 OK arrived, res_pjsip_nat did not rewrite the address in the Contact header. Then, when the PJSIP dialog layer processed the 200 OK, PJSIP would perform a comparison between the IP address in the Contact header and its saved target address for the dialog. Since they differed, PJSIP would update the target dialog address to be the address in the Contact header. From this point, if Asterisk needed to send a NOTIFY to the device, the result was that the NOTIFY would be sent to the private address that the device placed in the Contact header. The reason why res_pjsip_nat did not rewrite the address when it received the 200 OK response was that it could not associate the incoming response with a configured endpoint. This is because on a response, the only way to associate the response to an endpoint is by finding the dialog that the response is associated with and then finding the endpoint that is associated with that dialog. We do not perform endpoint lookups on responses. res_pjsip_pubsub skipped the step of associating the endpoint with the dialog we created, so res_pjsip_nat could not find the associated endpoint and therefore couldn't rewrite the contact. This commit message is like 50x longer than the actual fix. ASTERISK 24981 #close Reported by Mark Michelson Change-Id: I2b963c58c063bae293e038406f7d044a8a5377cd 2015-04-20 18:00 +0000 [d08446ec36] Richard Mudgett * chan_dahdi/sig_pri: Make post AMI HangupRequest events on PRI channels. The chan_dahdi channel driver is a very old driver. The ability for it to support ISDN was added well after the initial analog support. Setting the softhangup flags is a carry over from the original analog code. The driver was not updated to call ast_queue_hangup() which will post the AMI HangupRequest event. * Changed sig_pri.c to call ast_queue_hangup() instead of setting the softhangup flag when the remote party initiates a hangup. ASTERISK-24895 #close Reported by: Andrew Zherdin Change-Id: I5fe2e48556507785fd8ab8e1c960683fd5d20325 2015-04-20 17:23 +0000 [96e18453f4] Joshua Colp * Merge "pjsip_options: Fix non-qualified contacts showing as unavailable" into 13 2015-04-20 13:01 +0000 [2be9cc2643] Diederik de Groot * Fix/Update clang-RAII macro implementation - When you need to refer to 'variable XXX' outside a block, it needs to be declared as '__block XXX', otherwise it will not be available with- in the block, making updating that variable hard to do, and ast_free lead to issues. - Removed the #error message because it creates complications when compiling external projects against asterisk For example when using a different compiler than the one used to compile asterisk. The warning/error should be generated during the configure process not the compilation process ASTERISK-24917 Change-Id: I12091228090e90831bf2b498293858f46ea7a8c2 2015-04-20 09:53 +0000 [b74b2cdcda] George Joseph * pjsip_options: Fix format specifier for int64_t rtt. Contact status rtt is an int64_t and needs the PRId64 macro to properly create the format specifier on 32-bit systems. Change-Id: I4b8ab958fc1e9a179556a9b4ffa49673ba9fdec7 2015-04-20 06:29 +0000 [27a122af66] Matt Jordan * Merge "main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple" into 13 2015-04-20 05:54 +0000 [9581a0ebf3] Joshua Colp * Merge "Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled." into 13 2015-04-18 13:36 +0000 [63169e00ff] George Joseph * pjsip_options: Fix non-qualified contacts showing as unavailable The "Add qualify_timeout processing and eventing" patch introduced an issue where contacts that had qualify_frequency set to 0 were showing Unavailable instead Unknown. This patch checks for qualify_frequency=0 and create an "Unknown" contact_status with an RTT = 0. Previously, the lack of contact_status implied Unknown but since we're now changing endpoint state based on contact_status, I've had to add new UNKNOWN status so that changes could trigger the appropriate contact_status observers. ASTERISK-24977: #close Change-Id: Ifcbc01533ce57f0e4e584b89a395326e098b8fe7 2015-04-19 15:49 +0000 [f0c82a173a] Matt Jordan * main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple When a PBX registrar is unloaded, it will fail to remove its extension from the context root_table if a dialplan application used by that extension is still loaded. This can be the case for AGI, which can be unloaded after several of the standard PBX providers. Often, this is harmless; however, if the extension's priorities are removed during the failed unloading *and* the dialplan application later unregisters, it leaves a ticking timebomb for the next PBX provider that attempts to iterate over the extensions. When that occurs, the peer_table pointer on the extension will already be set to NULL. The current code does not check to see if the pointer is NULL before passing it to a hashtab function this is not NULL tolerant. Since it is possible for the peer_table to be NULL when we normally would not expect that to be the case, the solution in this patch is to simply skip over processing an extension's priorities if peer_table is NULL. Prior to this patch, the tests/pbx/callerid_match test would crash during module unload. With this patch, the test no longer crashes after running. ASTERISK-24774 #close Reported by: Corey Farrell Change-Id: I2bbeecb7e0f77bac303a1b9135e4cdb4db6d4c40 2015-04-17 18:05 +0000 [82bc0fd3ad] Richard Mudgett * res_fax: Fix latent bug exposed by ASTERISK-24841 changes. Three fax related tests started failing as a result of changes made for ASTERISK-24841: tests/fax/pjsip/gateway_t38_g711 tests/fax/sip/gateway_mix1 tests/fax/sip/gateway_mix3 Historically, ast_channel_make_compatible() did nothing if the channels were already "compatible" even if they had a sub-optimal translation path already setup. With the changes from ASTERISK-24841 this is no longer true in order to allow the best translation paths to always be picked. In res_fax.c:fax_gateway_framehook() code manually setup the channels to go through slin and then called ast_channel_make_compatible(). With the previous version of ast_channel_make_compatible() this was always a no-operation. * Remove call to ast_channel_make_compatible() in fax_gateway_framehook() that now undoes what was just setup when the framehook is attached. * Fixed locking around saving the channel formats in fax_gateway_framehook() to ensure that the formats that are saved are consistent. * Fix copy pasta errors in fax_gateway_framehook() that confuses read and write when dealing with saved channel formats. ASTERISK-24841 Reported by: Matt Jordan Change-Id: I6fda0877104a370af586a5e8cf9e161a484da78d 2015-04-17 16:19 +0000 [c59a800707] Corey Farrell * Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled. When DEBUG_THREADLOCALS is enabled it causes the threadlocal cleanup to be called as a function. This causes a compile error with raw threadstorage as it uses NULL for cleanup. This fix uses a macro that provides NULL when DEBUG_THREADLOCALS is disabled, and replaces the call to "c_cleanup(data);" with "{};" when DEBUG_THREADLOCALS is enabled. ASTERISK-24975 #close Reported by: Ashley Sanders Change-Id: I3ef7428ee402816d9fcefa1b3b95830c00d5c402 2015-04-17 15:57 +0000 [e05b076827] Matt Jordan * Merge "Detect potential forwarding loops based on count." into 13 2015-04-15 10:38 +0000 [4f1a8dbe92] Mark Michelson * Detect potential forwarding loops based on count. A potential problem that can arise is the following: * Bob's phone is programmed to automatically forward to Carol. * Carol's phone is programmed to automatically forward to Bob. * Alice calls Bob. If left unchecked, this results in an endless loops of call forwards that would eventually result in some sort of fiery crash. Asterisk's method of solving this issue was to track which interfaces had been dialed. If a destination were dialed a second time, then the attempt to call that destination would fail since a loop was detected. The problem with this method is that call forwarding has evolved. Some SIP phones allow for a user to manually forward an incoming call to an ad-hoc destination. This can mean that: * There are legitimate use cases where a device may be dialed multiple times, or * There can be human error when forwarding calls. This change removes the old method of detecting forwarding loops in favor of keeping a count of the number of destinations a channel has dialed on a particular branch of a call. If the number exceeds the set number of max forwards, then the call fails. This approach has the following advantages over the old: * It is much simpler. * It can detect loops involving local channels. * It is user configurable. The only disadvantage it has is that in the case where there is a legitimate forwarding loop present, it takes longer to detect it. However, the forwarding loop is still properly detected and the call is cleaned up as it should be. Address review feedback on gerrit. * Correct "mfgium" to "Digium" * Decrement max forwards by one in the case where allocation of the max forwards datastore is required. * Remove irrelevant code change from pjsip_global_headers.c ASTERISK-24958 #close Change-Id: Ia7e4b7cd3bccfbd34d9a859838356931bba56c23 2015-04-11 16:56 +0000 [674b18bdf0] George Joseph * pjsip_options: Add qualify_timeout processing and eventing This is the second follow-on to https://reviewboard.asterisk.org/r/4572/ and the discussion at http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html The basic issues are that changes in contact status don't cause events to be emitted for the associated endpoint. Only dynamic contact add/delete actions update the endpoint. Also, the qualify timeout is fixed by pjsip at 32 seconds which is a long time. This patch makes use of the new transaction timeout feature in r4585 and provides the following capabilities... 1. A new aor/contact variable 'qualify_timeout' has been added that allows the user to specify the maximum time in milliseconds to wait for a response to an OPTIONS message. The default is 3000ms. When the timer expires, the contact is marked unavailable. 2. Contact status changes are now propagated up to the endpoint as follows... When any contact is 'Available', the endpoint is marked as 'Reachable'. When all contacts are 'Unavailable', the endpoint is marked as 'Unreachable'. The existing endpoint events are generated appropriately. ASTERISK-24863 #close Change-Id: Id0ce0528e58014da1324856ea537e7765466044a Tested-by: Dmitriy Serov Tested-by: George Joseph 2015-04-17 15:29 +0000 [f1abf51b73] Matt Jordan * Merge "res_pjsip: Refactor endpt_send_request to include transaction timeout" into 13 2015-04-17 10:30 +0000 [ab5b38e434] Matt Jordan * Merge "res_pjsip: Add global option to limit the maximum time for initial qualifies" into 13 2015-04-17 10:25 +0000 [ec77b6148f] Joshua Colp * Merge "res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced" into 13 2015-04-16 10:51 +0000 [b56c1914fa] Kevin Harwell * bridge.c: NULL app causes crash during attended transfer Due to a race condition there was a chance that during an attended transfer the channel's application would return NULL. This, of course, would cause a crash when attempting to access the memory. This patch retrieves the channel's app at an earlier time in processing in hopes that the app name is available. However, if it is not then "unknown" is used instead. Since some string value is now always present the crash can no longer occur. ASTERISK-24869 #close Reported by: viniciusfontes Review: Change-Id: I5134b84c4524906d8148817719d76ffb306488ac 2015-04-16 13:20 +0000 [8d4ce7cc2b] Scott Griepentrog * res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced This change makes the send_notify of the sub_tree not happen when the sub_tree has been deleted due to the notify call failing, which avoids a crash. ASTERISK-24970 #close Change-Id: I1f20ffc08b192f59c457293b218025a693992cbf 2015-04-11 16:39 +0000 [bf46799f0e] George Joseph * res_pjsip: Refactor endpt_send_request to include transaction timeout This is the first follow-on to https://reviewboard.asterisk.org/r/4572/ and the discussion at http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html Since we currently have no control over pjproject transaction timeout, this patch pulls the pjsip_endpt_send_request function out of pjproject and into res_pjsip/endpt_send_transaction in order to implement that capability. Now when the transaction is initiated, we also schedule our own pj_timer with our own desired timeout. If the transaction completes before either timeout, pjproject cancels its timer, and calls our tsx callback where we cancel our timer and run the app callback. If the pjproject timer times out first, pjproject calls our tsx callback where we cancel our timer and run the app callback. If our timer times out first, we terminate the transaction which causes pjproject to cancel its timer and call our tsx callback where we run the app callback. Regardless of the scenario, pjproject is calling the tsx callback inside the group_lock and there are checks in the callback to make sure it doesn't run twice. As part of this patch ast_sip_send_out_of_dialog_request was created to replace its similarly named private function. It takes a new timeout argument in milliseconds (<= 0 to disable the timeout). ASTERISK-24863 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: I0778dc730d9689c5147a444a04aee3c1026bf747 2015-04-11 17:04 +0000 [1b6f6ff841] George Joseph * res_pjsip: Add global option to limit the maximum time for initial qualifies Currently when Asterisk starts initial qualifies of contacts are spread out randomly between 0 and qualify_timeout to prevent network and system overload. If a contact's qualify_frequency is 5 minutes however, that contact may be unavailable to accept calls for the entire 5 minutes after startup. So while staggering the initial qualifies is a good idea, basing the time on qualify_timeout could leave contacts unavailable for too long. This patch adds a new global parameter "max_initial_qualify_time" that sets the maximum time for the initial qualifies. This way you could make sure that all your contacts are initialy, randomly qualified within say 30 seconds but still have the contact's ongoing qualifies at a 5 minute interval. If max_initial_qualify_time is > 0, the formula is initial_interval = min(max_initial_interval, qualify_timeout * random(). If not set, qualify_timeout is used. The default is "0" (disabled). ASTERISK-24863 #close Change-Id: Ib80498aa1ea9923277bef51d6a9015c9c79740f4 Tested-by: George Joseph 2015-04-15 16:08 +0000 [5d218cde87] George Joseph * More .gitignore updates Added .pyc and .sha1 to the top-level .gitignore. Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a Tested-by: George Joseph 2015-04-15 13:36 +0000 [97f83c4c53] Matt Jordan * Merge "Build System: Replace comment about setting menuselect defaults." into 13 2015-04-14 13:16 +0000 [abd56db3e0] Rodrigo Ramírez Norambuena * cel_pgsql: Fix name string for log on unable allocate memory. The LOG_ERROR has reference to CDR instead of CEL for LENGTHEN_BUF1 and LENGTHEN_BUF2. ASTERISK-24965 #close Reported by: Rodrigo Ramirez Norambuena Change-Id: Icc818697d7d66d34bfe3048cdd15ca2b06c89744 2015-04-14 13:48 +0000 [222fbe1d9a] Corey Farrell * Build System: Replace comment about setting menuselect defaults. The Makefile claims that you can set default menuselect options by creating ~/.asterisk.makeopts or /etc/asterisk.makeopts, but those files have never been respected in Asterisk 11 or 13. This changes the comment to accurately reflect that these files are not automatically used by the build system. ASTERISK-13721 #close Reported by: pj Change-Id: Ibde804ff196283def49ccb9432fbf224a22586e2 2015-04-12 09:08 +0000 [07e729cc7b] Rodrigo Ramírez Norambuena * cdr_pgsql: Fix CLI "cdr show pgsql status" command. The command always showed the usage information. * Fix the error in command validation for CLI_SHOWUSAGE. ASTERISK-24959 #close Reported by: Rodrigo Ramirez Norambuena Change-Id: I584f0936bb01001336a468a55c1d05d79fe795d5 (cherry picked from commit 23a180cade51e84b9def65b05759c3cb9feba225) 2015-04-13 19:06 +0000 [7d43d85bea] George Joseph * .gitignore updates for master/13 Added products of ./bootstrap Added nmenuselect and gmenuselect to menuselect/ Change-Id: Ied658463958bafc04a9aff9ebc28e40c116a6e35 2015-04-13 14:41 +0000 [3d27c223a5] David M. Lee * Fixing extconf compile During the mass code deletion for clang support, a stray backslash was left behind that was causing utils to fail to compile. Change-Id: I60e5fa58c9a5b248bde23aaada79ff663f87a2a1 2015-04-13 12:03 +0000 [30045b4e67] Matt Jordan * Merge "build_tools/make_version: Update version parsing for Git migration" into 13 2015-04-13 10:47 +0000 [88dbf6653e] Joshua Colp * Merge "res_monitor: Add dependency on func_periodic_hook." into 13 2015-04-13 09:54 +0000 [e996d8f728] Matt Jordan * build_tools/make_version: Update version parsing for Git migration External systems - such as the Asterisk Test Suite - require knowledge of the upstream branch. Unfortunately, after moving to Git, the Asterisk version currently consists of only a 'GIT" prefix followed by an object blob, e.g., GIT-as08d7. This makes it difficult for such systems to know what features are available in a particular check out of Asterisk. This patch fixes this by hardcoding the branch in a variable in the make_version script. Since the mainline branches are not changed often - typically only once a year - this is a reasonable approach to solving the problem, and is more reliable than parsing the output of 'git branch -vv'. Branches that track off of an upstream primary branch will then get the benefit of knowing which mainline branch they are currently based off of. ASTERISK-24954 #close Change-Id: I8090d5d548b6d19e917157ed530b914b7eaf9799 2015-04-12 12:59 +0000 [d1a6f1a9f9] Matt Jordan * git migration: Remove support for file versions Git does not support the ability to replace a token with a version string during check-in. While it does have support for replacing a token on clone, this is somewhat sub-optimal: the token is replaced with the object hash, which is not particularly easy for human consumption. What's more, in practice, the source file version was often not terribly useful. Generally, when triaging bugs, the overall version of Asterisk is far more useful than an individual SVN version of a file. As a result, this patch removes Asterisk's support for showing source file versions. Specifically, it does the following: * main/asterisk: - Refactor the file_version structure to reflect that it no longer tracks a version field. - Alter the "core show file version" CLI command such that it always reports the version of Asterisk. The file version is no longer available. * main/manager: The Version key now always reports the Asterisk version. * UPGRADE: Add notes for: - Modification to the ModuleCheck AMI Action. - Modification of the "core show file version" CLI command. Change-Id: Ia932d3c64cd18a14a3c894109baa657ec0a85d28 2015-04-13 06:19 +0000 [0e4b997cd7] Corey Farrell * res_monitor: Add dependency on func_periodic_hook. OPTIONAL_API has conditionals to define AST_OPTIONAL_API and AST_OPTIONAL_API_ATTR differently based on if AST_API_MODULE is defined. Unfortunately this is inside the include protection block, so only the first status of AST_API_MODULE is respected. For example res_monitor is an optional API provider, but uses func_periodic_hook. This makes func_periodic_hook non-optional to res_monitor. ASTERISK-17608 #close Reported by: Warren Selby Change-Id: I8fcf2a5e7b481893e17484ecde4f172c9ffb5679 2015-04-12 15:27 +0000 [91c1ed7ef6] Matt Jordan * Merge "main/editline: Add .gitignore." into 13 2015-04-12 06:12 +0000 [a77c31b99c] Corey Farrell * main/editline: Add .gitignore. This patch adds a .gitignore for main/editline to ignore all build results. Change-Id: I68c7bf375ea46282689e5a706534b69fca233b5d 2015-04-11 23:22 +0000 [d918c3b78e] Matt Jordan * .gitignore: Ignore tarballs (*.gz) This patch updates the root .gitignore file to ignore files with a .gz extension. This will cause git to ignore downloaded sound tarballs in the the sounds/ directory. Change-Id: I1e42fbfa02a8884231507b683e8e49ac3e278aaa 2015-04-11 13:20 +0000 [555b5f5d30] George Joseph * Add .gitignore and .gitreview files Add the .gitignore and .gitreview files to the asterisk repo. NB: You can add local ignores to the .git/info/exclude file without having to do a commit. Common ignore patterns are in the top-level .gitignore file. Subdirectory-specific ignore patterns are in their own .gitignore files. Change-Id: I4c8af3b8e3739957db545f7368ac53f38e99f696 Tested-by: George Joseph 2015-04-11 10:35 +0000 [5807ca519c] Matthew Jordan * Blocked revisions 434708 ........ main/event: Remove unnecessary assignment of negative value to enum When cleaning up some clang compiler warnings, the comparison of a negative value to an unsigned enum was removed. However, the initial assignment of a negative value to said enum remained in the variable declaration. This patch removes that assignment. Thanks to ibercom in #asterisk-bugs for pointing it out. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434709 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-11 10:26 +0000 [d0d78d5732] dkdegroot (License 6600) * clang compiler warnings: Fix various warnings for tests This patch fixes a variety of clang compiler warnings for unit tests. This includes autological comparison issues, ignored return values, and interestingly enough, one embedded function. Fun! Review: https://reviewboard.asterisk.org/r/4555 ASTERISK-24917 Reported by: dkdegroot patches: rb4555.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434705 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434706 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-11 10:10 +0000 [4cf7d0bf01] Juergen Spies (License 6698) * res/res_pjsip_t38: Add missing initialization of t38faxmaxdatagram Prior to this patch, the far_max_datagram value on the UDPTL structure would remain -1 if the remote endpoint fails to provide the SDP media attribute T38FaxMaxDatagram. This can result in the INVITE request being rejected. With this patch, we will now properly initialize the value with either the default value or with the value provided by pjsip.conf's t38_udptl_maxdatagram parameter. Review: https://reviewboard.asterisk.org/r/4589 ASTERISK-24928 #close Reported by: Juergen Spies Tested by: Juergen Spies patches: pjsipT38patch20150331.txt submitted by Juergen Spies (License 6698) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434688 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 18:29 +0000 [13cd99682d] Richard Mudgett * chan_pjsip/res_pjsip/bridge_softmix/core: Improve translation path choices. With this patch, chan_pjsip/res_pjsip now sets the native formats to the codecs negotiated by a call. * The changes in chan_pjsip.c and res_pjsip_sdp_rtp.c set the native formats to include all the negotiated audio codecs instead of only the initial preferred audio codec and later the currently received audio codec. * The audio frame handling in channel.c:ast_read() is more streamlined and will automatically adjust to changes in received frame formats. The new policy is to remove translation and pass the new frame format to the receiver except if the translation was to a signed linear format. A more long winded version is commented in ast_read() along with some caveats. * The audio frame handling in channel.c:ast_write() is more streamlined and will automatically adjust any needed translation to changes in the frame formats sent. Frame formats sent can change for many reasons such as a recording is being played back or the bridged peer changed the format it sends. Since it is a normal expectation that sent formats can change, the codec mismatch warning message is demoted to a debug message. * Removed the short circuit check in channel.c:ast_channel_make_compatible_helper(). Two party bridges need to make channels compatible with each other. However, transfers and moving channels among bridges can result in otherwise compatible channels having sub-optimal translation paths if the make compatible check is short circuited. A result of forcing the reevaluation of channel compatibility is that the asterisk.conf:transcode_via_slin and codecs.conf:genericplc options take effect consistently now. It is unfortunate that these two options are enabled by default and negate some of the benefits to the changes in channel.c:ast_read() by forcing translation through signed linear on a two party bridge. * Improved the softmix bridge technology to better control the translation of frames to the bridge. All of the incoming translation is now normally handled by ast_read() instead of splitting any translation steps between ast_read() and the slin factory. If any frame comes in with an unexpected format then the translation path in ast_read() is updated for the next frame and the slin factory handles the current frame translation. This is the final patch in a series of patches aimed at improving translation path choices. The other patches are on the following reviews: https://reviewboard.asterisk.org/r/4600/ https://reviewboard.asterisk.org/r/4605/ ASTERISK-24841 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4609/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434671 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 16:03 +0000 [af458e2e60] Kevin Harwell * chan_sip: make progressinband default to no After the "progressinband" value setting of "never" was updated to never send a 183 this separated its use from the "no" value. Since "never" was the default, but most users probably expect "no" this patch updates the default for the "progressinband" setting to "no." ASTERISK-24835 #close Reported by: Andrew Nagy Review: https://reviewboard.asterisk.org/r/4606/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434654 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 12:53 +0000 [88b0fa7755] yaron nahum (License 6676) * res_pjsip: Add an 'auto' option for DTMF Mode This patch adds support for automatically detecting the type of DTMF that a PJSIP endpoint supports. When the 'dtmf_mode' endpoint option is set to 'auto', the channel created for an endpoint will attempt to determine if RFC 4733 DTMF is supported. If so, it will use that DTMF type. If not, the DTMF type for the channel will be set to inband. Review: https://reviewboard.asterisk.org/r/4438 ASTERISK-24706 #close Reported by: yaron nahum patches: yaron_patch_3_Feb.diff submitted by yaron nahum (License 6676) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434637 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 11:59 +0000 [16afee4651] George Joseph * res_pjsip_config_wizard: Cleanup load unload While investigating other unload issues I realized that the load/unload process for the config wizard was pretty ugly so I've refactored it as follows... When the res_pjsip sorcery instance is created the config_wizard bumps it's own module reference to prevent it from unloading while the sorcery instance is still active. When res_pjsip unloads and it's sorcery instance is destroyed, the config wizard unrefs itself which then allows itself to unload cleanly. Since the config wizard now can't load after res_pjsip or unload before it (which should have been the correct behavior all along), I was able to remove the chunks of code in both load_module and unload_module that handled that case. Ran the testsuite tests to insure there were no functional changes and REF_DEBUG to insure that Asterisk was shutting down cleanly with no FRACKs or leaks. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4610/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434619 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 11:37 +0000 [125acc52fe] Richard Mudgett * bridge_softmix.c,channel.c: Minor code simplification and cleanup. * Made code easier to follow in bridge_softmix.c:analyse_softmix_stats() and made some debug messages more helpful. * Made some debug and warning messages more helpful in channel.c:set_format(). Review: https://reviewboard.asterisk.org/r/4607/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434617 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 11:28 +0000 [a63f7ad04a] Richard Mudgett * translate.c: Only select audio codecs to determine the best translation choice. Given a source capability of h264 and ulaw, a destination capability of h264 and g722 then ast_translator_best_choice() would pick h264 as the best choice even though h264 is a video codec and Asterisk only supports translation of audio codecs. When the audio starts flowing, there are warnings about a codec mismatch when the channel tries to write a frame to the peer. * Made ast_translator_best_choice() only select audio codecs. * Restore a check in channel.c:set_format() lost after v1.8 to prevent trying to set a non-audio codec. This is an intermediate patch for a series of patches aimed at improving translation path choices for ASTERISK-24841. This patch is a complete enough fix for ASTERISK-21777 as the v11 version of ast_translator_best_choice() does the same thing. However, chan_sip.c still somehow tries to call ast_codec_choose() which then calls ast_best_codec() with a capability set that doesn't contain any audio formats for the incoming call. The remaining warning message seems to be a benign transient. ASTERISK-21777 #close Reported by: Nick Ruggles ASTERISK-24380 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4605/ ........ Merged revisions 434614 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434615 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 09:55 +0000 [c9791dba1f] Matthew Jordan * res/ari: Fix model validation for ChannelHold event When the ChannelHold event was added, the 'musicclass' parameter was erroneously removed. This caused the ChannelHold events to be rejected as they failed model validation. This patch updates the Swagger schema such that it now properly reflects the event that is being created. Hooray for tests that catch things like this. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434597 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 07:39 +0000 [c39faa4729] Y Ateya (License 6693) * channels/chan_iax2: Improve POKE expiration time calculation for lossy networks POKE is used to check for peer availability; however, in networks with packet loss, the current calculations may result in POKE expiration times that are too short. This patch alters the expiration/retry time logic to take into account the last known qualify round trip time, as opposed to always using a static value for each peer. Review: https://reviewboard.asterisk.org/r/4536 ASTERISK-22352 #close Reported by: Frederic Van Espen ASTERISK-24894 #close Reported by: Y Ateya patches: poke_noanswer_duration.diff submitted by Y Ateya (License 6693) ........ Merged revisions 434564 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434565 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 17:35 +0000 [75c2c85962] George Joseph * res_pjsip_phoneprov_provider: Fix reference leak on unload res_pjsip_phoneprov_provider was leaking references to phoneprov objects due to a missing OBJ_NODATA in an ao2_callback in load_users(). Rather than adding the OBJ_NODATA, I changed load_users to use a more straightforward ao2_iterator. This plugged the leak but exposed an unload order issue between res_pjsip_phoneprov_provider, res_phoneprov and res_pjsip. res_pjsip_phoneprov_provider unloads first, then res_phoneprov, then res_pjsip. Since res_pjsip_phoneprov_provider uses res_pjsip's sorcery instance, when it unloads, it's objects are still in the sorcery instance. When res_pjsip unloads, it destroys all its objects including res_pjsip_phoneprov_provider's. The phoneprov destructor then attempts to unregister the extension from res_phoneprov but because res_phoneprov is already cleaned up, its users container is gone and we get a FRACK. Simple solution, check for the NULL users container before attempting to remove the entry. Duh. Ran tests/res_phoneprov/res_phoneprov_provider. No leaks in res_pjsip_phoneprov_provider and no FRACKs. Reported-by: Corey Farrell Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4608/ ASTERISK-24935 #close git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434545 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 17:31 +0000 [73c286a393] George Joseph * loader/main: Don't set ast_fully_booted until deferred reloads are processed Until we have a true module management facility it's sometimes necessary for one module to force a reload on another before its own load is complete. If Asterisk isn't fully booted yet, these reloads are deferred. The problem is that asterisk reports fully booted before processing the deferred reloads which means Asterisk really isn't quite ready when it says it is. This patch moves the report of fully booted after the processing of the deferred reloads is complete. Since the pjsip stack has the most number of related modules, I ran the channels/pjsip testsuite to make sure there aren't any issues. All tests passed. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4604/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434544 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 17:03 +0000 [5737650a67] Kevin Harwell * res_pjsip: add CLI command to show global and system configuration Added a new CLI command for res_pjsip that shows both global and system configuration settings: pjsip show settings ASTERISK-24918 #close Reported by: Scott Griepentrog Review: https://reviewboard.asterisk.org/r/4597/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434527 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 11:07 +0000 [1695a5b85f] Richard Mudgett * chan_iax2.c: Fix ref leak in iax2_request(). * Increased warning message format capability string buffer size in iax2_request(). Review: https://reviewboard.asterisk.org/r/4601/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434510 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 10:54 +0000 [92c1688edb] Richard Mudgett * bridge_native_rtp.c: Defer allocation and check if it fails in native_rtp_bridge_compatible(). Review: https://reviewboard.asterisk.org/r/4601/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434508 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 10:42 +0000 [2679d0100a] yaron nahum (License 6676) * res/res_pjsip_dlg_options: Add a module to handle in-dialog OPTIONS requests This patch adds a new session supplement that handles in-dialog OPTIONS requests. Said OPTIONS requests are sent a 200 OK, as an endpoint lookup for the OPTIONS request would already have been done by the time the session supplement receives the inbound request. ASTERISK-24862 #close Reported by: yaron nahum patches: res_pjsip_dlg_options.c submitted by yaron nahum (License 6676) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434506 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 07:56 +0000 [6ba6e3dffd] dkdegroot (License 6600) * clang compiler warnings: Fix autological comparisons This fixes autological comparison warnings in the following: * chan_skinny: letohl may return a signed or unsigned value, depending on the macro chosen * func_curl: Provide a specific cast to CURLoption to prevent mismatch * cel: Fix enum comparisons where the enum can never be negative * enum: Fix comparison of return result of dn_expand, which returns a signed int value * event: Fix enum comparisons where the enum can never be negative * indications: tone_data.freq1 and freq2 are unsigned, and hence can never be negative * presencestate: Use the actual enum value for INVALID state * security_events: Fix enum comparisons where the enum can never be negative * udptl: Don't bother to check if the return value from encode_length is less than 0, as it returns an unsigned int * translate: Since the parameters are unsigned int, don't bother checking to see if they are negative. The cast to unsigned int would already blow past the matrix bounds. * res_pjsip_exten_state: Use a temporary value to cache the return of ast_hint_presence_state * res_stasis_playback: Fix enum comparisons where the enum can never be negative * res_stasis_recording: Add an enum value for the case where the recording operation is in error; fix enum comparisons * resource_bridges: Use enum value as opposed to -1 * resource_channels: Use enum value as opposed to -1 Review: https://reviewboard.asterisk.org/r/4533 ASTERISK-24917 Reported by: dkdegroot patches: rb4533.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434469 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434470 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 21:05 +0000 [e05c8ae68e] Stefan Engström (License 6691) * apps/app_queue: Prevent possible crash when evaluating queue penalty rules Although it only occurred once, a crash occurred when a queue attempted to evaluate a queue penalty rule that appeared to have already been destroyed. In many locations in app_queue, a test is done to see if qe->pr is NULL; however, when we dispose of a queue's penalty rules, we don't set the pointer to NULL after free'ing it. This patch does that to prevent any dangling pointers from lingering on the queue object. Review: https://reviewboard.asterisk.org/r/4522 ASTERISK-23319 #close Reported by: Vadim patches: rb4552.patch submitted by Stefan Engström (License 6691) ........ Merged revisions 434448 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434449 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 13:15 +0000 [f21b45db49] Jonathan Rose * res_pjsip_t38: Fix FAX failures when using PJSIP with authentication Without this patch, if a PJSIP endpoint with udptl enabled and authentication set attempted to use sendFax, the FAX session would fail during setup. This was because the invite issued in response to being auth challenged would cause the PJSIP channel performing the FAX to receive a second T38 framehook and this would cause frames to be consumed in an inappropriate manner. ASTERISK-24933 #close Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/4577/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434425 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 13:14 +0000 [4441bb6a25] Richard Mudgett * Bridging: Eliminate the unnecessary make channel compatible with bridge operation. When a channel enters the bridging system it is first made compatible with the bridge and then the bridge technology makes the channel compatible with the technology. For all but the DAHDI native and softmix bridge technologies the make channel compatible with the bridge step is an effective noop because the other technologies allow all audio formats. For the DAHDI native bridge technology it doesn't matter because it is not an initial bridge technology and chan_dahdi allows only one native format per channel. For the softmix bridge technology, it is a noop at best and harmful at worst because the wrong translation path could be setup if the channel's native formats allow more than one audio format. This is an intermediate patch for a series of patches aimed at improving translation path choices. * Removed code dealing with the unnecessary step of making the channel compatible with the bridge. ASTERISK-24841 Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4600/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 11:40 +0000 [f767440906] mhej (license 6085) * Security/tcptls: MitM Attack potential from certificate with NULL byte in CN. When registering to a SIP server with TLS, Asterisk will accept CA signed certificates with a common name that was signed for a domain other than the one requested if it contains a null character in the common name portion of the cert. This patch fixes that by checking that the common name length matches the the length of the content we actually read from the common name segment. Some certificate authorities automatically sign CA requests when the requesting CN isn't already taken, so an attacker could potentially register a CN with something like www.google.com\x00www.secretlyevil.net and have their certificate signed and Asterisk would accept that certificate as though it had been for www.google.com - this is a security fix and is noted in AST-2015-003. ASTERISK-24847 #close Reported by: Maciej Szmigiero Patches: asterisk-null-in-cn.patch submitted by mhej (license 6085) ........ Merged revisions 434337 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 434338 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434384 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 11:23 +0000 [1712d16825] Richard Mudgett * format_cache.c: Add missing slin12 format to ast_format_cache_is_slinear(). git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434357 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 07:33 +0000 [ae39dd1f46] Matthew Jordan * chan_iax2: Fix compilation issue due to funky merge Don't mix declarations and code git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434314 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 07:00 +0000 [05397ad01e] Jaco Kroon (License 5671) * chan_iax2: Fix crash caused by unprotected access to iaxs[peer->callno] This patch fixes an access to the peer callnumber that is unprotected by a corresponding mutex. The peer->callno value can be changed by multiple threads, and all data inside the iaxs array must be procted by a corresponding lock of iaxsl. The patch moves the unprotected access to a location where the mutex is safely obtained. Review: https://reviewboard.asterisk.org/r/4599/ ASTERISK-21211 #close Reported by: Jaco Kroon patches: asterisk-11.2.1-iax2_poke-segfault.diff submitted by Jaco Kroon (License 5671) ........ Merged revisions 434291 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434292 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 06:53 +0000 [be13c72142] Valentin Vidić (License 6697) * chan_sip: Handle IPv4 mapped IPv6 clients when NAT is enabled When udpbindaddr is set to the IPv6 bind all address of '::', Asterisk will attempt to handle both IPv4 and IPv6 addresses, although the information will be stored in a struct with an AF_INET6 address type. However, the current NAT handling code won't handle the IPv4 mapped IPv6 addresses correctly. This patch adds an additional check for the mapped address case, allowing the NAT code to handle clients even when the address is IPv6. Review: https://reviewboard.asterisk.org/r/4563/ ASTERISK-18032 #close Reported by: Christoph Timm patches: nat_with_ipv6.diff submitted by Valentin Vidić (License 6697) ........ Merged revisions 434288 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434289 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 06:44 +0000 [f324870dab] dkdegroot (License 6600) * clang compiler warnings: Fix pointer-bool-converesion warnings This patch fixes several warnings pointed out by the clang compiler. * chan_pjsip: Removed check for data->text, as it will always be non-NULL. * app_minivm: Fixed evaluation of etemplate->locale, which will always evaluate to 'true'. This patch changes the evaluation to use ast_strlen_zero. * app_queue: - Fixed evaluation of qe->parent->monfmt, which always evaluates to true. Instead, we just check to see if the dereferenced pointer evaluates to true. - Fixed evaluation of mem->state_interface, wrapping it with a call to ast_strlen_zero. * res_smdi: Wrapped search_msg->mesg_desk_term with calls to ast_strlen_zero. Review: https://reviewboard.asterisk.org/r/4541 ASTERISK-24917 Reported by: dkdegroot patches: rb4541.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434285 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434286 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 14:38 +0000 [a6aed7f6f6] Scott Griepentrog * Revert accidental change in r434261 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434262 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 14:35 +0000 [0584e29300] Scott Griepentrog * pjsip: resolve compatibility problem with ast_sip_session A change in r430179 inserted a variable near the top of a structure caused a problem when running DPMA in a version of Asterisk compiled across the change. This patch moves the new variable to the end of the structure, eliminating the problem. Review: https://reviewboard.asterisk.org/r/4574/ ........ Merged revisions 433944 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434261 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 11:40 +0000 [d754f70239] Kevin Harwell * bridge.c: Hangup attended transfer target after it has been swapped out After completing an attended transfer the transfer target channel (the one that gets swapped out) was not being hung up after leaving the bridge. This resulted in a channel possibly being left around. Added an explicit softhangup for the channel in question after the transfer is successfully completed in order to make sure the channel is hung up. ASTERISK-24782 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4575/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434240 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 10:33 +0000 [c516981dc7] Mark Michelson * Do not queue message requests that we do not respond to. If we receive a MESSAGE request that we cannot send a response to, we should not send the incoming MESSAGE to the dialplan. This commit should help the bouncing message_retrans test to pass consistently. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434218 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 10:21 +0000 [ab803ec342] Matthew Jordan * ARI: Add the ability to intercept hold and raise an event For some applications - such as SLA - a phone pressing hold should not behave in the fashion that the Asterisk core would like it to. Instead, the hold action has some application specific behaviour associated with it - such as disconnecting the channel that initiated the hold; only playing MoH to channels in the bridge if the channels are of a particular type, etc. One way of accomplishing this is to use a framehook to intercept the hold/unhold frames, raise an event, and eat the frame. Tasty. This patch accomplishes that using a new dialplan function, HOLD_INTERCEPT. In addition, some general cleanup of raising hold/unhold Stasis messages was done, including removing some RAII_VAR usage. Review: https://reviewboard.asterisk.org/r/4549/ ASTERISK-24922 #close git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434216 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 21:09 +0000 [488f093e97] dkdegroot (License 6600) * clang compiler warnings: Fix sometimes-initialized warning in func_math This patch fixes a bug in a unit test in func_math where a variable could be passed to ast_free that wasn't allocated. This patch corrects the issue and ensures that we only attempt to free a variable if we previously allocated it. Review: https://reviewboard.asterisk.org/r/4552 ASTERISK-24917 Reported by: dkdegroot patches: rb4552.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434190 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434191 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 21:03 +0000 [c027133f6d] dkdegroot (License 6600) * clang compiler warnings: Fix non-literal-null-conversion warnings Clang will flag errors when a char pointer is set to '\0', as opposed to a value that the char pointer points to. This patch fixes this warning in a variety of locations. Review: https://reviewboard.asterisk.org/r/4551 ASTERISK-24917 Reported by: dkdegroot patches: rb4551.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434187 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434188 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 14:23 +0000 [2270c40d33] Kevin Harwell * res_pjsip: config option 'timers' can't be set to 'no' When setting the configuration option 'timers' equal to 'no' the bit flag was not properly negated. This patch clears all associated flags and only sets the specified one. pjsip will handle any necessary flag combinations. Also went ahead and did similar for the '100rel' option. ASTERISK-24910 #close Reported by: Ray Crumrine Review: https://reviewboard.asterisk.org/r/4582/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434131 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 14:02 +0000 [95de71f247] George Joseph * build: Fixes for gcc 5 compilation These are fixes for compilation under gcc 5.0... chan_sip.c: In parse_request needed to make 'lim' unsigned. inline_api.h: Needed to add a check for '__GNUC_STDC_INLINE__' to detect C99 inline semantics (same as clang). ccss.c: In ast_cc_set_parm, needed to fix weird comparison. dsp.c: Needed to work around a possible compiler bug. It was throwing an array-bounds error but neither sgriepentrog, rmudgett nor I could figure out why. manager.c: In action_atxfer, needed to correct an array allocation. This patch will go to 11, 13, trunk. Review: https://reviewboard.asterisk.org/r/4581/ Reported-by: Jeffrey Ollie Tested-by: George Joseph ASTERISK-24932 #close ........ Merged revisions 434113 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434114 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 13:18 +0000 [d54ccda3b1] dkdegroot (License 6600) * clang compiler warnings: Remove large chunks of unused code from extconf This patch fixes a warning caught by clang, in which it detected that large chunks of extconf were unused. Frankly, I wish we could pretend that all of extconf was unused, but alas, that is not yet the case. A few extraneous functions in the parking tests were removed as well, for the same reason. Review: https://reviewboard.asterisk.org/r/4553 ASTERISK-24917 Reported by: dkdegroot patches: rb4553.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434093 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434097 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 13:03 +0000 [0ecd472e4f] dkdegroot (License 6600) * clang compiler warnings: Fix sometimes-uninitialized warning in pbx_config This patch fixes a warning caught by clang, in which a char pointer could be assigned to before it was initialized. The patch re-organizes the code to ensure that the pointer is always initialized, even on off nominal paths. Review: https://reviewboard.asterisk.org/r/4529 ASTERISK-24917 Reported by: dkdegroot patches: rb4529.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434090 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434091 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 12:52 +0000 [4e7be5b2dc] dkdegroot (License 6600) * clang compiler warnings: Fix format specified in framehook This patch fixes an invalid format specifier used in the formatting of an ERROR message in the framehook code. The format specifier specifies a type of 'unsigned short', but the argument passed to it is of type 'int'. The patch changes the format specifier to 'i'. Review: https://reviewboard.asterisk.org/r/4540 ASTERISK-24917 Reported by: dkdegroot patches: rb4535.patch submitted by dkdegroot (License 6600) ........ Merged revisions 434087 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434088 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 11:02 +0000 [2443b40341] Mark Michelson * Ensure that a non-zero sample rate is returned for all formats. Versions of Asterisk prior to 12 defaulted to 8000 as a sample rate if one was not provided by a format. In Asterisk 13, this was removed. The result was that some calculations which involve dividing by the sample rate resulted in dividing by 0. The fix being put in place here is to have the same default fallback that was present in previous versions of Asterisk. Asterisk-24914 #close Reported by Marcello Ceschia git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434046 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 10:16 +0000 [b1102cd642] Corey Farrell * res_pjsip_phoneprov_provider: Revert 433996 / 433997. res_pjsip_phoneprov_provider is using ao2_callback with OBJ_MULTIPLE, then ignoring the return. OBJ_NODATA flag was to prevent a reference leak, but this caused the module to FRACK on unload. Revert change until this can be investigated further. ASTERISK-24935 Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4578/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434025 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 09:50 +0000 [0f25076f67] Mark Michelson (license #5049) * ParkedCall: Don't allow dialplan fallthrough after retrieving parked call. This is a change to align behavior with that of Asterisk 11 and previous versions. In those versions, if a parked call were retrieved, and the call ended, the parked call retriever would be hung up after the ParkedCall application ran. Prior to this patch, in Asterisk 13, the same situation would result in the parked call retriever falling through to additional priorities in the extension where the ParkedCall application was called. With this patch, the behavior between Asterisk 11 and 13 aligns. ASTERISK-24899 #close Reported by Malcolm Davenport Patches: ASTERISK-24899.patch uploaded by Mark Michelson(license #5049) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@434022 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-05 07:53 +0000 [709fa14b44] Corey Farrell * res_pjsip_phoneprov_provider: Fix leaked OBJ_MULTIPLE iterator. res_pjsip_phoneprov_provider was using ao2_callback with OBJ_MULTIPLE, then ignoring the return. Added OBJ_NODATA flag to prevent a reference leak. ASTERISK-24935 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4578/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433996 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-03 16:53 +0000 [1ee8424f27] Mark Michelson * res_pjsip_messaging: Serialize outbound SIP MESSAGEs Outbound SIP MESSAGEs had the potential to be sent out of order from how they were specified in a set of dialplan steps. This change creates a serializer for sending outbound MESSAGE requests on. This ensures that the MESSAGEs are sent by Asterisk in the same order that they were sent from the dialplan. ASTERISK-24937 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/4579 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433968 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-02 09:56 +0000 [169e57d2e0] Scott Griepentrog * pjsip: resolve compatibility problem with ast_sip_session A change in r430179 inserted a variable near the top of a structure caused a problem when running DPMA in a version of Asterisk compiled across the change. This patch moves the new variable to the end of the structure, eliminating the problem. Review: https://reviewboard.asterisk.org/r/4574/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433944 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-02 05:31 +0000 [1eb0c5f4e8] Corey Farrell * Tell menuselect that MALLOC_DEBUG conflicts with DEBUG_CHAOS. DEBUG_CHAOS was marked as conflicting with MALLOC_DEBUG, but for this to work correctly MALLOC_DEBUG must also be marked as conflicting with DEBUG_CHAOS. Review: https://reviewboard.asterisk.org/r/4557/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433923 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 11:25 +0000 [e301185983] Ashley Sanders * stasis: set a channel variable on websocket disconnect error Resolve compile errors caused by r433863 by fixing the documentation xml to comply with the schema. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433888 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 22:26 +0000 [a1f12d9231] Ashley Sanders * stasis: set a channel variable on websocket disconnect error Resolve compile errors caused by r433839 by included the missing header file, pbx.h. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433863 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 17:00 +0000 [7293ecd90b] Ashley Sanders * stasis: set a channel variable on websocket disconnect error When an error occurs while writing to a web socket, the web socket is disconnected and the event is logged. A side-effect of this, however, is that any application on the other side waiting for a response from Stasis is left hanging indefinitely (as there is no mechanism presently available for notifying interested parties about web socket error states in Stasis). To remedy this scenario, this patch introduces a new channel variable: STASISSTATUS. The possible values for STASISSTATUS are: SUCCESS - The channel has exited Stasis without any failures FAILED - Something caused Stasis to croak. Some (not all) possible reasons for this: - The app registry is not instantiated; - The app requested is not registered; - The app requested is not active; - Stasis couldn't send a start message ASTERISK-24802 Reported By: Kevin Harwell Review: https://reviewboard.asterisk.org/r/4519/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433839 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 11:55 +0000 [94949e7f2f] Richard Mudgett * chan_sip: Fix expression in unit test /channels/chan_sip/test_sip_rtpqos. Fix misplaced parentheses in original fabs() expression. ........ Merged revisions 433816 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433817 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 06:47 +0000 [9967739669] Corey Farrell * Re-add _ast_mem_backtrace_buffer variable for ABI compatibility. Modules built prior to commit of r4502 expect to link at runtime to the variable _ast_mem_backtrace_buffer. This change re-adds the variable to the C file only. Review: https://reviewboard.asterisk.org/r/4558/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433795 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-30 06:42 +0000 [2d39bc5528] Corey Farrell * Fix an ABI compatibility issue with ast_log_safe for modules. Binary modules are sometimes built against the latest release of Asterisk in each branch, and need to be compatible with all releases of that branch. This change ensures that utils.h only uses ast_log_safe from the core. For modules and utilities ast_log is used instead. Review: https://reviewboard.asterisk.org/r/4548/ ........ Merged revisions 433772 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433773 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:44 +0000 [5f8faf16af] dkdegroot (License 6600) * clang compiler warnings: Fix -Wabsolute-value warnings This patch fixes several warnings caught by clang - in this case, usage of the abs function on non-integer values. This patch uses labs and fabs, as appropriate, in the various affected files. Review: https://reviewboard.asterisk.org/r/4525 ASTERISK-24917 Reported by: dkdegroot patches: rb4525.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433749 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433750 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:39 +0000 [09b681e344] dkdegroot (License 6600) * clang compiler warnings: Fix invalid enum conversion This patch fixes some invalid enum conversion warnings caught by clang. In particular: * chan_sip: Several functions mixed usage of the st_refresher_param enum and st_refresher enum. This patch corrects the functions to use the right enum. * chan_pjsip: Fixed mixed usage of ast_sip_session_t38state and ast_t38_state. * strings: Fixed incorrect usage of AO2 flags with strings container. * res_stasis: Change a return enumeration to stasis_app_user_event_res. Review: https://reviewboard.asterisk.org/r/4535 ASTERISK-24917 Reported by: dkdegroot patches: rb4535.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433746 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433747 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:29 +0000 [7f33abb827] Matthew Jordan * main/stdtime/localtime: Fix warning introduced in r433720 The patch in r433720 caused a warning to be kicked back by gcc. It occurred due to this check in unistd.h: if (__nbytes > __bos0 (__buf)) return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf)); That is, if __nbytes is greater than the result of GCC's built-in object size for the struct, we'll kick back a warning. As it turns out, this is because there is an error in the code in the patch. We are passing the address of the pointer to the struct, not iev, which is a pointer to the struct. Hence, the number of bytes is probably going to be lot larger than the number of bytes that make up a pointer! This patch changes the code just read from the pointer to the struct - which fixes the warning. ASTERISK-24917 ........ Merged revisions 433743 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433744 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 20:56 +0000 [47eeb67e14] dkdegroot (License 6600) * clang compiler warnings: Ignore -Wunused-command-line-argument Asterisk's build system has a tendency to pass include directives for libraries to everything compiled within a particular group of source files. This means we pass the header for libxml2 to things that don't necessarily need it. As a result, we ignore this particular warning. Review: https://reviewboard.asterisk.org/r/4545/ ASTERISK-24917 Reported by: dkdegroot patches: rb4545.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433720 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433721 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 20:52 +0000 [dbb4d6f9e7] dkdegroot (License 6600) * clang compiler warnings: Fix warning for -Wgnu-variable-sized-type-not-at-end This patch fixes a warning caught by clang, wherein a variable sized struct is not located at the end of a struct. While the code in question actually expected this, this is a good warning to watch for. Hence, this patch refactors the code in question to not have two variable length elements in the same struct. Review: https://reviewboard.asterisk.org/r/4530/ ASTERISK-24917 Reported by: dkdegroot patches: rb4530.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433717 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433718 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:56 +0000 [e126ab9eeb] dkdegroot (License 6600) * clang compiler warnings: Fix a variety of "unused" warnings This patch fixes the -Wunused-value -Wunused-variable -Wunused-const-variable errors caught by clang. Specifically: * apps/app_queue.c: removed unused qpm_cmd_usage[], qum_cmd_usage[], qsmp_cmd_usage[] * cel/cel_sqlite3_custom.c: removed unused name[] = "cel_sqlite3_custom" * channels/chan_pjsip.c: removed unused desc[] = "PJSIP Channel" * codecs/gsm/src/gsm_create.c: removed unused ident[] = "$Header$" * funcs/func_env.c:729: Fixed ast_str_append_substr. * main/editline/np/strlcat.c: removed unused rcsid variable * main/editline/np/strlcpy.c: removed unused rcsid variable * main/security_events.c: removed unused TIMESTAMP_STR_LEN * utils/conf2ael.c: removed unused cfextension_states * utils/extconf.c: removed unused cfextension_states Review: https://reviewboard.asterisk.org/r/4526 ASTERISK-24917 Reported by: dkdegroot patches: rb4526.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433693 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433694 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:48 +0000 [2f6534527d] dkdegroot (License 6600) * clang compiler warnings: Fix -Wself-assign Assigning a variable to itself isn't super useful. However, the WAV format modules make use of this in order to perform byte endian checks. This patch works around the warning by only performing the self assignment if we are going to do more than just assign it to ourselves. Which is odd, but true. Review: https://reviewboard.asterisk.org/r/4544/ ASTERISK-24917 Reported by: dkdegroot patches: rb4544.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433690 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433691 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:40 +0000 [eb70993a50] dkdegroot (License 6600) * clang compiler warnings: Fix -Wparantheses-equality warnings Clang will treat ((a == b)) as a warning, as it reasonably expects that the developer may have intended to write (a == b) or ((a = b)). This patch cleans up all instances where equality, not assignment, was intended between two parantheses. Review: https://reviewboard.asterisk.org/r/4531/ ASTERISK-24917 Repoted by: dkdegroot patches: rb4531.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433687 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433688 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:31 +0000 [c0ff16036a] dkdegroot (License 6600) * clang compiler warnings: Fix -Wbitfield-constant-conversion warning In chan_iax2, we attempt to assign a -1 to a bitfield. This gets caught by clang, as it will truncate the -1 to a 1 implicitly. Instead, we just assign the value a '1'. Review: https://reviewboard.asterisk.org/r/4537/ ASTERISK-24917 Reported by: dkdegroot patches: rb4537.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433683 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433684 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:27 +0000 [844bc76bef] dkdegroot (License 6600) * clang compiler warnings: Fix -Winitializer-overrides This patch fixes clange compiler warnings for initializer overrides. Specifically: res_pjsip/config_transport maps PJSIP_TLSV1_METHOD to the same enumeration value as PJSIP_SSL_DEFAULT_METHOD. When initializing an array containing those enum values, we therefore initialize the value twice to two different values, "tlsv1" and "default". This patch changes it to just initialize the index in the array to "tlsv1". Review: https://reviewboard.asterisk.org/r/4539/ ASTERISK-24917 Reported by: dkdegroot patches: rb4539.patch submitted by dkdegroot (License 6600) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433682 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:19 +0000 [5e204042d9] dkdegroot (License 6600) * clang compiler warnings: Fix -Wunused-function; make inline function static This patch fixes clang compilers warnings for unused functions. Specifically: * channels/chan_iax2: removed user_ref function * main/dsp.c: removed goertzel_update function * main/config.c: made variable_list_switch static Review: https://reviewboard.asterisk.org/r/4527 ASTERISK-24917 Reported by: dkdegroot patches: rb4527.patch submitted by dkdegroot (License 6600) ........ Merged revisions 433678 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433680 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 17:34 +0000 [cfbf5fbe91] Jonathan Rose * SAC: Add a few basic queues Review: https://reviewboard.asterisk.org/r/4503/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433658 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 17:25 +0000 [1a50d8d4c2] Jonathan Rose * SAC: Add conferencing extensions and configuration Review: https://reviewboard.asterisk.org/r/4504/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433656 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 16:15 +0000 [c6c08d755d] Rusty Newton * configs/basic-pbx - Super Awesome Company example configs Phase 1, Patch 2 Example configuration files for a "basic PBX" deployment for the fictitious Super Awesome Company. Details at https://reviewboard.asterisk.org/r/4488/ and https://wiki.asterisk.org/wiki/display/AST/Super+Awesome+Company Patch 4488 includes all functionality needed for SAC's outside connectivity and some externally accessed features, as well as outbound dialing. Reported by: Malcolm Davenport Tested by: Rusty Newton Review: https://reviewboard.asterisk.org/r/4488/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433624 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 16:04 +0000 [13557675d4] Richard Mudgett * res_pjsip_registrar_expire.c: Made use ao2 container template routines and eliminated some RAII_VAR() usage. * Converted the contact_autoexpire container to use the ao2 template hash and cmp functions. Also made use the OBJ_SEARCH_xxx names instead of the deprecated names. * Eliminates several unnecessary uses of RAII_VAR(). Review: https://reviewboard.asterisk.org/r/4524/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433622 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 15:30 +0000 [85feac857c] Mark Michelson * Add stateful PJSIP response API call, and use it for out-of-dialog responses. Asterisk had an issue where retransmissions of MESSAGE requests resulted in Asterisk processing the retransmission as if it were a new MESSAGE request. This patch fixes the issue by creating a transaction in PJSIP on the incoming request. This way, if a retransmission arrives, the PJSIP transaction layer will resend the response and Asterisk will not ever see the retransmission. ASTERISK-24920 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/4532/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433619 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 12:50 +0000 [dc2cf21144] Richard Mudgett * res_pjsip_registrar_expire.c: Cleanup scheduler leaks on unload/shutdown. Contact expiration object refs were leaked when the module was unloaded. * Made empty the scheduler of entries before destroying it to release the object ref held by the scheduler entry. Review: https://reviewboard.asterisk.org/r/4523/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433596 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 09:41 +0000 [6e6f5b3a1f] scsiguy (License 6692) * res/res_timing_kqueue: Update the module to conform to current timer API This patch updates the kqueue timing module to conform to current timer API. This fixes issues with using the kqueue timing source on Asterisk 13 on FreeBSD 10. These issues include: - Remove support for kevent64(). The values used to support Asterisk timers fit within 32bits and so can be handled on all platforms via kevent(). - Provide debug logging for, but do not track, unacked events. This matches the behavior of all other timer implementations. - Implement continuous mode by triggering and leaving active, a user event. This ensures that the file descriptor for the timer returns immediately from poll(), without placing the load of a high speed timer on the kernel. - In kqueue_timer_get_max_rate(), don't overstate the capability of the timer. On some platforms, UINT_MAX is greater than INTPTR_MAX, the largest integer type kqueue supports for timers. - In kqueue_timer_get_event(), assume the caller woke up from poll() and just return the mode the timer is currently in. This matches all other timer implementations. - Adjust the test code now that unacked events are not tracked. Review: https://reviewboard.asterisk.org/r/4465/ ASTERISK-24857 #close Reported by: scsiguy Tested by: Ed Hynan patches: rb4465.patch submitted by scsiguy (License 6692) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433574 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 07:26 +0000 [b0df413fb2] Corey Farrell * Fix link error for utils/aelparse. Use the standard ast_log instead of ast_log_safe for STANDALONE programs. Review: https://reviewboard.asterisk.org/r/4538/ ........ Merged revisions 433549 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433550 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 02:09 +0000 [d01706ce1e] Corey Farrell * Improved and portable ast_log recursion avoidance This introduces a new logger routine ast_log_safe. This routine should be used for all error messages in code that can be run as a result of ast_log. ast_log_safe does nothing if run recursively. All error logging in astobj2.c, strings.c and utils.h have been switched to ast_log_safe. This required adding support for raw threadstorage. This provides direct access to the void* pointer in threadstorage. In ast_log_safe, NULL is used to signify that this thread is not already running ast_log_safe, (void*)1 when it is already running. This was done since it's critical that ast_log_safe do nothing that could log during recursion checking. ASTERISK-24155 #close Reported by: Timo Teräs Review: https://reviewboard.asterisk.org/r/4502/ ........ Merged revisions 433522 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433523 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 18:07 +0000 [4b225e2104] Corey Farrell * Fix compile errors caused by r4500 / r4501. * Add ast_register_cleanup to utils/clicompat.c to deal with any utils that copy sources from main. * Asterisk 13+: remove unused variables from core_local.c. Review: https://reviewboard.asterisk.org/r/4534/ ........ Merged revisions 433499 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433500 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 17:19 +0000 [6adf26f14d] Corey Farrell * Replace most uses of ast_register_atexit with ast_register_cleanup. Since 'core stop now' and 'core restart now' do not stop modules, it is unsafe for most of the core to run cleanups. Originally all cleanups used ast_register_atexit, and were only changed when it was shown to be unsafe. ast_register_atexit is now used only when absolutely required to prevent corruption and close child processes. Exceptions that need to use ast_register_atexit: * CDR: Flush records. * res_musiconhold: Kill external applications. * AstDB: Close the DB. * canary_exit: Kill canary process. ASTERISK-24142 #close Reported by: David Brillert ASTERISK-24683 #close Reported by: Peter Katzmann ASTERISK-24805 #close Reported by: Badalian Vyacheslav ASTERISK-24881 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4500/ Review: https://reviewboard.asterisk.org/r/4501/ ........ Merged revisions 433495 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433497 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 12:46 +0000 [d0df545a44] Corey Farrell * res_pjsip: Enable unload of all modules at shutdown. * Move most of res_pjsip:module_unload to unload_pjsip to resolve crashes caused by running PJSIP functions from non-PJSIP threads. * Remove call to pjsip_endpt_destroy(ast_pjsip_endpoint), it was causing crashes in some cases. In theory pj_shutdown() should take care of this. * Mark res_pjsip_keepalive and res_pjsip_session as allowed to unload at shutdown. * Resolve leaked config global in res_pjsip_notify. * Unregister pubsub pjsip service module. * Implement cleanup for res_pjsip_session. ASTERISK-24731 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4498/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433469 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 12:04 +0000 [fd434a210f] Kevin Harwell * app_confbridge: file playback blocks dtmf Attempting to execute DTMF in a confbridge while file playback (prompt, announcement, etc) is occurring is not allowed. You have to wait until the sound file has completed before entering DTMF. This patch fixes it so that app_confbridge now monitors for dtmf key presses during menu driven file playback. If a key is pressed playback stops and it executes the matched menu option. ASTERISK-24864 #close Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4510/ ........ Merged revisions 433445 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433446 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-25 13:37 +0000 [dea885a607] Richard Mudgett * A couple minor cleanup tweaks. * In res/res_sorcery_realtime.c: Broke long line. * In main/bucket.c: Eliminated unnecessary NULL check as ast_sorcery_unref() is NULL tolerant and set the global object to NULL after unref in the system shutdown bucket_cleanup(). git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433420 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-25 10:30 +0000 [05de9082a5] Simon Arlott (License 5756) * res_xmpp: Buddies are always auto-registered when processing the roster Due to a quirk in the configuration handling of res_xmpp, the 'autoregister' setting was never actually processed. This was due to not properly copying over the global settings to the client settings when applying the configuration to the run-time object. Review: https://reviewboard.asterisk.org/r/4496/ ASTERISK-14233 ASTERISK-24780 #close Reported by: Simon Arlott patches: asterisk-13.1.0-24780 uploaded by Simon Arlott (License 5756) ........ Merged revisions 433395 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433396 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-24 14:26 +0000 [b1e9552b08] Richard Mudgett * chan_pjsip: Add "rpid_immediate" option to prevent unnecessary "180 Ringing" messages. Incoming PJSIP call legs that have not been answered yet send unnecessary "180 Ringing" or "183 Progress" messages every time a connected line update happens. If the outgoing channel is also PJSIP then the incoming channel will always send a "180 Ringing" or "183 Progress" message when the outgoing channel sends the INVITE. Consequences of these unnecessary messages: * The caller can start hearing ringback before the far end even gets the call. * Many phones tend to grab the first connected line information and refuse to update the display if it changes. The first information is not likely to be correct if the call goes to an endpoint not under the control of the first Asterisk box. When connected line first went into Asterisk in v1.8, chan_sip received an undocumented option "rpid_immediate" that defaults to disabled. When enabled, the option immediately passes connected line update information to the caller in "180 Ringing" or "183 Progress" messages as described above. * Added "rpid_immediate" option to prevent unnecessary "180 Ringing" or "183 Progress" messages. The default is "no" to disable sending the unnecessary messages. ASTERISK-24781 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4473/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433338 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-23 Asterisk Development Team * Asterisk 13.3.0-rc1 Released. 2015-03-22 23:58 +0000 [r433247-433269] Matthew Jordan * apps/app_queue.c, main/cli.c, main/cdr.c, main/manager.c, main/rtp_engine.c, /, funcs/func_cdr.c: Fix compilations errors on 64-bit OpenBSD systems In versiong 5.5, OpenBSD went to 64-bit time values. This requires a cast to (long) when printing members of certain time structs. Review: https://reviewboard.asterisk.org/r/4507 ASTERISK-24879 #close Reported by: snuffy Tested by: snuffy patches: openbsd-time64.diff uploaded by snuffy (License 5024) ........ Merged revisions 433268 from http://svn.asterisk.org/svn/asterisk/branches/11 * main/asterisk.c, main/loader.c, main/xmldoc.c, /: Fix compilation issues for OpenBSD This patch addresses compilation issues for OpenBSD. Specifically, it addresses: * It allows including in asterisk.c * Provides a needed (size_t) cast in xmldoc.c In 13+, it also addresses a conditional inclusion in loader.c. Review: https://reviewboard.asterisk.org/r/4506 ASTERISK-24880 #close Reported by: snuffy Tested by: snuffy patches: misc-openbsd.diff uploaded by snuffy (License 5024) ........ Merged revisions 433245 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-20 19:52 +0000 [r433199-433222] Richard Mudgett * res/res_pjsip_messaging.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c, res/res_pjsip_nat.c: Audit ast_pjsip_rdata_get_endpoint() usage for ref leaks. Valgrind found some memory leaks associated with ast_pjsip_rdata_get_endpoint(). The leaks would manifest when sending responses to OPTIONS requests, processing MESSAGE requests, and res_pjsip supplements implementing the incoming_request callback. * Fix ast_pjsip_rdata_get_endpoint() endpoint ref leaks in res/res_pjsip.c:supplement_on_rx_request(), res/res_pjsip/pjsip_options.c:send_options_response(), res/res_pjsip_messaging.c:rx_data_to_ast_msg(), and res/res_pjsip_messaging.c:send_response(). * Eliminated RAII_VAR() use with ast_pjsip_rdata_get_endpoint() in res/res_pjsip_nat.c:nat_on_rx_message(). * Fixed inconsistent but benign return value in res/res_pjsip/pjsip_options.c:options_on_rx_request(). Review: https://reviewboard.asterisk.org/r/4511/ * res/res_pjsip_sdp_rtp.c, main/sorcery.c, main/xmldoc.c: res_pjsip_sdp_rtp,sorcery: Fix invalid access and memory leak respectively. Valgrind found a memory leak and invalid access. * Fix invalid access by sscanf() being fed a non-nul terminated string of digits in res/res_pjsip_sdp_rtp.c:get_codecs(). * Fix memory leak in main/sorcery.c:sorcery_object_field_destructor(). * Fix potential NULL pointer dereference in main/xmldoc.c:xmldoc_get_syntax_config_option(). Review: https://reviewboard.asterisk.org/r/4513/ 2015-03-19 19:19 +0000 [r433174] Matthew Jordan * funcs/func_env.c, tests/test_func_file.c, /: funcs/func_env: Fix regression caused in FILE read operation When r432935 was merged, it did correctly fix a situation where a FILE read operation on the middle of a file buffer would not read the requested length in the parameters passed to the FILE function. Unfortunately, it would also allow the FILE function to append more bytes than what was available in the buffer if the length exceeded the end of the buffer length. This patch takes the minimum of the remaining bytes in the buffer along with the calculated length to append provided by the original patch, and uses that as the length to append in the return result. This patch also updates the unit tests with the scenarios that were originally pointed out in ASTERISK-21765 that the original implementation treated incorrectly. ASTERISK-21765 ........ Merged revisions 433173 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-19 10:20 +0000 [r433113-433126] Corey Farrell * main/logger.c, /: logger: Apply default console logging when configuration cannot be loaded. When logger.conf is missing or invalid enable console logging and display an error message. ASTERISK-24817 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4497/ ........ Merged revisions 433122 from http://svn.asterisk.org/svn/asterisk/branches/11 * channels/sip/include/dialog.h, channels/chan_sip.c, channels/sip/include/sip.h: chan_sip: Simplify dialog/peer references, improve REF_DEBUG output. * Replace functions for ref/undef of dialogs and peers with macro's to call ao2_t_bump/ao2_t_cleanup. * Enable passthough of REF_DEBUG caller information to sip_alloc and find_call. ASTERISK-24882 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4189/ * /, channels/chan_sip.c: chan_sip: Fix dialog reference leaked to scheduler for reinvite_timeout. Release the scheduler reference to the dialog for reinvite timeout during dialog_unlink_all. ASTERISK-24876 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4491/ ........ Merged revisions 433112 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-18 02:34 +0000 [r433088] Richard Mudgett * res/res_pjsip_session.c: res_pjsip_session: Fix off-nominal extra unref of session. 2015-03-17 22:15 +0000 [r433060-433064] Scott Griepentrog * main/asterisk.c, main/config.c, main/xmldoc.c, main/manager.c, include/asterisk/config.h, main/utils.c, main/codec_builtin.c, main/endpoints.c: Various: bugfixes found via chaos Using DEBUG_CHAOS several instances of a null pointer crash, and one uninitialized variable were uncovered and fixed. Also added details on why Asterisk failed to initialize. Review: https://reviewboard.asterisk.org/r/4468/ * build_tools/cflags.xml, include/asterisk/utils.h: core: Introduce chaos into memory allocations Locate potential crashes by exercising seldom used code paths. This patch introduces a new define DEBUG_CHAOS, and mechanism to randomly return an error condition from functions that will seldom do so. Functions that handle the allocation of memory get the first treatment. Review: https://reviewboard.asterisk.org/r/4463/ 2015-03-17 21:49 +0000 [r433057] Richard Mudgett * main/netsock2.c, /, res/res_pjsip_sdp_rtp.c, res/res_pjsip_t38.c, apps/app_externalivr.c, res/res_pjsip_acl.c: Audit ast_sockaddr_resolve() usage for memory leaks. Valgrind found some memory leaks associated with ast_sockaddr_resolve(). Most of the leaks had already been fixed by earlier memory leak hunt patches. This patch performs an audit of ast_sockaddr_resolve() and found one more. * Fix ast_sockaddr_resolve() memory leak in apps/app_externalivr.c:app_exec(). * Made main/netsock2.c:ast_sockaddr_resolve() always set the addrs parameter for safety so the pointer will never be uninitialized on return. The same goes for res/res_pjsip_acl.c:extract_contact_addr(). * Made functions that call ast_sockaddr_resolve() with RAII_VAR() controlling the addrs variable use ast_free instead of ast_free_ptr to provide better MALLOC_DEBUG information. Review: https://reviewboard.asterisk.org/r/4509/ ........ Merged revisions 433056 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-17 18:34 +0000 [r433028-433031] Kevin Harwell * include/asterisk/res_pjsip.h, res/res_pjsip_endpoint_identifier_anonymous.c, res/res_pjsip_endpoint_identifier_ip.c, res/res_pjsip.c, res/res_pjsip_endpoint_identifier_user.c: res_pjsip: Allow configuration of endpoint identifier query order Updated some documentation stating that endpoint identifiers registered without a name are place at the front of the lookup list. Also renamed register method 'ast_sip_register_endpoint_identifier_by_name' to 'ast_sip_register_endpoint_identifier_with_name' ASTERISK-24840 Reported by: Mark Michelson * configs/samples/pjsip.conf.sample, CHANGES, res/res_pjsip.c, res/res_pjsip_endpoint_identifier_user.c, include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip_endpoint_identifier_anonymous.c, res/res_pjsip_endpoint_identifier_ip.c, contrib/ast-db-manage/config/versions/45e3f47c6c44_add_pjsip_endpoint_identifier_order.py: res_pjsip: Allow configuration of endpoint identifier query order This patch fixes previously reverted code that caused binary incompatibility problems with some modules. And like the original patch it makes sure that no matter what order the endpoint identifier modules were loaded, priority is given based on the ones specified in the new global 'endpoint_identifier_order' option. ASTERISK-24840 Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4489/ 2015-03-17 16:10 +0000 [r433005] Richard Mudgett * res/res_pjsip.c: res_pjsip: Add reason comment. 2015-03-14 02:28 +0000 [r432971] Matthew Jordan * /, main/format_cap.c: main/frame: Don't report empty disallow values as an error In realtime, it is normal to have a database with both 'allow' and 'disallow' columns in the schema. It is perfectly valid to have an 'allow' value of '!all,g722,ulaw,alaw' and no 'disallow' value. Unlike in static conf files, you can't *not* provide the disallow value. Thus, the empty disallow value causes a spurious WARNING message, which is kind of annoying. This patch makes it so that a 'disallow' value with no ... value ... is ignored. Granted, you can still screw this up as well, as technically specifying 'disallow=all,!ulaw' allows only ulaw, and then you would have no 'allow' value in your database. But really, why would you do that? WHY? ASTERISK-16779 #close Reported by: Atis Lezdins ........ Merged revisions 432970 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-14 02:00 +0000 [r432945-432949] Joshua Colp * funcs/func_curl.c, /: func_curl: Don't hold exclusive lock when performing HTTP request. This code originally kept a lock held when performing the HTTP request to ensure that the options provided to curl remain valid. This doesn't seem to be necessary these days and holding the lock caused requests to happen sequentially instead of in parallel. ASTERISK-18708 #close Reported by: Dave Cabot ........ Merged revisions 432948 from http://svn.asterisk.org/svn/asterisk/branches/11 * main/cli.c, /: core: Fix tab completion of "core set debug channel" CLI command. The "core set debug channel" CLI command mistakenly had source filenames added to its tab completion. This occurred because the CLI generator fell back to the "core set debug" command which permits setting debug at a source filename level. ASTERISK-21038 #close Reported by: Richard Kenner ........ Merged revisions 432944 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-14 01:21 +0000 [r432920-432938] Matthew Jordan * /, funcs/func_env.c: FILE: fix retrieval of file contents when offset is specified The loop that reads in a file was not correctly using the offset when determining what bytes to append to the output. This patch corrects the logic such that the correct portion of the file is extracted when an offset is specified. ASTERISK-21765 Reported by: John Zhong Tested by: Matt Jordan, Di-Shi Sun patches: file_read_390821.patch uploaded by Di-Shi Sun (License 5076) ........ Merged revisions 432935 from http://svn.asterisk.org/svn/asterisk/branches/11 * apps/app_amd.c, /, configs/samples/amd.conf.sample: apps/app_amd: Document maximum_word_length option; fix AMDCAUSE documentation This patch corrects the documentation for the AMD application. Specifically: * It documents the maximum_word_length option, which limits the maximum allowed length of a single utterance. * It clarifies the AMDCAUSE values MAXWORDS and MAXWORDLENGTH. MAXWORDLENGTH was documented as MAXWORDS, while MAXWORDS was undocumented. Thanks to the issue reporter, Frank DiGennaro, for pointing out the issues. ASTERISK-19470 #close Reported by: Frank DiGennaro ........ Merged revisions 432918 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-13 17:04 +0000 [r432892-432894] Richard Mudgett * res/res_pjsip/pjsip_configuration.c: chan_pjsip: AMI action PJSIPShowEndpoint closes AMI connection on error. Also fixed similar problem with AMI action PJSIPShowEndpoints. ASTERISK-24872 #close Reported by: Dmitriy Serov Review: https://reviewboard.asterisk.org/r/4487/ * channels/chan_pjsip.c, res/res_pjsip_caller_id.c: chan_pjsip/res_pjsip_callerid: Make Party ID handling simpler and consistent. The res_pjsip modules were manually checking both name and number presentation values when there is a function that determines the combined presentation for a party ID struct. The function takes into account if the name or number components are valid while the manual code rarely checked if the data was even valid. * Made use ast_party_id_presentation() rather than manually checking party ID presentation values. * Ensure that set_id_from_pai() and set_id_from_rpid() will not return presentation values other than what is pulled out of the SIP headers. It is best if the code doesn't assume that AST_PRES_ALLOWED and AST_PRES_USER_NUMBER_UNSCREENED are zero. * Fixed copy paste error in add_privacy_params() dealing with RPID privacy. * Pulled the id->number.valid test from add_privacy_header() and add_privacy_params() up into the parent function add_id_headers() to skip adding PAI/RPID headers earlier. * Made update_connected_line_information() not send out connected line updates if the connected line number is invalid. Lower level code would not add the party ID information and thus the sent message would be unnecessary. * Eliminated RAII_VAR usage in send_direct_media_request(). Review: https://reviewboard.asterisk.org/r/4472/ 2015-03-13 14:48 +0000 [r432868] Kevin Harwell * include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip_endpoint_identifier_anonymous.c, res/res_pjsip_endpoint_identifier_ip.c, contrib/ast-db-manage/config/versions/45e3f47c6c44_add_pjsip_endpoint_identifier_order.py, configs/samples/pjsip.conf.sample, CHANGES, res/res_pjsip.c, res/res_pjsip_endpoint_identifier_user.c: Revert - res_pjsip: Allow configuration of endpoint identifier query order Due to a break in binary compatibility with some other modules these changes are being reverted until the issue can be resolved. ASTERISK-24840 Reported by: Mark Michelson 2015-03-12 12:58 +0000 [r432808-432811] Matthew Jordan * /, main/audiohook.c: main/audiohook: Update internal sample rate on reads When an audiohook is created (which is used by the various Spy applications and Snoop channel in Asterisk 13+), it initially is given a sample rate of 8kHz. It is expected, however, that this rate may change based on the media that passes through the audiohook. However, the read/write operations on the audiohook behave very differently. When a frame is written to the audiohook, the format of the frame is checked against the internal sample rate. If the rate of the format does not match the internal sample rate, the internal sample rate is updated and a new SLIN format is chosen based on that sample rate. This works just fine. When a frame is read, however, we do something quite different. If the format rate matches the internal sample rate, all is fine. However, if the rates don't match, the audiohook attempts to "fix up" the number of samples that were requested. This can result in some seriously large number of samples being requested from the read/write factories. Consider the worst case - 192kHz SLIN. If we attempt to read 20ms worth of audio produced at that rate, we'd request 3840 samples (192000 / (1000 / 20)). However, if the audiohook is still expecting an internal sample rate of 8000, we'll attempt to "fix up" the requested samples to: samples_converted = samples * (ast_format_get_sample_rate(format) / (float) audiohook->hook_internal_samp_rate); which is: 92160 = 3840 * (192000 / 8000) This results in us attempting to read 92160 samples from our factories, as opposed to the 3840 that we actually wanted. On a 64-bit machine, this miraculously survives - despite allocating up to two buffers of length 92160 on the stack. The 32-bit machines aren't quite so lucky. Even in the case where this works, we will either (a) get way more samples than we wanted; or (b) get about 3840 samples, assuming the timing is pretty good on the machine. Either way, the calculation being performed is wrong, based on the API users expectations. My first inclination was to allocate the buffers on the heap. As it is, however, there's at least two drawbacks with doing this: (1) It's a bit complicated, as the size of the buffers may change during the lifetime of the audiohook (ew). (2) The stack is faster (yay); the heap is slower (boo). Since our calculation is flat out wrong in the first place, this patch fixes this issue by instead updating the internal sample rate based on the format passed into the read operation. This causes us to read the correct number of samples, and has the added benefit of setting the audihook with the right SLIN format. Note that this issue was caught by the Asterisk Test Suite as a result of r432195 in the 13 branch. Because this issue is also theoretically possible in Asterisk 11, the change is being made here as well. Review: https://reviewboard.asterisk.org/r/4475/ ........ Merged revisions 432810 from http://svn.asterisk.org/svn/asterisk/branches/11 * Makefile, include/asterisk/utils.h, /, configure, main/Makefile, configure.ac, include/asterisk/inline_api.h, makeopts.in: Add support for the clang compiler; update RAII_VAR to use BlocksRuntime RAII_VAR, which is used extensively in Asterisk to manage reference counted resources, uses a GCC extension to automatically invoke a cleanup function when a variable loses scope. While this functionality is incredibly useful and has prevented a large number of memory leaks, it also prevents Asterisk from being compiled with clang. This patch updates the RAII_VAR macro such that it can be compiled with clang. It makes use of the BlocksRuntime, which allows for a closure to be created that performs the actual cleanup. Note that this does not attempt to address the numerous warnings that the clang compiler catches in Asterisk. Much thanks for this patch goes to: * The folks on StackOverflow who asked this question and Leushenko for providing the answer that formed the basis of this code: http://stackoverflow.com/questions/24959440/rewrite-gcc-cleanup-macro-with-nested-function-for-clang * Diederik de Groot, who has been extremely patient in working on getting this patch into Asterisk. Review: https://reviewboard.asterisk.org/r/4370/ ASTERISK-24133 ASTERISK-23666 ASTERISK-20399 ASTERISK-20850 #close Reported by: Diederik de Groot patches: RAII_CLANG.patch uploaded by Diederik de Groot (License 6600) ........ Merged revisions 432807 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-11 16:38 +0000 [r432764-432787] Richard Mudgett * res/res_pjsip/config_domain_aliases.c, res/res_pjsip/include/res_pjsip_private.h, include/asterisk/res_pjsip.h: res_pjsip: Move internal init/destroy prototypes to private header file. Done as a separate commit from a finding in https://reviewboard.asterisk.org/r/4467/ * include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip/pjsip_configuration.c: res_pjsip: Fix pjsip.conf type=global object default value handling. When a type=global section is not defined in pjsip.conf the global defaults are not applied. As a result the mandatory Max-Forwards header is not added to SIP messages for res_pjsip/chan_pjsip. The handling of pjsip.conf type=global objects has several problems: 1) If the global object is missing the defaults are not applied. 2) If the global object is missing the default_outbound_endpoint's default value is not returned by ast_sip_global_default_outbound_endpoint(). 3) Defines are needed so default values only need to be changed in one place. * Added a sorcery instance observer callback to check if there were any type=global sections loaded. If there were more than one then issue an error message. If there were none then apply the global defaults. * Fixed ast_sip_global_default_outbound_endpoint() to return the documented default when no type=global object is defined. * Made defines for the global default values. * Increased the default_useragent[] size because SVN version strings can get lengthy and 128 characters may not be enough. * Fixed an off-nominal code path ref leak in global_alloc() if the string fields fail to initialize. * Eliminated RAII_VAR in get_global_cfg() and ast_sip_global_default_outbound_endpoint(). ASTERISK-24807 #close Reported by: Anatoli Review: https://reviewboard.asterisk.org/r/4467/ * res/res_pjsip/pjsip_global_headers.c: res_pjsip: Fixed invalid empty Server and User-Agent SIP headers. Setting pjsip.conf useragent to an empty string results in an empty SIP header being sent. * Made not add an empty SIP header item to the global SIP headers list. Review: https://reviewboard.asterisk.org/r/4467/ 2015-03-10 23:09 +0000 [r432742] Joshua Colp * main/stasis_channels.c, main/endpoints.c, main/stasis_bridges.c: core: Don't create snapshots with locks. Snapshots are immutable and are never changed. Allocating them with a lock is wasteful. Review: https://reviewboard.asterisk.org/r/4469/ 2015-03-10 21:33 +0000 [r432693-432721] Matthew Jordan * res/res_config_odbc.c, /: res/res_config_odbc: Fix improper escaping of backslashes with MySQL When escaping backslashes with MySQL, the proper way to escape the characters in a LIKE clause is to escape the '\' four times, i.e., '\\\\'. To quote the MySQL manual: "Because MySQL uses C escape syntax in strings (for example, “\n” to represent a newline character), you must double any “\” that you use in LIKE strings. For example, to search for “\n”, specify it as “\\n”. To search for “\”, specify it as “\\\\”; this is because the backslashes are stripped once by the parser and again when the pattern match is made, leaving a single backslash to be matched against." ASTERISK-24808 #close Reported by: Javier Acosta patches: res_config_odbc.diff uploaded by Javier Acosta (License 6690) ........ Merged revisions 432720 from http://svn.asterisk.org/svn/asterisk/branches/11 * apps/app_voicemail.c, /: app_voicemail: Fix crash with IMAP backends when greetings aren't present When an IMAP backend is in use and greetings are set to be used, but aren't present for a user in their IMAP folder, Asterisk will crash. This occurs due to the mailstream being set to the 'greetings' folder and being left in that particular state, regardless of the success/failure of the attempt to access the folder the mailstream points to. Later access of the mailstream assumes that it points to the 'INBOX' (or some other folder), resulting in either a crash (if the greetings folder didn't exist and the mailstream is invalid) or an inability to read messages from the 'INBOX' folder. This patch restores the mailstream to its correct state after accessing the greetings. This fixes the crash, and sets the mailstream to the state that VoiceMailMain expects. Note that while ASTERISK-23390 also contained a patch for this issue, the patch on ASTERISK-24786 is the one being merged here. Review: https://reviewboard.asterisk.org/r/4459/ ASTERISK-23390 #close Reported by: Ben Smithurst ASTERISK-24786 #close Reported by: Graham Barnett Tested by: Graham Barnett patches: app_voicemail.c.patch.SIGSEGV3rev2 uploaded by Graham Barnett (License 6685) ........ Merged revisions 432695 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, main/stdtime/localtime.c: localtime: Fix file descriptor leak on kqueue(2) systems The localtime management in the Asterisk core contains a thread that watches for changes in the local timezone. On systems where the directory containing /etc/localtime is modified frequently, the thread monitoring the changes will be woken up to determine if any changes in timezone have occurred. When using kqueue(2), this can cause a leak of file descriptors due to some improper management of resources. This patch updates the kqueue(2) handling in localtime, such that is no longer leaks resources. Review: https://reviewboard.asterisk.org/r/4450/ ASTERISK-24739 #close Reported by: Ed Hynan patches: 11.15.0-u.diff uploaded by Ed Hynan (Licnese 6680) 11.7.0-u.diff uploaded by Ed Hynan (License 6680) svn-trunk-Jan-26-2015-u.diff uploaded by Ed Hynan (License 6680) ........ Merged revisions 432691 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-10 16:04 +0000 [r432668] Richard Mudgett * res/res_pjsip_refer.c, res/res_pjsip_session.c, include/asterisk/res_pjsip_session.h, res/res_pjsip_session.exports.in: res_pjsip_refer: Fix occasional unexpected BYE sent after receiving a REFER. A race condition happened between initiating a transfer and requesting that a dialog termination be delayed. Occasionally, the transferrer channels would exit the bridge and hangup before the dialog termination delay was requested. * Made request dialog termination delay before initiating the transfer action. If the transfer fails then cancel the delayed dialog termination request. ASTERISK-24755 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4460/ 2015-03-09 16:12 +0000 [r432638] Kevin Harwell * include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip_endpoint_identifier_anonymous.c, res/res_pjsip_endpoint_identifier_ip.c, contrib/ast-db-manage/config/versions/45e3f47c6c44_add_pjsip_endpoint_identifier_order.py (added), configs/samples/pjsip.conf.sample, CHANGES, res/res_pjsip.c, res/res_pjsip_endpoint_identifier_user.c: res_pjsip: Allow configuration of endpoint identifier query order It's possible to have a scenario that will create a conflict between endpoint identifiers. For instance an incoming call could be identified by two different endpoint identifiers and the one chosen depended upon which identifier module loaded first. This of course causes problems when, for example, the incoming call is expected to be identified by username, but instead is identified by ip. This patch adds a new 'global' option to res_pjsip called 'endpoint_identifier_order'. It is a comma separated list of endpoint identifier names that specifies the order by which identifiers are processed and checked. ASTERISK-24840 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4455/ 2015-03-08 01:46 +0000 [r432614] Joshua Colp * res/res_rtp_asterisk.c: res_rtp_asterisk: Fix wrongful use of USE_PJPROJECT define. As pjproject is now used as a shared library a different define, HAVE_PJPROJECT, is used to specify if pjproject is present. ASTERISK-24830 #close Reported by: Stefan Engström 2015-03-06 22:50 +0000 [r432574-432594] Richard Mudgett * res/res_pjsip_refer.c: res_pjsip_refer: Make safely get the context for a blind transfer. Made safely get the TRANSFER_CONTEXT channel value while the channel is locked in refer_incoming_attended_request() and refer_incoming_blind_request(). The pointer returned by pbx_builtin_getvar_helper() is only valid while the channel is locked. * res/res_pjsip_refer.c: res_pjsip_refer: Made refer_attended_alloc() not create the ao2 object with a lock. The lock is unused. 2015-03-06 21:11 +0000 [r432556] Jonathan Rose * include/asterisk/app.h, main/app.c: app: Add functions to swap voicemail function table for testing purposes 2015-03-06 20:18 +0000 [r432528-432534] Richard Mudgett * channels/chan_dahdi.c, channels/sig_analog.c, /, channels/chan_dahdi.h, channels/sig_analog.h, UPGRADE.txt: chan_dahdi/sig_analog: Fix distinctive ring detection to suck less. The distinctive ring feature interferes with detecting Caller ID and appears to have been broken for years. What happens is if you have a ring-ring cadence as used in the UK you get too many DAHDI events for the distinctive ring pattern array and Caller ID detection is aborted. I think when Zapata/DAHDI added the ring begin event it broke distinctive ring. More events happen than before and the code does no filtering of which event times are recorded in the pattern array. * Made distinctive ring only record the ringt count when the ring ends instead of on just any DAHDI event. Distinctive ring can be ring, ring-ring, ring-ring-ring, or different ring durations for the up to three rings. * Fixed the distinctive ring detection enable (chan_dahdi.conf option usedistinctiveringdetection) to be per port instead of somewhat per port and somewhat global. This has been broken since v1.8. * Fixed using the default distinctive ring context when the detected pattern does not match any configured dringX patterns. The default context did not get set when the previous call was a matched distinctive ring pattern and the current call is not matched. This has been broken since v1.8. * Made distinctive ring have no effect on Caller ID detection when it is disabled. Caller ID detection just monitors for 10 seconds before giving up. * Fixed leak of struct callerid_state memory when a polarity reversal during Caller ID detection causes the incoming call to be aborted. DAHDI-1143 AST-1545 ASTERISK-24825 #close Reported by: Richard Mudgett ASTERISK-17588 Reported by: Daniel Flounders Review: https://reviewboard.asterisk.org/r/4444/ ........ Merged revisions 432530 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, channels/chan_sip.c: chan_sip: Fix realtime locking inversion when poking a just built peer. When a realtime peer is built it can cause a locking inversion when the just built peer is poked. If the CLI command "sip show channels" is periodically executed then a deadlock can happen because of the locking inversion. * Push the peer poke off onto the scheduler thread to avoid the locking inversion of the just built realtime peer. AST-1540 ASTERISK-24838 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4454/ ........ Merged revisions 432526 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-05 16:38 +0000 [r432485] George Joseph * apps/app_voicemail.c, /: app_voicemail: Fix compile breaking in app_voicemail with IMAP_STORAGE. There is a leftover "assert" in app_voicemail/__messagecount that references variables that don't exist. This causes the compile to fail when --enable-dev-mode and IMAP_STORAGE are selected. This patch removes the assert. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4461/ ........ Merged revisions 432484 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-03-04 18:52 +0000 [r432453] Matthew Jordan * main/translate.c: translate: Prevent invalid memory accesses on fast shutdown When a 'core restart now' or 'core stop now' is executed and a channel is currently in a media operation, the translator matrix can be destroyed while a channel is currently blocked on getting the best translation choice (see ast_translator_best_choice). When the channel gets the mutex, the translation matrix now has invalid memory, and Asterisk crashes. This patch does two things: (1) We now only clean up the translation matrix on a graceful shutdown. In that case, there are no channels, and so there is no risk of this occurring. (2) We also now set the __matrix and __indextable to NULL. In some initial backtraces when this occurred, it looked as if there was a memory corruption occurring, and it wasn't until we determined that something had restarted Asterisk that the issue became clear. By setting these to NULL on shutdown, it becomes a bit easier to determine why a crash is occurring. Note that we could litter the code with NULL checks on the __matrix, but the act of making the translation matrix cleaned up on shutdown should preclude this issue from occurring in the first place, and this part of the code needs to be as fast as possible. Review: https://reviewboard.asterisk.org/r/4457/ 2015-03-02 19:14 +0000 [r432423] Matthew Jordan * res/res_pjsip_sdp_rtp.c: res/res_pjsip_sdp_rtp: Revert portion of r432195 Unfortunately, while initial testing with ConfBridge did not reproduce the audio problem alluded to in the comment in res_pjsip_sdp_rtp, further testing did show that bridge_softmix and/or ConfBridge has a severe problem bridging two or more participants at different sampling rates. Sometimes, it even picks odd sampling rates that cause hideous audio problems. This patch backs out the offending portion of the code until the issues in the affected bridging modules can be more properly analyzed. ASTERISK-24841 2015-02-27 18:23 +0000 [r432404] Richard Mudgett * main/json.c, rest-api/api-docs/endpoints.json, res/ari/resource_endpoints.c, res/res_ari_endpoints.c, include/asterisk/json.h, res/ari/resource_channels.c: ARI: Fix crash if integer values used in JSON payload 'variables' object. Sending the following ARI commands caused Asterisk to crash if the JSON body 'variables' object passes values of types other than strings. POST /ari/channels POST /ari/channels/{channelid} PUT /ari/endpoints/sendMessage PUT /ari/endpoints/{tech}/{resource}/sendMessage * Eliminated RAII_VAR usage in ast_ari_channels_originate_with_id(), ast_ari_channels_originate(), ast_ari_endpoints_send_message(), and ast_ari_endpoints_send_message_to_endpoint(). ASTERISK-24751 #close Reported by: jeffrey putnam Review: https://reviewboard.asterisk.org/r/4447/ 2015-02-26 18:52 +0000 [r432385] Scott Griepentrog * include/asterisk/dial.h, main/dial.c: Dial API: add self destruct option when complete This patch adds a self-destruction option to the dial api. The usefulness of this is mostly when using async mode to spawn a separate thread used to handle the new call, while the calling thread is allowed to go on about other business. The only alternative to this option would be the calling thread spawning a new thread, or hanging around itself waiting to destroy the dial struct after completion. Example of use (minus error checking): struct ast_dial *dial = ast_dial_create(); ast_dial_append(dial, "PJSIP", "200", NULL); ast_dial_option_global_enable(dial, AST_DIAL_OPTION_ANSWER_EXEC, "Echo"); ast_dial_option_global_enable(dial, AST_DIAL_OPTION_SELF_DESTROY, NULL); ast_dial_run(dial, NULL, 1); The dial_run call will return almost immediately after spawning the new thread to run and monitor the dial. If the call is answered, it is placed into the echo app. When completed, it will call ast_dial_destroy() on the dial structure. Note that any allocations made to pass values to ast_dial_set_user_data() or dial options must be free'd in a state callback function on any of: AST_DIAL_RESULT_UNASWERED, AST_DIAL_RESULT_ANSWERED, AST_DIAL_RESULT_HANGUP, or AST_DIAL_RESULT_TIMEOUT. Review: https://reviewboard.asterisk.org/r/4443/ 2015-02-26 17:07 +0000 [r432363] Kevin Harwell * /, apps/app_chanspy.c, main/channel.c: app_chanspy, channel: fix frame leaks Fixed a couple of frame leaks that were found during testing. ASTERISK-24828 #close Reported by: John Hardin Review: https://reviewboard.asterisk.org/r/4445/ ........ Merged revisions 432362 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-26 04:58 +0000 [r432321-432342] Matthew Jordan * /, apps/Makefile, channels/Makefile: make: Remove 'res_features' from libraries to link against with cygwin/mingw32 Both the apps and channels Makefiles still listed 'res_features' as modules to link against when compiling for cygwin or mingw32. This module hasn't existed for quite some time. ASTERISK-18105 #close Reported by: feyfre ........ Merged revisions 432341 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, channels/chan_sip.c: channels/chan_sip: Don't send a BYE after final response when PBX thread fails When Asterisk fails to start a PBX thread for a new channel - for example, when the maxcalls setting in asterisk.conf is exceeded - we currently send a final response, and then attempt to send a BYE request to the UA. Since that's all sorts of wrong, this patch fixes that by setting sipalreadygone on the sip_pvt such that we don't get stuck sending BYE requests to something that does not want it. Note that this patch is a slight modification of the one on ASTERISK-15434. For clarity, it explicitly calls sipalreadygone with the calls to transmit a final response. ASTERISK-21845 ASTERISK-15434 #close Reported by: Makoto Dei Tested by: Matt Jordan patches: sip-pbxstart-failed.patch uploaded by Makoto Dei (License 5027) ........ Merged revisions 432320 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-25 23:48 +0000 [r432301] Rusty Newton * configs/basic-pbx/README (added), configs/basic-pbx (added), configs/basic-pbx/extensions.conf (added), configs/basic-pbx/logger.conf (added), configs/basic-pbx/indications.conf (added), configs/basic-pbx/musiconhold.conf (added), configs/basic-pbx/asterisk.conf (added), configs/basic-pbx/pjsip.conf (added), configs/basic-pbx/modules.conf (added), configs/basic-pbx/voicemail.conf (added): configs/basic-pbx - Super Awesome Company example configs Phase 1, Patch 1 Example configuration files for a "basic PBX" deployment for the fictitious Super Awesome Company. Details at https://reviewboard.asterisk.org/r/4379/ and https://wiki.asterisk.org/wiki/display/AST/Super+Awesome+Company Reported by: Malcolm Davenport Tested by: Rusty Newton Review: https://reviewboard.asterisk.org/r/4379/ 2015-02-25 23:09 +0000 [r432258-432281] Matthew Jordan * /, configure, configure.ac: configure: Promote SQLite3 "not installed" warning to error Since Asterisk won't build without the library, not having it is definitely an error. Thanks to Kyle Kurz for pointing this out. ........ Merged revisions 432280 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, channels/chan_sip.c: channels/chan_sip: Clarify WARNING message in mismatched SRTP scenario When we receive an SDP as part of an offer/answer for a peer/friend has been configured to require encryption, and that SDP offer/answer failed to provide acceptable crypto attributes, we currently issue a WARNING that uses the phrase "we" and "requested". In this case, both of those terms are ambiguous - the user will probably think "we" is Asterisk (it most likely isn't) and it may not be a "request", so much as an SDP that was received in some fashion. This patch makes the WARNING messages slightly less bad and a bit more accurate as well. ASTERISK-23214 #close Reported by: Rusty Newton ........ Merged revisions 432277 from http://svn.asterisk.org/svn/asterisk/branches/11 * main/sdp_srtp.c, /: channels/sip/sdp_crypto: Handle SRTP keys negotiated with key lifetime/MKI Prior to this patch, SDP offers negotiating SDES-SRTP crypto attributes would be rejected if those crypto attributes contained either a key lifetime or a MKI parameter. While from a theoretical point of view this was defensible - Asterisk does not support key lifetimes or multiple crypto keys - from a practical point of view, this is quite a problem. A large number of endpoints offer lifetimes/MKI, which Asterisk can tolerate so long as it doesn't actually have to support anything more than a single key or refresh the key. In reality, this is (so far as we've seen) always the case. This patch is a forward port of Olle's work in the lingon-srtp-key-lifetime-1.8 branch. To quote Olle from ASTERISK-17721, it handles lifetime/MKI parameters in the following fashion: > The Lingon branch now handle lifetime and MKI parameters. > > We only accept lifetimes up to max for the crypto and higher than 10 hours > for packetization of 20 ms (50 pps). > > We only handle MKI with index 1. > > We do not really bother with counting packets and reinviting at end of > lifetime, so the min of 10 hours kind of takes care of most calls. If there > are longer ones, we rely on the other side for re-invites. > > It's still not perfect, but I personally think this is an improvement. A > configuration option for minimum lifetime accepted could be added. When the patch was ported forward, I decided against adding a configuration option as Olle's handling was more than sufficient for every case I've seen come through the issue tracker or through interoperability testing. We can revisit that decision if it proves to be false. A few small other tweaks were made to the surrounding code to reduce indentation and provide better type safety for the 'tag' parameter. Review: https://reviewboard.asterisk.org/r/4419/ Review: https://reviewboard.asterisk.org/r/4418/ ASTERISK-17721 #close Reported by: Terry Wilson ASTERISK-17899 #close Reported by: Dwayne Hubbard patches: lingon-srtp-key-lifetime-1.8.diff uploaded by oej (License 5267) ASTERISK-20233 Reported by: tootai ASTERISK-22748 Reported by: Alejandro Mejia ........ Merged revisions 432239 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-25 20:44 +0000 [r432237] David M. Lee * res/res_http_websocket.c, /: Increase WebSocket frame size and improve large read handling Some WebSocket applications, like [chan_respoke][], require a larger frame size than the default 8k; this patch bumps the default to 16k. This patch also fixes some problems exacerbated by large frames. The sanity counter was decremented on every fread attempt in ws_safe_read(), regardless of whether data was read from the socket or not. For large frames, this could result in loss of sanity prior to reading the entire frame. (16k frame / 1448 bytes per segment = 12 segments). This patch changes the sanity counter so that it only decrements when fread() doesn't read any bytes. This more closely matches the original intention of ws_safe_read(), given that the error message is "Websocket seems unresponsive". This patch also properly logs EOF conditions, so disconnects are no longer confused with unresponsive connections. [chan_respoke]: https://github.com/respoke/chan_respoke Review: https://reviewboard.asterisk.org/r/4431/ ........ Merged revisions 432236 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-24 22:14 +0000 [r432195-432199] Matthew Jordan * /, channels/chan_sip.c: channels/chan_sip: Fix crash when transmitting packet after thread shutdown When the monitor thread is stopped, its pthread ID is set to a specific value (AST_PTHREADT_STOP) so that later portions of the code can determine whether or not it is safe to manipulate the thread. Unfortunately, __sip_reliable_xmit failed to check for that value, checking instead only for AST_PTHREAD_STOP. Passing the invalid yet very specific value to pthread_kill causes a crash. This patch adds a check for AST_PTHREADT_STOP in __sip_reliable_xmit such that it doesn't attempt to poke the thread if the thread has already been stopped. ASTERISK-24800 #close Reported by: JoshE ........ Merged revisions 432198 from http://svn.asterisk.org/svn/asterisk/branches/11 * channels/chan_pjsip.c, main/channel.c, res/res_pjsip_sdp_rtp.c, res/ari/resource_channels.c: ARI/PJSIP: Apply requesting channel's format cap to created channels This patch addresses the following problems: * ari/resource_channels: In ARI, we currently create a format capability structure of SLIN and apply it to the new channel being created. This was originally done when the PBX core was used to create the channel, as there was a condition where a newly created channel could be created without any formats. Unfortunately, now that the Dial API is being used, this has two drawbacks: (a) SLIN, while it will ensure audio will flows, can cause a lot of needless transcodings to occur, particularly when a Local channel is created to the dialplan. When no format capabilities are available, the Dial API handles this better by handing all audio formats to the requsted channels. As such, we defer to that API to provide the format capabilities. (b) If a channel (requester) is causing this channel to be created, we currently don't use its format capabilities as we are passing in our own. However, the Dial API will use the requester channel's formats if none are passed into it, and the requester channel exists and has format capabilities. This is the "best" scenario, as it is the most likely to create a media path that minimizes transcoding. Fixing this simply entails removing the providing of the format capabilities structure to the Dial API. * chan_pjsip: Rather than blindly picking the first format in the format capability structure - which actually *can* be a video or text format - we select an audio format, and only pick the first format if that fails. That minimizes the weird scenario where we attempt to transcode between video/audio. * res_pjsip_sdp_rtp: Applied the joint capapbilites to the format structure. Since ast_request already limits us down to one format capability once the format capabilities are passed along, there's no reason to squelch it here. * channel: Fixed a comment. The reason we have to minimize our requested format capabilities down to a single format is due to Asterisk's inability to convey the format to be used back "up" a channel chain. Consider the following: PJSIP/A => L;1 <=> L;2 => PJSIP/B g,u,a g,u,a g,u,a u That is, we have PJSIP/A dialing a Local channel, where the Local;2 dials PJSIP/B. PJSIP/A has native format capabilities g722,ulaw,alaw; the Local channel has inherited those format capabilities down the line; PJSIP/B supports only ulaw. According to these format capabilities, ulaw is acceptable and should be selected across all the channels, and no transcoding should occur. However, there is no way to convey this: when L;2 and PJSIP/B are put into a bridge, we will select ulaw, but that is not conveyed to PJSIP/A and L;1. Thus, we end up with: PJSIP/A <=> L;1 <=> L;2 <=> PJSIP/B g g X u u Which causes g722 to be written to PJSIP/B. Even if we can convey the 'ulaw' choice back up the chain (which through some severe hacking in Local channels was accomplished), such that the chain looks like: PJSIP/A <=> L;1 <=> L;2 <=> PJSIP/B u u u u We have no way to tell PJSIP/A's *channel driver* to Answer in the SDP back with only 'ulaw'. This results in all the channel structures being set up correctly, but PJSIP/A *still* sending g722 and causing the chain to fall apart. There's a lot of difficulty just in setting this up, as there are numerous race conditions in the act of bridging, and no clean mechanism to pass the selected format backwards down an established channel chain. As such, the best that can be done at this point in time is clarifying the comment. Review: https://reviewboard.asterisk.org/r/4434/ ASTERISK-24812 #close Reported by: Matt Jordan 2015-02-24 18:32 +0000 [r432175] Kevin Harwell * /, bridges/bridge_softmix.c: bridge_softmix: G.729 codec license held When more than one call using the same codec type enters into a softmix bridge and no audio is present for a channel the bridge optimizes the out frame by using the same one for all channels with the same codec type. Unfortunately, when that number (channels with same codec type) dropped to <= 1 the codec was not dereferenced. At least not until all parties left the bridge. Thus in the case of G.729 the license was not released. This patch ensures that the codec is dereferenced immediately when the optimization no longer applies. ASTERISK-24797 #close Reported by: Luke Hulsey Review: https://reviewboard.asterisk.org/r/4429/ ........ Merged revisions 432174 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-21 20:47 +0000 [r432118-432154] Joshua Colp * rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c: res_ari_channels: Return a 404 response when a requested channel variable does not exist. This change makes it so that if a channel variable is requested and it does not exist a 404 response will be returned instead of an allocation failed response. This makes it easier to debug and figure out what is going on for a user. ASTERISK-24677 #close Reported by: Joshua Colp * res/res_pjsip_registrar.c: res_pjsip_registrar: Add Expires header to 200 OK if present in REGISTER. Some implementations don't pay attention to the expires for individual contacts. In this case they may consider the lack of an Expires header in the 200 OK as unregistered. This change makes it so if an Expires header is present in the REGISTER we will add one in the 200 OK. ASTERISK-24785 #close Reported by: Ross Beer * res/res_pjsip.c: res_pjsip: Add a log message when creating a UAC dialog to a target URI that is invalid. ASTERISK-24499 #close Reported by: Rusty Newton 2015-02-21 17:35 +0000 [r432099] Matthew Jordan * apps/app_voicemail.c, /: apps/app_voicemail: Demote an ERROR message to a WARNING message When using IMAP voicemail with FreePBX, you will often get ERROR messages complaining about not being able to find a mailbox. This is due to how FreePBX handles voicemail mailboxes. Unfortunately, app_voicemail has to consider this a configuration error, as in any other system it would be indicative of someone misconfiguring their system. Regardless, a misconfiguration is a WARNING, and not an ERROR. This patch demotes the message so that system administrators can hopefully reduce some of the noise in their log files. Note that in the original patch this was made into a NOTICE, but that's a too forgiving. ASTERISK-24790 #close Reported by: Graham Barnett patches: app_voicemail.c.patch_noise uploaded by Graham Barnett (License 6685) ........ Merged revisions 432098 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-21 14:05 +0000 [r432079] Joshua Colp * main/http.c, /: http: Add missing html tag to 'httpstatus' functionality. ASTERISK-24724 #close Reported by: Ashley Sanders ........ Merged revisions 432078 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-21 02:56 +0000 [r432055-432059] Corey Farrell * /, main/bucket.c, main/codec.c, main/loader.c: Allow shutdown to unload modules that register bucket scheme's or codec's. * Change __ast_module_shutdown_ref to be NULL safe (11+). * Allow modules that call ast_bucket_scheme_register or ast_codec_register to be unloaded during graceful shutdown only (13+ only). ASTERISK-24796 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4428/ ........ Merged revisions 432058 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, include/asterisk/lock.h: asterisk/lock.h: Fix syntax errors for non-gcc OSX with 64-bit integers. Add a couple of missing closing brackets / parenthesis. ASTERISK-24814 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4436/ ........ Merged revisions 432054 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-20 17:51 +0000 [r432034] Richard Mudgett * /, channels/sig_analog.c: chan_dahdi/sig_analog: Put log message strings on one line. With the log messages on one line, you can search for the log message seen in the log and expect to find it. ........ Merged revisions 432032 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-20 17:46 +0000 [r432033] George Joseph * res/res_pjsip_publish_asterisk.c, res/res_pjsip_acl.c: ASTERISK-24811: Add ast_sorcery_apply_config() to res_pjsip_publish_asterisk. Matt Hoskins reported that res_pjsip_publish_asterisk wouldn't pull config from realtime. Turns out it was just missing a call ast_sorcery_apply_config(). res_pjsip_acl was missing it as well, so I added it. The other pjsip modules looked OK. ASTERISK-24811 #close Reported-by: Matt Hoskins Tested-by: George Joseph Tested-by: Matt Hoskins patches: res_pjsip_publish_asterisk.c.patch submitted by Matt Hoskins (license 6688) Review: https://reviewboard.asterisk.org/r/4433/ 2015-02-20 15:47 +0000 [r432013] Matthew Jordan * apps/app_voicemail.c, /: apps/app_voicemail: Fix IMAP header compatibility issue with Microsoft Exchange When interfacing with Microsoft Exchange, custom headers will be returned as all lower case. Currently, the IMAP header code will fail to parse the returned custom headers, as it will be performing a case sensitive comparison. This can cause playback of messages to fail, as needed information - such as origtime - will not be present. This patch updates app_voicemail's header parsing code to perform a case insensitive lookup for the requested custom headers. Since the headers are specific to Asterisk, e.g., 'x-asterisk-vm-orig-time', and headers should be unique in an IMAP message, this should cause no issues with other systems. ASTERISK-24787 #close Reported by: Graham Barnett patches: app_voicemail.c.patch_MSExchange uploaded by Graham Barnett (License 6685) ........ Merged revisions 432012 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-19 21:25 +0000 [r431956-431993] Richard Mudgett * channels/chan_dahdi.c, channels/sig_analog.c, /: chan_dahdi: Remove some dead code. ........ Merged revisions 431992 from http://svn.asterisk.org/svn/asterisk/branches/11 * main/aoc.c: ISDN AOC: Fix crash from an AOC-E message that doesn't have a channel association. Processing an AOC-E event that does not or no longer has a channel association causes a crash. The problem with posting AOC events to the channel topic is that AOC-E events don't always have a channel association and posting the event to the all channels topic is just wrong. AOC-E events do however have their own charging association method to refer to the agreement with the charging entity. * Changed the AOC events to post to the AMI manager topic instead of the channel topics. If a channel is associated with the event then channel snapshot information is supplied with the AMI event. * Eliminated RAII_VAR() usage in aoc_to_ami() and ast_aoc_manager_event(). This patch supercedes the patch on Review: https://reviewboard.asterisk.org/r/4427/ ASTERISK-22670 #close Reported by: klaus3000 ASTERISK-24689 #close Reported by: Marcel Manz ASTERISK-24740 #close Reported by: Panos Gkikakis Review: https://reviewboard.asterisk.org/r/4430/ * res/res_pjsip_refer.c: res_pjsip_refer: Handle INVITE with Replaces failure after answer. * Fixed hangup handling of the session->channel after answer if the ast_channel_move() or ast_bridge_impart() fails. We are still the thread controlling the session->channel so we need to call ast_hangup() to kill the channel. * Fixed debug messages in refer_incoming_invite_request() referencing incorrect channnels on success. Code comments now say why the session->channel cannot be used. Review: https://reviewboard.asterisk.org/r/4422/ 2015-02-19 15:28 +0000 [r431937] Matthew Jordan * main/tcptls.c, /: tcptls: Handle new OpenSSL compile time option to disable SSLv3 Some distributions are going to disable SSLv3 at compile time. This option can be checked using the directive OPENSSL_NO_SSL3_METHOD. This patch updates the TCP/TLS handling in Asterisk to look for that directive before attempting to use the SSLv3 specific methods. ASTERISK-24799 #close Reported by: Alexander Traud patches: no-ssl3-method.patch uploaded by Alexander Traud (License 6520) ........ Merged revisions 431936 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-19 02:01 +0000 [r431917] Corey Farrell * main/sched.c, /, include/asterisk/sched.h, channels/chan_iax2.c: Create work around for scheduler leaks during shutdown. * Added ast_sched_clean_by_callback for cleanup of scheduled events that have not yet fired. * Run all pending peercnt_remove_cb and replace_callno events in chan_iax2. Cleanup of replace_callno events is only run 11, since it no longer releases any references or allocations in 13+. ASTERISK-24451 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4425/ ........ Merged revisions 431916 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-17 15:31 +0000 [r431898] Richard Mudgett * res/res_pjsip_sdp_rtp.c, res/res_pjsip_messaging.c, res/res_pjsip_caller_id.c, res/res_pjsip_refer.c, res/res_pjsip_send_to_voicemail.c: res_pjsip_refer: Fix crash from a REFER and BYE collision. Analyzing a one-off crash on a busy system showed that processing a REFER request had a NULL session channel pointer. The only way I can think of that could cause this is if an outgoing BYE transaction overlapped the incoming REFER transaction in a collision. Asterisk sends a BYE while the phone sends a REFER to complete an attended transfer. * Made check the session channel pointer before processing an incoming REFER request in res_pjsip_refer. * Fixed similar crash potential for res_pjsip supplement incoming request processing for res_pjsip_sdp_rtp INFO, res_pjsip_caller_id INVITE/UPDATE, res_pjsip_messaging MESSAGE, and res_pjsip_send_to_voicemail REFER messages. * Made res_pjsip_messaging respond to a message body too large with a 413 instead of ignoring it. ASTERISK-24700 #close Reported by: Zane Conkle Review: https://reviewboard.asterisk.org/r/4417/ 2015-02-16 21:29 +0000 [r431879] Matthew Jordan * res/res_rtp_asterisk.c: res/res_rtp_asterisk: Fix crash in debug from RTCP reports without report block When RTCP debugging was enabled, an RTCP report without a report block would cause a crash. This was due to the verbose output not checking to see if the report_block pointer was NULl before dereferencing it. This patch adds the necessary check to prevent printing any verbose output if the far side hasn't provided us the information they should have. ASTERISK-24791 #close Reported by: JoshE Tested by: JoshE 2015-02-15 19:00 +0000 [r431807-431860] Joshua Colp * configs/samples/pjsip.conf.sample: pjsip: Remove "contact" type from pjsip.conf.sample The "contact" object is not meant to be configured from the pjsip.conf configuration file. It is meant to be created as a result of a registration and stored elsewhere. ASTERISK-24085 #close Reported by: Rusty Newton * contrib/scripts/install_prereq: install_prereq: Tweak flags when configuring pjproject. This change does two things: 1. Disables debugging so assertions which can return an error do, instead of asserting. 2. Enables IPv6 support. ASTERISK-24632 #close Reported by: Rusty Newton * res/res_sorcery_config.c: res_sorcery_config: Improve object lookup times. The res_sorcery_config module currently uses a fixed bucket size of 53. This means that depending on the number of objects you either end up with excess buckets or a lot of collisions. Due to the way that res_sorcery_config is implemented it's actually possible to make the bucket size dynamic based on the number of objects. This is due to the fact that each loading of the config file produces a new container and does not modify the existing one. This change uses the number of expected objects and finds a prime number near it. In practice depending on the number of objects this can speed up lookups anywhere from 2X to 15X. This change also removes the lock from the container as it is not needed. Review: https://reviewboard.asterisk.org/r/4423/ * res/res_pjsip/pjsip_cli.c: res_pjsip: Add "pjsip show version" CLI command. When debugging things it can be useful to know absolutely what version of pjproject res_pjsip is running against. This change adds a "pjsip show version" CLI command which can be used to query for this. ASTERISK-24685 #close Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/4424/ * res/res_timing_pthread.c: res_timing_pthread: Fix leaky pipes. During some refactoring the way private information for timers was stored was changed. As a result of this the action which normally removed the timer upon closure in res_timing_pthread was also removed causing the timer to remain after it should using up resources. This change ensures that the timer is removed upon closure. ASTERISK-24768 #close Reported by: Matthias Urlichs patches: timer.patch submitted by Matthias Urlichs (license 5508) 2015-02-15 00:32 +0000 [r431789] Matthew Jordan * /, apps/app_mixmonitor.c: apps/app_mixmonitor: Move Test Event for MIXMONITOR_END to after it finishes The Test Event for MIXMONITOR_END - which signals that a MixMonitor has completed - technically fired before the filestream was closed. If a test used this to trigger a condition to verify that the file was written, it could result in a race condition where the file size would not be what the test expected. Luckily, no tests were using this (although they should have been). Since the test event needed to be moved after the point where the MixMonitor autochan has been destroyed, the test event no longer emits the channel name. Luckily, nothing needs it. ........ Merged revisions 431788 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-14 19:45 +0000 [r431751-431771] Joshua Colp * main/sorcery.c: sorcery: Output an error message if a wizard is specified for an object type and it isn't found. ASTERISK-24612 #close Reported by: Joshua Colp * res/res_pjsip_exten_state.c: res_pjsip_exten_state: Improve log message when a subscription is attempted to a non-existent extension. ASTERISK-24716 #close Reported by: Rusty Newton * channels/pjsip/dialplan_functions.c: 'information' ends with an 'n'. * channels/pjsip/dialplan_functions.c: chan_pjsip: Fix crash when CHANNEL dialplan function is invoked with pjsip argument and no type. ASTERISK-24771 #close Reported by: Niklas Larsson 2015-02-13 17:21 +0000 [r431734] Richard Mudgett * res/res_pjsip_session.c: res_pjsip_session: Fix double re-INVITE collision crash. A multi-asterisk box setup with direct media enabled would occasionally crash when two re-INVITE collisions on a call leg happen in a row. The re-INVITE logic only had one timer struct to defer the re-INVITE. When the second collision happens the timer struct is overwritten and put into the timer heap again. Resources for the first timer are leaked and the heap has two positions occupied by the same timer struct. Now the heap ordering is potentially corrupted, the timer will fire twice, and any resources allocated for the second timer will be released twice. * The solution is to put the collided re-INVITE into the delayed requests queue with all the other delayed requests and cherry pick the next request that can come off the queue when an event happens. * Changed to put delayed BYE requests at the head of the delayed queue. There is no sense in processing delayed UPDATEs and re-INVITEs when a BYE has been requested. * Made the start of a BYE request flush the delayed requests queue to prevent a delayed request from overlapping the BYE transaction. I saw a few cases where a delayed re-INVITE got started after the BYE transaction started. * Changed the delayed_request struct to use an enum instead of a string for the request method. Cherry picking the queue is easier with an enum than string comparisons and the compiler can warn if a switch statement does not cover all defined enum values. * Improved the debug output to give more information. It helps to know which channel is involved with an endpoint. Trunks can have many channels associated with the endpoint at the same time. ASTERISK-24727 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4414/ 2015-02-12 20:32 +0000 [r431717] Matthew Jordan * res/res_pjsip_multihomed.c, res/stasis/control.c, include/asterisk/stasis_app.h, rest-api/api-docs/channels.json, res/ari/resource_channels.c, CHANGES, res/res_ari_channels.c, channels/chan_pjsip.c, res/res_pjsip_nat.c, res/res_pjsip_transport_websocket.c, res/ari/resource_channels.h: ARI/PJSIP: Add the ability to redirect (transfer) a channel in a Stasis app This patch adds a new feature to ARI to redirect a channel to another server, and fixes a few bugs in PJSIP's handling of the Transfer dialplan application/ARI redirect capability. *New Feature* A new operation has been added to the ARI channels resource, redirect. With this, a channel in a Stasis application can be redirected to another endpoint of the same underlying channel technology. *Bug fixes* In the process of writing this new feature, two bugs were fixed in the PJSIP stack: (1) The existing .transfer channel callback had the limitation that it could only transfer channels to a SIP URI, i.e., you had to pass 'PJSIP/sip:foo@my_provider.com' to the dialplan application. While this is still supported, it is somewhat unintuitive - particularly in a world full of endpoints. As such, we now also support specifying the PJSIP endpoint to transfer to. (2) res_pjsip_multihomed was, unfortunately, trying to 'help' a 302 redirect by updating its Contact header. Alas, that resulted in the forwarding destination set by the dialplan application/ARI resource/whatever being rewritten with very incorrect information. Hence, we now don't bother updating an outgoing response if it is a 302. Since this took a looong time to find, some additional debug statements have been added to those modules that update the Contact headers. Review: https://reviewboard.asterisk.org/r/4316/ ASTERISK-24015 #close Reported by: Private Name ASTERISK-24703 #close Reported by: Matt Jordan 2015-02-11 18:02 +0000 [r431693-431698] Kevin Harwell * res/res_pjsip/pjsip_configuration.c: res_pjsip: dtls_handler causes Asterisk to crash There have been a couple of times where a crash occurred in the dtls_handler section of the code for res_pjsip. Unfortunately, in working this issue the problem was unable to be reproduced. After looking at the backtraces and through the code the current best guess as to why this happened might be due to a reentrance problem and the strtok function. So, the current fix is to convert the strtok function into the reentrant version of the function, strtok_r. ASTERISK-24741 #close Reported by: Zane Conkle Review: https://reviewboard.asterisk.org/r/4409/ * res/ari/ari_websockets.c: ari_websockets: removed extra check on websocket session read When merging the websocket timeout issue (ASTERISK-24701) an extra, almost duplicate, check was left in the code that should not have been. This removes it. ASTERISK-24701 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4412/ 2015-02-11 17:28 +0000 [r431692] Richard Mudgett * main/bridge.c, main/http.c, apps/app_confbridge.c, include/asterisk/channel.h, res/res_pjsip/pjsip_options.c, res/res_pjsip_pubsub.c, main/asterisk.c, main/channel.c, include/asterisk.h, channels/chan_sip.c: HTTP: Stop accepting requests on final system shutdown. There are three CLI commands to stop and restart Asterisk each. 1) core stop/restart now - Hangup all calls and stop or restart Asterisk. New channels are prevented while the shutdown request is pending. 2) core stop/restart gracefully - Stop or restart Asterisk when there are no calls remaining in the system. New channels are prevented while the shutdown request is pending. 3) core stop/restart when convenient - Stop or restart Asterisk when there are no calls in the system. New calls are not prevented while the shutdown request is pending. ARI has made stopping/restarting Asterisk more problematic. While a shutdown request is pending it is desirable to continue to process ARI HTTP requests for current calls. To handle the current calls while a shutdown request is pending, a new committed to shutdown phase is needed so ARI applications can deal with the calls until the system is fully committed to shutdown. * Added a new shutdown committed phase so ARI applications can deal with calls until the final committed to shutdown phase is reached. * Made refuse new HTTP requests when the system has reached the final system shutdown phase. Starting anything while the system is actively releasing resources and unloading modules is not a good thing. * Split the bridging framework shutdown to not cleanup the global bridging containers when shutting down in a hurry. This is similar to how other modules prevent crashes on rapid system shutdown. * Moved ast_begin_shutdown(), ast_cancel_shutdown(), and ast_shutting_down(). You should not have to include channel.h just to access these system functions. ASTERISK-24752 #close Reported by: Matthew Jordan Review: https://reviewboard.asterisk.org/r/4399/ 2015-02-11 17:12 +0000 [r431674] Matthew Jordan * /, channels/chan_sip.c: channels/chan_sip: Fix RealTime error during SIP unregistration with MariaDB When a SIP device that has its registration stored in RealTime unregisters, the entry for that device is updated with blank values, i.e., "", indicating that it is no longer registered. Unfortunately, one of those values that is 'blanked' is the device's port. If the column type for the port is not a string datatype (the recommended type is integer), an ODBC or database error will be thrown. MariaDB does not coerce empty strings to a valid integer value. This patch updates the query run from chan_sip such that it replaces the port value with a value of '0', as opposed to a blank value. This is the value that other database backends coerce the empty string ("") to already, and the handling of reading a RealTime registration value from a backend already anticipates receiving a port of '0' from the backends. ASTERISK-24772 #close Reported by: Richard Miller patches: chan_sip.diff uploaded by Richard Miller (License 5685) ........ Merged revisions 431673 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-11 16:51 +0000 [r431670] Kevin Harwell * res/res_http_websocket.c, res/ari/ari_websockets.c, /: res_http_websocket: websocket write timeout fails to fully disconnect When writing to a websocket if a timeout occurred the underlying socket did not get closed/disconnected. This patch makes sure the websocket gets disconnected on a write timeout. Also a notice is logged stating that the websocket was disconnected. ASTERISK-24701 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4412/ ........ Merged revisions 431669 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-11 15:51 +0000 [r431663] Corey Farrell * include/asterisk/module.h, main/loader.c, /, bridges/bridge_builtin_features.c: Enable REF_DEBUG for ast_module_ref / ast_module_unref. Add ast_module_shutdown_ref for use by modules that can only be unloaded during graceful shutdown. When REF_DEBUG is enabled: * Add an empty ao2 object to struct ast_module. * Allocate ao2 object when the module is loaded. * Perform an ao2_ref in each place where mod->usecount is manipulated. * ao2_cleanup on module unload. ASTERISK-24479 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4141/ ........ Merged revisions 431662 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-02-10 23:16 +0000 [r431643] George Joseph * res/res_pjsip_config_wizard.c, configs/samples/pjsip_wizard.conf.sample: res_pjsip_config_wizard: Add ability to auto-create hints. Looking at the Super Awesome Company sample reminded me that creating hints is just plain gruntwork. So you can now have the pjsip conifg wizard auto-create them for you. Specifying 'hint_exten' in the wizard will create 'exten => ,hint/PJSIP/' in whatever is specified for 'hint_context'. Specifying 'hint_application' in the wizard will create 'exten => ,1,' in whatever is specified for 'hint_context'. The default for 'hint_context' is the endpoint's context. There's no default for 'hint_application'. If not specified, no app is added. There's no default for 'hint_exten'. If not specified, neither the hint itself nor the application will be created. Some may think this is the slippery slope to users.conf but hints are a basic necessity for phones unlike voicemail, manager, etc that users.conf creates. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4383/ 2015-02-09 03:10 +0000 [r431600-431622] Matthew Jordan * rest-api/api-docs/channels.json, res/ari/resource_channels.c: res/ari/resource_channels: Add missing 'no_answer' reason to DELETE /channels One of the canonical reasons for hanging up a channel is because the far end failed to answer - or because someone else answered, and we want to get rid of this channel. This patch adds the missing value to the 'reason' query parameter for the DELETE /channels operation. Review: https://reviewboard.asterisk.org/r/4400 ASTERISK-24745 #close Reported by: Ben Merrills patches: add_no_answer_ari_hangup_cause.diff uploaded by Ben Merrills (License 6678) * /, res/res_odbc.c: res/res_odbc: Remove unneeded queries when determining if a table exists This patch modifies the ast_odbc_find_table function such that it only performs a lookup of the requested table if the table is not already known. Prior to this patch, a queries would be executed against the database even if the table was already known and cached. Review: https://reviewboard.asterisk.org/r/4405/ ASTERISK-24742 #close Reported by: ibercom patches: patch.diff uploaded by ibercom (License 6599) ........ Merged revisions 431617 from http://svn.asterisk.org/svn/asterisk/branches/11 * res/res_pjsip_sdp_rtp.c: res/res_pjsip_sdp_rtp: Fix leak of local ICE candidates when applying to SDP When an SDP is created for an outgoing request/response, the ICE candidates obtained from the RTP instance are currently leaked. This causes the ao2 container that holds the candidates to never properly be reclaimed when the RTP instance is destroyed. This patch properly decrements the ICE candidates' container if it is successfully obtained. ASTERISK-24769 #close Reported by: Matt Jordan 2015-02-06 21:26 +0000 [r431583] Scott Griepentrog * main/utils.c, res/res_pjsip.c, main/config.c: various: cleanup issues found during leak hunt In this collection of small patches to prevent Valgrind errors are: fixes for reference leaks in config hooks, evaluating a parameter beyond bounds, and accessing a structure after a lock where it could have been already free'd. Review: https://reviewboard.asterisk.org/r/4407/ 2015-02-04 01:27 +0000 [r431538-431555] Joshua Colp * res/res_pjsip_keepalive.c: res_pjsip_keepalive: Don't crash if PJSIP module is not loaded. * main/sorcery.c: sorcery: Don't try to load object types which haven't been defined. The act of defining wizards for an object type in sorcery.conf will create a minimal object type. This can cause a problem when a module has multiple sorcery instances (which all get the wizards from sorcery.conf applied) but the sorcery instances do not all contain full information about the object types. Upon loading errors will occur stating that the objects can not be created. This is confusing and is actually perfectly fine. This change makes it so that only object types which have been fully defined will be loaded. ASTERISK-24748 #close Reported by: Joshua Colp 2015-01-31 16:27 +0000 [r431521] Joshua Colp * res/res_format_attr_h264.c: res_format_attr_h264: Fix crash when determining joint capability. The res_format_attr_h264 module currently incorrectly attempts to copy SPS and PPS information from the wrong attribute. This change fixes that. ASTERISK-24616 #close Reported by: Yura Kocyuba Review: https://reviewboard.asterisk.org/r/4392/ 2015-02-06 Asterisk Development Team * Asterisk 13.2.0 Released. 2015-01-30 Asterisk Development Team * Asterisk 13.2.0-rc1 Released. 2015-01-30 17:44 +0000 [r431492] Richard Mudgett * apps/app_agent_pool.c: app_agent_pool: Fix initial module load agent device state reporting. When the app_agent_pool module initially loads there is a race condition between the thread loading agents.conf and the device state internal processing thread. If the device state internal processing thread handles the agent creation state updates before the thread that loaded agents.conf registers the device state provider callback then the cached agent state is "Invalid". When a consumer module like app_queue asks for the agent state it gets the cached "Invalid" state instead of the real state from the provider. * Moved loading the agents.conf configuration to the last thing setup by app_agent_pool in load_module(). Now the device state provider callback is registered before the config is loaded so the agent creation state updates are guaranteed to get the initial device state. * Removed some now redundant config cleanup on error in load_config(). * Added lock protection when accessing the device state in agent_pvt_devstate_get() and eliminated the RAII_VAR() usage. ASTERISK-24737 #close Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4390/ 2015-01-30 17:38 +0000 [r431490] Kevin Harwell * res/res_pjsip_outbound_publish.c: res_pjsip_outbound_publish: eventually crashes when no response is ever received When Asterisk attempts to send SIP outbound publish information and no response is ever received (no 200 okay, 412, 423) the system eventually crashes. A response is never received because the system Asterisk is attempting to send publish information to is not available. The underlying pjsip framework attempts to send publish information. After several attempts it calls back into the Asterisk outbound publish code. At this point if the "client->queue" is empty Asterisk attempts to schedule a refresh which utilizes "rdata" and since no response was received the given "rdata" struture is NULL. Attempting to dereference a NULL object of course results in a crash. The fix here removes the dependency on rdata for schedule_publish_refresh. Instead param->expiration is now passed to it as this is set to -1 if no response is received. Also added a notification when no response is received. ASTERISK-24635 #close Reported by: Marco Paland Review: https://reviewboard.asterisk.org/r/4384/ 2015-01-30 16:52 +0000 [r431471] asanders : * include/asterisk/http.h, configs/samples/http.conf.sample, main/http.c: HTTP: For httpd server, need option to define server name for security purposes Added a new config property [servername] to the http.conf file; updated the http server to use the new property when sending responses, for showing http status through the CLI and when reporting status through the 'httpstatus' webpage. ASTERISK-24316 #close Reported By: Andrew Nagy Review: https://reviewboard.asterisk.org/r/4374/ 2015-01-30 16:47 +0000 [r431468] Mark Michelson * main/stasis_channels.c, channels/chan_pjsip.c, main/xmldoc.c, res/res_pjsip_refer.c, main/pbx.c, main/manager.c, pbx/pbx_spool.c, main/bridge_after.c: Fix some memory leaks. These memory leaks were found and fixed by John Hardin. I'm just committing them for him. ASTERISK-24736 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/4389 2015-01-29 23:02 +0000 [r431450] Scott Griepentrog * include/asterisk/bridge.h, main/bridge.c, res/stasis/stasis_bridge.c: stasis transfer: fix stasis bridge push race part two When swapping a Local channel in place of one already in a bridge (to complete a bridge attended transfer), the channel that was swapped out can actually be hung up before the stasis bridge push callback executes on the independant transfer thread. This results in the stasis app loop dropping out and removing the control that has the the app name which the local replacement channel needs so it can re-enter stasis. To avoid this race condition a new push_peek callback has been added, and called from the ast_bridge_impart thread before it launches the independant thread that will complete the transfer. Now the stasis push_peek callback can copy the stasis app name before the swap channel can hang up. ASTERISK-24649 Review: https://reviewboard.asterisk.org/r/4382/ 2015-01-29 20:58 +0000 [r431420-431426] Mark Michelson * res/res_pjsip.c, res/res_pjsip_sips_contact.c (added): Use SIPS URIs in Contact headers when appropriate. RFC 3261 sections 8.1.1.8 and 12.1.1 dictate specific scenarios when we are required to use SIPS URIs in Contact headers. Asterisk's non-compliance with this could actually cause calls to get dropped when communicating with clients that are strict about checking the Contact header. Both of the SIP stacks in Asterisk suffered from this issue. This changeset corrects the behavior in res_pjsip/chan_pjsip.c Review: https://reviewboard.asterisk.org/r/4345 * /, channels/chan_sip.c: Use SIPS URIs in Contact headers when appropriate. RFC 3261 sections 8.1.1.8 and 12.1.1 dictate specific scenarios when we are required to use SIPS URIs in Contact headers. Asterisk's non-compliance with this could actually cause calls to get dropped when communicating with clients that are strict about checking the Contact header. Both of the SIP stacks in Asterisk suffered from this issue. This changeset corrects the behavior in chan_sip. ASTERISK-24646 #close Reported by Stephan Eisvogel Review: https://reviewboard.asterisk.org/r/4346 ........ Merged revisions 431423 from http://svn.asterisk.org/svn/asterisk/branches/11 * res/res_pjsip/pjsip_configuration.c: Allow disabling of 100rel support on PJSIP endpoints. Due to an inversion error, setting 100rel=no would not actually change the current value of the setting (which defaulted to "yes"). With this fix, the inversion is corrected. 2015-01-29 16:46 +0000 [r431403] George Joseph * res/res_pjsip_exten_state.c: res_pjsip_exten_state: Reduce log clutter... change a WARNING to a VERBOSE/2 Reduce log clutter by changing the "Watcher for hint %s (removed|deactivated)" message from WARNING to VERBOSE/2. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4387/ 2015-01-29 12:09 +0000 [r431385] Joshua Colp * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix DTLS when used with OpenSSL 1.0.1k A recent security fix for OpenSSL broke DTLS negotiation for many applications. This was caused by read ahead not being enabled when it should be. While a commit has gone into OpenSSL to force read ahead on for DTLS it may take some time for a release to be made and the change to be present in distributions (if at all). As enabling read ahead is a simple one line change this commit does that and fixes the issue. ASTERISK-24711 #close Reported by: Jared Biel ........ Merged revisions 431384 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-28 17:37 +0000 [r431301-431303] Mark Michelson * /, res/res_pjsip_sdp_rtp.c, res/res_pjsip_t38.c, res/res_pjsip_session.c: Fix file descriptor leak in RTP code. SIP requests that offered codecs incompatible with configured values could result in the allocation of RTP and RTCP ports that would not get reclaimed later. ASTERISK-24666 #close Reported by Y Ateya Review: https://reviewboard.asterisk.org/r/4323 AST-2015-001 ........ Merged revisions 431300 from http://svn.asterisk.org/svn/asterisk/branches/12 * funcs/func_curl.c, /: Multiple revisions 431297-431298 ........ r431297 | mmichelson | 2015-01-28 11:05:26 -0600 (Wed, 28 Jan 2015) | 17 lines Mitigate possible HTTP injection attacks using CURL() function in Asterisk. CVE-2014-8150 disclosed a vulnerability in libcURL where HTTP request injection can be performed given properly-crafted URLs. Since Asterisk makes use of libcURL, and it is possible that users of Asterisk may get cURL URLs from user input or remote sources, we have made a patch to Asterisk to prevent such HTTP injection attacks from originating from Asterisk. ASTERISK-24676 #close Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/4364 AST-2015-002 ........ r431298 | mmichelson | 2015-01-28 11:12:49 -0600 (Wed, 28 Jan 2015) | 3 lines Fix compilation error from previous patch. ........ Merged revisions 431297-431298 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 431299 from http://svn.asterisk.org/svn/asterisk/branches/12 2015-01-28 12:18 +0000 [r431267] Sean Bright * res/res_format_attr_silk.c, res/res_format_attr_opus.c: media formats: update res_format_attr_opus & silk In r419044, we changed how formats were handled, but the return value of the format_parse_sdp_fmtp functions in res_format_attr_opus and res_format_attr_silk were not updated, causing calls to fail. Ran into this when getting codec_opus working with Asterisk 13. Once the return value was corrected, we were crashing in opus_getjoint because of NULL format attributes. I've fixed this as well in this patch. Review: https://reviewboard.asterisk.org/r/4371/ 2015-01-28 04:09 +0000 [r431243] Richard Mudgett * main/sorcery.c, res/res_pjsip_outbound_registration.c, res/res_pjsip.c: res_pjsip_outbound_registration: Fix reload race condition. Performing a CLI "module reload" command when there are new pjsip.conf registration objects defined frequently failed to load them correctly. What happens is a race condition between res_pjsip pushing its reload into an asynchronous task processor task and the thread that does the rest of the reloads when it gets to reloading the res_pjsip_outbound_registration module. A similar race condition happens between a reload and the CLI/AMI show registrations commands. The reload updates the current_states container and the CLI/AMI commands call get_registrations() which builds a new current_states container. * Made res_pjsip.c reload_module() use ast_sip_push_task_synchronous() instead of ast_sip_push_task() to eliminate two threads processing config reloads at the same time. * Made get_registrations() not replace the global current_states container so the CLI/AMI show registrations command cannot interfere with reloading. You could never add/remove objects in the container without the possibility of the container being replaced out from under you by get_registrations(). * Added a registration loaded sorcery instance observer to purge any dead registration objects since get_registrations() cannot do this job anymore. The struct ast_sorcery_instance_observer callbacks must be used because the callback happens inline with the load process. The struct ast_sorcery_observer callbacks are pushed to a different thread. * Added some global current_states NULL pointer checks in case the container disappears because of unload_module(). * Made sorcery's struct ast_sorcery_instance_observer.object_type_loaded callbacks guaranteed to be called before any struct ast_sorcery_observer.loaded callbacks will be called. * Moved the check for non-reloadable objects to before the sorcery instance loading callbacks happen to short circuit unnecessary work. Previously with non-reloadable objects, the sorcery instance loading/loaded callbacks would always happen, the individual wizard loading/loaded would be prevented, and the non-reloadable type logging message would be logged for each associated wizard. ASTERISK-24729 #close Review: https://reviewboard.asterisk.org/r/4381/ 2015-01-27 22:56 +0000 [r431179-431219] Kevin Harwell * /, main/tcptls.c: tcptls: Bad file descriptor error when reloading chan_sip While running through some scenarios using chan_sip and tcp a problem would occur that resulted in a flood of bad file descriptor messages on the cli: tcptls.c:712 ast_tcptls_server_root: Accept failed: Bad file descriptor The message is received because the underlying socket has been closed, so is valid. This is probably happening because unloading of chan_sip is not atomic. That however is outside the scope of this patch. This patch simply stops the logging of multiple occurrences of that message. ASTERISK-24728 #close Reported by: Thomas Thompson Review: https://reviewboard.asterisk.org/r/4380/ ........ Merged revisions 431218 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, channels/chan_sip.c: chan_sip: stale nonce causes failure When refreshing (with a small expiration) a registration that was sent to chan_sip the nonce would be considered stale and reject the registration. What was happening was that the initial registration's "dialog" still existed in the dialogs container and upon refresh the dialog match algorithm would choose that as the "dialog" instead of the newly created one. This occurred because the algorithm did not check to see if the from tag matched if authentication info was available after the 401. So, it ended up assuming the original "dialog" was a match and stopped the search. The old "dialog" of course had an old nonce, thus the stale nonce message. This fix attempts to leave the original functionality alone except in the case of a REGISTER. If a REGISTER is received if searches for an existing "dialog" matching only on the callid. If the expires value is low enough it will reuse dialog that is there, otherwise it will create a new one. ASTERISK-24715 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4367/ ........ Merged revisions 431187 from http://svn.asterisk.org/svn/asterisk/branches/11 * res/res_pjsip/pjsip_outbound_auth.c, res/res_pjsip/config_auth.c, main/stasis_message_router.c, res/res_pjsip/location.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip/pjsip_global_headers.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c, res/res_pjsip/config_transport.c: res_pjsip: make it unloadable (take 2) Due to the original patch causing memory corruptions it was removed until the problem could be resolved. This patch is the original patch plus some added locking around stasis router subcription that was needed to avoid the memory corruption. Description of the original problem and patch (still applicable): The res_pjsip module was previously unloadable. With this patch it can now be unloaded. This patch is based off the original patch on the issue (listed below) by Corey Farrell with a few modifications. Namely, removed a few changes not required to make the module unloadable and also fixed a bug that would cause asterisk to crash on unloading. This patch is the first step (should hopefully be followed by another/others at some point) in allowing res_pjsip and the modules that depend on it to be unloadable. At this time, res_pjsip and some of the modules that depend on res_pjsip cannot be unloaded without causing problems of some sort. The goal of this patch is to get res_pjsip and only res_pjsip to be able to unload successfully and/or shutdown without incident (crashes, leaks, etc...). Other dependent modules may still cause problems on unload. Basically made sure, with the patch applied, that res_pjsip (with no other dependent modules loaded) could be succesfully unloaded and Asterisk could shutdown without any leaks or crashes that pertained directly to res_pjsip. ASTERISK-24485 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4363/ patches: pjsip_unload-broken-r1.patch submitted by Corey Farrell (license 5909) 2015-01-27 17:36 +0000 [r431160] Richard Mudgett * /, apps/confbridge/include/confbridge.h, apps/app_confbridge.c: app_confbridge: Repeatedly starting and stopping recording ref leaks the recording channel. Starting and stopping conference recording more than once causes the recording channels to be leaked. For v13 the channels also show up in the CLI "core show channels" output. * Reworked and simplified the recording channel code to use ast_bridge_impart() instead of managing the recording thread in the ConfBridge code. The recording channel's ref handling easily falls into place and other off nominal code paths get handled better as a result. ASTERISK-24719 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4368/ Review: https://reviewboard.asterisk.org/r/4369/ ........ Merged revisions 431135 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-27 17:32 +0000 [r431157] Joshua Colp * main/bridge_channel.c, res/res_pjsip_sdp_rtp.c: bridge / res_pjsip_sdp_rtp: Fix issues with media not being reinvited during direct media. This change fixes two issues: 1. During a swap operation bridging added the new channel before having the swap channel leave. This was not handled in bridge_native_rtp and could result in a channel not getting reinvited back to Asterisk. After this change the swap channel will leave first and the new channel will then join. 2. If a re-invite was received after a session had been established any upstream elements (such as bridge_native_rtp) were not notified that they may want to re-evaluate things. After this change an UPDATE_RTP_PEER control frame is queued when this situation occurs and upstream can react. AST-1524 #close Review: https://reviewboard.asterisk.org/r/4378/ 2015-01-27 17:22 +0000 [r431153] Jonathan Rose * main/manager.c: Manager: Fix Manager Action ModuleLoad to give correct response when reloading Prior to this patch, ModuleLoad would respond with an error indicating that the requested module wasn't found in spite of finding and reloading the module. Review: https://reviewboard.asterisk.org/r/4373/ ASTERISK-24721 #close 2015-01-27 17:20 +0000 [r431134-431145] Matthew Jordan * res/ari/resource_bridges.c, rest-api-templates/asterisk_processor.py, res/ari/resource_channels.h, res/res_ari_bridges.c, res/ari/resource_bridges.h, rest-api-templates/api.wiki.mustache, rest-api/api-docs/channels.json, rest-api-templates/swagger_model.py, rest-api/api-docs/bridges.json: ARI: Improve wiki documentation This patch improves the documentation of ARI on the wiki. Specifically, it addresses the following: * Allowed values and allowed ranges weren't documented. This was particularly frustrating, as Asterisk would reject query parameters with disallowed values - but we didn't tell anyone what the allowed values were. * The /play/id operation on /channels and /bridges failed to document all of the added media resource types. * Documentation for creating a channel into a Stasis application failed to note when it occurred, and that creating a channel into Stasis conflicts with creating a channel into the dialplan. * Some other minor tweaks in the mustache templates, including italicizing the parameter type, putting the default value on its own sub-bullet, and some other nicities. Review: https://reviewboard.asterisk.org/r/4351 * apps/confbridge/conf_config_parser.c, apps/confbridge/include/confbridge.h: app_confbridge: Restore user's menu name to CLI output of 'confbridge list' When issuing a 'confbridge list XXXX' CLI command, the resulting output no longer displays the menu associated with a ConfBridge participant. The issue was caused by ASTERISK-22760. When that patch was done, it removed the copying of the menu name associated with the user from the actual user profile. This patch fixes the issue by copying the menu name over to the user profile when the menu hooks are applied to the user. Since that function now does a little bit more than just apply the hooks, the name of the function has been changed to cover the copying of the menu name over as well. In addition, there is a disparity between the menu name length as it is stored on the conf_menu structure and the confbridge_user structure; this patch makes the lengths match so that a strcpy can be used. Review: https://reviewboard.asterisk.org/r/4372/ ASTERISK-24723 #close Reported by: Steve Pitts 2015-01-27 11:47 +0000 [r431114] Joshua Colp * res/parking/parking_manager.c: res_parking: Fix crash due to race condition when unloading. There is currently a race condition when unloading the res_parking module. Depending on the will of the universe the subscription invocation may occur AFTER the module is unloaded. This is because the module does NOT use stasis_unsubscribe_and_join when terminating the subscription. It merely uses stasis_unsubscribe. This change makes it use stasis_unsubscribe_and_join which is documented for usage in this exact scenario. AST-1520 #close Review: https://reviewboard.asterisk.org/r/4375/ 2015-01-26 14:49 +0000 [r431092] David M. Lee * channels/sip/include/route.h, funcs/func_presencestate.c, main/rtp_engine.c, configure, include/asterisk/autoconfig.h.in, include/asterisk/sem.h, configure.ac, main/app.c, main/bridge_channel.c, main/sem.c, res/res_timing_kqueue.c, main/asterisk.c: Various fixes for OS X This patch addresses compilation errors on OS X. It's been a while, so there's quite a few things. * Fixed __attribute__ decls in route.h to be portable. * Fixed htonll and ntohll to work when they are defined as macros. * Replaced sem_t usage with our ast_sem wrapper. * Added ast_sem_timedwait to our ast_sem wrapper. * Fixed some GCC 4.9 warnings using sig*set() functions. * Fixed some format strings for portability. * Fixed compilation issues with res_timing_kqueue (although tests still fail on OS X). * Fixed menuconfig /sbin/launchd detection, which disables res_timing_kqueue on OS X). ASTERISK-24539 #close Reported by: George Joseph ASTERISK-24544 #close Reported by: George Joseph Review: https://reviewboard.asterisk.org/r/4327/ 2015-01-25 13:42 +0000 [r431072] Matthew Jordan * main/config.c: dynamic realtime: Updates fail to work due to update fields being passed over When a crash was fixed due to usage of the REALTIME function in r423003, a regression was introduced into ast_update2_realtime where the update fields passed to the function would be skipped and the lookup field processed twice. The use of this function is a bit interesting: A variable argument list is used with two sentinel values - the first marks the end of the lookup fields/values; the second marks the end of the update fields/values. Unfortunately, ast_update2_realtime parses over the lookup fields twice, as opposed to parsing over the update fields. This causes the lookups to succeed, but the updates itself to have no effect. Note that the most common instance of this problem occurred in app_voicemail during the updating of a mailbox password. Thanks to the issue reporter, Paddy Grice, for pointing out the problem. Review: https://reviewboard.asterisk.org/r/4356/ ASTERISK-24231 ASTERISK-24626 #close Reported by: Paddy Grice 2015-01-23 20:13 +0000 [r431050-431052] Richard Mudgett * apps/confbridge/conf_chan_record.c: app_confbridge: Make CBRec channel names more unique. Channel names should be different from other channels in the system while the channel exists. * Use a sequence number for CBRec channels instead of a random number because the same random number could be picked again for the next CBRec channel. * /, apps/app_confbridge.c: app_confbridge: Whitespace Because there is sometimes no sence to any whitespace. ........ Merged revisions 431049 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-23 17:08 +0000 [r431030] David M. Lee * res/res_pjsip_config_wizard.c: Add depend on pjproject to res_pjsip_config_wizard.c 2015-01-23 15:12 +0000 [r430999] Kevin Harwell * res/parking/parking_applications.c, channels/chan_iax2.c, res/res_pjsip/pjsip_global_headers.c, res/res_pjsip_pubsub.c, res/res_ari_channels.c, res/res_stasis.c, rest-api-templates/param_parsing.mustache, res/res_ari_endpoints.c, res/res_ari_events.c, include/asterisk/stasis_app.h, res/res_pjsip_mwi.c: Investigate and fix memory leaks in Asterisk Fixed memory leaks that were found in Asterisk. ASTERISK-24693 #close Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/4347/ 2015-01-23 15:03 +0000 [r430994-430998] Walter Doekes * apps/app_voicemail.c, channels/chan_unistim.c, funcs/func_hangupcause.c, main/manager_bridges.c, channels/chan_misdn.c, funcs/func_groupcount.c, /, addons/ooh323c/src/ooh245.c, channels/chan_sip.c, res/res_fax.c, res/res_pjsip_outbound_registration.c, apps/app_minivm.c, apps/app_alarmreceiver.c, include/asterisk/channel.h, contrib/utils/eagi_proxy.c: Fix typo's (retrieve, specified, address). ........ Merged revisions 430996 from http://svn.asterisk.org/svn/asterisk/branches/11 * /, channels/chan_sip.c: chan_sip: Case insensitive comparison of "defaultuser" parameter. All the other configuration options are case insensitive, so this one should be too. ASTERISK-24355 #close Reported by: HZMI8gkCvPpom0tM patches: ast.patch uploaded by HZMI8gkCvPpom0tM (License 6658) ........ Merged revisions 430993 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-22 19:24 +0000 [r430957-430975] Richard Mudgett * include/asterisk/bridge.h, include/asterisk/bridge_channel_internal.h, main/bridge.c, include/asterisk/bridge_internal.h, main/bridge_channel.c: Bridge core: Pass a ref with the swap channel when joining a bridge. When code imparts a channel into a bridge to swap with another channel, a ref needs to be held on the swap channel to ensure that it cannot dissapear before finding it in the bridge. * The ast_bridge_join() swap channel parameter now always steals a ref for the swap channel. This is the only change to the bridge framework's public API semantics. * bridge_channel_internal_join() now requires the bridge_channel->swap channel to pass in a ref. ASTERISK-24649 Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4354/ * res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration.c: Minor code cleanup. * Add an allocation failure check and assert in sip_outbound_registration_response_cb(). * Made sip_outbound_registration_state_destroy() handle partially created state objects from sip_outbound_registration_state_alloc(). Review: https://reviewboard.asterisk.org/r/4366/ 2015-01-22 18:09 +0000 [r430939] Scott Griepentrog * res/stasis/app.c, res/stasis/stasis_bridge.c: stasis transfer: fix a race condition on stasis bridge push After a bridge transfer completes where a local replacement channel is used, a stasis transfer message with the details of the transfer is sent. This is processed by stasis which then sets the stasis app name and replaced channel snapshot on the replacement channel. However, since a separate thread was already started to run stasis on the new replacement channel, a race was on to see if the message processing would be completed before the app name was needed, otherwise the channel would be hung up. This change moves the calls used to set the stasis app name and the replace snapshot to the bridge_stasis_push function callback from the bridge transfer logic, allowing the steps to be completed earlier and more deterministically, and the race elimianted. NOTE: the swap channel parameter to bridge_stasis_push (and thus all bridge push callbacks) must always be present when performing a swap with another channel. ASTERISK-24649 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/4341/ 2015-01-22 14:23 +0000 [r430921] Matthew Jordan * /, apps/app_voicemail.c: apps/app_voicemail: Trigger MWI notification with MixMonitor m() option The MixMonitor m() option allows a recording to be pushed to a specific voicemail mailbox. If the message is delivered to the mailbox's INBOX, however, no MWI notification is currently raised. This patch corrects the issue by properly calling notify_new_state from the msg_create_from_file function. This will cause MWI to be triggered if the message was placed in the mailbox's INBOX. ASTERISK-24709 #close Reported by: Gareth Palmer patches: app_voicemail-430919.patch uploaded by Gareth Palmer (License 5169) ........ Merged revisions 430920 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-21 21:53 +0000 [r430902] Richard Mudgett * res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration.c: Move unref to a better place. Move an unconditional unref of client_state so it doesn't look like it could be used after the last ref has destroyed it. 2015-01-21 13:33 +0000 [r430840-430864] Matthew Jordan * channels/chan_sip.c: channels/chan_sip: Fix registration leak during reload When the SIP registrations were migrated to using ao2 in what was then trunk, the explicit destruction of the registrations on module reload was removed and not replaced with an ao2 equivalent. Debugging done by Stefan Engström, the issue reporter, on ASTERISK-24673 confirmed that the reference in the registry_list container was being leaked. Since the purpose of cleanup_all_regs is to prep a registration for destruction, this function now calls an ao2_callback function callback with the OBJ_MULTIPLE | OBJ_NODATA | OBJ_UNLINK flags used to remove the registrations. This cleans up each registration, and also removes it from the registration container registry_list. Review: https://reviewboard.asterisk.org/r/4355/ ASTERISK-24640 #close Reported by: Max Man ASTERISK-24673 #close Reported by: Stefan Engström Tested by: Stefan Engström * cdr/cdr_manager.c, cel/cel_manager.c: AMI: Add documentation for the missing Cdr/CEL events. This patch adds AMI event documentation for the Cdr and CEL AMI events. Note that while these events do share fields with each other and with other channel related events, they do not contain all of the fields in a standard channel snapshot, nor is the description of the fields identical. As such, the patch opts for documentation for each field, for each event. Review: https://reviewboard.asterisk.org/r/4350/ ASTERISK-24671 #close Reported by: Dan Jenkins * apps/app_dial.c: apps/app_dial: Don't publish DialEnd twice on unexpected GoSub/Macro values The Dial application has some interesting options with the mid-call Macro (M) and GoSub (U) options. If the MACRO_RESULT/GOSUB_RESULT returns specific values, the Dial application will take some action upon the channels involved in the dial operation (such as hanging up a particular party, etc.) The Dial application ensures that a Stasis message is published in the event that MACRO_RESULT/GOSUB_RESULT returns a value that kills the dial operation, so that there is a corresponding DialEnd event published in AMI/ARI for the DialBegin event that preceeded it. A bug exists where that same DialEnd event will be published on Stasis even if the value returned in MACRO_RESULT/GOSUB_RESULT is not one that the Dial application cares about. This causes two DialEnd events to be published - one with the MACRO_RESULT/GOSUB_RESULT and another with "ANSWERED" - which is all sorts of wrong. This patch fixes the bug by ensuring that we only publish a DialEnd message to Stasis if the Dial application's mid-call Macro/GoSub returns something that Dial cares about. Review: https://reviewboard.asterisk.org/r/4336 ASTERISK-24682 #close Reported by: Matt Jordan * main/rtp_engine.c: main/rtp_engine: Format NTP timestamps as unsigned longs When the RTCP reports are created, the NTP timestamps are stored as strings, as JSON does not have an integer type long enough to store the value. However, on 32-bit systems, a signed long may overflow for some portion of the timestamp. This patch corrects the overflow by formatting the timestamps as unsigned longs. 2015-01-20 16:51 +0000 [r430818] asanders : * res/ari/resource_bridges.c: ARI: Fixed crash that occurred when updating a bridge when the optional query parameter 'name' was not supplied. Prior to this changeset, posting to the: /ari/bridges/{bridgeId} endpoint without specifying a value for the [name] query parameter, would crash Asterisk if the bridge you are attempting to create (or update) had the same ID as an existing bridge. The internal mechanism of the POST operation interpreted a null value for name, thus resulting in an error condition that crashed Asterisk. ASTERISK-24560 #close Reported By: Kinsey Moore Review: https://reviewboard.asterisk.org/r/4349/ 2015-01-20 16:46 +0000 [r430817] Richard Mudgett * configs/samples/iax.conf.sample, res/res_fax.c, funcs/func_channel.c, UPGRADE.txt, res/snmp/agent.c, channels/chan_iax2.c: CHANNEL(peer), chan_iax2, res_fax, SNMP agent: Fix deadlock from reaching across a bridge. Calling ast_channel_bridge_peer() cannot be done while holding any channel locks. The reported issue hit the deadlock in chan_iax2, but an audit of the ast_channel_bridge_peer() calls found three more locations where the same deadlock can occur. * Made CHANNEL(peer), res_fax, and the SNMP agent not call ast_channel_bridge_peer() with any channel locked. For CHANNEL(peer) I had to rework the logic to not hold the channel lock. * Made chan_iax2 no longer call ast_channel_bridge_peer(). It was done for legacy reasons that no longer apply. * Removed the iax.conf forcejitterbuffer option. It is now always enabled when the jitterbuffer option is enabled. If you put a jitter buffer on a channel it will be on the channel. ASTERISK-24600 #close Reported by: Jeff Collell Review: https://reviewboard.asterisk.org/r/4342/ 2015-01-20 02:39 +0000 [r430796-430799] Matthew Jordan * contrib/scripts/install_prereq, /: contrib/scripts/install_prereq: Don't install 32-bit packages on 64-bit hosts On Debian based systems, the install_prereq tool uses a search command on Debian that results in selecting both 64-bit and 32-bit packages. Besides the waste of disk space, this can actually cause aptitude use 100% of memory on a VM with 1GB of RAM as it tried to work out all of the 32-bit package dependencies. This patch filters out the 32-bit packages on a 64-bit machine, and leaves 32-bit machines alone. ASTERISK-24048 #close Reported by: Ben Klang Tested by: Ben Klang, Matt Jordan patches: install_prereq_64-bit_compat.patch uploaded by Ben Klang (License 5876) ........ Merged revisions 430798 from http://svn.asterisk.org/svn/asterisk/branches/11 * apps/app_voicemail.c, /: app_voicemail: Temp message left after review/hangup with ODBC/IMAP backend When using ODBC or IMAP storage, temporary files created on the file system must be disposed of using the DISPOSE macro. The DELETE macro will map to a deletion function for the backend storage, but does not clean up any local files created as a result of the operation. When using voicemail with the operator and review options enabled, pressing 0 to enter the menu, followed by 1 to save the message, followed by any other DTMF press to delete the message, will result in the temporary file lingering on the file system. This patch properly calls DISPOSE after the DELETE. This causes the local file to be disposed of. ASTERISK-24288 #close Reported by: LEI FU patches: voicemail_odbc_review_fix.diff uploaded by LEI FU (License 6640) ........ Merged revisions 430795 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-19 18:05 +0000 [r430776] Mark Michelson * main/pbx.c: Call extension state callbacks at hint creation. When a hint gets created, any subsequent device or presence state changes result in extension status events getting sent out to interested parties. However, at the time of hint creation, no such event gets sent out, so watchers of extension state are potentially left in the dark until the first state change after hint creation. Patch contributed by John Hardin (License #6512) 2015-01-19 13:18 +0000 [r430755] Joshua Colp * res/res_pjsip_multihomed.c, res/res_pjsip.c: res_pjsip / res_pjsip_multihomed: Use the correct transport and addressing information on UAS sessions. The first thing this patch fixes is UAS dialogs. Previously if a transport was configured on an endpoint and an inbound session was created there was no guarantee that requests sent on the dialog would use the correct transport and address information. This has now been fixed so an explicitly configured transport is taken into account. The second thing this patch fixes is res_pjsip_multihomed. The res_pjsip_multihomed module attempts to determine what transport a message should go out on and what addressing information should go into the message itself. In a scenario where multiple transports exist bound to the same IP address but a different port the code would incorrectly alter the transport and change the message to the wrong transport. This change makes the res_pjsip_multihomed module smarter so it will only change the transport and address information in the message when it is possible and makes sense. ASTERISK-24615 #close Reported by: David Justl Review: https://reviewboard.asterisk.org/r/4331/ 2015-01-17 00:31 +0000 [r430734] Kevin Harwell * res/res_pjsip/config_transport.c, res/res_pjsip/pjsip_outbound_auth.c, res/res_pjsip/config_auth.c, main/stasis_message_router.c, res/res_pjsip/location.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip/pjsip_global_headers.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c: REVERTING res_pjsip: make it unloadable Due to the original patch causing memory corruptions the patch is being removed until the problem can be resolved. 2015-01-16 22:13 +0000 [r430709-430716] Mark Michelson * CHANGES: Change PJProject version requirement for ca_list_path transport option in CHANGES file. * channels/chan_pjsip.c, res/res_pjsip_session.c: Fix problem where a hung channel could occur on a failed blind transfer. Different clients react differently to being told that a blind transfer has failed. Some will simply send a BYE and be done with it. Others will attempt to reinvite themselves back onto the call. In the latter case, we were creating a new channel and then leaving it to sit forever doing nothing. With this code change, that new channel will not be created and the dialog with the transferring channel will be cleaned up properly. ASTERISK-24624 #close Reported by Zane Conkle Review: https://reviewboard.asterisk.org/r/4339 * include/asterisk/res_pjsip.h, configure, include/asterisk/autoconfig.h.in, configure.ac, configs/samples/pjsip.conf.sample, CHANGES, res/res_pjsip.c, res/res_pjsip/config_transport.c: Add support for the ca_list_path option for PJSIP transports. This allows for a path to be specified that has a collection of CA certificates in it. ASTERISK-24575 #close Reported by cloos Patches: pj-ca-path-trunk.diff uploaded by cloos (License #5956) Review: https://reviewboard.asterisk.org/r/4344 2015-01-15 17:35 +0000 [r430685-430687] Richard Mudgett * res/res_fax_spandsp.c, res/res_fax.c: res_fax.c, res_fax_spandsp.c: Remove redundant locking. When FAX was developed, apparently the faxregistry.container used to be a linked list that was converted to an ao2 container. Some of the replacement ao2 container operations still had explicit lock/unlocks around them. Three off nominal code paths in res_fax.c and res_fax_spandsp.c unlock the channel even though the routine did not lock the channel and other code paths in the routine do not unlock the channel. Review: https://reviewboard.asterisk.org/r/4340/ * res/res_fax_spandsp.c, res/res_fax.c: res_fax.c, res_fax_spandsp.c: Fix some curlies on the end of function definitions. 2015-01-15 12:09 +0000 [r430664] Joshua Colp * res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Fix race condition when reloading and listing registrations. Due to the split of outbound registration state from configuration it is possible during a reload for a "pjsip show registrations" CLI command to be executed which gets an older snapshot of the configuration. This configuration may include outbound registrations which have been removed due to a reload operation occurring at the same time. The code for printing the outbound registration did not take this into account but now it does. AST-1506 #close Review: https://reviewboard.asterisk.org/r/4338/ 2015-01-15 02:18 +0000 [r430646] Matthew Jordan * configure, configure.ac: configure: If cross-compiling, assume we have working semaphores The Asterisk 13 configure.ac checks for HAS_WORKING_SEMAPHORE but does not have an option for cross-compiling so it fails with an exit. Since we're cross- compiling, we can't exactly go looking for the header. The semaphore.h header is relatively common: * It's part of the POSIX standard * It's part of GNU C Library As such, we assume that it will be present when cross-compiling. As such, this patch defaults "HAS_WORKING_SEMAPHORE" to "1" if cross-compiling is detected. If you're cross-compiling to a platform that doesn't support this, then make sure you re-define this to 0. ASTERISK-24663 #close Reported by: abelbeck patches: asterisk-13-anonymous-semaphores.patch uploaded by abelbeck (License 5903) 2015-01-14 23:14 +0000 [r430628] Kevin Harwell * res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip/pjsip_global_headers.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c, res/res_pjsip/config_transport.c, res/res_pjsip/pjsip_outbound_auth.c, res/res_pjsip/config_auth.c, main/stasis_message_router.c, res/res_pjsip/location.c: res_pjsip: make it unloadable The res_pjsip module was previously unloadable. With this patch it can now be unloaded. This patch is based off the original patch on the issue (listed below) by Corey Farrell with a few modifications. Namely, removed a few changes not required to make the module unloadable and also fixed a bug that would cause asterisk to crash on unloading. This patch is the first step (should hopefully be followed by another/others at some point) in allowing res_pjsip and the modules that depend on it to be unloadable. At this time, res_pjsip and some of the modules that depend on res_pjsip cannot be unloaded without causing problems of some sort. The goal of this patch is to get res_pjsip and only res_pjsip to be able to unload successfully and/or shutdown without incident (crashes, leaks, etc...). Other dependent modules may still cause problems on unload. Basically made sure, with the patch applied, that res_pjsip (with no other dependent modules loaded) could be succesfully unloaded and Asterisk could shutdown without any leaks or crashes that pertained directly to res_pjsip. ASTERISK-24485 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4311/ patches: pjsip_unload-broken-r1.patch submitted by Corey Farrell (license 5909) 2015-01-14 20:27 +0000 [r430608] Mark Michelson * res/res_pjsip_outbound_publish.c: Prevent slow graceful shutdown when outbound publications never started. The code was missing the case for explicitly destroying an outbound publication when Asterisk had never actually published anything. The result was that Asterisk would hang for a while on a graceful shutdown. With this change, the case is taken into account, and on a graceful shutdown, these publications are destroyed without the need to actually send a PUBLISH request. ASTERISK-24655 #close Reported by Kevin Harwell Review: https://reviewboard.asterisk.org/r/4325 2015-01-14 15:39 +0000 [r430590] Matthew Jordan * build_tools/mkpkgconfig, /: build_tools/mkpkgconfig: Fix Cflags concatenation error in asterisk.pc The mkpkgconfig script incorrectly concatenates Cflags options together. As an example, the following: Cflags: -I/usr/include/libxml2 -g3 Is instead generated as: Cflags: -I/usr/include/libxml2-g3 This patch corrects the generation of Cflags in mkpkgconfig such that the Cflags options are output correctly. Review: https://reviewboard.asterisk.org/r/3707/ ASTERISK-23991 #close Reported by: Diederik de Groot patches: fix_mkpkgconfig.diff uploaded by Diederik de Groot (License 6600) ........ Merged revisions 430589 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-13 18:16 +0000 [r430565] Richard Mudgett * apps/app_macro.c, /: app_macro: Don't restore the calling location on a channel redirect. v11: If a channel redirect to a macro exten of a macro that is active happens, the redirect location doesn't get executed. Instead the original macro location is restored and gets reexecuted. v13: An additional effect happens if a parked call times out to an extension in the macro that parked the call then the macro is reexecuted instead of the expected park return location. * Made not restore the macro calling location on an AST_SOFTHANGUP_ASYNCGOTO. * Increased the locked channel range when setting up the macro execution environment to cover things that should be done while the channel is locked. * Removed unnecessary NULL tests before calling ast_free() in _macro_exec(). ASTERISK-23850 #close Reported by: Andrew Nagy Review: https://reviewboard.asterisk.org/r/4292/ ........ Merged revisions 430564 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-13 12:06 +0000 [r430546] Joshua Colp * channels/pjsip/dialplan_functions.c, configure, include/asterisk/autoconfig.h.in, configure.ac: chan_pjsip: Add configure check for 'pjsip_get_dest_info' function. The 'pjsip_get_dest_info' function is used to determine if the signaling transport of the dialog is secure or not. This function was added in PJSIP 2.3 and does not exist in earlier versions. This configure check allows Asterisk to build and run with older versions at the loss of the 'secure' argument for the PJSIP CHANNEL dialplan function. Usage of this argument will require upgrading to PJSIP 2.3. ASTERISK-24665 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4329/ 2015-01-12 18:34 +0000 [r430528] Richard Mudgett * include/asterisk/manager.h, main/manager.c: AMI: Revert non-backwards compatible changes from earlier commit. * Reverted the change to astman_send_listack() to not use the listflag parameter and always set the value to "Start" so the start capitalization is consistent. Unfortunately changing the case of a returned value is not a backward compatible change so for now FAXSessions is going to have to remain inconsistent with all of the other AMI list actions. * Reverted the minor protocol error fix in action_getconfig() when no requested categories are found. Each line needs to be formatted as "Header: text". Caught by the testsuite. ASTERISK-24049 2015-01-12 18:28 +0000 [r430488-430526] Matthew Jordan * configs/samples/features.conf.sample: configs/samples/features.conf.sample: Document attended transfer DTMF options The sample config was missing the configuration options for DTMF attended transfer completion scenarios. The configuration options 'atxferabort', 'atxfercomplete', 'atxferthreeway', and 'atxferswap' are now documented in the appropriate configuration file. ASTERISK-24678 #close Reported by: Niklas Larsson patches: features.conf.sample.diff uploaded by Niklas Larsson (License 5068) * main/syslog.c, include/asterisk/syslog.h, /: main/syslog: Allow dynamic logs, such as security events, to log to the syslog The security event log uses a dynamic log level (SECURITY) that is registered with the Asterisk logging core. Unfortunately, the syslog would ignore log statements that had a dynamic log level associated with them. Because the syslog cannot handle ad hoc dynamic log levels, this patch treats any dynamic log entries sent to the syslog as logs with a level of NOTICE. ASTERISK-20744 #close Reported by: Michael Keuter Tested by: Michael L. Young, Jacek Konieczny patches: asterisk-20744-syslog-dynamic-logging_trunk.diff uploaded by Michael L. Young (license 5026) ........ Merged revisions 430506 from http://svn.asterisk.org/svn/asterisk/branches/11 * funcs/func_curl.c, /: funcs/func_curl: Fix memory leak when CURLOPT channel datastore is destroyed When the channel datastore associated with the usage of CURLOPT on a specific channel is freed, the underlying structure holding the list of options is not disposed of. This patch properly frees the structure in the datastore .destroy callback. ASTERISK-24672 #close Reported by: Kristian Hogh patches: func_curl-memory-leak.diff uploaded by Kristian Hogh (License 6639) ........ Merged revisions 430487 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-09 22:08 +0000 [r430467-430469] Scott Griepentrog * contrib/scripts/sip_to_pjsip/sip_to_pjsip.py, contrib/scripts/sip_to_pjsip/astconfigparser.py: sip_to_pjsip: improve ability to parse input files General improvements to SIP to PJSIP conversion utility: 1) track default section of input file to allow parsing an include file that doesn't specify a [section] 2) informatively handle case of assignment without [section] 3) correctly handle getting sections from included files - [section]'s are inherited by included file 4) provide null string as default transport bind ip 5) gracefully handle missing portions of registration string 6) denote steps of operation during conversion and confirm top level files as a convenience ASTERISK-24474 #close Review: https://reviewboard.asterisk.org/r/4280/ Reported by: John Kiniston * main/features.c: app_bridge: return to the next dialplan priority When app_bridge grabs a channel and puts it into a bridge, the channel should then continue where it left off in the dialplan after the bridge has ended. Although it stores the current dialplan location as an after bridge goto on the channel, it was executing the same priority again instead of going to the next priority. By swapping the "specific" version of bridge_set_after_goto with bridge_set_after_go_on, the next priority in the dialplan is executed instead. ASTERISK-24637 #close Review: https://reviewboard.asterisk.org/r/4322/ Reported by: John Bigelow 2015-01-09 17:54 +0000 [r430434] Richard Mudgett * UPGRADE.txt, res/res_mwi_external_ami.c, CHANGES, include/asterisk/manager.h, channels/chan_iax2.c, apps/app_queue.c, apps/app_agent_pool.c, res/res_manager_devicestate.c, main/manager_bridges.c, channels/chan_dahdi.c, main/manager.c, channels/chan_skinny.c, res/res_pjsip_outbound_registration.c, res/res_manager_presencestate.c, res/res_pjsip/pjsip_configuration.c, apps/app_confbridge.c, res/res_pjsip_pubsub.c, main/db.c, res/parking/parking_manager.c, res/res_pjsip_registrar.c, apps/app_voicemail.c, main/pbx.c, channels/chan_sip.c, apps/app_meetme.c, main/bridge.c, res/res_fax.c: AMI: Make AMI actions that generate event lists consistent. * Made the following AMI actions use list API calls for consistency: Agents BridgeInfo BridgeList BridgeTechnologyList ConfbridgeLIst ConfbridgeLIstRooms CoreShowChannels DAHDIShowChannels DBGet DeviceStateList ExtensionStateList FAXSessions Hangup IAXpeerlist IAXpeers IAXregistry MeetmeList MeetmeListRooms MWIGet ParkedCalls Parkinglots PJSIPShowEndpoint PJSIPShowEndpoints PJSIPShowRegistrationsInbound PJSIPShowRegistrationsOutbound PJSIPShowResourceLists PJSIPShowSubscriptionsInbound PJSIPShowSubscriptionsOutbound PresenceStateList PRIShowSpans QueueStatus QueueSummary ShowDialPlan SIPpeers SIPpeerstatus SIPshowregistry SKINNYdevices SKINNYlines Status VoicemailUsersList * Incremented the AMI version to 2.7.0. * Changed astman_send_listack() to not use the listflag parameter and always set the value to "Start" so the start capitalization is consistent. i.e., The FAXSessions used "Start" while the rest of the system used "start". The corresponding complete event always used "Complete". * Fixed ami_show_resource_lists() "PJSIPShowResourceLists" to output the AMI ActionID for all of its list events. * Fixed off-nominal AMI protocol error in manager_bridge_info(), manager_parking_status_single_lot(), and manager_parking_status_all_lots(). Use of astman_send_error() after responding to the original AMI action request violates the action response pattern by sending two responses. * Fixed minor protocol error in action_getconfig() when no requested categories are found. Each line needs to be formatted as "Header: text". * Fixed off-nominal memory leak in manager_build_parked_call_string(). * Eliminated unnecessary use of RAII_VAR() in ami_subscription_detail(). ASTERISK-24049 #close Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/4315/ 2015-01-09 14:51 +0000 [r430416] Kinsey Moore * /, res/res_fax.c, include/asterisk/res_fax.h, configs/samples/res_fax.conf.sample, CHANGES: res_fax: Add T.38 negotiation timeout option This change makes the T.38 negotiation timeout configurable via 't38timeout' in res_fax.conf or FAXOPT(t38timeout). It was previously hard coded to be 5000 milliseconds. This change also handles T.38 switch failures by aborting the fax since in the case where this can happen, both sides have agreed to switch to T.38 and Asterisk is unable to do so. Review: https://reviewboard.asterisk.org/r/4320/ ........ Merged revisions 430415 from http://svn.asterisk.org/svn/asterisk/branches/11 2015-01-08 21:40 +0000 [r430373-430397] George Joseph * res/res_pjsip_pubsub.c: res_pjsip_pubsub: Fix persistent subscriptions not surviving graceful shutdown If you do a 'core (shutdown|restart) graceful' persistent subscriptions won't survive. If you do a 'core (shutdown|restart) now' or asterisk terminates for some reason, they do. Here's why... When asterisk shuts down gracefully, it sends a 'NOTIFY/terminated' to subscribers for each subscription. This not only tells the subscribers that the dialog/state machine is done, it also frees the last reference to the subscription tree which causes the persistent subscription to get deleted from astdb. When asterisk restarts, nothing's left. Just preventing the delete from astdb doesn't work because we already told the subscriber to terminate the dialog so we can't restart it even if it was still in astdb. Everything works OK if asterisk terminates unexpectedly because we never send the 'terminated' message so on restart, the subscription is still in astdb and the subscriber is none the wiser. This patch suppresses the sending of 'NOTIFY/terminated' on shutdown for persistent connections. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4318/ * res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Fix reference leak. Every time a registration started, sip_outbound_registration_response_cb bumps the ref count on client_state then pushes a handle_registration_response task. handle_registration_response never unreffed it though. So every time a registration goes out, the ref count goes up by one. This patch adds the unreffs to handle_registration_response. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4303/ * res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Fix several reload issues There are 2 issues with reloading registrations... 1. The 'can_reuse_registration' test wasn't considering the intervals or expiration in its determination of whether a registration changed or not so if you changed any of the intervals or the expiration and reloaded, the object would get reloaded but the actual timers wouldn't change. can_reuse_registration now does a sorcery diff on the old and new objects instead of discretely testing certain fields. Now if you change expiration for instance, and reload, the timer is updated and re-registration will occur on the new value. 2. If you mung up your password on an outbound registration you get a permanent failure. If you fix the password (on the outbound_auth object) and reload, nothing tells outbound_registration to try again because the registration itself didn't change. This patch adds an observer on the "auth" object type and if any auth changes, existing registration states are searched and those in a REJECTED_PERMANENT state are retried. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4304/ 2015-01-07 21:25 +0000 [r430355] Kinsey Moore * res/res_stasis.c: ARI: Allow usage of ASYNCGOTO with Stasis() When the AMI Redirect action is used with a channel bridged inside Stasis() and not running a pbx, the channel is hung up instead of proceeding to the desired location in dialplan. This change allows such channels to be Redirected properly by detecting the operation used by Redirect (ASYNCGOTO) and using the code already established for functionality of the ARI channel continue operation. ASTERISK-24591 #close Review: https://reviewboard.asterisk.org/r/4271/ 2015-01-07 18:53 +0000 [r430337] Mark Michelson * rest-api/api-docs/channels.json, rest-api/resources.json, res/ari/resource_channels.c, CHANGES, res/res_ari_channels.c, res/ari/resource_channels.h: Add the ability to continue and originate using priority labels. With this patch, the following two ARI commands POST /channels POST /channels/{id}/continue Accept a new parameter, label, that can be used to continue to or originate to a priority label in the dialplan. Because this is adding a new parameter to ARI commands, the API version of ARI has been bumped from 1.6.0 to 1.7.0. This patch comes courtesy of Nir Simionovich from Greenfield Tech. Thanks! ASTERISK-24412 #close Reported by Nir Simionovich Review: https://reviewboard.asterisk.org/r/4285 2015-01-07 18:17 +0000 [r430315-430319] George Joseph * res/res_pjsip_exten_state.c: res_pjsip_exten_state: Change 'does not exist' warning to notice The 'new_subscribe: Extension <> does not exist or has no associated hint' is a config issue and doesn't need to clutter up logs with warnings. Changed to notice. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4307/ * res/res_pjsip_mwi.c: res_pjsip_mwi: Change "MWI Subscription failed" message from warning to notice The "MWI Subscription failed" message means the client is trying to subscribe to a mailbox that doesn't exist. There's no need to clutter up logs with warnings for a client misconfiguration so I changed it to a notice. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4306/ * funcs/func_config.c, tests/test_config.c: func_config: Add ability to retrieve specific occurrence of a variable I guess nobody uses templates with AST_CONFIG because today if you have a context that inherits from a template and you call AST_CONFIG on the context, you'll get the value from the template even if you've overridden it in the context. This is because AST_CONFIG only gets the first occurrence which is always from the template. This patch adds an optional 'index' parameter to AST_CONFIG which lets you specify the exact occurrence to retrieve, or '-1' to retrieve the last. The default behavior is the current behavior. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4313/ 2015-01-07 17:35 +0000 [r430313] Mark Michelson * res/res_pjsip_refer.c: Fix ability to perform a remote attended transfer with PJSIP. This fix has two parts: * Corrected an error message to properly state that external_replaces is an extension. The error message also prints what dialplan context the external_replaces extension was being looked for in. * Corrected the printing of the Replaces: header in an INVITE request. We were duplicating "Replaces: " in the header. ASTERISK-24376 #close Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/4296 2015-01-07 16:55 +0000 [r430295] George Joseph * include/asterisk/config.h, main/config.c, main/manager.c: config: Add option to NOT preserve effective context when changing a template Let's say you have a template T with variable VAR1 = ON and you have a context C(T) that doesn't specify VAR1. If you read C, the effective value of VAR1 is ON. Now you change T VAR1 to OFF and call ast_config_text_file_save. The current behavior is that the file gets re-written with T/VAR1=OFF but C/VAR1=ON is added. Personally, I think this is a bug. It's preserving the effective state of C even though I didn't specify C/VAR1 in th first place. I believe the behavior should be that if I didn't specify C/VAR1 originally, then the effective value of C/VAR1 should continue to follow the inherited state. Now, if I DID explicitly specify C/VAR1, the it should be preserved even if the template changes. Even though I think the existing behavior is a bug, it's been that way forever so I'm not changing it. Instead, I've created ast_config_text_file_save2() that takes a bitmask of flags, one of which is to preserve the effective context (the current behavior). The original ast_config_text_file_save calls *2 with the preserve flag. If you want the new behavior, call *2 directly without a flag. I've also updated Manager UpdateConfig with a new parameter 'PreserveEffectiveContext' whose default is 'yes'. If you want the new behavior with UpdateConfig, set 'PreserveEffectiveContext: no'. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4297/ 2015-01-07 02:52 +0000 [r430274] Kinsey Moore * res/res_pjsip/pjsip_options.c, res/res_pjsip.c, main/rtp_engine.c: Fix dev-mode build on recent gcc 2015-01-06 22:46 +0000 [r430252] Matthew Jordan * contrib/ast-db-manage/config/versions/371a3bf4143e_add_user_eq_phone_option_to_pjsip.py: contrib/ast-db-manage: Correct down_revision path for user_eq_phone When the user_eq_phone patch was backported to 13, it referenced the downward revision that the PJSIP optimistic encryption option also references. This creates a multi-path upgrade Exception when generating the SQL files. This patch corrects this in the 13 branch. Note that trunk, which already contained both of these features, is unaffected by this problem. 2015-01-06 17:52 +0000 [r430221-430227] George Joseph * res/res_pjsip_mwi.c: res_pjsip_mwi: Change warning to notice When res_pjsip loads and an endpoint auto-subscribes a mailbox for mwi, if a contact hasn't registered yet, res_pjsip_mwi spits out a warning. This is a perfectly normal situation though and doesn't require something as serious as a warning. It's also self correcting. The device will start getting mwi as soon as it registers. This patch changes the warning to a notice. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4314/ * bridges/bridge_native_rtp.c: bridge_native_rtp: Change local/remote message from debug/2 to verb/4 Change the "Locally bridged"/"Remotely bridged" messages from dbg/2 to verb/4. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4300/ * res/res_pjsip_outbound_registration.c, CHANGES: outbound_registration: Add 'pjsip send register' and update 'send unregister' The current behavior of 'pjsip send unregister' is to send the unregister (REGISTER with 0 exp) but let the next scheduled register proceed normally. I don't think that's a good idea. If you unregister, it should stay unregistered until you decide to start registrations again. So this patch just adds a cancel_registration call to the current unregister_task to cancel the timer. Of course, now you need a way to start registration again so I've added a 'pjsip send register' command that unregisters and cancels any existing registration (the same as send unregister), then sends an immediate registration and starts the timer back up again. Both changes also ripple to AMI. There's a new PJSIPRegister command. There's no harm in calling either command repeatedly. They don't care about the actual state. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4301/ * res/res_pjsip/location.c: pjsip cli: Fix sorting of contacts for 'pjsip list contacts' For some reason I was using a hash container instead of a list to gather the contacts for 'pjsip list/show contacts' so even though I had a sort function, the output wasn't sorted. This patch just changes the hash container to a list container and the contacts now appear sorted in the CLI. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4305/ 2015-01-05 22:49 +0000 [r430200] Scott Griepentrog * /, main/bridge_basic.c: bridge: avoid leaking channel during blond transfer pt2 A blond transfer to a failed destination, when followed by a recall attempt, lead to a leak of the reference to the destination channel. In addition to correcting the regression on the previous attempt (r429826) this fixes the leak and two additional reference leaks on failures of bridge_import. ASTERISK-24513 #close Review: https://reviewboard.asterisk.org/r/4302/ ........ Merged revisions 430199 from http://svn.asterisk.org/svn/asterisk/branches/12 2015-01-05 17:56 +0000 [r430179-430181] Joshua Colp * CHANGES: pjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file. * funcs/func_pjsip_contact.c (added), res/res_pjsip_session.c, include/asterisk/res_pjsip.h, channels/pjsip/dialplan_functions.c, include/asterisk/res_pjsip_session.h, funcs/func_pjsip_aor.c (added), res/res_pjsip/location.c: pjsip: Add 'PJSIP_AOR' and 'PJSIP_CONTACT' dialplan functions. The PJSIP_AOR dialplan function allows inspection of configured AORs including what contacts are currently bound to them. The PJSIP_CONTACT dialplan function allows inspection of contacts in existence. These can include both externally added (by way of registration) or permanent ones. ASTERISK-24341 Reported by: xrobau Review: https://reviewboard.asterisk.org/r/4308/ 2014-12-29 13:10 +0000 [r430145] Kinsey Moore * res/res_pjsip.c: PJSIP: Update transport method documentation This updates the documentation for the 'method' configuration option to be more verbose about the behaviors of values 'unspecified' and 'default'. They do exactly the same thing which is to select the default as defined by PJSIP which is currently TLSv1. Review: https://reviewboard.asterisk.org/r/4264/ 2014-12-24 21:27 +0000 [r430127] Kevin Harwell * /, configs/samples/queues.conf.sample: app_queue: Update sample conf documenation Updated the queues.conf.sample file to explicitly state which channel queue variables are propagated to. ASTERISK-24267 Reported by: Mitch Claborn ........ Merged revisions 430126 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-24 15:26 +0000 [r430083-430092] Matthew Jordan * res/res_pjsip.c, contrib/ast-db-manage/config/versions/371a3bf4143e_add_user_eq_phone_option_to_pjsip.py (added): res_pjsip: Backport missing commits for user_eq_phone This backports the following from trunk, which were missed: r427257 | file | 2014-11-04 16:31:16 -0600 (Tue, 04 Nov 2014) | 2 lines res_pjsip: Allow + at the beginning of a phone number when user_eq_phone is enabled. r427259 | file | 2014-11-04 16:51:32 -0600 (Tue, 04 Nov 2014) | 2 lines res_pjsip: Apply the 'user_eq_phone' setting to the To header as well. It also adds the Alembic script for the option. ASTERISK-24643 * CHANGES, res/res_pjsip.c, include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip_keepalive.c (added), configs/samples/pjsip.conf.sample: res_pjsip_keepalive: Add runtime configurable keepalive module for connection-oriented transports. Note that this is backport from trunk of r425825. This change adds a module which is configurable using the keep_alive_interval setting in the global section that will send a CRLF keep alive to all active connection-oriented transports at the provided interval. This is useful because it can help keep connections open through NATs. This functionality also exists within PJSIP but can not be controlled at runtime and requires recompiling it. Review: https://reviewboard.asterisk.org/r/4084/ ASTERISK-24644 #close * res/res_pjsip/pjsip_configuration.c, res/res_pjsip_caller_id.c, CHANGES, res/res_pjsip.c, include/asterisk/res_pjsip.h: res_pjsip: Add 'user_eq_phone' option to add a 'user=phone' parameter when applicable. Note that this is a backport of r425804 from trunk. This change adds a configuration option which adds a 'user=phone' parameter if the user portion of the request URI or the From URI is determined to be a number. Review: https://reviewboard.asterisk.org/r/4073/ ASTERISK-24643 #close 2014-12-23 23:18 +0000 [r430059-430064] George Joseph * res/res_pjsip/pjsip_options.c: pjsip_options: Fix continued qualifies after endpoint/aor deletion If you remove an endpoint/aor from pjsip.conf then do a core reload, qualifies will continue even though the object are gone. This happens because nothing clears out the qualify tasks. This patch unschedules all existing qualify tasks before scheduling new ones on reload. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4290/ * tests/test_astobj2.c: test_astobj2: Fix warning for missing trailing slash in category This patch adds a trailing slash to the category for this test. No more warning. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4295/ 2014-12-22 21:18 +0000 [r430010-430034] Richard Mudgett * main/bridge_basic.c: DTMF atxfer: Setup recall channels as if the transferee initiated the call. After the initial DTMF atxfer call attempt to the transfer target fails to answer during a blonde transfer, the recall callback channels do not get setup with information from the initial transferrer channel. As a result, the recall callback to the transferrer does not have callid, channel variables, datastores, accountcode, peeraccount, COLP, and CLID setup. A similar situation happens with the recall callback to the transfer target but it is less visible. The recall callback to the transfer target does not have callid, channel variables, datastores, accountcode, peeraccount, and COLP setup. * Added missing information to the recall callback channels before initiating the call. callid, channel variables, datastores, accountcode, peeraccount, COLP, and CLID * Set callid of the transferrer channel on the DTMF atxfer controller thread attended_transfer_monitor_thread(). * Added missing channel unlocks and props unref to off nominal paths in attended_transfer_properties_alloc(). ASTERISK-23841 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4259/ * /, main/logger.c, include/asterisk/_private.h, main/asterisk.c: queue_log: Post QUEUESTART entry when Asterisk fully boots. The QUEUESTART log entry has historically acted like a fully booted event for the queue_log file. When the QUEUESTART entry was posted to the log was broken by the change made by ASTERISK-15863. * Made post the QUEUESTART queue_log entry when Asterisk fully boots. This restores the intent of that log entry and happens after realtime has had a chance to load. AST-1444 #close Reported by: Denis Martinez Review: https://reviewboard.asterisk.org/r/4282/ ........ Merged revisions 430009 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-22 15:40 +0000 [r429983] Matthew Jordan * /, channels/chan_sip.c: chan_sip: Send CANCEL via original INVITE destination even after UPDATE request Given the following scenario: * Three SIP phones (A, B, C), all communicating via a proxy with Asterisk * A call is established between A and B. B performs a SIP attended transfer of A to C. B sets the call on hold (A is hearing MOH) and dials the extension of C. While phone C is ringing, B transfers the call (that is, what we typically call a 'blond transfer'). * When the transfer completes, A hears the ringing of phone C, while B is idle. In the SIP messaging for the above scenario, a REFER request is sent to transfer the call. When "sendrpid=yes" is set in sip.conf, Asterisk may send an UPDATE request to phone C to update party information. This update is sent directly to phone C, not through the intervening proxy. This has the unfortunate side effect of providing route information, which is then set on the sip_pvt structure for C. If someone (e.g. B) is trying to get the call back (through a directed pickup), Asterisk will send a CANCEL request to C. However, since we have now updated the route set, the CANCEL request will be sent directly to C and not through the proxy. The phone ignores this CANCEL according to RFC3261 (Section 9.1). This patch updates reqprep such that the route is not updated if an UPDATE request is being sent while the INVITE state is INV_PROCEEDING or INV_EARLY_MEDIA. This ensures that a subsequent CANCEL request is still sent to the correct location. Review: https://reviewboard.asterisk.org/r/4279 ASTERISK-24628 #close Reported by: Karsten Wemheuer patches: issue.patch uploaded by Karsten Wemheuer (License 5930) ........ Merged revisions 429982 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-22 00:17 +0000 [r429914] George Joseph * res/res_pjsip_phoneprov_provider.c: res_pjsip_phoneprovi_provider: Fix reload Reloading wasn't working correctly because on a reload, the sorcery apply handler was never being called for unchanged users. So, instead of using an apply handler, I'm now iterating over all users. Works much more reliably. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4288/ 2014-12-20 20:57 +0000 [r429894] Joshua Colp * main/named_acl.c, /: acl: Fix reloading of configuration if configuration file does not exist at startup. The named ACL code incorrectly destroyed the config options information if loading of the configuration file failed at startup. This would result in reloading also failing even if a valid configuration file was put in place. ASTERISK-23733 #close Reported by: Richard Kenner ........ Merged revisions 429893 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-19 20:54 +0000 [r429829-429868] Richard Mudgett * /, res/res_http_websocket.c: res_http_websocket.c: Fix incorrect use of sizeof in ast_websocket_write(). This won't fix the reported issue but it is an incorrect use of sizeof. ASTERISK-24566 Reported by: Badalian Vyacheslav ........ Merged revisions 429867 from http://svn.asterisk.org/svn/asterisk/branches/11 * channels/chan_dahdi.c, /: chan_dahdi: Don't ignore setvar when using configuration section scheme. When the configuration section scheme of chan_dahdi.conf is used (keyword dahdichan instead of channel) all setvar= options are completely ignored. No variable defined this way appears in the created DAHDI channels. * Move the clearing of setvar values to after the deferred processing of dahdichan. AST-1378 #close Reported by: Guenther Kelleter Patch by: Guenther Kelleter ........ Merged revisions 429825 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-19 17:26 +0000 [r429827] Scott Griepentrog * /, main/bridge_basic.c: bridge: avoid leaking channel during blond transfer After a blond transfer (start attended and hang up) to a destination that also hangs up without answer, the Local;1 channel was leaked and would show up on core show channels. This was happening because the attended state blond_nonfinal_enter() resetting the props->transfer_target to null while releasing it's own reference, which would later prevent props from releasing another reference during destruction. The change made here is simply to not assign the target to NULL. ASTERISK-24513 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4262/ ........ Merged revisions 429826 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-18 22:38 +0000 [r429784-429805] Richard Mudgett * res/res_rtp_asterisk.c, channels/chan_dahdi.c, /: chan_dahdi.c, res_rtp_asterisk.c: Change some spammy debug messages to level 5. ASTERISK-24337 #close Reported by: Rusty Newton ........ Merged revisions 429804 from http://svn.asterisk.org/svn/asterisk/branches/11 * UPGRADE.txt, channels/sig_analog.c, /: chan_dahdi: Populate CALLERID(ani2) for incoming calls in featdmf signaling mode. For the featdmf signaling mode the incoming MF Caller-ID information is formatted as follows: *${CALLERID(ani2)}${CALLERID(ani)}#*${EXTEN}# Rather than discarding the ani2 digits, populate the CALLERID(ani2) value with what is received instead. AST-1368 #close Reported by: Denis Martinez Patches: extract_ani2_for_featdmf_v11.patch (license #5621) patch uploaded by Richard Mudgett ........ Merged revisions 429783 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-18 15:50 +0000 [r429763] Kevin Harwell * res/res_pjsip_sdp_rtp.c: res_pjsip_sdp_rtp: wrong bridge chosen when the DTMF mode is not compatible A native rtp bridge was being chosen (it shouldn't have been) when using two pjsip channels with incompatible DTMF modes. This patch sets the rtp instance property, AST_RTP_PROPERTY_DTMF, for the appropriate DTMF mode(s) for pjsip. It was not being set before, meaning all DTMF modes for pjsip were being treated as compatible, thus native bridging would be chosen as the bridge type when it shouldn't have been. ASTERISK-24459 #close Reported by: Yaniv Simhi Review: https://reviewboard.asterisk.org/r/4265/ 2014-12-18 15:34 +0000 [r429739-429761] Mark Michelson * res/res_pjsip_outbound_registration.c: Prevent potential infinite outbound authentication loops in registration. Prior to this patch, Asterisk would always respond to 401 responses to registration attempts by trying to provide a registration with authentication credentials. Even if subsequent attempts were rejected with 401 responses, Asterisk would continue this behavior. If authentication credentials were incorrect, this could continue forever. With this patch, we keep track of whether we have attempted authentication on an outbound registration attempt. If we already have, we don not try again until the next attempt. This prevents the infinite loop scenario. Review: https://reviewboard.asterisk.org/r/4273 * main/manager.c: Prevent possible race condition on dual redirect of channels in the same bridge. The AST_FLAG_BRIDGE_DUAL_REDIRECT_WAIT flag was created to prevent bridges from prematurely acting on orphaned channels in bridges. The problem with the AMI redirect action was that it was setting this flag on channels based on the presence of a PBX, not whether the channel was in a bridge. Whether a channel has a PBX is irrelevant, so the condition has been altered to check if the channel is in a bridge. ASTERISK-24536 #close Reported by Niklas Larsson Review: https://reviewboard.asterisk.org/r/4268 * channels/pjsip/dialplan_functions.c: Ensure the correct value is returned for CHANNEL(pjsip, secure) Prior to this patch, we were using the PJSIP dialog's secure flag to determine if a secure transport was being used. Unfortunately, the dialog's secure flag was only set if a SIPS URI were in use, as required by RFC 3261 sections 12.1.1 and 12.1.2. What we're interested in is not dialog security, but transport security. This code change switches to a model where we use the dialog's target URI to determine what transport would be used to communicate, and then check if that transport is secure. AST-1450 #close Reported by John Bigelow Review: https://reviewboard.asterisk.org/r/4277 2014-12-18 00:10 +0000 [r429699-429719] George Joseph * res/res_pjsip_config_wizard.c: res_pjsip_config_wizard: fix unload SEGV If certain pjsip modules aren't loaded, the wizard causes a SEGV when it unloads. Added a check for the presense of the object type wizard before trying to clean it up. Tested-by: George Joseph * res/res_pjsip_config_wizard.c: res_pjsip_config_wizard: Change FILEUNCHANGED config_load2 flag determination The module now applies the FILEUNCHANGED flag when both reloaded is specified AND there's no last_config for the object type. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4276/ 2014-12-17 09:54 +0000 [r429675] Walter Doekes * addons/ooh323c/src/printHandler.c, apps/app_adsiprog.c, channels/chan_unistim.c, main/udptl.c, res/res_rtp_asterisk.c, /, channels/chan_sip.c, channels/vcodecs.c, res/res_crypto.c, utils/astman.c, utils/smsq.c, main/utils.c, pbx/dundi-parser.c, apps/app_getcpeid.c, channels/chan_iax2.c, channels/sig_pri.c, res/res_pktccops.c, main/loader.c, channels/iax2/parser.c, main/uuid.c, main/manager.c, channels/chan_misdn.c, apps/app_osplookup.c, channels/misdn/ie.c, main/http.c, apps/app_sms.c: Fix printf problems with high ascii characters after r413586 (1.8). In r413586 (1.8) various casts were added to silence gcc 4.10 warnings. Those fixes included things like: -out += sprintf(out, "%%%02X", (unsigned char) *ptr); +out += sprintf(out, "%%%02X", (unsigned) *ptr); That works for low ascii characters, but for the high range that yields e.g. FFFFFFC3 when C3 is expected. This changeset: - fixes those casts to use the 'hh' unsigned char modifier instead - consistently uses %02x instead of %2.2x (or other non-standard usage) - adds a few 'h' modifiers in various places - fixes a 'replcaes' typo - dev/urandon typo (in 13+ patch) Review: https://reviewboard.asterisk.org/r/4263/ ASTERISK-24619 #close Reported by: Stefan27 (on IRC) ........ Merged revisions 429673 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 429674 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-16 17:53 +0000 [r429653] George Joseph * res/res_pjsip_config_wizard.c: res_pjsip_config_wizard: fix test breakage Fix test breakage caused by not checking for res_pjsip before calling ast_sip_get_sorcery. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4269/ 2014-12-16 16:38 +0000 [r429612-429633] Joshua Colp * /, channels/chan_sip.c: chan_sip: Allow T.38 switch-over when SRTP is in use. Previously when SRTP was enabled on a channel it was not possible to switch to T.38 as no crypto attributes would be present. This change makes it so it is now possible. If a T.38 re-invite comes in SRTP is terminated since in practice you can't encrypt a UDPTL stream. Now... if we were doing T.38 over RTP (which does exist) then we'd have a chance but almost nobody does that so here we are. ASTERISK-24449 #close Reported by: Andreas Steinmetz patches: udptl-ignore-srtp-v2.patch submitted by Andreas Steinmetz (license 6523) ........ Merged revisions 429632 from http://svn.asterisk.org/svn/asterisk/branches/11 * res/res_pjsip_t38.c: res_pjsip_t38: Fix T.38 failure when peer reinvites immediately. If a remote endpoint reinvites to T.38 immediately the state machine will go into a peer reinvite state. If a T.38 capable application (such as ReceiveFax) queries it will receive this state. Normally the application will then indicate so that the channel driver will queue up the T.38 offer previously received. Once it receives this offer the application will act normally and negotiate. The res_pjsip_t38 module incorrectly partially squashed this indication. This would cause the application to think the request had failed when in reality it had actually worked. This change makes it so that no T.38 control frames (or indications) are squashed. 2014-12-15 17:07 +0000 [r429592] George Joseph * res/res_pjsip_phoneprov_provider.c, configs/samples/pjsip_wizard.conf.sample (added), CHANGES, res/res_pjsip_config_wizard.c (added): res_pjsip_config_wizard: Allow streamlined config of common pjsip scenarios res_pjsip_config_wizard ------------------ * This is a new module that adds streamlined configuration capability for chan_pjsip. It's targetted at users who have lots of basic configuration scenarios like 'phone' or 'agent' or 'trunk'. Additional information can be found in the sample configuration file at config/samples/pjsip_wizard.conf.sample. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4190/ 2014-12-15 15:36 +0000 [r429571] Mark Michelson * res/res_pjsip_pubsub.c: Activate persistent subscriptions when they are recreated. Prior to this change, recreating persistent subscriptions would create the subscription but would not activate it. This led to subscriptions being listed in the "NULL" state by diagnostics and not sending NOTIFYs when expected. Review: https://reviewboard.asterisk.org/r/4261 2014-12-12 23:54 +0000 [r429542] George Joseph * main/manager.c, include/asterisk/module.h, include/asterisk/_private.h: loader: Move definition of ast_module_reload from _private.h to module.h No functionality change. Just move the definition of ast_module_reload from _private.h to module.h so it can be public. Also removed the include of _private.h from manager.c since ast_module_load was the only reason for including it. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4251/ 2014-12-12 23:40 +0000 [r429540] Richard Mudgett * main/lock.c, /, include/asterisk/lock.h: DEBUG_THREADS: Fix regression and lock tracking initialization problems. This patch started with David Lee's patch at https://reviewboard.asterisk.org/r/2826/ and includes a regression fix introduced by the ASTERISK-22455 patch. The initialization of a mutex's lock tracking structure was not protected in a critical section. This is fine for any mutex that is explicitly initialized, but a static mutex may have its lock tracking double initialized if multiple threads attempt the first lock simultaneously. * Added a global mutex to properly serialize initialization of the lock tracking structure. The painful global lock can be mitigated by adding a double checked lock flag as discussed on the original review request. * Defer lock tracking initialization until first use. * Don't be "helpful" and initialize an uninitialized lock when DEBUG_THREADS is enabled. Debug code is not supposed to fix or change normal code behavior. We don't need a lock initialization race that would force a re-setup of lock tracking. Lock tracking already handles initialization on first use. * Properly handle allocation failures of the lock tracking structure. * No need to initialize tracking data in __ast_pthread_mutex_destroy() just to turn around and destroy it. The regression introduced by ASTERISK-22455 is the result of manipulating a pthread_mutex_t struct outside of the pthread library code. The pthread_mutex_t struct seems to have a global linked list pointer member that can get changed by other threads. Therefore, saving and restoring the contents of a pthread_mutex_t struct is a bad thing. Thanks to Thomas Airmont for finding this obscure regression. * Don't overwrite the struct ast_lock_track.reentr_mutex member to restore tracking data in __ast_cond_wait() and __ast_cond_timedwait(). The pthread_mutex_t struct must be treated as a read-only opaque variable. Miscellaneous other items fixed by this patch: * Match ast_suspend_lock_info() with ast_restore_lock_info() in __ast_cond_timedwait(). * Made some uninitialized lock sanity checks return EINVAL and try a DO_THREAD_CRASH. * Fix bad canlog initialization expressions. ASTERISK-24614 #close Reported by: Thomas Airmont Review: https://reviewboard.asterisk.org/r/4247/ Review: https://reviewboard.asterisk.org/r/2826/ ........ Merged revisions 429539 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-12-12 22:53 +0000 [r429518-429519] Matthew Jordan * res/res_agi.c: res/res_agi: Make Verbose message for 'stream file' match other playbacks The Verbose message displayed when a file is played back via 'stream file' was formatted differently than other playbacks: * It didn't include the channel name * It didn't include the channel language It does, however, include the playback offset as well as any escape digits. That information was kept; however, this patch updates the formatting to more closely match the Verbose messages displayed when a file is played back by 'control stream file', Playback, ControlPlayback, or any other file playback operation. * /: Add 11 merge properties 2014-12-12 16:57 +0000 [r429497] Joshua Colp * main/format.c, main/codec.c, include/asterisk/format.h: media: Fix crash when determining sample count of a frame during shutdown. When shutting down Asterisk the codecs are cleaned up. As a result anything attempting to get a codec based on ID or details will find that no codec exists. This currently occurs when determining the sample count of a frame. This code did not take this situation into account. This change fixes this by getting the codec directly from the format and eliminates the lookup. This is both faster and also provides a guarantee that the codec will exist and will be valid. ASTERISK-24604 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4260/ 2014-12-12 15:30 +0000 [r429477] Kevin Harwell * channels/chan_pjsip.c: chan_pjsip: Race between channel answer and bridge setup when using direct media When direct media is enabled and a pjsip channel is answered a race would occur between the handling of the answer and bridge setup. Sometimes the media negotiation would take place after the native bridge was setup. This resulted in a NULL media address, which in turn resulted in Asterisk using its address as the remote media address when sending a reinvite. This patch makes the chan_pjsip answer handler synchronous thus alleviating the race condition (the bridge won't start setting things up until after it returns). ASTERISK-24563 #close Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4257/ 2014-12-12 15:00 +0000 [r429457] David M. Lee * res/res_pjsip_outbound_publish.c: Fix crash for sorcery misconfigs res_pjsip_outbound_publish was missing the CHECK_PJSIP_MODULE_LOADED() call in load_module, and would crash with a segfault if res_pjsip declined to load. Review: https://reviewboard.asterisk.org/r/4258/ 2014-12-12 14:12 +0000 [r429430-429433] Kinsey Moore * /, res/res_pjsip_sdp_rtp.c: PJSIP: Allow use of 'inactive' streams for hold This allows use of the 'inactive' stream direction identifier to be used for hold where 'sendonly' is normally used. Some Seimens phones use 'inactive' and this change allows music on hold to operate properly. Review: https://reviewboard.asterisk.org/r/4252/ Reported by: Steve Pitts ........ Merged revisions 429432 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_sorcery_config.c, /: Sorcery: Log when old config remains in use This adds a log message notifying the user that a stale configuration is in place upon reload when a config object fails to load. This situation can end up causing confusion when the object failed to load but exists from a previous config load especially when the old config is significantly different from the new config. Review: https://reviewboard.asterisk.org/r/4250/ Reported by: Thomas Thompson ........ Merged revisions 429429 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-12 13:05 +0000 [r429407-429409] Joshua Colp * res/res_pjsip_session.exports.in, channels/chan_pjsip.c, res/res_pjsip_session.c, include/asterisk/res_pjsip_session.h: res_pjsip_session: Delay sending BYE if a re-INVITE transaction is in progress. Given the scenario where a PJSIP channel is in a native RTP bridge with direct media and the channel is then hung up the code will currently re-INVITE the channel back to Asterisk and send a BYE at the same time. Many SIP implementations dislike this greatly. This change makes it so that if a re-INVITE transaction is in progress the BYE is queued to occur after the completion of the transaction (be it through normal means or a timeout). Review: https://reviewboard.asterisk.org/r/4248/ * res/res_pjsip_session.c: res_pjsip_session: Fix issue where a declined media stream in a re-INVITE would fail SDP negotiation. In the past the SDP negotiation within res_pjsip_session was made more tolerant of certain situations. The only case where SDP negotiation will fail is when a major error occurs during negotiation. Receiving an already declined media stream is not considered a major error. When producing the local SDP the logic took this into account so on the initial INVITE the declined media stream did not cause an SDP negotiation failure. Unfortunately the logic for handling media streams with a handler did not mirror this logic and considered an already declined media stream an error and thus failed the SDP negotiation. This change makes the logic between both situations match so only under major errors will the SDP negotiation fail. ASTERISK-24607 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4254/ 2014-12-11 20:31 +0000 [r429387] Kevin Harwell * CHANGES: ARI/AMI: Include language in standard channel snapshot output The CHANGES verbiage for the "language" addition had been put under the wrong release. This moves it to be under 13.1 to 13.2 changes. ASTERISK-24553 Reported by: Matt Jordan 2014-12-11 17:21 +0000 [r429352-429379] Kinsey Moore * /: Recorded merge of revisions 429378 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Fix incorrect patch applied in r429354 The patch that was applied was another pending patch. This swaps them out. * /: Recorded merge of revisions 429354 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Stasis: Update unittest for channel snapshots This adjusts the unit test for channel snapshots to take the new language key into account. * tests/test_stasis_channels.c: Stasis: Update unittest for channel snapshots This adjusts the unit test for channel snapshots to take the new language key into account. 2014-12-10 15:42 +0000 [r429326] Kevin Harwell * /, CHANGES: ARI/AMI: Include language in standard channel snapshot output Adding information about including "language" in the standard channel snapshot output to the CHANGES file. Note the actual source changes have already been previously committed. ASTERISK-24553 Reported by: Matt Jordan ........ Merged revisions 429325 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-10 13:34 +0000 [r429273] Joshua Colp * res/res_http_websocket.c, res/res_pjsip_transport_websocket.c, /, channels/chan_sip.c: res_http_websocket: Fix crash due to double freeing memory when receiving a payload length of zero. Frames with a payload length of 0 were incorrectly handled in res_http_websocket. Provided a frame with a payload had been received prior it was possible for a double free to occur. The realloc operation would succeed (thus freeing the payload) but be treated as an error. When the session was then torn down the payload would be freed again causing a crash. The read function now takes this into account. This change also fixes assumptions made by users of res_http_websocket. There is no guarantee that a frame received from it will be NULL terminated. ASTERISK-24472 #close Reported by: Badalian Vyacheslav Review: https://reviewboard.asterisk.org/r/4220/ Review: https://reviewboard.asterisk.org/r/4219/ ........ Merged revisions 429270 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 429272 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-10 13:14 +0000 [r429246] Kinsey Moore * /, res/res_pjsip/pjsip_options.c: PJSIP: Fix assert on initial mass qualify This fixes the MWI test regressions caused by r429127 and ensures that contacts have non-zero qualify_frequency before attempting scheduling. ........ Merged revisions 429245 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-09 20:46 +0000 [r429223] Scott Griepentrog * main/asterisk.c: core: avoid possible asterisk -r crash from long id When connecting to the remote console, an id string is first provided that consts of the hostname, pid, and version. This is parsed by the remote instance using a buffer that may be too short, and can allow a buffer overrun because it is not terminated. This patch adds termination and a larger buffer. Review: https://reviewboard.asterisk.org/r/4182/ 2014-12-09 20:19 +0000 [r429175-429206] Kevin Harwell * res/ari/ari_model_validators.h, /, main/stasis_channels.c, rest-api/api-docs/channels.json, res/ari/ari_model_validators.c, main/manager_channels.c: ARI/AMI: Include language in standard channel snapshot output The channel "language" was already part of a channel snapshot, however is was not sent out over AMI or ARI. This patch makes it so the channel "language" is included in the appropriate AMI or ARI events. ASTERISK-24553 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4245/ ........ Merged revisions 429204 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/rtp_engine.h, res/res_rtp_asterisk.c, main/rtp_engine.c, /, channels/chan_sip.c: Direct Media calls within private network sometimes get one way audio When endpoints with direct_media enabled, behind a firewall (Asterisk on a separate network) and were bridged sometimes Asterisk would send the ip address of the firewall in the sdp to one of the phones in the reinvite resulting in one way audio. When sending the reinvite Asterisk will retrieve the media address from the associated rtp instance, but if frames were being read this can be overwritten with another address (in this case the firewall's). This patch ensures that Asterisk uses the original device address when using direct media. ASTERISK-24563 Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4216/ ........ Merged revisions 429195 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_outbound_publish.c: res_pjsip_outbound_publish: stack overflow when using non-default sorcery wizard When using a non-default sorcery wizard (in this instance realtime) for outbound publishes Asterisk will crash after a stack overflow occurs due to the code infinitely recursing. The fix entails removing the outbound publish state dependency from the outbound publish sorcery object and instead keeping an in memory container that can be used to lookup the state when needed. ASTERISK-24514 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4178/ 2014-12-09 15:44 +0000 [r429153] Joshua Colp * res/ari/resource_channels.h, rest-api/api-docs/channels.json, res/ari/resource_channels.c, CHANGES, res/res_ari_channels.c: ari: Add support for specifying an originator channel when originating. If an originator channel is specified when originating a channel the linked ID of it will be applied to the newly originated outgoing channel. This allows an association to be made between the two so it is known that the originator has dialed the originated channel. ASTERISK-24552 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4243/ 2014-12-09 14:00 +0000 [r429128] Kinsey Moore * /, res/res_pjsip/pjsip_options.c: PJSIP: Stagger outbound qualifies This change staggers initiation of outbound qualify (OPTIONS) attempts to reduce instantaneous server load and prevent network congestion. Review: https://reviewboard.asterisk.org/r/4246/ ASTERISK-24342 #close Reported by: Richard Mudgett ........ Merged revisions 429127 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-15 Asterisk Development Team * Asterisk 13.1.0 Released. 2014-12-10 Asterisk Development Team * Asterisk 13.1.0-rc2 Released. * AST-2014-019: Fix crash when receiving a WebSocket packet with a payload length of zero. Frames with a payload length of 0 were incorrectly handled in res_http_websocket. Provided a frame with a payload had been received prior it was possible for a double free to occur. The realloc operation would succeed (thus freeing the payload) but be treated as an error. When the session was then torn down the payload would be freed again causing a crash. The read function now takes this into account. This change also fixes assumptions made by users of res_http_websocket. There is no guarantee that a frame received from it will be NULL terminated. ASTERISK-24472 #close Reported by: Badalian Vyacheslav 2014-12-08 Asterisk Development Team * Asterisk 13.1.0-rc1 Released. 2014-12-08 16:53 +0000 [r429091] Matthew Jordan * rest-api/api-docs/playbacks.json, UPGRADE.txt, rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, rest-api/resources.json, CHANGES, include/asterisk/manager.h, rest-api/api-docs/bridges.json, rest-api/api-docs/recordings.json, rest-api/api-docs/deviceStates.json, rest-api/api-docs/endpoints.json, rest-api/api-docs/mailboxes.json, rest-api/api-docs/events.json, rest-api/api-docs/asterisk.json, rest-api/api-docs/applications.json: AMI/ARI: Update version to 2.6.0/1.6.0 respectively for new features AMI/ARI are getting a few enhancements in the next release of Asterisk 13. Per semantic versioning, that warrants a bump in the minor version number, as it reflects a backwards compatible change. Hence, this commit. 2014-12-08 16:41 +0000 [r429064-429089] Mark Michelson * res/res_pjsip_session.c: Fix a crash that would occur when receiving a 491 response to a reinvite. The reviewboard description does a fine job of summarizing this, so here it is: A reporter discovered that Asterisk would crash when attempting to retransmit a reinvite that had previously received a 491 response. The crash occurred because a pjsip_tx_data structure was being saved for reuse, but its reference count was not being increased. The result was that the pjsip_tx_data was being freed before we were actually done with it. When we attempted to re-use the structure when re-sending the reinvite, Asterisk would crash. The fix implemented here is not to try holding onto the pjsip_tx_data at all. Instead, when we reschedule sending the reinvite, we create a brand new pjsip_tx_data and send that instead. Because of this change, there is no need for an ast_sip_session_delayed_request structure to have a pjsip_tx_data on it any more. So any code referencing its use has been removed. When this initial fix was introduced, I encountered a second crash when processing a subsequent 200 OK on a rescheduled reinvite. The reason was that when rescheduling the reinvite, we gave the wrong location for a response callback. This has been fixed in this patch as well. ASTERISK-24556 #close Reported by Abhay Gupta Review: https://reviewboard.asterisk.org/r/4233 * main/stasis_channels.c, CHANGES, res/ari/ari_model_validators.c, main/manager_channels.c, main/channel.c, res/ari/ari_model_validators.h, include/asterisk/stasis_channels.h, rest-api/api-docs/events.json, res/stasis/app.c: Add new AMI and ARI events for connected line changes on a channel. The AMI event is called NewConnectedLine and the ARI event is called ChannelConnectedLine. ASTERISK-24554 #close Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/4231 2014-12-08 15:43 +0000 [r429062] Kinsey Moore * /, res/stasis/app.c, main/channel_internal_api.c, res/stasis/stasis_bridge.c, res/stasis/app.h, include/asterisk/channel.h, res/res_stasis.c, main/channel.c: Stasis: Fix StasisStart/End order and missing events This corrects several bugs that currently exist in the stasis application code. * After a masquerade, the resulting channels have channel topics that do not match their uniqueids ** Masquerades now swap channel topics appropriately * StasisStart and StasisEnd messages are leaked to observer applications due to being published on channel topics ** StasisStart and StasisEnd publishing is now properly restricted to controlling apps via app topics * Race conditions exist where StasisStart and StasisEnd messages due to a masquerade may be received out of order due to being published on different topics ** These messages are now published directly on the app topic so this is now a non-issue * StasisEnds are sometimes missing when sent due to masquerades and bridge swaps into and out of Stasis() ** This was due to StasisEnd processing adjusting message-sent flags after Stasis() had already exited and Stasis() had been re-entered ** This was corrected by adjusting these flags prior to sending the message while the initial Stasis() application was still shutting down Review: https://reviewboard.asterisk.org/r/4213/ ASTERISK-24537 #close Reported by: Matt DiMeo ........ Merged revisions 429061 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-06 18:16 +0000 [r429029-429033] Matthew Jordan * res/res_monitor.c, /: res/res_monitor: Reset in/out sample counts on Monitor start When repeatedly starting/stopping a Monitor on a channel, the accumulated in/out sample counts are never reset to 0. This can cause inadvertent jumps in the recordings, as the code in the channel core will determine incorrectly that a jump in the recorded file position should occur. Setting the sample counts to 0 simply reflects the initial state a Monitor should be in when it is started, as this is the initial count that would be on the channels at that time. ASTERISK-24573 #close Reported by: Nuno Borges patches: 24573.patch uploaded by Nuno Borges (License 6116) ........ Merged revisions 429031 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 429032 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_meetme.c: apps/app_meetme: Apply default values on initial load with no config file When the app_meetme module is loaded without its configuration file, the module settings aren't initialized. In particular, this impacts the use of logging realtime members. This patch guarantees that we always set the default module settings on initial load. Review: https://reviewboard.asterisk.org/r/4242/ ASTERISK-24572 #close Reported by: Nuno Borges patches: 24572.patch uploaded by Nuno Borges (License 6116) ........ Merged revisions 429027 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 429028 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-05 17:06 +0000 [r429000] George Joseph * tests/test_sorcery.c, main/sorcery.c, include/asterisk/test.h, /, include/asterisk/sorcery.h: sorcery: Add additional observer capabilities. Add new global, instance and wizard observers. instance_created wizard_registered wizard_unregistered instance_destroying instance_loading instance_loaded wizard_mapped object_type_registered object_type_loading object_type_loaded wizard_loading wizard_loaded Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4215/ ........ Merged revisions 428999 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-04 17:13 +0000 [r428865-428973] Matthew Jordan * /, main/test.c: main/test: Fix compilation issue on 32-bit systems On a 32-bit system, a type of intmax_t will result in a compilation warning when formatted as a 'long int'. Use the format specifier of %jd (which was what was used originally in manager.c) to format the JSON extracted integer on both 32-/64-bit systems. ........ Merged revisions 428972 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /, main/test.c: main/test: Fix race condition between AMI topic and Test Suite topic This patch fixes a race condition between the raising of test AMI events (which drive many tests in the Asterisk Test Suite) and other AMI events. Prior to this patch, the Stasis messages published to the test topic were not forwarded to the AMI topic. Instead, the code in manager had a dedicated handler for test messages that was independent of the topics forwarded to the AMI topic. This results in no synchronization between the test messages and the rest of the Stasis messages published out over AMI. In some test with very tight timing constraints, this can result in out of order messages and spurious test failures. Properly forwarding the Test Suite topic to the AMI topic ensures that the messages are synchronized properly. This patch does that, and moves the message handling to the Stasis definition of the Test Suite message in test.c as well. Review: https://reviewboard.asterisk.org/r/4221/ ........ Merged revisions 428945 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_cel.c, /: tests/test_cel: Add test_cel_attended_transfer_bridges_link to racey tests Despite failing less often, the ordering of the ATTENDEDTRANSFER event and the BRIDGE_EXIT event for the Alice and David channels is not defined. This makes the test still fail. ........ Merged revisions 428918 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_cel.c, /: tests/test_cel: Fix CEL unit test failures caused by attended transfer changes When the publication of attended transfer messages were pushed to another thread, some subtle race conditions were introduced with the CEL unit tests. This patch fixes one of them, and pushes the other to ASTERISK-22367, which already exists to fix another bouncy CEL unit test. In particular, this patch fixes the test_cel_attended_transfer_bridges_link test, and defers the test_cel_attended_transfer_bridges_swap test to the aforementioned JIRA issue. ASTERISK-22367 ........ Merged revisions 428891 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_voicemail.c, /: apps/app_voicemail: Fix crash with IMAP when streams are opened simultaneously The UW IMAP library is instrinsically not thread-safe, and relies upon higher level applications to guarantee thread safety. For the most part, this is provided by the vms object, which provides locking for individual streams. Unfortunately, this is not sufficient for calls to mail_open which create the IMAP stream. mail_open can, on some systems, call into a UW IMAP specific function for determining the address of a system based on a hostname, ip_nametoaddr. In the ip6_unix implementation of this function, static variables are used to hold parsing buffers. This can cause a crash if multiple threads attempt to convert a hostname to an address at the same time. Locking on a single mail stream is not sufficient to prevent simultaneous access to these static variables. In the IMAP library, this function can be called from the mail_open and imap_status functions. As the imap_status function is not used by app_voicemail, locking on access to mail_open is sufficient to prevent any mangling of the buffers. Review: https://reviewboard.asterisk.org/r/4188/ ASTERISK-24516 #close Reported by: David Duncan Ross Palmer Tested by: David Duncan Ross Palmer patches: ASTERISK-24516.diff uploaded by David Duncan Ross Palmer (License 6660) ........ Merged revisions 428863 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428864 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-02 21:53 +0000 [r428837] George Joseph * CHANGES, /: CHANGES: Add item for new 'pjsip show identif(y|ies) commands Tested-by: George Joseph ........ Merged revisions 428836 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-02 19:03 +0000 [r428789-428815] Matthew Jordan * tests/test_stasis.c: tests/test_stasis: Resolve compilation issues from Asterisk 12 merge When merging the changes up stream in r428687, I missed the fact that the signature for stasis_message_type_create was changed. This patch fixes the compilation issues introduced by that merge. * pbx/pbx_loopback.c, /: pbx/pbx_loopback: Speed up switches by avoiding unneeded lookups This patch makes a small rearrangement to only do dialplan lookups during loopback switches if the pattern matches. Prior to this patch, the dialplan lookups were always performed, even when the result would be discarded. Dialplan lookups can be very costly if remote switches - like DUNDi - are present. In those cases extension matching is sped up considerably, making the issue of lost digits more manageable. As collateral damage, 6 trailing spaces were killed. Review: https://reviewboard.asterisk.org/r/4211 ASTERISK-24577 #close Reported by: Birger Harzenetter patches: ast-loopback.patch uploaded by Birger Harzenetter (License 5870) ........ Merged revisions 428787 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428788 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-02 12:20 +0000 [r428761] Joshua Colp * res/res_pjsip_refer.c, /: res_pjsip_refer: Fix issue where native bridge may not occur upon completion of a transfer. There are two methods within res_pjsip_refer for keeping track of the state of a transfer. The first is a framehook which looks at frames passing by to determine the state. The second subscribes to know when the channel joins a bridge. In the case when the channel joins the bridge the framehook is *NOT* removed and this prevents the native RTP bridging technology from getting used. This change gets the channel and if it still exists remove the framehook. Review: https://reviewboard.asterisk.org/r/4218/ ........ Merged revisions 428760 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-02 00:38 +0000 [r428731-428734] George Joseph * /, include/asterisk/config.h, main/config.c: config: Create ast_variable_find_in_list() Add const char *ast_variable_find_in_list(const struct ast_variable *list, const char *variable); ast_variable_find() requires a config category to search whereas ast_variable_find_in_list() just needs the root list element which is useful if you don't have a category. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4217/ ........ Merged revisions 428733 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_endpoint_identifier_ip.c, res/res_pjsip/pjsip_cli.c: res_pjsip_endpoint_identifier_ip: Add 'show identify(ies)' cli commands While troubleshooting other things I realized there were no pjsip cli commands for identify. This patch adds them. It also also fixes a reference leak when a 'show endpoint' displayed identifies and properly sets the return code if load_module can't allocate a cli formatter structure. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4212/ ........ Merged revisions 428725 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-01 17:57 +0000 [r428687] Matthew Jordan * channels/chan_skinny.c, res/res_pjsip_mwi.c, tests/test_stasis.c, res/res_pjsip_pubsub.c, res/res_pjsip_refer.c, channels/chan_mgcp.c, main/stasis_cache.c, channels/chan_sip.c, include/asterisk/stasis_internal.h, /, include/asterisk/stasis.h, UPGRADE.txt, configs/samples/stasis.conf.sample, res/parking/parking_applications.c, res/res_xmpp.c, channels/chan_iax2.c, apps/app_queue.c, res/res_stasis_device_state.c, channels/sig_pri.c, include/asterisk/stasis_message_router.h, main/endpoints.c, res/parking/parking_bridge_features.c, main/stasis.c, channels/chan_dahdi.c, main/stasis_message_router.c: main/stasis: Allow subscriptions to use a threadpool for message delivery Prior to this patch, all Stasis subscriptions would receive a dedicated thread for servicing published messages. In contrast, prior to r400178 (see review https://reviewboard.asterisk.org/r/2881/), the subscriptions shared a thread pool. It was discovered during some initial work on Stasis that, for a low subscription count with high message throughput, the threadpool was not as performant as simply having a dedicated thread per subscriber. For situations where a subscriber receives a substantial number of messages and is always present, the model of having a dedicated thread per subscriber makes sense. While we still have plenty of subscriptions that would follow this model, e.g., AMI, CDRs, CEL, etc., there are plenty that also fall into the following two categories: * Large number of subscriptions, specifically those tied to endpoints/peers. * Low number of messages. Some subscriptions exist specifically to coordinate a single message - the subscription is created, a message is published, the delivery is synchronized, and the subscription is destroyed. In both of the latter two cases, creating a dedicated thread is wasteful (and in the case of a large number of peers/endpoints, harmful). In those cases, having shared delivery threads is far more performant. This patch adds the ability of a subscriber to Stasis to choose whether or not their messages are dispatched on a dedicated thread or on a threadpool. The threadpool is configurable through stasis.conf. Review: https://reviewboard.asterisk.org/r/4193 ASTERISK-24533 #close Reported by: xrobau Tested by: xrobau ........ Merged revisions 428681 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-12-01 13:41 +0000 [r428632-428655] Joshua Colp * /, apps/app_record.c: app_record: Fix bug where using the 'k' option and hanging up would trim 1/4 of a second of the recording. The Record dialplan function trims 1/4 of a second from the end of recordings in case they are terminated because of DTMF. When hanging up, however, you don't want this to happen. This change makes it so on hangup this does not occur. ASTERISK-24530 #close Reported by: Ben Smithurst patches: app_record_v2.diff submitted by Ben Smithurst (license 6529) Review: https://reviewboard.asterisk.org/r/4201/ ........ Merged revisions 428653 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428654 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/channel.c: channel: Extend size of buffer for codecs in "core show channeltype" CLI command. The static buffer for codecs when invoking the "core show channeltype" CLI command did not have enough room for all codecs. This has been extended so it does. ASTERISK-24542 #close Reported by: snuffy patches: channeltype-tech.diff submitted by snuffy (license 5024) Review: https://reviewboard.asterisk.org/r/4204/ 2014-11-24 20:37 +0000 [r428602-428604] Richard Mudgett * tests/test_channel_feature_hooks.c: test_channel_feature_hooks.c: Fix unit test for DTMF hooks. Fix the failing /channels/features/test_features_channel_dtmf unit test. DTMF emulation does not work without a stream of packets to prod the emulation code. Review: https://reviewboard.asterisk.org/r/4199/ * /, main/bridge.c, main/bridge_channel.c: DTMF hooks: Leaving channels need to push any collected digits into the bridge. Any partially collected DTMF digits for a DTMF hook need to be pushed into the bridge when a channel leaves the bridging system as if there were a timeout. Review: https://reviewboard.asterisk.org/r/4199/ ........ Merged revisions 428601 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-21 19:09 +0000 [r428572] Richard Mudgett * main/manager.c, /: manager: Fix could not extend string messages. When shutting down Asterisk that has an active AMI connection, you get several "failed to extend from %d to %d" messages because use of the EVENT_FLAG_SHUTDOWN attempts to add all AMI permission strings to the event. * Created MAX_AUTH_PERM_STRING to use when creating stack based struct ast_str variables used with the authority_to_str() and user_authority_to_str() functions instead of a variety of magic numbers that could be too small. * Added a special check for EVENT_FLAG_SHUTDOWN to authority_to_str() so it will not attempt to add all permission level strings. Review: https://reviewboard.asterisk.org/r/4200/ ........ Merged revisions 428570 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428571 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-21 17:45 +0000 [r428544] George Joseph * main/sorcery.c, /, res/res_pjsip_phoneprov_provider.c, tests/test_sorcery.c: sorcery: Make is_object_field_registered handle field names that are regexes. As a result of https://reviewboard.asterisk.org/r/3305, res_sorcery_realtime was tossing database fields that didn't have an exact match to a sorcery registered field. This broke the ability to use regexes as field names which manifested itself as a failure of res_pjsip_phoneprov_provider which uses this capability. It also broke handling of fields that start with '@' in realtime but I don't think anyone noticed. This patch does the following... * Modifies ast_sorcery_fields_register to pre-compile the name regex. * Modifies ast_sorcery_is_object_field_registered to test the regex if it exists instead of doing an exact strcmp. * Modifies res_pjsip_phoneprov_provider with a few tweaks to get it to work with realtime. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4185/ ........ Merged revisions 428543 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-21 02:16 +0000 [r428505] Matthew Jordan * main/bridge_basic.c: main/bridge_basic: Fix features regressions introduced by r428165 In r428165, two bugs were introduced: * Prior to entering the features retry loop, the buffer that holds the collected digits is wiped. However, this inadvertently wipes out the first collected digit on the first pass through, which is obtained in ast_stream_and_wait. This caused all of the features tests to fail. * If ast_app_dtget returns a hangup (-1), the loop would retry incorrectly. If we detect a hangup, we have to stop trying the feature. This patch fixes both issues. Review: https://reviewboard.asterisk.org/r/4196/ 2014-11-20 16:36 +0000 [r428425] Mark Michelson * main/acl.c, /: Fix error with mixed address family ACLs. Prior to this commit, the address family of the first item in an ACL was used to compare all incoming traffic. This could lead to traffic of other IP address families bypassing ACLs. ASTERISK-24469 #close Reported by Matt Jordan Patches: ASTERISK-24469-11.diff uploaded by Matt Jordan (License #6283) AST-2014-012 ........ Merged revisions 428402 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 428417 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428422 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-20 16:34 +0000 [r428413] Kevin Harwell * funcs/func_db.c, /: AST-2014-018 - func_db: DB Dialplan function permission escalation via AMI. The DB dialplan function when executed from an external protocol (for instance AMI), could result in a privilege escalation. Asterisk now inhibits the DB function from being executed from an external interface if the live_dangerously option is set to no. ASTERISK-24534 Reported by: Gareth Palmer patches: submitted by Gareth Palmer (license 5169) ........ Merged revisions 428331 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 428363 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428409 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-20 16:13 +0000 [r428343] Jonathan Rose * res/res_pjsip_acl.c, /: PJSIP ACLs: Fix ACLs not loading on startup and apply/acl issues on contact The biggest problem this patch fixes is that ACLs weren't previously being loaded when the res_pjsip_acl module was loaded. Yikes. In addition, the ACL options contact_permit and contact_acl were effectively interpreted as contact_deny and this patch fixes that as well. AST-1418 #close Reported by: Thomas Thompson Review: https://reviewboard.asterisk.org/r/4120/ ASTERISK-24531 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4171/ ........ Merged revisions 428333 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-20 15:50 +0000 [r428339] Kevin Harwell * apps/app_confbridge.c, /: AST-2014-017 - app_confbridge: permission escalation/ class authorization. Confbridge dialplan function permission escalation via AMI and inappropriate class authorization on the ConfbridgeStartRecord action. The CONFBRIDGE dialplan function when executed from an external protocol (for instance AMI), could result in a privilege escalation. Also, the AMI action “ConfbridgeStartRecord” could also be used to execute arbitrary system commands without first checking for system access. Asterisk now inhibits the CONFBRIDGE function from being executed from an external interface if the live_dangerously option is set to no. Also, the “ConfbridgeStartRecord” AMI action is now only allowed to execute under a user with system level access. ASTERISK-24490 Reported by: Gareth Palmer ........ Merged revisions 428332 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428334 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-20 14:55 +0000 [r428302-428305] Joshua Colp * res/res_pjsip_refer.c, /: AST-2014-016: Fix crash when receiving an in-dialog INVITE with Replaces in res_pjsip_refer. The implementation of INVITE with Replaces in res_pjsip_refer did not expect them to occur in-dialog. As a result it would incorrectly attempt to hang up a channel it thought was under its control. In reality the channel would be under the control of another thread. When the other thread accessed the channel it would be accessing freed memory and could crash. This change makes res_pjsip_refer not act on an in-dialog INVITE with Replaces. ASTERISK-24528 #close Reported by: Joshua Colp ........ Merged revisions 428304 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_pjsip.c, /: AST-2014-015: Fix race condition in chan_pjsip when sending responses after a CANCEL has been received. Due to the serialized architecture of chan_pjsip there exists a race condition where a CANCEL may be received and processed before responses (such as 180 Ringing, 183 Session Progress, and 200 OK) are sent. Since the session is in an unexpected state PJSIP will assert when this is attempted. This change makes it so that these responses are not sent on disconnected sessions. ASTERISK-24471 #close Reported by: yaron nahum ........ Merged revisions 428301 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-19 19:31 +0000 [r428273] Corey Farrell * include/asterisk/stringfields.h, /: stringfields: Fix bug in ast_string_fields_copy. ast_string_fields_copy relies on the fact that __ast_string_field_release_active never previously zeroed pool->used, so keeping the existing pointer was "ok". Now that existing pools can be reset to 'empty', it is important to set each field to __ast_string_field_empty after releasing the memory. ASTERISK-24535 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4186/ ........ Merged revisions 428272 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-19 17:13 +0000 [r428246] Richard Mudgett * res/res_calendar.c, main/manager.c, /, channels/chan_sip.c, channels/sip/security_events.c: ast_str: Fix improper member access to struct ast_str members. Accessing members of struct ast_str outside of the string manipulation API routines is invalid since struct ast_str is supposed to be treated as opaque. Review: https://reviewboard.asterisk.org/r/4194/ ........ Merged revisions 428244 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428245 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-19 12:40 +0000 [r428196-428222] Joshua Colp * res/res_pjsip_session.c, include/asterisk/res_pjsip.h, include/asterisk/res_pjsip_session.h, res/res_pjsip_sdp_rtp.c, res/res_pjsip/pjsip_configuration.c, configs/samples/pjsip.conf.sample, contrib/ast-db-manage/config/versions/eb88a14f2a_add_media_encryption_optimistic_to_pjsip.py (added), CHANGES, res/res_pjsip.c: res_pjsip_sdp_rtp: Add support for optimistic SRTP. Optimistic SRTP is the ability to enable SRTP but not have it be a fatal requirement. If SRTP can be used it will be, if not it won't be. This gives you a better chance of using it without having your sessions fail when it can't be. Encrypt all the things! Review: https://reviewboard.asterisk.org/r/3992/ * res/res_pjsip_refer.c, /: res_pjsip_refer: Ensure Refer-To is NULL terminated and parse it as a URI. There is no guarantee that when we get a Refer-To that it will be NULL terminated. As the URI parsing function requires it to be we now NULL terminate it. Additionally parsing the Refer-To as a 'To' header is needless and it can simply be done as a URI. This also fixes a problem where certain Refer-To headers would not be parsed as a 'To' header causing the REFER to fail. ASTERISK-24508 #close Reported by: Beppo Mazzucato Review: https://reviewboard.asterisk.org/r/4187/ ........ Merged revisions 428195 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-18 18:54 +0000 [r428169] Richard Mudgett * /, res/parking/parking_tests.c: parking_tests.c: Add missing newline on a unit test message. ........ Merged revisions 428168 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-17 16:51 +0000 [r428145] Mark Michelson * CHANGES, main/features_config.c, configs/samples/features.conf.sample, include/asterisk/features_config.h, main/bridge_basic.c: Allow for transferer to retry when dialing an invalid extension. This allows for a configurable number of attempts for a transferer to dial an extension to transfer the call to. For Asterisk 13, the default values are such that upgrading between versions will not cause a behaivour change. For trunk, though, the defaults will be changed to be more user-friendly. Review: https://reviewboard.asterisk.org/r/4167 2014-11-17 16:00 +0000 [r428119] Corey Farrell * /, channels/chan_sip.c: chan_sip: Fix theoretical leak of p->refer. If transmit_refer is called when p->refer is already allocated, it leaks the previous allocation. Updated code to always free previous allocation during a new allocation. Also instead of checking if we have a previous allocation, always create a clean record. ASTERISK-15242 #close Reported by: David Woolley Review: https://reviewboard.asterisk.org/r/4160/ ........ Merged revisions 428117 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428118 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-17 15:27 +0000 [r428079-428115] Matthew Jordan * /, apps/confbridge/conf_state_multi_marked.c: apps/app_confbridge: Ensure 'normal' users hear message when last marked leaves When r428077 was made for ASTERISK-24522, it failed to take into account users who are neither wait_marked nor end_marked. These users are *also* supposed to hear the 'leader has left the conference' message. Granted, this behaviour is a bit odd; however, that is how it used to work... and behaviour changes are not good. This patch ensures that if there are any 'normal' users present when the last marked user leaves the conference, the message will still be played to them. Note that this regression was caught by the Asterisk Test Suite's confbridge_nominal test, which has a quirky combination of users. ........ Merged revisions 428113 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428114 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/confbridge/conf_state_multi_marked.c: app_confbridge: Don't play leader leaving prompt if no one will hear it Consider the following: - A marked user in a conference - One or more end_marked only users in the conference When the marked users leaves, we will be in the conf_state_multi_marked state. This currently will traverse the users, kicking out any who have the end_marked flags. When they are kicked, a full ast_bridge_remove is immediately called on the channels. At this time, we also unilaterally set the need_prompt flag. When the need_prompt flag is set, we then playback a sound to the bridge informing everyone that the leader has left; however, no one is left in the bridge. This causes some odd behaviour for the end_marked users - they are stuck waiting for the bridge to be unlocked. This results in them waiting for 5 or 6 seconds of dead air before hearing that they've been kicked. Unfortunately, we do have to keep the bridge locked while we're playing back the 'leader-has-left' prompt. If there are any wait_marked users in the conference, this behaviour can't be easily changed - but we do make the case of the end_marked users better with this patch. Review: https://reviewboard.asterisk.org/r/4184/ ASTERISK-24522 #close Reported by: Matt Jordan ........ Merged revisions 428077 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 428078 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-16 21:12 +0000 [r427979-428052] Joshua Colp * channels/chan_pjsip.c, /: chan_pjsip: Remove AOR check when dialing and one is specified. The AOR value may contain the name of an AOR or a full SIP URI. Checking if the AOR exists can't be done as a result of this. ........ Merged revisions 428051 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_pjsip.c: chan_pjsip: Add additional log message when an AOR is specified when dialing and it does not exist. ASTERISK-24499 #close Reported by: Rusty Newton ........ Merged revisions 428007 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_motif.c, channels/chan_pjsip.c, /: chan_motif / chan_pjsip: Fix incorrect "No such module" messages when reloading. For chan_motif the direct return value of the underlying config options framework was passed back. This can relay various states which the module loader would not interpet as success. It has been changed so only on errors will it report back an error. For chan_pjsip the code implemented a dummy reload function which always returned an error. This has been removed as all configuration is held within res_pjsip instead. ASTERISK-23651 #close Reported by: Rusty Newton ........ Merged revisions 427981 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_configuration.c: res_pjsip: Enforce requirements for session timer minimum expiration period and normal expiration period. This change enforces the requirements in PJSIP for session timer configuration. The minimum expiration period must be 90 seconds or higher and the normal expiration period can not be lower than the minimum expiration period. If either of these were done the code would assert at session setup time. ASTERISK-24336 #close Reported by: Leon Rowland ........ Merged revisions 427978 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-15 16:56 +0000 [r427927-427954] Matthew Jordan * cel/cel_odbc.c, /: cel/cel_odbc: Provide microsecond precision in 'eventtime' column when possible This patch adds microsecond precision when inserting a CEL record into a table with an "eventtime" column of type timestamp, instead of second precision. The documentation (configs/cel_odbc.conf.sample) was already saying that the eventtime column included microseconds precision, but that was not the case. Also, without this patch, if you had a table with an "eventtime" column of type varchar, you had millisecond precision. With this patch, you also get microsecond precision in this case. Review: https://reviewboard.asterisk.org/r/3980 ASTERISK-24283 #close Reported by: Etienne Lessard patches: cel_odbc_time_precision.patch uploaded by Etienne Lessard (License 6394) ........ Merged revisions 427952 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427953 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_cel.c: tests/test_cel: Unlock bridge on off nominal paths If the test fails due to memory allocation errors, we may as well attempt to unlock the bridge on the way out. 2014-11-14 17:45 +0000 [r427902] Jonathan Rose * configs/samples/cdr.conf.sample, main/cdr.c, /: Documentation: Revise explanation of cdr.conf option 'Unanswered' ASTERISK-24279 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4109/ ........ Merged revisions 427901 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-14 15:51 +0000 [r427876] Scott Griepentrog * /, main/stun.c: stun: correct attribute string padding to match rfc When sending the USERNAME attribute in an RTP STUN response, the implementation in append_attr_string passed the actual length, instead of padding it up to a multiple of four bytes as required by the RFC 3489. This change adds separate variables for the string and padded attributed lengths, and performs padding correctly. Reported by: Thomas Arimont Review: https://reviewboard.asterisk.org/r/4139/ ........ Merged revisions 427874 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427875 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-14 15:24 +0000 [r427870] Mark Michelson * main/bridge.c, main/bridge_basic.c, include/asterisk/stasis_bridges.h, tests/test_cel.c, apps/app_queue.c, main/cel.c, main/stasis_bridges.c, /, res/stasis/app.c: Fix race condition that could result in ARI transfer messages not being sent. From reviewboard: "During blind transfer testing, it was noticed that tests were failing occasionally because the ARI blind transfer event was not being sent. After investigating, I detected a race condition in the blind transfer code. When blind transferring a single channel, the actual transfer operation (i.e. removing the transferee from the bridge and directing them to the proper dialplan location) is queued onto the transferee bridge channel. After queuing the transfer operation, the blind transfer Stasis message is published. At the time of publication, snapshots of the channels and bridge involved are created. The ARI subscriber to the blind transfer Stasis message then attempts to determine if the bridge or any of the involved channels are subscribed to by ARI applications. If so, then the blind transfer message is sent to the applications. The way that the ARI blind transfer message handler works is to first see if the transferer channel is subscribed to. If not, then iterate over all the channel IDs in the bridge snapshot and determine if any of those are subscribed to. In the test we were running, the lone transferee channel was subscribed to, so an ARI event should have been sent to our application. Occasionally, though, the bridge snapshot did not have any channels IDs on it at all. Why? The problem is that since the blind transfer operation is handled by a separate thread, it is possible that the transfer will have completed and the channels removed from the bridge before we publish the blind transfer Stasis message. Since the blind transfer has completed, the bridge on which the transfer occurred no longer has any channels on it, so the resulting bridge snapshot has no channels on it. Through investigation of the code, I found that attended transfers can have this issue too for the case where a transferee is transferred to an application." The fix employed here is to decouple the creation of snapshots for the transfer messages from the publication of the transfer messages. This way, snapshots can be created to reflect what they are at the time of the transfer operation. Review: https://reviewboard.asterisk.org/r/4135 ........ Merged revisions 427848 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-14 14:56 +0000 [r427846] Joshua Colp * /, apps/confbridge/conf_state_multi_marked.c: app_confbridge: Play "leader has left" sound even when musiconhold is enabled. Currently if the leader of a conference bridge leaves any participant that has musiconhold enabled will not hear the "leader has left" sound. This is because musiconhold is started and THEN the sound is played. This change makes it so that the sound is played and THEN musiconhold is started. This provides a better experience for users as they may not have known previously why they went back to musiconhold. Review: https://reviewboard.asterisk.org/r/4177/ ........ Merged revisions 427844 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427845 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-14 14:24 +0000 [r427841] Mark Michelson * res/res_pjsip.c, res/res_pjsip_pubsub.c, res/res_pjsip_session.c, include/asterisk/res_pjsip.h: Fix race condition where duplicated requests may be handled by multiple threads. This is the Asterisk 13 version of the patch. The main difference is in the pubsub code since it was completely refactored between Asterisk 12 and 13. Review: https://reviewboard.asterisk.org/r/4175 2014-11-13 22:03 +0000 [r427815] Kevin Harwell * /, res/res_pjsip_outbound_registration.c: res_pjsip_exten_state: PJSIPShowSubscriptionsInbound causes crash When using a non-default sorcery wizard (in this instance realtime) for outbound registrations and after adding in an appropriate call to ast_sorcery_apply_config() (since it is missing) Asterisk will crash after a stack overflow occurs due to the code infinitely recursing. The fix entails removing the outbound registration state dependency from the outbound registration sorcery object and instead keeping an in memory container that can be used to lookup the state when needed. ASTERISK-24514 Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4164/ ........ Merged revisions 427814 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-13 15:44 +0000 [r427789] Kinsey Moore * include/asterisk/stasis.h, include/asterisk/stasis_app.h, res/stasis/app.h, res/res_stasis.c, /, res/stasis/app.c, res/stasis/stasis_bridge.c: Stasis: Fix StasisEnd message ordering This change corrects message ordering in cases where a channel-related message can be received after a Stasis/ARI application has received the StasisEnd message. The StasisEnd message was being passed to applications directly without waiting for the channel topic to empty. As a result of this fix, other bugs were also identified and fixed: * StasisStart messages were also being sent directly to apps and are now routed through the stasis message bus properly * Masquerade monitor datastores were being removed at the incorrect time in some cases and were causing StasisEnd messages to not be sent * General refactoring where necessary for the above * Unsubscription on StasisEnd timing changes to prevent additional messages from following the StasisEnd when they shouldn't A channel sanitization function pointer was added to reduce processing and AO2 lookups. Review: https://reviewboard.asterisk.org/r/4163/ ASTERISK-24501 #close Reported by: Matt Jordan ........ Merged revisions 427788 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-13 00:00 +0000 [r427763] Matthew Jordan * main/rtp_engine.c, /: main/rtp_engine: Fix crash when processing more than one RTCP report info block Asterisk - in res_rtp_asterisk - only understands a single RTCP report info block. When the RTCP information was refactored in the RTP Engine to be pushed over the Stasis message bus, I put in the hooks into the engine to handle multiple RTCP report info blocks, in the hope that a future RTP implementation would be able to provide that data. Unfortunately, res_rtp_asterisk has a tendency to "lie": (1) It will send RTCP reports with a reception_report_count greater than 1 (which is pulled directly from the RTCP packet itself, so that part is correct) (2) It will only provide a single report block When the rtp_engine goes to convert this to a JSON blob, hilarity ensues as it looks for a report block that doesn't exist. This patch updates the rtp_engine to be a bit more skeptical about what it is presented with. While this could also be fixed in res_rtp_asterisk, this patch prefers to fix it in the engine for two reasons: (1) The engine is designed to work with multiple RTP implementation, and hence having it be more robust is a good thing (tm) (2) res_rtp_asterisk's handling of RTCP information is "fun". It should report the correct reception_report_count; ideally it should also be giving us all of the blocks - but it is *definitely* not designed to do that. Going down that road is a non-trivial effort. Review: https://reviewboard.asterisk.org/r/4158/ ASTERISK-24489 #close Reported by: Gregory Malsack Tested by: Gregory Malsack ASTERISK-24498 #close Reported by: Beppo Mazzucato Tested by: Beppo Maazucato ........ Merged revisions 427762 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-12 20:39 +0000 [r427737] Corey Farrell * /, main/features.c: Fix leak in AMI Action Bridge Add missing reference cleanup for newly created bridge. ASTERISK-24281 Reported by: Stefan Engström Review: https://reviewboard.asterisk.org/r/4154/ ........ Merged revisions 427736 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-12 16:12 +0000 [r427711] Joshua Colp * main/pbx.c, /: pbx: Fix off-nominal case where a freed extension may still be used. If during the operation of adding an extension a priority is added but fails it is possible for the extension to be freed but still exist in the PBX core. If this occurs subsequent lookups may try to access the extension and end up in freed memory. This change removes the extension from the PBX core when the priority addition fails and then frees the extension. ASTERISK-24444 #close Reported by: Leandro Dardini Review: https://reviewboard.asterisk.org/r/4162/ ........ Merged revisions 427709 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427710 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-12 13:46 +0000 [r427684] Corey Farrell * codecs/ilbc, /, tests, codecs/speex, apps/confbridge, Makefile.rules: Fix compiler error when using ./configure --enable-dev-mode --enable-coverage When DONT_OPTIMIZE is enabled with dev-mode, it causes a shadow compilation to be done with output to /dev/null. This can cause errors with coverage when GCC attempts to write to /dev/null.gcno. This change disables coverage for the shadow compilation. ASTERISK-24502 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4151/ ........ Merged revisions 427682 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427683 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-09 08:00 +0000 [r427643] Corey Farrell * main/manager.c, /: manager: Fix HTTP connection reference leaks. Fix reference leak that happens if (session && !blastaway). ASTERISK-24505 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4153/ ........ Merged revisions 427641 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427642 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-09 00:38 +0000 [r427583-427615] Matthew Jordan * channels/chan_mgcp.c, /: channels/chan_mgcp: Fix regression which causes gateways to be skipped In r227276, a while loop was turned into a for loop. Unfortunately, a portion of the while loop was left in the code such that, when a static gateway is encountered in the list of MGCP gateways, the next gateway would be skipped. At best, we would simply flip past a gateway; at worst, this could lead to a crash. ASTERISK-24500 #close Reported by: Xavier Hienne patches: chan_mgcp.patch uploaded by Xavier Hienne (License 6657) ........ Merged revisions 427613 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427614 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, addons/chan_mobile.c: addons/chan_mobile: Increase buffer size of UCS2 encoded SMS messages When UCS2 character encoding is used, one symbol in national language can be expanded to 4 bytes. The current buffer used for receiving message in do_monitor_phone is 256 bytes, which is not large enough for incoming messages. For example: * AT+CMGR phone response prefix '+CMGR: "REC UNREAD","+7**********",,"14/10/29,13:31:39+12"\r\n' - 60 bytes * SMS body with UCS2 encoding (max) - 280 bytes * AT+CMGR phone response suffix '\r\n\r\nOK\r\n' - 8 bytes * Terminating null character - 1 byte This results in a needed buffer size of 349 bytes. Hence, this patch opts for a 350 byte buffer. ASTERISK-24468 #close Reported by: Dmitriy Bubnov patches: chan_mobile-1_8.diff uploaded by Dmitriy Bubnov (License 6651) chan_mobile-trunk.diff uploaded by Dmitry Bubnov (License 6651) ........ Merged revisions 427607 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427610 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_voicemail.c: app_voicemail: Fix enhancement that allowed multiple recipients in To: header An issue existed in r420577, which added multiple recipients to voicemail emails. The patch, when looking at the intended recipients, looked ahead for the '|' character inside a while loop which already had pulled out the appropriate field parsing on the '|' character. This would cause it to skip the recipients. This patch fixes it such that it relies completely on the while loop to parse through the e-mail fields. Note that the original author of the patch looked at this fix and approved it. ASTERISK-24250 #close Reported by: abelbeck patches: voicemail-420577-to-comma-fix.diff uploaded by abelbeck (License 5903) * /, bridges/bridge_native_rtp.c: bridge_native_rtp: Fix T.38 issues with remote bridges After r425242 the fax/sip/directmedia_reinvite_t38 test started failing due to the surviving channel not being re-INVITEd back from T.38 to audio. This patch fixes that bug - a deeper explanation of what happened follows. When two RTP channels are in a native bridge, the bridging layer will investigate each via the get_rtp_info glue callback. This callback returns the native bridge preference of the channel *at that moment in time* (that part is key). At different points during the bridging, the native bridging layer will inform the RTP capable channels of the status of the bridge via the update_peer glue callback. In a T.38 scenario with audio direct media, the sequence of events will often look like the following: * SIP/A and SIP/B both have audio and enter a native bridge. * Asterisk re-INVITEs audio between SIP/A and SIP/B directly (via an update_peer callback). * SIP/A sends a re-INVITE to T.38, which causes Asterisk to send a re-INVITE to T.38 to SIP/B. Assuming everyone 200 OKs the process, the UDPTL stack receives UDPTL packets in Asterisk from both endpoints. From the perspective of the channels, we are now in a local bridge for T.38, even though we are technically still in a remote bridge in bridge_native_rtp. (YAY!) * When one side hangs up, bridge_native_rtp is told to stop bridging. It then re-evaluates the channels and asks them how they are bridged - and since T.38 is enabled, they reply with a Local bridge (which is correct), but is wrong because the audio portion is still technically in a remote bridge. * Asterisk releases the surviving channel, whose audio is *not* re-INVITED back to Asterisk as bridge_native_rtp incorrectly assumes that it was in a local bridge. Ironically, prior to r425242, this used to work mostly due to a fluke in the bridging layer. The purpose of the get_rtp_info callback shouldn't be modified: it should tell the bridging layer what kind of bridge the channel prefers at that moment in time. If you have T.38 enabled, that *must* be a local bridge, as the UDPTPL stack must be in the media path. As such, this patch does not modify that part of the code. However, we have to tell the channels to re-evaluate themselves when they come out of a native bridge, since we can no longer trust the get_rtp_info callbacks when the native bridge is being stopped. Something else may have changed in the channels, and they may now be lying to us. As such, this patch makes it so that we unilaterally tell the channels that they are no longer bridged via the update_peer callback. This is actually what the channels expect anyway: code in both chan_sip and chan_pjsip's callbacks look at the T.38 state and - if they were in T.38 - send a re-INVITE to get the audio back to Asterisk. Review: https://reviewboard.asterisk.org/r/4157/ ........ Merged revisions 427582 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-08 18:17 +0000 [r427557] Corey Farrell * /, channels/chan_console.c: chan_console: Fix reference leaks to pvt. Fix a bunch of calls to get_active_pvt where the reference is never released. ASTERISK-24504 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4152/ ........ Merged revisions 427554 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427555 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-06 19:22 +0000 [r427494-427512] Richard Mudgett * apps/app_agent_pool.c, /: app_agent_pool: Made agent alert interruptable by DTMF. Made agent able to interrupt the alerting beep playback with DTMF. Any digit can interrupt if the call does not need to be acknowledged. Only the first digit of the acknowledgement can interrupt if the call needs to be acknowledged. The agent interrupting the alerting playback builds on the ASTERISK-24447 patch because it knows what digit interrupted the playback and needs to be able to pass that digit to the DTMF hook digit collection code. ASTERISK-24257 #close Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4123/ ........ Merged revisions 427508 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, include/asterisk/bridge_channel.h, main/bridge_channel.c: Bridge DTMF hooks: Made audio pass from the bridge while waiting for more matching digits. * Made collecting DTMF digits for the DTMF feature hooks pass frames from the bridge. * Made collecting DTMF digits possible by other bridge hooks if there is a need. ASTERISK-24447 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4123/ ........ Merged revisions 427493 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-06 18:20 +0000 [r427491] Joshua Colp * /, res/res_pjsip/pjsip_distributor.c: res_pjsip: Ensure in-dialog responses have an endpoint associated. When handling incoming messages we determine if it is associated with a dialog. If so we use that to determine what serializer and endpoint to use for the message. Previously this would pass the endpoint to the endpoint lookup module to actually place the endpoint completely on the message. For in-dialog responses, however, this did not occur as dialog processing took over and the endpoint lookup did not occur. This change just places the endpoint in the expected spot immediately instead of relying on the endpoint lookup module. In-dialog responses thus have the expected endpoint. AST-1459 #close Review: https://reviewboard.asterisk.org/r/4146/ ........ Merged revisions 427490 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-06 12:13 +0000 [r427384-427466] Corey Farrell * main/file.c, /: main/file.c: fix possible extra ast_module_unref to format modules. fn_wrapper only adds a reference to the format's module if the file was able to be opened. If not this causes an unmatched ast_module_unref in filestream_destructor. Move ast_module_ref to get_stream. ASTERISK-24492 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4149/ ........ Merged revisions 427464 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427465 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_hep.c, /: res_hep: fix major leak that occurs when config is missing or enabled=no. Add missing unreference in hepv3_send_packet. ASTERISK-24491 #close Reported by: Zane Conkle Tested by: Zane Conkle Review: https://reviewboard.asterisk.org/r/4150/ ........ Merged revisions 427400 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/utils.c, include/asterisk/stringfields.h: Fix unintential memory retention in stringfields. * Fix missing / unreachable calls to __ast_string_field_release_active. * Reset pool->used to zero when the current pool->active reaches zero. ASTERISK-24307 #close Reported by: Etienne Lessard Tested by: ibercom, Etienne Lessard Review: https://reviewboard.asterisk.org/r/4114/ ........ Merged revisions 427380 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 427381 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427382 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-06 02:37 +0000 [r427356] George Joseph * tests/test_strings.c, /: test_strings: Remove string tests that exercise asserts. Since unit tests are run with DO_CRASH, those tests were causing the test to fail. Tested-by: George Joseph ........ Merged revisions 427354 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427355 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-05 19:52 +0000 [r427334] Mark Michelson * res/res_pjsip/config_system.c, configs/samples/pjsip.conf.sample, res/res_pjsip.c: Make the disable_tcp_switch PJSIP system object enabled by default. Testing has shown repeatedly that PJSIP's default behavior of switching automatically to TCP for large messages can cause issues. The most common issues are that devices that we are communicating with do not handle the switch to TCP gracefully, thus causing situations such as broken calls or broken subscriptions. Now, in order to have this behavior happen, you must opt into it. The sample file has been updated to warn that enabling the TCP switch behavior may cause issues for you, so use at your own risk. 2014-11-05 12:18 +0000 [r427303] Joshua Colp * res/res_pjsip_multihomed.c, /: res_pjsip_multihomed: Add logging during startup to aid debugging if local DNS is misbehaving. This change adds a bit of logging so if the local DNS is misbehaving it is easier to track down what is going on and where Asterisk may be hanging. ASTERISK-24438 #close Reported by: Melissa Shepherd Review: https://reviewboard.asterisk.org/r/4148/ ........ Merged revisions 427300 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-05 00:15 +0000 [r427228-427276] George Joseph * pbx/pbx_config.c, main/config.c, tests/test_strings.c, include/asterisk/utils.h, /, main/utils.c: config: Make text_file_save and 'dialplan save' escape semicolons in values. When a config file is read, an unescaped semicolon signals comments which are stripped from the value before it's stored. Escaped semicolons are then unescaped and become part of the value. Both of these behaviors are normal and expected. When the config is serialized either by 'dialplan save' or AMI/UpdateConfig however, the now unescaped semicolons are written as-is. If you actually reload the file just saved, the unescaped semicolons are now treated as start of comments. Since true comments are stripped on read, any semicolons in ast_variable.value must have been escaped originally. This patch re-escapes semicolons in ast_variable.values before they're written to file either by 'dialplan save' or config/ast_config_text_file_save which is called by AMI/UpdateConfig. I also fixed a few pre-existing formatting issues nearby in pbx_config.c Tested-by: George Joseph ASTERISK-20127 #close Review: https://reviewboard.asterisk.org/r/4132/ ........ Merged revisions 427275 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/config.c, /: config: BUG: Restore ability for non-templ to be used as base objs in config. My recent refactor of config.c accidentally removed the capability for an object to inherit from a non-template object. This patch restores the capability to inherit from both template and non-template objects. Tested-by: George Joseph Reported-by: Scott Griepentrog ASTERISK-24487 #close Review: https://reviewboard.asterisk.org/r/4147/ ........ Merged revisions 427227 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-04 19:44 +0000 [r427181-427204] Corey Farrell * funcs/func_talkdetect.c, /: func_talkdetect: Fix stasis message leak in audiohook callback. ASTERISK-24482 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4142/ ........ Merged revisions 427203 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_http_websocket.c: res_http_websockets: Fix extra unref of module In websocket_add_protocol_internal is used to add the "echo" protocol, but ast_websocket_remove_protocol is used to remove it. This causes an extra call to ast_module_unref. ASTERISK-24480 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4140/ ........ Merged revisions 427200 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/app.c: Fix crash caused by merge error on review 4138 When merging from 12 to 13 there were conflicts, I mistakenly had the loop run ast_closestream(others[0]) when it should be ast_closestream(others[x]). 2014-11-03 18:15 +0000 [r427130] Richard Mudgett * /, res/res_pjsip/config_system.c, UPGRADE.txt, configs/samples/pjsip.conf.sample, res/res_pjsip.c: res_pjsip: Add disable_tcp_switch option. When a packet exceeds the MTU, pjproject will switch from UDP to TCP. In some circumstances (on some networks), this can cause some issues with messages not getting sent to the correct destination - and can also cause connections to get dropped due to quirks in pjproject deciding to terminate TCP connections with no messages. While fixing the routing/messaging issues is important, having a configuration option in Asterisk that tells pjproject to not switch over to TCP would be useful. That way, if some glitch is discovered on some other network/site, we can at least disable the behavior until a fix is put into place. AFS-197 #close Review: https://reviewboard.asterisk.org/r/4137/ ........ Merged revisions 427129 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-03 02:34 +0000 [r427021-427089] Corey Farrell * apps/app_voicemail.c, /: Fix compile error caused by review 4138 There is no procedure called ast_closeframe, fix code to use ast_closestream. Reported By: Matt Jordan ........ Merged revisions 427087 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427088 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/app.c, apps/app_voicemail.c, /: Fix ast_writestream leaks Fix cleanup in __ast_play_and_record where others[x] may be leaked. This was caught where prepend != NULL && outmsg != NULL, once realfile[x] == NULL any further others[x] would be leaked. A cleanup block was also added for prepend != NULL && outmsg == NULL. 11+: Fix leak of ast_writestream recording_fs in app_voicemail:leave_voicemail. ASTERISK-24476 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4138/ ........ Merged revisions 427023 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 427024 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427025 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/abstract_jb.c: func_jitterbuffer: fix frame leaks. Fix code paths where it is possible for frames to leak. Fix uninitialized variable in jb_get_fixed and jb_get_adaptive. ASTERISK-22409 #related Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4128/ ........ Merged revisions 427019 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 427020 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-11-02 01:01 +0000 [r426996] Matthew Jordan * /, res/res_stasis.c: res/res_stasis: Fix crash on module unload while performing operation When the res_stasis module is unloaded, it will dispose of the apps_registry container. This is a problem if an ARI operation is in flight that attempts to use the registry, as the shutdown occurs in a separate thread. This patch adds some sanity checks to the various routines that access the registry which cause the operations to fail if the apps_registry does not exist. Crash caught by the Asterisk Test Suite. ........ Merged revisions 426995 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-31 16:50 +0000 [r426934] Tzafrir Cohen * Makefile, /: install init.d files on GNU/kFreeBSD Review: https://reviewboard.asterisk.org/r/4118/ ........ Merged revisions 426926 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426927 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426933 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-31 16:40 +0000 [r426924-426930] Scott Griepentrog * /, configs/samples/pjsip.conf.sample, res/res_pjsip.c: pjsip: clarify tls cert and key file usage A question arose as to whether a .pem file could be provided in place of the .crt and .key files in a PJSIP TLS configuration. I tested this and discovered that although a cert will be read from the pem file, a key will not, and thus the priv_key_file entry is still required. This update to the fine documentation clarifies the option usage. AST-1448 #close Review: https://reviewboard.asterisk.org/r/4129/ Reported by: John Bigelow ........ Merged revisions 426928 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_outbound_registration.c: pjsip: Handle outbound unregister correctly This updates the status of the outbound registration to reflect when it has been unregistered. Since the registration is unregistered but is not stopped, the registration schedule remains active as before. The patch also updates the documentation of both the AMI and CLI commands. ASTERISK-24411 #close Review: https://reviewboard.asterisk.org/r/4119/ Reported by: John Bigelow patches: unregister-patch1.txt uploaded by John Bigelow (License 5091) ........ Merged revisions 426923 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-31 03:26 +0000 [r426865] Matthew Jordan * /, channels/sip/reqresp_parser.c, channels/sip/include/reqresp_parser.h: channels/sip/reqresp_parser: Fix unit tests for r426594 When r426594 was made, it did not take into account a unit test that verified that the function properly populated the unsupported buffer. The function would previously memset the buffer if it detected it had any contents; since this function can now be called iteratively on successive headers, the unit tests would now fail. This patch updates the unit tests to reset the buffer themselves between successive calls, and updates the documentation of the function to note that this is now required. ........ Merged revisions 426858 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426860 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426863 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-31 03:08 +0000 [r426803-426833] Corey Farrell * contrib/Makefile (added), Makefile, /: REF_DEBUG: Install refcounter.py to $(ASTDATADIR)/scripts This change ensures refcounter.py is installed to a place where it can be found by the Asterisk testsuite if REF_DEBUG is enabled. ASTERISK-24432 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4094/ ........ Merged revisions 426830 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426831 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426832 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_queue.c: app_queue: fix a couple leaks to struct call_queue in set_member_value set_member_value has a couple leaks to references in the variable q found through testsuite tests/queues/set_penalty. Also remove the REF_DEBUG_ONLY_QUEUES compiler declaration, this is no longer possible with the updated REF_DEBUG code. ASTERISK-24466 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4125/ ........ Merged revisions 426805 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426806 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/audiohook.c: audiohooks: Clean references to formats Cleanup references to in_translate[x].format and out_translate[x].format in ast_audiohook_detach_list. ASTERISK-24465 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4124/ 2014-10-30 21:13 +0000 [r426757-426780] Kevin Harwell * res/res_pjsip_exten_state.c, /: res_pjsip_exten_state: PJSIPShowSubscriptionsInbound causes crash Currently, it is possible for some subscriptions to get into a NULL state. When this occurs and the PJSIPShowSubscriptionsInbound ami action is issued and a device is subscribed for extension state then the associated subscription state object can't be located. The code then attempts to dereference a NULL object. Added a NULL check to avoid the problem. Reported by: John Bigelow ........ Merged revisions 426779 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip/pjsip_options.c, /: res_pjsip: incorrect qualify statistics after disabling for contact When removing the qualify_frequency from an AoR or a contact the statistics shown when issuing "pjsip show aors" from the CLI are incorrect. This patch deletes the contact's status object from sorcery, disassociating it from the contact, if the qualify_freqency is removed from configuration. ASTERISK-24462 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4116/ ........ Merged revisions 426755 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-30 09:20 +0000 [r426702] Walter Doekes * apps/app_voicemail.c, /: app_voicemail: Fix unchecked bounds of myArray in IMAP_STORAGE. In update_messages_by_imapuser(), messages were appended to a finite array which resulted in a crash when an IMAP mailbox contained more than 256 entries. This memory is now dynamically increased as needed. Observe that this patch adds a bunch of XXX's to questionable code. See the review (url below) for more information. ASTERISK-24190 #close Reported by: Nick Adams Tested by: Nick Adams Review: https://reviewboard.asterisk.org/r/4126/ ........ Merged revisions 426691 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426692 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426696 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-30 06:09 +0000 [r426668] Igor Goncharovskiy * channels/chan_unistim.c, /: Add additional checks for NULL pointers to fix several crashes reported. ASTERISK-24304 #close Reported by: dhanapathy sathya ........ Merged revisions 426666 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426667 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-30 01:59 +0000 [r426597-426602] Matthew Jordan * /, channels/chan_sip.c: channels/chan_sip: Add improved support for 4xx error codes This patch adds support for 414, 493, 479, and a stray 400 response in REGISTER response handling. This helps interoperability in a number of scenarios. Review: https://reviewboard.asterisk.org/r/3437 patches: rb3437.patch uploaded by oej (License 5267) ........ Merged revisions 426599 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426600 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426601 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/sip/reqresp_parser.c, /, channels/chan_sip.c: channels/chan_sip: Support mutltiple Supported and Required headers A SIP request may contain multiple Supported: and Required: headers. Currently, chan_sip only parses the first Supported/Required header it finds. This patch adds support for multiple Supported/Required headers for INVITE requests. Review: https://reviewboard.asterisk.org/r/2478 ASTERISK-21721 #close Reported by: Olle Johansson patches: rb2478.patch uploaded by oej (License 5267) ........ Merged revisions 426594 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426595 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426596 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-29 10:33 +0000 [r426570] Tzafrir Cohen * channels/chan_phone.c: Fix building chan_phone on big endian systems A left over from the formats conversion (Corey Farrell). ASTERISK-24458 #close Review: https://reviewboard.asterisk.org/r/4117/ 2014-10-28 21:26 +0000 [r426552] Richard Mudgett * /, bridges/bridge_builtin_features.c: bridge_builtin_features: Add missing channel locks around ast_get_chan_features_general_config(). The feature_automonitor() and feature_automixmonitor() functions were not locking the channel around ast_get_chan_features_general_config(). Accessing the channel datastore list without the channel locked is a good way to corrupt the list or follow the pointer chain into oblivion. ........ Merged revisions 426531 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-28 21:05 +0000 [r426525-426529] Corey Farrell * /, res/res_fax.c: res_fax: Resolve T38 gateway frame leak. When frames are translated by a fax gateway they need to be freed. The existing call to ast_frfree was unreachable. This change reorganizes fax_gateway_framehook to ensure that ast_frfree is called when needed. ASTERISK-24457 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4115/ ........ Merged revisions 426527 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426528 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: manager: Unsubscribe from acl_change_sub at shutdown. ASTERISK-24453 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4110/ ........ Merged revisions 426524 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-28 18:09 +0000 [r426459] mdavenport : * configs/samples/manager.conf.sample: ASTERISK-23512, correct inaccurate comment in manager.conf.sample 2014-10-28 16:40 +0000 [r426368-426432] Matthew Jordan * /, main/bridge.c: main/bridge: Destroy features struct on off nominal path during bridge impart When a channel is imparted to a bridge, the invocation of the function may provide an ast_bridge_features struct. Upon passing this to ast_bridge_impart, the caller must assume that ownership has passed to the function, as in all paths the function destroys the struct prior to returning (as its purpose is to configure the behavior of the channel while in the bridge). On one off nominal path - where the channel already has a PBX thread - the struct was not being destroyed. This patch fixes that glitch. ASTERISK-24437 #close Reported by: Scott Griepentrog ........ Merged revisions 426431 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: main/manager: Fix typo in AMI event documentation of "OriginateResponse" The parameter name is "Response", not "Resonse". ASTERISK-24430 #close Reported by: Dafi Ni ........ Merged revisions 426366 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426367 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-28 14:56 +0000 [r426294-426362] mdavenport : * res/res_agi.c: ASTERISK-24323, fix bug in documentation of AGI STREAM FILE CONTROL * configs/samples/extensions.conf.sample: ASTERISK-24419, fix incorrect syntax for setting language in extensions.conf.sample 2014-10-28 11:20 +0000 [r426252-426266] Corey Farrell * apps/app_queue.c, /: app_queue: Cleanup ao2_iterator Clean ao2_iterator, resolving reference leak to queue members. ASTERISK-24454 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4111/ ........ Merged revisions 426255 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426260 from http://svn.asterisk.org/svn/asterisk/branches/12 * funcs/func_cdr.c: func_cdr: Fix CDR_PROP payload leak Remove duplicate allocation of payload, preventing leak. ASTERISK-24455 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4113/ 2014-10-27 17:54 +0000 [r426234] Sean Bright * build_tools/menuselect-deps.in, configure, include/asterisk/autoconfig.h.in, configure.ac, makeopts.in: configure: Add autoconf check for libopus. Because opus transcoding support cannot be included in the standard Asterisk distribution, a few codec_opus implementations have popped up. To make it easier for people to drop in opus support in their own installations, this patch adds configure checks for libopus. Review: https://reviewboard.asterisk.org/r/4106/ 2014-10-27 02:46 +0000 [r426143-426211] Matthew Jordan * res/res_http_websocket.c, /: res/res_http_websocket: Fix minor nits found by wdoekes on r409681 When Moises committed the fixes for WSS (which was a great patch), wdoekes had a few style nits that were on the review that got missed. This patch resolves what I *think* were all of the ones that were still on the review. Thanks to both moy for the patch, and wdoekes for the reviews. Review: https://reviewboard.asterisk.org/r/3248/ ........ Merged revisions 426209 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426210 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_phoneprov.c: res/res_phoneprov: Fix crash on shutdown caused by container cleanup In res_phoneprov, unloading the module first destroys the http_routes container, followed by the users. However, users may have a route in the http_routes container; the validity of this container is not checked in the users destructor. Hence, we hit an assert as the container has already been set to NULL. This patch does two things: (1) It adds a sanity check in the user destructor (because why not) (2) It switches the order of destruction, so that users are disposed of prior to the HTTP routes they may hold a reference to. Note that this crash was caught by the Test Suite (go go testing!) ........ Merged revisions 426174 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_srtp.c, /: res/res_srtp: Fix include issue for libsrtp 1.5.0 In libsrtp 1.5.0, crypto_get_random is no longer resolved simply by including srtp.h. Now, one must include crypto_kernel.h as well. As it turns out, this header file has been provided by the library since 2006, so this is a relatively benign change. ASTERISK-24436 #close Reported by: Patrick Laimbock ........ Merged revisions 426140 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 426141 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 426142 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-24 15:17 +0000 [r426120] Jonathan Rose * main/manager.c: Documentation: Improve documentation for ExtensionStatus AMI events Review: https://reviewboard.asterisk.org/r/4085/ 2014-10-24 Asterisk Development Team * Asterisk 13.0.0 Released. 2014-10-22 21:27 +0000 [r426097] Shaun Ruffell * codecs/codec_dahdi.c: codec_dahdi: Cannot use struct ast_translator.core_{src,src}_codec. This fixes a Segmentation fault introduced in r419044 "media formats: re-architect handling of media for performance improvements". The problem is that codec_dahdi was using core_src_codec and core_dst_codec in the ast_translator structure when these fields were never set. Now instead of trying to map the new core codec descriptions to the way DAHDI defines different codecs, we will store the DAHDI specific formats in 'struct translator' directly so we can refer to them without mapping. This also allows us to remove the "global_format_map" structure, since we can now query the list of translators directly to make sure we do not ever register a DAHDI based translator for a specific path more than once and eliminate the need to keep the list and the map in sync. ASTERISK-24435 #close Reported by: Marian Koniuszko Review: https://reviewboard.asterisk.org/r/4105/ 2014-10-21 17:47 +0000 [r426079] Richard Mudgett * main/translate.c: translage.c: Fix regression when generating translation path strings. Fix the AMI Status action read and write translation path strings from growing for each channel in the status event list by reseting the ast string given to ast_translate_path_to_str() to fill in the given translation path. 2014-10-20 14:15 +0000 [r425991] Matthew Jordan * res/res_xmpp.c, main/tcptls.c, /: AST-2014-011: Fix POODLE security issues There are two aspects to the vulnerability: (1) res_jabber/res_xmpp use SSLv3 only. This patch updates the module to use TLSv1+. At this time, it does not refactor res_jabber/res_xmpp to use the TCP/TLS core, which should be done as an improvement at a latter date. (2) The TCP/TLS core, when tlsclientmethod/sslclientmethod is left unspecified, will default to the OpenSSL SSLv23_method. This method allows for all encryption methods, including SSLv2/SSLv3. A MITM can exploit this by forcing a fallback to SSLv3, which leaves the server vulnerable to POODLE. This patch adds WARNINGS if a user uses SSLv2/SSLv3 in their configuration, and explicitly disables SSLv2/SSLv3 if using SSLv23_method. For TLS clients, Asterisk will default to TLSv1+ and WARN if SSLv2 or SSLv3 is explicitly chosen. For TLS servers, Asterisk will no longer support SSLv2 or SSLv3. Much thanks to abelbeck for reporting the vulnerability and providing a patch for the res_jabber/res_xmpp modules. Review: https://reviewboard.asterisk.org/r/4096/ ASTERISK-24425 #close Reported by: abelbeck Tested by: abelbeck, opsmonitor, gtjoseph patches: asterisk-1.8-jabber-tls.patch uploaded by abelbeck (License 5903) asterisk-11-jabber-xmpp-tls.patch uploaded by abelbeck (License 5903) AST-2014-011-1.8.diff uploaded by mjordan (License 6283) AST-2014-011-11.diff uploaded by mjordan (License 6283) ........ Merged revisions 425987 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-19 17:07 +0000 [r425965] George Joseph * Makefile, /, configure, include/asterisk/autoconfig.h.in, configure.ac, makeopts.in: build: Force -fsigned-char on platforms where the default for char is unsigned gcc on the ARM platform defaults 'char' to 'unsigned char' whereas Intel and SPARC default to 'signed char'. This is only an issue in the rare cases where negative values are assigned to a 'char' but this this patch insures compatibility by detecting platforms that default to 'unsigned' and adding an '-fsigned-char' flag to _ASTCFLAGS. If compiling for ARM (native or cross-compile) be sure to run ./bootstrap.sh and ./configure to regenerate the build files. You shouldn't have to do this for Intel or SPARC. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4091/ ........ Merged revisions 425964 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-19 04:01 +0000 [r425923-425944] Matthew Jordan * res/res_pjsip_sdp_rtp.c: res/res_pjsip_sdp_rtp: Revert 425922 This patch for r425922 introduced a bug, wherein sending an INVITE request with no SDP would cause Asterisk to not send an SDP Offer in the 200 OK. The current structure of res_pjsip_sdp_rtp is a bit hard to deal with to fix this, as create_outgoing_sdp has no knowledge of whether or not it is creating an SDP as a new Offer or an Answer. This is something of an oversight in the callback definition, as the caller of it does have this information. * res/res_pjsip_sdp_rtp.c: res/res_pjsip_sdp_rtp: Remove left over reference to override_prefs The usage of the local override_prefs variable in create_outgoing_sdp_stream was previously to track an override format preference set by PJSIP_MEDIA_OFFER. Now, however, that function simply sets the joint capabilities structure, session->req_caps. During the media format rework, the override_prefs was instead used to check if there were any formats in session->req_caps. However, this usage isn't useful in create_outgoing_sdp_stream. session->req_caps contains the negotiated formats for *all* streams, not just the current one being created. Thus, so long as any stream of any type has provided a format, override_prefs will be non-zero. Hence, its usage in checking whether or not we should look at the formats on the endpoint or the joint capabilities is generally useless. There's only two things useful to check: (1) Does the endpoint have a format for the media type? (2) Did we negotiate a format for the media type? If either of those is a 'no', then we must kill the media stream. 2014-10-17 22:43 +0000 [r425905] Jonathan Rose * configs/samples/cli_aliases.conf.sample: Sample Configurations: make 'pjsip reload' reload all reloadable pjsip modules AST-1432 #close Reported by: John Bigelow 2014-10-17 13:35 +0000 [r425821-425879] Matthew Jordan * res/res_pjsip_sdp_rtp.c, res/res_pjsip.c, res/res_pjsip_session.c, /: res_pjsip_session/res_pjsip_sdp_rtp: Be more tolerant of offers When an inbound SDP offer is received, Asterisk currently makes a few incorrection assumptions: (1) If the offer contains more than a single audio/video stream, Asterisk will reject the entire stream with a 488. This is an overly strict response; generally, Asterisk should accept the media streams that it can accept and decline the others. (2) If the offer contains a declined media stream, Asterisk will attempt to process it anyway. This can result in attempting to match format capabilities on a declined media stream, leading to a 488. Asterisk should simply ignore declined media streams. (3) Asterisk will currently attempt to handle offers with AVPF with use_avpf=No/AVP with use_avpf=Yes. This mismatch results in invalid SDP answers being sent in response. If there is a mismatch between the media type being offered and the configuration, Asterisk must reject the offer with a 488. This patch does the following: * Asterisk will accept SDP offers with at least one media stream that it can use. Some WARNING messages have been dropped to NOTICEs as a result. * Asterisk will not accept an offer with a media type that doesn't match its configuration. * Asterisk will ignore declined media streams properly. #SIPit31 Review: https://reviewboard.asterisk.org/r/4063/ ASTERISK-24122 #close Reported by: James Van Vleet ASTERISK-24381 #close Reported by: Matt Jordan ........ Merged revisions 425868 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: channels/chan_sip: Respect outboundproxy setting when sending qualify requests The outboundproxy setting is currently ignored when sending OPTIONS requests as a result of the qualify setting. This means that if an Asterisk server is unable to send the packet directly to a peer, it is unable to qualify any non-inbound registered peer (e.g. a peer SIP Trunk). This patch grabs the outboundproxy information for a peer when a qualify attempt is being constructed and, if it finds the information, uses it when sending the OPTIONS request. Review: https://reviewboard.asterisk.org/r/3948 ASTERISK-24063 #close Reported by: Damian Ivereigh patches: outboundproxy-dai.patch uploaded by Damian Ivereigh (License 6632) ........ Merged revisions 425818 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425819 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425820 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-17 02:41 +0000 [r425783] Richard Mudgett * main/core_unreal.c, main/channel.c, /: AMI: Add missing VarSet events when a channel inherits variables. There should be AMI VarSet events when channel variables are inherited by an outgoing channel. Also local;2 should generate VarSet events when it gets all of its channel variables from channel local;1. ASTERISK-24415 #close Reported by: Richard Mudgett Patches: jira_asterisk_24415_v12.patch (license #5621) patch uploaded by Richard Mudgett Review: https://reviewboard.asterisk.org/r/4074/ ........ Merged revisions 425782 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-17 01:57 +0000 [r425736-425761] Matthew Jordan * /, bridges/bridge_native_rtp.c: bridge_native_rtp: Fix audio issues when moving from remote bridge to softmix When a native RTP bridge that is remotely bridging its participants switches to a softmix bridge, it may not properly re-INVITE the media for one or both participants back to Asterisk. This is due to the current bridge_native_rtp code only re-INVITEs if it believes the channel will survive the bridge operation. Currently, that code is failing, as it expects the channels to have a soft hangup flag set on it indicating that a redirect has occurred or that the channel is going to leave the bridge. (The code did not take into account a smart bridge operation). This patch also renames a few things to be more reflective of the underlying types. Review: https://reviewboard.asterisk.org/r/3997/ ASTERISK-24327 #close ........ Merged revisions 425760 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, tests/test_cel.c: test_cel: Update pickup test to expect CANCEL instead of ANSWSER The CEL pickup test previously looked for a disposition of ANSWER between the original caller/peer when the call is picked up. This is actually incorrect: the disposition should, at the very least, not be ANSWER as the call was never ANSWERed. The disposition is now CANCEL; this patch updates the test accordingly. ........ Merged revisions 425757 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: main/cdr: Use 'time' when rescheduling batched CDRs as opposed to 'size' When refactoring CDRs to use the configuration framework, a 'whoops' was introduced where the CDR batch size was used when rescheduling a batch, as opposed to the time duration. This patch corrects that obvious mistake. ASTERISK-24426 #close Reported by: Shane Blaser ........ Merged revisions 425735 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-16 17:30 +0000 [r425714] George Joseph * include/asterisk/config.h, tests/test_config.c, main/config.c, /: config: Fix inf loop using ast_category_browse and ast_variable_retrieve Fix infinite loop when calling ast_variable_retrieve inside an ast_category_browse loop when there is more than 1 category with the same name. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4089/ ........ Merged revisions 425713 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-16 14:35 +0000 [r425691] Kinsey Moore * res/res_pjsip_t38.c, res/res_pjsip_registrar_expire.c, res/res_pjsip_mwi_body_generator.c, res/res_pjsip_endpoint_identifier_user.c, res/res_pjsip_send_to_voicemail.c, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_outbound_authenticator_digest.c, res/res_pjsip_outbound_registration.c, res/res_pjsip_endpoint_identifier_anonymous.c, res/res_pjsip_path.c, res/res_pjsip_one_touch_record_info.c, res/res_pjsip_acl.c, res/res_pjsip_pubsub.c, res/res_pjsip_diversion.c, res/res_pjsip_refer.c, include/asterisk/res_pjsip.h, res/res_pjsip_pidf_body_generator.c, res/res_pjsip_dtmf_info.c, res/res_pjsip_multihomed.c, res/res_pjsip_authenticator_digest.c, res/res_pjsip_sdp_rtp.c, res/res_hep_pjsip.c, res/res_pjsip_messaging.c, res/res_pjsip_caller_id.c, res/res_pjsip_logger.c, res/res_pjsip_nat.c, res/res_pjsip_session.c, res/res_pjsip_exten_state.c, res/res_pjsip_header_funcs.c, res/res_pjsip_rfc3326.c, res/res_pjsip_phoneprov_provider.c, res/res_pjsip_mwi.c, res/res_pjsip_dialog_info_body_generator.c, res/res_pjsip_xpidf_body_generator.c, res/res_pjsip_registrar.c, channels/chan_pjsip.c, res/res_pjsip_transport_websocket.c, res/res_pjsip_pidf_eyebeam_body_supplement.c, include/asterisk/res_pjsip_session.h, /, res/res_pjsip_notify.c, res/res_pjsip_pidf_digium_body_supplement.c, res/res_pjsip_endpoint_identifier_ip.c, res/res_pjsip_publish_asterisk.c: PJSIP: Enforce module load dependencies This enforces that res_pjsip, res_pjsip_session, and res_pjsip_pubsub have loaded properly before attempting to load any modules that depend on them since the module loader system is not currently capable of resolving module dependencies on its own. ASTERISK-24312 #close Reported by: Dafi Ni Review: https://reviewboard.asterisk.org/r/4062/ ........ Merged revisions 425690 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-16 06:11 +0000 [r425669] Igor Goncharovskiy * channels/chan_unistim.c, /: Fix loss of voice after second call drops (on a second line) in case using multiple lines on unistim phones. There is regression was introduced in r391379. Reported by: Rustam Khankishyiev (closes issue ASTERISK-23846) ........ Merged revisions 425667 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425668 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-16 01:25 +0000 [r425646] Joshua Colp * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix a bug where ICE state would get reset when it shouldn't. In the case where the ICE negotiation had not yet started current state would get wiped when it shouldn't. This also removes channel binding as in practice this does not work well with other implementations. ........ Merged revisions 425644 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425645 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-15 19:31 +0000 [r425627] Richard Mudgett * channels/chan_motif.c: chan_motif: Cleanup jingle_tech.capabilities only once. 2014-10-15 19:05 +0000 [r425611] Jonathan Rose * res/parking/parking_tests.c: parking_tests: Fix assertions and possibly crashes in res_parking unit tests Assertions were caused by attempting to play music on hold to a channel with no formats. Parking unit test channels were given formats and a technology so that they would be able to pretend to read/write frames. ASTERISK-24413 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4075/ 2014-10-15 09:59 +0000 [r425590] Alexandr Anikin * addons/chan_ooh323.c, /: chan_ooh323: fix rtptimeout general value checking correct condition to check rtptimeout in [general] config section ASTERISK-24393 #close Reported by: Dmitry Melekhov Tested by: Dmitry Melekhov Patches: ASTERISK-24393.patch ........ Merged revisions 425547 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425548 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425589 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 20:46 +0000 [r425526] George Joseph * /, include/asterisk/config.h, tests/test_config.c, main/config.c: config: Fix SEGV in unit test with MALLOC_DEBUG With MALLOC_DEBUG the /main/config config_basic_ops test was causing a SEGV while doing an ast_category_delete in an ast_category_browse loop. Apparently this never worked but was also never tested. I removed the test, added 2 notes to config.h indicating that it's not supported and added a few lines of code to ast_category_delete to prevent the SEGV should someone attempt it in the future. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4078/ ........ Merged revisions 425525 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 19:00 +0000 [r425504] Jonathan Rose * main/sched.c, /: Scheduler: Fix a nasty scheduler caching bug which makes new tasks not execute Tasks that were marked for pending deletion in the scheduler would be moved to the cache for later reuse, but after being recycled the deleted mark wouldn't be removed resulting in fresh tasks being deleted without reason... and immediately moved back into the cache where they could be reused again. This could cause horrendous things to happen in just about anything that used a scheduler. ASTERISK-24321 #close Reported by: Steve Pitts Review: https://reviewboard.asterisk.org/r/4071/ ........ Merged revisions 425503 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 18:12 +0000 [r425481] George Joseph * res/res_phoneprov.c, include/asterisk/phoneprov.h, /, res/res_pjsip_phoneprov_provider.c: res_phoneprov: Create accessor for ast_phoneprov_std_variable_lookup Based on feedback from Richard, I created an accessor for res_phoneprov/ast_phoneprov_std_variable_lookup and added load priority to AST_MODULE_INFO. Tested-by: George Joseph Tested-by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4076/ ........ Merged revisions 425480 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 16:46 +0000 [r425459] Corey Farrell * /, res/res_fax.c: res_fax: Fix reference leak caused by gateway sessions Fax gateway session objects can be re-used, causing the same gateway session to be added to faxregistry.container more than once. This change causes fax_session_new to remove the reserved session from the container before it's id is changed, ensuring it's possible for the session to be freed. ASTERISK-24392 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4049/ ........ Merged revisions 425457 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425458 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 16:35 +0000 [r425455] Richard Mudgett * /, main/stasis_channels.c: stasis_channels.c: Resolve unfinished Dials when doing masquerades (Part 2) Masquerades into and out of channels that are involved in a dial operation don't create the expected dial end event. The missing dial end event goes against the model for things like CDRs and generating Dial end manager actions and such. There are four cases: 1) A channel masquerades into the caller channel. The case happens when performing a blonde transfer using the channel driver's protocol. 2) A channel masquerades into a callee channel. The case happens when performing a directed call pickup. 3) The caller channel masquerades out of dial. The case happens when using the Bridge application on the caller channel. 4) A callee channel masquerades out of dial. The case happens when using the Bridge application on a peer channel. As it turned out, all four cases need to be handled instead of just the first one. ASTERISK-24237 Reported by: Richard Mudgett ASTERISK-24394 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/4066/ ........ Merged revisions 425430 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-14 16:19 +0000 [r425415] Corey Farrell * /, res/res_fax.c: res_fax: Resolve module reference leak caused by reserved sessions Remove reference to module providing reserved session after adding a reference to the final module. This re-reference is done to ensure that module references are correct even if the final session selects a different module than the reserved session. ASTERISK-18923 #close Reported by: Grigoriy Puzankin Review: https://reviewboard.asterisk.org/r/4048/ ........ Merged revisions 425405 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425407 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425411 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-13 16:10 +0000 [r425384] George Joseph * apps/app_directory.c, tests/test_sorcery.c, main/config.c, tests/test_sorcery_realtime.c, res/res_sorcery_realtime.c, apps/app_voicemail.c, res/res_sorcery_config.c, main/manager.c, /, include/asterisk/config.h, pbx/pbx_realtime.c, tests/test_config.c: manager/config: Support templates and non-unique category names via AMI This patch provides the capability to manipulate templates and categories with non-unique names via AMI. Summary of changes: GetConfig and GetConfigJSON: Added "Filter" parameter: A comma separated list of name_regex=value_regex expressions which will cause only categories whose variables match all expressions to be considered. The special variable name TEMPLATES can be used to control whether templates are included. Passing 'include' as the value will include templates along with normal categories. Passing 'restrict' as the value will restrict the operation to ONLY templates. Not specifying a TEMPLATES expression results in the current default behavior which is to not include templates. UpdateConfig: NewCat now includes options for allowing duplicate category names, indicating if the category should be created as a template, and specifying templates the category should inherit from. The rest of the actions now accept a filter string as defined above. If there are non-unique category names, you can now update specific ones based on variable values. To facilitate the new capabilities in manager, corresponding changes had to be made to config, most notably the addition of filter criteria to many of the APIs. In some cases it was easy to change the references to use the new prototype but others would have required touching too many files for this patch so a wrapper with the original prototype was created. Macros couldn't be used in this case because it would break binary compatibility with modules such as res_digium_phone that are linked to real symbols. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4033/ ........ Merged revisions 425383 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-12 21:09 +0000 [r425362] Joshua Colp * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Make the ICE transport check case insensitive as some implementations use 'udp'. ........ Merged revisions 425360 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425361 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-12 08:15 +0000 [r425289-425299] Walter Doekes * /, channels/chan_sip.c: chan_sip: Fix so asterisk won't send reINVITE after a BYE. After a reINVITE glare situation, Asterisk would re-send the reINVITE even though the call had been hung up in the mean time. This patch unschedules the reinvite when handling the BYE. ASTERISK-22791 #close Reported by: Paolo Compagnini Tested by: Paolo Compagnini Review: https://reviewboard.asterisk.org/r/4056/ (testcase is in review r4055) ........ Merged revisions 425296 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425297 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425298 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, Makefile: build: Relax badshell tilde test to allow for ~ in middle of DESTDIR. The main Makefile has a target test called 'badshell' that tests if DESTDIR does not happen to have an an-expanded tilde (~). This might be the case if you run: make install DESTDIR=~/somewhere/ That test also disallowed valid tildes in directory names. The test is now changed to only trigger on a tilde at the start of the path. ASTERISK-13797 #close Reported by: Tzafrir Cohen Review: https://reviewboard.asterisk.org/r/4064/ ........ Merged revisions 425291 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425292 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425293 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_calendar_ews.c: res_calendar_ews: Relax neon version check to work with 0.30 too. Allow res_calendar_ews to work not only with libneon-0.29 but also with 0.30. ASTERISK-24325 #close Reported by: Tzafrir Cohen Review: https://reviewboard.asterisk.org/r/4068/ ........ Merged revisions 425286 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425287 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425288 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-11 21:08 +0000 [r425265] George Joseph * /, res/res_phoneprov.c: res_phoneprov: Cleanup module load error handling Tested module load/reload interaction between res_phoneprov and res_pjsip_phoneprov_provider in cases where res_phoneprov didn't load correctly (usually misconfiguration or missing phoneprov.conf) Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/4069/ ........ Merged revisions 425264 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 20:48 +0000 [r425243] Joshua Colp * /, main/bridge.c, bridges/bridge_native_rtp.c: bridge: During a smart bridge operation provide a more complete bridge to the old technology. When a smart bridge operation occurs and a bridge transitions from one technology to another the old technology is provided the channels formerly in it and told that they are leaving. Unfortunately the bridge provided along with them is incomplete. The bridge, despite there being channels in it, contains none. This forces technology implementations to have additional logic when channels are leaving or to store their own duplicated state. This change makes the bridge more complete so it contains the expected channels. Now that the bridge is complete special logic within bridge_native_rtp is no longer needed and has been removed. Review: https://reviewboard.asterisk.org/r/4057/ ........ Merged revisions 425242 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 14:31 +0000 [r425221] Matthew Jordan * /, res/res_phoneprov.c: res/res_phoneprov: Bail on registration if res_phoneprov didn't load If res_phoneprov failed to fully load (due to not being configured), the providers container will be NULL. If a module attempts to register a phone provisioning provider, it should check for the presence of the container. If there is no providers container, it should return an error. This patch makes the ast_phoneprov_provider_register function do that... otherwise this would be a silly commit message. ........ Merged revisions 425220 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 14:23 +0000 [r425217] Joshua Colp * /, res/res_pjsip_phoneprov_provider.c: res_pjsip_phoneprov_provider: Add missing dependency on pjproject. ........ Merged revisions 425216 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 13:01 +0000 [r425155] Kinsey Moore * /, tests/test_callerid.c, main/callerid.c: CallerID: Fix parsing regression This fixes a regression in callerid parsing introduced when another bug was fixed. This bug occurred when the name was composed entirely of DTMF keys and quoted without a number section (<>). ASTERISK-24406 #close Reported by: Etienne Lessard Tested by: Etienne Lessard Patches: callerid_fix.diff uploaded by Kinsey Moore Review: https://reviewboard.asterisk.org/r/4067/ ........ Merged revisions 425152 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425153 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425154 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 12:10 +0000 [r425132] Joshua Colp * res/res_pjsip_nat.c, /: res_pjsip_nat: Place source port into rport of responses if 'force_rport' is on. When the 'force_rport' option is enabled the behavior should be the same as if the remote side placed rport into the message themselves. Therefore any responses we send should include the source port of the request in the rport of the Via header. #SIPit31 ASTERISK-24387 #close Reported by: Matt Jordan ........ Merged revisions 425131 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-10 07:32 +0000 [r425071] Walter Doekes * /, channels/chan_sip.c: chan_sip: Fix dialog leak resulting from missing ACK to re-INVITE. If a device re-INVITEs at the same time as the dialog is hung up, and if then the ACK to the re-INVITE never reaches Asterisk, chan_sip would fail to destroy the dialog after a while. This resulted in (most prominently) file handle leaks. (Patch reindented by me.) ASTERISK-20784 #close ASTERISK-15879 #close Reported by: Torrey Searle, Nitesh Bansal Patches: reinvite_ack_timeout.patch uploaded by Torrey Searle (License #5334) patch_asterisk_20784.txt uploaded by Nitesh Bansal (License #6418) Reviewboard: https://reviewboard.asterisk.org/r/4052/ (testcase can be found at r4051) ........ Merged revisions 425068 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 425069 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 425070 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 23:35 +0000 [r425052] George Joseph * res/res_pjsip_phoneprov_provider.c: res_pjsip_phoneprov_provider: fix compile breakage on AST_VECTOR endpoint->inbound_auths was changed to a vector in 13 and I committed the 12 patch instead of the 13 patch. Tested-by: George Joseph 2014-10-09 21:38 +0000 [r425031] Kevin Harwell * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Crash if no candidates received for component When starting ice if there is not at least one remote ice candidate with an RTP component asterisk will crash. This is due to an assertion in pjnath as it expects at least one candidate with an RTP component. Added a check to make sure at least one candidate contains an RTP component and at least one candidate has an RTCP component. ASTERISK-24383 #close Review: https://reviewboard.asterisk.org/r/4039/ ........ Merged revisions 425030 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 20:54 +0000 [r425008] George Joseph * /, res/res_pjsip_phoneprov_provider.c (added), configs/samples/pjsip.conf.sample: res_pjsip_phoneprov_provider: Provides pjsip integration with res_phoneprov This module allows res_pjsip to integrate with res_phoneprov. It handles the pjsip 'phoneprov' object type. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/3976/ ........ Merged revisions 425007 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 18:37 +0000 [r424986] Matthew Jordan * /, res/res_phoneprov.c: res/res_phoneprov: Don't cancel Asterisk load on module load failure ........ Merged revisions 424985 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 17:45 +0000 [r424964] George Joseph * include/asterisk/phoneprov.h (added), /, configs/samples/phoneprov.conf.sample, include/asterisk/chanvars.h, res/res_phoneprov.c, res/res_phoneprov.exports.in (added), main/chanvars.c: res_phoneprov: Refactor phoneprov to allow pluggable config providers This patch makes res_phoneprov more modular so other modules (like pjsip) can provide configuration information instead of res_phoneprov relying solely on users.conf and sip.conf. To accomplish this a new ast_phoneprov public API is now exposed which allows config providers to register themselves, set defaults (server profile, etc) and add user extensions. * ast_phoneprov_provider_register registers the provider and provides callbacks for loading default settings and loading users. * ast_phoneprov_provider_unregister clears the defaults and users. * ast_phoneprov_add_extension should be called once for each user/extension by the provider's load_users callback to add them. * ast_phoneprov_delete_extension deletes one extension. * ast_phoneprov_delete_extensions deletes all extensions for the provider. Tested-by: George Joseph Review: https://reviewboard.asterisk.org/r/3970/ ........ Merged revisions 424963 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 16:36 +0000 [r424942] Richard Mudgett * /, main/cdr.c: cdr.c: Make turning on CDR debug a one step process instead of two. Now "cdr set debug on" doesn't also require "core set verbose 1" to see CDR debug output. ........ Merged revisions 424941 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-09 08:08 +0000 [r424880] Walter Doekes * /, contrib/scripts/safe_asterisk: safe_asterisk: Don't automatically exceed MAXFILES value of 2^20. On systems with lots of RAM (e.g. 24GB) /proc/sys/fs/file-max divided by two can exceed the per-process file limit of 2^20. This patch ensures the value is capped. (Patch cleaned up by me.) ASTERISK-24011 #close Reported by: Michael Myles Patches: safe_asterisk-ulimit.diff uploaded by Michael Myles (License #6626) ........ Merged revisions 424875 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 424878 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424879 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-08 18:46 +0000 [r424854] Joshua Colp * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Allow only UDP ICE candidates. The underlying library, pjnath, that res_rtp_asterisk uses for ICE support does not have support for ICE-TCP. As candidates are passed through directly to it this can cause error messages to occur when it receives something unexpected (such as a TCP candidate). This change merely ignores all non-UDP candidates so they never reach pjnath. ASTERISK-24326 #close Reported by: Joshua Colp ........ Merged revisions 424852 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424853 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-08 18:24 +0000 [r424769-424850] Kinsey Moore * main/stasis.c: Stasis: Relegate log message to dev-mode This error message primarily applies to development tasks and will now only show up when dev-mode is enabled via configure. * main/sounds_index.c: Indexer: Format message types may not exist In Asterisk 13+, any given message type is not guaranteed to exist even if Asterisk comes up correctly since creation of the message type could be declined. The indexer should not prevent Asterisk from starting under these conditions. * main/stasis.c: Stasis: Only log errors for non-declined types When message type creation is declined via stasis.conf, certain operations log errors assuming that the declined type is being used before initialization or after destruction. These error messages get quite spammy for oft used message types and should not be logged in the first place since the message type is validly NULL. Reported by: Matt DiMeo 2014-10-07 18:33 +0000 [r424752] Joshua Colp * main/data.c: data: Properly access formats in capabilities structure when adding codecs. Formats within a capabilities structure are addressed starting at 0, not 1. Assuming 1 causes it to exceed an array. ASTERISK-24389 #close Reported by: Kevin Harwell 2014-10-07 17:41 +0000 [r424692-424731] Matthew Jordan * /, res/res_pjsip_outbound_registration.c: res/res_pjsip_outbound_registration: Initialize auth_reject_permanent parameter Prior to this patch, the auth_reject_permanent parameter was not initialized on the registration client state, leading to the parameter being disabled regardless of the value specified in pjsip.conf. This patch initialized the setting on the registration client state to the provided configuration value. ASTERISK-24398 #close ........ Merged revisions 424730 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pubsub.c: res/res_pjsip_pubsub: Fix typo in WARNING message * main/message.c, /: message: Don't close an AMI connection on SendMessage action error If SendMessage encounters an error (such as incorrect input provided to the action), it will currently return -1. Actions should only return -1 if the connection to the AMI client should be closed. In this case, SendMessage causing the client to disconnect is inappropriate. This patch causes the action to return 0, which simply causes the action to fail. Review: https://reviewboard.asterisk.org/r/4024 ASTERISK-24354 #close Reported by: Peter Katzmann patches: sendMessage.patch uploaded by Peter Katzmann (License 5968) ........ Merged revisions 424690 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424691 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-06 15:38 +0000 [r424669] Richard Mudgett * main/features.c, /: features.c: Fix lingering channel ref while Bridge() application is active. Using the Bridge application to bridge a channel that is executing an applicaiton such as Wait results in a lingering Surrogate channel in the CLI "core show channels" output even though it has already hungup. * Fix bridge_exec() to not hold onto the current_dest_chan ref once it has been put into the bridge. * Eliminated bridge_exec()'s use of RAII_VAR(). ASTERISK-24224 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4041/ ........ Merged revisions 424668 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-06 12:38 +0000 [r424601-424647] Matthew Jordan * /, main/sdp_srtp.c: sdp_srtp: Add new lines to some WARNING messages ........ Merged revisions 424646 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_options.c: res_pjsip/pjsip_options: Do not 404 an OPTIONS request not sent to an endpoint An OPTIONS request that is sent to Asterisk but not to a specific endpoint is currently sent a 404 in response. This is because, not surprisingly, an empty extension is never going to be found in the dialplan. This patch makes it so that we only attempt to look up the endpoint in the dialplan if it is specified in the OPTIONS request URI. #SIPit31 ASTERISK-24370 #close Reported by: Matt Jordan ........ Merged revisions 424624 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/pjsip/dialplan_functions.c, /: pjsip/dialplan_functions: Handle PJSIP_MEDIA_OFFER called on non-PJSIP channels Calling PJSIP_MEDIA_OFFER on a non-PJSIP channel is hazardous to your health. It will treat the channels as a PJSIP channel, eventually hitting an ao2 error, FRACKing on assertion error, and quite likely crashing. This patch adds checks to the read/write callbacks that ensure that the channel technology is of type 'PJSIP' before attempting to operate on the channel. #SIPit31 ASTERISK-24382 #close Reported by: Matt Jordan ........ Merged revisions 424621 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_hep_pjsip.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip_logger.c: res_pjsip: Prevent crashes when PJPROJECT presents an rdata with no message When a message that exceeds the PJ_MAX_PKT_SIZE is sent over a reliable transport, it is possible (although it shouldn't occur) for pjproject to pass up an rdata object with a NULL msg in the msg_info. Needless to say, things that attempt to dereference this are in for a rough ride. In particular, this caused crashes in three different locations, all of which are 'low level' enough to intercept an rdata object early in processing: (1) res_pjsip_logger (2) res_hep_pjsip (3) res_pjsip/distributor Anything that can intercept an rdata object before res_pjsip/distributor should be defensive when looking at the received packet. #SIPit31 ASTERISK-24369 #close Reported by: Matt Jordan ........ Merged revisions 424618 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pubsub.c: res/res_pjsip_pubsub: Gracefully handle errors when re-creating subscriptions A subscription that has been persisted can - for various reasons - fail to be re-created on startup. This patch resolves a number of crashes that occurred when a subscription cannot be re-created on several off-nominal paths. #SIPit31 ASTERISK-24368 #close Reported by: Matt Jordan 2014-10-05 00:48 +0000 [r424552-424580] Corey Farrell * main/manager.c, /: Release AMI connections on shutdown. ASTERISK-24378 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4037/ ........ Merged revisions 424578 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424579 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_motif.c: chan_motif: Correct last commit to use ao2_cleanup to free format cap This fix applies to 13 and trunk. ASTERISK-24384 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4043/ * /, channels/chan_motif.c: chan_motif: Release format capabilities and config on module load error ASTERISK-24384 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4043/ ........ Merged revisions 424550 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424551 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-03 21:56 +0000 [r424472-424529] Richard Mudgett * /, CHANGES, res/res_pjsip.c: res_pjsip: Fix XML typo and update CHANGES. ASTERISK-24199 ........ Merged revisions 424528 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/audiohook.c, apps/app_chanspy.c, apps/app_mixmonitor.c, /, main/framehook.c: audiohooks: Reevaluate the bridge technology when an audiohook is added or removed. Adding a mixmonitor to a channel causes the bridge to change technologies from native to simple_bridge so the call can be recorded. However, when the mixmonitor is stopped the bridge does not switch back to the native technology. * Added unbridge requests to reevaluate the bridge when a channel audiohook is removed. * Moved the unbridge request into ast_audiohook_attach() ensure that the bridge reevaluates whenever an audiohook is attached. This simplified the mixmonitor and chan_spy start code as well. * Added defensive code to stop_mixmonitor_full() in case additional arguments are ever added to the StopMixMonitor application. * Made ast_framehook_detach() not do an unbridge request if the framehook does not exist. * Made ast_framehook_list_fixup() do an unbridge request if there are any framehooks. Also simplified the loop. ASTERISK-24195 #close Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/4046/ ........ Merged revisions 424506 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/core_unreal.c, main/taskprocessor.c, channels/chan_iax2.c, res/res_pjsip_session.c, main/channel.c, channels/chan_misdn.c, channels/chan_skinny.c, funcs/func_frame_trace.c, channels/chan_motif.c, include/asterisk/frame.h, main/bridge_channel.c, channels/chan_pjsip.c, channels/chan_unistim.c, include/asterisk/res_pjsip_session.h, addons/chan_ooh323.c, /, include/asterisk/taskprocessor.h, channels/chan_sip.c, res/res_pjsip_session.exports.in: chan_pjsip: Fix deadlock when masquerading PJSIP channels. Performing a directed call pickup resulted in a deadlock when PJSIP channels were involved. A masquerade needs to hold onto the channel locks while it swaps channel information between the two channels involved in the masquerade. With PJSIP channels, the fixup routine needed to push a fixup task onto the PJSIP channel's serializer. Unfortunately, if the serializer was also processing a task that needed to lock the channel, you get deadlock. * Added a new control frame that is used to notify the channels that a masquerade is about to start and when it has completed. * Added the ability to query taskprocessors if the current thread is the taskprocessor thread. * Added the ability to suspend/unsuspend the PJSIP serializer thread so a masquerade could fixup the PJSIP channel without using the serializer. ASTERISK-24356 #close Reported by: rmudgett Review: https://reviewboard.asterisk.org/r/4034/ ........ Merged revisions 424471 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-03 15:54 +0000 [r424448] George Joseph * /, main/sorcery.c: sorcery: Prevent SEGV in sorcery_wizard_create when there's no create function When you call ast_sorcery_create() you don't necessarily know which wizard is going to be invoked. If it happens to be a wizard like 'config' that doesn't have a 'create' virtual function you get a segfault in the sorcery_wizard_create callback. This patch catches the null function pointer, does an ast_assert, and logs an error. Review: https://reviewboard.asterisk.org/r/4044/ ........ Merged revisions 424447 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-03 13:58 +0000 [r424424-424427] Kinsey Moore * configs/samples/pjsip.conf.sample, /, res/res_pjsip/pjsip_configuration.c: PJSIP: Restore functional default for callerid_privacy The pjsip config option default fixups from r424263 altered the functional default from "allowed_not_screened" to "allowed". This change restores the functional default value when none is provided. ........ Merged revisions 424426 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: Manager: Add missing fields and documentation for CoreShowChannels This corrects some issues introduced in the responses to the CoreShowChannels AMI command as well as adding documentation for the responses. The command in Asterisk 12 was missing the following fields: Duration, Application, ApplicationData, and BridgedChannel and BridgedUniqueID (replaced with BridgeId). ASTERISK-24262 #close Reported by: Mitch Claborn Review: https://reviewboard.asterisk.org/r/4040/ ........ Merged revisions 424423 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-03 07:54 +0000 [r424415] Joshua Colp * res/res_pjsip_session.c, /: res_pjsip_session: Reduce SDP size by removing duplicate connection lines. Due to the architecture of how media streams are handled each individual handler adds connection details (IP address) for it. The first media stream is then used as the top level SDP connection line. In practice each line ends up being the same so to reduce the SDP size stream-level connection information is also added to the SDP if it differs from the top level SDP connection line. ........ Merged revisions 424414 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-02 21:52 +0000 [r424394] Richard Mudgett * /, configs/samples/pjsip.conf.sample, res/res_pjsip.c, res/res_pjsip/config_transport.c: res_pjsip: Make transport cipher option accept a comma separated list of cipher names. Improvements to the res_pjsip transport cipher option. * Made the cipher option accept a comma separated list of OpenSSL cipher names. Users of realtime will be glad if they have more than one name to list. * Added the CLI command 'pjsip list ciphers' so a user can know what OpenSSL names are available for the cipher option. * Updated the cipher option online XML documentation to specify what is expected for the value. * Updated pjsip.conf.sample to not indicate that ALL is acceptable since ALL does not imply a preference order for the ciphers and PJSIP does not simply pass the string to OpenSSL for interpretation. ASTERISK-24199 #close Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/4018/ ........ Merged revisions 424393 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-02 20:15 +0000 [r424373] Jonathan Rose * /, contrib/ast-db-manage/config/versions/10aedae86a32_add_outgoing_enum_va.py (added): Alembic: Add enumerator value to sippeers -> directmedia - 'outgoing' The 'outgoing' value was left off of the enumerator when first creating the column. This patch adds it, and should gracefully upgrade keeping the existing data in tact. ASTERISK-23781 #close Reported by: Stephen More Review: https://reviewboard.asterisk.org/r/4013/ ........ Merged revisions 424372 f