2021-02-18 16:51 +0000 Asterisk Development Team * asterisk certified/16.8-cert6 Released. 2021-02-01 15:24 +0000 [bb5b336f78] Kevin Harwell * AST-2021-002: Remote crash possible when negotiating T.38 When an endpoint requests to re-negotiate for fax and the incoming re-invite is received prior to Asterisk sending out the 200 OK for the initial invite the re-invite gets delayed. When Asterisk does finally send the re-inivite the SDP includes streams for both audio and T.38. This happens because when the pending topology and active topologies differ (pending stream is not in the active) in the delayed scenario the pending stream is appended to the active topology. However, in the fax case the pending stream should replace the active. This patch makes it so when a delay occurs during fax negotiation, to or from, the audio stream is replaced by the T.38 stream, or vice versa instead of being appended. Further when Asterisk sent the re-invite with both audio and T.38, and the endpoint responded with a declined T.38 stream then Asterisk would crash when attempting to change the T.38 state. This patch also puts in a check that ensures the media state has a valid fax session (associated udptl object) before changing the T.38 state internally. ASTERISK-29203 #close Change-Id: I407f4fa58651255b6a9030d34fd6578cf65ccf09 2021-01-26 11:09 +0000 [93468c531a] Alexander Traud * rtp: Enable srtp replay protection Add option "srtpreplayprotection" rtp.conf to enable srtp replay protection. ASTERISK-29260 Reported by: Alexander Traud Change-Id: I5cd346e3c6b6812039d1901aa4b7be688173b458 2020-12-11 14:49 +0000 [07eddbd56a] Sean Bright * res_rtp_asterisk.c: Fix signed mismatch that leads to overflow ASTERISK-29205 #close Change-Id: Ib7aa65644e8df76e2378d7613ee7cf751b9d0bea 2021-02-05 05:26 +0000 [23e96e6e17] Joshua C. Colp * pjsip: Make modify_local_offer2 tolerate previous failed SDP. If a remote side is broken and sends an SDP that can not be negotiated the call will be torn down but there is a window where a second 183 Session Progress or 200 OK that is forked can be received that also attempts to negotiate SDP. Since the code marked the SDP negotiation as being done and complete prior to this it assumes that there is an active local and remote SDP which it can modify, while in fact there is not as the SDP did not successfully negotiate. Since there is no local or remote SDP a crash occurs. This patch changes the pjmedia_sdp_neg_modify_local_offer2 function to no longer assume that a previous SDP negotiation was successful. ASTERISK-29196 Change-Id: I22de45916d3b05fdc2a67da92b3a38271ee5949e 2020-12-16 06:17 +0000 [6b5306ecc5] Joshua C. Colp * res_pjsip_pidf_digium_body_supplement: Support Sangoma user agent. This adds support for both Digium and Sangoma user agent strings for the Sangoma specific body supplement. Change-Id: Ib99362b24b91d3cbe888d8b2fce3fad5515d9482 (cherry picked from commit 7e4bb4ed11b2741ff6cd47a95fb6e815a5e1d901) 2020-11-05 21:06 +0000 Asterisk Development Team * asterisk certified/16.8-cert5 Released. 2020-10-19 17:21 +0000 [81b48f2d10] Kevin Harwell * AST-2020-001 - res_pjsip: Return dialog locked and referenced pjproject returns the dialog locked and with a reference. However, in Asterisk the method that handles this decrements the reference and removes the lock prior to returning. This makes it possible, under some circumstances, for another thread to free said dialog before the thread that created it attempts to use it again. Of course when the thread that created it tries to use a freed dialog a crash can occur. This patch makes it so Asterisk now returns the newly created dialog both locked, and with an added reference. This allows the caller to de-reference, and unlock the dialog when it is safe to do so. In the case of a new SIP Invite the lock, and reference are now held for the entirety of the new invite handling process. Otherwise it's possible for the dialog, or its dependent objects, like the transaction, to disappear. For example if there is a TCP transport error. ASTERISK-29057 #close Change-Id: I5ef645a47829596f402cf383dc02c629c618969e 2020-11-02 10:29 +0000 [6057050899] Ben Ford * AST-2020-002 - res_pjsip: Stop sending INVITEs after challenge limit. If Asterisk sends out an INVITE and receives a challenge with a different nonce value each time, it will continuously send out INVITEs, even if the call is hung up. The endpoint must be configured for outbound authentication for this to occur. A limit has been set on outbound INVITEs so that, once reached, Asterisk will stop sending INVITEs and the transaction will terminate. ASTERISK-29013 Change-Id: I2d001ca745b00ca8aa12030f2240cd72363b46f7 2020-11-05 17:58 +0000 Asterisk Development Team * asterisk certified/16.8-cert4 Released. 2020-11-05 11:53 +0000 [5e146dde81] Asterisk Development Team * Update CHANGES and UPGRADE.txt for certified/16.8-cert4 2020-11-04 11:31 +0000 [f777a0d879] Asterisk Development Team * Update for certified/16.8-cert4-rc4 2020-11-04 09:11 +0000 [0757a5113d] George Joseph * Revert "Revert "Revert "core_unreal / core_local: Add multistream and re-negotiation.""" First it was in. Then it was out. Then it was in again. Now it's out again because of a faxing issue discovered by the swvx team. Reason for revert: Faxing issue Change-Id: Ia417853130361b69f83f70bbc799493bb9f2fe27 2020-10-06 17:53 +0000 [cb9f1759fb] Asterisk Development Team * Update for certified/16.8-cert4-rc3 2020-09-22 05:05 +0000 [d5df3b95c8] Joshua C. Colp * res_pjsip_session: Fix stream name memory leak. When constructing a stream name based on the media type and position the allocated name was not being freed causing a leak. Change-Id: I52510863b24a2f531f0a55b440bb2c81844029de 2020-09-22 05:13 +0000 [3e54af3afb] Joshua C. Colp * res_pjsip_session: Fix session reference leak. The ast_sip_dialog_get_session function returns the session with reference count increased. This was not taken into account and was causing sessions to remain around when they should not be. ASTERISK-29089 Change-Id: I430fa721b0a824311a59effec6056e9ec528e3e8 2020-09-17 11:40 +0000 [f74ecc4498] George Joseph * logger.h: Fix ast_trace to respect scope_level ast_trace() was always emitting messages when it's level was set to -1 because it was ignoring scope_level. Change-Id: I849c8f4f4613899c37f82be0202024e7d117e506 2020-09-17 13:01 +0000 [251c9a1891] George Joseph * bridge_softmix/sfu_topologies_on_join: Ignore topology change failures When a channel joins a bridge, we do topology change requests on all existing channels to add the new participant to them. However the announcer channel will return an error because it doesn't support topology in the first place. Unfortunately, there doesn't seem to be a reliable way to tell if the error is expected or not so the error is ignored for all channels. If the request fails on a "real" channel, that channel just won't get the new participant's video. Change-Id: Ic95db4683f27d224c1869fe887795d6b9fdea4f0 2020-09-11 11:09 +0000 [1620e94af5] George Joseph * res_pjsip_session: Fix issue with COLP and 491 The recent 491 changes introduced a check to determine if the active and pending topologies were equal and to suppress the re-invite if they were. When a re-invite is sent for a COLP-only change, the pending topology is NULL so that check doesn't happen and the re-invite is correctly sent. Of course, sending the re-invite sets the pending topology. If a 491 is received, when we resend the re-invite, the pending topology is set and since we didn't request a change to the topology in the first place, pending and active topologies are equal so the topologies-equal check causes the re-invite to be erroneously suppressed. This change checks if the topologies are equal before we run the media state resolver (which recreates the pending topology) so that when we do the final topologies-equal check we know if this was a topology change request. If it wasn't a change request, we don't suppress the re-invite even though the topologies are equal. ASTERISK-29014 Change-Id: Iffd7dd0500301156a566119ebde528d1a9573314 2020-08-20 15:09 +0000 [f67c58aa13] George Joseph * debugging: Add enough to choke a mule Added to: * bridges/bridge_softmix.c * channels/chan_pjsip.c * include/asterisk/res_pjsip_session.h * main/channel.c * res/res_pjsip_session.c There NO functional changes in this commit. Change-Id: I06af034d1ff3ea1feb56596fd7bd6d7939dfdcc3 2020-08-20 11:21 +0000 [9e54db24b6] George Joseph * res_pjsip_session: Handle multi-stream re-invites better When both Asterisk and a UA send re-invites at the same time, both send 491 "Transaction in progress" responses to each other and back off a specified amount of time before retrying. When Asterisk prepares to send its re-invite, it sets up the session's pending media state with the new topology it wants, then sends the re-invite. Unfortunately, when it received the re-invite from the UA, it partially processed the media in the re-invite and reset the pending media state before sending the 491 losing the state it set in its own re-invite. Asterisk also was not tracking re-invites received while an existing re-invite was queued resulting in sending stale SDP with missing or duplicated streams, or no re-invite at all because we erroneously determined that a re-invite wasn't needed. There was also an issue in bridge_softmix where we were using a stream from the wrong topology to determine if a stream was added. This also caused us to erroneously determine that a re-invite wasn't needed. Regardless of how the delayed re-invite was triggered, we need to reconcile the topology that was active at the time the delayed request was queued, the pending topology of the queued request, and the topology currently active on the session. To do this we need a topology resolver AND we need to make stream named unique so we can accurately tell what a stream has been added or removed and if we can re-use a slot in the topology. Summary of changes: * bridge_softmix: * We no longer reset the stream name to "removed" in remove_all_original_streams(). That was causing multiple streams to have the same name and wrecked the checks for duplicate streams. * softmix_bridge_stream_sources_update() was checking the old_stream to see if it had the softmix prefix and not considering the stream as "new" if it did. If the stream in that slot has something in it because another re-invite happened, then that slot in old might have a softmix stream but the same stream in new might actually be a new one. Now we check the new_stream's name instead of the old_stream's. * stream: * Instead of using plain media type name ("audio", "video", etc) as the default stream name, we now append the stream position to it to make it unique. We need to do this so we can distinguish multiple streams of the same type from each other. * When we set a stream's state to REMOVED, we no longer reset its name to "removed" or destroy its metadata. Again, we need to do this so we can distinguish multiple streams of the same type from each other. * res_pjsip_session: * Added resolve_refresh_media_states() that takes in 3 media states and creates an up-to-date pending media state that includes the changes that might have happened while a delayed session refresh was in the delayed queue. * Added is_media_state_valid() that checks the consistency of a media state and returns a true/false value. A valid state has: * The same number of stream entries as media session entries. Some media session entries can be NULL however. * No duplicate streams. * A valid stream for each non-NULL media session. * A stream that matches each media session's stream_num and media type. * Updated handle_incoming_sdp() to set the stream name to include the stream position number in the name to make it unique. * Updated the ast_sip_session_delayed_request structure to include both the pending and active media states and updated the associated delay functions to process them. * Updated sip_session_refresh() to accept both the pending and active media states that were in effect when the request was originally queued and to pass them on should the request need to be delayed again. * Updated sip_session_refresh() to call resolve_refresh_media_states() and substitute its results for the pending state passed in. * Updated sip_session_refresh() with additional debugging. * Updated session_reinvite_on_rx_request() to simply return PJ_FALSE to pjproject if a transaction is in progress. This stops us from creating a partial pending media state that would be invalid later on. * Updated reschedule_reinvite() to clone both the current pending and active media states and pass them to delay_request() so the resolver can tell what the original intention of the re-invite was. * Added a large unit test for the resolver. ASTERISK-29014 Change-Id: Id3440972943c611a15f652c6c569fa0e4536bfcb 2020-08-31 11:14 +0000 [c2701d8069] Ben Ford * Bridging: Use a ref to bridge_channel's channel to prevent crash. There's a race condition with bridging where a bridge can be torn down causing the bridge_channel's ast_channel to become NULL when it's still needed. This particular case happened with attended transfers, but the crash occurred when trying to publish a stasis message. Now, the bridge_channel is locked, a ref to the ast_channel is obtained, and that ref is passed down the chain. Change-Id: Ic48715c0c041615d17d286790ae3e8c61bb28814 2020-08-20 08:32 +0000 [fb78adce21] George Joseph * stream.c: Added 2 more debugging utils and added pos to stream string * Added ast_stream_to_stra and ast_stream_topology_to_stra() macros which are shortcuts for ast_str_tmp(256, ast_stream_to_str(stream, &STR_TMP)) * Added the stream position to the string representation of the stream. * Fixed some formatting in ast_stream_to_str(). Change-Id: Idaf4cb0affa46d4dce58a73a111f35435331cc4b 2020-08-19 07:37 +0000 [d942fe4837] George Joseph * scope_trace: Added debug messages and added additional macros The SCOPE_ENTER and SCOPE_EXIT* macros now print debug messages at the same level as the scope level. This allows the same messages to be printed to the debug log when AST_DEVMODE isn't enabled. Also added a few variants of the SCOPE_EXIT macros that will also call ast_log instead of ast_debug to make it easier to use scope tracing and still print error messages. Change-Id: I7fe55f7ec28069919a0fc0b11a82235ce904cc21 2020-08-14 11:13 +0000 [0430e1b3c3] George Joseph * logger.c: Added a new log formatter called "plain" Added a new log formatter called "plain" that always prints file, function and line number if available (even for verbose messages) and never prints color control characters. It also doesn't apply any special formatting for verbose messages. Most suitable for file output but can be used for other channels as well. You use it in logger.conf like so: debug => [plain]debug console => [plain]error,warning,debug,notice,pjsip_history messages => [plain]warning,error,verbose Change-Id: I4fdfe4089f66ce2f9cb29f3005522090dbb5243d 2020-08-28 09:34 +0000 [950784a446] George Joseph * ast_coredumper: Fix issues with naming If you run ast_coredumper --tarball-coredumps in the same directory as the actual coredump, tar can fail because the link to the actual coredump becomes recursive. The resulting tarball will have everything _except_ the coredump (which is usually what you need) There's also an issue that the directory name in the tarball is the same as the coredump so if you extract the tarball the directory it creates will overwrite the coredump. So: * Made the link to the coredump use the absolute path to the file instead of a relative one. This prevents the recursive link and allows tar to add the coredump. * The tarballed directory is now named .output instead of just so if you expand the tarball it won't overwrite the coredump. Change-Id: I8b3eeb26e09a577c702ff966924bb0a2f9a759ea 2020-08-18 04:36 +0000 [7b1ace9040] Joshua C. Colp * res_pjsip_session: Don't aggressively terminate on failed re-INVITE. Per the RFC when an outgoing re-INVITE is done we should only terminate the dialog if a 481 or 408 is received. ASTERISK-29033 Change-Id: I6c3ff513aa41005d02de0396ba820083e9b18503 2020-07-23 14:47 +0000 [d189bf9ae5] George Joseph * res_pjsip_session: Ensure reused streams have correct bundle group When a bundled stream is removed, its bundle_group is reset to -1. If that stream is later reused, the bundle parameters on session media need to be reset correctly it could mistakenly be rebundled with a stream that was removed and never reused. Since the removed stream has no rtp instance, a crash will result. Change-Id: Ie2b792220f9291587ab5f9fd123145559dba96d7 2020-07-13 04:41 +0000 [b8bb63c82f] Joshua C. Colp * pjsip: Add timer refactor patch and timer 0 cancellation. There have been numerous timer issues over the years which resulted in Teluu doing a major refactor of the timer implementation whereby the timer entries themselves are not trusted. This change backports this refactor which has been shown to resolve timer crashes. Additionally another patch has been backported to prevent timer entries with an internal id of 0 from being canceled. This would result in the invalid timer id of 0 being placed into the timer heap causing issues. This is also a backport. Change-Id: I1ba318b1f153a6dd7458846396e2867282b428e7 (cherry picked from commit 9ce6d46aea3a7ec70fe923a58cb2aafaa1ea64a8) 2020-06-10 17:05 +0000 [5e58fc3939] Kevin Harwell * manager - Add Content-Type parameter to the SendText action This patch allows a user of AMI to now specify the type of message content contained within by setting the 'Content-Type' parameter. Note, the AMI version has been bumped for this change. ASTERISK-28945 #close Change-Id: Ibb5315702532c6b954e1498beddc8855fabdf4bb 2020-08-06 12:51 +0000 [4e9e503132] cmaj * Makefile: Fix certified version numbers Adds sed before awk to produce reasonable ASTERISKVERSIONNUM on certified versions of Asterisk eg. 16.8-cert3 is 160803 instead of the previous 00800. ASTERISK-29021 #close Change-Id: Icf241df0ff6db09011b8c936a317a84b0b634e16 2020-07-05 18:51 +0000 [8ebe4c772e] George Joseph * Scope Trace: Make it easier to trace through synchronous tasks Tracing through synchronous tasks was a little troublesome because the new thread's stack counter reset to 0. This change allows a synchronous task to set its trace level to be the same as the thread that pushed the task. For now, the task's level has to be passed in the task's data structure but a future enhancement to the taskprocessor subsystem could automatically set the trace level of the servant to be that of the caller. This doesn't really make sense for async tasks because you never know when they're going to run anyway. Change-Id: Ib8049c0b815063a45d8c7b0cb4e30b7b87b1d825 2020-08-07 06:58 +0000 [8076ed59f0] George Joseph * scope_trace: Add/update utilities * Added a AST_STREAM_STATE_END sentinel * Add ast_stream_to_str() * Add ast_stream_state_to_str() * Add ast_stream_get_format_count() * Add ast_stream_topology_to_str() * Add ast_stream_topology_get_active_count() * Add ast_format_cap_append_names() * Add ast_sip_session_get_name() Change-Id: I132eb5971ea41509c660f64e9113cda8c9013b0b 2020-06-30 08:56 +0000 [9d3b01e874] George Joseph * Scope Trace: Add some new tracing macros and an ast_str helper Created new SCOPE_ functions that don't depend on RAII_VAR. Besides generating less code, the use of the explicit SCOPE_EXIT macros capture the line number where the scope exited. The RAII_VAR versions can't do that. * SCOPE_ENTER(level, ...): Like SCOPE_TRACE but doesn't use RAII_VAR and therefore needs needs one of... * SCOPE_EXIT(...): Decrements the trace stack counter and optionally prints a message. * SCOPE_EXIT_EXPR(__expr, ...): Decrements the trace stack counter, optionally prints a message, then executes the expression. SCOPE_EXIT_EXPR(break, "My while got broken\n"); * SCOPE_EXIT_RTN(, ...): Decrements the trace stack counter, optionally prints a message, then returns without a value. SCOPE_EXIT_RTN("Bye\n"); * SCOPE_EXIT_RTN_VALUE(__return_value, ...): Decrements the trace stack counter, optionally prints a message, then returns the value specified. SCOPE_EXIT_RTN_VALUE(rc, "Returning with RC: %d\n", rc); Create an ast_str helper ast_str_tmp() that allocates a temporary ast_str that can be passed to a function that needs it, then frees it. This makes using the above macros easier. Example: SCOPE_ENTER(1, Format Caps 1: %s Format Caps 2: %s\n", ast_str_tmp(32, ast_format_cap_get_names(cap1, &STR_TMP), ast_str_tmp(32, ast_format_cap_get_names(cap2, &STR_TMP)); The calls to ast_str_tmp create an ast_str of the specified initial length which can be referenced as STR_TMP. It then calls the expression, which must return a char *, ast_strdupa's it, frees STR_TMP, then returns the ast_strdupa'd string. That string is freed when the function returns. Change-Id: I44059b20d55a889aa91440d2f8a590865998be51 (cherry picked from commit 43ba72dea099b5448fdeb0fcab44b6186a0ddf75) 2020-05-14 13:24 +0000 [360efdd94f] George Joseph * Scope Tracing: A new facility for tracing scope enter/exit What's wrong with ast_debug? ast_debug is fine for general purpose debug output but it's not really geared for scope tracing since it doesn't present its output in a way that makes capturing and analyzing flow through Asterisk easy. How is scope tracing better? Scope tracing uses the same "cleanup" attribute that RAII_VAR uses to print messages to a separate "trace" log level. Even better, the messages are indented and unindented based on a thread-local call depth counter. When output to a separate log file, the output is uncluttered and easy to follow. Here's an example of the output. The leading timestamps and thread ids are removed and the output cut off at 68 columns for commit message restrictions but you get the idea. --> res_pjsip_session.c:3680 handle_incoming PJSIP/1173-00000001 --> res_pjsip_session.c:3661 handle_incoming_response PJSIP/1173 --> res_pjsip_session.c:3669 handle_incoming_response PJSIP/ --> chan_pjsip.c:3265 chan_pjsip_incoming_response_after --> chan_pjsip.c:3194 chan_pjsip_incoming_response P chan_pjsip.c:3245 chan_pjsip_incoming_respon <-- chan_pjsip.c:3194 chan_pjsip_incoming_response P <-- chan_pjsip.c:3265 chan_pjsip_incoming_response_after <-- res_pjsip_session.c:3669 handle_incoming_response PJSIP/ <-- res_pjsip_session.c:3661 handle_incoming_response PJSIP/1173 <-- res_pjsip_session.c:3680 handle_incoming PJSIP/1173-00000001 The messages with the "-->" or "<--" were produced by including the following at the top of each function: SCOPE_TRACE(1, "%s\n", ast_sip_session_get_name(session)); Scope isn't limited to functions any more than RAII_VAR is. You can also see entry and exit from "if", "for", "while", etc blocks. There is also an ast_trace() macro that doesn't track entry or exit but simply outputs a message to the trace log using the current indent level. The deepest message in the sample (chan_pjsip.c:3245) was used to indicate which "case" in a "select" was executed. How do you use it? More documentation is available in logger.h but here's an overview: * Configure with --enable-dev-mode. Like debug, scope tracing is #ifdef'd out if devmode isn't enabled. * Add a SCOPE_TRACE() call to the top of your function. * Set a logger channel in logger.conf to output the "trace" level. * Use the CLI (or cli.conf) to set a trace level similar to setting debug level... CLI> core set trace 2 res_pjsip.so Summary Of Changes: * Added LOG_TRACE logger level. Actually it occupies the slot formerly occupied by the now defunct "event" level. * Added core asterisk option "trace" similar to debug. Includes ability to specify global trace level in asterisk.conf and CLI commands to turn on/off and set levels. Levels can be set globally (probably not a good idea), or by module/source file. * Updated sample asterisk.conf and logger.conf. Tracing is disabled by default in both. * Added __ast_trace() to logger.c which keeps track of the indent level using TLS. It's #ifdef'd out if devmode isn't enabled. * Added ast_trace() and SCOPE_TRACE() macros to logger.h. These are all #ifdef'd out if devmode isn't enabled. Why not use gcc's -finstrument-functions capability? gcc's facility doesn't allow access to local data and doesn't operate on non-function scopes. Known Issues: The only know issue is that we currently don't know the line number where the scope exited. It's reported as the same place the scope was entered. There's probably a way to get around it but it might involve looking at the stack and doing an 'addr2line' to get the line number. Kind of like ast_backtrace() does. Not sure if it's worth it. Change-Id: Ic5ebb859883f9c10a08c5630802de33500cad027 (cherry picked from commit 6a0c47237480d750023561b004f2c4052bfab210) 2020-07-06 10:57 +0000 [944d691319] George Joseph * frame.c: Make debugging easier * ast_frame_subclass2str() and ast_frame_type2str() now return a pointer to the buffer that was passed in instead of void. This makes it easier to use these functions inline in printf-style debugging statements. * Added many missing control frame entries in ast_frame_subclass2str. Change-Id: Ifd0d6578e758cd644c96d17a5383ff2128c572fc (cherry picked from commit fdcb3e2ead11243cd8becb2a9778a4fb4ac8b63c) 2020-07-23 13:57 +0000 [017416381f] Asterisk Development Team * Update for certified/16.8-cert4-rc2 2020-07-22 12:57 +0000 [bd86f382ed] Joshua C. Colp * websocket / pjsip: Increase maximum packet size. When dealing with a lot of video streams on WebRTC the resulting SDPs can grow to be quite large. This effectively doubles the maximum size to allow more streams to exist. The res_http_websocket module has also been changed to use a buffer on the session for reading in packets to ensure that the stack space usage is not excessive. Change-Id: I31d4351d70c8e2c11564807a7528b984f3fbdd01 2020-06-26 05:18 +0000 [5eec77b452] Joshua C. Colp * res_pjsip: Apply AOR outbound proxy to static contacts. The outbound proxy for an AOR was not being applied to any statically configured Contacts. This resulted in the OPTIONS requests being sent to the wrong target. This change sets the outbound proxy on statically configured contacts once the AOR configuration is done being applied. ASTERISK-28965 Change-Id: Ia60f3e93ea63f819c5a46bc8b54be2e588dfa9e0 2020-06-29 04:03 +0000 [aabb04054a] Asterisk Development Team * Update for certified/16.8-cert4-rc1 2020-06-23 17:23 +0000 [2d7ae83990] Joshua Colp * Revert "Revert "core_unreal / core_local: Add multistream and re-negotiation."" This reverts commit ec8b3850d21d63c627e8f9d97c34b780c13d941a. Reason for revert: Time for this to return. Change-Id: I5858f279bd523c609830c09333902b5d7d048aaf 2020-06-19 17:47 +0000 Asterisk Development Team * asterisk certified/16.8-cert3 Released. 2020-06-19 12:04 +0000 [ec8b3850d2] Kevin Harwell * Revert "core_unreal / core_local: Add multistream and re-negotiation." This reverts commit 2b5b9cd8e0b76f303d567187c4553a2a7edbc1ae. Reason for revert: Change-Id: I37c31857c5f16715a2debb99e1d68a0202fd1186 2020-06-17 03:58 +0000 [6777ec0340] Joshua C. Colp * res_pjsip_session: Preserve label on incoming re-INVITE. When a re-INVITE is received we create a new set of streams that are then swapped in as the active streams. We did not preserve the SDP label from the previous streams, resulting in the label getting lost. This change ensures that if an SDP label is present on the previous stream then it is set on the new stream. ASTERISK-28953 Change-Id: I9dd63b88b562fe96ce5c791a3dae5bcaca258445 2020-06-03 11:47 +0000 [2b5b9cd8e0] Joshua C. Colp * core_unreal / core_local: Add multistream and re-negotiation. When requesting a Local channel the requested stream topology or a converted stream topology will now be placed onto the resulting channels. Frames written in on streams will now also preserve the stream identifier as they are queued on the opposite channel. Finally when a stream topology change is requested it is immediately accepted and reflected on both channels. Each channel also receives a queued frame to indicate that the topology has changed. ASTERISK-28938 Change-Id: I4e9d94da5230d4bd046dc755651493fce1d87186 2020-06-08 06:27 +0000 [744bfb049c] Joshua C. Colp * res_rtp_asterisk: Don't assume setting retrans props means to enable. The "value" passed in when setting an RTP property determines whether it should be enabled or disabled. The RTP send and receive retrans props did not examine this to know if the buffers should be enabled. They assumed they always should be. This change makes it so that the "value" passed in is respected. ASTERISK-28939 Change-Id: I9244cdbdc5fd065c7f6b02cbfa572bc55c7123dc 2020-06-10 12:11 +0000 [53a3be1891] Joshua C. Colp * bridge_softmix: Add additional old states for adding new source. There are three states that an old stream can be in to allow becoming a source stream in a new stream: 1. Removed 2. Inactive 3. Sendonly This change adds the two missing ones, inactive and sendonly, so if a stream transitions from those to a state where they are providing video to Asterisk we properly re-negotiate the other participants. ASTERISK-28944 Change-Id: Id8256b9b254b403411586284bbaedbf50452de01 2020-06-07 19:02 +0000 [0fe63c2f87] George Joseph * app_confbridge: Plug ref leak of bridge channel with send_events When send_events is enabled for a user, we were leaking a reference to the bridge channel in confbridge_manager.c:send_message(). This also caused the bridge snapshot to not be destroyed. Change-Id: I87a7ae9175e3cd29f6d6a8750e0ec5427bd98e97 2020-06-03 12:06 +0000 [10dad4ea3a] Kevin Harwell * Compiler fixes for gcc 10 This patch fixes a few compile warnings/errors that now occur when using gcc 10+. Also, the Makefile.rules check to turn off partial inlining in gcc versions greater or equal to 8.2.1 had a bug where it only it only checked against versions with at least 3 numbers (ex: 8.2.1 vs 10). This patch now ensures any version above the specified version is correctly compared. Change-Id: I54718496eb0c3ce5bd6d427cd279a29e8d2825f9 2020-04-30 18:43 +0000 Asterisk Development Team * asterisk certified/16.8-cert2 Released. 2020-04-30 10:56 +0000 [d3fae6d7a1] George Joseph * app_voicemail: Add workaround for a gcc 10 issue with -Wrestrict The gcc 10 -Wrestrict option was causing "overlap" errors when snprintf was copying one char[256] structure member to another char[256] member in the same structure. Using ast_alloca instead of declaring the structure inline solves the issue. Here's a link to the "enhancement": https://gcc.gnu.org/legacy-ml/gcc-patches/2019-10/msg00570.html We may follow up with a gcc bug report. Change-Id: Ie0099adcb0a9727bd9aa99e024dd912a67eaf534 2020-04-20 10:18 +0000 [02188feb32] Joshua C. Colp * fax: Fix crashes in PJSIP re-negotiation scenarios. This change fixes a few re-negotiation issues uncovered with fax. 1. The fax support uses its own mechanism for re-negotiation by conveying T.38 information in its own frames. The new support for re-negotiating when adding/removing/changing streams was also being triggered for this causing multiple re-INVITEs. The new support will no longer trigger when transitioning between fax. 2. In off-nominal re-negotiation cases it was possible for some state information to be left over and used by the next re-negotiation. This is now cleared. ASTERISK-28811 ASTERISK-28839 Change-Id: I8ed5924b53be9fe06a385c58817e5584b0f25cc2 (cherry picked from commit f3ac42b9bd0d436ce2128e5bbb0502ddb587f98a) 2020-04-12 09:53 +0000 [eeab038b01] Alexander Traud * BuildSystem: Search for Python/C API when possibly needed only. The Python/C API is used only if the Test Framework was enabled in Asterisk 'make menuselect'. The Test Framework is available only if the Developer Mode was enabled in Asterisk './configure --enable-dev-mode'. And that Python/C API is used only if the PJProject was found and not disabled in Asterisk; the user did not go for './configure --without-pjproject'. Furthermore, because version 2 of that Python/C API is required (currently) and because some platforms do not offer a generic version 2, the script searches for 2.7 explicitly as well. To avoid version mismatch between the Python/C API and the Python environment, the script searches for the latter in the same versions, in the same the order as well. Because this Python/C API is just for (some) Asterisk contributors, the script also goes for the Python 3 environment as a last resort for all other Asterisk users. This allows 'make full' even on minimal installations of Ubuntu 18.04 LTS and newer. Because the Python/C API is Asterisk contributor specific, the Python packages are removed from the script './contrib/scripts/install_prereq' as this script is intended for Asterisk users. Asterisk contributors have to install much more packages in any case, like: sudo apt install autoconf automake git git-review python2.7-dev ASTERISK-28824 ASTERISK-27717 Change-Id: Id46d357e18869f64dcc217b8fdba821b63eeb876 (cherry picked from commit dfdff0f9ec99ad80a385df99f4e5bf493f6d0b06) 2020-04-29 15:42 +0000 [40d379f59e] Joshua Colp * Revert "Revert "res_rtp_asterisk: Free payload when error on insertion to data buffer"" This reverts commit fe3dc091b57bf16ba62e185fe05f77069062a3b1. Reason for revert: This will be merged once 16.8-cert1 is released. Change-Id: I5c29f96a70ed7e1fa146a69e7b48bfe31cbee929 2020-04-28 10:31 +0000 [05671db0c3] Joshua C. Colp * pjsip: Increase maximum ICE candidate count. In practice it has been seen that some users come close to our maximum ICE candidate count of 32. In case people have gone over this increases the count to 64, giving ample room. ASTERISK-28859 Change-Id: I35cd68948ec0ada86c14eb53092cdaf8b62996cf (cherry picked from commit 4374f8621920da032117662222fa0eb76b00bf76) 2020-04-29 15:43 +0000 [491f0bae7d] Joshua Colp * Revert "Revert "res_rtp_asterisk: Resolve loop when receive buffer is flushed"" This reverts commit a75317ce247b913d1cb92b9ffa47a49aa56b172a. Reason for revert: This will be merged once 16.8-cert1 is released. Change-Id: Ic2f4dbb19c5756fabe71b9e35c5a924214f5af08 2020-04-30 13:30 +0000 Asterisk Development Team * asterisk certified/16.8-cert1 Released. 2020-04-20 11:14 +0000 [fe3dc091b5] Joshua Colp * Revert "res_rtp_asterisk: Free payload when error on insertion to data buffer" This reverts commit fef8a04aadf759bf08f12827de18f970ae7e3e8c. Reason for revert: Waiting for future release. Change-Id: I67e9837a352b252f8a75ebaa9a5fb7e5b35d41f7 2020-04-20 11:14 +0000 [a75317ce24] Joshua Colp * Revert "res_rtp_asterisk: Resolve loop when receive buffer is flushed" This reverts commit 22bc8a71680e4099ffd3ccff7b3fe33d26291c36. Reason for revert: Waiting for future release. Change-Id: If924f0b7fa02a72b52c708aa80addc361a87b490 2020-04-14 10:48 +0000 [22bc8a7168] Pirmin Walthert * res_rtp_asterisk: Resolve loop when receive buffer is flushed When the receive buffer was flushed by a received packet while it already contained a packet with the same sequence number, Asterisk never left the while loop which tried to order the packets. This change makes it so if the packet is in the receive buffer it is retrieved and freed allowing the buffer to empty. ASTERISK-28827 Change-Id: Idaa376101bc1ac880047c49feb6faee773e718b3 2020-04-14 10:31 +0000 [fef8a04aad] Pirmin Walthert * res_rtp_asterisk: Free payload when error on insertion to data buffer When the ast_data_buffer_put rejects to add a packet, for example because the buffer already contains a packet with the same sequence number, the payload will never be freed, resulting in a memory leak. The data buffer will now return an error if this situation occurs allowing the caller to free the payload. The res_rtp_asterisk module has also been updated to do this. ASTERISK-28826 Change-Id: Ie6c49495d1c921d5f997651c7d0f79646f095cf1 2020-04-06 14:56 +0000 [81d34554ab] Asterisk Development Team * Update for certified/16.8-cert1-rc5 2020-04-01 04:00 +0000 [25e2274e48] Jaco Kroon * main/backtrace: binutils-2.34 fix. My tester missed this one previously, have confirmed a positive build this time round. Change-Id: Id06853375954a200f03f9a1b9c97fe0b10d31fbf 2020-03-16 05:11 +0000 [2af88e7ca2] Jaco Kroon * Update main/backtrace.c to deal with changes in binutils 2.34. binutils 2.34 merged this commit: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;\ h=fd3619828e94a24a92cddec42cbc0ab33352eeb4 Which effectively does things like: -#define bfd_section_size(bfd, ptr) ((ptr)->size) -#define bfd_get_section_size(ptr) ((ptr)->size) +#define bfd_section_size(sec) ((sec)->size) So in order to remain backwards compatible we need to detect this API change, and adjust accordingly. The simplest is to notice that the bfd_get_section_size and bfd_get_section_vma MACROs are no longer defined, and define then onto the new API. The alternative is to litter the code with a number of #ifdef #else #endif splatters right through the code. Change-Id: I3efe0f8e8f3e338d16fcbc2b26a505367b6e172f (cherry picked from commit 33b2c7f79b33693be502e4707c936f8dba392b5f) 2020-03-31 12:52 +0000 [3297df5a61] Kevin Harwell * channel: write to a stream on multi-frame writes If a frame handling routine returns a list of frames (vs. a single frame) those frames are never passed to a tech's write_stream handler even if one is available. For instance, if a codec translation occurred and that codec returned multiple frames then those particular frames were always only sent to the tech's "write" handler. If that tech (pjsip for example) was stream capable then those frames were essentially ignored. Thus resulting in bad audio. This patch makes it so the "write_stream" handler is appropriately called for all cases, and for all frames if available. ASTERISK-28795 #close Change-Id: I868faea0b73a07ed5a32c2b05bb9cf4b586f739d 2020-03-26 11:48 +0000 [3d317239d5] Asterisk Development Team * Update for certified/16.8-cert1-rc4 2020-03-26 11:46 +0000 [096db19662] Asterisk Development Team * Update CHANGES and UPGRADE.txt for certified/16.8-cert1-rc4 2020-03-26 11:42 +0000 [c9cd681261] Joshua C. Colp * CHANGES: Change md file extension to txt. Change-Id: I168e2d3a65d444fb0961bd228257441fe718f6a7 2020-03-23 05:49 +0000 [bdf4d159fd] Joshua C. Colp * res_pjsip_session: Apply intention behind requested formats. When an outgoing channel is created a list of formats may optionally be provided which is used as a request that the formats be used if possible. If an endpoint is not configured for any of the formats we ignore this request and use what is configured. This has the side effect of also including other stream types (such as video) that were not present in the requested formats. This change makes it so that the intention of the request is preserved - that is if only an audio format is requested then even if there is no joint audio format between the request and the configuration we will still only place an audio stream in the outgoing call. ASTERISK-28787 Change-Id: Ia54c0c63e94aca176169b9bae4bb8a8380ea245f 2020-03-25 04:38 +0000 [3d22ecb1e2] Joshua C. Colp * res_rtp_asterisk: Ensure sufficient space for worst case NACK. ASTERISK-28790 Change-Id: I10df52f98b19ed62575f25dab36e82d136dccd99 2020-03-17 15:54 +0000 [904f6b7c2f] Kevin Harwell * ast_coredumper: add Asterisk information dump This patch makes it so ast_coredumper now outputs the following information to a *-info.txt file when processing a core file: asterisk version and "built by" string BUILD_OPTS system start, and last reloaded date/time taskprocessor list equivalent of "bridge show all" equivalent of "core show channels verbose" Also a slight modification was made when trying to obtain the pid(s) of a running Asterisk. If it fails to retrieve any it now reports an error. Change-Id: I54f35c19ab69b8f8dc78cc933c3fb7c99cef346b 2020-03-19 08:48 +0000 [aa04c3f49b] Joshua C. Colp * res_pjsip_session: Don't restrict non-audio default streams to sendrecv. The state of the default audio stream is used for hold/unhold so we restrict it to sendrecv as the core does not handle when it changes as a result of hold/unhold. This restriction does not apply to other media types though so we now only restrict it to audio. This allows the other default streams to store their state at all values, and not just sendrecv and removed. ASTERISK-28783 Change-Id: I139740f38cea7f7d92a876ec2631ef50681f6625 2020-03-04 15:45 +0000 [7ecbcdf22f] George Joseph * CI: Create generic jenkinsfile This is a generic jenkinsfile to build Asterisk and optionally perform one or more of the following: * Publish the API docs to the wiki * Run the Unit tests * Run Testsuite Tests This job can be triggered manually from Jenkins or be triggered automatically on a schedule based on a cron string. Change-Id: Id9d22a778a1916b666e0e700af2b9f1bacda0852 2020-03-04 09:43 +0000 [d1bb76a27d] Asterisk Development Team * Update for certified/16.8-cert1-rc3 2020-03-04 09:41 +0000 [b922e387d1] Asterisk Development Team * Update CHANGES and UPGRADE.txt for certified/16.8-cert1 2020-02-20 11:33 +0000 [4458b7a52a] Joshua C. Colp * res_rtp_asterisk: Improve video performance in certain networks. The receive buffer will now grow if we end up flushing the receive queue after not receiving the expected packet in time. This is done in hopes that if this is encountered again the extra buffer size will allow more time to pass and any missing packets to be received. The send buffer will now grow if we are asked for packets and can't find them. This is done in hopes that the packets are from the past and have simply been expired. If so then in the future with the extra buffer space the packets should be available. Sequence number cycling has been handled so that the correct sequence number is calculated and used in various places, including for sorting packets and for determining if a packet is old or not. NACK sending is now more aggressive. If a substantial number of missing sequence numbers are added a NACK will be sent immediately. Afterwards once the receive buffer reaches 25% a single NACK is sent. If the buffer continues to grow and reaches 50% or greater a NACK will be sent for each received future packet to aggressively ask the remote endpoint to retransmit. ASTERISK-28764 Change-Id: I97633dfa8a09a7889cef815b2be369f3f0314b41 2020-02-10 05:04 +0000 [d515dea9c6] Joshua C. Colp * res_pjsip_session: Fix off-nominal session refreshes. Given a scenario where session refreshes occur close to each other while another is finishing it was possible for the session refreshes to occur out of order. It was also possible for session refreshes to be delayed for quite some time if a session refresh did not result in a topology change. For the out of order session refreshes the first session refresh would be queued due to a transaction in progress. This transaction would then finish. When finished a separate task to process the delayed requests queue would be queued for handling. A second refresh would be requested internally before this delayed request queued task was processed. As no transaction was in progress this session refresh would be immediately handled before the queued session refresh. The code will now check if any delayed requests exist before allowing a session refresh to immediately occur. If any exist then the session refresh is queued. For the delayed session refreshes if a session refresh did not result in a topology change the attempt would be immediately stopped and no other delayed requests would be processed. The code will now go through the entire delayed requests queue until a delayed request results in a request actually being sent. ASTERISK-28730 Change-Id: Ied640280133871f77d3f332be62265e754605088 (cherry picked from commit b438d1d9adc8c5200214e41876e9abc02c5b5288) 2020-01-04 18:11 +0000 [5fccf6d1c6] Joshua C. Colp * bridging: Add better support for adding/removing streams. This change adds support to bridge_softmix to allow the addition and removal of additional video source streams. When such a change occurs each participant is renegotiated as needed to reflect the update. If another video source is added then each participant gets another source. If a video source is removed then it is removed from each participant. This functionality allows you to have both your webcam and screenshare providing video if you desire, or even more streams. Mapping has been changed to use the topology index on the source channel as a unique identifier for outgoing participant streams, this will never change and provides an easy way to establish the mapping. The bridge_simple and bridge_native_rtp modules have also been updated to renegotiate when the stream topology of a party changes allowing the same behavior to occur as added to bridge_softmix. If a screen share is added then the opposite party is renegotiated. If that screen share is removed then the opposite party is renegotiated again. Some additional fixes are also included in here. Stream state is now conveyed in SDP so sendonly/recvonly/inactive streams can be requested. Removed streams now also remove previous state from themselves so consumers don't get confused. ASTERISK-28733 Change-Id: I93f41fb41b85646bef71408111c17ccea30cb0c5 2020-02-19 08:24 +0000 [7b8157645f] Asterisk Development Team * Update for certified/16.8-cert1-rc2 2020-02-13 13:39 +0000 [bb19e7feb5] George Joseph * res_pjsip_outbound_registration: Fix SRV failover on timeout In order to retry outbound registrations for some situations, we need access to the tdata from the original request. For instance, for 401/407 responses we need it to properly construct the subsequent request with the authentication. We also need it if we're iterating over a DNS SRV response record set so we can skip entries we've already tried. We've been getting the tdata from the server response rdata and transaction but that only works for the failures where there was actually a response (4XX, 5XX, etc). For timeouts there's no response and therefore no rdata or transaction from which to get the tdata. When processing a single A/AAAA record for a server, this wasn't an issue as we just retried that same server after the retry timer expired. If we got an SRV record set for the server though, without the state from the tdata, we just kept trying the first entry in the set repeatedly instead of skipping to the next one in the list. * Added a "last_tdata" member to the client state structure to keep track of the sent tdata. * Updated registration_client_send() to save the tdata it used into the client_state. * Updated sip_outbound_registration_response_cb() to use the tdata saved in client_state when we don't get a response from the server. We still use the tdata from the transaction when we DO get a response from the server so we can properly handle 4XX responses where our new request depends on it. General note on timeouts: Although res_pjsip_outbound_registration skips to the next record immediately when a timeout occurs during SRV set traversal, it's pjproject that determines how long to wait before a timeout is declared. As with other SIP message types, pjproject will continue trying the same server at an interval specified by "timer_t1" until "timer_b" expires. Both of those timers are set in the pjsip.conf "system" section. ASTERISK-28746 Change-Id: I199b8274392d17661dd3ce3b4d69a3968368fa06 2020-02-13 15:08 +0000 [43ca35b831] Kevin Harwell * res_rtp_asterisk: bad audio (static) due to incomplete dtls/srtp setup There was a race condition between client initiated DTLS setup, and handling of server side ice completion that caused the underlying SSL object to get cleared during DTLS initialization. If this happened Asterisk would be left in a partial DTLS setup state. RTP packets were sent and received, but were not being encrypted and decrypted. This resulted in no audio, or static. Specifically, this occurred when '__rtp_recvfrom' was processing the handshake sequence from the client to the server, and then 'ast_rtp_on_ice_complete' gets called from another thread and clears the SSL object when calling the 'dtls_perform_setup' function. The timing had to be just right in the sense that from the external SSL library perspective SSL initialization completed (rtp recv), Asterisk clears/resets the SSL object (ice done), and then checks to see if SSL is intialized (rtp recv). Since it was cleared, Asterisk thinks it is not finished, thus not completing 'dtls_srtp_setup'. This patch removes calls to 'dtls_perform_setup', which clears the SSL object, in 'ast_rtp_on_ice_complete'. When ice completes, there is no reason to clear the underlying SSL object. If an ice candidate changes a full protocol level renegotiation occurs. Also, in the case of bundled ICE candidates are reused when a stream is added. So no real reason to have to clear, and reset in this instance. Also, this patch adds a bit of extra logging to aid in diagnosis of any future problems. ASTERISK-28742 #close Change-Id: I34c9e6bad5a39b087164646e2836e3e48fe6892f 2020-02-07 14:42 +0000 [476bbcf3a3] Asterisk Development Team * Update for certified/16.8-cert1-rc1 2020-02-07 14:22 +0000 [b3a0387fc0] Asterisk Development Team * Update CHANGES and UPGRADE.txt for certified/16.8-cert1 2020-02-07 13:44 +0000 [7416703f04] George Joseph * doc: Fix CHANGES entries to have .txt suffix and update READMEs Although the wiki page for the new CHANGES and UPGRADE scheme states that the files must have the ".txt" suffix, the READMEs didn't. Change-Id: I490306aa2cc24d6f014738e9ebbc78592efe0f05 2020-02-05 10:37 +0000 [443230f5d5] George Joseph * Asterisk Certified 16.8 Preparation * Updated .gitreview default branch to certified/16.8 * Updated .version to certified/16.8 * Set all extended support modules to be disabled by default Change-Id: I11c9b5f33865fb541192a786dc25dddf8558e09b 2020-02-04 08:18 +0000 [40e331ff90] Joshua C. Colp * res_rtp_asterisk: Don't produce transport-cc if no packets. The code assumed that when the transport-cc feedback function was called at least one packet will have been received. In practice this isn't always true, so now we just reschedule the sending and do nothing. Change-Id: Iabe7b358704da446fc3b0596b847bff8b8a0da6a 2020-02-03 10:24 +0000 [8b0922a101] George Joseph * message.c: Add option to suppress the Message channel AMI and ARI events In order to reduce the amount of AMI and ARI events generated, the global "Message/ast_msg_queue" channel can be set to suppress it's normal channel housekeeping events such as "Newexten", "VarSet", etc. This can greatly reduce load on the manager and ARI applications when the Digium Phone Module for Asterisk is in use. To enable, set "hide_messaging_ami_events" in asterisk.conf to "yes" In Asterisk versions <18, the default is "no" preserving existing behavior. Beginning with Asterisk 18, the option will default to "yes". NOTE: This change does not affect UserEvents or the ARI TextMessageReceived events. * Added the "hide_messaging_ami_events" option to asterisk.conf. * Changed message.c to set the AST_CHAN_TP_INTERNAL property on the "Message/ast_msg_queue" channel if the option is set in asterisk.conf. This suppresses the reporting of the events. Change-Id: Ia2e3516d43f4e0df994fc6598565d6bba2d7018b (cherry picked from commit bfe9e1b2e7a489b7eb49a98d290f2e3a68a34dca) 2020-02-04 09:03 +0000 [d436f56858] Asterisk Development Team * Update for 16.8.0 2020-02-04 07:35 +0000 [126beb3e6c] Joshua Colp * REVERT: Add option to suppress the Message channel AMI and ARI events This reverts commit bfe9e1b2e7a489b7eb49a98d290f2e3a68a34dca. Reason for revert: Per discussion on IRC we're sticking to policy. Change-Id: I61691a9ffa1bc30807cbe618a4a72b4d214481aa 2020-02-03 10:24 +0000 [bfe9e1b2e7] George Joseph * message.c: Add option to suppress the Message channel AMI and ARI events In order to reduce the amount of AMI and ARI events generated, the global "Message/ast_msg_queue" channel can be set to suppress it's normal channel housekeeping events such as "Newexten", "VarSet", etc. This can greatly reduce load on the manager and ARI applications when the Digium Phone Module for Asterisk is in use. To enable, set "hide_messaging_ami_events" in asterisk.conf to "yes" In Asterisk versions <18, the default is "no" preserving existing behavior. Beginning with Asterisk 18, the option will default to "yes". NOTE: This change does not affect UserEvents or the ARI TextMessageReceived events. * Added the "hide_messaging_ami_events" option to asterisk.conf. * Changed message.c to set the AST_CHAN_TP_INTERNAL property on the "Message/ast_msg_queue" channel if the option is set in asterisk.conf. This suppresses the reporting of the events. Change-Id: Ia2e3516d43f4e0df994fc6598565d6bba2d7018b 2020-01-30 10:36 +0000 [c92e2bb09f] Asterisk Development Team * Update for 16.8.0-rc2 2020-01-27 11:44 +0000 [1627e8eddc] Kevin Harwell * res_stasis: trigger cleanup after update The cleanup code in stasis shuts down applications if they are in a deactivated state, and no longer have explicit subscriptions. When registering an app the cleanup code was running before calling 'update'. When it should be executed after 'update' since a call to register may re-activate the app. We don't want it to shutdown before the 'update' otherwise the app won't be re-activated, or registered. This patch makes it so the cleanup code is executed post 'update'. ASTERISK-28679 #close Change-Id: I8f2c0b17e33bb8128441567b97fd4c7bf74a327b (cherry picked from commit dc9875815c441bcb78370cbf0d331ec46e7abb1d) 2020-01-27 12:01 +0000 [42c51263b9] Kevin Harwell * stasis/app: don't lock an app before a call to send Calling 'app_send' eventually calls the app's message handler. It's possible for a handler to obtain a lock on another object, and then need/want to lock the app object. If the caller of 'app_send' locks the app object prior to calling then there's a potential for a deadlock, if another thread calls 'app_send' without locking. This patch makes it so 'app_send' is not called with the app object locked in the section of code doing such. ASTERISK-28423 #close Change-Id: I6767c6d0933c7db1b984018966eefca4c0638a27 (cherry picked from commit e103339f02f0445b8c77b1c3c6f7d1c80e37f675) 2020-01-28 09:18 +0000 [939e18d63e] Joshua C. Colp * res_pjsip_pubsub: Increment persistence data ref when recreating. Each subscription needs to have a reference to the persisted data for it, as well as the main JSON contained within the tree. When recreating a subscription this did not occur and they both shared the same reference. ASTERISK-28714 Change-Id: I706abd49ea182ea367a4ac3feca2706460ae9f4a (cherry picked from commit 4d32f5747c2db25d63005bbb94ee9d27e09059c2) 2020-01-23 10:40 +0000 [b7b813eb34] Asterisk Development Team * Update for 16.8.0-rc1 2020-01-23 10:12 +0000 [eb1ec0498d] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.8.0 2020-01-22 12:56 +0000 [1b452ebb51] George Joseph * cdr.c: Set event time on party b when leaving a parking bridge When Alice calls Bob and Bob does a blind transfer to Charlie, Bob's bridge leave event generates a finalize on both the party_a and party_b CDRs but while the party_a CDR has the correct end time set from the event time, party_b's leg did not. This caused that CDR's end time to be equal to the answered time and resulted in a billsec of 0. * We now pass the bridge leave message event time to cdr_object_party_b_left_bridge_cb() and set it on that CDR before calling cdr_object_finalize() on it. NOTE: This issue affected transfers using chan_sip most of the time but also occasionally affected chan_pjsip probably due to message timing. ASTERISK-28677 Reported by: Maciej Michno Change-Id: I790720f1e7326f9b8ce8293028743b0ef0fb2cca 2020-01-22 09:39 +0000 [a2a4e1026c] Sean Bright * http: Add ability to disable /httpstatus URI Add a new configuration option 'enable_status' which allows the /httpstatus URI handler to be administratively disabled. We also no longer unconditionally register the /static and /httpstatus URI handlers, but instead do it based upon configuration. Behavior change: If enable_static was turned off, the URI handler was still installed but returned a 403 when it was accessed. Because we now register/unregister the URI handlers as appropriate, if the /static URI is disabled we will return a 404 instead. Additionally: * Change 'enablestatic' to 'enable_static' but keep the former for backwards compatibility. * Improve some internal variable names ASTERISK-28710 #close Change-Id: I647510f796473793b1d3ce1beb32659813be69e1 2020-01-18 15:54 +0000 [9895e94dba] Andrew Siplas * chan_dahdi: Change 999999 to INT_MAX to better reflect "no timeout" The no-entry timeout set to 999999 == 16⅔ minutes, change to INT_MAX to match behavior of "no timeout" defined in comment. ASTERISK-28702 #close Change-Id: I4ea015986e061374385dba247b272f7aac60bf11 2020-01-20 13:53 +0000 [efecc9d139] Sean Bright * translate.c: Fix silk 24kHz truncation in 'core show translation' SILK @ 24kHz is not shown in the 'core show translation' output because of an off-by-one-error. Discovered while looking into ASTERISK~19871. ASTERISK-28706 Reported by: Sean Bright Change-Id: Ie1a551a8a484e07b45c8699cc0c90f1061029510 2020-01-20 15:26 +0000 [a7aaca9eaa] Sean Bright * func_odbc.conf.sample: Add example lookup Change-Id: Ia05aab1f579597963d2ea23920d2210cfcb97c84 2020-01-20 11:18 +0000 [04c81f9748] Sean Bright * res_statsd: Document that res_statsd does nothing on its own ASTERISK-24484 #close Reported by: Dan Jenkins Change-Id: I05f298904511d6739aefb1486b6fcbee27efa9ec 2016-09-30 21:56 +0000 [f49517efb9] Rodrigo Ramírez Norambuena * queue_log: Add alembic script for generate db table for queue_log Change-Id: I35b928a6251f9da9a1742b2cd14c63a00c3d0f0c 2020-01-16 13:47 +0000 [13fa33588f] Sean Bright * app_voicemail, say: Fix various leading whitespace problems In af90afd90c64c5183c2207d061f9aa15138081b2, Japanese language support was added to app_voicemail and main/say.c, but the leading whitespace is not consistent with Asterisk coding guidelines. This patch fixes that. Whitespace only, no functional change. ASTERISK~23324 Reported by: Kevin McCoy Change-Id: I72c725f5930084673749bd7c9cc426a987f08e87 2020-01-16 07:32 +0000 [f5a1e8b04d] Sean Bright * pbx.c: Include filesystem cache in free memory calculation ASTERISK-28695 #close Reported by: Kevin Flyn Change-Id: Ief098bb6eb77378daeace8f97ba30701c8de55b8 2020-01-16 09:09 +0000 [31027f33db] Sean Bright * chan_sip.c: Stop handling continuation lines after reading headers lws2sws() does not stop trying to handle header continuation lines even after all headers have been found. This is problematic if the first character of a SIP message body is a space or tab character, so we update to recognize the end of the message header. ASTERISK-28693 #close Reported by: Frank Matano Change-Id: Idec8fa58545cd3fd898cbe0075d76c223f8d33df 2020-01-15 14:29 +0000 [293600724d] Sean Bright * app_voicemail: Prevent crash when saving message with realtime voicemail ast_store_realtime() is not NULL tolerant, so we need to initialize the field values we pass to it to the empty string to avoid a crash. ASTERISK-23739 #close Reported by: Stas Kobzar Change-Id: I756c5dd0299c77f4274368f7c99eb0464367466c 2020-01-14 16:20 +0000 [e379fe48e1] Sean Bright * app_voicemail: Set globals to default values when voicemail.conf missing If voicemail.conf exists but is empty, the config parsing process will default a number of global variables to non-zero values. On the other hand, if voicemail.conf is missing (arguably semantically equivalent to an empty file), this process is skipped and the globals are defaulted to 0. Set the globals to the same values they would be set to if a configuration were present. This allows voicemail configuration to be done completely by Realtime without the need to create an empty voicemail.conf file. ASTERISK-27622 #close Reported by: Jim Van Meggelen Change-Id: Id907d280f310f12e542ca527e6a025432b9fb409 2020-01-11 07:29 +0000 [5fded77e7f] Sean Bright * app_queue: Deprecate the QueueMemberPause.Reason field The QueueMemberPause AMI event includes two fields that return the reason a member was paused. * In release branches, deprecate Reason in favor of PausedReason. * In master, remove the Reason field entirely. ASTERISK-28349 #close Reported by: Niksa Baldun Change-Id: I01da58f2b0ab927baeee754870f62b51b7b3d296 2020-01-13 16:37 +0000 [fbe18165d5] Sean Bright * res_realtime: Fix 'realtime update2' argument handling The change in 9b99ef50b5d01ee8111d26efa7b926bdfaf3f980 updated the syntax of the 'realtime update2' CLI command but did not correctly update the calls to ast_update2_realtime(). The issue this addresses was originally opened because we aren't allowing a SQL NULL to be set as part of the update, but this is a limitation of the Realtime API and is not a bug. Additionally, this patch: * Corrects the example in the command documentation to reflect 'update2' instead of 'update.' * Fixes the leading spacing of the command documentation. * Checks that the required 'NULL' literal argument is present where we expect it to be. ASTERISK-21794 #close Reported by: Cédric Bassaget Change-Id: Idda63a5dc50d5f9bcb34c27ea3238d90f733b2cd 2020-01-10 13:30 +0000 [f69da94fab] Sean Bright * func_curl: Add 'followlocation' option to CURLOPT() We allow for 'maxredirs' to be set, but this value is ignored when followlocation is not enabled which, by default, it is not. ASTERISK-17491 #close Reported by: candrews Change-Id: I96a4ab0142f2fb7d2e96ff976f6cf7b2982c761a 2020-01-10 15:13 +0000 [8d87fef5a1] Sean Bright * res_pjsip_endpoint_identifier_ip: Document support for hostnames ASTERISK-25429 #close Reported by: Joshua C. Colp Change-Id: I7cdfc6026821636acc2465094b7fcde8471a3824 2020-01-10 14:43 +0000 [0a56edca4d] Sean Bright * res_pjsip_notify: Only allow a single Event header to be added to a NOTIFY ASTERISK-27775 #close Reported by: AvayaXAsterisk Change-Id: Iad158e908e34675ad98f74d09c5e73024e50c257 2019-12-03 12:27 +0000 [b92b0469ff] Jaco Kroon * netsock2: ast_addressfamily_to_sockaddrsize and ast_sockaddr_from_sockaddr. ast_addressfamily_to_sockaddrize will determine the size that's required, and ast_sockaddr_from_sockaddr then wraps this new function and ast_sockaddr_copy_sockaddr to copy arbitrary sockaddr's (without knowing the address family) into the ast_sockaddr structure. Change-Id: Iee604e96e9096c79b477d6e5ff310cf0b06dae86 Signed-off-by: Jaco Kroon 2020-01-09 04:37 +0000 [0c07a7ee00] Corey Farrell * app_record: Do not hang up if beep audio is missing Additionally alter the warning to mention that it was "beep" which could not be streamed to give admins a better clue about what the warning means. ASTERISK-28682 Change-Id: If5aed21226a173117ed17589f44826dd1ba6576e 2020-01-08 13:54 +0000 [de078debab] Kevin Harwell * app_agent_pool: Update XML docs for AgentLogin This patch fixes some wrongly formatted documentation for the AgentLogin application. A couple of "see also" links should contain only the function name, and no parameters. Change-Id: I3f788b47dce3292e311f8a9856938d59a0bd0661 2020-01-08 12:11 +0000 [4cf32f2578] George Joseph * CI: Update buildAsterisk.sh to do a "make full" If you do a "make all" when building Asterisk the xml documentation produced will be missing certain AMI events where their documentation is located not at the top of the c source file but embedded further down next to the event's manager_event() registration call. See main/manager_mwi.c for an example. "make full" does produce the correct documentation so we're changing it in the build script. A separate commit/issue will address the problem with "make all". ASTERISK-28507 Reported by: David Lee Change-Id: I4a22635d6eef99eacecc0efb69e28360eebdb86c 2020-01-06 09:02 +0000 [8318b05f25] Joshua C. Colp * res_pjsip_pubsub: Add ability to persist generator state information. Some body generators, such as dialog-info+xml, require storing state information which is then conveyed in the NOTIFY request itself. Up until now there was no way for such body generators to persist this information. Two new API calls have been added to allow body generators to set and get persisted data. This data is persisted out alongside the normal persistence information and allows the body generator to restore state information or to simply use this for normal storage of state. State is stored in the form of JSON and it is up to the body generator to interpret this as needed. The dialog-info+xml body generator has been updated to take advantage of this to persist the version number. ASTERISK-27759 Change-Id: I5fda56c624fd13c17b3c48e0319b77079e9e27de 2019-12-24 09:16 +0000 [f8b0c2c933] Sean Bright * res_pjsip_endpoint_identifier_ip.c: Add port matching support Adds source port matching support when IP matching is used: [example] type = identify match = 1.2.3.4:5060/32, 1.2.3.4:6000/32, asterisk.org:4444 If the IP matches but the source port does not, we reject and search for alternatives. SRV lookups are still performed if enabled (srv_lookups = yes), unless the configured FQDN includes a port number in which case just a host lookup is performed. ASTERISK-28639 #close Reported by: Mitch Claborn Change-Id: I256d5bd5d478b95f526e2f80ace31b690eebba92 2019-12-30 11:04 +0000 [64692a3c72] George Joseph * sig_pri: Fix deadlock caused by sig_pri_queue_hangup The change to add setting hangupsource to sig_pri_queue_hangup() made in https://gerrit.asterisk.org/c/asterisk/+/12857 casued deadlocks when a hangup request was received from the core at the same time a hanguprequest was received from the remote end via the D channel. Although the PRI's channel private structure was being unlocked before setting the hangupsource, the PRI's own lock was still being held during the process. If channel actions were also coming from the core, a deadlock on the PRI could result. This deadlock could then escalate to the entire DAHDI subsystem via DAHDI's global interface list lock, especially if someone used the PRI CLI commands. Fix: * We now unlock the PRI as well as the PRI's channel private structure before setting the hangupsource, then relock both afterwards. ASTERISK-28605 Reported by: Dirk Wendland Change-Id: Id74aaa5d4e3746063dbe9deed188eb65193cb9c9 2019-12-30 13:13 +0000 [a7692ce2f4] Richard Mudgett * app_chanisavail.c: Simplify dialplan using ChanIsAvail. Dialplan has to be careful about passing an empty device list or empty positions in the list. As a result, dialplan has to check for these conditions before using ChanIsAvail. Simplify dialplan by making ChanIsAvail handle these conditions gracefully. * Made tolerate empty positions in the device list. * Simplified the code and eliminated some unnecessary indention. ASTERISK-28638 Change-Id: I9e4b67e2cbf26b2417c2d03485b8568e898931d3 2020-01-02 14:25 +0000 [dd82ebecd3] George Joseph * stasis.c: Use correct topic name in stasis_topic_pool_delete_topic When a topic is created for an object, its name is only : For example: bridge:cb68b3a8-fce7-4738-8a17-d7847562f020 When a topic is added to a pool, its name has the pool's topic name prepended. For example: bridge:all/bridge:cb68b3a8-fce7-4738-8a17-d7847562f020 The topic_pool_entry's name however, is only what was passed in to stasis_topic_pool_get_topic which is bridge:cb68b3a8-fce7-4738-8a17-d7847562f020 That's actually correct because the entry is qualified by the pool that's in. When you're ready to delete the entry from the pool, you retrieve the tropic name from the object but since it now has the pool's topic name prepended, it won't be found in the pool container. Fix: * Modified stasis_topic_pool_delete_topic() to skip past the pool topic's name, if it was prepended to the topic name, before searching the container for a pool entry. ASTERISK-28633 Reported by: Joeran Vinzens Change-Id: I4396aa69dd83e4ab84c5b91b39293cfdbcf483e6 2019-12-29 22:38 +0000 [144b774b85] Richard Mudgett * app_dial.c: Simplify dialplan using Dial. Dialplan has to be careful about passing an empty destination list or empty positions in the list. As a result, dialplan has to check for these conditions before using Dial. Simplify dialplan by making Dial handle these conditions gracefully. * Made tolerate empty positions in the dialed device list. * Reduced some message log levels from notice to verbose. ASTERISK-28638 Change-Id: I6edc731aff451f8bdfaee5498078dd18c3a11ab9 2019-12-29 20:41 +0000 [2780be334d] Richard Mudgett * app_page.c: Simplify dialplan using Page. Dialplan has to be careful about passing an empty destination list or empty positions in the list. As a result, dialplan has to check for these conditions before using Page. Simplify dialplan by making Page handle these conditions gracefully. * Made tolerate empty positions in the paged device list. * Reduced some warnings associated with the 's' option to verbose messages. The warning level for those messages really serves no purpose as that is why the 's' option exists. ASTERISK-28638 Change-Id: I95b64a6d6800cd1a25279c88889314ae60fc21e3 2019-12-29 18:36 +0000 [11753d94d8] Richard Mudgett * features.c: Make Bridge application tolerate unspecified channel. The Bridge application was inconsistent if the channel to bridge with is not specified. If no parameters are given then a warning is issued and the current channel is hung up. If options are given but no channel is specified then a warning is issued and the current channel is not hung up. * Made the Bridge application give a verbose message instead of a warning if the channel to bridge with is not specified and made not hang up the current channel. As a result dialplan no longer needs to check if a channel name is passed before calling Bridge and simply needs to check the BRIDGERESULT channel variable instead. This is something you likely want your dialplan to do anyway. * Fixed up L() option warning message. It is up to the caller to determine if the channel is hung up because of the warning. Dial() hangs up the current channel while Bridge() does not. Change-Id: I44349a8dc3912397f28852777de04f19e7bb9c73 2019-12-29 17:48 +0000 [00e745066c] Richard Mudgett * app_chanspy.c: Reduce log message level from notice to verbose. Change-Id: Ica5f38ccd8cdc077aef14d0c50425e0b29ac7e0a 2019-12-29 17:31 +0000 [198f4cbdbf] Richard Mudgett * app_softhangup.c: Reduce unnecessary warning to verbose message. Why log a warning for something your dialplan explicitly asked for? Change-Id: I167b90daf4c7d75dd4b7ef94849f6cef05aa43a7 2020-01-05 10:00 +0000 [992dcdf780] Sean Bright * res_pjsip_config_wizard: Fix change detection for wizard settings ast_sorcery_changeset_create() is not commutative and will fail to detect differences between two variable lists depending on what changed, so switch to ast_variable_lists_match(). ASTERISK-28492 #close Reported by: Jean-Denis Girard Change-Id: I7b3256983ddfaa2138d3de92a444a53b5193a4e1 2020-01-03 10:20 +0000 [60fd1322d7] Sean Bright * res_agi: Improve GET FULL VARIABLE documentation ASTERISK-28673 #close Reported by: Jonathan Harris Change-Id: I591afdec669622bfa19243aabec31b579652c92f 2019-11-26 13:24 +0000 [47ba42f4a0] Sean Bright * websocket: Consider pending SSL data when waiting for socket input When TLS is in use, checking the readiness of the underlying FD is insufficient for determining if there is data available to be read. So before polling the FD, check if there is any buffered data in the TLS layer and use that first. ASTERISK-28562 #close Reported by: Robert Sutton Change-Id: I95fcb3e2004700d5cf8e5ee04943f0115b15e10d 2019-12-17 18:20 +0000 [b9b50774f5] snuffy * contrib/valgrind: Fix use of frame-level suppression Fix use of frame-level wildcard usage in suppression file. ASTERISK-27243 #close Reported-by: Richard Kenner Change-Id: I1c0c64c5f305d2c9aa124e11f1f64a2eec52dc51 2019-08-28 05:07 +0000 [e54299cd3e] Boris P. Korzun * func_odbc: acf_odbc_read() and cli_odbc_read() unicode support Added ast_odbc_ast_str_SQLGetData() considers SQL_DESC_OCTET_LENGTH column attribute for correct allocating the buffer. ASTERISK-28497 #close Change-Id: I50e86c8a277996f13d4a4b9b318ece0d60b279bf 2019-12-03 05:58 +0000 [82a870c8c7] Jean Aunis * chan_sip: voice frames are no longer transmitted after emitting a COLP The SIP transaction state was reset when emitting an UPDATE or a re-INVITE related to a COLP, preventing RTP packets to be emitted. ASTERISK-28647 Change-Id: Ie7a30fa7a97f711e7ba6cc17f221a0993d48bd8b 2019-12-27 17:29 +0000 [efa13eb0a0] Sean Bright * db: Initialize condition primitive before use The db_init() function ultimately calls db_sync() which signals the condition before it is initialized. Change-Id: Id4a4e025b637bc4ac7d90557fcb71d56598892ab 2019-12-18 09:13 +0000 [a78758d0a2] Sean Bright * config.c: Skip UTF-8 BOMs if present when reading config files ASTERISK-28667 #close Change-Id: I4767ed365c98f3e1587b7653321048a31d8a53b2 2019-12-17 07:38 +0000 [b8e635916f] Pascal Cadotte Michaud * sip_to_pjsip.py: Fix trustrpid typo ASTERISK-28664 #close Change-Id: I6c28b1002fd7075ae0ed36f026f8c1855c9418a6 2019-12-16 06:35 +0000 [7167fd6d46] Joshua C. Colp * configure: Add check for MySQL client bool and my_bool type usage. Instead of trying to use the defined MySQL client version from the header use a configure check to determine whether the bool or my_bool type should be used for defining a boolean. ASTERISK-28604 Change-Id: Id2225b3785115de074c50c123ff1a68005b4a9c7 2019-12-11 18:03 +0000 [5622df0a94] Joshua C. Colp * confbridge: Add support for specifying maximum sample rate. ConfBridge has the ability to move between different sample rates for mixing the conference bridge. Up until now there has only been the ability to set the conference bridge to mix at a specific sample rate, or to let it move between sample rates as necessary. This change adds the ability to configure a conference bridge with a maximum sample rate so it can move between sample rates but only up to the configured maximum. ASTERISK-28658 Change-Id: Idff80896ccfb8a58a816e4ce9ac4ebde785963ee 2019-12-16 05:23 +0000 [186c4e9b36] Joshua C. Colp * res_pjsip_session: Set stream state on created streams for incoming SDP. A previous review, 13174, made a change whereby on an incoming offer SDP the pending topology was initialized to the configured. This caused a problem for bundle with WebRTC where bundle could reference a stream that did not actually exist if the configuration had both audio and video but the offer SDP only contained audio. This change undoes that review and instead fixes the original problem it sought to solve by setting the state of created streams based on the contents of the offer SDP. This way the stream state is not inactive until negotiation later completes. ASTERISK-28659 Change-Id: Ic5ae5a86437d3e686ac5afd91d133cc916198355 2019-12-13 13:46 +0000 [d17bbcb9f1] Kevin Harwell * res_fax: wrap v21 detected Asterisk initiated negotiation with config option A previous patch: Gerrit Change-Id: I73bb24799bfe1a48adae9c034a2edbae54cc2a39 made it so a T.38 Gateway tries to negotiate with both sides by sending T.38 negotiation request to both endpoints supported T.38 versus the previous behavior of forwarding negotiation to the "other" channel once a preamble was detected. This had the unfortunate side effect of breaking some setups. Specifically ones that set the max datagram option on an endpoint configuration (configured max datagram was not propagated since Asterisk now initiates negotiations). This patch adds a configuration option, "negotiate_both", that when enabled makes it so Asterisk initiates the negotiation requests to both endpoints vs. the previous behavior of waiting, and forwarding the request. The default is disabled keeping with the old behavior. ASTERISK-28660 Change-Id: I5deb875f3485e20bc75119ec743090655d864a1a 2019-11-27 11:34 +0000 [aa06c6ea29] Frederic LE FOLL * app_chanisavail/cdr: ChanIsAvail sometimes fails to deactivate CDR. Temporary channel lifespan is very short and CDR deactivation request through ast_cdr_set_property() may happen when CDR is not available yet. Use CDR_PROP() dialplan function instead, it will first wait for pending CDR insertion requests to be processed. ASTERISK-28636 Change-Id: I1cbe09e8d2169c0962c1195133ff260d291f2074 2019-12-12 05:03 +0000 [9240fcd8bb] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.7.0 2019-12-04 02:35 +0000 [77941efad9] Jaco Kroon * ACL: ast_apply_acl_nolog - identical to ast_apply_acl but without logging. Due to use in res_rtp_asterisk there is a need to be able to apply an ACL without logging any invalid/denies. It's probably sensible to at least validate the ACL once directly after load and report invalid ACLs. Change-Id: I256169229d945ca7c1bbf228fc492d91df345843 Signed-off-by: Jaco Kroon 2019-12-11 10:52 +0000 [2d2b28bfa4] Pascal Cadotte Michaud * PJSIP_CONTACT: add missing argument documentation add missing argument "rtt" and "status" to the documentation The change to the dtd file allow an enumlist to contain one or many configOptionToEnum or enum. This is different from the previous patch I submitted when you could have a configOptionToEnum or (a configOptionToEnum followed by one or manu enums) or (one or many enums) ASTERISK-28626 Change-Id: Ia71743ee7ec813f40297b0ddefeee7909db63b6d 2019-12-11 07:01 +0000 [9c29c3fb3e] Joshua Colp * Revert "PJSIP_CONTACT: add missing argument documentation" This reverts commit 174e6426aa8a8c26d83c5e06cfbc77277c2f5934. Reason for revert: Regression in XML validation. validity error : Content model of enumlist is not determinist: (configOptionToEnum | (configOptionToEnum , enum+) | enum+) As we are preparing to do releases and this is not critical I am reverting this for now until resolved. Change-Id: I2c9656fb40b2d2f56f54caa35c8be02cc92babd0 2019-12-04 15:01 +0000 [8af0dea0c7] George Joseph * res_rtp_asterisk: Add frame list cleanups to ast_rtp_read In Asterisk 16+, there are a few places in ast_rtp_read where we've allocated a frame list but return a null frame instead of the list. In these cases, any frames left in the list won't be freed. In the vast majority of the cases, the list is empty when we return so there's nothing to free but there have been leaks reported in the wild that can be traced back to frames left in the list before returning. The escape paths now all have logic to free frames left in the list. ASTERISK-28609 Reported by: Ted G Change-Id: Ia1d7075857ebd26b47183c44b1aebb0d8f985f7a 2019-12-04 08:35 +0000 [055737d645] Jaco Kroon * chan_sip: in case of tcp/tls, be less annoying about tx errors. chan_sip.c:3782 __sip_xmit: sip_xmit of 0x7f1478069230 (len 600) to 213.150.203.60:1492 returned -2: Interrupted system call returned -2 implies this wasn't actually an OS error, so errno makes no sense either. Internal error was already logged higher up, and -2 generally means that either there isn't a valid connection available, or the pipe notification failed, and that is already correctly logged. ASTERISK-28651 #close Change-Id: I46eb82924beeff9dfd86fa6c7eb87d2651b950f2 Signed-off-by: Jaco Kroon 2019-08-25 21:20 +0000 [63b8664bfa] George Joseph * res_pjsip_nat: Restore original contact for REGISTER responses RFC3261 Section 10 "Registrations", specifically paragraph "10.2.4: Refreshing Bindings", states that a user agent compares each contact address (in a 200 REGISTER response) to see if it created the contact. If the Asterisk endpoint has the rewrite_contact option set however, the contact host and port sent back in the 200 response will be the rewritten one and not the one sent by the user agent. This prevents the user agent from matching its own contact. Some user agents get very upset when this happens and will not consider the registration successful. While this is rare, it is acceptable behavior especially if more than 1 user agent is allowed to register to a single endpoint/aor. This commit updates res_pjsip_nat (where rewrite_contact is implemented) to store the original incoming Contact header in a new "x-ast-orig-host" URI parameter before rewriting it, and to restore the original host and port to the Contact headers in the outgoing response. This is only done if the request is a REGISTER and rewrite_contact is enabled. pjsip_message_filter was also updated to ensure that if a request comes in with any existing x-ast-* URI parameters, we remove them so they don't conflict. Asterisk will never send a request with those headers in it but someone might just decide to add them to a request they craft and send to Asterisk. NOTE: If a device changes its contact address and registers again, it's a NEW registration. If the device didn't unregister the original registration then all existing behavior based on aor/remove_existing and aor/max_contacts apply. ASTERISK-28502 Reported-by: Ross Beer Change-Id: Idc263ad2d2d7bd8faa047e5804d96a5fe1cd282e 2019-12-04 15:26 +0000 [68ce999351] Sean Bright * res_pjsip_registrar.c: Prevent potential double free if AOR is not found The simple fix here is simply to NULL out username and password after we call ast_free on them. Unfortunately, I noticed that we weren't checking for allocation failures for username and password, and adding those checks made things noisy and cumbersome. So instead we partially rollback the recent LGTM patch, and move the alloca calls into find_aor_name(). ASTERISK-28641 #close Reported by: Ross Beer Change-Id: Ic9d01624e717a020be0b0aee31f0814e7f1ffbe2 2019-12-04 15:12 +0000 [5c20cc4c3a] Sean Bright * res_pjsip_registrar.c: Prevent possible buffer overflow with domain aliases We're appropriately sizing the id_domain_alias buffer, but then copying the data into the id_domain one. We were then using the uninitialized id_domain_alias buffer we just allocated. This is ASTERISK~28641 adjacent, but significant enough to warrant its own patch. Change-Id: I81c38724d18deab8c6573153e2b99dbb6e2f33d9 2019-12-04 03:33 +0000 [161e762742] Walter Doekes * app_queue: Fix old confusing comment about when the members are called ASTERISK-28644 Change-Id: I2771a931d00a8fc2b9f9a4d1a33ea8f1ad24e06b 2019-12-03 15:42 +0000 [fbc80db350] Sean Bright * res_pjsip_session.c: Prevent use-after-free with TEST_FRAMEWORK enabled We need to copy the endpoint name before we call ao2_cleanup() on it, otherwise we might try to access memory that has been reclaimed. ASTERISK-28445 #close Reported by: Bernhard Schmidt Change-Id: I404b952608aa606e0babd3c4108346721fb726b3 2019-11-22 10:39 +0000 [43d4c0e3c9] Thomas Arimont (license 5525) * channel.c: Resolve issue with receiving SIP INFO packets for DTMF The problem is essentially the same as in ASTERISK~28245. Besides the direct media scenario we have an additional scenario where a special client is involved. This device mutes audio by default in transmit direction (no rtp frames) and activates audio only by a foot switch. In this situation dtmf input (pin for conferences, transfer features codes , etc) using SIP INFO mode is not understood properly especially when SIP INFO messages are sent quickly. This patch ensures that SIP INFO frames are properly queued and processed in the above scenario. The patch also corrects situations where successive dtmf events are received quicker than the signalled event duration (plus minimum gap/pause) allows, i.e. DTMF events have to be buffered in the ast channel read queue and emulation has to be processed asynchronously at slower speed. Reported by: Thomas Arimont patches: trigger_dtmf_emulation.patch submitted by Thomas Arimont (license 5525) Change-Id: I309bf61dd065c9978c8e48f5b9a936ab47de64c2 2019-12-02 06:48 +0000 [80199cd67f] George Joseph * CI: Turn off shallow cloning altogether Change-Id: I73ed4aef33a92f20080128aafc34e19fd4457196 2019-11-27 12:11 +0000 [31173f6586] Frederic LE FOLL * chan_sip+native_bridge_rtp: no directmedia for ptime other than default ptime. During capabilities selection (joint capabilities of us and peer, configured capability for this peer, or general configured capabilities), if sip_new() does not keep framing information, then directmedia activation will fail for any framing different from default framing. ASTERISK-28637 Change-Id: I99257502788653c2816fc991cac7946453082466 2019-11-25 06:55 +0000 [c91b28c72d] Joshua Colp * parking: Fall back to parker channel name even if it matches parkee. ASTERISK-28631 Change-Id: Ia74d084799fbb9bee3403e30d2391aacd46243cc 2019-11-22 15:31 +0000 [bd3cb1b300] Sean Bright * media_cache.c: Various CLI improvements * Use ast_cli_completion_add() to improve performance when large number of cached items are present. * Only complete one URI for commands that only accept a single URI. * Change command documentation to wrap at 80 characters to improve readability. Change-Id: Iedb0a2c3541e49561bc231dca2dcc0ebd8612902 2019-11-21 15:11 +0000 [9eb86a8110] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.6.2 2019-11-15 11:34 +0000 [efef44985d] Salah Ahmed * res_pjsip_t38: T.38 error correction mode selection at 200 ok received if asterisk offer T38 SDP with none error correction scheme and the endpoint respond with redundancy EC scheme, asterisk switch to that mode. Since we configure the endpoint as none EC mode we should not switch to any other mode except none. following logic implemented in code. 1. If asterisk offer none, and anything except none in answer will be ignored. 2. If asterisk offer fec, answer with fec, redundancy and none will be accepted. 3. If asterisk offer redundancy, answer with redundancy and none will be accepted. ASTERISK-28621 Change-Id: I343c62253ea4c8b7ee17abbfb377a4d484a14b19 2019-11-21 12:48 +0000 [e013f502b1] Kevin Reeves * main/file.c: Limit media cache usage to remote files. When testing for the existance of a file, the media cache is searched even if the file has no chance of being in it. This can cause performance issues as the media cache size increases. As a result, calls to applications like Read and Playback using local files must scan through the media cache before playing. Under load and with a large cache, this can delay the playback of those files. This patch updates the function that checks for the existance of a file to only consult the media cache database if the requested file is a remote path. It introduces a new is_remote_path() function in main/file.c. ASTERISK-28625 #close Reported-by: kevin@phoneburner.com Change-Id: If91137493732d9034dafa381c081c69274a7dcc9 2019-10-21 14:55 +0000 [8cdaa93e65] Ben Ford * chan_sip.c: Prevent address change on unauthenticated SIP request. If the name of a peer is known and a SIP request is sent using that peer's name, the address of the peer will change even if the request fails the authentication challenge. This means that an endpoint can be altered and even rendered unusuable, even if it was in a working state previously. This can only occur when the nat option is set to the default, or auto_force_rport. This change checks the result of authentication first to ensure it is successful before setting the address and the nat option. ASTERISK-28589 #close Change-Id: I581c5ed1da60ca89f590bd70872de2b660de02df 2019-10-24 12:41 +0000 [7574be5110] George Joseph * manager.c: Prevent the Originate action from running the Originate app If an AMI user without the "system" authorization calls the Originate AMI command with the Originate application, the second Originate could run the "System" command. Action: Originate Channel: Local/1111 Application: Originate Data: Local/2222,app,System,touch /tmp/owned If the "system" authorization isn't set, we now block the Originate app as well as the System, Exec, etc. apps. ASTERISK-28580 Reported by: Eliel Sardañons Change-Id: Ic4c9dedc34c426f03c8c14fce334a71386d8a5fa 2019-11-21 07:24 +0000 [174e6426aa] Pascal Cadotte Michaud * PJSIP_CONTACT: add missing argument documentation add missing argument "rtt" and "status" to the documentation ASTERISK-28626 Change-Id: I8419e4c8203e411b87d93dc395acdbcf7526dedf 2019-11-20 12:56 +0000 [3cd57aaff2] Kevin Harwell * res_pjsip_outbound_registration: add support for SRV failover ASTERISK-28624 Change-Id: I8da7c300dd985ab7b10dbd5194aff2f737808561 2019-11-19 12:11 +0000 [d075d8913b] George Joseph * CI: Fix missing script block in jenkinsfiles Change-Id: I9f44a3d5085ea7880fad1a3883a4820907e29ea3 (cherry picked from commit 95213b01d2d5e72e38b40c30fa5d0c8cf4b37b16) 2019-11-19 11:40 +0000 [ce8a23fdf9] George Joseph * CI: Fix missing script block in jenkinsfiles Change-Id: Ib4b6e4887695f230ea7a5b0c879b29fc5a13be4f (cherry picked from commit d60f23ecbdb748b188da424c92335152941c7673) 2019-11-19 08:51 +0000 [919bc0c7be] George Joseph * CI: Increase clone depth and do better cleanup The original clone depth of 10 was causing the need to rebase changes whose parent was older than the 10 commits. The clone depth has been increased to 100. Workspace cleanup was only happening for successful builds which wasn't enough to keep the 8G workspace in-memory drives on the docker slaves from filling up. Now the workspaces are cleaned up after every build regardless of success/failure. If you need to preserve builds temporarily, you can log into Jenkins/Manage Jenkins/Configure System and change the CLEANUP_WS_* environment variable for the job type you're troubleshooting to "FALSE". Change-Id: I0d7366e87cea714e5dbc9488caf718802fce75ca 2019-11-19 09:31 +0000 [61a3e7e79b] Sean Bright * res_pjsip_registrar: Fix uninitlized variable warning Fixes: error: ‘domain_name’ may be used uninitialized in this function Found with gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008 Change-Id: I44413b49ea1205aa25538142161deb73883c79e8 2019-11-05 12:16 +0000 [cf5b7f3a0b] Michael Cargile * app_amd: Fixed timeout issue ASTERISK_28143 attempted to fix an issue where calls with no audio would never timeout. It did so by adding AST_FRAME_NULL as a frame type to process in its calculations. Unfortunately these frames seem to show up at irregular time intervals. This resulted in app_amd returning prematurely most of the time. * Removed AST_FRAME_NULL from the calculations * Added a check to see how much time has actually passed since app_amd began ASTERISK-28608 Change-Id: I642a21b02d389b17e40ccd5357754b034c3daa42 2019-11-07 11:54 +0000 [faf353e931] Frederic LE FOLL * chan_dahdi: PRI span status may stay "Down, Active" after a short alarm Upon a short PRI disconnection, libpri may maintain Q.921 layer 'up' and may thus not send PRI_EVENT_DCHAN_DOWN / PRI_EVENT_DCHAN_UP events. If pri_event_alarm() clears DCHAN_UP status bit upon alarm detection and no Q.921 reconnection sequence occurs, chan_dahdi will keep seeing span status "Down" at the end of alarm. This patch modifies pri_event_alarm() in order to keep DCHAN_UP bit unchanged. libpri will send a PRI_EVENT_DCHAN_DOWN event if it detects a disconnection of Q.921 layer and this will clear DCHAN_UP if required. ASTERISK-28615 Change-Id: Ibe27df4971fd4c82cc6850020bce4a8b2692c996 2019-11-07 11:05 +0000 [8894a56452] lvl * app_senddtmf: Add receive mode to AMI Action PlayDTMF ASTERISK-28614 Change-Id: I183501297ae1dc294ae56b34acac9b0343eb2664 2019-11-14 04:19 +0000 [eb54e381fd] Joshua Colp * res_rtp_asterisk: Always return provided DTLS packet length. OpenSSL can not tolerate if the packet sent out does not match the length that it provided to the sender. This change lies and says that each time the full packet was sent. If a problem does occur then a retransmission will occur as appropriate. ASTERISK-28576 Change-Id: Id42455b15c9dc4eb987c8c023ece6fbf3c22a449 2019-11-13 14:25 +0000 [e39ddb1cb1] Sean Bright * func_env: Prevent FILE() from reading garbage at end-of-file If the last line of a file does not have a terminating EOL sequence, we potentially add garbage to the value returned from the FILE() function. There is no overflow potential here as we are reading from a buffer of a known size, we are just reading too much of it. ASTERISK-26481 #close Change-Id: I50dd4fcf416fb3c83150040a1a79a59d9eb1ae01 2019-11-13 17:24 +0000 [3891a953cf] Kevin Harwell * bridge_softmix: clear hold when joining a softmix bridge MOH continues to play to a channel if that channel was on hold prior to entering a softmix bridge. MOH will not stop even if the original "holder" attempts an unhold. For the most part a softmix bridge ignores holds, so a participating channel shouldn't join while on hold. This patch checks to see if the channel joining the softmix bridge is currently on hold. If so then it indicates an unhold. ASTERISK-28618 Change-Id: I66ccd4efc80f5b4c3dd68186b379eb442916392b 2019-10-23 12:36 +0000 [30c0af7257] Kevin Harwell * various files - fix some alerts raised by lgtm code analysis This patch fixes several issues reported by the lgtm code analysis tool: https://lgtm.com/projects/g/asterisk/asterisk Not all reported issues were addressed in this patch. This patch mostly fixes confirmed reported errors, potential problematic code points, and a few other "low hanging" warnings or recommendations found in core supported modules. These include, but are not limited to the following: * innapropriate stack allocation in loops * buffer overflows * variable declaration "hiding" another variable declaration * comparisons results that are always the same * ambiguously signed bit-field members * missing header guards Change-Id: Id4a881686605d26c94ab5409bc70fcc21efacc25 2019-11-07 11:54 +0000 [37dcdd485a] Martin Tomec * func_curl.c: Support custom http headers When user wants to send json data, the default Content-Type header is incorect (application/x-www-form-urlencoded). This patch allows to set any custom headers so the Content-Type header can be overriden. User can set multiple headers by multiple calls of curlopt(). This approach is not consistent with other parameters, but is more readable in dialplan than one call with multiple headers. ASTERISK-28613 Change-Id: I4dd68c3f4e25362ef941d73a3861f58348dcfbf9 2019-11-15 04:46 +0000 [b9bbf39449] Joshua Colp * parking: Fix case where we can't get the parker. ASTERISK-28616 Change-Id: Iabe31ae38d01604284fcc5c2438d44e29a32ea4d 2019-11-12 05:00 +0000 [e7320bbbf0] Joshua Colp * parking: Use channel snapshot instead of channel. There exists a scenario where a thread can hold a lock on the channels container while trying to lock a bridge. At the same time another thread can hold the lock for said bridge while attempting to retrieve a channel. This causes a deadlock. This change fixes this scenario by retrieving a channel snapshot instead of a channel, as information present in the snapshot is all that is needed. ASTERISK-28616 Change-Id: I68ceb1d62c7378addcd286e21be08a660a7cecf2 2019-11-12 12:36 +0000 [6f0a69c51a] Kevin Harwell * res_pjsip_session: initialize pending's topology to endpoint's Found during some testing, there is a race condition between selecting an appropriate bridge type for a call versus the applying of media on the callee's session. In some instances a native bridge type would have been chosen, but due to the callee's media not yet being established at bridge compatibility check time the simple bridge type is picked instead. When using chan_pjsip this initiates a topology change event. The topologies are then compared for the two sessions. However, when the topology was created for the caller its streams are initialized to "inactive". This topology is then used as a base when creating the callee's topology, and streams. Soon after the caller's topology's stream(s) get updated based on the sdp (get set to sendrecv in the failing scenario). Now when the topology change event is raised, and the two topologies are compared, the comparison fails due to a stream state mismatch (sendrecv vs inactive). And since they differ a reinvite is sent out (to the caller in this case). This patch makes it such that when the caller's topology is initially created it gets created based on its configured endpoint's media topology. When the endpoint's topology is created its stream's state(s) are initialized to sendrecv instead of inactive. Subsequently, now when the callee's topology is created its topology streams are now initialized to sendrecv. Thus when the topology change event occurs due to the mentioned scenario the stream states match for the given sessions, and the reinvite is not sent unless due to some other valid mismatch. Note, this patch only changes one pending media state's creation point. It's possible other places *could* be changed, however for now it was deemed best to only alter what's here. Change-Id: I6ba3a6a75f64824a1b963044c37acbe951c389c7 2019-11-06 05:47 +0000 [40c49ec64f] George Joseph * stasis: Don't hold app_registry and session locks unnecessarily resource_events:stasis_app_message_handler() was locking the session, then attempting to determine if the app had debug enabled which locked the app_registry container. res_stasis:__stasis_app_register was locking the app_registry container then calling app_update which caused app_handler (which locks the session) to run. The result was a deadlock. * Updated resource_events:stasis_app_message_handler() to determine if debug was set (which locks the app_registry) before obtaining the session lock. * Updated res_stasis:__stasis_app_register to release the app_registry container lock before calling app_update (which locks the sesison). ASTERISK-28423 Reported by Ross Beer Change-Id: I58c69d08cb372852a63933608e4d6c3e456247b4 2019-11-07 10:56 +0000 [6be18dfb72] Alexei Gradinari * serializer: set high/low alert levels on whole pool The current code sets alert levels starting from index 1. Need to set on whole pool starting from index 0. Change-Id: I5decbb43160954fb9a512f04302637fc666b6f5d 2019-10-29 08:35 +0000 [be4c6f3f35] George Joseph * cdr_mysql: Fix missing use of 'my_bool' with MySql >= 8.0.1 MySql 8.0.1 replaced the "my_bool" type with "bool" so an #if was added to use "bool" with MYSQL_VERSION_ID >= 80001. ASTERISK-28604 Change-Id: I66a28d8f0011e33774edee13a6f8efd2302bb920 2019-10-25 06:46 +0000 [95bc698b85] Joshua Colp * res_pjsip_outbound_registration: Extend documentation for "max_retries". If the "max_retries" option is set to 0 then upon failure no further attemps are made, so explicitly document the behavior. ASTERISK-28602 Change-Id: I1e30daae9dd6c49ce18744164214d3def505acbf 2019-10-24 09:15 +0000 [ccaf735d1f] Sean Bright * res_calendar: Resolve memory leak on calendar destruction Calling ne_uri_parse allocates memory that needs to be freed with a corresponding call to ne_uri_free. ASTERISK-28572 #close Change-Id: I8a6834da27000a6807d89cb7a157b2a88fcb5e61 2019-10-24 05:21 +0000 [6e22e1213e] Joshua Colp * res_ari_events: Add module reference when a WebSocket is open. This change ensures that the module isn't unloaded when a WebSocket is open. Previously it was possible to unload the module manually or during shutdown which could cause a crash when any active WebSockets were terminated. ASTERISK-28585 Change-Id: I85c71ab112f99875b586419a34c08c8b34c14c5c 2019-10-18 13:47 +0000 [e627db7928] Sean Bright * utils.h: Set lower bound for thread stack size to PTHREAD_STACK_MIN ASTERISK-28590 #close Change-Id: I51abce00c04d0a06550bda5205580705185b9c1c 2019-10-18 06:36 +0000 [bfd0e05e59] George Joseph * ExternalMedia: Change return object from ExternalMedia to Channel When we created the External Media addition to ARI we created an ExternalMedia object to be returned from the channels/externalMedia REST endpoint. This object contained the channel object that was created plus local_address and local_port attributes (which are also in the Channel variables). At the time, we thought that creating an ExternalMedia object would give us more flexibility in the future but as we created the sample speech to text application, we discovered that it doesn't work so well with ARI client libraries that a) don't have the ExternalMedia object defined and/or b) can't promote the embedded channel structure to a first-class Channel object. This change causes the channels/externalMedia REST endpoint to return a Channel object (like channels/create and channels/originate) instead of the ExternalMedia object. Change-Id: If280094debd35102cf21e0a31a5e0846fec14af9 2019-10-18 03:13 +0000 [c73aaa2760] Salah Ahmed * Crash during "pjsip show channelstats" execution During execution "pjsip show channelstats" cli command by an external module asterisk crashed. It seems this is a separate thread running to fetch and print rtp stats. The crash happened on the ao2_lock method, just before it going to read the rtp stats on a rtp instance. According to gdb backtrace log, it seems the session media was already cleaned up at that moment. ASTERISK-28578 Change-Id: Ib7c7f39996d942984394782296bb99aae67862e5 2019-10-17 05:50 +0000 [ef2eb064b2] Joshua Colp * res_rtp_asterisk: Remove a log message that slipped in. This was only supposed to be for testing, so now it can be removed. Change-Id: I3dfc2e776e70b3196aeed5688372ea80c0214b59 2019-10-16 16:06 +0000 [2666a5e111] Sean Bright * README-SERIOUSLY.bestpractices.md: Speling correetions. ASTERISK-28586 #close Change-Id: I43dc4e8bd9dc685b17695b215a5360314074734f 2019-09-26 19:24 +0000 [b41a8fd0f3] cmaj * app_voicemail.c: Support multiple file formats for forwarded messages. If you specify multiple formats in voicemail.conf, eg. "format = gsm|wav" and are using realtime ODBC backend, only the first format gets stored in the database. So when you forward a message later on, there is a bug generating the email, related to the stored format (GSM) being different than the desired email format (WAV) specified for the user. Sox can handle this, but Asterisk needs to tell sox exactly what to do. ASTERISK-22192 Change-Id: I7321e7f7e7c58adbf41dd4fd7191c887b9b2eafd 2019-10-14 06:19 +0000 [ed12715cbe] Joshua Colp * test_res_rtp: Enable FIR and REMB nominal tests. Now that both FIR and REMB are being sent in compound packets these tests can be enabled. This also extends the REMB nominal test to cover the REMB contents itself. Change-Id: Ibfee526ad780eefcce5dd787f53785382210024a 2019-10-08 13:40 +0000 [6c54bd704e] Christoph Moench-Tegeder * cdr_pgsql cel_pgsql res_config_pgsql: compatibility with PostgreSQL 12 PostgreSQL 12 finally removed column adsrc from table pg_catalog.pg_attrdef (column default values), which has been deprecated since version 8.0. Since then, the official/correct/supported way to retrieve the column default value from the catalog is function pg_catalog.pg_get_expr(). This change breaks compatibility with pre-8.0 PostgreSQL servers, but has reached end-of-support more than a decade ago. cdr_pgsql and res_config_pgsql still have support for pre-7.3 servers, but cleaning that up is perhaps a topic for a major release, not this bugfix. ASTERISK-28571 Change-Id: I834cb3addf1937e19e87ede140bdd16cea531ebe 2019-10-10 15:30 +0000 [17e71b6abe] Kevin Harwell * res_pjsip_mwi: potential double unref, and potential unwanted double link When creating an unsolicited MWI aggregate subscription it was possible for the subscription object to be double unref'ed. This patch removes the explicit unref as it is not needed since the RAII_VAR will handle it at function end. Less concerning there was also a bug that could potentially allow the aggregate subscription object to be added to the unsolicited container twice. This patch ensures it is added only once. ASTERISK-28575 Change-Id: I9ccfdb5ea788bc0c3618db183aae235e53c12763 2019-10-09 16:00 +0000 [867c8b2879] Chris Savinovich * test_taskprocessor.c: Fix test failure on Ubuntu Fixes a failure in /main/taskprocesor unit test, only occurring in Ubuntu. Newer versions of GCC require variable initialization. Change-Id: I2994d8aab9307a8c2c7330584f287a27144a580c 2019-10-09 09:32 +0000 [cb6e0d36ae] George Joseph * pjproject_bundled: Replace earlier reverts with official fixes. Issues in pjproject 2.9 caused us to revert some of their changes as a work around. This introduced another issue where pjproject wouldn't build with older gcc versions such as that found on CentOS 6. This commit replaces the reverts with the official fixes for the original issues and allows pjproject to be built on CentOS 6 again. ASTERISK-28574 Reported-by: Niklas Larsson Change-Id: I06f8507bea553d1a01b0b8874197d35b9d47ec4c 2019-10-09 15:17 +0000 [a66848c92f] Joshua Colp (license 5000) * pbx: deadlock when outgoing dialed channel hangs up too quickly Here's the basic scenario that occurred when executing an AMI fast originate while at the same time something else locks the channels container, and also wants a lock on the dialed channel: 1. pbx_outgoing_attempt obtains a lock on a dialed channel 2. concurrently another thread obtains a lock on the channels container, and subsequently requests a lock on the dialed channel. It waits on #1. For instance, "core show channel * Revert "app_voicemail: Cleanup stale lock files on module load" This reverts commit fd2e8d0da7ba539470ed73d463d8bc641f7843af. Reason for revert: Problematic for users who store their voicemail on network storage devices, or share voicemail storage between multiple Asterisk instances. ASTERISK-28567 #close Change-Id: I3ff4ca983d8e753fe2971f3439bd154705693c41 2019-10-02 11:37 +0000 [3f12cd7711] Kevin Harwell * res_pjsip_mwi: use an ao2_global object for mwi containers On shutdown it's possible for the unsolicited mwi container to be freed before other dependent threads are done using it. This patch ensures this can no longer happen by wrapping the container in an ao2_global object. The solicited container was also changed too. ASTERISK-28552 Change-Id: I8f812286dc19a34916acacd71ce2ec26e1042047 2019-10-02 11:24 +0000 [afc10c25ac] Kevin Harwell * serializer: move/add asterisk serializer pool functionality Serializer pools have previously existed in Asterisk. However, for the most part the code has been duplicated across modules. This patch abstracts the code into an 'ast_serializer_pool' object. As well the code is now centralized in serializer.c/h. In addition serializer pools can now optionally be monitored by a shutdown group. This will prevent the pool from being destroyed until all serializers have completed. Change-Id: Ib1e906144b90ffd4d5ed9826f0b719ca9c6d2971 2019-10-02 11:34 +0000 [931ef77e21] Kevin Harwell * res_pjsip/res_pjsip_mwi: use centralized serializer pools Both res_pjsip and res_pjsip_mwi made use of serializer pools. However, they both implemented their own serializer pool functionality that was pretty much identical in each of the source files. This patch removes the duplicated code, and uses the new 'ast_serializer_pool' object instead. Additionally res_pjsip_mwi enables a shutdown group on the pool since if the timing was right the module could be unloaded while taskprocessor threads still needed to execute, thus causing a crash. Change-Id: I959b0805ad024585bbb6276593118be34fbf6e1d 2019-10-04 15:31 +0000 [495bc77a6a] Sean Bright * cdr_mysql: Don't clean up on unload unless we can unregister from CDRs ASTERISK-28566 #close Change-Id: I6daa4e5128e9406d04d3aed670c3bae98d38d40c 2019-10-01 09:01 +0000 [ce1e0714ba] Joshua Colp * stasis: Pass bumped topic_all reference to proxy_dtor. This avoids use of the global variable and ensures topic_all remains active until all topics are freed. ASTERISK-28553 patches: ASTERISK-28553.patch by coreyfarrell (license 5909) Change-Id: I9a8cd8977f3c3a6aa00783f8336d2cfb9c2820f1 2019-10-01 06:29 +0000 [19565e0b90] lvl * chan_pjsip: Prevent segfault when running PlayDTMF on hungup channel ASTERISK-28086 #close Change-Id: Ib3baadc89b9f0477a6f25a63861433812368c5ea 2019-09-19 03:56 +0000 [9a933c3adc] Torrey Searle * channel/chan_pjsip: add dialplan function for music on hold Add a new dialplan function PJSIP_MOH_PASSTHROUGH that allows the on-hold behavior to be controlled on a per-call basis ASTERISK-28542 #close Change-Id: Iebe905b2ad6dbaa87ab330267147180b05a3c3a8 2019-09-27 09:54 +0000 [1f10ca76da] Sean Bright * res_pjsip_transport_websocket: Don't put brackets around local_name if IPv6 ASTERISK-28544 #close Change-Id: I8e62c444d107674c298f472e3545661de8a80dce 2019-09-24 14:18 +0000 [04f7d136d8] Alexei Gradinari * res_pjsip_pubsub: add endpoint to some warning There are some warning messages which are not informative without endpoint: "No registered subscribe handler for event presence.winfo" "No registered publish handler for event presence" This patch adds an endpoint name to these messages. Change-Id: Ia2811ec226d8a12659b4f9d4d224b48289650827 2019-09-26 10:35 +0000 [d146ec7e83] Asterisk Team * Revert "Update CHANGES and UPGRADE.txt for 16.6.0-rc2" This reverts commit a0844a9b9bbe313c524bca82550e7ec1ed2fe928. Correcting/reverting accidental upgrade on release process. Change-Id: I08746eda578effa6e64054690fad48a17d2f42e7 2015-03-27 17:34 +0000 [85c7326d08] Jonathan Rose * basic-pbx: Bring forward queue configuration from 13 Original commit: cfbf5fbe918bc34f3d600760fc0b6f13a3a9a0ed Change-Id: I34a841d73c429ca8d944481f8dccb756ee231c9c 2019-09-25 11:01 +0000 [0514559005] Sean Bright * pbx: Prevent Realtime switch crash on invalid priority pbx_extension_helper takes two 'context' arguments. One (con) is a pointer directly to a 'struct ast_context' and the other (context) is the name of the context. In all cases, one of these arguments is NULL and the other is non-NULL. Functions that are ultimately called by pbx_extension_helper expect that 'context' will be non-NULL, so we set it unconditionally on entry into this function. ASTERISK-28534 #close Change-Id: Ifbbc5e71440afd80efd441f7a9d72e8b10b6f47d 2019-09-24 15:44 +0000 [827dd754b2] Ben Ford * taskprocessor.c: Added "like" support to 'core show taskprocessors' Added "like" support for 'core show taskprocessors'. Now you can specify a specific set of taskprocessors (or just one) by adding the keyword "like" to the above command, followed by your search criteria. Change-Id: I021e740201e9ba487204b5451e46feb0e3222464 2019-09-25 12:53 +0000 [a0844a9b9b] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.6.0-rc2 2019-09-24 17:43 +0000 [41cd1ff454] Sean Bright * res_pjsip_registrar: Validate Contact URI before adding to responses If a permanent contact URI associated with an AOR is invalid, we add a Contact header to REGISTER responses with a NULL URI, causing a crash. ASTERISK-28463 #close Change-Id: Id2b643e58b975bc560aab1c111e6669d54db9102 2019-09-24 11:21 +0000 [9ff11c2f00] Kevin Harwell * res_pjsip_pubsub: change warning to debug The following message: "Subscription request from endpoint rejected. Expiration of 0 is invalid" Would sometimes spam the log with warnings if Asterisk restarted and a bunch of clients sent unsubscribes. This patch changes it from a warning to a debug message. Change-Id: I841ec42f65559f3135e037df0e55f89b6447a467 2019-09-22 21:04 +0000 [cd51f5b876] Corey Farrell * core: Fix ABI mismatch of ao2_global_obj. astobj2.c declares DEBUG_THREADS_LOOSE_ABI to avoid overhead of debug threads tracking information in the internal structures of astobj2. Unfortunately this means that ao2_global_obj contains the statically allocated debug threads tracking fields which are used by initialization and cleanup but main/astobj2.c believed those fields and associated space did not exist. Change-Id: Icef41ad97d88a8c1d1515e034ec8133cab3b1527 2019-09-24 09:40 +0000 [5ea667e03a] Ben Ford * taskprocessor.c: Add CLI commands to reset taskprocessor stats. Added two new CLI commands to reset stats for taskprocessors. You can reset stats for a single, specific taskprocessor ('core reset taskprocessor '), or you can reset all taskprocessors ('core reset taskprocessors'). These commands will reset the counter for the number of tasks processed as well as the max queue size. Change-Id: Iaf17fc4ae29396ab0c6ac92408fc7bdc2f12362d 2019-09-19 09:50 +0000 [789c51ac8a] George Joseph * pjproject_bundled: Revert pjproject 2.9 commits causing leaks We've found a connection re-use regression in pjproject 2.9 introduced by commit "Close #1019: Support for multiple listeners." https://trac.pjsip.org/repos/changeset/6002 https://trac.pjsip.org/repos/ticket/1019 Normally, multiple SSL requests should reuse the same connection if one already exists to the remote server. When a transport error occurs, the next request should establish a new connection and any following requests should use that same one. With this patch, when a transport error occurs, every new request creates a new connection so you can wind up with thousands of open tcp sockets, possibly exhausting file handles, and increasing memory usage. Reverting pjproject commit 6002 (and related 6021) restores the expected behavior. We also found a memory leak in SSL processing that was introduced by commit "Fixed #2204: Add OpenSSL remote certificate chain info" https://trac.pjsip.org/repos/changeset/6014 https://trac.pjsip.org/repos/ticket/2204 Apparently the remote certificate chain is continually recreated causing the leak. Reverting pjproject commit 6014 (and related 6022) restores the expected behavior. Both of these issues have been acknowledged by Teluu. ASTERISK-28521 Change-Id: I8ae7233c3ac4ec29a3b991f738e655dabcaba9f1 2019-09-22 16:59 +0000 [fec6e1bd87] Corey Farrell * core: Add AO2_ALLOC_OPT_NO_REF_DEBUG option. Previous to this patch passing a NULL tag to ao2_alloc or ao2_ref based functions would result in the reference not being logged under REF_DEBUG. This could sometimes cause inaccurate logging if NULL was accidentally passed to a reference action. Now reference logging is only disabled by option passed to the allocation method. Change-Id: I3c17d867d901d53f9fcd512bef4d52e342637b54 2019-09-23 11:01 +0000 [bd96a0b79d] Kevin Harwell * res_sorcery_memory_cache: stale item update leak When a stale item was being updated the object was being retrieved, but its reference was not being decremented after the update. This patch makes it so the object is now appropriately de-referenced. ASTERISK-28523 Change-Id: I9d8173d3a0416a242f4eba92fa0853279c500ec7 2019-09-23 07:09 +0000 [9c5a8066a6] George Joseph * astmm.c: Display backtrace with memory show allocations You can currently capture backtraces of memory allocations but they only get displayed when you stop asterisk and the atexit hooks are enabled. Now, if memory backtrace is on and you issue a "memory show allocations" CLI command for a specific file, then a backtrace will show for each allocation that occurred after you turned "memory backtrace on". The backtrace display is shown only when a specific file's allocations are displayed to prevent a massive CLI dump of every file's allocations. Change-Id: Ic657afc1fc6ec7205e16eb36a97a611d235a2b4f 2019-09-20 08:29 +0000 [5b8c1ed0d3] Corey Farrell * stasis: refcounter.py can incorrectly report skewed objects. It is possible for topic->name to be NULL, this causes the allocation reference to not be logged. Use the name variable instead which has been verified to be a non-empty. Change-Id: I3d0031d03c8356e4808f00cdf2d5428712575883 2019-09-19 11:06 +0000 [76d4a42ae1] Corey Farrell * res_pjsip_mwi: Remove inappropriate topic unreference. ast_mwi_topic() returns a borrowed reference which should not be unreferenced, doing so leads to a FRACK. This was hidden by the fact that stasis_cache.c leaked the result of cache_remove in caching_topic_exec. Change-Id: I51101bf7d07b8dc8ce8fc46b6cb31fbbd213fbc7 2019-09-19 10:53 +0000 [256db889f2] Corey Farrell * app_voicemail: Fix module unload leak. Change-Id: Ib9a06565b9a178822d3bbb67eccf51432e12d84a 2019-09-06 08:18 +0000 [6647be69ac] Joshua Colp * func_jitterbuffer: Add audio/video sync support. This change adds support to the JITTERBUFFER dialplan function for audio and video synchronization. When enabled the RTCP SR report is used to produce an NTP timestamp for both the audio and video streams. Using this information the video frames are queued until their NTP timestamp is equal to or behind the NTP timestamp of the audio. The audio jitterbuffer acts as the leader deciding when to shrink/grow the jitterbuffer when adaptive is in use. For both adaptive and fixed the video buffer follows the size of the audio jitterbuffer. ASTERISK-28533 Change-Id: I3fd75160426465e6d46bb2e198c07b9d314a4492 2019-09-18 06:56 +0000 [9f304170f6] Sean Bright * res_musiconhold: Add new 'playlist' mode Allow the list of files to be played to be provided explicitly in the music class's configuration. The primary driver for this change is to allow URLs to be used for MoH. Change-Id: I9f43b80b43880980b18b2bee26ec09429d0b92fa 2019-09-15 14:35 +0000 [49e1346185] Joshua Colp * chan_pjsip: Relock correct channel during "fax" redirect. When fax detection occurs on an outbound PJSIP channel the redirect operation will result in a masquerade occurring and the underlying channel on the session changing. The code incorrectly relocked the new channel instead of the old channel when returning. This resulted in the new channel being locked indefinitely. The code now always acts on the expected channel. ASTERISK-28538 Change-Id: I2b2e60d07e74383ae7e90d752c036c4b02d6b3a3 2019-09-14 10:05 +0000 [448b8c9bc2] Guido Falsi * chan_dahdi: Fix build with clang/llvm On FreeBSD using the clang/llvm compiler build fails to build due to the switch statement argument being a non integer type expression. Switch to an if/else if/else construct to sidestep the issue. ASTERISK-28536 #close Change-Id: Idf4a82cc1e94580a2d017fe9e351c226f23e20c8 2019-09-03 12:20 +0000 [a95cef7140] Ben Ford * res_rtp_asterisk.c: Send RTCP as compound packets. According to RFC3550, ALL RTCP packets must be sent in a compond packet of at least two individual packets, including SR/RR and SDES. REMB, FIR, and NACK were not following this format, and as a result, would fail the packet check in ast_rtcp_interpret. This was found from writing unit tests for RTCP. The browser would accept the way we were constructing these RTCP packets, but when sending directly from one Asterisk instance to another, the above mentioned problem would occur. Change-Id: Ieb140e9c22568a251a564cd953dd22cd33244605 2019-09-12 16:04 +0000 [688908fe7a] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.6.0 2019-09-11 15:58 +0000 [518b6bfb5c] Michael Goryainov * channels: Allow updating variable value When modifying an already defined variable in some channel drivers they add a new variable with the same name to the list, but that value is never used, only the first one found. Introduce ast_variable_list_replace() and use it where appropriate. ASTERISK-23756 #close Patches: setvar-multiplie.patch submitted by Michael Goryainov Change-Id: Ie1897a96c82b8945e752733612ee963686f32839 2019-08-22 07:44 +0000 [f85631cf82] Florian Floimair * core: Add H.265/HEVC passthrough support This change adds H.265/HEVC as a known codec and creates a cached "h265" media format for use. Note that RFC 7798 section 7.2 also describes additional SDP parameters. Handling of these is not yet supported. ASTERISK-28512 Change-Id: I26d262cc4110b4f7e99348a3ddc53bad0d2cd1f2 2019-08-27 17:44 +0000 [b478f46d59] sungtae kim * res_musiconhold: Added unregister realtime moh class This fix allows a realtime moh class to be unregistered from the command line. This is useful when the contents of a directory referenced by a realtime moh class have changed. The realtime moh class is then reloaded on the next request and uses the new directory contents. ASTERISK-17808 Change-Id: Ibc4c6834592257c4bb90601ee299682d15befbce 2019-08-28 14:25 +0000 [922d3e02df] Ben Ford * res_rtp: Add unit tests for RTCP stats. Added unit tests for RTCP video stats. These tests include NACK, REMB, FIR/FUR/PLI, SR/RR/SDES, and packet loss statistics. The REMB and FIR tests are currently disabled due to a bug. We expect to receive a compound packet, but the code sends this out as a single packet, which the browser accepts, but makes Asterisk upset. While writing these tests, I noticed an issue with NACK as well. Where it is handling a received NACK request, it was reading in only the first 8 bits of following packets that were also lost. This has been changed to the correct value of 16 bits. Also made a minor fix to the data buffer unit test. Change-Id: I56107c7411003a247589bbb6086d25c54719901b 2019-08-05 06:59 +0000 [d566314e38] George Joseph * ARI: External Media The Channel resource has a new sub-resource "externalMedia". This allows an application to create a channel for the sole purpose of exchanging media with an external server. Once created, this channel could be placed into a bridge with existing channels to allow the external server to inject audio into the bridge or receive audio from the bridge. See https://wiki.asterisk.org/wiki/display/AST/External+Media+and+ARI for more information. Change-Id: I9618899198880b4c650354581b50c0401b58bc46 2019-09-08 10:38 +0000 [bf527810ef] Sean Bright * codec_resample: Ensure OUTSIDE_SPEEX is defined when necessary ASTERISK-28511 Change-Id: If0d58598ce14aad3c786a1c0127b5f7b200b737d 2019-09-05 10:52 +0000 [c6b17b5212] Frederic LE FOLL * chan_dahdi: set CHANNEL(hangupsource) when a PRI channel hangs up When the remote ISDN party ends an ISDN call on a PRI link (DISCONNECT), CHANNEL(hangupsource) information is not available. chan_dahdi already contains an ast_set_hangupsource() in __dahdi_exception() function but it seems that ISDN message processing does not use this part of code. Two other channel modules associate ast_queue_hangup() and ast_set_hangupsource() functions calls: - chan_pjsip in chan_pjsip_session_end() function, - chan_sip in sip_queue_hangup_cause() function. chan_iax2 separates them, in iax2_queue_hangup()/iax2_destroy() and set_hangup_source_and_cause(). Thus, I propose to add ast_set_hangupsource() beside ast_queue_hangup() in sig_pri_queue_hangup(), like chan_pjsip and chan_sip already do. ASTERISK-28525 Change-Id: I0f588a4bcf15ccd0648fd69830d1b801c3f21b7c 2019-09-05 11:09 +0000 [c8cf3ad389] Frederic LE FOLL * ChanIsAvail() generates a CDR when unanswered=yes in cdr.conf. ChanIsAvail() creates a temporary channel with ast_request() to test resource availability. It should not generate a CDR when it hangs up this temporary channel. This patch disables CDR generation for the temporary channel with ast_cdr_set_property(). ASTERISK-28527 Change-Id: I7b0555c6909c7d322e452dde97c9ea5b111552d1 2019-08-26 07:53 +0000 [2691ee7e10] Joshua Colp * AST-2019-005 - translate: Don't assume all frames will have a src. This change removes the assumption that a frame will always have a src set on it. This assumption is incorrect. Given a scenario where an RTP packet is received with no payload the resulting audio frame will have no samples. If this frame goes through a signed linear translation path an interpolated frame can be created (if generic packet loss concealment is enabled) that has minimal data on it, including no src. If this frame is given to a translation path a crash will occur due to the lack of src. ASTERISK-28499 Change-Id: I024d10dd98207eb8a6b35b59880bcdf1090538f8 2019-08-20 15:05 +0000 [965df3c228] Alexei Gradinari (license 5691) * AST-2019-004 - res_pjsip_t38.c: Add NULL checks before using session media After receiving a 200 OK with a declined stream in response to a T.38 initiated re-invite Asterisk would crash when attempting to dereference a NULL session media object. This patch checks to make sure the session media object is not NULL before attempting to use it. ASTERISK-28495 patches: ast-2019-004.patch submitted by Alexei Gradinari (license 5691) Change-Id: I168f45f4da29cfe739acf87e597baa2aae7aa572 2019-09-04 16:19 +0000 [a321225fa4] Chris-Savinovich * test_utils.c: Skip test adsi_loaded_test if module not loaded. Module res_adsi.so is deprecated, therefore it does not load by default. Module not loaded causes it to yield a FAIL when tested by tests/test_utils.c. This fix checks if the corresponding module is loaded at the start of the test, and if not, it passes the test and exits with a message. This fix is applied to all versions where the module is marked deprecated. Change-Id: I52be64c8f6af222e15148a856d1f10cb113e1e94 2019-08-27 06:10 +0000 [92261d60c8] Igor Goncharovsky * chan_unistim: Fix clang warning: variable sized type not at end of a struct On reading information about initial client packet unistim use dirty implementation of destination ip address retrieval. This fix uses CMSG_*(..) to get ip address and make clang compile without warning. ASTERISK-25592 #close Reported-by: Alexander Traud Change-Id: Ic1fd34c2c2bcc951da65bf62e3f7a8adff8351b1 2019-08-23 16:24 +0000 [7db5f5df6a] Kevin Harwell * res_pjsip_mwi: add better handling of solicited vs unsolicited subscriptions res_pjsip_mwi allows both solicited and unsolicited MWI subscription types. While both can be set in the configuration for a given endpoint/aor, only one is allowed. Precedence is given to unsolicited. Meaning if an endpoint/aor is configured to allow both types then the solicited subscription is rejected when it comes in. However, there is a configuration option to override that behavior: mwi_subscribe_replaces_unsolicited When set to "yes" then when a solicited subscription comes in instead of rejecting it Asterisk is suppose to replace the unsolicited one if it exists. Prior to this patch there was a bug in Asterisk that allowed the solicted one to be added, but did not remove the unsolicited. As a matter of fact a new unsolicited subscription got added everytime a SIP register was received. Over time this eventually could "flood" a phone with SIP notifies. This patch fixes that behavior to now make it work as expected. If configured to do so a solicited subscription now properly replaces the unsolicited one. As well when an unsubscribe is received the unsolicited subscription is restored. Logic was also put in to handle reloads, and any configuration changes that might result from that. For instance, if a solicited subscription had previously replaced an unsolicited one, but after reload it was configured to not allow that then the solicited one needs to be shutdown, and the unsolicited one added. ASTERISK-28488 Change-Id: Iec2ec12d9431097e97ed5f37119963aee41af7b1 2019-08-27 00:49 +0000 [78d00c277c] Igor Goncharovsky * chan_unistim: Fix code, causing all incoming DTMF sent back to asterisk Current implementation of ast_channel_tech send_digit_begin hook uses same function for tone playback as key press handler. This cause every incoming dtmf send back to asterisk. In case of two unistim phones connected to each other, it'll cause indefinite DTMF loop. Fix add separate function for dtmf tone phone play. Change-Id: I5795db468df552f0c89c7576b6b3858b26c4eab4 2019-08-16 06:01 +0000 [821b7561f8] Igor Goncharovsky * chan_unistim: Fix RTP port byte order for big-endian arch This patch fixes one-way oudio that users expirienced on big-endian architechtires. RTP port number bytes was stored in improper order and phone sent RTP to wrong RTP port. Reported-by: Andrey Ionov Change-Id: I9a9ca7f26e31a67bbbceff12923baa10dfb8a3be 2019-08-23 15:14 +0000 [cdbb9800e3] Sean Bright * codec_resample: Upgrade speex_resample to fix up-sampling bug ASTERISK-28511 #close Change-Id: Idd07bf341e89ac999c7f5701d9b72b8a9cb11e82 2019-08-22 13:19 +0000 [aaaa1695ca] Alexei Gradinari * Fix misname 'res_external_mwi' to 'res_mwi_external' in comments. Change-Id: Ic784be8500e5cb75dcb34bae9f03cfd93b6b34fb 2019-08-21 13:29 +0000 [c00a010fe8] George Joseph * chan_rtp: Accept hostname as well as ip address as destination The UnicastRTP channel driver provided by chan_rtp now accepts ":" as an alternative to ":" in the destination. The first AAAA (preferred) or A record resolved will be used as the destination. The lookup is synchronous so beware of possible dialplan delays if you specify a hostname. Change-Id: Ie6f95b983a8792bf0dacc64c7953a41032dba677 2019-08-21 12:03 +0000 [6407ccd2d9] George Joseph * dns_core: Create new API ast_dns_resolve_ipv6_and_ipv4 The new function takes in a pointer to an ast_sockaddr structure, a hostname and an optional port and then dispatches parallel "AAAA" and "A" record queries. If an "AAAA" record is returned, it's parsed into the ast_sockaddr structure along with the port if it was supplied. If no "AAAA" record was returned, the first "A" record returned (if any) is parsed instead. This is a synchronous call. If you need asynchronous lookups, use ast_dns_query_set_resolve_async and roll your own. Change-Id: I194b0b0e73da94b35cc35263a868ffac3a8d0a95 2019-08-21 10:58 +0000 [c8cc530726] Dan Cropp * pjproject: Configurable setting for cnonce to include hyphens or not NEC SIP Station interface with authenticated registration only supports cnonce up to 32 characters. In Linux, PJSIP would generate 36 character cnonce which included hyphens. Teluu developed this patch adding a compile time setting to default to not include the hyphens. They felt it best to still generate the UUID and strip the hyphens. They have indicated it will be part of PJSIP 2.10. ASTERISK-28509 Reported-by: Dan Cropp Change-Id: Ibdfcf845d4f8c0a14df09fd983b11f2d72c5f470 2019-07-30 12:08 +0000 [fb984eda40] Stas Kobzar * res_pjsip: Channel variable SIPFROMDOMAIN In chan_sip, there was variable SIPFROMDOMAIN that allows to set From header URI domain per channel. This patch introduces res_pjsip variable SIPFROMDOMAIN for backward compatibility with chan_sip. ASTERISK-28489 Change-Id: I715133e43172ce2a1e82093538dc39f9e99e5f2e 2019-08-20 13:04 +0000 [f82d0b74fd] George Joseph * res_ari.c: Prefer exact handler match over wildcard Given the following request path and 2 handler paths... Request: /channels/externalMedia Handler: /channels/{channelId} "wildcard" Handler: /channels/externalmedia "non-wildcard" ...if /channels/externalMedia was registered as a handler after /channels/{channelId} as shown above, the request would automatically match the wildcard handler and attempt to parse "externalMedia" into the channelId variable which isn't what was intended. It'd work if the non-wildard entry was defined in rest-api/api-docs/channels.json before the wildcard entry but that makes the json files order-dependent which isn't a good thing. To combat this issue, the search loop saves any wildcard match but continues looking for exact matches at the same level. If it finds one, it's used. If it hasn't found an exact match at the end of the current level, the wildcard is used. Regardless, after searching the current level, the wildcard is cleared so it won't accidentally match for a different object or a higher level. BTW, it's currently not possible for more than 1 wildcard entry to be defined for a level. For instance, there couldn't be: Handler: /channels/{channelId} Handler: /channels/{channelName} We wouldn't know which one to match. Change-Id: I574aa3cbe4249c92c30f74b9b40e750e9002f925 2019-08-09 15:53 +0000 [51fd43206b] Sean Bright * audiohook.c: Substitute silence for unavailable audio frames There are 4 scenarios to consider when capturing audio from a channel with an audiohook: 1. There is no rx and no tx audio, so return nothing. 2. There is rx but no tx audio, so return rx. 3. There is tx but no rx audio, so return tx. 4. There is rx and tx audio, so mix them and return. The file passed as the primary argument to MixMonitor will be written to in scenarios 2, 3, and 4. However, if you pass the r() and t() options to MixMonitor, a frame will only be written to the r() file if there was rx audio and a frame will only be written to the t() file if there was tx audio. If you subsequently take the r() and t() files and try to mix them, the sides of the conversation will 'drift' and be non-representative of the user experience. This patch adds a new 'S' option to MixMonitor that injects a frame of silence on either the r() side or the t() side of the channel so that when later mixed, there is no such drift. Change-Id: Ibf5ed73a811087727bd561a89a59f4447b4ee20e 2019-08-14 14:52 +0000 [ff180a5bfc] Alexei Gradinari * app_voicemail/IMAP: check mailstream not NULL in leave_voicemail The function leave_voicemail checks if expungeonhangup is set, but does not check if IMAP stream is closed, so it could call imap function with NULL stream. This leads to segfault. ASTERISK-28505 #close Change-Id: Ib66c57c1f1ba97774e447b36349198e2626a8d7c 2019-08-09 05:51 +0000 [8399211eaf] Sean Bright * menuselect: Fix curses build on Gentoo Linux Because keypad() is exported by libtinfo, it needs to be explicitly added to the linker options. ASTERISK-28487 #close Change-Id: I6c2ad5b95f422c263d078b5c0e84c111807dffc6 2019-08-08 12:10 +0000 [92066b8746] George Joseph * CI: Escape backslashes in printenv/sort/tr Change-Id: I52be64c8f6af2bbe15148a856d1f10cb113e1e94 (cherry picked from commit c6558e09af3ac15b31377de735cc96d8df0275a7) 2019-08-07 17:54 +0000 [d4766a82a2] Kevin Harwell * srtp: Fix possible race condition, and add NULL checks Somehow it's possible for the srtp session object to be NULL even though the Asterisk srtp object itself is valid. When this happened it would cause a crash down in the srtp code when attempting to protect or unprotect data. After looking at the code there is at least one spot that makes this situation possible. If Asterisk fails to unprotect the data, and after several retries it still can't then the srtp->session gets freed, and set to NULL while still leaving the Asterisk srtp object around. However, according to the original issue reporter this does not appear to be their situation since they found no errors logged stating the above happened (which Asterisk does for that situation). An issue was found however, where a possible race condition could occur between the pjsip incoming negotiation, and the receiving of RTP packets. Both places could attempt to create/setup srtp for the same rtp instance at the same time. This potentially could be the cause of the problem as well. Given the above this patch adds locking around srtp setup for a given rtp, or rtcp instance. NULL checks for the session have also been added within the protect and unprotect functions as a precaution. These checks should at least stop Asterisk from crashing if it gets in this situation again. This patch also fixes one other issue noticed during investigation. When doing a replace the old object was freed before creating the replacement. If the new replacement object failed to create then the rtp/rtcp instance would now point to freed srtp data which could potentially cause a crash as well when the next attempt to reference it was made. This is now fixed so the old srtp object is kept upon replacement failure. Lastly, more logging has been added to help diagnose future issues. ASTERISK-28472 Change-Id: I240e11cbb1e9ea8083d59d50db069891228fe5cc 2019-08-08 07:12 +0000 [db9684ad1e] George Joseph * CI: Add "throttle" label and "skip_gate" capability To make throttling by label fully active, the "throttle" option has to be specified with a specific label. You can now specify "skip_gate" in the Gerrit comments when you do a +2 code review to tell Jenkins not to actually run the gate. You'd do this if you plan to manually merge the change. Also updated the "printenv" debug output to better sort multi-line comments. Change-Id: I4c0b1085acec4805f2ca207eebac50aad81f27e2 2019-08-05 07:23 +0000 [6350f4e278] Joshua Colp * cdr / cel: Use event time at event creation instead of processing. When updating times on CDR or CEL records using the time at which it is done can result in times being incorrect if the system is heavily loaded and stasis message processing is delayed. This change instead makes it so CDR and CEL use the time at which the stasis messages that drive the systems are created. This allows them to be backed up while still producing correct records. ASTERISK-28498 Change-Id: I6829227e67aefa318efe5e183a94d4a1b4e8500a 2019-08-06 10:40 +0000 [2641081caa] George Joseph * CI: Make node labels job-specific Originally, the eligible nodes for a job were labelled only by "swdev-docker". So basically any node could run any job. We had found that allowing a node to run more than 1 gate at a time was problematic so we limited the nodes to processing 1 job at a time. With the creation of the Asterisk 17 branches however, we now have so many active branches that getting checks and gates through in a timely manner is problematic when a node can run only 1 job at a time. Now the nodes are also labelled by the job type they can run. For instance: "asterisk-check", "asterisk-gate", etc. With the "Throttle Concurrent Builds" plugin, we can now allow a node to run more than 1 job BUT throttle by job type. For instance: Allow 2 jobs but only 1 asterisk-gate at a time. Now a node can run 2 checks or 1 check and 1 gate or 1 gate but not 2 gates at a time. Change-Id: I2032bf6afbcec5c341d9b852214c0c812d3d6db5 2019-08-01 16:22 +0000 [6bb14150c4] Kevin Harwell * various modules: json integer overflow There were still a few places in the code that could overflow when "packing" a json object with a value outside the base type integer's range. For instance: unsigned int value = INT_MAX + 1 ast_json_pack("{s: i}", value); would result in a negative number being "packed". In those situations this patch alters those values to a ast_json_int_t, which widens the value up to a long or long long. ASTERISK-28480 Change-Id: Ied530780d83e6f1772adba0e28d8938ef30c49a1 2019-07-29 10:15 +0000 [9718376902] Sean Bright * res_musiconhold: Use a vector instead of custom array allocation Change-Id: Ic476a56608b1820ca93dcf68d10cd76fc0b94141 2019-08-01 05:07 +0000 [c2b135729c] Joshua Colp * res_pjsip: Fix multiple of the same contact in "pjsip show contacts". The code for gathering contacts could result in the same contact being retrieved and added to the list multiple times. The container which stores the contacts to display will now only allow a contact to be added to it once instead of multiple times. ASTERISK-28228 Change-Id: I805185cfcec03340f57d2b9e6cc43c49401812df 2019-07-17 07:35 +0000 [83390327b2] Torrey Searle * main/udptl.c: correctly handle udptl sequence wrap around incorrect handling of UDPTL squence number wrap arounds causes loss of packets every time the wrap around occurs ASTERISK-28483 #close Change-Id: I33caeb2bf13c574a1ebb81714b58907091d64234 2019-07-24 15:12 +0000 [0ebfc4a19d] Sean Bright * manager: Send fewer packets The functions that build manager message headers do so in a way that results in a single messages being split across multiple packets. While this doesn't matter to the remote end, it makes network captures noisier and harder to follow, and also means additional system calls. With this patch, we build up more of the message content into the TLS buffer before flushing to the network. This change is completely internal to the manager code and does not affect any of the existing API's consumers. Change-Id: I50128b0769060ca5272dbbb5e60242d131eaddf9 2019-07-29 10:04 +0000 [d6af1acb8c] Sean Bright * res_musiconhold: Use ast_pipe_nonblock() wrapper Change-Id: Ib0a4b41e5ececbe633079e2d8c2b66c031d2d1f2 2019-07-29 08:31 +0000 [05cf9c9912] George Joseph * loader.c: Fix possible SEGV when a module fails to register When a module fails to register itself (usually a coding error in the module), dlerror() can return NULL. We weren't checking for that in load_dlopen() before trying to strdup the error message so a SEGV was thrown. dlerror() is now surrounded with an S_OR so we don't SEGV. Change-Id: Ie0fb9316f08a321434f3f85aecf3c7d2ede8b956 2019-07-24 15:15 +0000 [06780d2bc4] George Joseph * CI: Don't enable non-core modules in Certified branches We don't support non-core modules for Certified releases but we were enabling them for CI builds which was causing lots of test failures. Now we don't. Change-Id: I0b3254c08a2479f3d39151690350cce5ce5ad766 2019-07-23 12:58 +0000 [28654308ef] Sean Bright * res_config_sqlite3: Only join threads that we started ASTERISK-28477 #close Reported by: Dennis ASTERISK-28478 #close Reported by: Dennis Change-Id: I77347ad46a86dc5b35ed68270cee56acefb4f475 2019-05-12 13:29 +0000 [3814faf848] Leonid Fainshtein * openr2(6/6): Set hangup cause Change-Id: I94dc38920e6e77cc73062648f62fdd613d0d1452 Signed-off-by: Oron Peled 2019-04-22 14:14 +0000 [06515707df] Tzafrir Cohen * openr2(5/6): added cli command -- mfcr2 destroy link Change-Id: I452d6a853bcd8c6e194455b19e5e017713e9c0fe Signed-off-by: Oron Peled 2019-04-22 10:27 +0000 [93a093f6c4] Tzafrir Cohen * openr2(4/6): added new cli command -- mfcr2 show links * This command show the MFC/R2 links Change-Id: I213822e1b7ef9c05bd89a2ba62df8e0856ce9f84 Signed-off-by: Oron Peled 2019-04-22 07:27 +0000 [a45cfefb77] Tzafrir Cohen * openr2(3/6): Convert r2links to standard Asterisk AST_LIST* Change-Id: Ibcb2401515a58782a1488c0b9efbed201c3f3a17 Signed-off-by: Oron Peled 2019-04-22 07:33 +0000 [ec6e88592a] Tzafrir Cohen * openr2(2/6): Stop polling channels when DAHDI returns -ENODEV (e.g: plug-out) Otherwise, OpenR2 threads go crazy and consume almost all CPU resources Change-Id: I10a41f617613fe7399c5bdced5c64a2751173f28 Signed-off-by: Oron Peled 2019-04-22 10:02 +0000 [7b6df814a6] Tzafrir Cohen * openr2(1/6): bugfix in configuration saving Details: - The memcpy() call copied part of "dahdi_conf" and not "dahdi_conf.mfcr2" - As a result, the memcmp() in dahdi_r2_get_link() always fails - This cause dahdi_r2_get_link() to create new link for every channel (instead of a new link for every ~30 channels) - With the fix, far less links are generated -- so we use far less threads Change-Id: I7259dd6272f5e46e8a6c7f5bf3e8c2ec01b8c132 Signed-off-by: Oron Peled 2019-07-19 11:20 +0000 [356f4256cc] George Joseph * CI: Add cleanWs to cleanup steps in jenkinsfiles We're at the point where there are enough Jenkins jobs for Asterisk branches than even cleaned checkouts of Asterisk will add up to more disk space than is available on the in-memory workspace mount. Since we archive all relevent artifacts anyway, there's no need to keep the workspace around after the job finishes, whether it succeeds or fails. Change-Id: I1cd3b73ebb045a987df0f62526d152a510210c39 2019-04-02 14:42 +0000 [f4896703b9] Dan Cropp * chan_pjsip: Transmit REFER waits for the REFER result setting TRANSFERSTATUS Previously, when a Transfer (REFER) was performed, chan_pjsip would set the TRANSFERSTATUS to SUCCESS when the REFER was queued up. This did not reflect a successful/unsuccessful transfer the way chan_sip did. Added a callback module to process the refer subscription information. Now depends on res_pjsip_pubsub so call transfer progress can be monitored and reported ASTERISK-26968 #close Reported-by: Dan Cropp Change-Id: If6c27c757c66f71e8b75e3fe49da53ebe62395dc 2019-07-04 19:46 +0000 [9d69469203] Rodrigo Ramírez Norambuena * README.md: Update year Change-Id: I746fb94d112c7d797e206bca0fd1e13fcd26bae3 2019-07-19 08:38 +0000 [c86c0973ff] George Joseph * CI: Add install-headers to the install make targets The testsuite actually needs the headers installed to run it's self_test. Change-Id: Ice41d331131b876ad4a9c056085fe6aac34b32b2 2019-07-18 06:07 +0000 [cb831a18d1] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.5.0 2019-07-17 08:06 +0000 [64d25d36fb] Walter Doekes * sched: Don't allow ast_sched_del to deadlock ast_sched_runq from same thread When fixing ASTERISK~24212, a change was done so a scheduled callback could not be removed while it was running. The caller of ast_sched_del would have to wait. However, when the caller of ast_sched_del is the callback itself (however wrong this might be), this new check would cause a deadlock: it would wait forever for itself. This changeset introduces an additional check: if ast_sched_del is called by the callback itself, it is immediately rejected (along with an ERROR log and a backtrace). Additionally, the AST_SCHED_DEL_UNREF macro is adjusted so the after-ast_sched_del-refcall function is only run if ast_sched_del returned success. This should fix the following spurious race condition found in chan_sip: - thread 1: schedule sip_poke_peer_now (using AST_SCHED_REPLACE) - thread 2: run sip_poke_peer_now - thread 2: blank out sched-ID (too soon!) - thread 1: set sched-ID (too late!) - thread 2: try to delete the currently running sched-ID After this fix, an ERROR would be logged, but no deadlocks (in do_monitor) nor excess calls to sip_unref_peer(peer) (causing double frees of rtp_instances and other madness) should occur. (Thanks Richard Mudgett for reviewing/improving this "scary" change.) Note that this change does not fix the observed race condition: unlocked access to peer->pokeexpire (and potentially other scheduled items in chan_sip), causing AST_SCHED_DEL_UNREF to look at a changing id. But it will make the deadlock go away. And in the observed case, it will not have adverse affects (like memory leaks) because the scheduled item is removed through a different path. ASTERISK-28282 Change-Id: Ic26777fa0732725e6ca7010df17af77a012aa856 2019-07-16 08:15 +0000 [f62d9013c1] George Joseph * Build: Add separate header install/uninstall targets Two new Makefile targets have been added... "install-headers" and "uninstall-headers" to separately control header installation. The existing behavior has not changed so "make install" and "make uninstall" will continue to also install/uninstall the headers. The new targets were added for forward compatibility with Asterisk 17 in which the headers are no longer installed/uninstalled with the "install" and "uninstall" targets. Also corrects an issue where /usr/include/asterisk.h was never being removed at all. Change-Id: Ia7399f3a0203a4825fc4a9f43b9034dae9a2b643 2019-07-09 14:42 +0000 [88ea395c33] Kevin Harwell * manager: Log AMI actions When manager debugging is turned on, this patch makes it so incoming AMI actions are now also logged. Change-Id: I8047524510e7ac97d99482b2448f8e368f29cd47 2019-07-14 13:26 +0000 [1756029237] Joshua Colp * res_rtp_asterisk: Move where DTLS MTU variable is defined. The DTLS MTU variable is not dependent on pjproject and should not exist in its block. Change-Id: I7e97d64dc192f2ac81bfe2b72b8229d321c7d026 2019-06-12 13:03 +0000 [2126dc3021] George Joseph * res_pjsip_messaging: Check for body in in-dialog message We now check that a body exists and it has a length > 0 before attempting to process it. ASTERISK-28447 Reported-by: Gil Richard Change-Id: Ic469544b22ab848734636588d4c93426cc6f4b1f 2019-06-28 11:15 +0000 [6c59df17a5] Francesco Castellano * chan_sip: Handle invalid SDP answer to T.38 re-invite The chan_sip module performs a T.38 re-invite using a single media stream of udptl, and expects the SDP answer to be the same. If an SDP answer is received instead that contains an additional media stream with no joint codec a crash will occur as the code assumes that at least one joint codec will exist in this scenario. This change removes this assumption. ASTERISK-28465 Change-Id: I8b02845b53344c6babe867a3f0a5231045c7ac87 2019-07-01 16:57 +0000 [da1db4f842] Chris-Savinovich * chan_dahdi.c: crash in chan_dahdi Fixes a crash in chan_dahdi occurring on 32-bit systems. A previous patch introduced a variable of type unassigned long long which is 64-bits. Casting it as 'ast_json_int_t' along with JSON type 'I' makes it work with 32-bit systems. ASTERISK-28457 Change-Id: I9cef6b5f2d826fc5c93f2f6a1c997c4e3e6c93fe 2019-07-01 10:49 +0000 [83aba363fe] Kevin Harwell * res_pjsip_sdp_rtp: Remove unused variable The variable 'endpoint_caps' in function 'set_caps' is not used, so remove. ASTERISK-28458 Change-Id: Ia8766d05a0738aecb29dd018302c2dafca5cab34 2019-06-27 15:04 +0000 [0dc61e41fa] George Joseph * tcptls.c: Add peer hostname and port to some error messages Where possble, hostname and port has been added to error messages, mostly on the server side. ASTERISK-26006 Reported by: Oleksandr Natalenko Change-Id: Iff4f897277bc36ce8c5b493b71d0a4a7b74e62f0 2019-06-27 12:46 +0000 [2db5173b88] George Joseph * pjproject_bundled: Add peer information to most SSL/TLS errors Most SSL/TLS error messages coming from pjproject now have either the peer address:port or peer hostname, depending on what was available at the time and code location where the error was generated. ASTERISK-28444 Reported by: Bernhard Schmidt Change-Id: I41770e8a1ea5e96f6e16b236692c4269ce1ba91e 2019-06-24 08:30 +0000 [31d755e805] George Joseph * sig_pri: Address gcc9 issues A few more format truncation issues addressed. Change-Id: I047f373169caaca0eec4889d3c0e5e10f130017a 2019-05-21 01:38 +0000 [52a3d4a761] Nasir Iqbal * app_amd: issue with silence suppression fixed Now AMD algorithm will not ignore AST_FRAME_NULL, As I think using manual wait time instead of `framelength` is enough to fix timeout / TOOLONG issue. ASTERISK-28419 #close Change-Id: I16ea2d6295bc99b975e8c092e5f9fbd9214debdb 2019-06-19 11:58 +0000 [01712bbdc9] George Joseph * CI: New way to determnine libdir We were using the presence of /usr/lib64 to determine where shared libraries should be installed. This only existed on Redhat based systems and was safe. If it existed, use it, otherwise use /usr/lib. Unfortunately, Ubuntu 19 decided to create a /usr/lib64 BUT NOT INCLUDE IT IN THE DEFAULT ld.so.conf. So if anything is installed there, it won't work. The new method, just looks for $ID in /etc/os-release and if it's centos or fedora, uses /usr/lib64 and if ubuntu, uses /usr/lib. NOTE: This applies only to the CI scripts. Normal asterisk build and install is not affected. Change-Id: Iad66374b550fd89349bedbbf2b93f8edd195a7c3 2019-06-17 12:11 +0000 [1ee2f01f62] George Joseph * chan_dahdi: Address gcc9 issues Fixed format-truncation issues in chan_dahdi.c and sig_analog.c. Since they're related to fields provided by dahdi-tools we can't change the buffer sizes so we're just checking the return from snprintf and printing an errior if we overflow. Change-Id: Idc1f3c1565b88a7d145332a0196074b5832864e5 2019-06-14 15:45 +0000 [8b77318a2c] Alexei Gradinari * translate.c do not log WARNING on empty audio frame There is WARNING "no samples for ..." on each Playtones. The function ast_playtones_start calls ast_activate_generator, which calls ast_prod. The function ast_prod calls ast_write with empty audio frame. In this case it's spam log. Change-Id: Id4ac309489d9ff281bad02abdef341cecdede660 2019-06-10 16:58 +0000 [ccc92b6ecb] George Joseph * app_confbridge: Attended transfer event fixup When a channel already in a conference bridge is attended transfered to another extension, or when an existing call is attended transferred into a conference bridge, we now generate ConfbridgeJoin and ConfbridgeLeave events for the entering and departing channels. Change-Id: Id7709cfbceb26fbcb828b2d0d2a6b2fbeaf028e1 2019-06-13 10:11 +0000 [694097ee68] Sean Bright * pjproject: Update to 2.9 release Relies on https://github.com/asterisk/third-party/pull/4 Change-Id: Iec9cad42cb4ae109a86a3d4dae61e8bce4424ce3 2019-06-11 07:26 +0000 [82789aafd6] Joshua Colp * res_rtp_asterisk: Add support for DTLS packet fragmentation. This change adds support for larger TLS certificates by allowing OpenSSL to fragment the DTLS packets according to the configured MTU. By default this is set to 1200. This is accomplished by implementing our own BIO method that supports MTU querying. The configured MTU is returned to OpenSSL which fragments the packet accordingly. When a packet is to be sent it is done directly out the RTP instance. ASTERISK-28018 Change-Id: If2d5032019a28ffd48f43e9e93ed71dbdbf39c06 2019-06-06 07:48 +0000 [72f26aa8eb] Abhay Gupta * chan_pjsip.c: Check for channel and session to not be NULL in hangup We have seen some rare case of segmentation fault in hangup function and we could notice that channel pointer was NULL. Debug log shows that there is a 200 OK answer and SIP timeout at the same time. It looks that while the SIP session was being destroyed due to timeout call hangup due to answer event lead to race condition and channel is being destroyed from two different places. The check ensures we check it not to be NULL before freeing it. ASTERISK-25371 Change-Id: I19f6566830640625e08f7b87bfe15758ad33a778 2019-01-08 00:14 +0000 [a1c84709b8] Kirsty Tyerman * pbx_dundi: added IPv4/IPv6 dual bind support to DUNDi ASTERISK-28234 Reported-by: Kirsty Tyerman Change-Id: I5d6e6b52dbe51415046bb3953fd16f5b421bc2e1 2019-06-04 12:41 +0000 [c2621aa190] Chris-Savinovich * cdr_pgsql: fix error in connection string Fixes an error occurring in function pgsql_reconnect() caused when value of hostname is blank. Which in turn will cause the connection string to look like this: "host= port=xx", which creates a sintax error. This fix now checks if the corresponding values for host, port, dbname, and user are blank. Note that since this is a reconnect function the database library will replace any missing value pairs with default ones. ASTERISK-28435 Change-Id: I0a921f99bbd265768be08cd492f04b30855b8423 2019-05-21 14:12 +0000 [86cd77ec0a] Alexei Gradinari * app_attended_transfer: new application AttendedTransfer AttendedTransfer queues up attended transfer to the given extension. This application can be useful with Custom Dynamic Features. For example to make attended transfer to a predefined number. features.conf ;;; [applicationmap] my_atxfer => *7,self,GoSub,"my_atxfer,s,1",default ;;; extensions.conf ;;; [globals] DYNAMIC_FEATURES=my_atxfer TRANSFER_CONTEXT=my_transfer [my_atxfer] exten => s,1,AttendedTransfer(1234567890) same => n,Return() [my_transfer] include => default ;;; This application also can be used to completly redefine Attended transfer feature using dialplan. For example: features.conf ;;; [featuremap] atxfer => *7 [applicationmap] custom_atxfer => *2,self,GoSub,"custom_atxfer,s,1",default ;;; extensions.conf ;;; [globals] DYNAMIC_FEATURES=custom_atxfer TRANSFER_CONTEXT=my_transfer [custom_atxfer] exten => s,1, same => n,Playback(pbx-transfer) same => n,Read(dest,dial,10,i,3,3) same => n,AttendedTransfer(${dest}) same => n,Return() [my_transfer] include => default ;;; Change-Id: Ie5cfa455d0813cffd5c85a6fb117f07d8f0b903b 2019-05-29 17:54 +0000 [6321b559b9] Alexei Gradinari * res_fax: gateway sends T.38 request to both endpoints if V.21 detected According T.38 Gateway 'Use case 3' https://wiki.asterisk.org/wiki/display/AST/T.38+Gateway T.38 Gateway should send T.38 negotiation request to called endpoint if FAX preamble (using V.21 detector) generated by called endpoint. But it does not, because fax_gateway_detect_v21 constructs T.38 negotiation request, but forwards it only to other channel, not to the channel on which FAX preamble is detected. Some SIP endpoints could be improperly configured to rely on the other side to initiate T.38 re-INVITEs. With this patch the T.38 Gateway tries to negotiate with both sides by sending T.38 negotiation request to both endpoints supported T.38. Change-Id: I73bb24799bfe1a48adae9c034a2edbae54cc2a39 2019-05-30 12:08 +0000 [d2c07aceca] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 16.4.0 2019-05-28 17:15 +0000 [e77704f45c] Alexei Gradinari * res_fax: add channel name to CLI 'fax show session' This patch adds a channel name to output of CLI 'fax show session' and also expands the channel name field up to 30 characters on CLI 'fax show sessions' Change-Id: Id059c43ff41811f5e76712b83fb63b8f246da953 2019-05-28 15:35 +0000 [e0a574253e] Alexei Gradinari * res_fax: fix segfault on inactive "reserved" fax session The change #10017 "Handle fax gateway being started more than once" introdiced a bug which leads to segfault in res_fax_spandsp. The res_fax_spandsp module does not support reserving sessions, so fax_session_reserve returns a fax session with state AST_FAX_STATE_INACTIVE. The fax_gateway_start does not create a real fax session if the fax session is already present and the state is not AST_FAX_STATE_RESERVED. But the "reserved" session created for res_fax_spandsp has state AST_FAX_STATE_INACTIVE, so fax_gateway_start not starting. Then when fax_gateway_framehook is called and gateway T.38 state is NEGOTIATED the call of gateway->s->tech->write(gateway->s, f) leads to segfault, because session tech_pvt is not set, i.e. the tech session was not initialized/started. This patch adds check also on AST_FAX_STATE_INACTIVE to the "reserved" session created for res_fax_spandsp will start. This patch also adds extra check and log ERROR if tech_pvt is not set before call tech->write. ASTERISK-27981 #close Change-Id: Ife3e65e5f18c902db2ff0538fccf7d28f88fa803 2019-05-24 09:01 +0000 [ec74fd56a7] Ben Ford * build: Fix file format in CHANGES-staging. One of the change files doesn't conform to the format that the release scripts need in order to parse it. Change-Id: Ie0b634cf27e4cbc671b9fe92993b6f2ecf60254c 2019-05-23 09:44 +0000 [86fb72c4d0] Guido Falsi * chan_dahdi: add missing include. After some definitions have been moved to asterisk/mwi.h the files channels/chan_dahdi.h channels/sig_pri.c are missing this new include. ASTERISK-28427 #close Change-Id: Ia8cc595eeda653324643f40dcd9799d4c3f0ac91 2019-05-21 11:29 +0000 [9351aa3f0e] Morten Tryfoss * res_rtp_asterisk: timestamp should be unsigned instead of signed int Using timestamp with signed int will cause timestamps exceeding max value to be negative. This causes the jitterbuffer to do passthrough of the packet. ASTERISK-28421 Change-Id: I9dabd0718180f2978856c50f43aac4e52dc3cde9 2019-05-21 14:53 +0000 [db5bc0fabf] Alexei Gradinari * app_blind_transfer: new application BlindTransfer BlindTransfer redirects all channels currently bridged to the caller channel to the specified destination. This application can be useful with Custom Dynamic Features. For example to make blind transfer to a predefined number. features.conf ;;; [applicationmap] my_blindxfer => *6,self,GoSub,"my_blindxfer,s,1",default ;;; extensions.conf ;;; [globals] DYNAMIC_FEATURES=my_blindxfer [my_blindxfer] exten => s,1,BlindTransfer(1234567890,default) same => n,Return() ;;; This application also can be used to completly redefine Blind transfer feature using dialplan. For example: features.conf ;;; [featuremap] blindxfer => [applicationmap] custom_blindxfer => ##,self,GoSub,"custom_blindxfer,s,1",default ;;; extensions.conf ;;; [globals] DYNAMIC_FEATURES=custom_blindxfer [custom_blindxfer] exten => s,1, same => n,Playback(pbx-transfer) same => n,Read(dest,dial,10,i,3,3) same => n,BlindTransfer(${dest},default) same => n,Return() ;;; Change-Id: I9d55e7f69ccfd4472dec00d62771d6de8803215a 2019-05-17 17:45 +0000 [9516fb64c9] Alexei Gradinari * app_readexten: new option 'p' to stop reading on '#' key This patch adds the 'p' option. The extension entered will be considered complete when a # is entered. Change-Id: If77c40c9c8b525885730821e768f5dea71cf04c1 2019-05-20 12:45 +0000 [33ed2e1bb8] Joshua Colp * pjproject-bundled: Add upstream timer fixes Fixed #2191: - Stricter double timer entry scheduling prevention. - Integrate group lock in SIP transport, e.g: for add/dec ref, for timer scheduling. ASTERISK-28161 Reported-by: Ross Beer Change-Id: I2e09aa66de0dda9414d8a8259a649c4d2d96a9f5 2019-05-17 18:44 +0000 [79b15d0b30] George Joseph * res_rtp_asterisk: Add ability to propose local address in ICE You can now add the "include_local_address" flag to an entry in rtp.conf "[ice_host_candidates]" to include both the advertized address and the local address in ICE negotiation: [ice_host_candidates] 192.168.1.1 = 1.2.3.4,include_local_address This causes both 192.168.1.1 and 1.2.3.4 to be advertized. Change-Id: Ide492cd45ce84546175ca7d557de80d9770513db 2019-05-13 15:37 +0000 [de82bdd746] Alexei Gradinari * pjsip: replace 180 by 183 if SDP negotiation has completed The caller endpoint hears dead silence if a callee replies 180 (without SDP) and the caller already received 183 (with SDP). It happens because Asterisk sends 180 (WITH SDP) to the caller, there are not incoming RTP packets from the callee and Asterisk does not generate inband ringing, so there are not any outgoing RTP packets to the caller. This patch replaces 180 by 183 if SDP negotiation has completed, as if the caller endpoint is configured with "inband_progress=yes". In this case Asterisk will generate inband ringing untill Asterisk receive incoming RTP packets from the callee. ASTERISK-27994 #close Change-Id: I7450b751083ec30d68d6abffe922215a15ae5a73 2019-05-10 10:48 +0000 [e7734476c6] George Joseph * Fixes for GCC 9 Various fixes for issues caught by gcc 9. Mostly snprintf trying to copy to a buffer potentially too small. ASTERISK-28412 Change-Id: I9e85a60f3c81d46df16cfdd1c329ce63432cf32e 2019-05-08 10:41 +0000 [ece29db9bd] Joshua Colp * res_rtp_asterisk: Fix sequence number cycling and packet loss count. This change fixes two bugs which both resulted in the packet loss count exceeding 65,000. The first issue is that the sequence number check to determine if cycling had occurred was using the wrong variable resulting in the check never seeing that cycling has occurred, throwing off the packet loss calculation. It now uses the correct variable. The second issue is that the packet loss calculation assumed that the received number of packets in an interval could never exceed the expected number. In practice this isn't true due to delayed or retransmitted packets. The expected will now be updated to the received number if the received exceeds it. ASTERISK-28379 Change-Id: If888ebc194ab69ac3194113a808c414b014ce0f6 2019-05-07 11:08 +0000 [941dead08d] Ben Ford * pjsip_options.c: Allow immediate qualifies for new contacts. When multiple endpoints try to register close together using the same AOR with qualify_frequency set, one contact would qualify immediately while the other contacts would have to wait out the duration of the timer before being able to qualify. Changing the conditional to check the contact container count for a non-zero value allows all contacts to qualify immediately. Change-Id: I79478118ee7e0d6e76af7c354d66684220db9415 2019-05-06 16:26 +0000 [edc3e0df1a] Kevin Harwell * conversions.c: Add conversions for largest max sized integer Added a conversion for umax (largest maximum sized integer allowed). Adjusted the other current conversion functions (uint and ulong) to be derivatives of the umax conversion since they are simply subsets of umax. Also made the negative check move the pointer on spaces since strtoumax does it anyways. Change-Id: I56c2ef2629d49b524c8df58af12951c181f81f08 2019-05-03 10:49 +0000 [9a0fa51443] Abhay Gupta * stasis: Hangup channel for Local channel No such extension error When we use early bridge with create and dial from stasis using Local channel and the dialplan does not any entry the it is returned from core_local.c with No such extension . In such case asterisk locks up till the channel is not hangup with the error Exceptionally long voice queue length * Found that in such case app_control_dial fails on ast_call method and return -1 * Since it is called from stasis_app_send_command_async and return -1 does not cause resources to be freed and since no PBX exist it is not able to read from channel causing exceptionally long queue * After putting this code found that the channel was releasing immediately and resources were freed. ASTERISK-28399 Reported by: Abhay Gupta Tested by: Abhay Gupta Change-Id: I0a55c923fc6995559f808d63b9488762b4489318 2019-05-03 13:31 +0000 [543d487746] George Joseph * build: Pass --fno-partial-inlining to third-party when appropriate When the gcc version is >= 8.2.1, we were already setting the --fno-partial-inlining flag for Asterisk source files to get around a gcc bug but we weren't passing the flag down to the bundled builds of pjproject and jansson. ASTERISK-28392 Change-Id: I99ede9bc35408ecd096f7d5369e8192d3dc75704 2019-05-02 13:29 +0000 [5002169d6a] George Joseph * res_pjsip: Check return from pjsip_parse_uri calls Updated ast_sip_create_rdata_with_contact and registrar_find_contact to check the return from pjsip_parse_uri before attempting to use the uri returned. ASTERISK-28402 Reported-by: Ross Beer Change-Id: I9810b3b163c45ed5a56ec743586e5ce107f13ba7 2019-04-30 09:21 +0000 [39c5188bec] Abhay Gupta * stasis: Only place stasis created and dialed channels into dial bridge. The dial bridge is meant to hold channels which have been created and dialed in stasis. It handles the frames coming from them and raises the appropriate events. It was possible for the code to mistakenly place calls which came from the dialplan into the dial bridge if they were not in an answered state. These channels are not outgoing channels and should not be placed into the dial bridge. The code now checks to ensure that only stasis created channels are placed into the dial bridge by checking that a PBX does not exist on the channel. ASTERISK-27756 Change-Id: Ideee69ff06c9a0b31f7ed61165f5c055f51d21b6 2019-04-09 23:30 +0000 [f599ebd29e] Holger Hans Peter Freyther * stasis: Call callbacks when imparting fails After a bridge has been deleted the stasis control will depart the channel and might attempt to re-add it to the dial bridge. The later can fail and this can lead to a situation that the stasis control is unlinked but the after_bridge_cb_failed cb is executed trying to access a dangling control object. Fix it by calling the after_cb's before bridge_channel_impart_signal. ASTERISK-26718 Change-Id: Ib4e8f70d7a21bd54afe3cb51cc6717ef7c355496 2019-04-30 06:22 +0000 [d861ebdca8] Joshua Colp * app_confbridge: Add "all" variants of REMB behavior. When producing a combined REMB value the normal behavior is to have a REMB value which is unique for each sender based on all of their receivers. This can result in one sender having low bitrate while all the rest are high. This change adds "all" variants which produces a bridge level REMB value instead. All REMB reports are combined together into a single REMB value that is the same for each sender. ASTERISK-28401 Change-Id: I883e6cc26003b497c8180b346111c79a131ba88c 2019-04-23 05:00 +0000 [5023f02b2d] Joshua Colp * rtp: Add support for transport-cc in receiver direction. The transport-cc draft is a mechanism by which additional information about packet reception can be provided to the sender of packets so they can do sender side bandwidth estimation. This is accomplished by having a transport specific sequence number and an RTCP feedback message. This change implements this in the receiver direction. For each received RTP packet where transport-cc is negotiated we store the time at which the RTP packet was received and its sequence number. At a 1 second interval we go through all packets in that period of time and use the stored time of each in comparison to its preceding packet to calculate its delta. This delta information is placed in the RTCP feedback message, along with indicators for any packets which were not received. The browser then uses this information to better estimate available bandwidth and adjust accordingly. This may result in it lowering the available send bandwidth or adjusting how "bursty" it can be. ASTERISK-28400 Change-Id: I654a2cff5bd5554ab94457a14f70adb71f574afc 2018-12-04 02:10 +0000 [1d214a3623] Abhay Gupta * app_amd: Fix infinite loop on silent calls The total time logic will now be executed on calls which do not pass any media. ASTERISK-28143 Change-Id: I24726bd29d7e467fc721ca265363417234b22855 2019-04-23 09:47 +0000 [8d35a30a3f] Ben Ford * stasis: Fix crash at shutdown. When compiling in dev mode, stasis statistics are enabled and can cause a crash at shutdown due to the following: - Containers are freed - Topics and subscriptions remain - When those topics and subscriptions are deallocated, they go to do things with the container This changes the containers to global ao2 objects, and whenever needed in the code, a reference must be obtained and checked before any operations can be done. ASTERISK-28353 #close Change-Id: Ie7d5e907fcfcb4d65bd36d5e4eb923126fde8d33 2019-03-29 09:04 +0000 [d6b37e2926] Antoni Goldstein * app_dial.c: RINGTIME, PROGRESSTIME and ms resolution dial timings Added RINGTIME, RINGTIME_MS, PROGRESSTIME, PROGRESSTIME_MS variables filled at the earliest received PROGRESS or RINGING. Added millisecond versions of DIALEDTIME and ANSWEREDTIME. Added millisecond versions of ast_channel_get_up_time and ast_channel_get_duration in channel.c. ASTERISK-28363 Change-Id: If95f1a7d8c4acbac740037de0c6e3109ff6620b1 2019-04-09 13:48 +0000 [e3a758975d] Kevin Harwell * mwi core: Move core MWI functionality into its own files There is enough MWI functionality to warrant it having its own 'c' and header files. This patch moves all current core MWI data structures, and functions into the following files: main/mwi.h main/mwi.c Note, code was simply moved, and not modified. However, this patch is also in preparation for core MWI changes, and additions to come. Change-Id: I9dde8bfae1e7ec254fa63166e090f77e4d3097e0 2019-04-22 11:12 +0000 [e281911667] George Joseph * ARI: Bump non-breaking version number to 4.0.2 main/json.c: Added app_name, app_data to channel type res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics res/res_ari: Added timestamp as a requirement for all ARI events Change-Id: I6363f2a3e757cfd59b2ee5d056388ec47659a0c9 2019-04-07 11:36 +0000 [4dcfa8d127] Guido Falsi * core/buildsystem: check the actual compiler being version Make compiler check use the output of the actual compiler being used as reported by the CC variable, instead of unconditionally running the "gcc" binary. Also only run the check if the compiler is gcc or a cross-compile gcc. ASTERISK-28374 Change-Id: Icaacf6d93686ad21076878aa1504a23b4fc9d0f4 2019-04-19 09:33 +0000 [daed593cfa] Lucas Mendes * res_indications: Fix indications remove command autocomplete We changed the validation of autocomplete parameter in the "indications remove" command to avoid continue the execution of the command after asking for autocomplete out of range parameters. ASTERISK-28391 Reported by: lmendes86 Change-Id: I92b24131fd02f2e3c7fec966eea6f7a663310d40 2019-04-17 14:45 +0000 [7487fc88d2] George Joseph * res_remb_modifier: Propertly initialize bitrate to 0.0 ...and return the frame unaltered if bitrate can't be determined. Change-Id: Ib2175ab84f85a3d7060d31625f5a2c7fbcc2ba4c 2019-04-08 17:04 +0000 [eca8c440d2] Dan Cropp * res_pjsip: Added a norefersub configuration setting Added a new PJSIP global setting called norefersub. Default is true to keep support working as before. res_pjsip_refer: Configures PJSIP norefersub capability accordingly. Checks the PJSIP global setting value. If it is true (default) it adds the norefersub capability to PJSIP. If it is false (disabled) it does not add the norefersub capability to PJSIP. This is useful for Cisco switches that do not follow RFC4488. ASTERISK-28375 #close Reported-by: Dan Cropp Change-Id: I0b1c28ebc905d881f4a16e752715487a688b30e9 2019-04-16 10:58 +0000 [022e784b7a] Sean Bright * res_mwi_devstate: Specify AST_MODFLAG_LOAD_ORDER to enable load priority Suggested by abelbeck on the issue tracker. ASTERISK~28384 Reported by: abelbeck Change-Id: Icee0fff2b58dbfaa80f2b68270fe69dfb0463fc0 2019-04-12 11:32 +0000 [18fe583d12] George Joseph * CI: Move test group config files to Jenkins One of the downaides of having things like test configuration in the git repo is that it can't be changed at runtime. You have to create a review for the changes and merge it mefore it will take effect. This review moves the data currently held in tests/CI/periodic-dailyTestGroups.json and tests/CI/gateTestGroups.json into a Jenkins Config File attached to the job definitions. This allows us to alter it from the Jenkins UI at runtime. The original files stay in the repo as documentation. Change-Id: I14b9702f6285ce1fb2420287ba0e7d3b59109763 2019-04-13 13:36 +0000 [d0a8334e4f] Sean Bright * app_voicemail: Don't split mailbox options on comma Because the per-mailbox options are the last thing on a line, don't look for or stomp on any subsequent commas. ASTERISK-27935 #close Reported by: Sébastien Duthil Change-Id: I07b2eb4a33c303d0c7114d5b906f8c067c60a153 2019-04-12 09:33 +0000 [9b7a64cbf0] Sean Bright * pbx.c: Ignore dashes in extensions when using extenpatternmatchnew Because hyphens are not matched literally in Asterisk dialplan, we need to ignore them in our candidate extensions as well. ASTERISK-17695 #close Reported by: test011 Change-Id: I227f02301577b1633e8a55b9fe9dc149935c03f0 2019-04-09 10:10 +0000 [34b9b65098] Sean Bright * app_voicemail: Cleanup stale lock files on module load If Asterisk crashes while a VM directory is locked, lock files in the VM spool directory will not get properly cleaned up. We now clear them on module load. ASTERISK-20207 #close Reported by: Steven Wheeler Change-Id: If40ccd508e2f6e5ade94dde2f0bcef99056d0aaf 2019-04-12 07:33 +0000 [898765d919] George Joseph * ARI: Run 'make ari-stubs' An earlier contributor apparently forgot to run 'make ari-stubs' before committing after making ARI model changes. Change-Id: I7813e5638e2821d11f4b968dc2aeab4f725190a6 2019-04-11 15:48 +0000 [116dc9c9b3] Sean Bright * res_ael: Create consistent label names across reloads Reset the internal counter that the AEL2 compiler uses for unique label names before compiling. This keeps dialplan labels consistent across reloads assuming the AEL2 has not changed. ASTERISK-17799 #close Reported by: Kirill Katsnelson Change-Id: I30b3cc887d1ee0644d3f341e2fef16f525d7fae5 2019-04-11 15:29 +0000 [ea3109beaa] Sean Bright * res_ael: Use Gosub in for loop expressions In AEL2, if a 'for' statement contains macro* calls, like: for (&iterator(${TRY},A); "${A}" != ""; &iterate(A)) { The AEL2 parser will translate these into calls to the deprecated Macro dialplan application and use the antiquated pipe delimiter. Instead, convert these into calls to the Gosub dialplan application and use commas as argument separators. ASTERISK-18593 #close Reported by: Luke-Jr * 'macro' in this context means AEL2 macros, not the 'Macro' application Change-Id: I3d73716033b8e3e42e0209d355bf5f10c97045fc 2019-04-11 11:03 +0000 [71c7864d1d] Sean Bright * res_ael: Fix pattern matching against literal '+' When generating the regular expression that matches against existing extensions, we need to escape literal characters that can also be regular expression metacharacters. This was already being done for '*' but we need to do the same for '+'. In passing, remove some unreachable code - strcmp() is already run immediately when entering extension_matches(). ASTERISK-14939 #close Reported by: klaus3000 Change-Id: I8d2cccb3479168fba1b0a6704c52198b396468f1 2019-04-11 12:49 +0000 [f91262272e] Sean Bright * pbx.c: Properly parse labels with leading digits If the target of a Goto is a label that starts with a number, we erroneously treat the leading digits as a priority. ASTERISK-20182 #close Reported by: Janu Change-Id: Ia78408c0805a729103917247ecfc802f6fafc94b 2019-04-10 18:07 +0000 [eec16b8e99] Alexander Anikin * chan_ooh323: fix h323 log file path Change h323 log path relative to AST_LOG_DIR instead of /var/log/asterisk hardcoded Add return back error message from OOH323EP initialize ASTERISK-28348 #close Reported by: Dmitry Shubin Change-Id: Ib102dd36bbe6c2a7a4ce6870ae9110d9000d7e98 2019-04-09 16:47 +0000 [acfbfef8ad] Alexei Gradinari * res_pjsip: Fix transport_states ref leak Add missing ao2_ref(transport_state, -1) while iterate on a transport_states container. Change-Id: I40e35b5a339121300c80075c30db47201a6c374e 2019-04-01 14:57 +0000 [ef404fef91] Ben Ford * build: Revise CHANGES and UPGRADE.txt handling. This changes the way that we handle adding changes to CHANGES and UPGRADE.txt. The reason for this is because whenever someone needed to make a change to one of these files and someone else had already done so, you would run into merge conflicts. With this new setup, there will never be merge conflicts since all changes will be documented in the doc/-staging directory. The release script is now responsible for merging all of these changes into the appropriate files. There is a special format that these files have to follow in order to be parsed. The files do not need to have a meaningful name, but it is strongly recommended. For example, if you made a change to pjsip, you may have something like this "res_pjsip_relative_title", where "relative_title" is something more descriptive than that. Inside each file, you will need a subject line for your change, followed by a description. There can be multiple subject lines. The file may look something like this: Subject: res_pjsip Subject: Core A description that explains the changes made and why. The release script will handle the bulleting and section separators! You can still separate with new lines within your description. The headers ("Subject" and "Master-Only") are case sensative, but the value for "Master-Only" ("true" or "True") is not. For more information, check out the wiki page: https://wiki.asterisk.org/wiki/display/AST/CHANGES+and+UPGRADE.txt ASTERISK-28111 #close Change-Id: I19cf4b569321c88155a65e9b0b80f6d58075dd47 2019-04-04 16:02 +0000 [85bbb7a3e8] Chris-Savinovich * config.c: Fix a crash in extconfig parsing When extconfig.conf file is parsed, the code previously searched for character comma without verifying if error (null or blank). This caused a segmentation error. Change-Id: Id76b452d8f330d11c2742c37232761ad71472a8b 2019-04-03 10:55 +0000 [7e5b4b8616] Salah Ahmed * chan_pjsip: DTMF Mode auto_info fallback lead to both inband and info When the dtmf_mode on an endpoint is configured as "auto_info" Asterisk will produce an inband DTMF tone alongside an INFO message when sending DTMF. ASTERISK-28371 Change-Id: I1380b82f006e110a1b83fbb50c9873edd13a5d9a 2019-03-21 18:09 +0000 [d5a318f148] sungtae kim * main/json.c: Added app_name, app_data to channel type It was difficult to check the channel's current application and parameters using ARI for current channels. Added app_name, app_data items to show the current application information. ASTERISK-28343 Change-Id: Ia48972b3850e5099deab0faeaaf51223a1f2f38c 2019-04-02 15:49 +0000 [8ec4de7501] Sebastian Kemper * loader: support for permanent dlopen() Asterisk assumes that dlopen() will always run the constructor of a shared library and every dlclose() will run its destructor. But dlopen() may be permanent, meaning the constructor will only be run once, as is the case with musl libc. With a permanent dlopen() the Asterisk module loader does not work correctly, because it's expectations regarding when the constructors and destructors are run are not met. In fact a segmentation fault will occur when the first module is "re-opened" that has AST_MODFLAG_GLOBAL_SYMBOLS set (the dlopen() does not call the constructor, resource_being_loaded is not set to NULL, then strlen is called with NULL instead of a string, see issue ASTERISK-28319). This commit adds code to the loader that will manually run the constructors/destructors of the (non-builtin) modules where needed. To achieve this a new ao2 container (linked list) is started and filled with objects that contain the names of the modules and the pointers to their respective info structs. This behavior can be activated when configuring Asterisk (--enable-permanent-dlopen). By default this is disabled, of course. ASTERISK-28319 #close Signed-off-by: Sebastian Kemper Change-Id: I86693a0ecf25d5ba81c73773a03df4abc3426875 2019-04-03 17:55 +0000 [1464a6b80f] George Joseph * CI: Add --no-dev-mode option to buildAsterisk.sh The new option disables dev mode, TEST_FRAMEWORK and MALLOC_DEBUG making the build more production-like. Change-Id: Ieb72497d4d91d5416684aaed702cc3f532099738 2019-04-03 10:24 +0000 [8961d9ca8b] Ben Ford * build: Fix compiler warnings/errors. The compiler complained about a couple of variables that weren't initialized but were being used. Initializing them to NULL resolves the warnings/errors. ASTERISK-28362 #close Change-Id: I6243afc5459b416edff6bbf571b0489f6b852e4b 2019-03-27 12:59 +0000 [94eeba6147] Kevin Harwell * bridge_softmix: use a float type to store the internal REMB bitrate REMB's exponent is 6-bits (0..63) and has a mantissa of 18-bits. We were using an unsigned integer to represent the bitrate. However, that type is not large enough to hold all potential bitrate values. If the bitrate is large enough bits were being shifted off the "front" of the mantissa, which caused the wrong value to be sent to the browser. This patch makes it so it now uses a float type to hold the bitrate. Using a float allows for all bitrate values to be correctly represented. ASTERISK-28255 Change-Id: Ice00fdd16693b16b41230664be5d9f0e465b239e 2019-03-27 14:30 +0000 [ae1aeb930e] Matthew Fredrickson * res/res_rtp_asterisk: Enable rxjitter calculation for video It looks like we're not properly calculating jitter values on received video streams. This patch enables the code that does jitter calculations for those streams. Change-Id: Iaac985808829c8f034db8c57318789c4c8c11392 2019-01-26 15:51 +0000 [5815597a21] sungtae kim * stasis.c: Added topic_all container Added topic_all container for centralizing the topic. This makes more easier to managing the topics. Added cli commands. stasis show topics : It shows all registered topics. stasis show topic : It shows speicifed topic's detail info. ASTERISK-28264 Change-Id: Ie86d125d2966f93de74ee00f47ae6fbc8c081c5f 2019-03-02 05:37 +0000 [bbc13b1f1f] sungtae kim * res/res_ari: Added ARI resource /ari/channels/{channelId}/rtp_statistics Added ARI resource for channel statistics. GET /ari/channels/{channelId}/rtp_statistics : It returns given channel's rtp statistics detail. ASTERISK-28320 Change-Id: I4343eec070438cec13f2a4f22e7fd9e574381376 2019-03-26 13:07 +0000 [d4cd2a9706] Sean Bright * pjproject: Add timer patch from pjproject r5934 ASTERISK-28161 #close Reported by: Ross Beer Change-Id: I65331d554695753005eaa66c1d5d4807fe9009c8 2019-12-23 20:15 +0000 Asterisk Development Team * asterisk certified/16.3-cert1 Released. 2019-12-04 15:01 +0000 [3f770e50d6] George Joseph * res_rtp_asterisk: Add frame list cleanups to ast_rtp_read In Asterisk 16+, there are a few places in ast_rtp_read where we've allocated a frame list but return a null frame instead of the list. In these cases, any frames left in the list won't be freed. In the vast majority of the cases, the list is empty when we return so there's nothing to free but there have been leaks reported in the wild that can be traced back to frames left in the list before returning. The escape paths now all have logic to free frames left in the list. ASTERISK-28609 Reported by: Ted G Change-Id: Ia1d7075857ebd26b47183c44b1aebb0d8f985f7a 2019-12-11 18:03 +0000 [b6572d35e4] Joshua C. Colp * confbridge: Add support for specifying maximum sample rate. ConfBridge has the ability to move between different sample rates for mixing the conference bridge. Up until now there has only been the ability to set the conference bridge to mix at a specific sample rate, or to let it move between sample rates as necessary. This change adds the ability to configure a conference bridge with a maximum sample rate so it can move between sample rates but only up to the configured maximum. ASTERISK-28658 Change-Id: Idff80896ccfb8a58a816e4ce9ac4ebde785963ee 2019-11-22 10:39 +0000 [f9b6586020] Thomas Arimont (license 5525) * channel.c: Resolve issue with receiving SIP INFO packets for DTMF The problem is essentially the same as in ASTERISK~28245. Besides the direct media scenario we have an additional scenario where a special client is involved. This device mutes audio by default in transmit direction (no rtp frames) and activates audio only by a foot switch. In this situation dtmf input (pin for conferences, transfer features codes , etc) using SIP INFO mode is not understood properly especially when SIP INFO messages are sent quickly. This patch ensures that SIP INFO frames are properly queued and processed in the above scenario. The patch also corrects situations where successive dtmf events are received quicker than the signalled event duration (plus minimum gap/pause) allows, i.e. DTMF events have to be buffered in the ast channel read queue and emulation has to be processed asynchronously at slower speed. Reported by: Thomas Arimont patches: trigger_dtmf_emulation.patch submitted by Thomas Arimont (license 5525) Change-Id: I309bf61dd065c9978c8e48f5b9a936ab47de64c2 2019-11-25 06:55 +0000 [bafd5f9908] Joshua Colp * parking: Fall back to parker channel name even if it matches parkee. ASTERISK-28631 Change-Id: Ia74d084799fbb9bee3403e30d2391aacd46243cc 2019-11-22 09:40 +0000 [e4b024ec11] Ben Ford * gitreview: Point to correct branch. Change-Id: I6f709a45a0d4ebadf8d51f64bd3509b1382d0496 2019-10-21 14:55 +0000 [e989cb4590] Ben Ford * chan_sip.c: Prevent address change on unauthenticated SIP request. If the name of a peer is known and a SIP request is sent using that peer's name, the address of the peer will change even if the request fails the authentication challenge. This means that an endpoint can be altered and even rendered unusuable, even if it was in a working state previously. This can only occur when the nat option is set to the default, or auto_force_rport. This change checks the result of authentication first to ensure it is successful before setting the address and the nat option. ASTERISK-28589 #close Change-Id: I581c5ed1da60ca89f590bd70872de2b660de02df 2019-10-24 12:41 +0000 [4e80a32ebd] George Joseph * manager.c: Prevent the Originate action from running the Originate app If an AMI user without the "system" authorization calls the Originate AMI command with the Originate application, the second Originate could run the "System" command. Action: Originate Channel: Local/1111 Application: Originate Data: Local/2222,app,System,touch /tmp/owned If the "system" authorization isn't set, we now block the Originate app as well as the System, Exec, etc. apps. ASTERISK-28580 Reported by: Eliel Sardañons Change-Id: Ic4c9dedc34c426f03c8c14fce334a71386d8a5fa 2019-11-20 12:56 +0000 [c551fd3ec9] Kevin Harwell * res_pjsip_outbound_registration: add support for SRV failover ASTERISK-28624 Change-Id: I8da7c300dd985ab7b10dbd5194aff2f737808561 2019-11-15 04:46 +0000 [de568ddcd4] Joshua Colp * parking: Fix case where we can't get the parker. ASTERISK-28616 Change-Id: Iabe31ae38d01604284fcc5c2438d44e29a32ea4d 2019-11-12 05:00 +0000 [728a1ba77a] Joshua Colp * parking: Use channel snapshot instead of channel. There exists a scenario where a thread can hold a lock on the channels container while trying to lock a bridge. At the same time another thread can hold the lock for said bridge while attempting to retrieve a channel. This causes a deadlock. This change fixes this scenario by retrieving a channel snapshot instead of a channel, as information present in the snapshot is all that is needed. ASTERISK-28616 Change-Id: I68ceb1d62c7378addcd286e21be08a660a7cecf2 2019-09-24 11:21 +0000 [a801a7dae2] Kevin Harwell * res_pjsip_pubsub: change warning to debug The following message: "Subscription request from endpoint rejected. Expiration of 0 is invalid" Would sometimes spam the log with warnings if Asterisk restarted and a bunch of clients sent unsubscribes. This patch changes it from a warning to a debug message. Change-Id: I841ec42f65559f3135e037df0e55f89b6447a467 2019-09-23 11:01 +0000 [d811289498] Kevin Harwell * res_sorcery_memory_cache: stale item update leak When a stale item was being updated the object was being retrieved, but its reference was not being decremented after the update. This patch makes it so the object is now appropriately de-referenced. ASTERISK-28523 Change-Id: I9d8173d3a0416a242f4eba92fa0853279c500ec7 2019-09-15 14:35 +0000 [38c4d43820] Joshua Colp * chan_pjsip: Relock correct channel during "fax" redirect. When fax detection occurs on an outbound PJSIP channel the redirect operation will result in a masquerade occurring and the underlying channel on the session changing. The code incorrectly relocked the new channel instead of the old channel when returning. This resulted in the new channel being locked indefinitely. The code now always acts on the expected channel. ASTERISK-28538 Change-Id: I2b2e60d07e74383ae7e90d752c036c4b02d6b3a3 2019-08-20 15:05 +0000 [93736ffc7f] Alexei Gradinari (license 5691) * AST-2019-004 - res_pjsip_t38.c: Add NULL checks before using session media After receiving a 200 OK with a declined stream in response to a T.38 initiated re-invite Asterisk would crash when attempting to dereference a NULL session media object. This patch checks to make sure the session media object is not NULL before attempting to use it. ASTERISK-28495 patches: ast-2019-004.patch submitted by Alexei Gradinari (license 5691) Change-Id: I168f45f4da29cfe739acf87e597baa2aae7aa572 (cherry picked from commit 965df3c228d49bcde3503e0482f3c831dcbf6c77) 2019-09-04 16:19 +0000 [eac6f2b0a2] Chris-Savinovich * test_utils.c: Skip test adsi_loaded_test if module not loaded. Module res_adsi.so is deprecated, therefore it does not load by default. Module not loaded causes it to yield a FAIL when tested by tests/test_utils.c. This fix checks if the corresponding module is loaded at the start of the test, and if not, it passes the test and exits with a message. This fix is applied to all versions where the module is marked deprecated. Change-Id: I52be64c8f6af222e15148a856d1f10cb113e1e94 2019-08-08 12:10 +0000 [e5b33bb979] George Joseph * CI: Escape backslashes in printenv/sort/tr Change-Id: I52be64c8f6af2bbe15148a856d1f10cb113e1e94 2019-08-08 07:12 +0000 [a9aa952e0f] George Joseph * CI: Add "throttle" label and "skip_gate" capability To make throttling by label fully active, the "throttle" option has to be specified with a specific label. You can now specify "skip_gate" in the Gerrit comments when you do a +2 code review to tell Jenkins not to actually run the gate. You'd do this if you plan to manually merge the change. Also updated the "printenv" debug output to better sort multi-line comments. Change-Id: I4c0b1085acec4805f2ca207eebac50aad81f27e2 2019-08-06 10:40 +0000 [475a8214fe] George Joseph * CI: Make node labels job-specific Originally, the eligible nodes for a job were labelled only by "swdev-docker". So basically any node could run any job. We had found that allowing a node to run more than 1 gate at a time was problematic so we limited the nodes to processing 1 job at a time. With the creation of the Asterisk 17 branches however, we now have so many active branches that getting checks and gates through in a timely manner is problematic when a node can run only 1 job at a time. Now the nodes are also labelled by the job type they can run. For instance: "asterisk-check", "asterisk-gate", etc. With the "Throttle Concurrent Builds" plugin, we can now allow a node to run more than 1 job BUT throttle by job type. For instance: Allow 2 jobs but only 1 asterisk-gate at a time. Now a node can run 2 checks or 1 check and 1 gate or 1 gate but not 2 gates at a time. Change-Id: I2032bf6afbcec5c341d9b852214c0c812d3d6db5 2019-07-26 08:40 +0000 [0a9a04338d] George Joseph * .gitreview: Update defaultbranch for certified Change-Id: I3dc35bdd6df92595f6941e92257986943fb50c2e 2019-07-24 15:15 +0000 [e6622f6697] George Joseph * CI: Don't enable non-core modules in Certified branches We don't support non-core modules for Certified releases but we were enabling them for CI builds which was causing lots of test failures. Now we don't. Change-Id: I0b3254c08a2479f3d39151690350cce5ce5ad766 2019-06-12 13:03 +0000 [e3180a9ef0] George Joseph * res_pjsip_messaging: Check for body in in-dialog message We now check that a body exists and it has a length > 0 before attempting to process it. ASTERISK-28447 Reported-by: Gil Richard Change-Id: Ic469544b22ab848734636588d4c93426cc6f4b1f 2019-06-28 11:15 +0000 [f087d70ed0] Francesco Castellano * chan_sip: Handle invalid SDP answer to T.38 re-invite The chan_sip module performs a T.38 re-invite using a single media stream of udptl, and expects the SDP answer to be the same. If an SDP answer is received instead that contains an additional media stream with no joint codec a crash will occur as the code assumes that at least one joint codec will exist in this scenario. This change removes this assumption. ASTERISK-28465 Change-Id: I8b02845b53344c6babe867a3f0a5231045c7ac87 2019-05-17 18:44 +0000 [3489fd015e] George Joseph * res_rtp_asterisk: Add ability to propose local address in ICE You can now add the "include_local_address" flag to an entry in rtp.conf "[ice_host_candidates]" to include both the advertized address and the local address in ICE negotiation: [ice_host_candidates] 192.168.1.1 = 1.2.3.4,include_local_address This causes both 192.168.1.1 and 1.2.3.4 to be advertized. Change-Id: Ide492cd45ce84546175ca7d557de80d9770513db 2019-05-20 12:45 +0000 [b62f3acd83] Joshua Colp * pjproject-bundled: Add upstream timer fixes Fixed #2191: - Stricter double timer entry scheduling prevention. - Integrate group lock in SIP transport, e.g: for add/dec ref, for timer scheduling. ASTERISK-28161 Reported-by: Ross Beer Change-Id: I2e09aa66de0dda9414d8a8259a649c4d2d96a9f5 2019-05-21 12:26 +0000 [43e1757b10] George Joseph * Prepare certified/16.3 * Update all extended and deprecated modules to set defaultenabled = no * Change .version to certified/16.3 Change-Id: Idc92d5c797678fba755536fe4a27297d959f67e9 2019-04-04 09:49 +0000 [60a3800ed2] Asterisk Development Team * Update for 16.3.0 2019-04-03 10:24 +0000 [c4027dbf2d] Ben Ford * build: Fix compiler warnings/errors. The compiler complained about a couple of variables that weren't initialized but were being used. Initializing them to NULL resolves the warnings/errors. ASTERISK-28362 #close Change-Id: I6243afc5459b416edff6bbf571b0489f6b852e4b 2019-04-01 09:55 +0000 [481e41a537] Asterisk Development Team * Update for 16.3.0-rc1 2019-03-29 08:07 +0000 [6f5a6072ab] Sean Bright * app_queue: Fix a few member pause bugs * Always set member->lastpause when setting member->paused * Fixed typo (using member->lastcall instead of member->lastpause) in 'queue show' output. * Use a constant 'now' in 'queue show' output for a better point-in-time view of time based stats. ASTERISK-27541 #close Reported by: César Benjamín García Martínez Change-Id: Ib41ced90cfdb66f9bb1e7b263d0f6fc1ac6e18fa 2019-03-26 14:56 +0000 [64279e5992] Ben Ford * alembic: Fix errors during upgrade head. When trying to upgrade using alembic, a couple different errors kept popping up that prevented the upgrade. An additional parameter was needed when changing the schema for mwi_subscribe_replaces_unsolicited from an integer to an enum. When changing from a string to an enum, the type needed to be cast for postgresql. The other issue was a parameter being used during column creation that did not exist. After fixing the upgrade process, it revealed errors with the downgrade process. One was a variable not being defined in the downgrade function, and the other was tables not existing when using MySQL. This was due to a context check that should have encompassed MySQL, but in the end was not doing so. Change-Id: Ib4d70cf3ce5080023a50be496272a777b55d6c8e 2019-03-27 11:03 +0000 [636e301f91] Ben Ford * build: Add staging directories for future changes. This is the first step in changing the release process so that changes made to the CHANGES and UPGRADE.txt files do not result in merge conflicts every time multiple people modify these files. The changes made will go in these new directories: doc/CHANGES-staging and doc/UPGRADE-staging. The README.md files explain how things will work, but here's a little overview. When you make a change that would go in either CHANGES or UPGRADE.txt, this should instead be documented in a new file in the doc/CHANGES-staging or doc/UPGRADE-staging directory, respectively. The format will look like this: Subject: res_pjsip A description that explains the changes made and why. The release script will handle the bulleting and section separators! The 'Subject:' header is case-sensitive. You can still separate with new lines within your description. Subject: res_ari Master-Only: true You can have more than one subject, and they don't have to be the same! Also, the 'Master-Only' header should always be true and is also case-sensitive (but the value is not - you can have 'true' or 'True'). This header will only ever be present in the master branch. For more information, check out the wiki page: https://wiki.asterisk.org/wiki/display/AST/CHANGES+and+UPGRADE.txt This is an initial change for ASTERISK_28111. Functionally, this will make no difference, but it will prep the directories for when the changes from CHANGES and UPGRADE.txt are extracted. Change-Id: I8d852f284f66ac456b26dcb899ee46babf7d15b6 2019-03-26 16:55 +0000 [3e5b26ae0a] Sean Bright * app_queue: Fix documentation for QUEUE_MEMBER function. It was a copy/paste of the QUEUE_MEMBER_COUNT function's synopsis. ASTERISK-20986 #close Reported by: Olivier Krief Change-Id: If51ec481feb35824a4e78ab5600b197b819b10be 2019-03-25 06:34 +0000 [4d8cd2efbe] Joshua Colp * manager: Use separate lock for session event notification. When notifying a manager session that new events were available the same lock was used that was also held when doing things within the session (such as sending events out). If the manager session blocked for a period of time this would cause a back up of messages in Stasis and would also block any other sessions from receiving events. This change adds a separate lock to the manager session which is strictly used for notifying it that new events are available. ASTERISK-28350 Change-Id: Ifbcac007faca9ad0231640f5e82a6ca9228f261b 2019-03-25 18:05 +0000 [e51bd0726b] Alexei Gradinari * pjsip: restrict function PJSIP_PARSE_URI to parse only SIP/SIPS URIs The next usage of PJSIP_PARSE_URI will crash asterisk ${PJSIP_PARSE_URI(tel:+1234567890,host)} or ${PJSIP_PARSE_URI(192.168.1.1:5060,host)} The function pjsip_parse_uri successfully parses then, but returns struct pjsip_other_uri *. This patch restricts parsing only SIP/SIPS URIs. Change-Id: I16f255c2b86a80a67e9f9604b94b129a381dd25e 2019-03-06 16:21 +0000 [6d455487d9] sungtae kim * res/res_ari: Added timestamp as a requirement for all ARI events Changed to requirement to having timestamp for all of ARI events. The below ARI events were changed to having timestamp. PlaybackStarted, PlaybackContinuing, PlaybackFinished, RecordingStarted, RecordingFinished, RecordingFailed, ApplicationReplaced, ApplicationMoveFailed ASTERISK-28326 Change-Id: I382c2fef58f5fe107e1074869a6d05310accb41f 2019-03-25 14:31 +0000 [d905602a04] Sean Bright * chan_sip: Ensure 'qualifygap' isn't negative Passing negative intervals to the scheduler rips a hole in the space-time continuum. ASTERISK-25792 #close Reported by: Paul Sandys Change-Id: Ie706f21cee05f76ffb6f7d89e9c867930ee7bcd7 2019-03-25 11:42 +0000 [634314c727] Alexei Gradinari * res_config_odbc: set empty extended field as a single whitespace If Realtime @ variable value is NULL or empty or contains only whitespaces then when we try to retrieve it using PJSIP_ENDPOINT we get WARNING pjsip_endpoint_function_read: Unknown property @my_var for PJSIP endpoint. And the variable is missing in the result of CLI pjsip show endpoint. This patch keeps empty sorcery extended field. ASTERISK-28341 #close Change-Id: I221fccc04cbfa2be17ce971f64ae0e74e465eea0 2019-03-22 14:46 +0000 [ce5bed44e4] Matthew Fredrickson * main/taskprocessor: Increase max name length of taskprocessors Since the new names went in, the maximum taskprocessor name is too short. This patch increases the name field to a length to better handle the new names. Change-Id: I32f32d6926f25c8ef5a91303fd2988d2c2858877 2019-03-14 11:46 +0000 [7bdde83f2c] George Joseph * sorcery.c: Sorcery enhancements for wizard management Added ability to specifiy a wizard is read-only when applying it to a specific object type. This allows you to specify create, update and delete callbacks for the wizard but limit which object types can use them. Added the ability to allow an object type to have multiple wizards of the same type. This is indicated when a wizard is added to a specific object type. Added 3 new sorcery wizard functions: * ast_sorcery_object_type_insert_wizard which does the same thing as the existing ast_sorcery_insert_wizard_mapping function but accepts the new read-only and allot-duplicates flags and also returns the ast_sorcery_wizard structure used and it's internal data structure. This allows immediate use of the wizard's callbacks without having to register a "wizard mapped" observer. * ast_sorcery_object_type_apply_wizard which does the same thing as the existing ast_sorcery_apply_wizard_mapping function but has the added capabilities of ast_sorcery_object_type_insert_wizard. * ast_sorcery_object_type_remove_wizard which removes a wizard matching both its name and its original argument string. * The original logic in __ast_sorcery_insert_wizard_mapping was moved to __ast_sorcery_object_type_insert_wizard and enhanced for the new capabilities, then __ast_sorcery_insert_wizard_mapping was refactored to just call __ast_sorcery_insert_wizard_mapping. * Added a unit test to test_sorcery.c to test the read-only capability. Change-Id: I40f35840252e4313d99e11dbd80e270a3aa10605 2019-03-10 17:53 +0000 [9e36707dca] sungtae kim * res/res_stasis: Fixed wrong StasisEnd timestamp Because StasisEnd's timestamp created it's own timestamp, it makes wrong timestamp, compare to other channel event(ChannelDestroyed). Fixed to getting a timestamp from the Channel's timestamp. ASTERISK-28333 Change-Id: I5eb8380fc472f1100535a6bc4983c64767026116 2019-03-14 09:55 +0000 [057c7380be] Sean Bright * vector: Add AST_VECTOR_COMPACT() to reclaim wasted space This might be useful in situations where you are loading an undetermined number of items into a vector and don't want to keep (potentially) 2x the necessary memory around indefinitely. Change-Id: I9711daa0fe01783fc6f04c5710eba84f2676d7b9 2019-03-14 11:53 +0000 [0426e0fede] Richard Mudgett * taskprocessor.c: Fix printf type mismatch A size_t is not always an unsigned long. * Use the %zu format specifier in the ast_cli() printf format string since AST_VECTOR_SIZE() returns a size_t value. Change-Id: Ib102dd36bbe6c2a7a4ce6870ae9110d978dd7e98 2019-03-08 09:40 +0000 [f5f977baec] George Joseph * app.c: Remove deletion of pool topic on mwi state delete As part of an earlier voicemail refactor, ast_delete_mwi_state_full was modified to remove the pool topic for a mailbox when the state was deleted. This was an attempt to prevent stale topics from accumulating when app_voicemail was reloaded and a mailbox went away. Unfortunately because of the fact that when app_voicemail reloads, ALL mailboxes are deleted then only current ones recreated, topics were being removed from the pool that still had subscribers on them, then recreated as new topics of the same name. So now modules like res_pjsip_mwi are listening on a topic that will never receive any messages because app_voicemail is publishing on a different topic that happens to have the same name. The solutiuon to this is not easy and given that accumulating topics for deleted mailboxes is less evil that not sending NOTIFYs... * Removed the call to stasis_topic_pool_delete_topic in ast_delete_mwi_state_full. Also: * Fixed a topic reference leak in res_pjsip_mwi mwi_stasis_subscription_alloc. * Added some debugging to mwi_stasis_subscription_alloc, stasis_topic_create, and topic_dtor. * Fixed a topic reference leak in an error path in internal_stasis_subscribe. ASTERISK-28306 Reported-by: Jared Hull Change-Id: Id7da0990b3ac4be4b58491536b35f41291247b27 2019-03-09 08:39 +0000 [342550e0ea] cirillor * Variable ALTCONF ignored when service is used in Debian When variable ALTCONF is defined, the command start prints the message "Unable to open specified master config file '"/etc/asterisk/asteris..." and use default configurations. ASTERISK-28332 Change-Id: I7595e582a0ee2c1051ea35435e247e27906957ef 2019-03-13 06:05 +0000 [03c0d19cc8] Joshua Colp * stasis: Allow empty application arguments to move. Change-Id: I1e4d37415f3034abe36496dc30209c2303e6af5c 2019-03-12 15:54 +0000 [6a435723f7] Kevin Harwell * AMI/ARI: Bump non-breaking version numbers Increasing the non-breaking AMI and ARI version numbers due to changes and additions in those API's. Note, some changes may be forthcoming (will be added between now and the next release of Asterisk), thus not listed here. As well a few changes listed below may have been released in a previous release of Asterisk, but the API version numbers were not increased at that time, so including here. AMI: * app_queue: set the wrapuptime from AddQueueMember application - e806990 * res_pjsip: option for ContactStatus event updates - 7f22c9f ARI: * bridging: Add creation timestamps - 0d70120 * res_stasis: Add ability to switch applications - 50a4b61 * ARI event type filtering - 1c5def4 * Added ARI resource /ari/asterisk/ping - 19fc99a ASTERISK-28314 Change-Id: Iebc813840f8230afa6b20579772e15549064b787 2019-03-12 13:25 +0000 [a71ae3dc44] George Joseph * Makefile.moddir_rules: Pass PJPROJECT_BUNDLED to download_externals The download_externals script wasn't getting the PJPROJECT_BUNDLED environment variable passed down to it so it wasn't downloading the appropriate variant of res_digium_phone. This could cause crashes in the DPMA. Change-Id: I5daa9369c7af1fd556d892e89a85f279a2533425 2019-03-07 13:48 +0000 [47c853f8e1] Chris-Savinovich * partial-inlining: disable partial-inlining if gcc>=8.2.1 Apply flag -fno-partial-inlining on default optimization if and only if gcc version >= 8.2.1 (this is the current ver on Fedora and Ubuntu). This is done to avoid a bug that causes arithmetic calculations to fail if the following conditions are met: 1. TEST_FRAMEWORK on 2. DONT_OPTIMIZE off 3. Fedora and Ubuntu 4. GCC 8.2.1 5. There must exist a certain combination of multithreading. 6. Optimization level -O2 and -O3 7. Flag -fpartial-inline activated (default when optimization level>=2) The following link points to a similar gcc bug reported in 2015. This leads me to believe the bug has regressed. Note I am not able to replicate this bug in an environment other than Asterisk + Test Framework + Test_cel because the multithreading combination that causes it seems to be unique. Therefore I am temporarily abandoning any thoughts of reporting the new occurrence of this bug to gcc.gnu.org. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65307 Change-Id: Ibd1afe60e0a38b88e85fdcd9b051004601c2f102 2019-03-07 06:28 +0000 [b886fef66e] Joshua Colp * stasis: Improve topic/subscription names and statistics. Topic names now follow: :[/] This ensures that they are all unique, and also provides better insight in to what each topic is for. Subscriber ids now also use the main topic name they are subscribed to and an incrementing integer as their identifier to make it easier to understand what the subscription is primarily responsible for. Both the CLI commands for listing topic and subscription statistics now sort to make it a bit easier to see what is going on. Subscriptions will now show all topics that they are receiving messages from, not just the main topic they were subscribed to. ASTERISK-28335 Change-Id: I484e971a38c3640f2bd156282e532eed84bf220d 2019-03-03 09:20 +0000 [ca8f254f0f] sungtae kim * res/res_rtp_asterisk.c: Fixing possible divide by zero Currently, when the Asterisk calculates rtp statistics, it uses sample_count as a unsigned integer parameter. This would be fine for most of cases, but in case of large enough number of sample_count, this might be causing the divide by zero error. ASTERISK-28321 Change-Id: If7e0629abaceddd2166eb012456c53033ea26249 2019-03-05 08:15 +0000 [c9459b1875] cirillor * chan_dahdi: Add logical group at DAHDIChannel event and CHANNEL function Add logical group at DAHDIChannel event and create "dahdi_group" at CHANNEL function. ASTERISK-28317 Change-Id: Ic1f834cd53982a9707a9748395ee746d6575086a 2019-03-08 14:12 +0000 [8ca74d73f1] Sean Bright * res_musiconhold: Remove redundant option parsing Change-Id: I481fabd8eaf2e4e7ffb5c8285b294742826e7d12 2019-03-04 01:50 +0000 [4ca41caf38] Torrey Searle * chan_pjsip: add a flag to ignore 183 responses if no SDP present chan_sip will always ignore 183 responses that do not contain SDP however, chan_pjsip will currently always translate it into a 183 with SDP. This new flag allows chan_pjsip to have the same behavior as chan_sip. ASTERISK-28322 #close Change-Id: If81cfaa17c11b6ac703e3d71696f259d86c6be4a 2019-03-07 17:17 +0000 [641b6041c7] Corey Farrell * jansson: json_pack with new format to verify required runtime version. Add a json_pack at startup that will fail if runtime links against a library older than jansson-2.11. Change-Id: I101aebafe0f9407650206f7c552dad3d69377b5a 2019-03-07 17:15 +0000 [5b5aa05bd9] Sean Bright * app_meetme: Don't mute joining admins if conference is muted ASTERISK-28328 #close Change-Id: I4f6069fb34923b7521520c2a205a1e56227e592b 2019-03-06 15:04 +0000 [4860954540] Sean Bright * Replace calls to strtok() with strtok_r() strtok() uses a static buffer, making it not thread safe. Change-Id: Icce265153e1e65adafa8849334438ab6d190e541 2019-03-07 16:05 +0000 [90f06ad169] Sean Bright * samples: Fix comment typo in pjsip.conf.sample Change-Id: I84a45c3d9fd26ca61aca99927eec83b57f1de857 2019-03-07 07:41 +0000 [50a4b618fc] Ben Ford * res_stasis: Add ability to switch applications. Added the ability to move between Stasis applications within Stasis. This can be done by calling 'move' in an application, providing (at minimum) the channel's id and the application to switch to. If the application is not registered or active, nothing will happen and the channel will remain in the current application, and an event will be triggered to let the application know that the move failed. The event name is "ApplicationMoveFailed", and provides the "destination" that the channel was attempting to move to, as well as the usual channel information. Optionally, a list of arguments can be passed to the function call for the receiving application. A full example of a 'move' call would look like this: client.channels.move(channelId, app, appArgs) The control object used to control the channel in Stasis can now switch which application it belongs to, rather than belonging to one Stasis application for its lifetime. This allows us to use the same control object instead of having to tear down the current one and create another. ASTERISK-28267 #close Change-Id: I43d12b10045a98a8d42541889b85695be26f288a 2019-03-06 07:20 +0000 [e7dd4bd4a9] Dömsödi Gergely * app_queue: fix ring_entry to access nativeformats with a channel lock Fixes an intermittent segmentation fault which occured when accessing nativeformats of a channel which entered into a queue. ASTERISK-27964 Reported by: Francisco Seratti Change-Id: Ic87fa7a363f3b487c24ce07032f4b2201c22db9e 2019-03-04 16:05 +0000 [88681ba9bb] Sean Bright * app_queue: Handle empty 'interface' in queue member config While the 'interface' column is a NOT NULL, the empty string is still allowed. res_config_odbc treats the empty string as a NULL and we crash when trying to dereference. Also cleaned up an adjacent error message for consistency. ASTERISK-28168 #close Change-Id: I55e012b540fbcda99bb40bede3099b7ae5db8202 2019-03-04 12:36 +0000 [0cfafb89b5] Sean Bright * sip_to_pjsip: Make multiline comment parsing consistent with Asterisk In Asterisk configuration, a multiline comment starts with ;-- as long as it is not followed by another dash (i.e. ;--- is not a multiline comment). ASTERISK-28323 #close Change-Id: I32dc38e0fac01d3c0805d27d35d2365a7c37ca72 2019-02-28 06:24 +0000 [6a714c0e9f] Joshua Colp * basic-pbx: Update configuration to work with current modules. The res_pjsip_websocket module requires the res_http_websocket module so ensure it is loaded. As well the res_pjsip_notify module needs the pjsip_notify.conf configuration file so ensure it is installed. ASTERISK-28272 Change-Id: I261659b84e7a6ac4cb49990d9badb4b2ad01bacd 2019-02-08 15:32 +0000 [0d7012044a] sungtae kim * bridging: Add creation timestamps This small feature will help to checking the bridge's status to figure out which bridge is in old/zombie or not. Also added detail items for the 'bridge show *' cli to provide more detail info. And added creation item to the ARI as well. ASTERISK-28279 Change-Id: I460238c488eca4d216b9176576211cb03286e040 2019-03-01 15:17 +0000 [63a3321c46] Rodrigo Ramírez Norambuena * CHANGES: Document addition of 'wrapuptime' argument to AddQueueMember() Change-Id: Ieb332d018ae3f2fc82b9465381fde0f299af1611 2019-02-28 10:01 +0000 [ffe07772e6] Sean Bright * res_pjsip_diversion: Use static pj_str_t for Diversion header names PJSIP assumes that these header names are not allocated, and does not clone the name strings when reusing headers. Block unload of res_pjsip_diversion until shutdown to ensure static memory stays valid. ASTERISK-28312 #close Change-Id: Ibd6ea55ec4a604bbd43ac07f8d0b54da2c39b8b9 2019-02-28 15:36 +0000 [625af27a28] Sean Bright * menuselect: Add license header to menuselect_gtk.c This file was added to the Subversion repository on 2007-03-15 by Russell Bryant, a Digium employee at the time. ASTERISK-24173 #close Change-Id: Ie866fa9d31d550467613d362b35b03c031ee594d 2019-01-30 13:25 +0000 [61585af9bd] George Joseph * res_pjsip_sdp_rtp: Fix return code from apply_negotiated_sdp_stream apply_negotiated_sdp_stream was returning a "1" when no joint capabilities were found on an outgoing call instead of a "-1". This indicated to res_pjsip_session that the handler DID handle the sdp when in fact it didn't. Without the appropriate setup, a subsequent media frame coming in would have an invalid stream_num and cause a seg fault when the stream was attempted to be retrieved. apply_negotiated_sdp_stream now returns the correct "-1" and any media is now discarded before it reaches the core stream processing. ASTERISK-28260 Reported by: Sotiris Ganouris Change-Id: Ia095cb16b4862f2f6ad6d2d2a77453fa2542371f 2019-02-28 06:51 +0000 [6f1c0e787c] Sean Bright * Revert "pjsip_message_filter: Only do interface lookup for wildcard addresses." This reverts commit d524ad523d0d32babba309810b5bccd09cb7f467. Reason for revert: This causes Contact and Via headers to have the wrong transport address. ASTERISK-28309 #close Change-Id: Ibba4d6176f68e39279fcd9a545f81d56e747bed8 2019-02-27 19:52 +0000 [fe694de299] Sean Bright * res_pjsip_config_wizard: Don't crash if misconfigured If both send_registrations and send_auth are both set to yes, outbound_auth/username must be set or we crash. ASTERISK-27992 #close Change-Id: I6418d56de1ae53f80393b314c2584048fbf7f11d 2019-02-27 19:09 +0000 [edf31624a2] Sean Bright * res_config_odbc: Avoid deadlock when max_connections = 1 Rather than calling ast_odbc_find_table() in the prepare callback, call it beforehand and pass it in to the callback to avoid the need for a second connection. ASTERISK-28166 #close Change-Id: I6f8a0b9990d636fd6bc1a92ed70f7050d2436202 2019-02-20 11:03 +0000 [b3ebb51086] Kevin Harwell * res_pjsip_registrar: blocked threads on reliable transport shutdown take 3 When a contact was removed by the registrar it did not always check to see if the circumstances involved a monitored reliable transport. For instance, if the 'remove_existing' option was set to 'true' then when existing contacts were removed due to 'max_contacts' being reached, those existing contacts being removed did not unregister the transport monitor. Also, it was possible to add more than one monitor on a reliable transport for a given aor and contact. This patch makes it so all contact removals done by the registrar also remove any associated transport monitors if necessary. It also makes it so duplicate monitors cannot be added for a given transport. ASTERISK-28213 Change-Id: I94b06f9026ed177d6adfd538317c784a42c1b17a 2019-02-27 10:37 +0000 [6e8cba39a4] George Joseph * CI: Update jenkinsfiles with new Gerrit URLs The recent upgrade of Gerrit to 2.16 elimiated referencing a repository in a way the jenkinsfiles were relying on so the URL references were changed to a more consistent and supported format. Change-Id: I2e8e3f213b9a96bb1b27665eca4a9a24bc49820e (cherry picked from commit 5ce084579f897096163b4e0c2ed4e8e1a8558cca) 2019-02-20 13:15 +0000 [8402189892] George Joseph * res_mwi_devstate.c: New module to allow presence subs to VM boxes This module allows presence subscriptions to voicemail boxes. This allows common BLF keys to act as voicemail waiting indicators. ASTERISK-28301 Change-Id: I62a246c24f3d7d432e33e22d7a4a57c15c292fdd 2019-02-25 09:41 +0000 [5b8db4e422] Torrey Searle * res/res_rtp_asterisk: smoother can cause wrong timestamps if dtmf happen Delivery timeval in the smoother object will fall behind while a DTMF is being generated. This can eventually lead to invalid rtp timestamps. To prevent this from happening the smoother needs to be reset after every DTMF to keep the timing up to date. ASTERISK-28303 #close Change-Id: Iaba3f7b428ebd72a4caa90e13b829ab4f088310f 2019-02-25 15:32 +0000 [cab8a76ae3] Kevin Harwell * rest-api-templates/asterisk_processor - replace http line breaks with line feed Including line breaks (
,
,
) in certain parts of the rest-api json definition (e.g. summary, notes) displays them correctly in swagger. However, when the field gets converted to the wiki format those breaks get escaped and show up in the text as the actual string literal "
" etc... This patch makes it so when converting to the wiki format it replaces all line break values (
, etc...) with line feeds ('\n'). Change-Id: Ie1c9faa0d1c5d622804cc0a21ce769095b08aa3d 2019-02-25 06:10 +0000 [9905cccb7b] Joshua C. Colp * res_ari_applications: Fix incorrect call to ao2_lock. When listing the applications the apps lock was incorrectly locked twice instead of being locked and then unlocked. ASTERISK-28302 Change-Id: If7d064592a9e88c0f1049214c50e02be6dabf79e 2019-02-21 12:06 +0000 [0896e4cdc6] Joshua Colp * res_pjsip_sdp_rtp: Allow only single ssrc attribute. When processing SSRC attributes we were iterating through all of them, even though we only need to know the remote SSRC once. This was problematic because some browsers group SSRCs together on a stream, and due to our negotiation only end up using the first one. Since we set the second one as the remote SSRC we would drop the received media from them instead of allowing it through. In the future this may be extended to allow SSRC groups and to use information from the attributes. Change-Id: I4dc87087dbe56a83aa65f0f897bbd4ca75ec1270 2019-01-09 04:27 +0000 [a1391aa26b] Sungtae Kim * http.c: Support separated HTTP request Currently, the Asterisk does not support seperated HTTP request. This patch make the Asterisk enables to wait lest part of HTTP request. Also increases acceptable HTTP body length to 40k to support more larger request. ASTERISK-28236 Change-Id: I48a401aa64a21c3b37bf3cb4e0486d64b7dd8aa1 2019-02-20 12:48 +0000 [bb8903b00e] George Joseph * Core: Increase AST_PBX_MAX_STACK to 512 if not LOW_MEMORY The current settings AST_PBX_MAX_STACK is 128 entries which is too low for some FreePBX installations with complex parking arrangements. Increased to 512 if LOW_MEMORY is not defined. ASTERISK-28300 Change-Id: I7c4b540bc92e6642df0f3da639b003f7da8b1299 2019-02-20 12:22 +0000 [4b6c60b362] Joshua C. Colp * stasis: Store subscriber uniqueids with topic statistics. This change provides an easier mechanism to determine which subscribers are subscribed to a topic. Using this you can inspect the specific subscribers for further details. Change-Id: I8deea21703cd5c5357b85593b46c3eaf24e18c0c 2019-02-15 12:53 +0000 [2f8def1453] George Joseph * taskprocessor: Enable subsystems and overload by subsystem To prevent one subsystem's taskprocessors from causing others to stall, new capabilities have been added to taskprocessors. * Any taskprocessor name that has a '/' will have the part before the '/' saved as its "subsystem". Examples: "sorcery/acl-0000006a" and "sorcery/aor-00000019" will be grouped to subsystem "sorcery". "pjsip/distributor-00000025" and "pjsip/distributor-00000026" will bn grouped to subsystem "pjsip". Taskprocessors with no '/' have an empty subsystem. * When a taskprocessor enters high-water alert status and it has a non-empty subsystem, the subsystem alert count will be incremented. * When a taskprocessor leaves high-water alert status and it has a non-empty subsystem, the subsystem alert count will be decremented. * A new api ast_taskprocessor_get_subsystem_alert() has been added that returns the number of taskprocessors in alert for the subsystem. * A new CLI command "core show taskprocessor alerted subsystems" has been added. * A new unit test was addded. REMINDER: The taskprocessor code itself doesn't take any action based on high-water alerts or overloading. It's up to taskprocessor users to check and take action themselves. Currently only the pjsip distributor does this. * A new pjsip/global option "taskprocessor_overload_trigger" has been added that allows the user to select the trigger mechanism the distributor uses to pause accepting new requests. "none": Don't pause on any overload condition. "global": Pause on ANY taskprocessor overload (the default and current behavior) "pjsip_only": Pause only on pjsip taskprocessor overloads. * The core pjsip pool was renamed from "SIP" to "pjsip" so it can be properly grouped into the "pjsip" subsystem. * stasis taskprocessor names were changed to "stasis" as the subsystem. * Sorcery core taskprocessor names were changed to "sorcery" to match the object taskprocessors. Change-Id: I8c19068bb2fc26610a9f0b8624bdf577a04fcd56 2019-02-08 14:21 +0000 [1c5def4b18] Kevin Harwell * ARI event type filtering Event type filtering is now enabled, and configurable per application. An app is now able to specify which events are sent to the application by configuring an allowed and/or disallowed list(s). This can be done by issuing the following: PUT /applications/{applicationName}/eventFilter And then enumerating the allowed/disallowed event types as a body parameter. ASTERISK-28106 Change-Id: I9671ba1fcdb3b6c830b553d4c5365aed5d588d5b 2018-12-11 08:15 +0000 [e806990be2] Rodrigo Ramírez Norambuena * app_queue: Enable set the wrapuptime from AddQueueMember application This change add ability to set the wrapuptime per-member using the AddQueueMember application. The feature to set wrapuptime per member was include in the issue ASTERISK-27483 for static member by configuration file and was not added to set from AddQueueMember. ASTERISK-28055 #close Change-Id: I7c7ee4a6f804922cd7c42cb02eea26eb3806c6cf 2019-02-14 17:09 +0000 [08ba504e99] sungtae kim * chan_pjsip: Changed to continued after invalid media for pjsip show channelstats Currently, the pjsip show channelstats cli does not show channel's stats after hits the invalid channel info. This makes hard to use this cli. Changed to keep iterate after hits the invalid channel info. ASTERISK-28292 Change-Id: I3efdff1c9e1b1efd3c971fb82ae77aa133a6f43c 2019-01-22 06:02 +0000 [3fe40c0c05] Sungtae Kim * res_pjsip_session Added rtcp stats result vector into the session Currently, the Asterisk's pjsip_session module does not keeping the rtcp's stats info after it was removed. But by adding the results vector and keeping it until session is destroying, it can give more useful information for other modules. ASTERISK-28253 Change-Id: Ib25c2d3fc4da084aecfde2a82c1b1d733bd64fa5 2019-02-19 10:06 +0000 [3a2db0ee04] Joshua Colp * CI: Use tmpfs option to Docker instead of mount. Some tests require Asterisk to execute scripts which are stored in /tmp. When mount is used for tmpfs there is no ability to allow scripts to be executed from that location. This change switches to using tmpfs which can be told to allow executables to be run from /tmp. Change-Id: I0e598ca2b76af1f7f2d29f0da7b1731a214a291a 2019-02-08 14:12 +0000 [e85f92f37a] Kevin Harwell * json.c/strings.c - Add a couple of utility functions Added 'ast_json_object_string_get' to the JSON wrapper in order to make it a little easier to retrieve a string field from the JSON object. Also added an 'ast_strings_equal' function that safely checks (checks for NULLs) for equality between two strings. Change-Id: I26f0a16d61537505eb41b4b05ef2e6d67fc2541b 2019-02-12 03:50 +0000 [01b781b4dc] Torrey Searle * res/res_rtp_asterisk: clear smoother when local bridging p2p_write updates txformat but doesn't require a smoother. If a smoother was created by another bridge type the smoother could fall out of date causing one way audio issues. To prevent this the smoother is now destroyed on the start of native bridge. ASTERISK-28284 #close Change-Id: I84e67f144963787fff9b4d79ac500514fb40cdc6 2019-02-14 10:54 +0000 [b327b0bbda] Chris Savinovich * Revert "Test_cel: Fails when DONT_OPTIMIZE is off" This reverts commit 05b79d16ab93b038b39412e2570a21205eb499c4. Change-Id: I2e64fc22c33b10cfd592681732fc67ae0669a301 2019-02-07 09:52 +0000 [1084b6e1a1] Joshua Colp * ci: Rerun unit tests when non-code changes occur. This change makes it so that even if non-code changes occur (such as commit message changing) unit tests will still be run and result in a verification. ASTERISK-28251 Change-Id: I6491fff7c93e5d5cd8e41054486968bf66c4f608 2019-02-07 09:23 +0000 [2cf3931379] Kevin Harwell * res_pjsip_registrar: lock transport monitor when setting 'removing' flag A previous patch attempt to mitigate blocked threads on transport shutdown for a given contact. It was thought that a second lock could be avoided by checking the 'removing' flag on the transport monitor twice (once before and once after the normal named aor locking). However as with usual threading issues if the timing was right the original problem still occured. This patch adds locking around the first 'removing' flag check and set, thus nullifying the secondary check, so it was removed. ASTERISK-28213 Change-Id: Iaa8e36e5311789549b76d8de42dfcea96013b2ed 2019-02-06 06:16 +0000 [44254d548b] Joshua Colp * res_odbc: Add basic query logging. When Asterisk is connected and used with a database the response time of the database can cause problems in Asterisk if it is long. Normally the only way to see this problem would be to retrieve a backtrace from Asterisk and examine where things are blocked, or examine the database to see if there is any indication of a problem. This change adds some basic query logging to make it easier to investigate such a problem. When logging is enabled res_odbc will now keep track of the number of queries executed, as well as the query that has taken the longest time to execute. There is also an option which will cause a WARNING message to be output if a query takes longer than a configurable amount of time to execute. This makes it easier and clearer for users that their database may be experiencing a problem that could impact Asterisk. ASTERISK-28277 Change-Id: I173cf4928b10754478a6a8c27dfa96ede0f058a6 2018-12-05 16:09 +0000 [e3e3027092] Sungtae Kim * main/cdr: Fixed cdr start overwriting The CDR was overwriting the start time when the call continued the dialplan from the ARI stasis or a Local channel was originated. This change fixes this by no longer reinitializing the CDR when transitioning out of the dialed pending state to the single state. ASTERISK-28181 Change-Id: I921bc04064b6cff1deb2eea56a94d86489561cdc 2018-11-19 18:44 +0000 [419db481d1] Giuseppe Sucameli * Fix deadlock handling subscribe req during res_parking reload Split destroy_hint method to separate hint removal and extension hint state changed callback, the latter now called via stasis. This avoids deadlock between res_parking reload that is removing the parking lot and the related hint and subscribe requests coming for the same parking lot. ASTERISK-28173 Change-Id: I5b03c3455b3b12b6f83cea4cc34f4b4b20444f7e 2019-01-28 17:21 +0000 [19fc99a2fb] sungtae kim * Added ARI resource /ari/asterisk/ping Added ARI resource. GET /ari/asterisk/ping : It returns "pong" message with timestamp and asterisk id. It would be useful for simple heath check. Change-Id: I8d24e1dcc96f60f73437c68d9463ed746f688b29 2019-02-04 13:55 +0000 [f29da72969] Sean Bright * sounds: Sort 'core show sounds' output Change-Id: Ib39052a745040f75eb635f15a042da15b20e22ab 2019-01-29 10:48 +0000 [1051e1dd18] Ben Ford * res_stasis: Auto-create context and extens on Stasis app launch. At AstriCon, there was a strong desire for the ability to completely bypass dialplan when using ARI. This is possible through the automatic creation of a context and a couple of extensions whenever an application is started. For example, if you have an application named 'ari-example', a context named 'stasis-ari-example' will be automatically created whenever this application is started as long as one does not already exist. Two extensions (a match-all extension for Stasis and a 'h' extension) are created within this context. Any endpoint that registers to Asterisk within this context will send all calls to the corresponding Stasis application. When the application is destroyed, the context is removed. ASTERISK-28104 #close Change-Id: Ie35bd93075e05b05e3ae129a83c9426931b7ebac 2019-02-04 07:09 +0000 [70fa6e6955] George Joseph * bundled-jansson: On OpenSuse Leap libjansson.a was placed in lib64 On OpenSuse Leap, libjansson.a is installed in third-party/jansson/dest/lib64 instead of lib (which is where the top-level makeopts looks). This causes a link failure. * Updated jansson/Makefile to add an explicit --libdir to force the installation to third-party/jansson/dest/lib. ASTERISK-28271 Reported by: David Wilcox Change-Id: Ibf8af75e5da13562105fcc39ed898c6ef0b5a5f3 2019-01-15 17:20 +0000 [9c3b4dcf80] Kevin Harwell * pjsip/config_global: regcontext context not created The context specified by 'regcontext' was not being created, so when Asterisk attempted to later dynamically add an extension it would fail. This patch now creates the context if a 'regcontext' is specified. ASTERISK-28238 Change-Id: I0f36cf4ab0a93ff4b1cc5548d617ecfd45e09265 2019-01-22 09:02 +0000 [603143bd5a] George Joseph * media_index.c: Refactored so it doesn't cache the index Testing revealed that the cache added no benefit but that it could consume excessive memory. Two new index related functions were created: ast_sounds_get_index_for_file() and ast_media_index_update_for_file() which restrict index updating to specific sound files. The original ast_sounds_get_index() and ast_media_index_update() calls are still available but since they no longer cache the results internally, developers should re-use an index they may already have instead of calling ast_sounds_get_index() repeatedly. If information for only a single file is needed, ast_sounds_get_index_for_file() should be called instead of ast_sounds_get_index(). The media_index directory scan code was elimininated in favor of using the existing ast_file_read_dirs() function. Since there's no more cache, ast_sounds_index_init now only registers the sounds cli commands instead of generating the initial index and subscribing to stasis format register/unregister messages. "sounds" is no longer a valid target for the "module reload" command. Both the sounds cli commands and the sounds ari resources were refactored to only call ast_sounds_get_index() once per invocation and to use ast_sounds_get_index_for_file() when a specific sound file is requested. Change-Id: I1cef327ba1b0648d85d218b70ce469ad07f4aa8d 2019-01-25 12:27 +0000 [f6452f9656] Kevin Harwell * codecs.conf.sample: update codec opus docs The option value "sdp" for some of the settings was removed a while back, however the sample conf was not updated. This patch removes any wording with regards to the old "sdp" option value, and adjusts the defaults to what they are now. ASTERISK-28263 Change-Id: I41bfa44e9f69446bcc5c8fd92e3675c676fdc445 2019-01-22 09:24 +0000 [c1da2e94a3] eyalhasson * format_g726: add support for seeking Added support for the seek function in format_g726 so playback can start from anywhere. Before the fix, playback of g726 files always started from the beginning. ASTERISK-28246 Change-Id: I626235bc4642df1479050d3d06828412603a9b40 2019-01-23 07:59 +0000 [d3a6714158] Jean Aunis * build : Fix cross-compilation errors Bundled pjproject and jansson must be configured with the host and build parameters provided to the configure script. Autotools do not permit to check for the existence of local header files, so the control of hrirs.h must not be done when cross-compiling. ASTERISK-28250 Change-Id: If0a76e52a87d4ab82b7d4c72d27d8759ca931880 2019-01-23 04:45 +0000 [907d71b551] Jeremy Lainé * res_http_websocket: ensure control frames do not interfere with data Control frames (PING / PONG / CLOSE) can be received in the middle of a fragmented message. In order to ensure they do not interfere with the reassembly buffer, we exit early and do not return the payload to the caller. ASTERISK-28257 #close Change-Id: Ia5367144fe08ac6141bba3309517a48ec7f013bc 2018-12-16 06:43 +0000 [f6cf837aed] Xiemin Chen * bridge_softmix: Use MSID:LABEL metadata as the cloned stream's appendix To avoid the stream name collide if there're more than one video track in one client. If client has multi video tracks, the name of ast_stream which represents each video track may be the same. Use the MSID:LABEL here because it's identifiable. ASTERISK-28196 #close Reported-by: xiemchen Change-Id: Ib62b2886e8d3a30e481d94616b0ceaeab68a870b 2019-01-22 15:03 +0000 [735bd4d185] Gerald Schnabel * manager_channels: Fix throwing of HangupHandler manager events The type value extracted from stasis message data in channel_hangup_handler_cb isn't compared against the valid values "run", "pop" and "push". Thus the manager events HangupHandlerPush, HangupHandlerPop and HangupHandlerRun are never thrown. This regression was introduced by ASTERISK_21462. ASTERISK-28252 Change-Id: I9956e35e18da1873113644df1ddc3c7cd37bf524 2019-01-19 15:55 +0000 [05b79d16ab] Chris-Savinovich * Test_cel: Fails when DONT_OPTIMIZE is off A bug in GCC causes TEST_CEL to return failure under the following conditions: 1. TEST_FRAMEWORK on 2. DONT_OPTIMIZE off 3. Fedora and Ubuntu 4. GCC 8.2.1 5. Test name: test_cel_dial_pickup 6. There must exist a certain combination of multithreading. The bug affects arithmetic calculations when the optimization level is bigger than O1 and the -fpartial-inline flag is on. Provided these conditions, function ast_str_to_lower() fails to convert to lower case due to said function being of type force_inline. The solution is to remove the "force_inline" type declaration from function ast_str_to_lower() Change-Id: Ied32e0071f12ed9d5f3b4cdd878b2532a1c769d7 2018-12-10 07:20 +0000 [dbef559e0b] George Joseph * app_voicemail: Add Mailbox Aliases You can now define an "aliases" context in voicemail.conf whose entries point to actual mailboxes. These can be used anywhere the mailbox is specified. Example: [general] aliasescontext = myaliases [default] 1234 = yadayada [myaliases] 4321@devices = 1234@default Now you can use 4321@devices to refer to the 1234@default mailbox. This can be useful to provide channel drivers with constant mailbox specifications such as @devices leaving app_voicemail to control exactly which mailbox the alias points to. Now, only voicemail has to be reloaded to make changes instead of individual channel drivers which are usually more expensive to reload. Change-Id: I395b9205c91523a334fe971be0d1de4522067b04 2019-01-22 12:07 +0000 [f1fb249132] Kevin Harwell * res_pjsip_registrar: mitigate blocked threads on reliable transport shutdown When a reliable transport is shutdown it's possible for the pjsip registrar resource shutdown handler to get called multiple times. If this happens and one of the threads is taking "too long" (slow database call for instance) then the others get blocked waiting to delete. Since it only takes one to delete the contact then the other threads should be able to continue on if one of the threads is currently "deleting". This patch makes it so now when a thread enters the shutdown handler it checks to see if a thread is currently already "deleting". If so, then the thread does not attempt to get the lock, and instead continues on thus avoiding the blockage. ASTERISK-28213 #close Change-Id: I7563ca596312b1dff4f3ab41483e89fe2862328a 2019-01-22 09:02 +0000 [9c11399be3] George Joseph * pjproject_bundled: Add patch for double free issue in timer heap Fixed #2172: Avoid double reference counter decrements in timer in the scenario of race condition between pj_timer_heap_cancel() and pj_timer_heap_poll(). Change-Id: If000e9438c83ac5084b678eb811e902c035bd2d8 2019-01-18 16:11 +0000 [fb6e0df173] Sean Bright * pjsip_transport_management: Shutdown transport immediately on disconnect The transport management code that checks for idle connections keeps a reference to PJSIP's transport for IDLE_TIMEOUT milliseconds (32000 by default). Because of this, if the transport is closed before this timeout, the idle checking code will keep the transport from actually being shutdown until the timeout expires. Rather than passing the AO2 object to the scheduler task, we just pass its key and look it up when it is time to potentially close the idle connection. The other transport management code handles cleaning up everything else for us. Additionally, because we use the address of the transport when generating its name, we concatenate an incrementing ID to the end of the name to guarantee uniqueness. Related to ASTERISK~28231 Change-Id: I02ee9f4073b6abca9169d30c47aa69b5e8ae9afb 2019-01-20 12:15 +0000 [6506c5b1d4] Valentin Vidic * channel.c: Fix segfault with Monitor(wav,file,i) If the Monitor is started with the i option the read_stream will be NULL. One code path in channel.c checks if write_stream is set but than uses read_stream instead causing a segfault. ASTERISK-28249 Change-Id: I1bae9126537be54895c7fea2d08dd9488d8cc525 2019-01-10 13:34 +0000 [fcd07c34fb] Joshua C. Colp * stasis / manager / ari: Better filter messages. Previously both AMI and ARI used a default route on their stasis message router to handle some of the messages for publishing out their respective connection. This caused messages to be given to their subscription that could not be formatted into AMI or JSON. This change adds an API call to the stasis message router which allows a default route to be set as well as formatters that the default route is expecting. This allows both AMI and ARI to specify that their default route only wants messages of their given formatter. By doing so stasis can more intelligently filter at publishing time so that they do not receive messages which will not be turned into AMI or JSON. ASTERISK-28244 Change-Id: I65272819a53ce99f869181d1d370da559a7d1703 2019-01-17 09:56 +0000 [011e46d5a6] Sean Bright * sched: Make sched_settime() return void because it cannot fail Change-Id: I66b8b2b2778f186919d73ae9bf592104b8fb1cd5 2019-01-08 01:38 +0000 [21a1feece2] Jeremy Lainé * res_http_websocket: respond to CLOSE opcode This ensures that Asterisk responds properly to frames received from a client with opcode 8 (CLOSE) by echoing back the status code in its own CLOSE frame. Handling of the CLOSE opcode is moved up with the rest of the opcodes so that unmasking gets applied. The payload is no longer returned to the caller, but neither ARI nor the chan_sip nor pjsip made use of the payload, which is a good thing since it was masked. ASTERISK-28231 #close Change-Id: Icb1b60205fc77ee970ddc91d1f545671781344cf 2019-01-04 17:14 +0000 [44a862fb57] Sean Bright * res_pjsip_transport_websocket: Don't assert on 0 length payloads When --enable-dev-mode is used, pjsip_tpmgr_receive_packet() will assert if passed a payload length of 0, so treat empty frames as if we didn't receive them. Change-Id: I9c5fdccd89cc8d2f3ed7e3ee405ef0fc78178f48 2019-01-07 12:04 +0000 [4b24da607e] Mohit Dhiman * stasis/endpoint: Fix memory leak of channel_ids in ast_endpoint structure. During Bridging of two channels if masquerade operation is performed on a channel (clone channel) which was created with endpoint details (ast_channel_alloc_with_endpoint()) and the original channel which is created without endpoint details (ast_channel_alloc()) then both the channels must exchange their endpoint details or else after masquerade when clone channel is being destroyed the endpoint cleanup callbacks will be destroyed too and after call completion unique_id of original channel will still be there in ast_endpoint structure's channel_ids container. ASTERISK-28197 Change-Id: Ied0451f378a3f2a36acc8c0984959a69895efa17 2019-01-05 11:14 +0000 [d2c182b6ab] Diederik de Groot * RAII: Change order or variables in clang version This prevents use-after-scope issues when unwinding the stack, which happens in reverse order. The varname variable needs to remain alive for the destruction to be able to access it. Issue was found using clang + address-sanitizer. ASTERISK-28232 #close Change-Id: I00811c34ae910836a5fb6d22304528aef92624db 2018-12-18 13:47 +0000 [7f22c9f4b7] Alexei Gradinari * res_pjsip: add option to enable ContactStatus event when contact is updated The commit I2f97ebfa79969a36a97bb7b9afd5b6268cf1a07d removed sending out the ContactStatus AMI event when a contact is updated. Thist change broke things which rely on old behavior. This patch adds a new PJSIP global configuration option 'send_contact_status_on_update_registration' to be able to preserve old ContactStatus behavior. By default new behavior, i.e. the ContactStatus event will not be sent when a device refreshes its registration. Change-Id: I706adf7584e7077eb6bde6d9799ca408bc82ce46 2019-01-07 08:06 +0000 [c6271155fb] Joshua Colp * res_pjsip_sdp_rtp: Only enable abs-send-time when WebRTC is enabled. For video streams it was possible for the abs-send-time information to be placed into RTP streams even if not negotiated. Depending on the endpoint in use this could cause video to not flow. We now only enable abs-send-time for negotiation if WebRTC is enabled. ASTERISK-28230 Change-Id: I0eb682302f8da3a4ea3c42e839208d55f825ed0c 2019-01-04 09:57 +0000 [c0e57e458b] Alexei Gradinari * RTP: reset DTMF last seqno/timestamp on RTP renegotiation The remote side may start a new stream when renegotiating RTP. Need to reset the DTMF last sequence number and the timestamp of the last END packet on RTP renegotiation. If the new time stamp is lower then the timestamp of the last DTMF END packet the asterisk drops all DTMF frames as out of order. This bug was caught using Cisco ip-phone SPA5XX and codec g722. On SIP session update the SPA50X resets stream and a new timestamp is twice smaller then the previous. ASTERISK-28162 #close Change-Id: Ic72b4497e74d801b27a635559c1cf29c16c95254 2019-01-02 11:44 +0000 [92298434bd] Bryan Boatright * app_voicemail: Fix Channel variable VM_MESSAGEFILE for "urgent" voicemail If a voicemail is marked "urgent" then the VM_MESSAGEFILE channel variable is not updated correctly since urgent messages are in a different directory. The fix is to update the channel variable when the path to the urgent message is created. ASTERISK-28225 Change-Id: I8efbace06e6122ea0793f7bdb073d4378e8274ca 2019-01-02 11:33 +0000 [2d9482695d] Joshua Colp * app_queue: Fix crash when using 'b' option on non-ringall queue. When using the 'b' option to Queue with a queue that was not configured for ring all a crash would occur as the wrong pointer would be used. ASTERISK-28218 Change-Id: If1390f64e321047dff24fd2410c95dde74904980 2018-12-19 13:02 +0000 [f196078705] Richard Mudgett * stasic.c: Fix printf format type mismatches with arguments. An int64_t is not likely the same size as a long. * Changed the int64_t values in the statistics structs to longs so casting is not necessary when generating the formatted CLI output. The offending members did not need to be int64_t anyway as they were only set by an int type variable which was already truncating bits. * Reordered the statistics structs to reduce potential padding bytes. Change-Id: Ic090a070e9dc4ca650ebdb9c01ed50a581289962 2018-12-26 12:30 +0000 [44a7faca21] Corey Farrell * stasis: Fix ABI between DEVMODE and non-DEVMODE. Create compatibility stubs for maximum ABI compatibility. ASTERISK-28212 #close Change-Id: I872c04842ab6b61e9dd6d37e4166bc619aa20626 2018-12-26 10:24 +0000 [ff2ed4eeee] George Joseph * Revert "stasis_cache: Stop caching stasis subscription change messages" This commit caused issues with polling when combined with the revert commit "Revert "app_voicemail: Remove need to subscribe to stasis" This reverts commit 17d6d9e1e7d0db04ebd8d2e0cd9e087ec5462e2f. ASTERISK-28222 Reported by: abelbeck Change-Id: Ib6a16cbe2c0b74c76c64264f525ab647959c1483 2018-12-24 11:42 +0000 [3efe5061d5] George Joseph * ast_coredumper: Refactor the pid determination process In order to get a dump of the running process, we need to find the pid of the main asterisk process. This can be tricky if there are also instances of "asterisk -r" running or if an alternate location for asterisk.conf was specified on the command line with the -C option that also specified an alternation location for the pid file. So now... 1. We find the asterisk executable with "which" or the --asterisk-bin command line option. 2. If there's only 1 process with an executable path that matches, we use that pid. If not... 3. We try " -rx 'core show settings'" and parse the output to find the pidfile, then read that for the pid. If that didn't work... 4. We get a list of all the pids matching and look in /proc//cmdline for a -C argument and retry the "core show settings" using the same -C option. We can't parse the output of "ps" to get the -C path because it may contain spaces. The contents of /proc//cmdline are delimited by NULLs. For BSDs we may have to mount /proc first. :( ASTERISK-28221 Reported by: Andrew Nagy Change-Id: I8aa1f3f912f949df2b5348908803c636bde1d57c 2018-12-19 12:39 +0000 [59717b5e85] Richard Mudgett * backtrace.c: Fix casting pointer to/from integral type. The backtrace library bfd.h include file does not get the sizes of pointers and ints right on some platforms. On my old test box the size of bfd_vma is 8 while the size of a pointer is 4. gcc on the box complains of the integer casting to/from pointers size mismatch. * uintptr_t to the rescue by doing an appropriate two stage cast. Change-Id: Icb2621583f50c8728de08a3c824d95fe53cc45d0 2018-12-18 10:33 +0000 [aebb822d1f] George Joseph * app_voicemail: Don't delete mailbox state unless mailbox is deleted The free_user function was automatically deleting the stasis mailbox state but this only makes sense when the mailbox is actually deleted, not just the structure freed. This was causing issues where leave_voicemail would publish the mwi message to stasis and delete the state before the message could be processed by res_pjsip_mwi. * Removed the delete of state from free_user(). * Created a new free_user_final() function that both frees the data structure and deletes the state. This function is only called during module load/unload where it's appropriate to delete the state. ASTERISK-28215 Change-Id: I305e8b3c930e9ac41d901e5dc8a58fd7904d98dd 2018-12-14 11:52 +0000 [970805180e] Sean Bright * res_rtp_asterisk: Remove some unused structure fields. All of the fields that were removed were no longer referenced except for 'lastrxts' and 'rxseqno' which were only ever written to. Change-Id: I5a5d31eb33e97663843698f58d0d97f22a76627c 2018-12-13 15:56 +0000 [f60afac587] Sean Bright * res_format_attr_h264.c: Make sure profile-level-id fmtp attribute is set The profile-iop octet (the 2nd) of profile-level-id can be zero according to RFC 6184 Section 8.1. So we ignore its value when deciding to include profile-level-id in the outgoing SDP. ASTERISK-27959 #close Reported by: David Kuehling Change-Id: Id28cd916a3d7748058fe9609b585d07d9e243f73 2018-12-11 14:49 +0000 [640aac768b] Sean Bright * bridge_builtin_features.c: Set auto(mix)mon variables on both channels This is how features behaved up through Asterisk 11, but was changed when the new bridging framework was implemented in Asterisk 12. Reported by rrittgarn in #asterisk. Change-Id: I72cf86223947a8118c75f46e2c603dbc11e3125b 2018-12-07 14:22 +0000 [2610379605] Alexei Gradinari * confbridge: announce to the marked users when they join an empty conference Currently the file sound_only_person is not played when a marked user (with announce_only_user=yes) joins an empty conference. This patch fixes it. ASTERISK-28201 #close Change-Id: I85b67687e6b220939c3af8091d83a70a7b174cf4 2018-11-30 05:40 +0000 [68ec7d93e8] Joshua C. Colp * stasis: Add statistics gathering in developer mode. This change adds statistics gathering to Stasis topics, subscriptions, and message types. These can be viewed using CLI commands and provide insight into how Stasis is used and how long certain operations take to execute. These are only available when Asterisk is compiled in developer mode and do not have any impact under normal operation. ASTERISK-28117 Change-Id: I94411b53767f89ee01714daaecf0c2f1666e863f 2018-12-11 08:54 +0000 [9febdba05b] Sean Bright * Use non-blocking socket() and pipe() wrappers Change-Id: I050ceffe5a133d5add2dab46687209813d58f597 2018-12-11 09:06 +0000 [16ae8330d2] Sean Bright * utils: Don't set or clear flags that don't need setting or clearing Change-Id: I0e7fb507ac09b15e45e1ff8501ecfca67afa5217 2018-12-11 06:55 +0000 [9c9519796b] Sean Bright * build: Update config.guess and config.sub Pulled from the authoritative respository at: https://git.savannah.gnu.org/cgit/config.git/tree/ Change-Id: I748708ce24d4d47ff1f395075d0b08d3da3355e0 2018-12-11 08:28 +0000 [df0b59564e] George Joseph * Revert "RTP: reset DTMF last seqno/timestamp on voice packet with marker bit" This reverts commit 331c906c4811df17612efa5c31e19df7186b1c81. Pending resolution of ASTERISK_28200 Change-Id: Ie7172707b603c1da3f200613bd4473335af75128 2018-12-06 11:23 +0000 [59cf552dd3] Sebastian Damm * res/res_ari: Add additional hangup reasons The ARI DELETE /channels command takes a "reason" parameter Previously, there were only five reasons implemented This patch adds more reasons to choose from for more complex setups ASTERISK-28198 #close Change-Id: I85996f1076c9946d65c778413f040a845a90fecc 2018-12-07 06:57 +0000 [8a18fb81c1] Sean Bright * utils: Wrap socket() and pipe() to reduce syscalls Some platforms provide an implementation of socket() and pipe2() that allow the caller to specify that the resulting file descriptors should be non-blocking. Using these allows us to potentially elide 3 calls into 1 by avoiding extraneous calls to fcntl() to set the O_NONBLOCK flag afterwards. In passing, change ast_alertpipe_init() to use pipe2() directly instead of the wrapper if it is available. Change-Id: I3ebe654fb549587537161506c6c950f4ab298bb0 2018-11-29 09:53 +0000 [79899db740] George Joseph * stasis: Allow filtering by formatter A subscriber can now indicate that it only wants messages that have formatters of a specific type. For instance, manager can indicate that it only wants messages that have a "to_ami" formatter. You can combine this with the existing filter for message type to get only messages with specific formatters or messages of specific types. ASTERISK-28186 Change-Id: Ifdb7a222a73b6b56c6bb9e4ee93dc8a394a5494c 2018-12-04 18:00 +0000 [6071ad77f5] Giuseppe Sucameli * chan_sip: Fix leak using contact ACL Free old peer's contactacl before overwrite it within build_peer. ASTERISK-28194 Change-Id: Ie580db6494e50cee0e2a44b38e568e34116ff54c 2018-12-05 15:28 +0000 [1657508ddd] David M. Lee * Removing registrar_expire from basic-pbx config The module has been removed, so it shouldn't be in the default config any more. Change-Id: Ie7e09f00f9c9a885574e29478250de4c2cefd9f1 2018-12-05 09:37 +0000 [a6c2662404] George Joseph * CI: Various updates to buildAsterisk.sh * Added ---no-configure, --no-menuselect, --no-make and --no-alembic options that prevent those actions from being performed. Useful for testing and re-running portions of the build after fixing earlier failures. * Added "set -e" to abort the script on command failure. Not sure why this wasn't there in the first place. * Fixed a few echos that were redirecting to stderr when they shouldn't have been. * Catch more alembic failures by actually trying to generate the SQL. Change-Id: I9f395fa4e9254be7299e7c1014f1a13db78faffb 2018-12-03 17:45 +0000 [12a30c71d8] Kevin Harwell * pjsip_add_use_callerid_contact: fixed alembic script Change-Id: I413f1583c797fb79651786cd8d0b003599f8ed10 2018-12-03 16:41 +0000 [27806fd04d] Sean Bright * core: Add some documentation to the malloc_trim code This adds documentation to handle_cli_malloc_trim() indicating how it can be useful when debugging OOM conditions. Change-Id: I1936185e78035bf123cd5e097b793a55eeebdc78 2018-12-03 14:01 +0000 [1f09c61804] Chris-Savinovich * core: Merge malloc_trim patch We've had multiple opportunities where Richard Mudgett's malloc_trim patch has been useful. Let's get it pushed up to gerrit and merged. Since malloc_trim is only available in libc, an entry is added to configure.ac to create a definition for HAVE_MALLOC_TRIM. Change-Id: Ia38308c550149d9d6eae4ca414a649957de9700c 2018-11-30 14:00 +0000 [60e548ffa5] Chris-Savinovich * test_websocket_client.c: Disable websocket_client_create_and_connect test. This test was occasionally failing, with: WARNING[5812]: http.c:1939 httpd_helper_thread: Failed to set TCP_NODELAY on HTTP connection: Bad file descriptor ERROR[5812]: iostream.c:91 ast_iostream_nonblock: Failed to get fcntl() flags for file descriptor: Bad file descriptor ERROR[5812]: iostream.c:569 ast_iostream_close: close() failed: Bad file descriptor Disabled for now by making the test explicit only. Change-Id: I778f6cbb6104c6b4e89737a2eaf1a9540888d351 2018-11-28 01:14 +0000 [5de36abd5a] Pirmin Walthert * pjproject_bundled: check whether UPDATE is supported on outgoing calls In ASTERISK-27095 an issue had been fixed because of which chan_pjsip was not trying to send UPDATE messages when connected_line_method was set to invite. However this only solved the issue for incoming INVITES. For outgoing INVITES (important when transferring calls) the options variable needs to be updated at a different place. ASTERISK-28182 #close Reported-by: nappsoft Change-Id: I76cc06da4ca76ddd6dce814a8b97cc66b98aaf29 2018-11-29 13:26 +0000 [a2a8a41db3] George Joseph * Revert "app_voicemail: Remove need to subscribe to stasis" This reverts commit 29115e23848cceee0e2763bc70e87cb311919cdd. That commit closed a long standing hole which allowed subscriptions to mailboxes that weren't configured in voicemail.conf. This caused an issue with FreePBX which depdended on that behavior. The commit is being reverted until FreePBX can handle the new behavior. ASTERISK-28151 Reported by: Ronald Raikes Change-Id: I57b7b85e75d7dd97c742b5c69d718a0f61260c15 2018-10-22 07:47 +0000 [aa004295f9] lvl * app_queue: Revert broken queue channel reference patch Revert commit 6409e7b11a2310196a9978b30a6b79e2760be592, and add NULL checks for all app_queue event handling code. Related issues: ASTERISK~25185, ASTERISK~27006, ASTERISK~25844 ASTERISK-28125 Change-Id: I37334ea184ebb56e54471496b82937d4927815a0 2018-11-26 16:18 +0000 [a5e77e9c37] George Joseph * test_cel: Plug a few ref leaks These are only a few of the leaks. The large number of macros and return paths in this file would make a weeks worth of work to plug them all. Change-Id: Ie2369fa944023d44767871c5c30974cb077ffb56 2018-11-26 06:09 +0000 [606304eb54] Corey Farrell * jansson: Upgrade to 2.12. This brings in jansson-2.12, removes all patches that were merged upstream. README is created in third-party/jansson/patches to explain how to add patches but also because the patches folder must exist for the build process to succeed. Change-Id: If0f2d541c50997690660c21fb7b03d625a5cdadd 2018-11-23 09:40 +0000 [331c906c48] Alexei Gradinari * RTP: need to reset DTMF last seqno/timestamp on voice packet with marker bit The marker bit set on the voice packet indicates the start of a new stream and a new time stamp. Need to reset the DTMF last sequence number and the timestamp of the last END packet. If the new time stamp is lower then the timestamp of the last DTMF END packet the asterisk drops all DTMF frames as out of order. This bug was caught using Cisco ip-phone SPA50X and codec g722. On SIP session update the SPA50X resets stream indicating it with market bit and a new timestamp is twice smaller then the previous. ASTERISK-28162 #close Change-Id: If9c5742158fa836ad549713a9814d46a5d2b1620 2018-11-19 14:10 +0000 [ed7a5664b6] Corey Farrell * astobj2: Eliminate usage of legacy ao2_container_alloc routine. Replace usage of ao2_container_alloc with ao2_container_alloc_hash or ao2_container_alloc_list. ao2_container_alloc is now restricted to modules only and is being removed from Asterisk 17. Change-Id: I0907d78bc66efc775672df37c8faad00f2f6c088 2018-11-14 05:02 +0000 [0d2b39065f] Corey Farrell * astobj2: Create function to copy weak proxied objects from container. Create ao2_container_dup_weakproxy_objs to perform a similar function to ao2_container_dup. This function expects the source container to have weakproxy objects, inserts the associated non-weak objects into the destination container. Orphaned weakproxy objects are ignored. Create test for this new function and for ao2_weakproxy_find. Change-Id: I898387f058057e08696fe9070f8cd94ef3a27482 2018-11-11 10:29 +0000 [1b6df87816] Sungtae Kim * res_pjsip: Patch for res_pjsip_* module load/reload crash The session_supplements for the pjsip makes crashes when the module load/unload. ASTERISK-28157 Change-Id: I5b82be3a75d702cf1933d8d1417f44aa10ad1029 2018-11-16 14:45 +0000 [72e532136c] Michael Walton (license 6502) * func_strings: HASHKEY - negative array index can cause corruption This patch makes it so only matching non-empty key names, and keys created by the HASH function are eligible for inclusion in the comma separated string. It also fixes a bug where it was possible to write to a negative index if the result buffer was empty. ASTERISK-28159 patches: ASTERISK-28159.diff submitted by Michael Walton (license 6502) Change-Id: I6e57fe7307dfd856271753aed5ba64c59b511487 2018-11-19 11:59 +0000 [729967e99c] George Joseph * CI: Get job timeouts from environment The job timeouts were hard coded in the jenkinsfiles which means changes had to go through gerrit. Now they are taken from the following environment variables (and their defaults) that can be set in Jenkins configuration... TIMEOUT_GATES = "60 MINUTES" TIMEOUT_DAILIES = "3 HOURS" TIMEOUT_REF_DEBUG = "24 HOURS" TIMEOUT_UNITTESTS = "30 MINUTES" Change-Id: I673a551c1780bf665a3bc160b245da574aa4bbab 2018-11-18 17:53 +0000 [d05c219aad] Joshua C. Colp * stasis: Remove stringfields and lock from change message. When a subscribe or unsubscribe occurs a message is published containing this information. This change makes it so that the message no longer uses stringfields or a lock, as both are not really needed for the message. Change-Id: I3f4831931d79f94fd979baf48048738df5dc1632 2018-11-19 07:00 +0000 [f9b9bdd0b0] Corey Farrell * app_queue: Cleanup queue_ref / queue_unref routines. This replaces the inline functions with macros. This removes the need to directly use __ao2_ref, opts instead for standard ao2_bump and ao2_cleanup macros. Change-Id: If4e04e9bab2e3c883188437cb9f487b3e498a21b 2018-11-08 09:53 +0000 [41eab5b3b8] George Joseph * backtrace: Refactor ast_bt_get_symbols so it doesn't crash We've been seeing crashes in libbfd when we attempt to generate a stack trace from multiple threads. It turns out that libbfd is NOT thread-safe. It can cache the bfd structure and give it to multiple threads without protecting itself. To get around this, we've added a global mutex around the bfd functions and also have refactored the use of those functions to be more efficient and to provide more information about inlined functions. Also added a few more tests to test_pbx.c. One just calls ast_assert() and the other calls ast_log_backtrace(). Neither are run by default. WARNING: This change necessitated changing the return value of ast_bt_get_symbols() from an array of strings to a VECTOR of strings. However, the use of this function outside Asterisk is not likely. ASTERISK-28140 Change-Id: I79d02862ddaa2423a0809caa4b3b85c128131621 2018-11-16 20:33 +0000 [cb83350230] Sungtae Kim * res/res_ari: Fix null endpoint handle The res_ari(POST /channels/create handler) deos not check the endpoint parameter length. And it causes core dump. Fixed it to check the parameter length. Also fixed memory leak. ASTERISK-28169 Change-Id: Ibf10a9eb8a2e3a9ee1e13fbe748b2ecf955c3993 2018-11-13 09:28 +0000 [e6005f1227] Alexei Gradinari * pjsip: New function PJSIP_PARSE_URI to parse URI and return part of URI New dialplan function PJSIP_PARSE_URI added to parse an URI and return a specified part of the URI. This is useful when need to get part of the URI instead of cutting it using a CUT function. For example to get 'user' part of Remote URI ${PJSIP_PARSE_URI(${CHANNEL(pjsip,remote_uri)},user)} ASTERISK-28144 #close Change-Id: I5d828fb87f6803b6c1152bb7b44835f027bb9d5a 2018-09-23 15:50 +0000 [8d436a95e7] Joshua Colp * stasis: Add internal filtering of messages. This change adds the ability for subscriptions to indicate which message types they are interested in accepting. By doing so the filtering is done before being dispatched to the subscriber, reducing the amount of work that has to be done. This is optional and if a subscriber does not add message types they wish to accept and set the subscription to selective filtering the previous behavior is preserved and they receive all messages. There is also the ability to explicitly force the reception of all messages for cases such as AMI or ARI where a large number of messages are expected that are then generically converted into a different format. ASTERISK-28103 Change-Id: I99bee23895baa0a117985d51683f7963b77aa190 2018-11-18 10:38 +0000 [dd0a3c0bba] George Joseph * CI: Add tmpfs to all jenkinsfiles Change-Id: Ida29d70d48d5f39aabf0b25c66b51f79324a8cba 2018-11-17 15:40 +0000 [77e9c877b5] George Joseph * CI: Mount a tmpfs on /tmp for testsuite docker containers Change-Id: I0566d81b0852f22066cd76d58eae5f1fda5602aa (cherry picked from commit 73efe86436427e5f43c532e5d42505ab4ec104d9) 2018-11-17 13:07 +0000 [0552bc2a94] George Joseph * CI: Pass work directory to runTestsuite The testsuite can now use a user-specified work directory for all it's temp files. This allows the docker containers to use a tmpfs backed directory for the temp files instead of it's own write-layer image. * runTestsuite.sh now accepts a --work-dir command line argument that gets exported as AST_WORK_DIR before running the testsuite. * gates.jenkinsfile now specifies --work-dir to be /astroot. Since the Asterisk CI docker hosts now mount /srv/jenkins/workspace on a tmpfs, asterisk should be compiled and the testsuite run all in memory. Change-Id: If5ee905a15821296c355bb84cda38950ad8edc45 (cherry picked from commit a335f4c9adb0a00211345634f61917bdf5b412c2) 2018-11-15 11:41 +0000 [7ba8f32632] George Joseph * CI: Allow runUnittests to use 'expect' to run the tests There seems to be a race condition between starting the asterisk daemon and attempting to use 'asterisk -r' that can cause the control socket file to not be created. Since all of the Jenkins slaves have 'expect' installed, the runUnittests script can use it to start asterisk in the forground and issue the commands interactively. This is much more reliable and it can also make startup errors more visible since they'll be in the Jenkins console output. If 'expect' isn't installed, the original daemon/asterisk -r process is used. Also added a "core show settings" before running the tests and added "notice,warning,error" to the console log. Change-Id: Idd656085f854afede813ac241b9e312b31358160 2018-11-12 12:23 +0000 [699dfa9401] Corey Farrell * taskprocessor: Prevent race creating new taskprocessor. Task processors are retrieved using a 'get or create' pattern. The singleton container was unlocked between the get and create steps so it's possible that two threads could create task processors with the same name at the same time. Change-Id: Id64fae94a6a1e940ddf38fde622dcd4391635382 2018-11-16 06:20 +0000 [3bdf6ac918] Corey Farrell * pjproject-bundled: Use AST_DEVMODE for conditional compilation. We previously allowed resample and g711 codecs to be built when TEST_FRAMEWORK was enabled. This could cause errors if the testsuite was run without this option enabled. Switch the build system to allow those codecs to be built when --enable-dev-mode is used. This removes a chance for strange testsuite errors from use of an inadequate pjsua binary. Change-Id: Iee8a3613cdb711fa7e7d217c5a775a575907ae22 2018-11-15 14:47 +0000 [2a76489eba] Corey Farrell * res_pjsip_caller_id: Use static pj_str_t for fromto header names. PJSIP assumes that these header names are not allocated, does not clone the name strings when reusing headers. Block unload of res_pjsip_caller_id until shutdown to ensure static memory stays valid. It was previously unsafe to unload while any sessions are active. Change-Id: I190854dea943d6e441cf03733f8a0da661aea27f 2018-10-24 07:38 +0000 [7b2282c890] Torrey Searle * res/res_pjsip_nat: Fix logic for REINVITES The presence of Record-Route in re-invites is optional, thus it is important to make sure the dialog doesn't have a routset before rewriting the contact header. ASTERISK-28129 #close Change-Id: Ic8ceb54ccfc93f7e315e476c514a2c777f2da7dc 2018-11-15 05:33 +0000 [a36cd6960c] Corey Farrell * core: Fix handling of restart from remote console. We cannot use need_el_end and SIGURG when restarting. Instead we need to run el_end within the SIGHUP restartnow handler. ASTERISK-28158 Change-Id: Ia852276363c81bdcf1aa29eb4558c5c2fa1218a0 2018-10-25 10:25 +0000 [009d67cd28] Jan Hoffmann (license 6986) * AST-2018-010: Fix length of buffer needed for SRV and NAPTR results When dn_expand was being called on SRV and NAPTR results, the return value was being used to calculate the size of the buffer needed to store the host names. Since dn_expand returns the length of the COMPRESSED name the buffer could be too short to hold the EXPANDED name. The expanded name is NULL terminated so using strlen() is the correct way to determine the length actually needed for the buffer. ASTERISK-28127 Reported by: Jan Hoffmann patches: patch.diff submitted by janhoffmann (license 6986) Change-Id: I4d35d6c431c6c6836cb61d37b1378cc47f0b414d 2018-11-13 10:51 +0000 [89d97da8a4] Corey Farrell * test_res_pjsip_scheduler: Fix possible write after free in scheduler_policy. It's possible for a 4th task to be spawned before we cancel. This results in a write to the already freed test_data1. Wait long enough to verify success of the cancelation before freeing test_data1. Change-Id: I057e2fcbe97f8a175e50890be89c28c20490a20f 2018-10-17 08:48 +0000 [df703c1853] Robert Cripps * bridge_native_rtp.c: Fail native bridge if no framing match. ASTERISK-28110 #close Change-Id: Ic64b8fc6a140a93fbdb2f97550a40d0ff334e607 2018-11-11 18:32 +0000 [05c79fdf06] Corey Farrell * taskprocessor: Do not use separate allocation for stats or name. Merge storage for the stats object and name string into the main allocation for struct ast_taskprocessor. Change-Id: I74fe9a7f357f0e6d63152f163cf5eef6428218e1 2018-11-11 07:34 +0000 [3cde7e30ba] Corey Farrell * core: Ensure that el_end is always run when needed. * Ignore console=yes configuration option in remote console processes. * Use new flag to tell consolethread to run el_end and exit when needed. ASTERISK-28158 Change-Id: I9e23b31d4211417ddc88c6bbfd83ea4c9f3e5438 2018-11-08 15:37 +0000 [1c008c6de5] Corey Farrell * jansson-bundled: Patch for off-nominal crash. pack_string crashed on non-NULL strings returned when s->has_error was true if the string was the result of 's' format without '#', '%' or '+'. Change-Id: Ic125df691d81ba2cbc413e37bdae657b304d20d0 2018-11-02 06:38 +0000 [07a59b783e] Corey Farrell * pbx_config: Only the first [globals] section is seen. If multiple [globals] sections are used (for example via separate included files), only the first one is processed. This can result in lost global variables when using a modular extensions.conf. ASTERISK-28146 #close Change-Id: Iaac810c0a7c4d9b1bf8989fcc041cdb910ef08a0 2018-11-06 16:44 +0000 [9c9bc5acca] Chris-Savinovich * res_pjsip: Send a 503 response when overload state if reliable transport. When Asterisk's taskprocessors get overloaded we need to reduce the work load. res_pjsip currently ignores new SIP requests and relies on SIP retransmissions in the hope that the overload condition will clear soon enough to handle the retransmitted SIP request. This change adds the following code after ast_taskprocessor_alert_get() has returned TRUE: 1- identifies transport type. If non-udp then send a 503 response 2- if transport type is udp/udp6 then ignore, as before. Change-Id: I1c230b40d43a254ea0f226b7acf9ee480a5d3836 2018-11-06 16:35 +0000 [03efafbd4d] Kevin Harwell * res_pjsip: formatting error in documentation The use of a '|' in the "global/debug" synopsis documentation caused the generated html table on the wiki to add an extra column that included the text after the pipe. This patch replaces the pipe with a comma. ASTERISK-28150 Change-Id: I3d79a6ca6d733d9cb290e779438114884b98a719 2018-11-05 12:44 +0000 [3e3f3bfb07] Alexei Gradinari * res_pjsip.c: Make taskprocessor scheduling algorithm pick the shortest queue The current round-robin method does not take the current taskprocessor load into consideration when distributing requests. Using the least-size method the request goes to the taskprocessor that is servicing the least number of active tasks at the current time. Longer running tasks with the round-robin method can delay processing tasks. * Change the algorithm from round-robin to least-size for picking the PJSIP taskprocessor from the default serializer pool. Change-Id: I7b8d8cc2c2490494f579374b6af0a4868e3a37cd 2018-11-05 08:30 +0000 [27897a850d] Joshua Colp * stasis: Clarify lifetime of topics. As mentioned in the comment I've added in the code there is no ability to unsubscribe all subscribers from a topic and explicitly destroy it. This is not currently a problem as we have two types of topics: Long lived topics which exist for the lifetime of the system. Ephemeral topics which feed a long lived topic. In the case of the ephemeral topics there is no subscriber which does not have its lifetime managed by the same entity that has created the topic. This ensures that when the topic is being unreferenced the subscribers are also unsubscribed and destroyed, allowing the topic to ultimately be destroyed as well. Change-Id: Ic5e244da7b16b1895ba1fc5ece481ebba5809c9a 2018-10-09 07:44 +0000 [7f6ac5dc2f] Jasper Hafkenscheid * chan_sip: Attempt ast_do_pickup in handle_invite_replaces When a call pickup is performed using and invite with replaces header the ast_do_pickup method is attempted and a PICKUP stasis message is sent. ASTERISK-28081 #close Reported-by: Luit van Drongelen Change-Id: Ieb1442027a3ce6ae55faca47bc095e53972f947a 2018-10-26 10:53 +0000 [a6d1723727] Pascal Cadotte Michaud * contrib/sip_to_pjsip: add a --quiet option to avoid prints Using the --quiet or -q option in conjonction with /dev/stdout as the output file allow the output to be used as a valid configuration. Given a script that generates a valid sip.conf I can pipe the output of that script into `sip_to_pjsip.py -q /dev/stdin /dev/stdout`. This allow me to use that piped command in my pjsip.conf using the `exec` command. ASTERISK-28136 Change-Id: I7b0e2e90e2549f3f8e01dc96701f111b5874c88d 2018-10-31 07:53 +0000 [9c5e75acb0] Joshua Colp * res_pjsip: Add XML documentation for "use_callerid_contact" ASTERISK-28087 Change-Id: I69d48813ec514f5ef06c6de994cba52630e0a3b4 2018-10-30 10:52 +0000 [719daf3299] Richard Mudgett * alembic: Fix use_callerid_contact option add script. ASTERISK-28087 Change-Id: I046d018015427d0916fab571b5a4f5367476f729 2018-10-12 16:46 +0000 [5cbe77cc46] Alexei Gradinari * pjsip: new endpoint's options to control Connected Line updates This patch adds new options 'trust_connected_line' and 'send_connected_line' to the endpoint. The option 'trust_connected_line' is to control if connected line updates are accepted from this endpoint. The option 'send_connected_line' is to control if connected line updates can be sent to this endpoint. The default value is 'yes' for both options. Change-Id: I16af967815efd904597ec2f033337e4333d097cd 2018-10-26 16:18 +0000 [fbee505611] Alexei Gradinari * res_pjsip_notify: improve realtime performance on CLI completion on the endpoint The module 'res_pjsip_notify' inefficiently makes a lot of DB requests on CLI completion on the endpoint. For example if there are 10k endpoints the module makes 10k requests of these 10k records. Even if a part of the endpoint entered the module makes the same 10k requests and then filtered them by itself. This patch gathers endpoints container by prefix and adds all gathered endpoints to completion at once. ASTERISK-28137 #close Change-Id: Ic20024912cc77bf4d3e476c4cd853293c52b254b 2018-10-27 09:59 +0000 [6c2f9b730e] Pascal Cadotte Michaud * contrib/sip_to_pjsip: handle setvar in conversion Given a sip.conf with the following content: setvar FOO=1 setvar BAR=42 I want my generated pjsip.conf to containt the following set_vars set_var FOO=1 set_var BAR=42 in the matching endpoint section. Change-Id: I6c822401fda4133c3b44bf31e655b4eb939d4d26 2018-10-02 07:31 +0000 [3ba66b8a9d] Torrey Searle * res_pjsip_session: add new flag use_callerid_contact Add a new global flag to res_pjsip to allow the callerid to be used as the username in the contact header. This allows chan_pjsip to have the same behavour as chan_sip ASTERISK-28087 #close Change-Id: I9a720e058323f6862a91c62f8a8c1a4b5c087b95 2018-10-17 19:34 +0000 [fbb577577c] Richard Mudgett * logger.c: Fix default console logging when no logger.conf available. Default logging was not setup correctly when there was no logger.conf. This resulted in many expected log messages not actually getting out to the console. Change-Id: I542e61c03b2f630ff5327f9de5641d776c6fa70c 2018-09-26 15:05 +0000 [190b3d7412] Alexei Gradinari * app_dial/queue/followme: 'I' options to block initial updates in both directions The 'I' option currently blocks initial CONNECTEDLINE or REDIRECTING updates from the called parties to the caller. This patch also blocks updates in the other direction before call is answered. ASTERISK-27980 Change-Id: I6ce9e151a2220ce9e95aa66666933cfb9e2a4a01 2018-10-22 14:31 +0000 [11427a9665] Richard Mudgett * modules.conf.sample: Update preload usage documentation. Change-Id: Id449d4435c38148b56ac4cfd61ae4d90ac66bb90 2018-10-16 07:02 +0000 [fec66b8f01] George Joseph * bridge_softmix: Add SDP "label" attribute to streams Adding the "label" attribute used for participant info correlation was previously done in app_confbridge but it wasn't working correctly because it didn't have knowledge about which video streams belonged to which channel. Only bridge_softmix has that data so now it's set when the bridge topology is changed. ASTERISK-28107 Change-Id: Ieddeca5799d710cad083af3fcc3e677fa2a2a499 2018-10-16 14:06 +0000 [dee1165d31] Corey Farrell * astobj2: Eliminate usage of legacy container allocation macros. These macros have been documented as legacy for a long time but are still used in new code because they exist. Remove all references to: * ao2_container_alloc_options * ao2_t_container_alloc_options * ao2_t_container_alloc These macro's are still available for use but only in modules. Only ao2_container_alloc remains due to it's use in over 100 places. Change-Id: I1a26258b5bf3deb081aaeed11a0baa175c933c7a 2018-09-28 13:31 +0000 [90887af808] Corey Farrell * lock: Replace __ast_mutex_logger with private log_mutex_error. __ast_mutex_logger used the variable `canlog` without accepting it as a argument. Replace with internal macro `log_mutex_error` which takes canlog as the first arguement. This will prevent confusion when working with lock.c code, many of the function declare the canlog variable and in some cases it previously appeared to be unused. Change-Id: I83b372cb0654c5c18eadc512f65a57fa6c2e9853 2018-10-18 14:36 +0000 [00284352b3] Richard Mudgett * app_dial/app_queue: Update application option documentation * Update the post-answer documentation and example. The Dial example was incorrect and misleading for the post-answer subroutine useage. * Fix note and warning paragraphs in option descriptions. They don't show up in the wiki. Change-Id: I81019a1fd75d5b9151f76b52c38e2a90da682d14 2018-10-18 14:56 +0000 [495a1e7e5c] Sean Bright * samples: PARKINGSLOT -> PARKING_SPACE in parking sample config PARKINGSLOT was deprecated in Asterisk 12 but the sample config was not updated to reflect that. Change-Id: I3e087c19d9ee587094fa5304102d8084a79c2b3c 2018-10-18 12:32 +0000 [2384d6eb87] Richard Mudgett * Fix 'statement' typo throughout code. Most were in comments. A couple were in warning messages. Pointed out by Jonathan H on the Asterisk users mailing list. Change-Id: I6286939dff5d0a27a2758140570106f1cb351855 2018-10-17 16:08 +0000 [718ccd51a3] Richard Mudgett * res_rtp_asterisk.c: Add conditional module dependency to res_pjproject * The dependency ensures that res_pjproject cannot be manually unloaded before res_rtp_asterisk. * The dependency allows startup loading errors to report that res_rtp_asterisk depends upon res_pjproject. Change-Id: Icf5e7581f4ddd6189929f6174c74dd951f887377 2018-10-17 14:34 +0000 [7687630074] Richard Mudgett * modules: Add missing run time module support levels. Change-Id: I29b9dbfa4bbfc49f21eba356858e38b1d3041824 2018-10-14 07:58 +0000 [abee4fd072] Corey Farrell * taskprocessor: Warn on unused result from pushing task. Add attribute_warn_unused_result to ast_taskprocessor_push, ast_taskprocessor_push_local and ast_threadpool_push. This will help ensure we perform the necessary cleanup upon failure. Change-Id: I7e4079bd7b21cfe52fb431ea79e41314520c3f6d 2018-10-16 12:28 +0000 [3fe9c41342] Richard Mudgett * bundled pjproject: Remove timer cleanup usage patch. This patch is not in the upstream pjproject and does unsafe things with the timer->_timer_id and timer->_grp_lock values in pj_timer_entry_reset() outside of the timer heap lock. pj_timer_entry_reset() is also called for timers that are not about to be rescheduled in a few places. Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1 2018-10-10 04:37 +0000 [35f44be460] Corey Farrell * refdebug: Create refstats.py script. This allows us to process AO2 statistics for total objects, memory usage, memory overhead and lock usage. * Install refstats.py and reflocks.py into the Asterisk scripts folder. * Enable support for reflocks.py without DEBUG_THREADS. Steal a bit from the ao2 magic to flag when an object lock is used. Remove 'lockobj' from reflocks.py since we can now record 'used' or 'unused' for those objects. Add comments to explain thread safety of the 'struct __priv_data' bitfields. Change-Id: I84e9d679cc86d772cc97c888d9d856a17e0d3a4a 2018-10-12 12:14 +0000 [0f53930c05] Alexei Gradinari * res_pjsip: set callerid_tag to empty string This patch sets the callerid_tag to empty string by default. If the callerid_tag is set to NULL then the tag does not become part of a connected line update. For example: Alice's tag is "Alice". Bob's tag is empty. Charlie's tag is "Charlie". Alice calls Bob and then does attended transfer to Charlie. When Alice hangs up the CONNECTEDLINE(tag) is "Alice" on the interception routine on the Charlie's channel, but should be empty. Ths patch also fix memory leaks if there are more then one options "callerid", "callerid_tag", "voicemail_extension" and "contact_user" in the pjsip.conf endpoint definition. Change-Id: I86ba455c4677ca8d516d9a04ce7fb4d24dd576e4 2018-10-11 06:24 +0000 [08e5bbfec0] Corey Farrell * threadpool: Eliminate pointless AO2 usage. thread_worker_pair, set_size_data and task_pushed_data structures are allocated with AO2 objects, passed to a taskprocessor, then released. They never have multiple owners or use locking so AO2 only adds overhead. Change-Id: I2204d2615d9d952670fcb48e0a9c0dd1a6ba5036 2018-10-12 12:21 +0000 [a5023d4f75] Corey Farrell * main/astfd: Fix GCC8 format-truncation warning. The field used to store call arguments was not large enough to hold the arguments string that can be constructed for 'open'. Expand it to prevent this warning/error. Change-Id: I514927f256481bc84df10a51b19d5b5fb1bc387e 2018-10-10 06:38 +0000 [5ea517f80e] Corey Farrell * chan_sip: Tell module loader that chan_sip is extended support. Change-Id: I33508c134b1be888b8884f5dcfee19087634e415 2018-10-09 16:18 +0000 [c001974f4f] Richard Mudgett * res_statsd.c: Fix returned reload status. The return status when there was no change in statsd.conf was incorrect. This resulted in the wrong status message on the CLI when reloading the module. * Fixed cleanup on initial load if initializing statsd failed. Change-Id: Id24fae75f1a7ff584a444a5680e867d989792481 2018-10-03 16:51 +0000 [e0496fe062] Emmanuel BUU * core/frame: generate correct T.140 payload in ast_sendtext_data() ast_sendtext_data() would create an incorrect T.140 text frame which length include the null terminator byte. It causes ultimately RTP packets to be send with this trailing 0. The proposed fix just set the correct length to the text frame ASTERISK-28089 Reported by: Emmanuel BUU Tested by: Emmanuel BUU Change-Id: I7ab1b9ed1e21683b2b667ea0a59d9aba3c77dd96 2018-10-04 18:33 +0000 [c6ee3cf639] Corey Farrell * loader: Flag module as declined in all cases where it fails to load. This has no effect on startup since AST_MODULE_LOAD_FAILURE aborts startup, but it's possible for this code to be returned on manual load of a module after startup. It is an error for a module to not have a load callback but this is not a fatal system error. In this case flag the module as declined, return AST_MODULE_LOAD_FAILURE only if a required module is broken. Expand doxygen documentation for AST_MODULE_LOAD_*. Change-Id: I3c030bb917f6e5a0dfd9d91491a4661b348cabf8 2018-10-04 13:13 +0000 [77f151d927] Richard Mudgett * func_periodic_hook.c: Cleanup module resources on failure. * Make load_module() cleanup if it failed to setup the module. * Make unload_module() always return 0. It is silly to fail unloading if the hook function we try to unregister was not even registered. Change-Id: I280fc6e8ba2a7ee2588ca01d870eebaf74b4ffe6 2018-10-04 11:49 +0000 [bc335ceda8] Richard Mudgett * codec_speex.c: Cleanup module loading to DECLINE and not FAILURE. If codec_speex fails to register a translator it would cause Asterisk to exit instead of continue as a DECLINED module. * Make unload_module() always return 0. It is silly to fail unloading if any translators we try to unregister were not even registered. Change-Id: Ia262591f68333dad17673ba7104d11c88096f51a 2018-10-04 13:03 +0000 [6fd21a6af6] George Joseph * CI: Fix missing () in gates.jenkinsfile Change-Id: I2f252e0f8c7f1a6328438fbd2be5d6574b7dfa5b 2018-10-04 10:13 +0000 [1598c7a306] George Joseph * CI: Add timestamps and timeouts to jenkinsfiles Change-Id: Ide83574dc957bc1df28e30a69079140050dfc35f 2018-10-03 17:02 +0000 [b2f96fdcfe] Sean Bright * ast_coredumper: Remove .gdbinit file on exit Change-Id: I1297de78628773ca368e687c6f148bf74857cae9 2018-10-03 09:33 +0000 [d0a1237c19] Sean Bright * CI: Look up configured kernel.core_pattern sysctl Change-Id: I8246a0147df8d821fbbcabc1db1887104b8bedc4 2018-10-03 15:51 +0000 [48bb4543d9] Corey Farrell * jenkins: Fix cleanup command redirection. Fix redirection to /dev/null of cleanup commands. The '2' was being interpreted as part of the command instead of part of the redirect. Change-Id: I2e3a591b165e0288c4b82b9ef475fdfd5392a90a 2018-10-03 15:29 +0000 [d027d193b8] George Joseph * ast_coredumper: Don't use "declare -n" Change-Id: I7ddfed4cd6549a0cd458e4d5cf9ac95d784de6cb 2018-10-02 16:15 +0000 [7eda6263c2] Richard Mudgett * res_smdi.c: Fix module ref counting and inverted test. I think this module is so screwed up that it doesn't work anymore. Even with these attempts to fix things it still won't gracefully shut down. The module refs will not go to zero to allow unloading the module. * Fix module ref counting dealing with the SMDI interface object. There were several off-nominal paths that unbalanced the module ref count. Also the destructor freed the ao2 object itself which is bad. Made the smdi_read thread not hold its own ref to the SMDI interface object so when all refs go away the destructor will stop the listener thread. * Fixed the smdi_load() return code of 1 concerning the number of listeners. The test was inverted. Change-Id: Ic288db51b58e395d6a2fc3847f77176c16988784 2018-10-02 16:23 +0000 [5b72bb0278] Richard Mudgett * res_smdi.c: Made use defaults if the smdi.conf file does not exist. This module is an optional dependency of a couple of other modules. If it declines to load, it then forces other modules that can optionally use this module to also decline. * Made use the default configuration if the config file does not exist and simplified some of the logic. Change-Id: Ib93191f1fe28c0dd9ebe3d84c7762b32f83c4eb9 2018-10-02 17:15 +0000 [fa9cd68589] Corey Farrell * astobj2: Comment on OBJ_NOLOCK in ao2_container_clone. The test for OBJ_NOLOCK looks wrong but it isn't. Add comments to prevent confusion. Change-Id: I9662b82eb39e7627a1f1944fd18f967a2b987344 2018-10-03 09:05 +0000 [8b3b504b79] Sean Bright * CI: Use brace expansion instead of calling out to seq Also make the shebang in publishAsteriskDocs.sh the first line. Change-Id: I3fdd6f22e652e4fb5b5fe85df46fa34eb6d0cf08 2018-10-03 08:59 +0000 [5f7350d68b] Sean Bright * CI: Use bindport instead of port in test http.conf Change-Id: Ife9a6879da63a56e5b8348a2024eeed4e7b1615b 2018-10-03 07:56 +0000 [2b4752911f] Sean Bright * http.c: Reload TLS even if http.conf hasn't changed There is currently no way to indicate to Asterisk that TLS certificates and/or keys have been updated other than by modifying http.conf or restarting Asterisk. There is already code in main/tcptls.c that determines if a reload is actually necessary based on the hashes of the certicate and dependent files, so this change merely gives us a way to request a reload without explicitly modifying http.conf. Change-Id: Ie795420dcc7eb3d91336820688a29adbcc321276 2018-10-01 22:12 +0000 [3b2310332d] Corey Farrell * core: Disable astobj2 locking for some common objects. * ACO options * Indications * Module loader ref_debug object * Media index info and variants * xmldoc items These allocation locations were identified using reflocks.py on the master branch. Change-Id: Ie999b9941760be3d1946cdb6e30cb85fd97504d8 2018-10-02 13:29 +0000 [c2e6efa63d] Richard Mudgett * res_statsd.c: Made use defaults if the statsd.conf file does not exist. This module is an optional dependency of many modules. If it declines to load it then forces other modules that can optionally use this module to also decline. * Made use default configuration if there is a config error or the config file does not exist. Change-Id: If1068a582ec54ab7fb437265cb5370a97a825737 2018-09-13 13:03 +0000 [326574d4fc] Corey Farrell * Resolve warning about duplicate 'dialplan' CLI. Change-Id: I029db1b4a32ccfb38374d6fe944dc430866f4b30 2018-10-02 01:33 +0000 [65f06a4505] Corey Farrell * loader: Fix result of module reload error. When a module reload fails we never set AST_MODULE_RELOAD_ERROR. This caused reload failures to incorrectly report 'No module found'. Change-Id: I5f3953e0f7d135e53ec797f24c97ee3f73f232e7 2018-09-28 10:13 +0000 [f066dbc353] Corey Farrell * loader: Improve error handling. * Display list of unavailable dependencies when they cause another module to fail loading. * When a module declines to load find all modules which depend on it so they can be declined and listed together. * Prevent retry of declined modules during startup. * When a module fails to dlopen try loading it with RTLD_LAZY so we can attempt to display the list of missing dependencies. These changes are meant to reduce logger spam that is caused when a module has many dependencies and declines to load. This also fixes some error paths which failed to recognize required modules. Module load/start errors are delayed until the end of loader startup. Change-Id: I046052c71331c556c09d39f47a3b92975f3e1758 2018-09-25 16:19 +0000 [406c5bef0a] Emmanuel BUU * core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames If a channel creates an AST_TEXT_FRAME with datalen == 0, the ast_frdup() and ast_frisolate() functions could create a clone frame with an invalid data.ptr which would cause a crash. The proposed fix is to make sure that for such empty text frames, ast_frdup() and ast_frisolate() return cloned text frames with a valid data.ptr. ASTERISK-28076 Reported by: Emmanuel BUU Tested by: Emmanuel BUU Change-Id: Ib882dd028598f13c4c233edbfdd7e54ad44a68e9 2018-09-30 23:11 +0000 [693e00eee6] Corey Farrell * astobj2: Record lock usage to refs log when DEBUG_THREADS is enabled. When DEBUG_THREADS is enabled we can know if the astobj2 mutex / rwlock was ever used, so it can be recorded in the REF_DEBUG destructor entry. Create contrib/scripts/reflocks.py to process locking used by allocator. This can be used to identify places where AO2_ALLOC_OPT_LOCK_NOLOCK should be used to reduce memory usage. Change-Id: I2e3cd23336a97df2692b545f548fd79b14b53bf4 2018-10-01 12:11 +0000 [5a9230eacb] Corey Farrell * app_page: Add dependency against app_confbridge. Change-Id: I1946509f518961d23fb21229d91676ee3e441921 2018-09-28 13:55 +0000 [a2554d5e5a] Richard Mudgett * app_queue.c: Fix json ref leak Declining the queue_member_status_type stasis message in stasis.conf causes these messages to leak json objects. * Add missing ast_json_unref() if the type is NULL in queue_publish_member_blob(). ASTERISK-28084 Change-Id: I691ecf49bd1f7d9c29182e1eee8c4bb7103be9fc 2018-10-01 03:07 +0000 [266ed3d68b] Corey Farrell * Append CHANGES/UPGRADE.txt for module loader changes. Change-Id: Ib8db4e14187f5c11ecbff532df17d30c5d36fa3e 2018-09-25 17:33 +0000 [ab90479642] Alexei Gradinari * res_pjsip: improve realtime performance on CLI 'pjsip show contacts' CLI command 'pjsip show contacts' inefficiently make a lot of DB requests. For example if there are 10k aors then asterisk requests these 10k records of aor and then does 10k requests of contact - one request per aor. Even if use 'like ' the asterisk requests all aor's and contact's records and then filters them by itself. This patch gathers contact's container by - retrieving all dynamic contacts by regex (filtered by reg_server) - retrieving all aors with permanent contacts - finally filters container by regex ASTERISK-28077 #close Change-Id: Id0ad65d14952a02fb213273a90f3f680a8149618 2018-09-28 14:45 +0000 [3337fe85c5] Corey Farrell * jansson-bundled: Add patches to improve json_pack error reporting. Change-Id: I045e420d5e73e60639079246e810da6ae21ae22b 2018-09-27 19:32 +0000 [b3b95c8d36] Corey Farrell * lock: Improve performance of DEBUG_THREADS. Add a volatile flag to lock tracking structures so we only need to use the global lock when first initializing tracking. Additionally add support for DEBUG_THREADS_LOOSE_ABI. This is used by astobj2.c to eliminate storage for tracking fields when DEBUG_THREADS is not defined. Change-Id: Iabd650908901843e9fff47ef1c539f0e1b8cb13b 2018-09-27 13:19 +0000 [b4ab26e72f] George Joseph * app_confbridge: Use bridge join hook to send join and leave events The first attempt at publishing confbridge events to participants involved publishing them at the same time stasis events were created. This caused issues with bridge and channel locks. The second attempt involved publishing them when the stasis events were received by the code that published the confbridge AMI events. This caused timing issues because, depending on resources available, the event could be received before channels actually joined the bridge and would therefore fail to send messages to the participant. This attempt reverts to the original mechanism with one exception. The join and leave events are published via bridge join and leave hooks. This guarantees the states of the channels and bridge and provides deterministic timing for event publishing. Change-Id: I2660074f8a30a5224cb953d5e047ee84484a9036 2018-09-27 04:51 +0000 [33455f8d6f] Corey Farrell * astobj2: Reduce memory overhead. Reduce options to 2-bit field, magic to 30 bit field. Move ref_counter next to options and explicitly use int32_t so the fields will pack. This reduces memory overhead for every ao2 object by 8 bytes on x86_64. Change-Id: Idc1baabb35ec3b3d8de463c4fa3011eaf7fcafb5 2018-09-27 15:01 +0000 [d1698b4e0b] Sean Bright * config.c: Cleanup AST_INCLUDE_GLOB * In main/config.c, AST_INCLUDE_GLOB is fixed to '1' making the #ifdefs pointless. * In utils/extconf.c, AST_INCLUDE_GLOB is never defined so there is a lot of dead code. Change-Id: I1bad1a46d7466ddf90d52cc724e997195495226c 2018-09-27 05:33 +0000 [0fe08c5e79] Corey Farrell * astobj2: Fix shutdown order. When REF_DEBUG and AO2_DEBUG are both enabled we closed the refs log before we shutdown astobj2_container. This caused the AO2_DEBUG container registration container to be reported as a leak. Change-Id: If9111c4c21c68064b22c546d5d7a41fac430430e 2018-09-05 21:14 +0000 [958727cece] Cao Minh Hiep * app_queue: Fix Attended transfer hangup with removing pending member. This issue related to setting of holdtime, announcements, member delays. It works well if we set the member delays to "0" and no announcements and no holdtime.This issue will happen if we set member delays to "1", "2"... or announcements or holdtime and hangs up the call during processing it. And here is the reason: (At the step of answering a phone.) It takes care any holdtime, announcements, member delays, or other options after a call has been answered if it exists. Normally, After the call has been aswered, and we wait for the processing one of the cases of the member delays or hold time or announcements finished, "if (ast_check_hangup(peer))" will be not executed, then queue will be updated at update_queue(). Here, pending member will be removed. However, after the call has been aswered, if we hangs up the call during one of the cases of the member delays or hold time or announcements, "if (ast_check_hangup(peer))" will be executed. outgoing = NULL and at hangupcalls, pending members will not be removed. * This fixed patch will remove the pending member from container before hanging up the call with outgoing is NULL. ASTERISK-27920 Reported by: Cao Minh Hiep Tested by: Cao Minh Hiep Change-Id: Ib780fbf48ace9d2d8eaa1270b9d530a4fc14c855 2018-06-26 09:17 +0000 [1f68614f3c] Moritz Fain * res_stasis: Fix stale data in ARI bridges Fixed an issue that resulted in "Allocation failed" each time an ARI request was made to start playing MOH on a bridge. In bridge_moh_create() we were attaching the after bridge callbacks to chan which is the ;1 channel of the unreal channel pair. We should have attached them to the ;2 channel which is pushed into the bridge by ast_unreal_channel_push_to_bridge(). The callbacks are called when the specific channel leaves the bridging system. Since the ;1 channel is never put into a bridge the callbacks never get called. The callbacks then never remove the moh_wrapper from the app_bridges_moh container. As a result we cannot find the channel associated with the wrapper to start MOH because it has hungup. This is the reason causing the reported issue. * Rather than using after bridge callbacks to cleanup, we now have moh_channel_thread() doing the cleanup when the channel hangs up. * Fixed moh_channel_thread() accumulating control frames on the stasis bridge MOH channel until MOH is stopped. Control frames are no longer accumulated while MOH is playing. * Fixed channel ref counting issue. stasis_app_bridge_moh_channel() may or may not return a channel ref. As a result ast_ari_bridges_start_moh() wouldn't know it may have a channel ref to release. stasis_app_bridge_moh_channel() will now return a ref with the channel it returns. * Eliminated RAII_VAR in bridge_moh_create(). ASTERISK-26094 #close Change-Id: Ibff479e167b3320c68aaabfada7e1d0ef7bd548c 2018-09-10 11:28 +0000 [67e1e49e08] Ben Ford * res_rtp_asterisk.c: Add "seqno" strictrtp option When networks experience disruptions, there can be large gaps of time between receiving packets. When strictrtp is enabled, this created issues where a flood of packets could come in and be seen as an attack. Another option - seqno - has been added to the strictrtp option that ignores the time interval and goes strictly by sequence number for validity. Change-Id: I8a42b8d193673899c8fc22fe7f98ea87df89be71 2018-09-20 13:59 +0000 [e04c49b517] Alexei Gradinari * res_odbc: fix missing SQL error diagnostic On SQL error there is not diagnostic information about this error. There is only WARNING res_odbc.c: SQL Execute error -1! The function ast_odbc_print_errors calls a SQLGetDiagField to get the number of available diagnostic records, but the SQLGetDiagField returns 0. However SQLGetDiagRec could return one diagnostic records in this case. Looking at many example of getting diagnostics error information I found out that the best way it's to use only SQLGetDiagRec while it returns SQL_SUCCESS. Also this patch adds calls of ast_odbc_print_errors on SQL_ERROR to res_config_odbc. ASTERISK-28065 #close Change-Id: Iba5ae5470ac49ecd911dd084effbe9efac68ccc1 2018-09-26 08:12 +0000 [227d9719da] George Joseph * CI: Add --test-timeout option to runTestsuite.sh The default is 600 seconds. Also added timeouts to the *TestGroups.json files. Change-Id: I8ab6a69e704b6a10f06a0e52ede02312a2b72fe0 2018-09-18 08:01 +0000 [681e115ff1] Peter Katzmann * chan_sip: SipNotify on Chan_Sip vi AMI behave different to CLI With tls and udp enabled asterisk generates a warning about sending message via udp instead of tls. sip notify command via cli works as expected and without warning. asterisk has to set the connection information accordingly to connection and not on presumption ASTERISK-28057 #close Change-Id: Ib43315aba1f2c14ba077b52d8c5b00be0006656e 2018-09-24 17:56 +0000 [cc8e0dfabd] George Joseph * configure.ac: Check for unbound version >= 1.5 In order to do this and provide good feedback, a new macro was created (AST_EXT_LIB_EXTRA_CHECK) which does the normal check and path setups for the library then compiles, links and runs a supplied code fragment to do the final determination. In this case, the final code fragment compares UNBOUND_VERSION_MAJOR and UNBOUND_VERSION_MINOR to determine if they're greater than or equal to 1.5. Since we require version 1.5, some code in res_resolver_unbound was also simplified. ASTERISK-28045 Reported by: Samuel Galarneau Change-Id: Iee94ad543cd6f8b118df8c4c7afd9c4e2ca1fa72 2018-09-24 12:43 +0000 [7c49ea7cff] Joshua Colp * res_rtp_asterisk: Raise event when RTP port is allocated This change raises a testsuite event to provide what port Asterisk has actually allocated for RTP. This ensures that testsuite tests can remove any assumption of ports and instead use the actual port in use. ASTERISK-28070 Change-Id: I91bd45782e84284e01c89acf4b2da352e14ae044 2018-07-16 22:55 +0000 [ede59966d9] Corey Farrell * jansson: Backport fixes to bundled, use json_vsprintf if available. Use json_vsprintf from versions which contain fix for va_copy leak. Apply fixes from jansson master: * va_copy leak fix. * Avoid potential invalid memory read in json_pack. * Rename variable that shadowed another. Change-Id: I7522e462d2a52f53010ffa1e7d705c666ec35539 2018-07-16 22:55 +0000 [7b0dbda936] Corey Farrell * json: Take advantage of new API's. * Use "o*" format specifier for optional fields in ast_json_party_id. * Stop using ast_json_deep_copy on immutable objects, it is now thread safe to just use ast_json_ref. Additional changes to ast_json_pack calls in the vicinity: * Use "O" when an object needs to be bumped. This was previously avoided as it was not thread safe. * Use "o?" and "O?" to replace NULL with ast_json_null(). The "?" is a new feature of ast_json_pack starting with Asterisk 16. Change-Id: I8382d28d7d83ee0ce13334e51ae45dbc0bdaef48 2018-09-17 15:35 +0000 [755febe497] Kevin Harwell * rtp_engine: rtcp_report_to_json can overflow the ssrc integer value When writing an RTCP report to json the code attempts to pack the "ssrc" and "source_ssrc" unsigned integer values as a signed int value type. This of course means if the ssrc's unsigned value is greater than that which can fit into a signed integer value it gets converted to a negative number. Subsequently, the negative value goes out in the json report. This patch now packs the value as a json_int_t, which is the widest integer type available on a given system. This should make it so the value no longer overflows. Note, this was caught by two failing tests hep/rtcp-receiver/ and hep/rtcp-sender. Change-Id: I2af275286ee5e795b79f0c3d450d9e4b28e958b0 2018-09-21 14:32 +0000 [ba91c73f8e] George Joseph * app_voicemail: Fix stack overrun in append_mailbox The append_mailbox function wasn't calculating the correct length to pass to ast_alloca and it wasn't handling the case where context might be empty. Found by the Address Sanitizer. Change-Id: I7eb51c7bd18a7a8dbdba261462a95cc69e84f161 2018-09-21 15:23 +0000 [0a1a96d331] George Joseph * channel.c: Address stack overflow in does_id_conflict() does_id_conflict() was passing a pointer to an int to a callback that expected a pointer to a size_t. Found by the Address Sanitizer. Change-Id: I0ff542067eef63a14a60301654d65d34fe2ad503 2018-09-21 10:19 +0000 [7a7b21f3a0] Corey Farrell * res_rtp_asterisk: Fix crash on ast_rtp_new failure. ast_rtp_new free'd rtp upon failure, but rtp_engine.c would also call the destroy callback. Remove call to ast_free from ast_rtp_new, leave it to rtp_engine.c to initiate the full cleanup. Add error detection for the ssrc_mapping vector initialization. In rtp_allocate_transport set rtp->s = -1 in the failure path where we close that FD to ensure we don't try closing it twice. ASTERISK-27854 #close Change-Id: Ie02aecbb46228ca804e24b19cec2bb6f7b94e451 2018-09-20 15:26 +0000 [880905e7eb] Sean Bright * res_rtp_asterisk: Reset all settings on module reload 'rtpchecksums' and 'rtcpinterval' are not being reset to their defaults if they are not present in the updated configuration file. Change-Id: I1162e40199314d46cf3225d5e1271c4c81176670 2018-09-20 10:15 +0000 [fa1b836374] George Joseph * app_voicemail: Cleanup mailbox topic and cache app_voicemail wasn't properly cleaning up the stasis cache or the mwi topic pool when the module was unloaded or when a user was deleted as a result of a reload. This resulted in leaks in both areas. * app_voicemail now calls ast_delete_mwi_state_full when it frees a user structure and ast_delete_mwi_state_full in turn now calls the new stasis_topic_pool_delete_topic function to clear the topic from the pool. Change-Id: Ide23144a4a810e7e0faad5a8e988d15947965df8 2018-08-16 10:45 +0000 [339bf0cf7b] Sean Bright * AST-2018-009: Fix crash processing websocket HTTP Upgrade requests The HTTP request processing in res_http_websocket allocates additional space on the stack for various headers received during an Upgrade request. An attacker could send a specially crafted request that causes this code to overflow the stack, resulting in a crash. * No longer allocate memory from the stack in a loop to parse the header values. NOTE: There is a slight API change when using the passed in strings as is. We now require the passed in strings to no longer have leading or trailing whitespace. This isn't a problem as the only callers have already done this before passing the strings to the affected function. ASTERISK-28013 #close Change-Id: Ia564825a8a95e085fd17e658cb777fe1afa8091a 2018-09-20 09:41 +0000 [1a9c69d729] George Joseph * stasis: Add function to delete topic from pool There's been a long standing leak when using topic pools. The topics in the pool get cleaned up when the last pool reference is released but you can't remove a topic specifically. If you reloaded app_voicemail for instance, and mailboxes went away, their topics were left in the pool. * Added stasis_topic_pool_delete_topic() so modules can clean up topics from pools. * Registered the topic pool containers so it can be examined from the CLI when AO2_DEBUG is enabled. They'll be named "-pool". Change-Id: Ib7957951ee5c9b9b4482af7b9b4349112d62bc25 2018-09-03 09:55 +0000 [8811ab1803] David Hajek * chan_sip.c: chan_sip unstable with TLS after asterisk start or reloads Fixes random asterisk crash on start or reload with TLS phones. ASTERISK-28034 #close Reported-by: David Hajek Change-Id: I2a859f97dc80c348e2fa56e918214ee29521c4ac 2018-09-20 04:48 +0000 [2f38bcdfc0] Joshua Colp * res_remb_modifier: Add module for controlling REMB from CLI. This adds a module which registers a CLI command that can set the REMB bitrate value for REMB as it enters or exits Asterisk. This allows you to ignore what Asterisk or a client produces and is useful for demonstrations. This does not generate REMB frames, however, but just modifies them as they flow to or from a channel. Change-Id: Ib089427c46a4a36d645cecfe02406adb38c17bec 2018-09-14 15:51 +0000 [f6695249a5] Richard Mudgett * stasis: No need to keep a stasis type ref in a stasis msg or cache object. Stasis message types are global ao2 objects and we make stasis messages and cache entries hold references to them. Since there are currently situations where cache objects are never deleted, the reference count on the types can exceed 100000 and generate a FRACK assertion message. The stasis message cache could conceivably also have that many messages legitimately on large systems. The only down side to not holding the message type ref in the stasis message is it only makes a crash either at shutdown or when manually unloading a busy module slightly more likely. However, this is more exposing a pre-existing stasis shutdown ordering issue than a problem with not holding a message type ref in stasis messages. * Made stasis messages and cache entries no longer hold a ref to the message type. Change-Id: Ibaa28efa8d8ad3836f0c65957192424c7f561707 2018-09-18 13:59 +0000 [c008c27c85] Richard Mudgett * pjproject: Update initial 2.8 patches to apply cleanly. ASTERISK-28059 Change-Id: I027472f2753391646dde594a709a75f14422db93 2018-09-14 15:48 +0000 [192f71b7de] Richard Mudgett * stasis_message.c: Don't create immutable stasis objects with locks. * Create the stasis message object without a lock as it is immutable. * Create the stasis message type object without a lock as it is immutable. * Creating the stasis message type could crash if the passed in type name is NULL and REF_DEBUG is enabled. Added missing NULL check when passing the ao2 object tag string. Change-Id: I28763c58bb9f0b427c11971d0103bf94055e7b32 2018-09-17 11:38 +0000 [60258b4ec1] Joshua Colp * pjproject: Upgrade to 2.8. This change brings in PJSIP 2.8, removes all the patches that were merged upstream, and makes a minor change to support a breaking change that was done. ASTERISK-28059 Change-Id: I5097772b11b0f95c3c1f52df6400158666f0a189 2018-09-18 09:39 +0000 [3e48c34f14] Florian Floimair * alembic: fix suppress_q850_reason_headers column name In the original commit introducing the feature the column in the alembic script was called 'suppress_q850_reason_header'. In the code however the option is called 'suppress_q850_reason_headers' (trailing 's'). This leads to errors when ARI push configuration is used. Change-Id: Ie84808adbca6fcc9136556e4f5d741adbef5d14f 2018-09-13 07:55 +0000 [29115e2384] George Joseph * app_voicemail: Remove need to subscribe to stasis app_voicemail was using the stasis cache to build and maintain a list of mailboxes that had subscribers. It then used this list to determine if a mailbox should be polled for new messages if polling was enabled. For this to work, stasis had to cache every subscription and unsubscription to the mailbox which caused a lot of overhead, both cpu and memory related. Since polling is only required when changes are being made to mailboxes outside of app_voicemail and since the number of mailboxes that don't have any subscribers is likely to be very low, all mailboxes are now polled instead of just the ones with subscribers. This paves the way for disabling the caching of stasis subscription change messages. Also fixed cleanup in some of the unit tests that not only left test users in the users list but also caused segfaults if the tests were run more than once. ASTERISK-27121 Change-Id: I5cceb737246949f9782955c64425b8bd25a9e9ee 2018-09-18 06:08 +0000 [6e79e6b097] Joshua Colp * res_pjsip_session: Don't add declined stream if one does not exist. Given a scenario where a session refresh was done with a removed stream we would always add a removed stream to the outgoing SDP even if one did not already exist. This change makes it so that a removed stream is only placed into the SDP if one already exists. ASTERISK-28047 Change-Id: Ibb97d21cdeb87a8acae0c720861b0ff255708442 2018-09-17 10:38 +0000 [b0a0b975c5] Sean Bright * autoconf: Check for srtp_get_version_string() before using it Change-Id: Id2a916ff9448706090e72ff2c7fb3f5ba24a05df 2018-09-17 07:10 +0000 [4a309839eb] George Joseph * CI: Fix typo in testsuite git checkout Change-Id: I30024515e5b00a5044fd39fbff27d818f016b719 2018-09-16 06:08 +0000 [55ca51af21] Sean Bright * res_srtp.c: Show linked version of libsrtp on module init Change-Id: Ib0a645d6985de5757cc4399ed2524b2d02c4f342 2018-09-07 09:40 +0000 [887a315e17] Sean Bright * res_pjsip: Log IPv6 addresses correctly Both pjsip_tx_data.tp_info.dst_name and pjsip_rx_data.pkt_info.src_name store IPv6 addresses without enclosing brackets. This causes some log output to be confusing because it is difficult to separate the IPv6 address from a port specification. * Use pj_sockaddr_print() along with pjsip_tx_data.tp_info.dst_addr and pjsip_rx_data.pkt_info.src_addr where possible for consistent IPv6 output. * When a pj_sockaddr is not available, explicitly wrap IPv6 addresses in brackets. * When assigning pjsip_rx_data.pkt_info.src_name ourselves, make sure to also set pjsip_rx_data.pkt_info.src_addr. Change-Id: I5cfe997ced7883862a12b9c7d8551d76ae02fcf8 2018-09-14 12:31 +0000 [3f9544c1f5] George Joseph * CI: Use proper credentials for Security testsuite checkout Can't do anonymous http checkout from Security-testsuite. Need to use same credentials as the gerrit review checkout. Change-Id: I87af68c995cb8926f5e87f9af245600d76984f05 2018-09-13 11:06 +0000 [17d6d9e1e7] George Joseph * stasis_cache: Stop caching stasis subscription change messages Since app_voicemail no longer uses the cache to maintain its state there is no longer a need to cache these messages. ASTERISK-27121 Change-Id: I321c708505f5ad8d00e1b0afc4c27dc2ac12ecb4 2018-09-12 12:39 +0000 [5842741689] Corey Farrell * CI: Use .gitreview to default BRANCH_NAME. This ensures that binary modules are avoided in the master branch even if BRANCH_NAME is not set. Change-Id: I79162d2063f22fa9d6b31fde4827ace2dd5bf0da 2018-09-11 07:22 +0000 [78453e65fd] Walter Doekes * optional_api: Remove unused nonoptreq fields As they're not actively used, they only grow stale. The moduleinfo field itself is kept in Asterisk 13/15 for ABI compatibility. ASTERISK-28046 #close Change-Id: I8df66a7007f807840414bb348511a8c14c05a9fc 2018-09-03 06:50 +0000 [f4bffe2326] lvl * manager: Set AMI event "Newexten" to the EVENT_FLAG_DIALPLAN class The documentation already specified EVENT_FLAG_DIALPLAN for this event, but the implementation was using EVENT_FLAG_CALL. Using EVENT_FLAG_DIALPLAN allows AMI clients to opt out of receiving this highly verbose event. ASTERISK-28033 Change-Id: I45b3119f30e4dbc17b49831f2b1a4f2c1beadafe 2018-09-12 07:18 +0000 [e5739c494c] Sean Bright * res_pjproject: Fix sockaddr conversion routines for non-bundled PJSIP The bundled version of pjproject has a patch for Solaris compatability that changes the definition of various socket structures which we need to account for when compiling against a non-bundled version. ASTERISK-28049 #close Change-Id: Ia1ea47c433fc2d915115193ee889a752373925f0 2018-09-10 22:28 +0000 [ecb3b23b07] Corey Farrell * Build System: Resolve conflict between DESTDIR and bundled jansson. If Asterisk is built using a DESTDIR this will cause the bundled jansson to be installed to an unexpected location and we will fail to find it. Change-Id: Id033e2813261e0d45232383d44c6391122169548 2018-08-30 03:42 +0000 [ccfd2e0f5d] Frederic LE FOLL * res_musiconhold.c: Restart MOH if previous hold just reached end-of-file On MOH activation, moh_files_readframe() is called while the current stream attached to the channel is NULL and it calls ast_moh_files_next() immediately. However, it won't call ast_moh_files_next() again if sample reading fails. The failure may occur because res_musiconhold retains the last sample reading position in the channel data and MOH during the previous hold/retrieve just reached EOF. Obviously, a bit of bad luck is required here. * Restructured moh_files_readframe() to try a second time to start MOH if there was no stream setup and the saved position was at EOF. Also added comments describing what is going on for each step. ASTERISK-28029 Change-Id: I1508cf2c094f8feca22d6f76deaa9fdfa9944860 2018-09-05 06:39 +0000 [af6a3d02e1] Joshua Colp * core: Don't stop generators when writing RTCP frames. Generators provide such functionality as tone generation or silence generation. RTCP frames provide RTCP information and should not stop generators from operating. ASTERISK-28005 Change-Id: Ieadada07b068a7aa426e8763f1b73a18e1ac34a9 2018-09-03 06:28 +0000 [034a3d8b86] lvl * app_queue: Update realtime queuemembers after wait_a_bit(), not before This ensures the most up-to-date information is used for the next call attempt. ASTERISK-28032 Change-Id: I02fc17c6ffb50bb60ea97c2d2e6023e8061815ce 2018-08-28 08:42 +0000 [3134fd95a9] Sean Bright * res_pjproject: Add utility functions to convert between socket structures Currently, to convert from a pj_sockaddr to an ast_sockaddr, the address needs to be rendered to a string and then parsed into the correct structure. This also involves a call to getaddrinfo(3). The same is true for the inverse operation. Instead, because we know the internal structure of both ast_sockaddr and pj_sockaddr, we can translate directly between the two without the need for an intermediate string. Change-Id: If0fc4bba9643f755604c6ffbb0d7cc46020bc761 2018-08-30 13:08 +0000 [9fb166cf3b] George Joseph * stasis_cache: Prune stasis_subscription_change messages The stasis cache provides a way to reconstruct the current state of topic subscribers. Unfortunately, since every subscribe and unsubscribe is cached, the cache continues to grow unabated while asterisk is running. This patch removes subscribe messages from the cache when the corresponding unsubscribe is received. This patch also registers the cache containers with ao2 so that if AO2_DEBUG is turned on, you can list the container and get its stats from the CLI. ASTERISK-27121 Change-Id: I3d18905e477f3721815da91f30da8d3fbb2d4f56 2018-09-03 09:27 +0000 [8879a62c1c] Rodrigo Ramírez Norambuena * app_dial: set the comment for OPT_ARG_ANNOUNCE to really what is done Change-Id: I08f88adb09f7e5813f37e70fecd787468cdb32c8 2018-08-15 14:27 +0000 [cfb854e241] Chris-Savinovich * pbx_config.c: Fix reloading module if initially declined to load Added decline if extensions.conf file not available when loading pbx_config, and also made sure everything gets properly unregistered and/or destroyed on unload. Change-Id: Ib00665106043b1be5148ffa7a477396038915854 2018-08-30 14:42 +0000 [4fcdcfaa37] Richard Mudgett * http.c: Give HTTP error response when received lines are too long. Added a check when we receive a HTTP request line or header line that is too long. We now return an error response to the sender because we are not able to process the request. Change-Id: I6df2705435fd7dde4d5d3bdf7acec859cfb7c12d 2018-08-29 16:14 +0000 [f6a165208b] Richard Mudgett * iostream.c: Fix ast_iostream_gets() needlessly returning failure. Providing a buffer larger than the internal buffer of ast_iostream_gets() fails to get lines longer than the internal buffer. * Made ast_iostream_gets() fill the supplied buffer with read data until either a '\n' is found or the supplied buffer is filled just like fgets(). Change-Id: If18b3f6ee500e22f0633a68779ed09f7e0f305ed 2018-08-06 15:37 +0000 [4dd8b5bbb4] Richard Mudgett * res_pjsip: Fix mwi_subscribe_replaces_unsolicited type mismatch ASTERISK-27988 Change-Id: Iccafdd0552ea8aaed647620fb14499f1bf341843 2018-08-16 09:04 +0000 [1edd9eb309] Rodrigo Ramírez Norambuena * make config: os-release output error. Fix not show the error "/bin/sh: /etc/os-release: No such file or directory" when the command 'make config' is run in a System without systemv. The instruction 'make config' pre execute the syntax "$(shell . /etc/os-release && echo $$ID)" to identified if system is a Slackware and Opensuse. This change prevent show the message and is send to the /dev/null Change-Id: I7f43e281a8d9405b2519fc653de82d9b8b645fdf 2018-08-29 05:18 +0000 [390d0b42ca] Joshua Colp * res_fax: Handle fax gateway being started more than once. The T.38 fax gateway state machine can cause the fax gateway to be started more than once on a channel depending on the responses of the remote endpoint. This would previously leak the channel name, channel unique id, and underlying fax engine state. This change instead makes it so that if the fax gateway session is already present and not reserved the fax gateway is not started again. ASTERISK-27981 Change-Id: I552d95086860cb18f2522ee40ef47b13b6da2e0e 2018-08-28 08:01 +0000 [245fb462d6] Sean Bright * res_pjsip_transport_websocket: Properly set src_name for IPv6 SIP responses over WebSockets when the client is using IPv6 have invalid Via headers according to RFC 3261. The 'received' header parameter should not be wrapped in brackets if it is an IPv6 address. When src_name is populated by the built-in PJSIP transports, the code uses pj_sockaddr_print() with 'flags' set to 0, meaning that the brackets are not rendered around IPv6 addresses. This may be related to ASTERISK~27101. See also: https://github.com/onsip/SIP.js/pull/594 ASTERISK-28020 #close Change-Id: I8ea9d289901b837512bee2ca2535e3dc14f04d77 2018-08-26 13:18 +0000 [1b1f47bef6] Corey Farrell * Create --disable-binary-modules option. This new option can be passed for ./configure or ./tests/CI/buildAsterisk.sh to prevent download/install of binary modules. Normally enabling the categories MENUSELECT_CODECS or MENUSELECT_RES will result in binary modules being enabled even if the build target is incompatible with those modules. This includes CI scripts which enable categories before disabling specific modules. If more binary modules are offered in the future this will help avoid accidentally downloading them if unwanted or incompatible. Adding a binary module will only require creating a new menuselect entry similar to the existing ones, it will not be necessary to modify the CI scripts. Change-Id: I6b1bd1c75a2e48f05b8b8a45b7a7a2d00a079166 2018-08-21 07:59 +0000 [aa2755cbb3] Emmanuel BUU * res/res_rtp_asterisk: remove debug traces generated by an empty frame The realtime text timer pops regularly and sends text frames even if the buffer is empty. This causes a lot of unecessary debug logging. * Made red_write() test if we need to send a frame before calling ast_rtp_write() ASTERISK-28002 Reported by: Emmanuel BUU Tested by: Emmanuel BUU Change-Id: Icf81310c3b8080b615a42060afc02ab41f9523dd 2018-08-13 08:12 +0000 [46442aa9e5] Jaco Kroon * chan_sip: improved ip:port finding of peers for non-UDP transports. Also remove function peer_ipcmp_cb since it's not used (according to rmudgett). Prior to b2c4e8660a9c89d07041271371151779b7ec75f6 (ASTERISK_27457) insecure=port was the defacto standard. That commit also prevented insecure=port from being applied for sip/tcp or sip/tls. Into consideration there are three sets of behaviour: 1. "previous" - before the above commit. 2. "current" - post above commit, pre this one. 3. "new" - post this commit. The problem that the above commit tried to address was guests over TCP. It succeeded in doing that but broke transport!=udp with host!=dynamic. This commit attempts to restore sane behaviour with respect to transport!=udp for host!=dynamic whilst still retaining the guest users over tcp. It should be noted that when looking for a peer, two passes are made, the first pass doesn't have SIP_INSECURE_PORT set for the searched-for peer, thus looking for full matches (IP + Port), the second pass sets SIP_INSECURE_PORT, thus expecting matches on IP only where the matched peer allows for that (in the author's opinion: UDP with insecure=port, or any TCP based, non-dynamic host). In previous behaviour there was special handling for transport=tcp|tls whereby a peer would match during the first pass if the utilized transport was TCP|TLS (and the peer allowed that specific transport). This behaviour was wrong, or dubious at best. Consider two dynamic tcp peers, both registering from the same IP (NAT), in this case either peer could match for connections from an IP. It's also this behaviour that prevented SIP guests over tcp. The above referenced commit removed this behaviour, but kept applying the SIP_INSECURE_PORT only to WS|WSS|UDP. Since WS and WSS is also TCP based, the logic here should fall into the TCP category. This patch updates things such that the previously non-explicit (TCP behaviour) transport test gets performed explicitly (ie, matched peer must allow for the used transport), as well as the indeterministic source-port nature of the TCP protocol is taken into account. The new match algorithm now looks like: 1. As per previous behaviour, IP address is matched first. 2. Explicit filter with respect to transport protocol, previous behaviour was semi-implied in the test for TCP pure IP match - this now made explicit. 3. During first pass (without SIP_INSECURE_PORT), always match on port. 4. If doing UDP, match if matched against peer also has SIP_INSECURE_PORT, else don't match. 5. Match if not a dynamic host (for non-UDP protocols) 6. Don't match if this is WS|WSS, or we can't trust the Contact address (presumably due to NAT) 7. Match (we have a valid Contact thus if the IP matches we have no choice, this will likely only apply to non-NAT). To logic-test this we need a few different scenarios. Towards this end, I work with a set number of peers defined in sip.conf: [peer1] host=1.1.1.1 transport=tcp [peer2] host=1.1.1.1 transport=udp [peer3] host=1.1.1.1 port=5061 insecure=port transport=udp [peer4] host=1.1.1.2 transport=udp,tcp [peer5] host=dynamic transport=udp,tcp Test cases for UDP: 1 - incoming UDP request from 1.1.1.1: - previous: - pass 1: * peer1 or peer2 if from port 5060 (indeterminate, depends on peer ordering) * peer3 if from port 5061 * peer5 if registered from 1.1.1.1 and source port matches - pass 2: * peer3 - current: as per previous. - new: - pass 1: * peer2 if from port 5060 * peer3 if from port 5061 * peer5 if registered from 1.1.1.1 and source port matches - pass 2: * peer3 2 - incoming UDP request from 1.1.1.2: - previous: - pass 1: * peer5 if registered from 1.1.1.2 and port matches * peer4 if source port is 5060 - pass 2: * no match (guest) - current: as previous. - new as previous (with the variation that if peer5 didn't have udp as allowed transport it would not match peer5 whereas previous and current code could). 3 - incoming UDP request from anywhere else: - previous: - pass 1: * peer5 if registered from that address and source port matches. - pass 2: * peer5 if insecure=port is additionally set. * no match (guest) - current - as per previous - new - as per previous Test cases for TCP based transports: 4 - incoming TCP request from 1.1.1.1 - previous: - pass 1 (indeterministic, depends on ordering of peers in memory): * peer1; or * peer5 if peer5 registered from 1.1.1.1 (irrespective of source port); or * peer2 if the source port happens to be 5060; or * peer3 if the source port happens to be 5061. - pass 2: cannot happen since pass 1 will always find a peer. - current: - pass 1: * peer1 or peer2 if from source port 5060 * peer3 if from source port 5060 * peer5 if registered as 1.1.1.1 and source port matches - pass 2: * no match (guest) - new: - pass 1: * peer 1 if from port 5060 * peer 5 if registered and source port matches - pass 2: * peer 1 5 - incoming TCP request from 1.1.1.2 - previous (indeterminate, depends on ordering): - pass 1: * peer4; or * peer5 if peer5 registered from 1.1.1.2 - pass 2: cannot happen since pass 1 will always find a peer. - current: - pass 1: * peer4 if source port is 5060 * peer5 if peer5 registered as 1.1.1.2 and source port matches - pass 2: * no match (guest). - new: - pass 1: * peer4 if source port is 5060 * peer5 if peer5 registered as 1.1.1.2 and source port matches - pass 2: * peer4 6 - incoming TCP request from anywhere else: - previous: - pass 1: * peer5 if registered from that address - pass 2: cannot happen since pass 1 will always find a peer. - current: - pass 1: * peer5 if registered from that address and port matches. - pass 2: * no match (guest) - new: as per current. It should be noted the test cases don't make explicit mention of TLS, WS or WSS. WS and WSS previously followed UDP semantics, they will now enforce source port matching. TLS follow TCP semantics. The previous commit specifically tried to address test-case 6, but broke test-cases 4 and 5 in the process. ASTERISK-27881 #close Change-Id: I61a9804e4feba9c7224c481f7a10bf7eb7c7f2a2 2018-08-20 07:23 +0000 [d84de695ed] Jaco Kroon * AMI: be less verbose when adding HTTP headers to AMI/HTTP messages. All HTTP/AMI message headers are being sent to the verbose channel. There are multiple places this is happening. Consolidate the loop into a function. Drop the debug/verbose message. Convert to using ast_asprintf to perform the length calculation, memory allocation and snprintf all in one step. Change-Id: Ic45e673fde05bd544be95ad5cdbc69518207c1a1 2018-08-22 10:50 +0000 [4188e7d6dd] Matthew Fredrickson * sample_configs: noload res_hep.so by default Change disables loading of res_hep.so in default installation. Loading res_hep has a performance impact whether it's used or not. This disables loading of it in sample config files. Change-Id: I5ec150cf941634fabc72973e5bf1a965cb0ef9d0 (cherry picked from commit c8bacd45f17d2ae6f6d05c8cff538dd651f683a6) 2018-08-23 06:57 +0000 [595e358761] Florian Floimair * alembic: increase uri column size When mobile SIP clients register with Asterisk that use some sort of push notifications, the URI can get quite lengthy due to the additional push-service annotations (things like tokens, pn-type, etc.) contained in it. ASTERISK-28022 #close Change-Id: I6c55013bafe79f7e7a1fb6722d2558f553709f2e 2018-08-21 13:50 +0000 [4b88cb383d] Sean Bright * app_queue: Silence GCC 8 compiler warning I'm only seeing an error in 14+, so I assume it is due to different compiler options: app_queue.c: In function ‘handle_queue_add_member’: app_queue.c:10234:19: error: ‘%d’ directive writing between 1 and 11 bytes into a region of size 3 [-Werror=format-overflow=] sprintf(num, "%d", state); ^~ app_queue.c:10234:18: note: directive argument in the range [-2147483648, 99] sprintf(num, "%d", state); ^~~~ Compiler: gcc version 8.0.1 20180414 (experimental) [trunk revision 259383] (Ubuntu 8-20180414-1ubuntu2) Change-Id: I18577590da46829c1ea7d8b82e41d69f105baa10 2018-08-20 11:23 +0000 [fb2f242c49] Richard Mudgett * AMI: Remove docs for nonexistent AMI ContactStatus event headers Change-Id: I5736965c64c44338f7330e85a24bb46818607f19 2018-08-06 06:22 +0000 [b9cd4c6d92] Joshua Colp * res_pjsip: Reduce processing when a Contact is updated. When a Contact is updated the only material change that qualify support cares about is the underlying configuration for the AOR. In this case we will update things with the new AOR information but otherwise the callback to indicate the Contact has changed can be ignored. This is because it is only when a Contact is added or deleted that material changes occur within the qualify support. An update can't change the URI since it would result in a new Contact so it can be ignored. Change-Id: I2f97ebfa79969a36a97bb7b9afd5b6268cf1a07d 2018-08-10 19:28 +0000 [236826a111] Richard Mudgett * res_pjsip_t38.c: Fix crash if already saw a final T.38 reINVITE response. We were still getting crashes after the first fix. Somehow we receive a non-2xx final response before we get a 200 final response. With the failure response we had already cleaned up and destroyed some data structures. When the unexpected 200 response comes in we crash. * Add protection code to prevent processing another final T.38 reINVITE response. ASTERISK-27944 Change-Id: I8b5baba8d07fe4d63f0d7d05d3eb9a3d27d40a74 2018-08-09 18:46 +0000 [19298141cf] Richard Mudgett * res_sorcery_realtime.c: Fix unqualified fetch warning. The allow_unqualified_fetch option for the sorcery realtime backend blocked actually fetching all rows when the option is set to warn. * Made issue a warning and actually do the request when allow_unqualified_fetch=warn is set. Change-Id: I74456c80a03a62dce66fc3dc3cb0cf2351ac4312 2018-06-11 00:07 +0000 [f6c1d94d91] Kirsty Tyerman * pbx_dundi: Added IPv6 support for dundi Change includes move to netsock2 library. ASTERISK-27164 Reported-by: Adam Secombe Change-Id: Ia9e8dc3d153de7a291dbda4bd87fc827dd2bb846 2018-08-15 21:31 +0000 [4e43823d19] Richard Mudgett * pbx_dundi.c: Misc memory management fixes when destroying peers * In destroy_peer(), fixed memory leaks of lookup history strings and qualify transactions when destroying peers. * In destroy_peer(), fixed leaving the registerexpire scheduled callback active when a peer is destroyed on a reload. The reload marks and sweeps peers so any peers not explicitly configured get destroyed. Peers created dynamically from the '*' peer will not exist until they re-register after the reload. These destroyed peers caused memory corruption when the registerexpire timer expired. * Made build_peer() not schedule any callbacks on the '*' peer (empty_eid). It is a special peer that is cloned to dynamically created peers so it doesn't actually get involved in any message transactions. * Made do_register_expire() remove the dundi/dpeers AstDB entry when a peer registration expires. * Fix deep_copy_peer() to not copy some things that cannot be copied to the cloned peer structure. Timers, message transactions, and lookup history are specific to a peer instance. * Made set_config() lock around processing the mappings configuration. * Reordered unload_module() to handle load_module() declining the load due to error. Change-Id: Ib846b2b60d027f3a2c2b3b563d9a83a357dce1d6 2018-08-15 23:49 +0000 [857926d197] Richard Mudgett * pbx_dundi.c: Handle thread shutdown better. Change-Id: Id52f99bd6a948fe6dd82acc0a28b2447a224fe87 2018-08-15 18:14 +0000 [111e73678e] Richard Mudgett * pbx_dundi: Fix debug frame decode string. * Fixed a typo in the name of the REGREQ frame decode string array. * Fixed off by one range check indexing into the frame decode string array. * Removed some unneeded casts associated with the decode string array. Change-Id: I77435e81cd284bab6209d545919bf236ad7933c2 2018-08-16 16:21 +0000 [a7ace944ae] Richard Mudgett * pbx_dundi: Update sample config documentation. Change-Id: I33d0ad0611c2124ca3440f0f811fa0f45e4e2849 2018-08-15 14:44 +0000 [0874d5b316] Richard Mudgett * res_rtp_asterisk.c: Fix unused variable warnings Compiling without SRTP support installed resulted in some unused variable warnings. These warnings also showed that the srtp variable was obtained and passed around some functions but not really used even when a system has SRTP installed. Change-Id: I6daad34be3e89b19adef6e2fbe738018975155fc 2018-08-16 13:51 +0000 [df78227e4a] George Joseph * CI: Fixup for non-13 branches Change-Id: I5e1d4a09e58b92b541bc8ed6f9e10e54c4e5101f 2018-08-16 13:28 +0000 [4ca959c72c] George Joseph * CI: Final version of setting correct gerrit creds Change-Id: I7729ecceedceb12f52bf18dae259846aa1d993b3 2018-08-16 12:08 +0000 [33a5b8ccaf] George Joseph * CI: Add https credentials to gerrit checkouts If the review to be tested is in a project with restricted access, we need to use the jenkins user's gerrit https credentials when we do the checkout or the checkout will fail. Change-Id: I9dc9994763c5ebfeb9f1cff60fb53f6902b7fd5f 2018-08-09 02:34 +0000 [0d4bde84d1] Torrey Searle * res/res_pjsip_sdp_rtp: put rtcp-mux in answer only if offered If in the initial sdp the caller doesn't include the line a=rtcp-mux Then asterisk shoud not include rtcp-mux in the response regardless of rtcp-mux being enabled on the endpoint ASTERISK-28007 #close Change-Id: I58e9b9f40a139afc0da5de41906cc608fb62adc7 2018-08-15 14:49 +0000 [167efe3a47] Corey Farrell * res_resolver_unbound: Fix leak of config nameserver strings. Change-Id: I3f396316bb40d1ae6e91f5f688042420f1a540ed 2018-08-15 13:51 +0000 [72dbc9fb70] Corey Farrell * res_pjsip: Resolve transport management leak at shutdown. Cleanup idle check scheduled events at shutdown. Change-Id: I61bfbb56bac69fe840c3242927d31ff3593be461 2018-08-15 11:12 +0000 [6e0f4a2127] Corey Farrell * res_pjsip: Fix leak in pjsip_options. sip_options_get_endpoint_state_compositor_state leaked a reference to the first available endpoint state compositor that was found. Change-Id: Idb6be19f7219b6eed1dfb19c1e740dd40cb3fdc7 2018-08-15 11:31 +0000 [b370482786] Corey Farrell * res_odbc: Allow unload at shutdown. This makes it possible for REF_DEBUG to report no leaks when loading res_odbc. Change-Id: I1a3dea786bd6e7f4820a6dd5cbaa197fa783ce93 2018-07-31 23:54 +0000 [d61a8791b5] Corey Farrell * Build System: Improve ccache matching for different menuselect options. Changing any Menuselect option in the `Compiler Flags` section causes a full rebuild of the Asterisk source tree. Every enabled option causes a #define to be added to buildopts.h, thus breaking ccache caching for every source file that includes "asterisk.h". In most cases each option only applies to one or two files. Now we only define those options for the specific sources which use them, this causes much better cache matching when working with multiple builds. For example testing code with an without MALLOC_DEBUG will now use just over half the ccache size, only main/astmm.o will have two builds cached instead of every file. Reorder main/Makefile so _ASTCFLAGS set on specific object files are all together, sorted by filename. Stop adding -DMALLOC_DEBUG to CFLAGS of bundled pjproject, this define is no longer used by any header so only serves to break cache. The only code change is a slight adjustment to how main/astmm.c is initialized. Initialization functions always exist so main/asterisk.c can call them unconditionally. Additionally rename the astmm initialization functions so they are not exported. Change-Id: Ie2085237a964f6e1e6fff55ed046e2afff83c027 2018-08-14 11:55 +0000 [0e4f5f5189] Richard Mudgett * contrib/scripts: Make astgenkey executable Change-Id: I11641d65592536dea9cbca5aa94a24c25d24dd5f 2018-08-14 07:29 +0000 [56c1285b8a] Joshua Colp * res_pjsip_caller_id: Add "party" parameter to RPID header. This change adds the "party" parameter to the Remote-Party-ID header which indicates which party the header information is applicable to. In Asterisk this is determined on whether we are the calling or called party. This is added to improve interoperability with some implementations. ASTERISK-28006 Change-Id: I1eec3e377ffff8633b5c1dd59a05e9533122cfca 2018-07-19 22:28 +0000 [3bf968470b] Corey Farrell * CI: Add support for coverage processing. Enable coverage with `./tests/CI/buildAsterisk.sh --coverage`. This will cause Asterisk to be compiled with coverage support. It also initializes 'before' coverage data for all sources. Accept --tested-only to disable modules which are not run by any test. Enabling coverage also sets tested-only true by default. To build everything with coverage enabled use `--coverage --tested-only=0`. ./tests/CI/processCoverage.sh is used to process the coverage and generate HTML reports. Fix utils/check_expr2 which failed to compiled with coverage enabled. Add status output 5 times per stage of astobj2_test_perf to ensure remote CLI does not timeout when compiled with coverage. Remote CLI disconnects if no output is received for 60 seconds. When coverage is enabled it takes about 70 seconds for my laptop to run the stages of this test, so with the change a message is printed every 14 seconds. Change-Id: I890f7d5665087426ad7d3e363187691b9afc2222 2018-08-07 10:57 +0000 [a46fcaca7b] Ben Ford * res_pjsip/rtp: No joint capabilities between streams. When a conference contained a mixture of audio/video and audio-only users, a NOTICE message would pop up stating there are no joint capabilities between streams. This happens because streams can never be removed, but they can be in a REMOVED state. If we have the scenario where user A joins with audio/video, user B joins with audio-only, and user C joins with audio/video, then user A leaves, the message would be triggered. That removed stream is still in the SDP, but Asterisk would pass it through, causing it to be seen as a ulaw stream. A check has been added for removed streams, setting their status to REMOVED when handling negotiated SDPs. Also addressed an issue where user A joins, then user B joins but does not receive video until much later. Full frames were not being sent, causing some PLI from the browser. Because the video was flowing in one direction, the browser sets the SSRC to 1, but Asterisk was dropping the PLI because of that. Added a check to see if the SSRC is 1 or not, which sends full frames and allows video to flow between user A and user B. This should only happen when dealing with PSFB or FUR, and in the case of PSFB, only for PLI. ASTERISK-27398 Change-Id: I26e7c6f101bc119549eeca406b5bcd25ad8ebc5e 2018-08-12 11:04 +0000 [fce68efbbe] Ivan Poddubny * app_queue: set QUEUESTATUS to LEAVEEMPTY instead of CONTINUE When a call leaves a queue on leaveempty condition, QUEUESTATUS must be set to LEAVEEMPTY, no matter whether Queue was executed with or without the "c" (continue) option. The regression was introduced in the fix for ASTERISK_25665. The following fix (ASTERISK_27065) was incomplete, as QUEUESTATUS was overwritten in case when "c" is set, regardless of what was the cause for leaving the queue. ASTERISK-27973 #close Reported-by: Valentin Safonov Change-Id: Iec013fe6a26a4e825ca572a1dda4f3cee5f6f80c 2018-08-09 15:25 +0000 [661273a078] Corey Farrell * Sample configs: Fix pjsip.conf syntax error. It is valid for a config file to be empty or contain only comments, but not valid for a config value to be set when no uncommented context exists. This caused an error to be loged numerous times during start when loading the default pjsip.conf. Change-Id: Icf3b0d69b4ecb6e935eecd43c99ed8b32a5a1cf6 2018-08-06 12:19 +0000 [eb87a98a1a] Richard Mudgett * res_pjsip.h: Fix doxygen comments. Change-Id: I9cf97bdc756012d1f552ab007f4aa85e0ddb4e62 2018-08-06 06:36 +0000 [5030756bfa] Joshua Colp * stasis: Reduce calculation of stasis message type hash. When the stasis cache is used a hash is calculated for retrieving or inserting messages. This change calculates a hash when the message type is initialized that is then used each time needed. This ensures that the hash is calculated only once for the message type. Change-Id: I4fe6bfdafb55bf5c322dd313fbd8c32cce73ef37 2018-07-30 07:49 +0000 [04974a0ca2] Alexander Traud * pjproject_bundled: Fix for Solaris builds. Do not undef s_addr. The authors of PJProject undef s_addr because of some issue in Microsoft Windows. However in Oracle Solaris, s_addr is not a structure member, but defined to map to the real structure member. Updates the patch from ASTERISK_20366 ASTERISK-27997 Change-Id: I8223026d4d54e2a46521085fcc94bfa6ebe35b11 2018-08-03 15:59 +0000 [99a0586ec1] Richard Mudgett * res_pjsip: Make pjlib.h consistently included. * Don't include pjlib.h twice in res_pjsip.h * Consistently use #include <> form for pjproject includes. (pjsip.h and pjlib.h) Change-Id: I3f7b42044840de64edf7e9d7695cb60c45990dc7 2018-08-02 14:37 +0000 [523b7b2ffc] Salah Ahmed * dialplan_functions: wrong srtp use status report of a dialplan function If asterisk offer an endpoint with SRTP and that endpoint respond with non srtp, in that case channel(rtp,secure,audio) reply wrong status. Why delete flag AST_SRTP_CRYPTO_OFFER_OK while check identical remote_key: Currently this flag has being set redundantly. In either case identical or different remote_key this flag has being set. So if we don't set it while we receive identical remote_key or non SRTP SDP response then we can take decision of srtp use by using that flag. ASTERISK-27999 Change-Id: I29dc2843cf4e5ae2604301cb4ff258f1822dc2d7 2018-07-30 06:05 +0000 [e9d41572b3] Alexander Traud * pjproject_bundled: Find shared libraries in root --with-ssl=PATH. The script configure from Teluu expects shared libraries (.so) in a subfolder called 'lib', when --with-xyz=PATH is specified. However for OpenSSL, the default location is the root of the source folder = PATH. Furthermore, Asterisk supports both, 'lib' and root. For consistency and because Asterisk is using (only) OpenSSL in PJProject, it is enhanced to support both locations, just like Asterisk. ASTERISK-27995 Change-Id: I8eb916a88b6b8c22e29bb40bee8faaca6c73406f 2018-08-01 09:45 +0000 [1e837e13f5] Joshua Colp * res_pjsip_registrar: Improve performance on inbound handling. This change removes a sorcery lookup for retrieving all contacts at the end of the registration process by keeping track of the contacts that are added/updated/deleted. This ensures at the end of the process the container of contacts we have is the current state. Pool usage has also been reduced by allocating one for usage throughout the handling of a REGISTER and resetting it to a clean state. This ensures that in most cases we allocate once and just reuse it. ASTERISK-28001 Change-Id: I1a78b2d46f9a2045dbbff1a3fd6dba84b612b3cb 2018-07-17 07:13 +0000 [e818925a58] Torrey Searle * thirdparty/pjproject: fix deadlock in response retransmissions The tdata containing the response can be shared by both the dialog object and the tsx object. In order to prevent the race condition between the tsx retransmission and the dialog sending a response, clone the tdata before modifying it for the dialog send response. ASTERISK-27966 #close Change-Id: Ic381004a3a212fe1d8eca0e707fe09dba4a6ab4e 2018-07-31 11:24 +0000 [20b53b5cee] Richard Mudgett * pjsip_wizard.conf.sample: Update remote_hosts description. Remove the note that SRV records are not supported as that is no longer true. ASTERISK-27993 Change-Id: Id0dd6ef40e52702be9727a2b6122216cb00bb4ca 2018-07-27 13:23 +0000 [914b9e1934] George Joseph * CI: Add optional uninstall step before installing asterisk Change-Id: I7dedf1e925eafc3a0adf01dd9dfbe44eb642aab7 2018-07-28 11:49 +0000 [93d1c34efe] Alexander Traud * BuildSystem: Enable ncurses for menuselect in Solaris 11. The check for the library ncurses should use not use the header but , because on some platforms is not a drop-in replacement for : For example in Solaris, the symbol initscr is a typedef in to a symbol which does not exist in the library ncurses (initscr32). Simply use when you link to ncurses. Furthermore in Solaris, the header is in a subdirectory /usr/include/ncurses and not available via pkg-config. ASTERISK-15331 ASTERISK-14935 ASTERISK-12382 ASTERISK-9107 Change-Id: Ife367776b0ccf17d3fefed868245376bfb93745d 2018-07-28 08:00 +0000 [ee9794d741] Joshua Colp * res_pjsip_pubsub: Use ast_true for "prune_on_boot". Change-Id: Iedec4e7390b3e821987681da24d0298632b9873d 2018-07-28 07:39 +0000 [c10b3ccd5f] Alexander Traud * BuildSystem: Enable Jansson in Solaris 11. In Solaris, the header is in /usr/include/jansson. To find Jansson even in such a subdirectory, the tool pkg-config is queried via AST_PKG_CONFIG_CHECK. For those platforms, which do not list Jansson via pkg-config, the previous check remains and is executed thereafter. Because the check for the NetBSD Editline library uses the tool pkg-config the code of PKG_PROG_PKG_CONFIG must be used. Because that check happens earlier than Jansson, it must be placed in front of that. ASTERISK-27991 Change-Id: I69ea0f379f87a50049654b2487c76ee1c04fa53a 2018-07-24 13:44 +0000 [32ce8e5cf3] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Added regex support to match_header This patch adds regular expression support to make the identify section's match_header option more useful when attempting to match complex headers like the 'To' or 'From' headers. The 'From' header has variable components such as the tag parameter that you cannot predict. To specify a regular expression put slashes around the regular expression in place of the header value. [identify-alice] type=identify endpoint=alice match_header=From: // * Added regex support to match_header so you could match a 'To' header among other complex headers. Fixed reported crashes when trying to match special headers like 'Contact'. The identify section's match_header method used code that assumed you were matching a generic header. Any other type of header could cause a crash if the header structure variant did not match the generic header enough. * Made use code that will work for any header type instead of code specific to generic headers. Other fixes while in the area: * Made check all headers of the requested name. * Added some more sanity checks to the configured identify matching options when applying the configuration. ASTERISK-27548 Change-Id: I27dfd4ff5e2259b906640e3c330681b76b4ed1f1 2018-07-27 10:46 +0000 [59f53514ce] Joshua Colp * res_pjsip_pubsub: Treat "prune_on_boot" as a yes / no. The alembic for the PJSIP subscription persistence table has the "prune_on_boot" field as a boolean. While in Asterisk we are tolerant of many different definitions of true and false in the database we only accept "yes" and "no". This change makes the field treated as a yes/no instead of an integer, thus storing "yes" and "no" instead of "1" and "0". Change-Id: Ic8b9211b36babefe78f70def6828a135a6ae7ab6 2018-07-27 08:26 +0000 [8da81a208f] Alexander Traud * res_rtp_asterisk: In Developer Mode, do not require OpenSSL. OpenSSL is an optional external library and should stay optional even when Developer Mode is configured. ASTERISK-27990 Change-Id: Ia68a4cd5474b26d45e0f43b04032ad598022853b 2018-07-26 18:54 +0000 [e097dca4d7] George Joseph * CI: Fix placement of job summary statments Change-Id: Iace19e718f4e8fb48eb7dc9f98af53b115cc45f3 2018-07-26 12:52 +0000 [e5de8a70f8] Corey Farrell * loader: Process dependencies for built-in modules. With the new module loader it was missed that built-in modules never parsed dependencies from mod->info into vectors of mod. This caused manager to be initialized before acl (named_acl). If manager.conf used any named ACL's they would not be found and result in no ACL being applied to the AMI user. In addition to the manager ACL fix this adds "extconfig" to all builtin modules which support realtime configuration. This only matters if one of the builtin modules is configured with 'preload', depending on "extconfig" will cause config.c to automatically be initialize during the preload stage. Change-Id: I482ed6bca6c1064b05bb538d7861cd7a4f02d9fc 2018-07-18 09:32 +0000 [d3809d61cb] Emmanuel BUU * res_rtp_asterisk: Avoid merging command and regular T.140 text packets When realtime text packets are to be sent, the text is accumulated in a buffer and sent regularly by a timer. It can happen that commands such as a backspace, CR, or LF get merged with regular text. This breaks some UAs. The proposed change: * We test if the current packet contains a command. If so we send the buffer immediately. * We test if the buffer contained a command. If so we send the buffer immediately. * We accumulate the text (or the command) in the buffer. ASTERISK-27970 Change-Id: Ifbe993311410fa855cb8aa4a12084db75f413462 2018-07-26 11:34 +0000 [798f049e82] George Joseph * CI: Add docker info to job summary Change-Id: I45d52005a9b692ad303c11792f226ace1e449901 2018-07-23 13:49 +0000 [7578881b3d] Corey Farrell * Build System: Create 'make install-configs' target. This target requires specifying CONFIG_SRC=path_to_configs. This can be used to install custom configs for the Asterisk build while still performing directory replacements on asterisk.conf. Modify internal INSTALL_CONFIGS so first argument requires full path to the config sources relative to Asterisk source root. Change-Id: Idcd841df3c8d5bfe23d566bb9e2e448e9df4f8ab 2018-07-25 15:33 +0000 [8ea13d62cd] Kevin Harwell * json.c: improve ast_json_to_ast_variables performance When converting from a json object to an ast variables list the conversion algorithm was doing a complete traversal of the entire variables list for every item appended from the json structure. This patch makes it so the list is no longer traversed for each new ast variable being appended. Change-Id: I8bf496a1fc449485150d6db36bfc0354934a3977 2018-07-25 05:32 +0000 [e5c0ac6a64] Joshua Colp * devicestate: Don't create topic when change isn't cached. When publishing a device state the change can be marked as being cachable or not. If it is not cached the change is just published to all interested and not stored away for later query. This was not fully taken into account when publishing in stasis. The act of publishing would create a topic for the device even if it may be ephemeral. This change makes it so messages which are not cached won't create a topic for the device. If a topic does already exist it will be published to but otherwise the change will only be published to the device state all topic. ASTERISK-27591 Change-Id: I18da0e8cbb18e79602e731020c46ba4101e59f0a 2018-07-25 10:20 +0000 [93997f9698] George Joseph * CI: Explicitly pass BRANCH_NAME to buildAsterisk and installAsterisk Change-Id: I652f4a0ea5107c778e27a78bccb67b18b0c4e087 2018-07-24 13:29 +0000 [0baf660bde] George Joseph * CI: Add options to initialize and cleanup database to runTestsuite.sh Change-Id: I352333233bab5377723bf37d490ba84fc55bc853 2018-07-25 09:07 +0000 [74cbeabb97] Corey Farrell * CI: Do not `mkdir 2`. Change-Id: Ib7377d26a6c98b38bad463f47c84f1875ac84eb7 2018-07-25 07:34 +0000 [adf3c569a2] Corey Farrell * Build System: Silence build of bundled jansson. Change-Id: I7392c79c0173057f5378010bf1fe65e300e8fc56 2018-07-25 07:13 +0000 [e4b0f09bcc] George Joseph * CI: RefDebug: Fix reference to testsuite URL Change-Id: I0ee41d95a87f0d97b01f2757012b846bcfe6443d 2018-07-24 14:28 +0000 [5537048d60] Corey Farrell * Build System: Fix bundled jansson install. Update the bundled jansson Makefile to do nothing during Asterisk install, use a target that is not phony to initiate the jansson make and install. Change-Id: I7643cc3d39af9feba8fc0da676b646efc5f8b3bb 2018-07-24 10:43 +0000 [9f3620a578] Corey Farrell * CI: Use bundled jansson if needed. Use pkg-config to determine if jansson is at least 2.11, enabled bundled version otherwise. Change-Id: Ib555a8b72ff6f6925f9280ef035caa0b91ca4bd2 2018-07-24 04:57 +0000 [1f46e2e91c] Florian Floimair * res_pjsip: Change log message from error to warning for valid use cases If a SIP MESSAGE is triggered for an endpoint that is currently not registered - and therefore has no valid contact associated - an error message was logged. Since this is a valid request in a valid use cases this is now changed to a warning, as discussed with Matt Fredrickson on the asterisk-dev mailing list. Change-Id: I55eb62d2712818a58c7532119dec288bd98cf0c0 2018-07-24 05:39 +0000 [8550fad21a] George Joseph * CI: Add --privileged flag to docker options Change-Id: If92d55f15306e55dd7091ac3c47b13ebbbb03488 2018-07-24 05:22 +0000 [f2580d037f] George Joseph * CI: Set correct user:group when publishing docs Change-Id: Ibabeb9ac730d9755cf54318d0da74771c939b86b 2018-07-23 12:21 +0000 [35d06e46ae] Richard Mudgett * core: AST_DEVMODE no longer affects ABI. Remove AST_DEVMODE from the AST_BUILDOPTS list and the AST_BUILDOPTS_SUM calculation as it no longer affects API/ABI compatibility. Change-Id: Id5bd6dfade173a53b3a49f715586b86e3fb24acb 2018-07-23 10:23 +0000 [09b258fd69] Corey Farrell * CI: Split --test-command argument. The --test-command argument has now been split, unit tests now use `--unittest-command` and the testsuite uses --testsuite-command. This will make it easier to create a script which run everything by forwarding the same arguments to all CI scripts. Change-Id: Ia54aa4848eaffbdf13175fcda40fc0b23080ad71 2018-07-20 06:20 +0000 [460ef41f7a] George Joseph * xmldoc.c: Fix dump of xml document The "xmldoc dump" cli command was simply concatenating xml documents into the output file. The resulting file had multiple "xml" processing instructions and multiple root elements which is illegal. Normally this isn't an issue because Asterisk has only 1 main xml documentation file but codec_opus has its own file so if it's downloaded and you do "xmldoc dump", the result is invalid. * Added 2 new functions to xml.c: ast_xml_copy_node_list creates a copy of a list of children. ast_xml_add_child_list adds a list to an existing list. * Modified handle_dump_docs to create a new output document and add to it the children from each input file. It then dumps the new document to the output file. Change-Id: I3f182d38c75776aee76413dadd2d489d54a85c07 2018-07-21 11:58 +0000 [fd1f74af40] Corey Farrell * CI: Fix mkdir CACHE_DIR. Change-Id: Ic9f9a61e230047836c836206731f8ff7eb3538c9 2018-07-21 11:22 +0000 [9b3267641f] Corey Farrell * build_tools/make_version: Get MAINLINE_BRANCH from .gitreview. Use .gitreview defaultbranch setting to determine the mainline branch. This allows the script to be used against other directories which might not be on the same defaultbranch. This can be used by CI scripts to report the testsuite version being used: ./build_tools/make_version ${TESTSUITE_DIR} Change-Id: Ifdad4a9d8a26138c41bc6b630ecc3e34ea1c2758 2018-07-22 10:41 +0000 [0f999a834f] Joshua Colp * sched: Make ABI compatible between dev mode and non-dev mode. In the past there was an assertion in the ast_sched_del function and in order to ensure it was useful the calling function name, line number, and filename had to be passed in. This cause the ABI to be different between dev mode and non-dev mode. This assertion is no longer present so the special logic can be removed to make it the same between them both. Change-Id: Icbc69c801e357d7004efc5cf2ab936d9b83b6ab8 2018-07-20 15:52 +0000 [aea0a0294d] Richard Mudgett * asterisk.c: Update displayed copyright year for v16 release. Change-Id: I60622731d928ee9506b1d28934095f0dc3e5306e 2018-07-16 15:08 +0000 [d2dace81d4] Corey Farrell * Enable bundling of jansson, require 2.11. Change-Id: Ib3111b151d37cbda40768cf2a8a9c6cf6c5c7cbd 2018-07-20 09:25 +0000 [c8bd8f6ce9] Corey Farrell * CI: Fix logger.conf for unit tests. Change-Id: Idea59d60eab20105de50b34f0f0d506e6ef55d5c 2018-07-19 10:34 +0000 [0f82db82cb] George Joseph * CI: Add wiki doc publish to periodics Change-Id: I29ba26134e5083bc6788ede235f1a5d4383c148a 2018-07-20 06:54 +0000 [a2a3ad2438] Joshua Colp * res_pjsip: Update default keepalive interval to 90 seconds. A change recently went in which disabled the built-in PJSIP keepalive. This defaulted to 90 seconds and kept TCP/TLS connections alive. Disabling this functionality has resulted in a behavior change of not doing keepalives by default resulting in TCP/TLS connections dropping for some people. This change makes our default keepalive interval 90 seconds to match the previous behavior and preserve it. ASTERISK-27978 Change-Id: Ibd9a45f3cbe5d9bb6d2161268696645ff781b1d6 2018-07-19 16:17 +0000 [dbffcdc561] Richard Mudgett * res_pjsip: Update endpoint transport option documentation. Change-Id: I5394fdff6a296efc8e1695a156e616acd932ae52 2018-07-19 13:27 +0000 [709b795cb0] Richard Mudgett * pjsip_resolver.c: Use replacement function * Use the replacement function ast_sip_push_task_wait_servant() instead of the deprecated ast_sip_push_task_synchronous(). Change-Id: I145b550ba7054640c7faa3b644e63137f505c612 2018-07-18 17:13 +0000 [c40412bd13] Corey Farrell * contrib: Update systemd README.txt. Mention need to compile Asterisk with systemd development package installed. ASTERISK-27968 Change-Id: Ib3a973be403c61cbe09572b0f912fb1aa1bff026 2018-07-18 14:19 +0000 [0b3bc4852f] Joshua Colp * Update mainline version for the 16 branch. Change-Id: I4d36277d10335349d83ae218fa10fee99c3e4c14 2018-07-18 14:18 +0000 [e7a76ffee1] Joshua Colp * Update ARI version for master/16. ARI goes from 3.0.0 to 4.0.0 Change-Id: I0649fa34926dc4fc89a166f1d2e3bbd965ef9ebe 2018-05-29 09:31 +0000 [fe78d374b0] Alexander Traud * pjproject_bundled: Repair ./configure --with-ssl=PATH. Previously, Asterisk did not tell its bundled PJProject about this configure parameter. Therefore, PJProject used the platform provided OpenSSL always. ASTERISK-27880 Change-Id: Iea545aec854dd0e2c061c69bb118a76ce56c5dc6 2018-05-10 13:11 +0000 [5bacde37a2] Ben Ford * res_rtp_asterisk: Add support for sending NACK requests. Support has been added for receiving a NACK request and handling it. Now, Asterisk can detect when a NACK request should be sent and knows how to construct one based on the packets we've received from the remote end. A buffer has been added that will store out of order packets until we receive the packet we are expecting. Then, these packets are handled like normal and frames are queued to the core like normal. Asterisk knows which packets to request in the NACK request using a vector which stores the sequence numbers of the packets we are currently missing. If a missing packet is received, cycle through the buffer until we reach another packet we have not received yet. If the buffer reaches a certain size, send a NACK request. If the buffer reaches its max size, queue all frames to the core and wipe the buffer and vector. According to RFC3711, the NACK request must be sent out in a compound packet. All compound packets must start with a sender or receiver report, so some work was done to refactor the current sender / receiver code to allow it to be used without having to also include sdes information and automatically send the report. Also added additional functionality to ast_data_buffer, along with some testing. For more information, refer to the wiki page: https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements ASTERISK-27810 #close Change-Id: Idab644b08a1593659c92cda64132ccc203fe991d 2018-07-18 11:12 +0000 [59323121f3] Joshua Colp * res_sorcery_config: Allow configuration section to be used based on name. A problem I've seen countless times is a global or system section for PJSIP not getting applied. This is inevitably the result of the "type=" line missing. This change alleviates that problem. The ability to specify an explicit section name has been added to res_sorcery_config. If the configured section name matches this and there are no unknown things configured the section is taken as being for the given type. Both the PJSIP "global" and "system" types now support this so you can just name your section "global" or "system" and it will be matched and used, even without a "type=" line. ASTERISK-27972 Change-Id: Ie22723663c1ddd24f869af8c9b4c1b59e2476893 2018-07-17 05:24 +0000 [134e2f0ddc] Joshua Colp * module: Remove deprecated modules and update support levels. I have removed the STATIC_BUILD option immediately as it has not been maintained in many years and is non-functional. ASTERISK-27965 Change-Id: I64783d017b86dba9ee3c7bcfb97e59889a3f76d7 2018-07-18 11:34 +0000 [94dd0544e5] Chris-Savinovich * stasis: Improve message type "Use of before/init after destruction" Fixes issue where error msg "Use of before/init after destruction" was being printed on disabled messages in dev mode. With this fix if message is disabled a warning will print. ASTERISK-25548 Change-Id: Ie0d866d1cbc60c16dbef08bc65e99505c3c1adfa 2018-07-17 14:12 +0000 [993ba84cd3] Nick French * SRTP: Lower SDES key lifetime minimum to 2^20 SRTP SDES key lifetime support was added in ASTERISK_17899. In that addition, the minimum key lifetime to be accepted was set at the 10 hours @ 20ms/packet = 1800000 packets. The firmware in the obi1xx ATA uses a hardcoded lifetime of 2^20 packets. Lower the limit to 2^20 to support a wider field of clients. ASTERISK-27967 #close Change-Id: I81a0703c595a0c9101dfdf02300149a3cc39bf94 2018-07-17 11:09 +0000 [fcc0a6fe8a] George Joseph * CI: Fix merge strategy Change-Id: I5e3fb6adfa6cbf694c0deecf02e3879297b0c12e 2018-07-17 10:41 +0000 [3e5a6a6cfc] George Joseph * CI: Fix regex in daily and ref_debug jobs Change-Id: Icf2e67818b2155a158d2390b138613e1f653ea92 2018-07-17 09:09 +0000 [0e8976116f] Nick French * res_pjsip: Remove spurious error logging when printing silent headers Asterisk patched the pjproject source to avoid crashing when pjproject sip_msg headers are encountered with NULL vptr's, but the patch also output error messages for some valid headers which simply did not need to be added to the message itself, such as hidden route headers. pjproject has since applied a similar patch to their baseline to avoid crashes, but their version also avoids the spurious error logging. Lets use their patch instead. ASTERISK-27961 #close Change-Id: I2ddbd82c8da10e0dcc9807a48089d1f3c2d6e389 2018-07-17 10:15 +0000 [fa333dedd0] George Joseph * CI: Add pre-build merge back in as RECURSIVE Change-Id: I0ff1730ef4a4f0ac9f18ccc9bc0dfe7a782f57a8 2018-07-17 09:01 +0000 [2553255ace] George Joseph * CI: Remove pre-build merge from gates and checks Change-Id: Ibc151f63dcec4db847915c2f3cbe5b467dd59574 2018-07-17 07:13 +0000 [524f900382] George Joseph * CI: Fix logic inversion in runTestsuite Change-Id: I56399aa384468f45494c2c3650420563a0b6efe1 2018-07-17 04:03 +0000 [0af4a558da] George Joseph * CI: Add teardownRealtime Change-Id: I2fe55c38607eaec2fbf69ef23a5019e0c443a64b 2018-07-15 13:58 +0000 [49f83a7490] Corey Farrell * loader: Fix startup issues. * Merge the preload and load stages, use load ordering to try preload's first. This fixes an issue where `preload=res_config_curl` would fail unless res_curl and func_curl were also preloaded. Now it is only required that those modules be loaded during startup: autoload or regular load is good enough. * The configuration option `require` and `preload-require` were only effective if the modules failed to load. These options will now abort Asterisk startup if required modules fail to reach the 'Running' state. * Missing or invalid 'module.conf' did not prevent startup. Asterisk doesn't do anything without modules so this a fatal error. Change-Id: Ie4176699133f0e3a823b43f90c3348677e43a5f3 2018-07-16 13:30 +0000 [a9cef123d9] George Joseph * CI: Prevent Jenkins from triggering jobs back to itself Change-Id: I9cae8bb3d1a2cea335d3ccd88d471832549666fd 2018-07-13 18:26 +0000 [5febc995df] Richard Mudgett * Build: Fix modules getting their optimization setting overridden. Asterisk modules that use PJPROJECT services have their compiler optimization and possibly their symbolic debug options overridden by the PJPROJECT configure script selected settings. * We need to filter-out any -O and -g options in PJ_CFLAGS before echoing out the result so the PJPROJECT_INCLUDE variable does not override the Asterisk module settings when using bundled PJPROJECT. NOTE: This patch only has an effect when using bundled PJPROJECT. ASTERISK-27563 Change-Id: If124169735ecf572ad1535cd43bff94cb44d5b30 2018-07-16 11:08 +0000 [d15ef68892] George Joseph * CI: runUnittests: loop a few times on waitfullybooted Change-Id: Icebc0d013896f3b2a7214945cac60647435c1651 2018-07-16 10:49 +0000 [252c4284df] George Joseph * CI: Add realtime checks to dailies Change-Id: I6dc8ab1679b3505c6dde1d47e1b9276df47814f8 2018-07-16 09:13 +0000 [1a52ab70c7] George Joseph * CI: Add weekly REF_DEBUG testsuite run Change-Id: I5b581d0a0d1d1bb9b38961d40b112fb448355037 2018-07-16 08:44 +0000 [9633e9dfd7] George Joseph * CI: Fix bad reporting of status by the verification pub Change-Id: I6f31a130b3ba0187149aaaa2ce94195a79e0f6a6 2018-07-16 07:16 +0000 [b8d75bbb37] George Joseph * CI: Make build tag an acceptable docker name Change-Id: I3a4b8a4a9c488ddabf9daf651dc1334222056f38 2018-07-13 22:44 +0000 [0885ab8afc] Corey Farrell * Fix declaration of PBX_CURL for ./configure --without-libcurl When `--without-libcurl` is used PBX_CURL is never set. Set default value 0 so the proper value is passed to menuselect. Change-Id: I03e2842a00899cbca2dbde52bb1f6636d54bae1e 2018-07-10 13:28 +0000 [34f3fe9552] George Joseph * app_confbridge: Use the SDP 'label' attribute to correlate users Previously, the msid "label" attribute was used to correlate participant info but because streams could be reused, the msid wasn't being updated correctly when someone left the bridge and another joined. Now, instead of looking for the msid attribute on a channel's streams, app_confbridge sets an "SDP:LABEL" attribute on the stream which res_pjsip_sdp_rtp looks for. If it finds it, it adds a "label" attribute to the current sdp. Change-Id: I6cbaa87fb59a2e0688d956e72d2d09e4ac20d5a5 2018-07-13 06:56 +0000 [e8727fcfa8] George Joseph * CI: Add daily periodics to CI Change-Id: I26933e73928e091ae72e838c02f4f2ec7c3983d6 2018-07-11 11:57 +0000 [e19080a184] Alexander Traud (License 6520) * Bundled PJPROJECT: Disable internal connection oriented keep-alive. Turn off the periodic sending of CRLNCRLN. Default is on (90 seconds), which conflicts with the global section's keep_alive_interval option in pjsip.conf. patches: pjsip_keep_not_alive.patch submitted by Alexander Traud (License 6520) ASTERISK-27347 Change-Id: I6a197f56e1830d3b7e5ec70f17025840a290b057 2018-07-09 04:42 +0000 [1445384699] Torrey Searle * res_pjsip_sdp_rtp: include ice in ANSWER only if offered Keep track if ICE candidates were in the SDP offer & only put them in the corresponding SDP answer if the offer condaind ICE candidates ASTERISK-27957 #close Change-Id: Idf2597ee48e9a287e07aa4030bfa705430a13a92 2018-07-12 16:34 +0000 [33a84745d0] George Joseph * CI: Add Asterisk Gates Change-Id: I7e2467f9120812551238d8005deb97f965279205 2018-07-11 15:55 +0000 [65b002ab8f] George Joseph * CI: Remove duplicate checkout Change-Id: If5f925b4c4ed7000b153f3ed8386ce2140c886f8 2018-07-11 15:09 +0000 [ba8f8a2813] George Joseph * CI: Update cleanup steps and permissions Change-Id: I7ca92935979d94845af8e1caf4468cbd6209b7de 2018-07-11 14:54 +0000 [ad36c4ba9b] George Joseph * CI: Fix log artifact paths Change-Id: I55136de8f4d9c3b56bd4d054306a187bb04a4b7d 2018-07-11 14:45 +0000 [4842af6364] George Joseph * CI: Remove CleanBeforeCheckout option for testsuite Change-Id: I510231c9087f7be5272b8ef3f3223eadaaffb754 2018-07-11 14:00 +0000 [3dfc37c60a] George Joseph * CI: Move gates into source repo Change-Id: If028ede5f3b127fa274c63ce166bc04ad7c1e5db 2018-07-11 06:14 +0000 [b302ee6bd5] George Joseph * CI: Initial commit for moving CI into source repo Create tests/CI directory and add files used by Jenkins to build and test Asterisk. With this commit, Jenkins will run the Asterisk Unit Tests using the Jenkinsfile at tests/CI/unittests.jenkinsfile. Bash scripts to do the actual building and testing are also in the same directory. Output is placed in tests/CI/output so that directory has been added to .gitignore. Change-Id: I9448065465e6de2b878634510ace8fd1ef378608 2018-07-06 17:00 +0000 [f7137e1230] Joshua Elson * res_parking: Add dialplan function for lot channel This commit adds a new function to res_parking. This function, PARK_GET_CHANNEL allows the retrieval of the channel name of the channel occupying the parking slot. ASTERISK-22825 #close Change-Id: Idba6ae55b8a53f734238cb3d995cedb95c0e7b74 2018-06-23 01:33 +0000 [10de9fcbf1] Alexander Traud * chan_ooh323: IPTOS_MINCOST is not defined on Solaris. Furthermore, is required for SIOCGIF*. ASTERISK-27938 Change-Id: Idc9153ece769944765b66122efb11728d8d8ebde 2018-07-06 15:05 +0000 [5bb874ee09] Kevin Harwell * res_pjsip_session: sdp group:BUNDLE attribute being truncated When setting/appending the media id's to the bundle group attribute a '-1' was being passed to the 'ast_str_set/append' function for the 'max_len' parameter. This essentially capped the length of the string to what it was originally allocated with. In this case 64 bytes. This patch makes it so a '0' is passed as in for the 'max_len', which means "no maximum length". ASTERISK-27955 #close Change-Id: Iec565df6600401d54a502854a53d19bb4cc34876 2018-07-05 16:02 +0000 [96abe79ddf] Alexei Gradinari * res_pjsip_pubsub: segfault in function publish_expire The function pubsub_on_rx_publish_request incorrectly uses of AST_SCHED_REPLACE_UNREF. The AST_SCHED_REPLACE_UNREF should unref old '_data'. Because of this, there may be a double unref of variable 'publication' when ast_sched_del is unsuccessful that leads to use after free of the 'publication' in publish_expire. ASTERISK-27956 #close Change-Id: Ie0f0cfc7e036953d890b188656010b325a5cdc82 2018-07-06 09:04 +0000 [c1e49720fa] George Joseph * test.c: Make output jUnit compatible Separate "name" into "classname" and "name". Use '.' for classname separator instead of '/'. Prefix reserved words with '_'. Wrap output with a top-level "testsuites" element. Change-Id: Iec1a985eba1c478e5c1d65d5dfd95cb708442099 2018-07-06 07:57 +0000 [8f42447c68] George Joseph * res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint A new option 'suppress_q850_reason_headers' has been added to the endpoint object. Some devices can't accept multiple Reason headers and get confused when both 'SIP' and 'Q.850' Reason headers are received. This option allows the 'Q.850' Reason header to be suppressed. The default value is 'no'. ASTERISK-27949 Reported-by: Ross Beer Change-Id: I54cf37a827d77de2079256bb3de7e90fa5e1deb1 2018-07-05 15:43 +0000 [c9f8e068ed] Joshua Colp * res_pjsip_t38: Decline T.38 stream on failure case. When negotiating an incoming T.38 stream the code incorrectly returned failure instead of a decline for the stream when a problem occurred or the configuration didn't allow it. This resulted in SDP offers being rejected with a 488 response in all cases, even when another valid stream was present. This change makes it so the stream is now declined. If no streams are accepted a 488 response is sent while if at least one stream is accepted all the declined streams are, well, declined. ASTERISK-27763 Change-Id: I88bcf793788c412a9839d111a5c736bf6867807c 2018-07-02 18:43 +0000 [d5db664d70] Richard Mudgett * res_pjsip_t38.c: Be smarter about how we respond when T.38 is disabled. We were blindly responding with AST_T38_REFUSED when ANY T.38 control frame came accross the bridge. This causes T.38 Gateway to get confused and the T.38 session to get in a strange state. * Made the T.38 framehook only respond to request frames and ignore response frames. ASTERISK-27657 ASTERISK-27080 Change-Id: I5fb5967c7d1efb30a7ff375f82887ca82a55b05b 2018-07-03 12:10 +0000 [0aff1a278e] Richard Mudgett * res_pjsip/pjsip_transport_management.c: Fix deadlock with transport keep alive. Using the keep_alive_interval option can result in a deadlock between the pjproject transport manager group lock and the monitored transports ao2 container lock. The pjproject transport manager group lock has to be superior in the locking order to the monitored transports ao2 container lock because of pjproject callbacks called when already holding the group lock. The lock inversion happens when Asterisk attempts to send a keep alive packet over the reliable transports. * Made keepalive_transport_thread() iterate over the monitored transports container rather than use the ao2_callback() method. This avoids holding the container lock when sending the keep alive packet. ASTERISK-26686 Change-Id: I5d5392a52e698bbe41a93f7d8e92bf0e61fe3951 2018-07-02 18:44 +0000 [de5144e751] Joshua Colp * pjsip: Clarify certificate configuration for Websocket. The Websocket transport uses the built-in HTTP server. As a result the TLS configuration is done in http.conf and not in pjsip.conf. This change adds a warning if this is configured in pjsip.conf and also clarifies in the sample configuration file. Change-Id: I187d994d328c3ed274b6754fd4c2a4955bdc6dd9 2018-06-23 04:50 +0000 [804d931f27] Alexander Traud * bridge_softmix_binaural: Enable FFTW3 in Solaris 11. ASTERISK-27939 Change-Id: Ice5640e08385a64a0a6555deaccd91e86bca154f 2018-06-29 18:28 +0000 [1aa45ffdfa] Richard Mudgett * res_pjsip_t38.c: Fix crash by ignoring 1xx messages. If we initiated a T.38 reINVITE, we would crash if we received any other 1xx response message except 100 if it were followed by a 200 response. * Made ignore any 1xx response so we do not close out the T.38 negotiation too early. For good measure we'll now accept any 2xx response as acceptance of the reINVITE T.38 offer. ASTERISK-27944 Change-Id: I0ca88aae708d091db7335af73f41035a212adff4 2018-07-01 13:54 +0000 [f30ebd3823] Joshua Colp * res_pjsip_pubsub: Hold module reference for publications. Incoming publications need to ensure that the module remains loaded for the lifetime of them. This is now done by holding a reference to the module while the publication exists. This mirrors that of inbound subscriptions. ASTERISK-27783 Change-Id: Ia98c95a15e11af25728d5fb3e56e12cda0cfc7c0 2018-05-21 07:24 +0000 [9d3f3a4b0a] Robert Mordec * app_confbridge: Bridge and announcers not removed if conference ends quickly If a conference is ended very quickly after it was created (i.e., the first user immediately hangs up) then the conference bridge and announcer channels are not removed. When a conference is created, the push_announcer() function is added to the playback queue task processor and the conference object reference is bumped. If a conference is ended while the push_announcer() function is still going then the ao2_cleanup(conference) at the end of push_announcer() will call the destructor function - destroy_conference_bridge(). The destroy_conference_bridge() function will then add the hangup_playback() task to the playback queue and will wait for it to end. Since it is already a current task of the playback queue it will wait forever. This patch makes the conference thread call push_announcer() directly. This way the conference object reference bump is not needed. Since the playback queue task processor is only used by the conference thread itself, there is no danger of trying to play announcements before the announcer is pushed to the bridge. ASTERISK-27870 #close Change-Id: I947a50fb121422d90fd1816d643a54d75185a477 2018-06-21 00:28 +0000 [db02218db2] Matthew Fredrickson * main/cdr.c: Alleviate CDR deadlock There is a rare case (do to the infrequent timing involved) where CDR submission threads in batch mode can deadlock with a currently running CDR batch process. This patch should remove the need for holding the lock in the scheduler and should clean a few code paths up that inconsistently submitted new work to the CDR batch processor. ASTERISK-27909 Change-Id: I6333e865db7c593c102c2fd948cecdb96481974d Reported-by: Denis Lebedev 2018-06-25 22:08 +0000 [4b9bf4f5e0] Kirsty Tyerman * pbx_dundi: reordered unloading of module pbx_dundi Destroy scheduler after peers are pruned to stop dundi crashing when unloading module. ASTERISK-26987 Reported-by: Kirsty Tyerman Change-Id: Ic12e562cd90d8d813a9e97f302045091f59e3c05 2018-06-28 12:07 +0000 [7a238fe74d] Richard Mudgett * AMI SendText action: Fix to use correct thread to send the text. The AMI action was directly sending the text to the channel driver. However, this makes two threads attempt to handle media and runs afowl of CHECK_BLOCKING. * Queue a read action to make the channel's media handling thread actually send the text message. This changes the AMI actions success/fail response to just mean the text was queued to be sent not that the text actually got sent. The channel driver may not even support sending text messages. ASTERISK-27943 Change-Id: I9dce343d8fa634ba5a416a1326d8a6340f98c379 2018-06-25 07:37 +0000 [e3585353f6] George Joseph * res_pjsip_messaging: Allow application/* for in-dialog MESSAGEs In addition to text/* content types, incoming_in_dialog_request now accepts application/* content types. Also fixed a length issue when copying the body text. It was one character short. ASTERISK-27942 Change-Id: I4e54d8cc6158dc47eb8fdd6ba0108c6fd53f2818 2018-06-25 15:42 +0000 [5f12e2bd07] George Joseph * app_confbridge: Move participant info code to confbridge_manager. With the participant info code in app_confbridge, we were still in the process of adding the channel to the bridge when trying to send an in-dialog MESSAGE. This caused 2 threads to grab the channel blocking flag at the same time. To mitigate this, the participant info code was moved to confbridge_manager so it runs after all channel/bridge actions have finished. Change-Id: I228806ac153074f45e0b35d5236166e92e132abd 2018-06-18 21:22 +0000 [880fbff6b7] George Joseph * res_pjsip_session: Add ability to accept multiple sdp answers pjproject by default currently will follow media forked during an INVITE on outbound calls if the To tag is different on a subsequent response as that on an earlier response. We handle this correctly. There have been reported cases where the To tag is the same but we still need to follow the media. The pjproject patch in this commit adds the capability to sip_inv and also adds the capability to control it at runtime. The original "different tag" behavior was always controllable at runtime but we never did anything with it and left it to default to TRUE. So, along with the pjproject patch, this commit adds options to both the system and endpoint objects to control the two behaviors, and a small logic change to session_inv_on_media_update in res_pjsip_session to control the behavior at the endpoint level. The default behavior for "different tags" remains the same at TRUE and the default for "same tag" is FALSE. Change-Id: I64d071942b79adb2f0a4e13137389b19404fe3d6 ASTERISK-27936 Reported-by: Ross Beer 2018-06-21 11:45 +0000 [675e2ddb49] Alexander Traud * uuid: Enable UUID in Solaris 11. ASTERISK-27933 Reported by: bautsche Change-Id: I9b8362824efbfb2a16981e46e85f7c8322908c49 2018-06-13 02:25 +0000 [184b375b41] Kristian F. Høgh * app_queue: Add option for predial handlers on caller and callee channels Add predial handler support to app_queue. app_dial (ASTERISK_19548) and app_originate (ASTERISK_26587) have the ability to execute predial handlers on caller and callee channels. This patch adds predial handlers to app_queue and uses the same options as Dial and Originate (b and B). The caller routine gets executed when the caller first enters the queue. The callee routine gets executed for each queue member when they are about to be called. ASTERISK-27912 Change-Id: I5acf5c32587ee008658d12e8a8049eb8fa4d0f24 2018-06-21 16:39 +0000 [cad50d6dbf] Richard Mudgett * VECTOR: Passing parameters with side effects to macros is dangerous. * Fix several instances where we were bumping a ref in the parameter and then unrefing the object if it failed. The way the AST_VECTOR_APPEND() and AST_VECTOR_REPLACE() macros are implemented means if it fails the new value was never evaluated. Change-Id: I2847872a455b11ea7e5b7ce697c0a455a1d0ac9a 2018-06-20 16:57 +0000 [aaaa6f4a4b] Richard Mudgett * bridge_softmix.c: Fix memory leak. Made release the media_types vector in softmix_bridge_stream_topology_changed(). Change-Id: Ide3f47e379b614879220dfeeb13843f9f2b177b5 2018-06-21 11:22 +0000 [bfeded7e62] Alexander Traud * smsq: Remove an left-over special case for Solaris. Actually, this case was never needed because the check below does the same. Change-Id: Ia2fca4ba6c58c644a8b7cb2d9db8539728c14ffb 2018-06-21 11:17 +0000 [bbea9cfc3b] Alexander Traud * res_http_post: Enable GMime in Solaris 11. Change-Id: Ie434541f18f894c751d2e44bcb3efb3cac626019 2018-06-21 05:08 +0000 [7f3882c8e9] Alexander Traud * codecs/ilbc: Compile in Solaris 11. The symbol FS is the sampling frequency. That symbol is not used in Asterisk at all and was a copy-and-paste of the iLBC reference code from the IETF RFC. However, in Solaris, that symbol is defined by another header already. To compile in Solaris, that symbol has to go. Change-Id: I91ddbe5be7c00069c3a25abd5f58d7b2f04c51b1 2018-06-21 05:07 +0000 [9704c424f5] Alexander Traud * chan_oss: Compile in Solaris 11. M_READ existed already and was conflicting in name. Change-Id: I02108e07ae7d2dc314fe1e6c706c17731095a3e4 2018-06-21 05:04 +0000 [6f47b84fbd] Alexander Traud * func_env: Compile in Solaris 11. Change-Id: Idc9b36720f3d29c90a35a6a1ae79a7f9e1aaf50e 2018-06-21 05:01 +0000 [a5c53bd323] Alexander Traud * utils: Avoid an unused variable in Solaris 11. With ./configure --enable-dev-mode[=noisy], the build fails because every warning gets an error. Therefore, Asterisk has to be free of warnings and this variable must go. Change-Id: I63dd2bc4833b9bdb04602f83422d16caf289d46a 2018-06-21 04:59 +0000 [92109cf496] Alexander Traud * BuildSystem: Enable ./configure in Solaris 11. ASTERISK-27931 Change-Id: If298ce7f03be227a3687b9c20d382c9c55a72404 2018-06-20 13:24 +0000 [d6721e1e4c] Alexander Traud * BuildSystem: Enable autotools in Solaris 11. Because this was the last operating system which required a special case, a version appended to the autotools, the whole version stuff is removed by this change. This simplifies the script ./bootstrap.sh. Hopefully, this gives even broader platform compatibility. ASTERISK-27929 ASTERISK-27926 Change-Id: Id4cf433a1a7fa861d0210e1a2e16ca592b49fd5a 2018-06-13 11:33 +0000 [eb8bbe660e] Richard Mudgett * channel.c: Make CHECK_BLOCKING() save thread LWP id for messages. * Removed an unnecessary call to ast_channel_blocker_set() in __ast_read(). ASTERISK-27625 Change-Id: I342168b999984666fb869cd519fe779583a73834 2018-06-13 16:41 +0000 [da54605b8a] Richard Mudgett * ARI POST DTMF: Make not compete with channel's media thread. There can be one and only one thread handling a channel's media at a time. Otherwise, we don't know which thread is going to handle the media frames. ASTERISK-27625 Change-Id: I4d6a2fe7386ea447ee199003bf8ad681cb30454e 2018-06-13 13:05 +0000 [7d874c1af7] Richard Mudgett * AMI PlayDTMF Action: Make not compete with channel's media thread. There can be one and only one thread handling a channel's media at a time. Otherwise, we don't know which thread is going to handle the media frames. ASTERISK-27625 Change-Id: Ia341f1a6f4d54f2022261abec9021fe5b2eb4905 2018-06-12 14:09 +0000 [080508d2eb] Richard Mudgett * channel.c: Fix usage of CHECK_BLOCKING() The CHECK_BLOCKING() macro is used to indicate if a channel's handling thread is about to do a blocking operation (poll, read, or write) of media. A few operations such as ast_queue_frame(), soft hangup, and masquerades use the indication to wake up the blocked thread to reevaluate what is going on. ASTERISK-27625 Change-Id: I4dfc33e01e60627d962efa29d0a4244cf151a84d 2018-06-18 18:04 +0000 [0989b63047] Richard Mudgett * autoservice: Don't start channel autoservice if the thread is a user interface. Executing dialplan functions from either AMI or ARI by getting a variable could place the channel into autoservice. However, these user interface threads do not handle the channel's media so we wind up with two threads attempting to handle the media. There can be one and only one thread handling a channel's media at a time. Otherwise, we don't know which thread is going to handle the media frames. ASTERISK-27625 Change-Id: If2dc94ce15ddabf923ed1e2a65ea0ef56e013e49 2018-06-18 16:07 +0000 [91c3ac19cb] Richard Mudgett * Dialplan functions: Fix some channel autoservice misuse. * Fix off nominal paths leaving the channel in autoservice. * Remove unnecessary start/stop channel autoservice. * Fix channel locking around a channel datastore search. Change-Id: I7ff2e42388064fe3149034ecae57604040b8b540 2018-06-19 10:43 +0000 [720c2d1da2] Richard Mudgett * Fix some doxygen and curly placement. Change-Id: I9a784a7c804120a8fa826c2a4cb9957e4b0b2fc8 2018-06-18 13:17 +0000 [c1686b8b3e] Richard Mudgett * tcptls.h: Remove redundant SSL_CTX typedef. It is invalid to typedef something more than once. Though not all gcc compilers on different OS's complain about it. Change-Id: I5a7d4565990c985822d61ce75bde0b45f9870540 2018-06-12 15:13 +0000 [a470bb9e27] Richard Mudgett * channel: Fix some more unprotected channel flag setting. Change-Id: I34c3b1201b1de539945bcfdcb264fff30332d48c 2018-06-15 15:21 +0000 [8732d62334] Matthew Fredrickson * menuselect/menuselect_curses: Resolves sprintf usage error Acccording to the man page for sprintf, using the same buffer for output as one used as an input yields undefined behavior. This patch should work around this problem. ASTERISK-27903 Reported-by: Alexander Traud Change-Id: I2213dcb454aff26457e2e4cc9c6821276463ae3a 2018-06-12 09:30 +0000 [4c7ab73468] Sam Wierema * app_mp3: remove 10 seconds of silence after mp3 playback This patch changes the way asterisk polls output from mpg123, instead of waiting for 10 seconds(when playing an http url) it now uses a timeout of one second and iterates 10 times using this same timeout. The main difference is that for every timeout asterisk receives it now checks if mpg123 is still running before poll again. ASTERISK-27752 Change-Id: Ib7df8462e3e380cb328011890ad9270d9e9b4620 2018-06-13 04:40 +0000 [9d7958672b] Alexander Traud * tests/test_utils: Repair ./configure --with-ssl=PATH. ASTERISK-27914 Change-Id: Ibcab8f556ee77776f203cff8b06d776a673b7bc4 2018-06-04 20:31 +0000 [e1908ea484] Kirsty Tyerman * chan_iax2: better handling for timeout and EINTR The iax2 module is not handling timeout and EINTR case properly. Mainly when there is an interupt to the kernel thread. In case of ast_io_wait recieves a signal, or timeout it can be an error or return 0 which eventually escapes the thread loop, so that it cant recieve any data. This then causes the modules receive queue to build up on the kernel and stop any communications via iax in asterisk. The proposed patch is for the iax module, so that timeout and EINTR does not exit the thread. ASTERISK-27705 Reported-by: Kirsty Tyerman Change-Id: Ib4c32562f69335869adc1783608e940c3535fbfb 2018-05-31 16:22 +0000 [e7a7506f9c] George Joseph * app_confbridge: Enable sending events to participants ConfBridge can now send events to participants via in-dialog MESSAGEs. All current Confbridge events are supported, such as ConfbridgeJoin, ConfbridgeLeave, etc. In addition to those events, a new event ConfbridgeWelcome has been added that will send a list of all current participants to a new participant. For all but the ConfbridgeWelcome event, the JSON message contains information about the bridge, such as its id and name, and information about the channel that triggered the event such as channel name, callerid info, mute status, and the MSID labels for their audio and video tracks. You can use the labels to correlate callerid and mute status to specific video elements in a webrtc client. To control this behavior, the following options have been added to confbridge.conf: bridge_profile/enable_events: This must be enabled on any bridge where events are desired. user_profile/send_events: This must be set for a user profile to send events. Different user profiles connected to the same bridge can have different settings. This allows admins to get events but not normal users for instance. user_profile/echo_events: In some cases, you might not want the user triggering the event to get the event sent back to them. To prevent it, set this to false. A change was also made to res_pjsip_sdp_rtp to save the generated msid to the stream so it can be re-used. This allows participant A's video stream to appear as the same label to all other participants. Change-Id: I26420aa9f101f0b2387dc9e2fd10733197f1318e 2018-06-13 05:06 +0000 [b01fc2ef3d] Alexander Traud * res_rtp_asterisk: Instead of ./configure use OPENSSL_NO_SRTP. Previously, Asterisk used its script ./configure, to test whether OpenSSL was built with no-srtp (or was simply too old). However, the header file is the preferred way to detect the local configuration of OpenSSL. As a positive side-effect the script ./configure does not interleave the detection of the Open Settlement Protocol Toolkit (OSPTK) with the detection of individual features of OpenSSL anymore. Change-Id: I3c77c7b00b2ffa2e935632097fa057b9fdf480c0 2018-06-05 04:36 +0000 [41175caee0] Joshua Colp * rtp: Don't negotiate dynamic codecs using payload. In Asterisk there are some dynamic codecs that have a fixed payload number. This number was being improperly used to negotiate the codec, instead of using the name and sample rate. This could result in the wrong payload number being negotiated for a codec. This change makes it so that only static payloads will be negotiated using their payload number. ASTERISK-27848 Change-Id: Ia865830170fd3f808cdb33104f3d4c4ffdc77570 2018-04-16 14:13 +0000 [b649682caa] Sean Bright * AST-2018-007: iostreams potential DoS when client connection closed prematurely Before Asterisk sends an HTTP response (at least in the case of errors), it attempts to read & discard the content of the request. If the client lies about the Content-Length, or the connection is closed from the client side before "Content-Length" bytes are sent, the request handling thread will busy loop. ASTERISK-27807 Change-Id: I945c5fc888ed92be625b8c35039fc6d2aa89c762 2018-04-30 17:38 +0000 [81ac32a85f] Richard Mudgett * AST-2018-008: Fix enumeration of endpoints from ACL rejected addresses. When endpoint specific ACL rules block a SIP request they respond with a 403 forbidden. However, if an endpoint is not identified then a 401 unauthorized response is sent. This vulnerability just discloses which requests hit a defined endpoint. The ACL rules cannot be bypassed to gain access to the disclosed endpoints. * Made endpoint specific ACL rules now respond with a 401 unauthorized which is the same as if an endpoint were not identified. The fix is accomplished by replacing the found endpoint with the artificial endpoint which always fails authentication. ASTERISK-27818 Change-Id: Icb275a54ff8e2df6c671a6d9bda37b5d732b3b32 2018-06-08 15:02 +0000 [0743ad6422] Alexander Traud * res_rtp_asterisk: Allow OpenSSL configured with no-deprecated. Furthermore, allow OpenSSL configured with no-dh. Additionally, this change allows auto-negotiation of the elliptic curve/group for servers, not only with OpenSSL 1.0.2 but also with OpenSSL 1.1.0 and newer. This enables X25519 (since OpenSSL 1.1.0) and X448 (since OpenSSL 1.1.1) as a side-effect. ASTERISK-27910 Change-Id: I5b0dd47c5194ee17f830f869d629d7ef212cf537 2018-06-08 06:01 +0000 [99aed78078] Alexander Traud * crypto.h: Repair ./configure --with-ssl=PATH. ASTERISK-27908 Change-Id: Iac49d9f82faeb8a4611c6805906bd6d650b1b1d8 2018-06-08 04:03 +0000 [ca682f0030] Alexander Traud * res_crypto: Allow OpenSSL configured with no-deprecated. The header had to be included explicitly. ASTERISK-27906 Change-Id: I41743801eed998c039d73db7a0762d104a4f75b2 2018-06-08 02:41 +0000 [234bf4b7ff] Alexander Traud * res_srtp: Repair ./configure --with-ssl=PATH. ASTERISK-27905 Change-Id: Ibb7dc148a0048f4f9c3b12937ba4240dff0d15e2 2018-05-31 10:25 +0000 [65ff2f057a] Alexei Gradinari * func_odbc: NODATA if SQLNumResultCols returned 0 columns on readsql The functions acf_odbc_read/cli_odbc_read ignore a number of columns returned by the SQLNumResultCols. If the number of columns is zero it means no data. In this case, a SQLFetch function has to be not called, because it will cause an error. ASTERISK-27888 #close Change-Id: Ie0f7bdac6c405aa5bbd38932c7b831f90729ee19 2018-06-07 08:46 +0000 [1725eaf8fb] George Joseph * chan_pjsip: Register for "BEFORE_MEDIA" responses chan_pjsip wasn't registering for "BEFORE_MEDIA" responses which meant it was not updating HANGUPCAUSE for 4XX responses. If the remote end sent a "180 Ringing", then a "486 Busy", the hangup cause was left at "180 Normal Clearing". * Removed chan_pjsip_incoming_response from the original session supplement (which was handling only "AFTER MEDIA") and added it to a new session supplement which accepts both "BEFORE_MEDIA" and "AFTER_MEDIA". * Also cleaned up some cleanup code in load module. ASTERISK-27902 Change-Id: If9b860541887aca8ac2c9f2ed51ceb0550fb007a 2018-06-07 07:19 +0000 [9f2eb17005] Alexander Traud * ooh323c: GCC 8.1 warned about output truncated before terminating nul. ASTERISK-27901 Change-Id: I5a8e894f4924ef52e3094f6870656a559d67f3d7 2018-06-05 13:43 +0000 [7af5e86821] Alexei Gradinari * pjsip_options: show/reload AOR qualify options using CLI Currentrly pjsip_options code does not handle the situation when the AOR qualify options were changed. Also there is no way to find out what qualify options are using. This patch add CLI commands to show and synchronize Aor qualify options: pjsip show qualify endpoint Show the current qualify options for all Aors on the PJSIP endpoint. pjsip show qualify aor Show the PJSIP Aor current qualify options. pjsip reload qualify endpoint Synchronize the qualify options for all Aors on the PJSIP endpoint. pjsip reload qualify aor Synchronize the PJSIP Aor qualify options. ASTERISK-27872 Change-Id: I1746d10ef2b7954f2293f2e606cdd7428068c38c 2018-05-22 16:21 +0000 [e46b442e38] Alexei Gradinari * pjsip_options: handle modification of qualify options in realtime Currentrly pjsip_options code does not handle the situation when the qualify options were changed in realtime database. Only 'module reload res_pjsip' helps. This patch add a check on contact add/update observers if the contact qualify options are different than local aor qualify options. If the qualify options were modified then synchronize the pjsip_options AOR local state. ASTERISK-27872 Change-Id: Id55210a18e62ed5d35a88e408d5fe84a3c513c62 2018-05-30 01:12 +0000 [e078558038] Pirmin Walthert * bridge_channel.c: Fix Deadlock when using Local channels and fax gateway ast_indicate is invoked with the bridge locked. As ast_indicate locks the other end of the bridge as well this can lead to a deadlock in some situations. (Especially when a different thread does the same in the reverse order). This patch calls ast_indicate after unlocking the bridge which fixes the deadlock. Calling ast_indicate with these parameters without locking the bridge should be safe as this is done at different places without a bridge lock. ASTERISK-27094 #close Reported-by: David Brillert Change-Id: I5f86c1e2ce75b9929a36ab589b18c450e62ea35f 2018-06-04 09:50 +0000 [437ab41881] George Joseph * app_sendtext: Allow content types other than text/plain There was no real reason to limit the conteny type to text/plain other than that's what it was limited to before. Now any text/* content type will be allowed for channel drivers that don't support enhanced messaging and any type will be allowed for channel drivers that do support enhanced messaging. Change-Id: I94a90cfee98b4bc8e22aa5c0b6afb7b862f979d9 2018-05-28 19:17 +0000 [a7f4121238] William McCall * app_confbridge: Add talking indicator for ConfBridgeList AMI response When an AMI client connects, it cannot determine if a user was talking prior to a transition in the user speaking state (which would generate a ConfbridgeTalking event). This patch causes app_confbridge to track the talking state and make this state available via ConfBridgeList. ASTERISK-27877 #close Change-Id: I19b5284f34966c3fda94f5b99a7e40e6b89767c6 2018-05-29 12:28 +0000 [6bbede84fb] Richard Mudgett * app_meetme: Fix manager event documentation for several events. The MeetmeJoin, MeetmeLeave, MeetmeEnd, MeetmeMute, MeetmeTalking, and MeetmeTalkRequest AMI events were documented with sending out a Usernum header when the User header was actually output. * Change the online documentation to match reality. ASTERISK-27873 ASTERISK-25261 Change-Id: I437bc70618d07c183c9624b7069c2fcae7f17a39 2018-05-28 10:29 +0000 [24503fb600] Alexander Traud * tcptls.h: Repair ./configure --with-ssl=PATH. asterisk/tcptls.h was included (explicitly, implicitly, or transitively). Those inclusions got replaced by forward declarations. As side effect, the inclusions got completed. ASTERISK-27878 Change-Id: I9d102728e30336d6522e5e4ae9e964013a0835f7 2018-05-25 09:55 +0000 [d36338ce2b] Alexander Traud * tcptls: Allow OpenSSL configured with no-dh. Additionally, this change allows auto-negotiation of the elliptic curve/group for servers, not only with OpenSSL 1.0.2 but also with OpenSSL 1.1.0 and newer. This enables X25519 (since OpenSSL 1.1.0) and X448 (since OpenSSL 1.1.1) as a side-effect. ASTERISK-27876 Change-Id: I62c2aba4a630aefc231b71f646207e8c027d9497 2018-05-25 07:22 +0000 [91616f4524] Alexander Traud * tcptls: Allow OpenSSL 1.1.x configured with enable-ssl3-method no-deprecated. ASTERISK-27874 Change-Id: Ica65113511c7a1c13f7988e7d9e7d9e7f3f620dd 2018-05-15 08:45 +0000 [2bf26ce5ac] George Joseph * ast_coredumper: Fix output directory and variable precedence The OUTPUTDIR variable in ast_debug_tools.conf.sample is now set to "/tmp" instead of "/some/directory". Variables set on the command line or that are already in the environment now take predecence over variables set in the config files. ASTERISK-27846 Reported by: Ted G Change-Id: Ie8baec52d531886bf5849ec1d59bb59dc87ad387 2018-05-09 08:31 +0000 [c5d2bf05f4] Torrey Searle * res/res_rtp_asterisk: ensure marker bit is correctly set on ssrc change Certain race conditions between changing bridge types and DTMF can cause the current FLAG_NEED_MARKER_BIT to send the marker bit before the actual first packet of native bridging. This logic keeps track of the ssrc the bridge is currently sending and will correctly ensure the marker bit is set if SSRC as changed from the previous sent packet. ASTERISK-27845 Change-Id: I01858bd0235f1e5e629e20de71b422b16f55759b 2018-04-23 09:04 +0000 [a507c73a78] Joshua Colp * rtp: Add support for RTP extension negotiation and abs-send-time. When RTP was originally created it had the ability to place a single extension in an RTP packet. In practice people wanted to potentially put multiple extensions in one and so RFC 5285 (obsoleted by RFC 8285) came into existence. This allows RTP extensions to be negotiated with a unique identifier to be used in the RTP packet, allowing multiple extensions to be present in the packet. This change extends the RTP engine API to add support for this. A user of it can enable extensions and the API provides the ability to retrieve the information (to construct SDP for example) and to provide negotiated information (from SDP). The end result is that the RTP engine can then query to see if the extension has been negotiated and what unique identifier is to be used. It is then up to the RTP engine implementation to construct the packet appropriately. The first extension to use this support is abs-send-time which is defined in the REMB draft[1] and is a second timestamp placed in an RTP packet which is for when the packet has left the sending system. It is used to more accurately determine the available bandwidth. ASTERISK-27831 [1] https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03 Change-Id: I508deac557867b1e27fc7339be890c8018171588 2018-05-22 17:17 +0000 [1bec0c73b3] Richard Mudgett * channel.c: Fix off nominal channel allocation failure path. __ast_channel_alloc_ap() had a failure exit path that hadn't setup the fd descriptors to -1 yet. The destructor would then attempt to close these fd's that had never been opened. Change-Id: Icf21093f36c60781e8cf6ee9d586536302af33e3 2018-05-18 12:46 +0000 [d402594f74] Rodrigo Ramírez Norambuena * app_queue: Update year Copyright and fix missing tabs in documentation Change-Id: Ieb8faf37dc765463ee5dbca1d1343242c756b1c7 2018-05-18 16:45 +0000 [39632c7e00] Alexei Gradinari * config.c: Fix successful DELETE treated as failure The config engine destroy_func callback function returns the number of rows deleted or -1 on error. But the function ast_destroy_realtime_fields treated non-zero return values as error. ASTERISK-27863 Change-Id: Ied02b38e8196cb03043e609a0679feebd288d17b 2018-05-14 06:07 +0000 [9f9dce05b2] Matthew Fredrickson * netsock2: Add ast_sockaddr_resolve_first_af to netsock2 public API This function originally was used in chan_sip to enable some simplifying assumptions and eventually was copy and pasted into res_pjsip_logger and res_hep. Since it's replicated in three places, it's probably best to move it into the public netsock2 API for these modules to use. Change-Id: Id52e23be885601c51d70259f62de1a5e59d38d04 2018-05-20 06:36 +0000 [1424f42d25] Alexander Traud * libasteriskssl: Allow OpenSSL 1.0.2 configured with no-deprecated. Use CRYPTO_set_id_callback(.) only with OpenSSL 0.9.8 and older. ASTERISK-27867 Change-Id: Iadd58d5bf6f538eb224203970a4e88e26f259655 2018-05-19 08:23 +0000 [2228ae3f27] Alexander Traud * tcptls: Repair ./configure --with-ssl=PATH. SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TLSv1_2 got discovered without honoring a PATH. ASTERISK-27865 Change-Id: I8cd358eed7411726d08fa7b01691bef122fbeb71 2018-03-27 18:53 +0000 [2ca3b6d9cc] Nic Colledge * app_voicemail: Fix data-type mismatch between app_voicemail and database Fix data-type mismatch between app_voicemail and database columns exposed by new version of MariaDB ASTERISK-27760 Change-Id: I8543ad480a08c98be78bde1ee870e6e6c84b2c5b 2018-05-12 06:53 +0000 [97f20fe5ed] Nic Colledge * app_voicemail: Fix incorrect msg leaving/retrieving an ODBC voicemail Correct the log warning message shown when ODBC voicemail retrieve_file is called and there is a null value in the category column. A more meaningfull message is now written at debug level. ASTERISK-27853 Change-Id: Ic36e97d5eb070a23a12ba45972f6b53e2182a3f4 2018-04-17 21:15 +0000 [52ed6bcc8f] Brian P. Martin * chan_mobile: support handling of caller-id names ("cnam"). Add support to handle caller-ID names ("cnam") in addition to caller-ID numbers. The prior code ignored the caller-ID name altogether, and used the local name for the cell phone (e.g. "my-iphone") in its place. Note: as of this writing, at least some Android phones don't pass cnam to us. This can be seen by issuing "core set debug 2" in the CLI and watching the "CLIP" record when a call comes in. If cnam isn't in the CLIP record, there's nothing we can do to provide one. We'll provide a null cnam field, so later Asterisk processes know to try other sources (e.g. cidname database, OpenCNAM, etc.). Reported by: Brian Martin Tested by: Brian Martin ASTERISK-27726 Change-Id: I89490d85fa406c36261879c50ae5e65595538ba5 2018-05-17 01:58 +0000 [f10fc135d4] Alexander Traud * res_pjsip_endpoint_identifier_ip: Unregister the module for headers. Asterisk uses Reference Counting to track whether a module can be unloaded. Every consumer who requires a module, increases the reference count. When the consumer goes, is unloaded itself, it has to decrease the reference count on all its used/required modules. That way core stop gracefully works on the command-line interface (CLI): One module after the other is unloaded. A recent change broke this for the module res_pjsip. ASTERISK-27861 Change-Id: I261abcb411d026bbb0691cc78f28300bfd3103a3 2018-05-11 12:49 +0000 [71d1e8d8c8] Alexander Traud * rtp_engine: Remove the double assigned RTP payload ID of H.263+. Mantis-3709 (Commit 68ff3c3, Asterisk 1.2) added support for the video format H.263+. For this, the RTP payload ID 103 got assigned statically. Commit f1aadc8 assigned another payload ID 98 for this format in Asterisk 1.6. Change-Id: I90e35b158487f8f1f8187da6241b54cd3b74e667 2018-05-11 12:26 +0000 [4722a653f4] Corey Farrell * cli: Display correct unit for HTTP timeout in "manager show settings". HTTP timeout is in seconds, not minutes. ASTERISK-27852 #close Change-Id: Ie6640835cb07307555741f9b559c2eb876d9343e 2018-05-11 10:37 +0000 [263637a38d] Alexander Traud * rtp_engine: Avoid a typo error in Doxygen for ast_rtp_codecs_find_payload_code. Change-Id: Ica089d4507a27ddfc4ce3a88d697ffbef378de48 2018-05-06 21:17 +0000 [b5914d90ac] Corey Farrell * Fix GCC 8 build issues. This fixes build warnings found by GCC 8. In some cases format truncation is intentional so the warning is just suppressed. ASTERISK-27824 #close Change-Id: I724f146cbddba8b86619d4c4a9931ee877995c84 2018-05-11 07:10 +0000 [919b0eb3f2] Alexander Traud * rtp_engine: Allow Media Formats with add_static_payload(-1) on egress again. This issue affected only installations with rtp_use_dynamic=yes in asterisk.conf which is the default since Asterisk 15. Codec 2 and SiLK were built-in examples of media formats which were affected. ASTERISK-27850 Reported by: Dinis Brazão, Selene Feigl Change-Id: I08c1e76433a67e4350141d38cacf3a1cb5086496 2018-05-09 09:30 +0000 [2e37684913] Corey Farrell * git: Ignore *.orig. This prevents accidental commit of files created by patch. Change-Id: I68380db61f0f9d620046f719ccd978811d0e9964 2018-04-18 02:27 +0000 [2d81709ab1] Alexander Traud * sip_to_pjsip: Enable python3 compatibility. The script remains compatible with Python 2.7 but now also works with Python 3.3 and newer; to ease the migration from chan_sip to chan_pjsip. ASTERISK-27811 Change-Id: I59cc6b52a1a89777eebcf25b3023bdf93babf835 2018-05-08 14:28 +0000 [cea87fe7b8] Corey Farrell * makeopts.in: Remove unused/undefined AST_MARCH_NATIVE. Change-Id: I617a96ebb83ec99f5d3176bbbee2d2a272ccb203 2018-05-08 04:59 +0000 [9f1e1d153a] Jaco Kroon * manager: fix digest auth for ami/http mechanism. Due to a fixed size buffer the digest authentication could be incorrectly calculated if a large URI was provided, causing authentication failure. The buffer is now dynamically allocated to allow any size URI within the normal limits of the HTTP request size. ASTERISK-27841 Change-Id: I660609db13b8f9e5f9567f339dd804f4985d41b3 2018-05-04 13:47 +0000 [d855658f23] Corey Farrell * app_macro: Prevent infinite loop in find_matching_priority. Use AST_PBX_MAX_STACK to escape if we recurse 128 times. This will prevent crash if dialplan contains an include loop. Log an error when this occurs, at most one message per call to Macro() so we avoid logger spam. ASTERISK-26570 #close Change-Id: I6c71b76998c31434391b150de055ae9a531e31da 2018-01-11 06:37 +0000 [f4c360143b] Tzafrir Cohen * cdr_mysql: my_connect_db(): reduce indentation ASTERISK-27572 Change-Id: I00bd5363ac94c764c56d8626a5945ed7f3934fcb 2018-01-11 06:33 +0000 [2e44adf1c3] Tzafrir Cohen * cdr_mysql: split mysql init out of my_load_module Split out mysql connection parts to a separate my_connect_db(). ASTERISK-27572 Change-Id: If2ee676056067cc693ff08be68ee4944bf35b49f 2018-05-04 16:07 +0000 [8f55f7c333] Matthew Fredrickson * res_hep: Adds hostname resolution support for capture_address Previously, only an IP address would be accepted for the capture_address config setting in hep.conf. This change allows capture_address to be a resolvable hostname or an IP address. ASTERISK-27796 #close Reported-By: Sebastian Gutierrez Change-Id: I33e1a37a8b86e20505dadeda760b861a9ef51f6f 2018-04-20 18:12 +0000 [7528b86cad] Joshua Colp * stream: Make the topology a reference counted object. The stream topology has no lock of its own resulting in another lock protecting it in some way (for example the channel lock). If multiple channels are being juggled at the same time this can be problematic. This change makes the topology a reference counted object instead which guarantees it will remain valid even without the channel lock being held. Change-Id: I4f4d3dd856a033ed55fe218c3a4fab364afedb03 2018-03-21 07:30 +0000 [6301531416] Tzafrir Cohen * chan_dahdi: Configurable dialed digit timeouts Analog phones dial overlap dialing and it is chan_dahdi's job to read the numbers. It has three timeout constants that this commit converts to channel-level configuration options: * firstdigit_timeout: Default time (ms) to detect first digit * interdigit_timeout: Default time (ms) to detect following digits * matchdigit_timeout: Default time (ms) to wait in case of ambiguous match. This happens when the dialed digits match a number in the current context but are also the prefix of another number. Change-Id: Ib728fa900a4f6ae56d1ed810aba61b6593fb7213 2018-05-03 06:34 +0000 [de3ca9bada] Joshua Colp * res_ari: Remove requirement that body exists when debug is on. The "ari set debug" code for incoming requests incorrectly assumed that all requests would contain a body. If one did not exist the request would be incorrectly rejected. The response that was sent was also incomplete as an incorrect function was used to construct the response. The code has now been changed to no longer require a request to have a body and the response updated to use the correct function. ASTERISK-27801 Change-Id: I4eef036ad54550a4368118cc348765ecac25e0f8 2018-04-30 15:15 +0000 [069a0b7593] Sean Bright * iostreams: Add some documentation for the ast_iostream_* functions Change-Id: Id71b87637f0a484eb5a1cd26c3d1c7c15c7dcf26 2018-05-02 07:43 +0000 [239074c759] Sean Bright * pjsip: Increase maximum number of usable ciphers & other cleanups * Increase maximum number of ciphers from 100 to 256 (or whatever PJ_SSL_SOCK_MAX_CIPHERS is #define'd to) * Simplify logic in cipher_name_to_id() * Make signed/unsigned comparison consistent Re: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897412 Reported by: Ondřej Holas Change-Id: Iea620f03915a1b873e79743154255c3148a514e7 2018-04-30 17:24 +0000 [11b7de82c5] Richard Mudgett * res_pjsip/pjsip_distributor.c: Add missing off-nominal request response. Change-Id: I389579b39c523d1d1e8ce020ef549a8bb5781c9b 2018-04-30 17:20 +0000 [6cab3c836a] Richard Mudgett * res_pjsip/pjsip_distributor.c: Pull some assignments out of if tests. Change-Id: I3d30d638b53a4bbe9bf9aad853c649d583894112 2018-04-30 09:38 +0000 [afdca5c68c] Joshua Colp * res_rtp_asterisk: Always update SRTP on local SSRC change. When the local SSRC changes we need to update the SRTP information so that the proper key is used. This is commonly done as a result of bridging two channels together. Previously we only updated the SRTP information if media had already flowed, but in practice the channel driver may have already performed SRTP negotiation and set up the previous SSRC. We now always do it on a local SSRC change. ASTERISK-27795 ASTERISK-27800 Change-Id: Ia7c8e74c28841388b5244ac0b8fd6c1dc6ee4c10 2018-02-13 12:55 +0000 [0827d5cc53] Gaurav Khurana * Add the ability to read the media file type from HTTP header for playback How it works today: media_cache tries to parse out the extension of the media file to be played from the URI provided to Asterisk while caching the file. What's expected: Better will be to have Asterisk get extension from other ways too. One of the common ways is to get the type of content from the CONTENT-TYPE header in the HTTP response for fetching the media file using the URI provided. Steps to Reproduce: Provide a URL of the form: http://host/media/1234 to Asterisk for media playback. It fails to play and logs show the following error line: [Sep 15 15:48:05] WARNING [29148] [C-00000092] file.c: File http://host/media/1234 does not exist in any format Scenario this issue is blocking: In the case where the media files are stored in some cloud object store, following can block the media being played via Asterisk: Cloud storage generally needs authenticated access to the storage. The way to do that is by using signed URIs. With the signed URIs there's no way to preserve the name of the file. In most cases Cloud storage returns a key to access the object and preserving file name is also not a thing there ASTERISK-27286 Reporter: Gaurav Khurana Change-Id: I1b14692a49b2c1ac67688f58757184122e92ba89 2018-04-25 01:57 +0000 [9c9f314f64] Christof Lauber * pbx_lua: Support displaying lua error message if no debug table exists The lua_error_function assumed that lua's debug table and traceback function are always accessible, which is not the case. This fixes the error message 'Error in the lua error handler' triggred by switch exec() function. If this happens lua's error message is shown without traceback. Change-Id: I34ba0a098f1ae06a3af7b4d1b098bd43f42f96c8 2017-12-11 12:34 +0000 [882e79b77e] Joshua Colp * pjsip: Rewrite OPTIONS support with new eyes. The OPTIONS support in PJSIP has organically grown, like many things in Asterisk. It has been tweaked, changed, and adapted based on situations run into. Unfortunately this has taken its toll. Configuration file based objects have poor performance and even dynamic ones aren't that great. This change scraps the existing code and starts fresh with new eyes. It leverages all of the APIs made available such as sorcery observers and serializers to provide a better implementation. 1. The state of contacts, AORs, and endpoints relevant to the qualify process is maintained. This state can be updated by external forces (such as a device registering/unregistering) and also the reload process. This state also includes the association between endpoints and AORs. 2. AORs are scheduled and not contacts. This reduces the amount of work spent juggling scheduled items. 3. Manipulation of which AORs are being qualified and the endpoint states all occur within a serializer to reduce the conflict that can occur with multiple threads attempting to modify things. 4. Operations regarding an AOR use a serializer specific to that AOR. 5. AORs and endpoint state act as state compositors. They take input from lower level objects (contacts feed AORs, AORs feed endpoint state) and determine if a sufficient enough change has occurred to be fed further up the chain. 6. Realtime is supported by using observers to know when a contact has been registered. If state does not exist for the associated AOR then it is retrieved and becomes active as appropriate. The end result of all of this is best shown with a configuration file of 3000 endpoints each with an AOR that has a static contact. In the old code it would take over a minute to load and use all 8 of my cores. This new code takes 2-3 seconds and barely touches the CPU even while dealing with all of the OPTIONS requests. ASTERISK-26806 Change-Id: I6a5ebbfca9001dfe933eaeac4d3babd8d2e6f082 2017-12-22 13:11 +0000 [661fec4b59] Richard Mudgett * core: Remove unused/incomplete SDP modules. Change-Id: Icc28fbdc46f58e54a21554e6fe8b078f841b1f86 2018-04-18 15:59 +0000 [ff652711c7] Kevin Harwell * translate: generic plc not filled in after translation If during translation a codec could not handle a given frame the translation core would return NULL, thus not passing along the "missing" frame. Due to this there was no frame to apply generic plc to, thus rendering it useless. This patch makes it so the translation core produces an interpolated slin frame in the cases where an attempt was made to translate to slin, but failed. This interpolated frame is then passed along and can be used by the generic plc algorithms to fill in the frame. ASTERISK-27814 #close Change-Id: I133d084da87adef913bf2ecc9c9240e3eaf4f40a 2018-04-20 07:40 +0000 [de9c0ede4a] Joshua Colp * bridge_softmix: Fix sporadic incorrect video stream mapping. When an externally initiated renegotiation occurred it was possible for video streams to be incorrectly remapped, resulting in no video flowing to some receivers. This change ensures that only the video source sets up mappings and also that removed streams do not have mappings set up. Change-Id: Iab05f2254df3606670774844bb0935f833d3a9b0 2018-04-20 14:07 +0000 [c481afe873] Alexander Anikin * chan_ooh323: fix ooManualProgress/ooManualRingback on ooh323 debuggin on Call ooManualProgress/Ringback outside of ast_debug function when ooh323 debugging is on ASTERISK-27812 #close ASTERISK-26893 #close Reported by: Dimos, Marco Giordani Change-Id: I5873762e4f05824e7b6e94a19dd4eb56adbbbb79 2018-04-19 13:44 +0000 [5712a0ae52] Joshua Colp * bridge_softmix: Fix some REMB bugs. This change fixes a bug where a REMB collector may be freed twice, and also tweaks REMB combining such that if there is no bitrate from anyone (or there are no sources) we report 0 instead of using an old bitrate. ASTERISK-27804 Change-Id: Ia9dc9c150043890ee7ff85e9cdec007f1a77fcfd 2018-04-20 07:13 +0000 [fe072f4405] Alexander Traud * BuildSystem: Enable IMAP storage on FreeBSD and DragonFly BSD. ASTERISK-27639 Change-Id: I1347f3f2f3737010d0a80a5c30b5aaf71cf3ccb0 2018-04-20 05:50 +0000 [efe40ff671] Alexander Traud * BuildSystem: Add DragonFly BSD. ASTERISK-27820 Change-Id: I310896143e94d65da1c2be3bb448204a8b86d557 2018-04-20 05:40 +0000 [d54637373a] Alexander Traud * menuselect: Add DragonFly BSD. In DragonFly BSD, added libraries from ports are placed into /usr/local. Therefore, this directory must be added for the preprocessor, compiler, and linker. Beside that, the script ./configure was updated: * OSARCH list was outdated and not used, removed. * AC_CANONICAL_BUILD was not used. * _REENTRANT, this feature test macro is obsolete. ASTERISK-27820 Change-Id: I186d88d99cfa4de6569888e12ac97bd2f441c422 2018-04-20 05:18 +0000 [6e9a612293] Alexander Traud * install_prereq: Add DragonFly BSD. ASTERISK-27820 Change-Id: I718ddb000fe5184b1bdc7759da67a370a7520144 2018-04-18 11:41 +0000 [b437656c2e] Chris-Savinovich * "confbridge show profile bridge" does not output "sfu" when video_mode is sfu Fixes a bug on the "confbridge show profile bridge" cli command that showed "video_mode=no video" when video_mode was set to "sfu" ASTERISK-27418 #close Change-Id: I481e3172c7f872664c7ac7809879d541c9f031e9 2018-04-18 15:40 +0000 [179ae87cf4] Corey Farrell * Build System: Add missing ASTMM_LIBC to flex output. Redirect libc allocation functions to use Asterisk functions for main/ast_expr2f.c and res/ael/ael_lex.c. This will resolve errors produced by astmm.h when these files are regenerated, though other issues still remain. ASTERISK~27813 Change-Id: I7263e9e4217a17bde4ffaa2087a8f8aeb2a8588c 2018-04-18 13:40 +0000 [80e6952013] Sean Bright * format_pcm: Correct behavior of fseek and ftell for G.722 There are twice as many samples in the same number of bytes, so redefine some of the G.722 format functions in terms of their PCM counterparts. Change-Id: I6a8c7352624b930a5f2d9e4857f75283fa5dd9f9 2018-04-17 05:33 +0000 [95e8450194] Alexander Anikin * chan_ooh323: introduce localras config parameter Introduce localras parameter that specify source IP for connecting to Gatekeeper. Useful for multihome configurations. ASTERISK-25129 #close Reported by: Dmitry Melekhov Tested by: Dmitry Melekhov Change-Id: I0b604b01793f3e02a776502659e07cd3fc7e3097 2018-04-18 05:32 +0000 [446320f1d4] Alexander Anikin * chan_ooh323: Fix cppcheck warnings Fix cppcheck warnings about redundant conditions and possible null pointer usage ASTERISK-27793 #close Reported by: Ilya Shipitsin Tested by: Ilya Shipitsin Change-Id: I0b31933b062a23331dbac9a82b8bcfe345f406f6 2018-04-04 13:12 +0000 [8de3fa2b56] Joshua Colp * bridge_softmix / app_confbridge: Add support for REMB combining. This change adds the ability for multiple REMB reports in bridge_softmix to be combined according to a configured behavior into a single report. This single report is sent back to the sender of video, which adjusts the encoding bitrate to be at or below the bitrate of the report. The available behaviors are: lowest, highest, and average. Lowest uses the lowest received bitrate. Highest uses the highest received bitrate. Average goes through the received bitrates adding them to the previous average and creates a new average. Other behaviors can be added in the future and the existing average one may be adjusted, but this provides the foundation to do so. Support for configuring which behavior to use has been added to app_confbridge. ASTERISK-27804 Change-Id: I9eafe4e7c1f72d67074a8d6acb26bfcf19322b66 2018-04-13 15:14 +0000 [f79a372941] George Joseph * streams: Add string metadata capability Replaces the never used opaque data array. Updated stream tests to include get/set metadata and stream clone with metadata. Added stream metadata dump to "core show channel" Change-Id: Id7473aa4b374d7ab53046c20e321037ba9a56863 2018-04-13 15:17 +0000 [f7e7ce6ba2] George Joseph * utils: Add ast_assert_return Similar to pjproject's PJ_ASSERT_RETURN macro, this one will do the following... If the assert passes... NoOp If the assert fails and AST_DEVMODE is defined, execute ast_assert() then, if DO_CRASH isn't set, return from the calling function with the supplied value. If the assert fails and AST_DEVMODE is not defined, return from the calling function with the supplied value. The macro will execute a return without a value if one isn't suppled. Change-Id: I0003844affeab550d5ff5bca7aa7cf8a559b873e 2018-04-10 16:09 +0000 [8135558bab] George Joseph * app_sendtext: Enhance SendText to support Enhanced Messaging SendText now accepts new channel variables that can be used to override the To and From display names and set the Content-Type of a message. Since you can now set Content-Type, other text/* content types are now valid. Change-Id: I648b4574478119f95de09d9f08e9595831b02830 2017-09-27 11:44 +0000 [4fb7967c73] George Joseph * bridge_softmix: Forward TEXT frames Core bridging and, more specifically, bridge_softmix have been enhanced to relay received frames of type TEXT or TEXT_DATA to all participants in a softmix bridge. res_pjsip_messaging and chan_pjsip have been enhanced to take advantage of this so when res_pjsip_messaging receives an in-dialog MESSAGE message from a user in a conference call, it's relayed to all other participants in the call. res_pjsip_messaging already queues TEXT frames to the channel when it receives an in-dialog MESSAGE from an endpoint and chan_pjsip will send an MESSAGE when it gets a TEXT frame. On a normal point-to-point call, the frames are forwarded between the two correctly. bridge_softmix was not though so messages weren't getting forwarded to conference bridge participants. Even if they were, the bridging code had no way to tell the participants who sent the message so it would look like it came from the bridge itself. * The TEXT frame type doesn't allow storage of any meta data, such as sender, on the frame so a new TEXT_DATA frame type was added that uses the new ast_msg_data structure as its payload. A channel driver can queue a frame of that type when it receives a message from outside. A channel driver can use it for sending messages by implementing the new send_text_data channel tech callback and setting the new AST_CHAN_TP_SEND_TEXT_DATA flag in its tech properties. If set, the bridging/channel core will use it instead of the original send_text callback and it will get the ast_msg_data structure. Channel drivers aren't required to implement this. Even if a TEXT_DATA enabled driver uses it for incoming messages, an outgoing channel driver that doesn't will still have it's send_text callback called with only the message text just as before. * res_pjsip_messaging now creates a TEXT_DATA frame for incoming in-dialog messages and sets the "from" to the display name in the "From" header, or if that's empty, the caller id name from the channel. This allows the chat client user to set a friendly name for the chat. * bridge_softmix now forwards TEXT and TEXT_DATA frames to all participants (except the sender). * A new function "ast_sendtext_data" was added to channel which takes an ast_msg_data structure and calls a channel's send_text_data callback, or if that's not defined, the original send_text callback. * bridge_channel now calls ast_sendtext_data for TEXT_DATA frame types and ast_sendtext for TEXT frame types. * chan_pjsip now uses the "from" name in the ast_msg_data structure (if it exists) to set the "From" header display name on outgoing text messages. Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489 2018-04-17 07:06 +0000 [8a1ffb050b] Alexander Traud * utils/pval: Add -lBlocksRuntime for compiler clang conditionally. ASTERISK-27809 Change-Id: I930b364a33d54cc08dedfcd5bb45f7e83242f134 2018-04-17 05:27 +0000 [3d9345e3ae] Alexander Traud * chan_vpb: Avoid GNU old-style field designator extension. clang 6.0 warned about this. Beside that, this change removes the used variable 'desc'. ASTERISK-27808 Change-Id: Ia26bdcc0a562c058151814511cfcf70ecafa595b 2018-04-09 17:09 +0000 [f5d5083ea7] Ben Ford * res_rtp_asterisk: Add support for receiving and handling NACK requests. Adds the ability to receive and handle incoming NACK requests if retransmissions are enabled. If retransmissions are enabled, a data buffer is allocated that stores packets being sent. If a NACK request is received, the packet requested for retransmission is sent if it is still in the buffer. In the same request, if any of the following 16 packets are marked as not received, those will be sent as well if available, as outlined in RFC4585. Also changes RTCP RR and SR to use media source SSRC instead of packet source SSRC when determining which instance to use for RTCP reports. For more information, refer to the wiki page: https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements ASTERISK-27806 #close Change-Id: I7f7f124af3b9d5d2fd9cffc6ba8cb48a6fff06ec 2018-04-16 16:38 +0000 [d50d637764] Richard Mudgett * stringfields: Collect extended stringfields into the stringfield section. Use of extended stringfields is a temporary mechanism to avoid ABI breakage in released branches without resorting to more inconvienient methods. * Collect existing extended stringfields into the parent stringfield section of the struct. Change-Id: I8d46d037801b4518837c3ea4b6df95ceadc9436b 2018-04-13 14:32 +0000 [4aeec6100f] Ben Ford * res_musiconhold: Don't restart MOH from beginning after announcement. This reverts a problem introduced by the fix for ASTERISK_24329. Now, when an announcement is played while waiting in a queue, music on hold will not restart from the beginning of the sound file and will instead pick up where it left off. However, the incorrect behavior in ASTERISK_24329 is now present again; if an announcement X seconds long is played when music on hold starts, music on hold will start X seconds into the file. ASTERISK-27774 #close Reported by: lvl Change-Id: I86b2885ee7063268f9b9747eddb788336ade989b 2018-03-28 15:13 +0000 [3bb6cf43b5] Richard Mudgett * pjsip_scheduler.c: Add ability to trace scheduled tasks. When a scheduled task is created you can pass in the AST_SIP_SCHED_TASK_TRACK flag. This new flag causes scheduling events to be logged. Change-Id: I91967eb3d5a220915ce86881a28af772f9a7f56b 2018-03-27 11:04 +0000 [237d341bbd] Richard Mudgett * res_pjsip.c: Split ast_sip_push_task_synchronous() to fit expectations. ast_sip_push_task_synchronous() did not necessarily execute the passed in task under the specified serializer. If the current thread is any registered pjsip thread then it would execute the task immediately instead of under the specified serializer. Reentrancy issues could result if the task does not execute with the right serializer. The original reason ast_sip_push_task_synchronous() checked to see if the current thread was a registered pjsip thread was because of a deadlock with masquerades and the channel technology's fixup callback (ASTERISK_22936). A subsequent masquerade deadlock fix (ASTERISK_24356) involving call pickups avoided the original deadlock situation entirely. The PJSIP channel technology's fixup callback no longer needed to call ast_sip_push_task_synchronous(). However, there are a few places where this unexpected behavior is still required to avoid deadlocks. The pjsip monitor thread executes callbacks that do calls to ast_sip_push_task_synchronous() that would deadlock if the task were actually pushed to the specified serializer. I ran into one dealing with the pubsub subscriptions where an ao2 destructor called ast_sip_push_task_synchronous(). * Split ast_sip_push_task_synchronous() into ast_sip_push_task_wait_servant() and ast_sip_push_task_wait_serializer(). ast_sip_push_task_wait_servant() has the old behavior of ast_sip_push_task_synchronous(). ast_sip_push_task_wait_serializer() has the new behavior where the task is always executed by the specified serializer or a picked serializer if one is not passed in. Both functions behave the same if the current thread is not a SIP servant. * Redirected ast_sip_push_task_synchronous() to ast_sip_push_task_wait_servant() to preserve API for released branches. ASTERISK_26806 Change-Id: Id040fa42c0e5972f4c8deef380921461d213b9f3 2018-03-21 19:43 +0000 [c2f85e881d] Richard Mudgett * pjsip_scheduler.c: Fix some corner cases. * Fix the periodic interval wander because it may take significant time between the sched thread queueing the task in the serializer and the serializer actually executing the task. The time it takes to actually execute the task was already taken into account. * Pass a schtd ref to the serializer when we queue a scheduled task on the serializer. We don't want it going away on us while it is in the serializer queue. * Skip the scheduled task if the task was canceled between queueing the task to the serializer and the serializer actually executing the task. * Reorder struct ast_sip_sched_task to avoid unnecessary padding. Removed task_id and added next_periodic. * Hold a ref to the passed in serializer so the serializer cannot go away on the scheduled task. ASTERISK_26806 Change-Id: I6c8046b75f6953792c8c30e55b836a4291143f24 2018-03-22 19:09 +0000 [96c4a57edf] Richard Mudgett * pjsip_scheduler.c: Sort "pjsip show scheduled_tasks" output. * A side benefit is that the scheduled tasks are not completely blocked while the CLI command executes. * Adjusted the "Task Name" column width to have more room for longer names. Change-Id: Iec64aa463ee8b10eef90120e00c38b1fb444087e 2018-04-02 15:59 +0000 [429c758e48] Evandro Cesar Arruda * cdr_mysql: Compile error because MYSQL_PORT definition is missing If it is not defined, it will add MYSQL_PORT definition. After some research on MySQL/MariaDB development tree, I couldn't find any reference to MYSQL_PORT definition in include files. ASTERISK-27782 #close Change-Id: Ieee56c836fc2e8bd021c456145bba04c6068bb77 2018-04-09 20:00 +0000 [0747ac893b] Chris-Savinovich * res_pjsip_session: Rewrite o= with external_media_address. It now appends the external IP address on the o= line of the SDP packet. The decision was made to write the numeric IP address as opposed to the RFC that states the FQDN should be used if and when available. We believe the usage of literal IP address will help avoid potential problems. ASTERISK-27614 #close Change-Id: I84f3360f3606b8c4e8d161edb228799ec0b8a302 2018-02-22 12:18 +0000 [1cd704de36] Nathan Bruning * res_pjsip_notify.c: enable in-dialog NOTIFY This patch adds support to send in-dialog SIP NOTIFY commands on chan_pjsip channels, similar to the functionality recently added for chan_sip (ASTERISK_27461). This extends res_pjsip_notify to allow for in-dialog messages. ASTERISK-27697 Change-Id: If7f3151a6d633e414d5dc319d5efc1443c43dd29 2018-03-22 13:35 +0000 [7157dcf83b] Richard Mudgett * pjsip_scheduler.c: Fix ao2 usage errors. * Removed several invalid uses of OBJ_NOLOCK. These uses resulted in the 'tasks' container being accessed without a lock in a multi-threaded environment. A recipe for crashes. * Removed needlessly obtaining schtd object references. If the caller providing you a pointer to an object doesn't have a valid reference then you cannot safely get one from it. * Getting a ref to 'tasks' when you aren't copying the pointer into another location is useless. The 'tasks' container pointer is global. * Removed many unnecessary uses of RAII_VAR. * Make ast_sip_schedule_task() name parameter const. ASTERISK_26806 Change-Id: I5c62488e651314e2a1dbc01f5b078a15512d73db 2018-03-23 06:49 +0000 [879e592baf] Corey Farrell * Build System: Enable python3 compatibility. * Consistently use spaces in rest-api-templates/asterisk_processor.py. * Exclude third-party from docs/full-en_US.xml. * Add docs/full-en_US.xml to .gitignore. * Use list() to convert python3 view. * Use python3 print function. * Replace cmp() with equivalent equation. * Replace reference to out of scope subtype variable with name parameter. * Use unescaping triple bracket notation in mustache templates where needed. This causes behavior of Python2 to be maintained when using Python3. * Fix references to has_websocket / is_websocket in res_ari_resource.c.mustache. * Update calculation of has_websocket to use any(). * Use unicode mode for writing output file in transform.py. * Replace 'from swagger_model import *' with explicit import of required symbols. I have not tested spandspflow2pcap.py or voicemailpwcheck.py, only the print syntax has been fixed. Change-Id: If5c5b556a2800d41a3e2cfef080ac2e151178c33 2018-04-05 18:33 +0000 [0c03eab962] Richard Mudgett * res_pjsip_refer/chan_sip: Fix INVITE with replaces transfer to ConfBridge There is a problem when an INVITE-with-Replaces transfer targets a channel in a ConfBridge. The transfer will unconditionally swap out the ConfBridge channel. Unfortunately, the ConfBridge state will not be aware of this change. Unexpected behavior will happen as a result since ConfBridge channels currently can only be replaced by a masquerade and not normal bridge channel moves. * We just need to pretend that the channel isn't in a bridge (like other transfer methods already do) so the transfer channel will masquerade into the ConfBridge channel. Change-Id: I209beb0e748fa4f4b92a576f36afa8f495ba4c82 2018-03-28 07:27 +0000 [c7bd554094] Joshua Colp * pjsip / res_rtp_asterisk: Add support for sending REMB This change allows chan_pjsip to be given an AST_FRAME_RTCP containing REMB feedback and pass it to res_rtp_asterisk. Once res_rtp_asterisk receives the frame a REMB RTCP feedback packet is constructed with the appropriate contents and sent to the remote endpoint. ASTERISK-27776 Change-Id: Ic53f821c1560d8924907ad82c4d9c0bc322b38cd 2018-04-05 20:02 +0000 [39016e3582] Joshua Colp * res_rtp_asterisk: Fix minimum block word length for REMB. The minimum block word length is actually 4, not 5. Change-Id: I878542218225aed72c72bdf1b856fc822cd2d649 2018-04-05 18:48 +0000 [8a602f18db] Joshua Colp * res_rtp_asterisk: Queue video update on picture loss indication. The previous payload specific feedback handling was very single minded in that it just assumed everything should trigger a video update. This was changed but the handling of picture loss indication was not added. The result was that video may not flow. This change adds it explicitly in. Change-Id: I1894be02e39ee10a0af841b5a1dca5f0ec7d60b6 2018-04-05 17:40 +0000 [d72a2966da] Richard Mudgett * chan_sip.c: Fix INVITE with replaces channel ref leak. Given the below call scenario: A -> Ast1 -> B C <- Ast2 <- B 1) A calls B through Ast1 2) B calls C through Ast2 3) B transfers A to C When party B transfers A to C, B sends a REFER to Ast1 causing Ast1 to send an INVITE with replaces to Ast2. Ast2 then leaks a channel ref of the channel between Ast1 and Ast2. Channel ref leaks are easily seen in the CLI "core show channels" output. The leaked channels appear in the output but you can do nothing with them and they never go away unless you restart Asterisk. * Properly account for the channel refs when imparting a channel into a bridge when handling an INVITE with replaces in handle_invite_replaces(). The ast_bridge_impart() function steals a channel ref but the code didn't account for how many refs were held by the code at the time and which ref was stolen. * Eliminated RAII_VAR in handle_invite_replaces(). ASTERISK-27740 Change-Id: I7edbed774314b55acf0067b2762bfe984ecaa9a4 2018-03-21 19:40 +0000 [71a67a98c4] Richard Mudgett * res_pjsip: Update authenticate_qualify documentation. Change-Id: I3811de0014b1ffe96d4a3b49cddd5d4ca02ee5d4 2018-04-02 16:49 +0000 [6774913e82] Richard Mudgett * app_agent_pool.c: Fix off nominal ref leak. Change-Id: Ib427ffc2c802620eaafb08b1c2a17dddd8fb8eb6 2018-04-04 10:02 +0000 [e40fd7a232] Corey Farrell * Build System: Strip '-std=c99' from CFLAGS provided by libraries. Asterisk requires GNU C extensions. On some systems certain libraries may incorrectly push -std=c99 into CFLAGS, thus breaking the build. This change causes that flag to be stripped so the Asterisk build is not broken by those libraries. This change is made for both pkgconfig and tool based libraries. ASTERISK-27629 #close Change-Id: I13389613b194abbac77becf90cd950dc168704db 2018-04-03 14:39 +0000 [66f13ed694] Corey Farrell * Build System: Fixes for configure script. * Replace all 'else if' statements with 'elif'. * Use loop to detect versioned lua headers and libraries. The loop for detecting lua fixes a bug where LUA_INCLUDE would be appended with the directory of every lua version after the first one is found. Change-Id: I3276f9aee955014108345be6092f51c932b43a0f 2018-04-02 08:53 +0000 [0f6431e8e4] Joshua Colp * app_confbridge / bridge_softmix: Add ability to configure REMB interval. This change adds a configuration option to app_confbridge which can be used to set the interval at which we will send a combined REMB (remote estimated maximum bitrate) frame to sources of video. The bridging API has also been extended slightly to allow setting this so bridge_softmix can use it. ASTERISK-27786 Change-Id: I0e49eae60f369c86434414f3cb8278709c793c82 2018-01-02 07:54 +0000 [f91263cf46] George Joseph * res_pjsip: Correct usages of pjproject's timer heap Fix some timer heap initializations and cancels to try and prevent crashes and timer heap issues. Change-Id: I64885d190fa22097d1b55987091375541e57a7ee 2018-03-25 13:35 +0000 [48720e7def] George Joseph * pjroject_bundled: Add already-destroyed check to tsx_timer_callback There have been cases that when the transaction timer callback is called the tsx is already destroyed. This causes a crash. We now check the tsx state and return if the tsx is already destroyed. Change-Id: If93acd5e48d9ca5bb553f2405d5afc836842fe1c 2018-03-25 13:25 +0000 [7c03b2713e] George Joseph * pjproject_bundled: timer: Clean up usage of timer heap Added a new pj_timer_entry_reset function that resets a timer_entry for re-use. Changed direct settings of timer_entry fields to use pj_timer_entry_init and pj_timer_entry_reset. Fixed issues where timers were being rescheduled incorrectly. Change-Id: I5b624bfbc5c1429117484b9b24567293002148e6 2018-03-29 17:07 +0000 [97cc67b12f] Richard Mudgett * res_pjsip: Fix deadlock on reliable transport shutdown. A deadlock can happen when the PJSIP monitor thread is shutting down a connection oriented transport (TCP/TLS) used by a subscription at the same time as another thread tries to send something for that subscription. The deadlock is between the pjsip monitor thread attempting to get the dialog lock and another thread sending something for that dialog when it tries to get the transport manager lock. * res_pjsip_pubsub.c: Avoid the deadlock by pushing the subscription removal to the subscription serializer. * res_pjsip_registrar.c: Pushed off incoming registration contact removals to a default serializer as a precaution. Removing the contacts involves sorcery access which in this case will involve database access. Depending upon the setup, the database may not be on the same machine and could take awhile. We don't want to hold up the pjsip monitor thread with potentially long access times. ASTERISK-27706 Change-Id: I56b647aea565f24dba33e9e5ebeed4cd3f31f8c4 2018-03-07 06:15 +0000 [f65488f546] Ross Beer * pjsip_transport_events.c: Fix crash using stale transport pointer. Apparently it is possible for the transport to be destroyed without triggering the transport callback logic. As a result the transport gets destroyed and we have a stale pointer in the active_transports container. * Invoke the transport monitor callback checks when the transport is destroyed in addition to when it is disconnected and shutdown. ASTERISK-27688 Change-Id: Ia9b5469fea8f2b3f2d8476fae6b748a4d23e7261 2018-03-19 09:36 +0000 [879743ab8f] Ben Ford * test_data_buffer.c: Add unit tests for data buffer API. Added unit tests for the data buffer API. These tests include creating a data buffer, putting payloads into the buffer, resizing the buffer, and the nominal case for data buffer usage, which consists of adding the max number of payloads to the buffer, checking to see if the correct payloads are present, then adding more payloads and checking again to see if the previous payloads were replaced or not. For more information, refer to the wiki page: https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements Change-Id: Id5b599aa15a5e61d0ec080f97cd0c57bd07e6f8f 2018-02-23 13:49 +0000 [138e0eff4e] Ben Ford * Add data buffer API to store packets. Adds a data buffer with a configurable size that can store different kinds of packets (like RTP packets for retransmission). Given a number it will store a data packet at that position relative to the others. Given a number it will retrieve the given data packet if it is present. This is purposely a storage of arbitrary things so it can be used not just for RTP packets but also Asterisk frames in the future if needed. The API does not internally use a lock, so it will be up to the user of the API to properly protect the data buffer. For more information, refer to the wiki page: https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements Change-Id: Iff13c5d4795d52356959fe2a57360cd57dfade07 2018-03-25 13:12 +0000 [a87141ddfd] George Joseph * pjproject_bundled: Add patch for pj_atomic crashes There have been some crashes in the past where something attempts to use a pj_atomic after it's already been destroyed. This patch tries to prevent it by making sure that pj_atomic_destroy sets its mutex to NULL when it's done. The pj_mutex functions already check for a NULL mutex and just return PJ_EINVAL. Teluu also added some checks to the win32 implementation as well. Change-Id: Id25f70b79fdedf44ead6e6e1763a4417d3b3f825 2018-03-21 08:52 +0000 [e14b0e960d] Joshua Colp * res_rtp_asterisk: Add support for raising additional RTCP messages. This change extends the existing AST_FRAME_RTCP frame type to be able to contain additional RTCP message types, such as feedback messages. The payload type is contained in the subclass which allows knowing what is in the frame itself. The RTCP feedback message type is now handled and REMB[1] messages are raised with their containing information. This also fixes a bug where all feedback messages were triggering video updates instead of just FIR and FUR. Finally RTCP frames are now passed up through the Asterisk core to what is handling the channel, mapped appropriately in the case of bridging, and written to an outgoing stream. Since RTCP frames are on a per-stream basis this is only done on multistream capable channels. [1] https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03 ASTERISK-27758 ASTERISK-26366 Change-Id: I680da0ad8d5059d5e9655d896fb9d92e9da8491e 2018-03-27 08:27 +0000 [455cee99ae] Florian Floimair * main: Update copyright notice with year 2018 Change-Id: I2d80bc5edf940fab914cba3d8a0fa0b5eb2a3148 2018-03-26 07:42 +0000 [48190c7f93] Guido Falsi * core: fix getopt(3) usage Setting optind = 0 is forced to 1 in glibc implementation, but causes option parsing to be flawed in other implementations, for example on FreeBSD. ASTERISK-27773 #close Change-Id: Ia548e69f8302e9754dbbedb6bc451c0700c66f61 2018-03-23 13:15 +0000 [07cf6b1437] Alexander Traud * install_prereq: Add Slackware (somehow). ASTERISK-27770 Change-Id: Ib87e0483c785542238cfe34c1e884d5a31edfaab 2018-03-23 09:13 +0000 [307a295d00] Alexander Traud * install_prereq: Add Gentoo Linux. ASTERISK-27769 Change-Id: Ieb13293cd67481f3a33f58f6f7c8c3ee1e338e7a 2018-03-17 01:02 +0000 [318bf45928] Corey Farrell * main/indications: Use ast_cli_completion_add for all completions. Change-Id: I371be01f178fb542a9fbe8d97e7ae21aa4d82c36 2018-03-21 14:54 +0000 [75715b95b4] Russell Bryant * app_originate: Add async option. Add an option to make app_originate not wait for the created channel to answer. Change-Id: I7fc2facd77079abc6321f44e8bcd4e39298de2ae Requested-by: Frederic Steinfels Signed-off-by: Russell Bryant 2018-03-22 07:27 +0000 [4f33f56a72] Alexander Traud * BuildSystem: pjsip_evsub_set_uas_timeout was not used (part 2). The previous change was not complete. ASTERISK-27435 Change-Id: I11082c14c0ef9c6af8c995084a6851337ea2a90f 2018-03-22 05:43 +0000 [d6fda173a4] Alexander Traud * BuildSystem: With external editline, do not require libs for internal editline. ASTERISK-27761 Change-Id: Ib17a7415297a210cfcdbf149e4df9b6edadbfab6 2018-03-21 22:00 +0000 [a6d58c518a] Corey Farrell * core: Create main/options.c. This creates a separate source to 'own' symbols related to options.h and paths.h. This significantly reduces the number of exports created by main/asterisk.o. This change is required to eventually be able to link unmodified Asterisk sources to utilities and/or stand-alone tests. ASTERISK~26245 Change-Id: I5cf184f4757f9363b80c9e678bdc35c477122380 2018-03-21 19:25 +0000 [745b5134cd] George Joseph * Revert "BuildSystem: In NetBSD, the Python Programming Language is python-X.Y." Something is causing a python2/python3 mismatch on Fedora27. PYTHON='/usr/bin/python2' PYTHONDEV_CFLAGS='-I/usr/include/python3.6m ' PYTHONDEV_INCLUDE='-I/usr/include/python3.6m ' PYTHONDEV_LIB='-lpython3.6m ' PYTHONDEV_LIBS='-lpython3.6m ' This reverts commit be0e9920b64e3b07501b299d131309b58f9b0ddf. Change-Id: I86dd102eb3ead199fe89178cdbadb36b4e2cfd1b 2018-02-08 13:23 +0000 [411915af28] Corey Farrell * loader: Reserve space for additional pointers in ast_module_info. This creates 4 reserved pointers in case we need additional dependency management fields. Change-Id: If991ec99b779df1b2dfbd38ce1a0cd79f9e01821 2018-03-20 15:28 +0000 [cf73a4203f] Kevin Harwell * bridge_softmix: Clear "talking" when a channel is put on hold This patch clears the talking flag from the channel (if already set), and notifies listeners when that channel is put on hold. Note however, if the endpoint continues to send audio frames and these are received by the bridge then that channel will be put back into a "talking" state even though they are on hold. ASTERISK-27755 #close Change-Id: I930e16c4662810f9f02043d69062f88173c5e2ef 2018-03-20 11:53 +0000 [bfefde5b07] Alexander Traud * BuildSystem: For consistency, avoid extra libs to be empty. AST_EXT_LIB_CHECK has several optional parameters. When an optional parameter is left empty, [] is used to indicate this. However, this is done in the script ./configure only then, when a further parameter is not empty. For example, when no extra libraries are needed to test the checked library, parameter 5 is not mentioned. Except parameter 6 and higher are used, then parameter 5 must be empty. However, this general rule was broken * four times for parameter 5 (extra libs) and * three times for parameter 4 (header) as found via the Regular Expression \[\]\). In case of parameter 5, all cases were changed, because that happened for no reason. In case of parameter 4, an [] improves readability actually. Therefore for parameter 4, the only case which did not do it was changed. All this aims to create more consistency: Only do something different if there is a reason to do so. Change-Id: I037ef170cf1ad94497151a9ea5071a31c656cafe 2018-03-20 09:58 +0000 [8bd5980e14] Ivan Poddubny * func_channel: Delete dead CHANNEL_TRACE code The functions behind the flag and the flag itself were removed from Asterisk 12 as incompatible with the new architecture. Change-Id: I058493ef7a53ee290fd225bbcbb07bf46b623ccf 2018-03-17 21:26 +0000 [040bb21771] Corey Farrell * core: Remove additional symbols. Remove symbols that are depreacated and replaced: * ast_channel_datastore_alloc * ast_channel_datastore_free * ast_channel_cmpwhentohangup * ast_channel_setwhentohangup * config_text_file_save * devstate2str * ast_device_state_changed * ast_device_state_changed_literal * ast_verbose_get_by_module Remove unused symbols: * channelreloadreason2txt (last used in Asterisk 12). Remove unused ast_options flags: * AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN / ast_opt_end_cdr_before_h_exten * AST_OPT_FLAG_VERBOSE_MODULE / ast_opt_verb_module * AST_OPT_FLAG_INITIATED_SECONDS Change-Id: I841255995d195f8efc1ed47af9c7a2f131c08645 2018-03-17 20:03 +0000 [de77cf8698] Corey Farrell * core: Remove dead symbols from asterisk.exports.in. * dahdi_chan_name * dahdi_chan_name_len * dahdi_chan_mode * __manager_event * dialed_interface_info Added comment about __progname and environ being needed for FreeBSD to prevent accidental removal in the future. Change-Id: I3ae026bc541cd9cb572be2ffa95fc359547642b5 2018-03-17 01:39 +0000 [201762f161] Corey Farrell * named_acl: Use ast_cli_completion_add. Change-Id: I317a82de976bbdbfe4352c243e32a7bb8f66c377 2018-03-17 01:58 +0000 [645203a422] Corey Farrell * main/sounds: Use ast_cli_completion_add. Change-Id: I140e1137906bbfcdb61c0c6304159be459ad873e 2018-03-16 10:19 +0000 [5d097f8236] George Joseph * channel.c: Allow generic plc then channel formats are equal If the two formats on a channel are equal, we don't transcode and since the generic plc needs slin to work, it doesn't get invoked. * A new configuration option "genericplc_on_equal_codecs" was added to the "plc" section of codecs.conf to allow generic packet loss concealment even if no transcoding was originally needed. Transcoding via SLIN is forced in this case. ASTERISK-27743 Change-Id: I0577026a179dea34232e63123254b4e0508378f4 2018-03-17 01:09 +0000 [8d01ec572d] Corey Farrell * manager: Use ast_cli_completion_add for completion generators. Change-Id: I658141c6ec490a3e866b02d2afea757928ceaabf 2018-03-17 02:16 +0000 [2c1ad2f510] Corey Farrell * main/test: Use ast_cli_completion_add. Change-Id: I5133ff2ba4e030f9733fb3d050c863d72a22ae6b 2018-03-18 10:16 +0000 [115939caeb] Joshua Colp * rtp: Add REMB RTP property and set it on PJSIP video RTP. This change adds a property to RTP instances to indicate that REMB support is enabled and that sending/receiving should be passed through. This also enables it on video RTP instances in PJSIP if WebRTC support is enabled. Finally the goog-remb extension is added to the SDP using the rtcp-fb attribute to indicate our support for it. Details about REMB can be found on the draft document for it: https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03 Change-Id: I1902dda1c0882bd1a0d71b2f120684b44b97e789 2018-03-17 04:31 +0000 [8c25a72d57] Corey Farrell * main/bridge: Use ast_cli_completion_add. Change-Id: I3775a696d6a57139fdf09651ecb786bcf1774509 2018-03-17 16:41 +0000 [5b40441197] Corey Farrell * core: Minor cleanup of ast_el_read_char. * Define CHAR_T_LIBEDIT and CHAR_TO_LIBEDIT based on HAVE_LIBEDIT_IS_UNICODE. This avoids needing to repeatedly use conditional blocks, eliminates having multiple function prototypes. * Remove parenthesis from return values. * Add missing code block brackets {}. * Reduce use of 'else' conditional statements where possible. Change-Id: I4315328ebea2f62641faf6881de2ac20a9f9d08e 2018-03-17 10:49 +0000 [e61b50b67a] Alexander Traud * BuildSystem: Check for header file of OGG. Asterisk uses various symbols of the shared library libogg within the module format_ogg_vorbis. However, the source code of that module did not include the header file of libogg explicitly but implicitly. Because that header was not included before Asterisk 14, the script ./configure was told not to check for it. Anyway, even Asterisk 13 LTS uses symbols of libogg. Therefore, that header should be included explicitly. Therefore, ./configure should check for that header. Change-Id: I98c50d56311b68880d1084fcc62c35ab2f8692db 2018-03-09 06:26 +0000 [f697025ae5] Alexander Traud * BuildSystem: When no download utility is available, display the explanation. ./configure --with-pjproject-bundled did not display an explanation, when no download utility like wget, curl, or fetch was installed beforehand, although an explanation existed in code. This happened because the code expected the variable DOWNLOAD_TO_STDOUT to be empty. However, the script ./configure set that variable always. Change-Id: I64c99b76a03525c69471e5055bf124b36a51bbd4 2018-03-17 05:00 +0000 [10a978829e] Alexander Traud * BuildSystem: Remove unused dependency on libltdl. Asterisk does not need the development package of libltdl, because it does not use any symbol of -lltdl directly. Instead, it uses the runtime package via the shared library -lodbc. On the supported platforms, that shared library declares its dependency on -lltdl correctly, otherwise AST_EXT_LIB_CHECK would have failed. ASTERISK-27745 Change-Id: Icd315809b8e7978203431f3afb66240dd3a040ba 2018-03-17 02:25 +0000 [1136a22a1e] Corey Farrell * main/translate: Use ast_cli_completion_add. Change-Id: I0e2402660e54d91f74ab0804c62a5b1925577413 2018-03-17 02:00 +0000 [91ac95993e] Corey Farrell * main/taskprocessor: Use ast_cli_completion_add. Change-Id: Ie5f812a988ed811fd11967151932de62bc131b48 2018-03-15 15:06 +0000 [3ad56aa929] Corey Farrell * main/config: Use ast_cli_completion_add for reload completion. Change-Id: Ia3fa4c03f2285a1ec8814bbe7f4624ead9111ad1 2018-03-17 00:51 +0000 [9e335f22e7] Corey Farrell * aco: Use ast_cli_completion_add for 'config show help'. In addition this removes: * RAII_VAR usage * Duplicate check of pos * Unneeded arguments. Change-Id: I2da8eac2670d1d8d6474c04037129804f55ebf39 2018-03-14 04:27 +0000 [4d1c9d8711] Corey Farrell * core: Stop using AST_INLINE_API for allocator functions. This replaces AST_INLINE_API allocators in utils.h with real functions implemented in astmm.c. Associated macro's are also moved from utils.h to astmm.h. Remove menuselect conflicts between MALLOC_DEBUG and DEBUG_CHAOS as they can now be combined. This has multiple benefits: * Simplifies asterisk/utils.h by removing inline functions and use of the logger. * Removal of these inline functions decreases size of Asterisk and module binaries by 1% or more. * Puts memory management functions together with and without MALLOC_DEBUG enabled, simplifying management of the code. * Enables DEBUG_CHAOS for ASTMM_REDIRECT and bundled pjproject. Change-Id: If9df4377f74bdbb627461b27a473123e05525887 2018-02-27 03:01 +0000 [ecc846b26b] Florian Floimair * app_dial: Enable early-media video Certain applications (e.g. door-phone) require that also video is transmitted before a call is accepted. Change-Id: I9842e1dc2f6e1c2c49dc33fe615255007d2f821e 2018-03-05 06:50 +0000 [be0e9920b6] Alexander Traud * BuildSystem: In NetBSD, the Python Programming Language is python-X.Y. ASTERISK-27717 Change-Id: If90ddf9c396c32e7402a894f42dce215c30049d1 2018-03-16 09:53 +0000 [02fa145a1b] Alexander Traud * BuildSystem: Avoid an extra case for OpenBSD. Nine years ago with Mantis 13639 (now ASTERISK-12841) an extra case for OpenBSD was introduced: Vorbis required Ogg to be specified manually, because the shared library libvorbis.so did not specify its required dependency on -logg itself. Today with OpenBSD 6.2, all libvorbis*.so declare their dependencies correctly. Therefore, an extra case is not required anymore. Change-Id: Ifd04e0994ce9f1e4ad29c3948a0398b91d1e97bc 2018-03-05 10:10 +0000 [00789174f6] Alexander Traud * BuildSystem: Enable Advanced Linux Sound Architecture (ALSA) in NetBSD. In the script ./configure, AST_EXT_LIB_CHECK checks for external libraries. Some libraries do not specify all their dependencies and require additional shared libraries. In AST_EXT_LIB_CHECK, this is the fifth parameter. However, if a library is specified there, it must exist on the platform, because ./configure tries to compile/link/execute a small app using those statements. For example, the library libdl.so is Linux specific and does not exist on BSD-like platforms. Furthermore, no supported platform/version was found, which still (ever?) requires those additional libraries. Therefore, they were simply removed. Finally, this change adds the error code ESTRPIPE to the channel driver chan_alsa for those platforms which lack it, again for example NetBSD. ASTERISK-27720 Change-Id: I3b21f2135f6cbfac7590ccdc2df753257f426e0b 2018-03-16 09:02 +0000 [4d1e3fef6b] George Joseph * app_voicemail: Fix json blob errors When app_voicemail calls ast_test_suite_notify with the results of a user keypress, it formats the keypress as '%c'. If the user hung up or some other error occurrs, the result of the keypress is a non printable character. This ultimately causes json_vpack_ex to think it's being passed a non utf-8 string and return an error. * Keypress results passed to ast_test_suite_notify are now checked with isprint() and a '?' is substituted if the check fails. Change-Id: I78ee188916bbac840f3d03f40201b692347ea865 2018-03-15 09:32 +0000 [ebe957c5e9] Corey Farrell * main/cdr: Use ast_cli_completion_add for CDR channel completion. Change-Id: Ie81830647a23aad61c1162583b6d50adbe6e7822 2018-03-12 10:20 +0000 [dbf5ff6ed0] Alexander Traud * install_prereq: Add Arch Linux. ASTERISK-27738 Change-Id: I7ca620e3c4dfb4b064a19382c4915aeb42a2a09f 2018-03-15 08:19 +0000 [89ba4d4e3d] Corey Farrell * main/ccss: Use ast_cli_completion_add for core id. Change-Id: I44b25d6d24c7d9bc1bb38a50774b38883162f98f 2018-03-15 07:29 +0000 [aa0d95c730] Corey Farrell * astobj2_container: Use ast_cli_completion_add for container names. Change-Id: I4f0fc09e820eb8d8da2354a177dbcf503c56ddd1 2017-12-09 04:52 +0000 [b929a7fb8d] Corey Farrell * main/channel: Use ast_cli_completion_add for channeltypes. Change-Id: Ia845fae6a84801cc7d9996767b99efb2753cbb48 2018-03-14 12:38 +0000 [b45bb476bb] Corey Farrell * cli: Enable ast_cli_completion_add on public completion generators. * ast_cli_complete * ast_complete_channels * ast_complete_applications These generators will now use ast_cli_completion_add if state == -1. Change-Id: I7ff311f0873099be0e43a3dc5415c0cd06d15756 2018-03-14 11:17 +0000 [92158b7f37] Ross Beer * res_pjsip_rfc3326.c: Account for more than one 'Reason' header ASTERISK-27741 Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf 2018-03-12 08:05 +0000 [b0fff03bb5] Alexander Traud * install_prereq: Add SUSE. ASTERISK-27736 Change-Id: I4cafc8973349d50a7cb7919ddf0bb1aaef4bfc3e 2018-02-16 21:11 +0000 [572a508ef2] Corey Farrell * loader: Convert reload_classes to built-in modules. * acl (named_acl.c) * cdr * cel * ccss * dnsmgr * dsp * enum * extconfig (config.c) * features * http * indications * logger * manager * plc * sounds * udptl These modules are now loaded at appropriate time by the module loader. Unlike loadable modules these use AST_MODULE_LOAD_FAILURE on error so the module loader will abort startup on failure of these modules. Some of these modules are still initialized or shutdown from outside the module loader. logger.c is initialized very early and shutdown very late, manager.c is initialized by the module loader but is shutdown by the Asterisk core (too much uses it without holding references). Change-Id: I371a9a45064f20026c492623ea8062d02a1ab97f 2018-03-13 16:39 +0000 [9e488dd482] Corey Farrell * core: Remove incorrect usage of attribute_malloc. GCC documentation states that when __attribute__((malloc)) is used it should not return storage which contains any valid pointers. It specifically mentions that realloc functions should not have the malloc attribute, but this also means that complex initializers which could contain initialized pointers should not use this attribute. Change-Id: If507f33ffb3ca3b83b702196eb0e8215d27fc7d2 2018-03-12 05:19 +0000 [d9776870e8] Alexander Traud * BuildSystem: Enable IMAP storage on openSUSE and Arch Linux. ASTERISK-27734 Change-Id: I8d6e6a1c08c031649764f5277fbbb85e57c3a9d4 2018-02-23 07:41 +0000 [ea9768ff07] Corey Farrell * stringfields: Remove MALLOC_DEBUG fields from struct ast_string_field_mgr. This causes MALLOC_DEBUG reporting to be slightly different, calls which cause additional memory pools to be allocated now report the callers location rather than the location which originally allocated the string field structure. This reduces storage needed by string fields and allows MALLOC_DEBUG to identify the source of additional allocations rather than obscuring it by reporting the original allocation caller. Change-Id: Idd18e6639a87ab862079b580c114d90361412289 2018-03-10 03:33 +0000 [fee929c8ac] Corey Farrell * core: Remove non-critical cleanup from startup aborts. When built-in components of Asterisk fail to start they cause the Asterisk startup to abort. In these cases only the most critical cleanup should be performed - closing databases and terminating proceses. These cleanups are registered using ast_register_atexit, all other cleanups should not be run during startup abort. The main reason for this change is that these cleanup procedures are untestable from the partially initialized states, if they fail it could prevent us from ever running the critical cleanup with ast_run_atexits. Create separate initialization for dns_core.c to be run unconditionally during startup instead of being initialized by the first dns resolver to be registered. This ensures that 'sched' is initialized before it can be potentially used. Replace ast_register_atexit with ast_register_cleanup in media_cache.c. There is no reason for this cleanup to happen unconditionally. Change-Id: Iecc2df98008b21509925ff16740bd5fa29527db3 2018-03-12 06:40 +0000 [ea3b8bb080] Alexander Traud * install_prereq: Update FreeBSD libraries. Because the code review system Gerrit creates merge conflicts even when one line apart another change happened, the previous update to the FreeBSD libraries had to be rebased via Git. Because of a break for training of the original contributor, this rebase was done by another contributor and the variant for Asterisk 13 was cherry-picked to all branches. By this, dependencies for new features added in newer Asterisk version got lost. This can be seen, when not the original path set but a previous patch set is compared. This change here fixes this by adding those (optional) dependencies for Asterisk 15 and newer (again). ASTERISK-27686 Change-Id: I6638a3d0dc37ad4ff5f94be15463e3dd8a2bfe74 2018-03-12 04:11 +0000 [9164be19d2] Alexander Traud * res_srtp: Add support for libsrtp2.x on openSUSE. Since ASTERISK-27253, no symbols from the header srtp2/crypto_types.h are used anymore. Therefore, its include statement can be removed. This allows to compile Asterisk on platforms which do not offer this private header, like openSUSE. ASTERISK-27733 Change-Id: I25c5cb8fa966043d1506ebef449e5a724412b4b6 2018-03-08 09:14 +0000 [5b525c9781] Alexander Traud * BuildSystem: Add NetBSD. Headers, libraries, and rpath. ASTERISK-27728 ASTERISK-11015 Reported by: Curt Sampson Change-Id: I50aa5fcd095937df32a2e33307caac7e79a8b5b7 2018-03-09 03:13 +0000 [c5f2332953] Alexander Traud * BuildSystem: For consistency, avoid double-checking via if clauses. In the script ./configure, AST_EXT_LIB_CHECK and AST_PKG_CONFIG_CHECK first test whether parameter 1 was already found. Consequently, an if-test on PBX_ just a line below is redundant, if exactly the same parameter 1 is used again. No performance gain is expected by this change. However, because this strategy is used all over in ./configure except for two places, this change aims to create more consistency: Only do something different if there is a reason to do so. Change-Id: I4a6f48127b7af3a48168c917e888be1f70625027 2018-03-09 02:44 +0000 [36c8885c66] Alexander Traud * BuildSystem: Enable dladdr on non-Linux platforms like FreeBSD. ASTERISK-27641 Change-Id: I587e8ba0123c70fc10cfd8b0ac3299551f61d84b 2018-03-08 13:53 +0000 [e6738b79b3] Richard Mudgett * Complete deprecating legacy modules. The menuselect comment was updated to deprecate these modules but the AST_MODULE_INFO block at the end of file was missed. ASTERISK-27671 Change-Id: I63070b5c4d4f08af010c6034acd4793c1bcef839 2018-03-07 13:50 +0000 [7f4354c10f] Richard Mudgett * res_pjproject.c: Upgrade bundled PJPROJECT to 2.7.2 Update patches included in bundled PJPROJECT for the new version. ASTERISK-27730 Change-Id: Id3c8c8ad82126846bcd9768bc3d0a18d89be8944 2018-03-08 12:02 +0000 [9ff95e46e3] Alexander Traud * install_prereq: Add NetBSD. ASTERISK-27729 Change-Id: I7a706d51375d54cf5e36d32397bfe09a48670804 2018-03-08 09:04 +0000 [75cebc3e71] Alexander Traud * BuildSystem: Re-check for another UUID library only when previous check failed. As a side-effect, this avoids the ambiguous output: checking for uuid_generate_random... no which was printed always previously. ASTERISK-25586 Reported by: John Nemeth Change-Id: I6d541dfcf453932a9856c5e251aa22e0e6c233c9 2018-03-08 05:28 +0000 [fc64a0e2b3] Alexander Traud * BuildSystem: Instead of $PJPROJECT_LIBS with s, use $PJPROJECT_LIB everywhere. In the script ./configure, xyz_LIB is set by AST_PKG_CONFIG_CHECK and xyz_LIBS is set by PKG_CHECK_MODULES within AST_PKG_CONFIG_CHECK. Both are the same. In Asterisk normally the former and only three times the latter was used. Let us use xyz_LIB without s, for consistency with AST_EXT_LIB_CHECK. That eases understanding because now readers do not have to know that xyz_LIB equals xyz_LIBS. Change-Id: I7359860a5d730cdc784c2c48e501a082196434d3 2018-03-06 06:28 +0000 [16f6e94033] Alexander Traud * BuildSystem: Enable PortAudio in NetBSD. In NetBSD, PortAudio 1 is still the default version. PortAudio 2 can be installed side by side but gets placed in a 'portaudio2' subdirectory. To find PortAudio 2 even in a subdirectory, the tool pkg-config is queried via AST_PKG_CONFIG_CHECK. For those platforms, which do not list PowerAudio 2 via pkg-config, the previous check remains and is executed thereafter. ASTERISK-27721 Change-Id: I4175500126909ad1b181fff8e11bb4a3a6ae4fa9 2018-03-07 14:36 +0000 [c8a521b6c8] Corey Farrell * Replace direct checks of option_debug with DEBUG_ATLEAST macro. Checking option_debug directly is incorrect as it ignores file/module specific debug settings. This system-wide change replaces nearly all direct checks for option_debug with the DEBUG_ATLEAST macro. Change-Id: Ic342d4799a945dbc40ac085ac142681094a4ebf0 2018-03-07 13:13 +0000 [1fe913f7bd] Richard Mudgett * BuildSystem regression: Fix errors reported by clean targets. Doing a 'make clean', 'make distclean', or 'make dist-clean' gets errors about an invalid shell option: "/bin/sh: 0: Illegal option -". The clean targets do not include the makeopts file which defines GREP and LDCONFIG because the file may not exist and the distclean/dist-clean targets will delete it anyway. ASTERISK-27715 Change-Id: I33d40acdb03862bc89aeb6fb1ff497894a8ea7f5 2018-03-06 13:31 +0000 [88cef40f6e] Ross Beer * res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints ASTERISK-27554 Change-Id: If61c7faab7d2fa1031c056ed6268fe928e2391cf 2018-03-06 08:14 +0000 [961dd9fe52] Sungtae Kim * voicemail: Fixed wrong voicemail message count Fixed wrong voicemail mailbox reference for Action: VoicemailUsersList. ASTERISK-27703 Change-Id: Ie6578ad80bba2bfaf34b84f0be978f59045ce6cd 2018-03-07 09:32 +0000 [58f44f225a] Alexander Traud * utils: In Solaris, avoid a warning about an unused variable. When HAVE_GETHOSTBYNAME_R_5 was set by the script ./configure, GCC 7.3.0 found an unused variable. Actually, the variable was used (set to a dummy value) but the compiler optimization might have removed that. Instead, this change ensures that the variable 'res' is only used when it is really required. Change-Id: Ic3ea23ccf84ac4bc2d501b514985b989030abab5 2018-03-07 01:45 +0000 [add03e207c] Corey Farrell * app_osplookup: Move header defines into the app. astosp.h is leftover from when logic was split between app_osplookup and res_osp. All logic was moved into app_osplookup by 109737eb1c in 2006, but astosp.h remained. This moves the remaining defines into app_osplookup and deletes astosp.h. Change-Id: I0a6c4debd7c9543b608520b1765abfa4fab7b2fd 2018-02-14 07:33 +0000 [75a35ee5e8] Jean Aunis * chan_sip: Fix improper RTP framing on outgoing calls The "ptime" SDP parameter received in a SIP response was not honoured. Moreover, in the abscence of this "ptime" parameter, locally configured framing was lost during response processing. This patch systematically stores the framing information in the ast_rtp_codecs structure, taking it from the response or from the configuration as appropriate. ASTERISK-27674 Change-Id: I828a6a98d27a45a8afd07236a2bd0aa3cbd3fb2c 2018-02-20 11:48 +0000 [3fb26df4ac] lvl * res_pjsip_session: properly handle SDP from a forked call with early media In handle_negotiated_sdp(), use session->active_media_state when session->pending_media_state is empty. The 200's SDP should be fed into handle_negotiated_sdp_session_media() together with the already negotiated state, which is now in session->active_media_state instead. Only if both the session's pending and active media are empty should handle_negotiated_sdp() abort. ASTERISK-27441 Change-Id: If0d5150ffe6f38d8a854831fef37942258d4629c 2018-03-05 08:01 +0000 [ef79e583ec] Alexander Traud * BuildSystem: Enable Lua in NetBSD. luaL_openlib got removed with Lua 5.2. luaL_newstate is available in all versions. ASTERISK-27718 Change-Id: I9c8c8880315ee36ab740d7c40153306c0bfd6f71 2018-03-06 07:33 +0000 [162fc4fba6] Alexander Traud * BuildSystem: Depend not implicitly but explicitly on external libraries. ASTERISK-27722 Change-Id: Ie7b8c30d86cb00a54d6ac4e09e6f28f42d2bd52c 2018-03-05 08:15 +0000 [99b6a14737] Alexander Traud * res_http_post: Enable GMime in NetBSD. ASTERISK-27719 Change-Id: I230c5f9f316b2e9465c093c13580f72ebbaf67a7 2018-03-05 04:16 +0000 [7e9734a858] Alexander Traud * BuildSystem: Enable autotools in NetBSD. ASTERISK-27716 Change-Id: I52525e35e1620341272219911d054a1e3d3ec01e 2018-03-05 03:42 +0000 [b97905aaf2] Alexander Traud * BuildSystem: AC_PATH_PROG sets to colon character when not found. ASTERISK-27715 Reported by: Corey Farrell Change-Id: I0d6d9572d1352dc7ad30c9917173f1e980d8c938 2018-03-03 09:06 +0000 [aabbb49e33] Alexander Traud * chan_unistim: NetBSD has an incompatible struct in_pktinfo. ASTERISK-27714 Reported by: John Nemeth Change-Id: I1b84a89315a5f61222123d21bf35c59224da8990 2018-03-03 08:30 +0000 [5d19762b5f] Alexander Traud * BuildSystem: Cast any intptr_t explicitly to its proposed type. ASTERISK-27713 Change-Id: I90c769e3c7f8c26de8a3af11335862cec15a1b22 2018-03-03 06:56 +0000 [9749524520] Alexander Traud * BuildSystem: Detect whether uselocale(.) is available. ASTERISK-27712 Reported by: Joerg Sonnenberger, D'Arcy Cain Change-Id: Idf1c9d43617a3e13028b95b313415903d80ef807 2018-03-03 03:53 +0000 [f7b845ff41] Alexander Traud * BuildSystem: Avoid re-defining of pthread_* on NetBSD. ASTERISK-27711 Change-Id: Idc9194035b2958b99f6b01eb5b438d45a074565b 2018-03-02 07:05 +0000 [313a9fe255] Alexander Traud * BuildSystem: Install init scripts on openSUSE Tumbleweed. ASTERISK-27710 Change-Id: I4c777e41b31d4415bbe21cb435ad47b43ebb5467 2018-03-02 05:12 +0000 [a9c02e484a] Alexander Traud * BuildSystem: Avoid == for comparison in ./configure. ASTERISK-27709 Reported by: John Nemeth Change-Id: I11b1ae8fd404c04066f1458f5d71f9536359d58d 2018-02-19 19:55 +0000 [c711e4076a] Richard Mudgett * core: Remove ABI effects of MALLOC_DEBUG. This allows asterisk to be compiled with MALLOC_DEBUG to load modules built without MALLOC_DEBUG. Now pre-compiled third-party modules will still work regardless of MALLOC_DEBUG being enabled or not. Change-Id: Ic07ad80b2c2df894db984cf27b16a69383ce0e10 2018-02-27 15:40 +0000 [1a36a452bd] Richard Mudgett * pjproject: Add cache_pools debugging option. The pool cache gets in the way of finding use after free errors of memory pool contents. Tools like valgrind and MALLOC_DEBUG don't know when a pool is released because it gets put into the cache instead of being freed. * Added the "cache_pools" option to pjproject.conf. Disabling the option helps track down pool content mismanagement when using valgrind or MALLOC_DEBUG. The cache gets in the way of determining if the pool contents are used after free and who freed it. To disable the pool caching simply disable the cache_pools option in pjproject.conf and restart Asterisk. Sample pjproject.conf setting: [startup] cache_pools=no * Made current users of the caching pool factory initialization and destruction calls call common routines to create and destroy cached pools. ASTERISK-27704 Change-Id: I64d5befbaeed2532f93aa027a51eb52347d2b828 2018-01-31 11:48 +0000 [eacee03f0e] Corey Farrell * gitreview: Reorder and add padding. Change-Id: I459dc320a8c9452a01eed6f403d786741587c890 2018-02-23 21:24 +0000 [7b01236028] Michael Cargile * apps/app_amd.c: Fixed total time and silence calculations Between Asterisk 11 and Asterisk 13 there was a significant increase in the number of AST_FRAME_NULL frames being processed by app_amd.c's main loop. Each AST_FRAME_NULL frame was being counted as 100ms towards the total time and silence. This may have been accurate when app_amd.c was orginally added, but it is not in Asterisk 13. As such the total analysis time and silence calculations were way off effectively breaking app_amd.c * Additional debug messages were added * AST_FRAME_NULL are now ignored ASTERISK-27610 Change-Id: I18aca01af98f87c1e168e6ae0d85c136d1df5ea9 2018-02-23 14:58 +0000 [7e2128c8e6] George Joseph * ast_coredumper: Minor fixes * Fix --tarball-config so the option doesn't cause an error. * Allow for missing /etc/os-release. * Add a sleep between tarballing the coredump and removing the output directory to allow the filesystem to settle. Change-Id: I73e03b13087978bcc7f6bc9f45753990f82d9d77 2018-02-22 14:27 +0000 [0be1c388e4] Ben Ford * Add extended properties to rtp_engine for RTP retransmission support. A couple of additional properties are needed in rtp_engine to enable support for packet retransmission: AST_RTP_PROPERTY_RETRANS_RECV and AST_RTP_PROPERTY_RETRANS_SEND. These will both be enabled automatically if an endpoint has the webrtc option enabled. While this adds no functionality currently, it will serve as a building block for future changes for RTP retransmission support. For more information, refer to the wiki page: https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements Change-Id: Ic598acd042a045f9d10e5bdccb66f4efc9e587cc 2018-02-23 10:09 +0000 [a7927471ad] Corey Farrell * core: Fix handling of maximum length lines in config files. When a line is the maximum length "\n" is found at sizeof(buf) - 2 since the last character is actually the null terminator. In addition if a line was exactly 8190 plus a multiple of 8192 characters long the config parser would skip the following line. Additionally fix comment in voicemail.conf sample config. It previously stated that emailbody can only contain up to 512 characters which is always wrong. The buffer is normally 8192 characters unless LOW_MEMORY is enabled then it is 512 characters. The updated comment states that the line can be up to 8190 or 510 characters since the line feed and NULL terminator each use a character. ASTERISK-26688 #close Change-Id: I80864a0d40d2e2d8cd79d72af52a8f0a3a99c015 2018-02-22 13:53 +0000 [bb9c1938a0] Richard Mudgett * res_pjsip_refer.c: Fix attended transfer race condition crash. The transferrer's session channel was destroyed by the transferrer's serializer thread in a race condition with the transfer target's serializer thread during an attended transfer. The transfer target's serializer was attempting to clean up a deferred end status on behalf of the transferrer's channel when it should have passed the action to the transferrer's serializer. When the transfer target's serializer lost the race then both threads wind up trying to end the transferrer's session. * Push the ast_sip_session_end_if_deferred() call onto the transferrer's serializer to avoid a race condition that results in a crash. The session_end() function that could be called by ast_sip_session_end_if_deferred() really must be executed by the transferrer's serializer to avoid this kind of crash. ASTERISK-27568 Change-Id: Iacda724e7cb24d7520e49b2fd7e504aa398d7238 2018-02-17 03:28 +0000 [c4c5d00528] Alexander Traud * install_prereq: Update FreeBSD libraries. deleted autoconf gcc libsamplerate sqlite changed binutils to libbfd freetds-devel to freetds gmime2 to gmime26 mysql55-client to mysql57-client added alsa-lib bison bzip2 cclient corosync doxygen libedit flex graphviz libhoard libical libilbc libltdl lua neon newt net-snmp openldap-client openssl patch pkgconf portaudio postgresql10-client python radcli speexdsp subversion uriparser xmlstarlet libzip ASTERISK-27686 Change-Id: Ibe88c9b26e59c30d26cdb313a3ef01c9f37ac80d 2018-02-22 10:54 +0000 [50d9af101e] Sean Bright * func_audiohookinherit: Remove deprecated module. Change-Id: Id52f719078a65c4b2eee7ab99d761eba6b6aed94 2018-02-21 12:52 +0000 [f083edc43c] Richard Mudgett * manager.c: Fix lseek() parameter order. ASTERISK-27659 Change-Id: I04a2705d2cb7df250769967bc59e2b397a49b797 2018-02-20 13:11 +0000 [39f733406d] Richard Mudgett * bridge_simple.c: Fix stream topology handling. The handling of stream topologies was not protected by channel locks in simple_bridge_request_stream_topology_change(). * Fixed topology handling to be protected by channel locks where needed in simple_bridge_request_stream_topology_change(). ASTERISK-27692 Change-Id: Ica5d78a6c7ecf4f0b95fb16de28d3889b32c4776 2018-02-05 16:46 +0000 [6436137959] Sean Bright * AST-2018-006: Properly handle WebSocket frames with 0 length payload. In ast_websocket_read() we were not adequately checking that the payload_len was non-zero before passing it to ws_safe_read(). Calling ws_safe_read with a len argument of 0 will result in a busy loop until the underlying socket is closed. ASTERISK-27658 #close Change-Id: I9d59f83bc563f711df1a6197c57de473f6b0663a 2018-01-31 13:37 +0000 [880c69f00f] Kevin Harwell * AST-2018-003: Crash with an invalid SDP fmtp attribute pjproject's fmtp retrieval function failed to catch invalid fmtp attributes. Because of this Asterisk would crash if given an SDP with an invalid fmtp attribute. When retrieving the format this patch now makes sure the fmtp attribute is available. If not available it now returns an error status. ASTERISK-27583 #close Change-Id: I5cebe000ce2d846cae3af33b6d72c416e51caf2f 2018-01-31 13:33 +0000 [d3a398cf90] Kevin Harwell * AST-2018-002: Crash with an invalid SDP media format description pjproject's media format parsing algorithm failed to catch invalid values. Because of this Asterisk would crash if given an SDP with a invalid media format description. When parsing the media format description this patch now properly parses the value and returns an error status if it can't successfully parse/convert the value. ASTERISK-27582 #close Change-Id: I883b3a4ef85b6972397f7b56bf46c5779c55fdd6 2018-02-06 12:07 +0000 [758409de56] George Joseph * AST-2018-005: res_pjsip_transport_management: Move to core Since res_pjsip_transport_management provides several attack mitigation features, its functionality moved to res_pjsip and this module has been removed. This way the features will always be available if res_pjsip is loaded. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: I21a2d33d9dda001452ea040d350d7a075f9acf0d 2018-02-06 11:28 +0000 [de871515ba] George Joseph * AST-2018-005: Fix tdata leaks when calling pjsip_endpt_send_response(2) pjsip_distributor: authenticate() creates a tdata and uses it to send a challenge or failure response. When pjsip_endpt_send_response2() succeeds, it automatically decrements the tdata ref count but when it fails, it doesn't. Since we weren't checking for a return status, we weren't decrementing the count ourselves on error and were therefore leaking tdatas. res_pjsip_session: session_reinvite_on_rx_request wasn't decrementing the ref count if an error happened while sending a 491 response. pre_session_setup wasn't decrementing the ref count if while sending an error after a pjsip_inv_verify_request failure. res_pjsip: ast_sip_send_response wasn't decrementing the ref count on error. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: Iab33a6c7b6fba96148ed465b690ba8534ac961bf 2018-02-06 11:21 +0000 [c53d8dcb68] George Joseph * AST-2018-005: Add a check for NULL tdata in ast_sip_failover_request It was discovered that there are some corner cases where a pjsip tsx might have no last_tx so calling ast_sip_failover_request with a NULL last_tx as its tdata would cause a crash. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: Ic2b63f6d4ae617c4c19dcdec2a7a6156b54fd15b 2018-02-07 08:09 +0000 [d424850d58] Joshua Colp * AST-2018-004: Restrict the number of Accept headers in a SUBSCRIBE. When receiving a SUBSCRIBE request the Accept headers from it are stored locally. This operation has a fixed limit of 32 Accept headers but this limit was not enforced. As a result it was possible for memory outside of the allocated space to get written to resulting in a crash. This change enforces the limit so only 32 Accept headers are processed. ASTERISK-27640 Reported By: Sandro Gauci Change-Id: I99a814b10b554b13a6021ccf41111e5bc95e7301 2018-01-13 08:04 +0000 [e70c4ec84d] Joshua Colp * AST-2018-001: rtp / channel: Don't allow an unnegotiated format to be passed up. When an RTP packet is received by an RTP engine it has to map the payload into the Asterisk format. The code was incorrectly checking our own static list for ALL payloads if it couldn't find a negotiated one. This included dynamic payloads. If the payload mapped to a format of a different type (for example receiving a video packet on an audio RTP instance) then the core stream code could cause a crash if a legacy channel driver was in use as no stream would be present. To provide further protection the core stream code will no longer assume that a video or audio frame will always have a stream for legacy channel drivers. If no stream is present the frame is dropped. ASTERISK-27488 Change-Id: I022556f524ad8379ee73f14037040af17ea3316a 2018-02-20 13:11 +0000 [e2f98fbd63] Richard Mudgett * channel.c: Fix typo. Change-Id: I4eeedf89085697e81c354eb92d546686c67b0b5b 2018-02-20 10:33 +0000 [259c80675e] Joshua Colp * chan_sip: Emit a second ringing event to ensure channel is found. When constructing a dialog-info+xml NOTIFY message a ringing channel is found if the state is ringing and further information is placed into the message. Due to the migration to the Stasis message bus this did not always work as expected. This change raises a second ringing event in such a way to guarantee that the event is received by chan_sip and another lookup is done to find the ringing channel. ASTERISK-24488 Change-Id: I547a458fc59721c918cb48be060cbfc3c88bcf9c 2018-02-20 04:31 +0000 [0ad13949c1] Corey Farrell * doc/lang/language-criteria.txt: Link to wiki. This document is out of date and is superseded by content on the Asterisk wiki. ASTERISK-24386 #close Change-Id: Idbf95b27b096c205251e1bbb560c79224ba81822 2018-02-19 04:21 +0000 [4b555d7147] Thomas Guebels * res_rtp_asterisk: Fix ICE candidate nomination If the ICE role is not set right away, we might have a role conflict that stays undetected and ICE finishing with successful tests and no candidate nominated. This was introduced by ASTERISK-27088. To avoid this, we set the role as soon as before but only if the ICE state permits it: still checking and not yet nominating candidates or completed. ASTERISK-27646 Change-Id: I5dbc69ad63cacbb067922850fbb113d479bd729c 2018-02-18 10:27 +0000 [8b18247af6] Sean Bright * res_http_websocket: Don't leak memory on read failure Change-Id: Ic449ea832bc81a1671c0e910c5fbe8c683e3da89 2018-02-19 03:57 +0000 [97c21e9cb3] Corey Farrell * core: Rename sounds_index.c to sounds.c. This will make the source filename match the 'module reload sounds' command. This will allow conversion to a built-in module in Asterisk 16 without needing to redefine AST_MODULE. Change-Id: Ifb8e489575b27eb33d8c0b6a531f266670557f6e 2018-02-19 02:49 +0000 [e03f0f9572] Corey Farrell * config: Fix locking for extconfig reload. Expand locking to include full reload process for extconfig to ensure nothing can read the config mappings between clearing and reloading. Change-Id: I378316bad04f1b599ea82d0fef62b8978a644b92 2018-02-15 14:09 +0000 [e4a5c9ccf4] Sean Bright * res_pjsip_header_funcs: Various cleanups * Prefer strcasecmp() over stricmp() * Use a list with no lock since we never actually lock * Minor cleanups to error messages Change-Id: I8446f44795ee8f3072e1c1f9193c6912dfc0c42b 2018-02-17 08:49 +0000 [a70c92121d] Alexander Traud * rtp_engine: Load format name / mime type in uppercase again. This reverts a previous change partly. ASTERISK-27689 Change-Id: Ia3d2f282db6995be8c1c253b5d52f6038761e8af 2018-02-16 17:58 +0000 [525c0251c0] Corey Farrell * BuildSystem: Use single bootstrap.sh for Asterisk and menuselect. This causes the root bootstrap.sh script to generate configure scripts for both Asterisk and menuselect. This ensures that both configure scripts are generated with the same version of autotools and avoids situations where shared autoconf macros get modified without regenerating the menuselect script. Change-Id: I2bfd8537bbb63b3d46b11efabbb15eaaf9ef731a 2018-02-16 13:33 +0000 [65a4084060] Sean Bright * res_pjsip: Endpoint destruction does not free DTLS configuration ASTERISK-27679 #close Reported by: Mak Dee Change-Id: I89a2783a11be0763bf123d1619ed176b6225cf42 2018-02-16 12:42 +0000 [a7e7302ab6] Alexander Traud * install_prereq: Update OpenBSD libraries. deleted jack sqlite renamed freetds-0.63p1-msdblib to freetds mysql-client to mariadb-client added bison bzip2 c-client doxygen e2fsprogs graphviz gsm libical jansson libltdl lua neon net-snmp libsrtp portaudio-svn postgresql-client python speexdsp subversion uriparser xmlstarlet fftw3 libsndfile ASTERISK-27684 Change-Id: I26bdcb0a1d0e484a8dad1052da97f194aefd3370 2018-02-16 12:30 +0000 [14796f529e] Alexander Traud * BuildSystem: Allow newer autotools on OpenBSD. ASTERISK-27683 Change-Id: I5ec9dafbb0c16b6f2740c641980bc2eaaf995624 2017-10-16 07:36 +0000 [976afd26ab] Torrey Searle * contrib/script/sip_to_pjsip: add support for realtime Add a new script that can read from legacy realtime peers & generate an sql file for populating pjsip endpoints, identify, and aor records. ASTERISK-27348 #close Change-Id: Idd3d7968a3c9c3ee7936d21acbdaf001b429bf65 2018-02-16 07:52 +0000 [dda73c5018] Alexander Traud * BuildSystem: Fix a typo related to ./configure --prefix= on OpenBSD. Reported by: Stuart Henderson Change-Id: Ieae8624f48b6ae78cf29930b9a45a3c842c7a764 2018-02-16 05:58 +0000 [5fd59014a5] Alexander Traud * res_calendar: Specialized calendars depend on symbols of general calendar. ASTERISK-27680 Change-Id: Ifb77912e424fe3710a025c18526fada673ec0b79 2018-02-16 06:41 +0000 [c674efa996] Alexander Traud * BuildSystem: Enable IMAP storage on OpenBSD. ASTERISK-27681 Reported by: Stuart Henderson Change-Id: Ifb6b614acb251b695b9417d76510e73eb335b679 2018-02-16 04:50 +0000 [2c814afb86] Alexander Traud * BuildSystem: Enable system provided libedit on OpenBSD. ASTERISK-27677 Change-Id: I0854e3616d1361ae9b6907d3d3444a02784ac62b 2018-02-15 14:30 +0000 [af2dd3a678] Sean Bright * bridge_roles: Use a non-locking linked list where appropriate Also explicitly initialize with the AST_LIST_HEAD_NOLOCK_INIT macro for clarity. Change-Id: I4bc39ec33bc3ff77e1a971a01ace87deb965be3f 2018-02-15 13:29 +0000 [303e43f8a6] Sean Bright * res_pjsip: Use pjsip_sip_uri.user_param instead of other_param There is a dedicated slot in the pjsip_sip_uri for the 'user' parameter, so use that instead of adding to the list of generic URI parameters. Change-Id: I0a0ce8a60ecee27489735bf56fd707719d8c2ed6 2018-02-12 07:37 +0000 [8ac198aff3] Alexander Traud * BuildSystem: Remove chan_h323 leftovers. ASTERISK-27670 Change-Id: I07a8ef8bbd6001e25711fa1bff152eb6c9efa729 2018-01-17 08:17 +0000 [6b6b3ffa5b] Alexander Traud * BuildSystem: Invoke ldconfig with previous path. On OpenBSD, gmake uninstall{-all} registered only libraries from /usr/lib and lost those from /usr/local/lib. Instead, invoke ldconfig on a path. ASTERISK-27595 Change-Id: I4aa2c0b5e07119d1a556f8ff6349eaf09e986888 2017-12-22 15:27 +0000 [9f74afbdcf] Corey Farrell * Deprecate legacy modules. * app_fax (replaced by res_fax). * res_config_sqlite (replaced by res_config_sqlite3). * res_monitor (replaced by app_mixmonitor). This is related to ASTERISK~23657 but does not resolve that ticket. Resolving that ticket would require complete removal of res_monitor. ASTERISK-27671 #close Change-Id: I16a3edd61fc1abd4a7b2e9357693ed663f62dd49 2018-01-28 03:02 +0000 [f9ba31bb21] Alexander Traud * BuildSystem: Do not warn when bash is not installed. ASTERISK-27631 Change-Id: Iefdf268b0b98c3e7d8089ba87cf78136ac1d785b 2018-02-12 22:15 +0000 [9e45d3f893] Corey Farrell * main/asterisk.c: Remove silly usage of RAII_VAR. Change-Id: I7e2996397fbd3c3a6a69dd805c38448ddfc34ae9 2017-12-25 19:32 +0000 [02ee296f81] Corey Farrell * optional_api: Refactor to use vector's and standard allocators. * Replace ad-hoc array management with macro's from vector.h. * Remove redundent logger messages. * Use normal Asterisk allocators instead of directly using libc allocators. * Free memory when an API has no implementation or users. Change-Id: Ic6ecb31798d4a78e7df39ece86a68b60eac05bf5 2018-02-11 15:27 +0000 [8372138cce] Richard Mudgett * chan_sip.c: Fix crash processing CANCEL. Check if initreq data string exists before using it when processing a CANCEL request. ASTERISK-27666 Change-Id: Id1d0f0fa4ec94e81b332b2973d93e5a14bb4cc97 2018-02-06 14:27 +0000 [cb4cfb8c43] Sungtae Kim * manager: Add AMI event Load/Unload Add an AMI events Load and Unload for notify when the module has been loaded and unloaded. ASTERISK-27661 Change-Id: Ib916c41eddd63651952998f2f49c57c42ef87a64 2018-01-30 20:31 +0000 [04490fb1d8] Corey Farrell * json: Add conditionals to avoid locking if Jansson is thread safe. Jansson is thread safe for all read-only functions and reference counting starting v2.11. This allows simplification of our code and removal of locking around reference counting and dumping. Change-Id: Id985cb3ffa6681f9ac765642e20fcd187bd4aeee 2018-02-12 06:16 +0000 [b21915bd1c] Alexander Traud * pjproject_bundled: Disable G.729 from Belledonne Communications. When is installed, PJProject tries to link that. Support for this bcg729 was added with PJProject 2.7. The issue happens, because Teluu enabled that new feature on default. ASTERISK-27584 Reported by: Stuart Henderson Change-Id: I88b6b18ad777bcfe2d8201187b4b90eec0a172a6 2018-02-12 05:38 +0000 [97f45d5816] Alexander Traud * codecs: Add support for WebRTC iLBC 2.0. When the latest version of that library was installed, Asterisk did not build. ASTERISK-27669 Reported by: Николай Михо Change-Id: I27e09bb875fdd56423bd9fae1be85fddb428eb96 2018-02-12 01:26 +0000 [9fddc8b4dc] Corey Farrell * core: Remove embedded editline. This removes the embedded copy of editline from the Asterisk source tree, making a system copy of libedit mandatory in Asterisk 16+. ASTERISK-27634 #close Change-Id: Iedb64ad92acb78419f3caefedaa2bb7cd2a1a33f 2018-01-30 09:58 +0000 [32e610d9e6] Alexander Traud * backtrace: Avoid potential spurious output. clang 4.0 found this via -Wlogical-not-parentheses. ASTERISK-27642 Change-Id: I9ec3e144d425a976c02811bd23cd0c533d2eca4e 2018-02-10 05:39 +0000 [971378bbdb] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Idc36e91db30c0163c560d04c5a82bca5d6ce92a8 2018-02-09 12:06 +0000 [b2fcb30d38] Richard Mudgett * cdr.c: Fix runtime leak of CDR records. Need to remove all CDR's listed by a CDR object from the active_cdrs_all container including the root/master record. ASTERISK-27656 Change-Id: I48b4970663fea98baa262593d2204ef304aaf80e 2018-01-31 17:48 +0000 [67cd90f10d] Richard Mudgett * app_confbridge: ConfbridgeList event has standard channel shapshot headers. * Made the AMI ConfbridgeList action's ConfbridgeList events output all the standard channel snapshot headers instead of a few hand-coded channel snapshot headers. The benefit is that the CallerIDName gets disruptive characters like CR, LF, Tab, and a few others escaped. However, an empty CallerIDName is now output as "" instead of "". ASTERISK-27651 Change-Id: Iaf7d54a9d40194c2db060bc9b4979fab6720d977 2018-01-31 15:45 +0000 [f4b161440b] Richard Mudgett * app_confbridge: Add the Muted header to ConfbridgeJoin AMI event. ASTERISK-27651 Change-Id: Idef2ca54d242d1b894efd3fc7b360bc6fd5bdc34 2017-12-19 02:52 +0000 [5b8fea93d1] Oron Peled * chan_console: don't read and write at the same time It seems that the ALSA backend of PortAudio doesn't know how to both read and write at the same time by adding a per-device mutex. FIXME: currently only a draft version. Need to either auto-detect we work with the ALSA backend or add an extra configuration option to use this mutex. ASTERISK-27426 #close Change-Id: I635eacee45f5413faa18f5a3b606af03b926dacb 2018-02-02 17:35 +0000 [1017db107c] Richard Mudgett * endpoint identifiers: Some code cleanup. res_pjsip_endpoint_identifier_user.c: * Fix copy/paste error in find_endpoint(). We were using a constant "anonymous" string instead of the passed in endpoint_name when checking the transport domain for an endpoint match. * Eliminate RAII_VAR in find_endpoint(). * Remove always true check in find_transport_state_in_use(). * Remove useless CMD_STOP in find_transport_state_in_use(). res_pjsip_endpoint_identifier_anonymous.c: * Eliminate RAII_VAR in anonymous_identify(). * Remove always true check in find_transport_state_in_use(). * Remove useless CMD_STOP in find_transport_state_in_use(). Change-Id: I86924c31db5bd225ca0c1219c761b668c6f91189 2018-02-02 17:20 +0000 [b71e469d68] Richard Mudgett * res_pjsip/config_domain_aliases.c: Add check for missing domain. What is the point of defining an alias and not saying what is being aliased? Change-Id: I98a892016ed61dcf5efeb6619fd748925103f0be 2018-02-02 15:11 +0000 [0960de71ae] Richard Mudgett * res_pjsip.c: Fix documentation typos. Change-Id: I82ae0b92bfa2ece84a5c684efd9eefdc83ebd068 2018-02-02 15:43 +0000 [bef49d90c1] Richard Mudgett * res_sorcery_realtime.c: Fix ref leak if object failed to apply. Change-Id: I3c7106ff77009754725cee790eadf5da44154ab6 2018-01-24 19:58 +0000 [7e32adf044] Sungtae Kim * manager.c: Fixed "(null):" header in AMI AsyncAGIEnd event * Changed to create ami_event string only when the given blob is not json_null(). * Fixed bad expression. ASTERISK-27621 Change-Id: Ice58c16361f9d9e8648261c9ed5d6c8245fb0d8f 2018-02-01 13:01 +0000 [73f92c2c52] Joshua Elson * res_pjsip_mwi.c: Fix null pointer crash ASTERISK-27652 #close Change-Id: I78a0d38bfd8d0d82830f3d53da04872d6b67284d 2018-02-01 15:03 +0000 [fc98843d4b] Sean Bright * appdocsxml.xslt: Add Language to channel snapshot transformation Change-Id: I8f494b0c895a69b8bc94656d0c6ceebecb0394d8 2018-01-31 15:40 +0000 [3419a048b9] Richard Mudgett * manager.c: Fix potential memory leak and corruption. ast_str_append_event_header() could potentially leak and corrupt memory if the ast_str needed to expand to add the AMI event header. * Fixed to return error if the ast_str_append() failed. Change-Id: I92f36b855540743b208d76e274152ee2d758176d 2018-01-31 17:27 +0000 [bcfe172f8d] Richard Mudgett * manager_channels.c: Reordered ast_manager_build_channel_state_string_prefix() * Made not allocate memory if the channel snapshot is an internal channel. * Free memory earlier when no longer needed. Change-Id: Ia06e0c065f1bd095781aa3f4a626d58fa4d28b38 2018-01-31 12:44 +0000 [4e4428ef3c] Corey Farrell * res_pjsip_registrar_expire: Delete empty module. Verified nothing in the testsuite lists this module as a dependency. Change-Id: I90c7d52c7e15e85fde3389d5eaccb05b97848813 2018-01-30 19:22 +0000 [1ccac0be0e] Richard Mudgett * bridge_softmix.c: Report not talking immediately when muted. Currently in app_confbridge if someone mutes a channel while that channel is talking, the talk detection code is suspended while the channel is muted. As far an an external observer is concerned, the muted channel's talk status is still "talking" even though the channel is not contributing audio to the conference bridge. When the channel is later unmuted, it takes the usual 'dsp_silence_threshold' option time to clear the talking status even though the channel may have stopped talking while the channel was muted. * In bridge_softmix.c, clear the talking status and report talking stopped if the channel was talking when the channel is muted. When the channel is unmuted and the channel is still talking then report the channel as talking since it is contributing audio to the bridge again. ASTERISK-27647 Change-Id: Ie4fdbc05a0bc7343c2972bab012e2567917b3d4e 2018-01-30 15:00 +0000 [b9024197ab] Richard Mudgett * app_confbridge: Update dsp_silence_threshold and dsp_talking_threshold docs. The dsp_talking_threshold does not represent time in milliseconds. It represents the average magnitude per sample in the audio packets. This is what the DSP uses to determine if a packet is silence or talking/noise. Change-Id: If6f939c100eb92a5ac6c21236559018eeaf58443 2018-01-31 11:00 +0000 [6c5e3226ec] Richard Mudgett * res_pjsip_registrar.c: Fix compiler error. Need to include signal.h to define pthread_kill() and SIGURG. Change-Id: I10ae3aa4bf8e7386ac29ade78c0f2caed8e674fa 2018-01-30 23:05 +0000 [60701b3252] Corey Farrell * res_pjsip_session: Prevent crash during shutdown. pjproject does not have a function to reverse pjsip_inv_usage_init. This means we need to ignore any calls to the functions once shutdown is final. ASTERISK-27571 #close Change-Id: Ia550fcba563e2328f03162d79fb185f16b7c9b9d 2018-01-27 13:03 +0000 [720dbb5745] Corey Farrell * core: Create ast_atomic macro's. Create ast_atomic macro's to provide a consistent interface to the common functionality of __atomic and __sync built-in functions. ASTERISK-27619 Change-Id: Ieba3f81832a0e25c5725ea067e5d6f742d33eb5b 2018-01-28 10:10 +0000 [2b9aa6b5bb] George Joseph * res_pjsip_pubsub: Prune subs with reliable transports at startup In an earlier release, inbound registrations on a reliable transport were pruned on Asterisk restart since the TCP connection would have been torn down and become unusable when Asterisk stopped. This same process is now also applied to inbound subscriptions. Also fixed issues in res_pjsip_registrar where it wasn't handling the monitoring correctly when multiple registrations came in over the same transport. To accomplish this, the pjsip_transport_event feature needed to be refactored to allow multiple monitors (multiple subcriptions or registrations from the same endpoint) to exist on the same transport. Since this changed the API, any external modules that may have used the transport monitor feature (highly unlikey) will need to be changed. ASTERISK-27612 Reported by: Ross Beer Change-Id: Iee87cf4eb9b7b2b93d5739a72af52d6ca8fbbe36 2018-01-29 13:46 +0000 [81db0aca0f] George Joseph * res_pjsip_registrar_expire: Refactor into res_pjsip_register res_pjsip_registrar_expire remains as an empty module for now. Change-Id: Ib93698938bae548d2199cb542f3692d1a171239f 2018-01-29 07:51 +0000 [cf21e9fc97] Corey Farrell * Sample modules.conf: comment out example load statement. The sample modules.conf explicitly loaded res_musiconhold.so. This is redundent as autoload=yes is already set. It causes warnings if res_musiconhold.so was not installed and results in an unexpected load if the admin disables autoload without remembering to remove the res_musiconhold load statement. Also remove reference to unknown module pbx_gtkconsole. Change-Id: Ib01888994d9f1364b14d3c9fb6ff96774a6e580a 2018-01-29 10:20 +0000 [913773cd75] Alexander Traud * BuildSystem: Enable autotools in FreeBSD. In the current versions of FreeBSD, the apps of GNU autotools do not need to be called with a version anymore. The latest version can be invoked directly. Additionally, the script ./bootstrap.sh asked for autoconf 2.62 and automake 1.9, versions which are not available as port anymore. ASTERISK-27637 Change-Id: Id7b94b80e78cc943a40ba79b697e3f70019820a7 2018-01-29 10:00 +0000 [156b12340e] Alexander Traud * app_voicemail: Avoid always true when using pointer address. clang 4.0 warned about this. ASTERISK-27635 Change-Id: I213f230607d7fbe97c0f5f2d60da9cbf5a2d8231 2018-01-19 05:13 +0000 [e7f8ef1935] Alexander Traud * install_prereq: Update RHEL/CentOS/Fedora libraries. deleted automake git ncurses-devel pjproject-devel sqlite2-devel libsqlite3x-devel renamed radiusclient-ng-devel to radcli-devel gmime22-devel to gmime-dev added alsa-lib-devel bash binutils-devel bison doxygen flex hoard make pkgconfig speexdsp-devel uriparser-devel uw-imap-devel wget xmlstarlet zlib-devel codec2-devel fftw-devel libsndfile-devel unbound-devel ASTERISK-27599 Reported by: Said Masoud Change-Id: I05bb0af98ae532b2d5f37478e38b8f0762b1c035 2018-01-28 05:20 +0000 [aaf14670b5] Alexander Traud * BuildSystem: Remove unused variables. Because of a copy-and-paste from the script build_tools/download_externals, the script build_tools/list_valid_installed_externals got its local variables. However in the latter, three variables were not used actually. Change-Id: I252de5a98c17ea54459174875357c22c2eebe8d5 2018-01-25 12:06 +0000 [84a6365164] Corey Farrell * loader: Use ast_cli_completion_add for 'module load' completion. This addresses all performance issues with 'module load' completion. In addition to using ast_cli_completion_add we stop using libedit's filename_completion_function, instead using ast_file_read_dir. This ensures all results are produced from a single call to opendir. Change-Id: I8bf51ffaa7ef1606f3bd1b5bb13f1905d72c6134 2018-01-27 09:44 +0000 [d9e42f27b9] Alexander Traud * core: Fix unused variable error in handle_show_sysinfo. The previous fix broke the case HAVE_SYSINFO = no HAVE_SYSCTL = yes HAVE_SWAPCTL = no which occurs on FreeBSD 11.1 for example. ASTERISK-26563 Change-Id: If77c39bc75f0b83a6c8a24ecb2fa69be8846160a 2018-01-27 08:54 +0000 [3c26eec043] Alexander Traud * editline: Avoid shifting a negative signed value. clang 4.0 warned about this. ASTERISK-27630 Change-Id: Ie2725048c661c1792d8b1d498575144350b6e9ba 2018-01-27 03:25 +0000 [c38da18ec6] Alexander Traud * headers: Consistent use of typeof and/or __typeof__. Because of a copy-and-paste error, the Asterisk project was using __typeof instead of typeof. It works because typeof, __typeof, and __typeof__ are supported by GCC, but here the escaped variant was not intended. Therefore, for consistence, we change this to typeof. Change-Id: I2a962c3e596e882f691a19345445b14571a5f07c 2018-01-24 18:25 +0000 [5d320d2d4b] Richard Mudgett * Update sounds release to fix siren7 and siren14 files. ASTERISK-16172 Change-Id: I2fb564258cd4db0f35952ad48b8687355c2dcad3 2018-01-15 11:08 +0000 [6da970bfb9] Alexander Traud * BuildSystem: Raise autoconf version requirement to 2.60a. AC_COMPUTE_INT requires at least autoconf 2.60a. This affects only those who contribute to Asterisk, only those who had to use the script ./bootstrap.sh. Furthermore, this change just makes sure nobody is using a too old autoconf. ASTERISK-16951 Change-Id: Ibca850e2fe0e77d935207bd959bacf7197d7f637 2018-01-26 06:48 +0000 [0afff31ed0] Alexander Traud * install_prereq: Download latest Jansson. ASTERISK-27603 Change-Id: I65c587534c0ae364f063d68da1bed40bb3d5e8aa 2018-01-01 15:59 +0000 [39fcecad59] Corey Farrell * core: Tweak startup order. Move initialization of units which do not require configuration to occur before preload modules. This leaves only units which load config between module preload and regular load stages. Change-Id: I1d15384acad16a22c3498124421af474fa517478 2018-01-25 01:37 +0000 [23381d2c5e] Corey Farrell * Build System: Require __sync or __atomic functions. This change causes the configure script to throw an error if neither __sync nor __atomic builtin functions are available. ASTERISK-27619 Change-Id: Ie01a281e0f5c41dfeeb5f250c1ccea8752f56ef9 2018-01-24 22:44 +0000 [a164b7ccfb] Corey Farrell * loader: Correct overly strict startup checks. The code which handled loading modules had too many situations which would result in halting Asterisk startup. Treat most errors as declines instead of failures. The exception is when the module load function returns AST_MODULE_LOAD_FAILURE or an invalid code. Clear the missingdeps vector when appropriate to ensure the next loop starts clean. ASTERISK-27620 Change-Id: I45547d9641fd45bd86d80250224417625631ad84 2018-01-24 18:49 +0000 [6fbd855228] Corey Farrell * Build System: Add support for __atomic built-in operators. Add a check to configure.ac for __atomic_fetch_add support. If found use the __atomic built-in operators for ast_atomic_dec_and_test and ast_atomic_fetchadd_int. ASTERISK~27619 Change-Id: I65b4feb02bae368904ed0fb03f585c05f50a690e 2017-12-29 02:57 +0000 [527cf5a570] Corey Farrell * Remove redundant module checks and references. This removes references that are no longer needed due to automatic references created by module dependencies. In addition this removes most calls to ast_module_check as they were checking modules which are listed as dependencies. Change-Id: I332a6e8383d4c72c8e89d988a184ab8320c4872e 2018-01-24 10:30 +0000 [b9e35bf6d3] Richard Mudgett * CHANGES: Add AMI action 'PJSIPShowContacts' note. ASTERISK-27581 Change-Id: If6af275764741a11030f0a4fd324fa29b376d74e 2018-01-14 12:33 +0000 [5b8e71ab9f] Sungtae Kim * res_pjsip: Add AMI action 'PJSIPShowContacts' Add an AMI action which provides information on all configured Contacts. ASTERISK-27581 Change-Id: I2eed42c74bbc725fad26b8b33b1a5b3161950c73 2018-01-18 20:19 +0000 [2f78dc2bfa] Richard Mudgett * pbx_variables.c: Misc fixes in variable substitution. * Copy more than one character at a time when there is nothing to substitute. * Fix off by one error if a '}' or ']' is missing. * Eliminated the requirement that the "used" parameter had to point to a variable. The current callers were always declaring a variable to meet the requirement and discarding the value put into that variable. Now it can be NULL. * In ast_str_substitute_variables_full() fixed using the bogus channel to evaluate a function. We were not using the bogus channel we just created to help evaluate a subexpression. Change-Id: Ia83d99f4f16abe47f329eb39b6ff2013ae7c9854 2018-01-18 09:01 +0000 [679fa5fb34] Corey Farrell * Add missing OPTIONAL_API and ARI dependences. I've audited all modules that include any header which includes asterisk/optional_api.h. All modules which use OPTIONAL_API now declare those dependencies in AST_MODULE_INFO using requires or optional_modules as appropriate. In addition ARI dependency declarations have been reworked. Instead of declaring additional required modules in res/ari/resource_*.c we now add them to an optional array "requiresModules" in api-docs for each module. This allows the AST_MODULE_INFO dependencies to include those missing modules. Change-Id: Ia0c70571f5566784f63605e78e1ceccb4f79c606 2018-01-22 09:18 +0000 [140f937c7e] Alexander Traud * res_config_mysql: Avoid the header mysql_version.h. ASTERISK-27607 Change-Id: I23d00ded955c4afd5f2c3c9dc96dcb48b3f74eec 2018-01-05 14:46 +0000 [fd557ad041] Alexander Traud * install_prereq: For PJProject, point users to configure script. The installation script and the new configure option --with-pjproject-bundled aimed to accomplish the same. However, the installation script was out of date. Users should go for the maintained configure option, or the Wiki. ASTERISK-24598 Change-Id: Icbf4b562f81f7c05bd24a3805bd46c0beb4ebd44 2018-01-20 12:58 +0000 [d427bb84a2] Alexander Traud * BuildSystem: Remove AC_CONFIG_AUX_DIR. ASTERISK-27602 Change-Id: I9f4d3d2bc1481748e39ad1e2b0a364d38e38978b 2018-01-19 12:21 +0000 [693e509566] Alexander Traud * BuildSystem: Remove orphaned .PHONY targets. Change-Id: Ic44d75141b9bf99e7d72fcc82ee111b5cf6989d2 2018-01-19 12:14 +0000 [70137794e9] Alexander Traud * BuildSystem: Allow make clean all again. ASTERISK-27600 Reported by: Hamid R. Hashmi Change-Id: I683d14d024650be04074b037b6300464519409f4 2018-01-19 06:16 +0000 [93471373f6] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Ieb41b0cbf968af12882b39454b819ebb48b9ea46 2018-01-19 04:46 +0000 [4c511c1a4d] Alexander Traud * install_prereq: Support package manager DNF and yum option strict=1. This re-enables the script ./contrib/scripts/install_prereq on Fedora 22 and newer, and on RHEL/CentOS when the option strict=1 was set for yum install. ASTERISK-27598 Reported by: Hunter Stevens, Said Masoud Change-Id: I40f9517122aaa6906e8fc0962b4b8008dfddb368 2018-01-09 11:29 +0000 [77f2814d01] Benoît Dereck-Tricot * pbx: Reduce verbosity while loading extensions Each time the dial plan is reloaded, a lot of logs like these are generated: "Added extension 'XXXXX' priority 1 to YYYYYYYYYYY" This patch changes the log level for those logs. ASTERISK-27084 Change-Id: I5662902161c50890997ddc56835d4cafb456c529 2018-01-18 14:55 +0000 [5964061a21] Sean Bright * res_pjsip: Document tlsv1_1 and tlsv1_2 methods Change-Id: I67ed9039bf3f132fb20ee7a750e0aef0f704d7d3 2018-01-08 23:50 +0000 [33d5ab3e69] Igor Goncharovsky * chan_unistim: Fix hold function ability to lock/crash asterisk This patch fix chan_unistim hold functions to correctly support hold function in different states possible in case of multiple lines established on the phone ASTERISK-26596 #close Change-Id: Ib1e04e482e7c8939607a42d7fddacc07e26e14d4 2017-10-29 22:00 +0000 [25cb1ab05b] Corey Farrell * loader: Add support for built-in modules. * Add SRC_EMBEDDED variable to main/Makefile. Built-in module sources must be listed in this variable to ensure they get the correct CFLAGS. Change-Id: I920852bc17513a9c2627061a4ad40511e3a20499 2017-12-09 00:03 +0000 [e6142a1282] Corey Farrell * loader: Rework load_resource_list. Use a single loop in a loop to scan the resource list attempting to dlopen each module. The inner loop is repeated until it doesn't do any work, then it is run one more time to allow printing of error messages. Change-Id: I60c15cd57ff9680b62e2a94c7519401fa4a38e45 2017-12-08 23:30 +0000 [a80cbb046e] Corey Farrell * loader: Remove global symbol only startup phase. Dependency loader is now in place so we no longer need a separate loader phase for global symbols only. This simplifies the loader and allows us to minimize calls to dlopen. Change-Id: I33e3174d67f3b4552d3d536326dcaf0ebabb097d 2017-11-21 23:39 +0000 [3b73ed28c5] Corey Farrell * loader: Process module dependencies. * Add string vectors for requires, optional_apis and enhances. * Add reffed_deps module vector for holding references to dependencies. * Initialize string vectors after final dlopen of each module. * Free string vectors and clear references from reffed_deps in module_destroy. * Create functions necessary to process module dependencies and enforce load order. Module dependencies result in automatic references being managed by the module loader. This enforces unload order. Change-Id: I9be08d1dd331aceadc1dcba00b804d71360b2fbb 2017-12-27 17:44 +0000 [86b484dec7] Graham Mainwaring * app_followme: Add a prompt to be read when a call is connected This patch adds the ability to configure a prompt which will be read to the "winner" who pressed 1 (or the configured value) and received the call. ASTERISK-24372 #close Change-Id: I6ec1c6c883347f7d1e1f597189544993c8d65272 2018-01-17 00:28 +0000 [4fd303b630] Corey Farrell * loader: Miscellaneous fixes. * Remove comment about lazy load. * Improve message about module already being loaded and running. * Handle allocation error in add_to_load_order. * Dead code elimination from modules_shutdown. Change-Id: I22261599c46d0f416e568910ec9502f45143197f 2018-01-17 08:36 +0000 [2a1b52cc67] Alexander Traud * BuildSystem: Use the detected name for MD5 everywhere. Affacted the (automatic) download script for external modules: ./build_tools/download_externals ASTERISK-27596 Change-Id: If4c3176f7bf58df32fec6e02a659f1a78d57cf4b 2018-01-17 07:11 +0000 [4cd3f5c162] Alexander Traud * BuildSystem: Invoke install not in GNU but POSIX style. ASTERISK-27594 Change-Id: Iaaa6a19d2fe031dffcba441d0502a7ea65c93cb3 2018-01-17 06:47 +0000 [7e7a20642c] Alexander Traud * BuildSystem: In OpenBSD, xmlstarlet is xml. ASTERISK-27593 Change-Id: I1c7087f7f7582e40b3312c690d912c9a86466805 2018-01-17 02:51 +0000 [8f31b70246] Alexander Traud * BuildSystem: Detect external library Lua in version 5.3. On some platforms, you decide to go for one specific version of Lua, for example in OpenBSD. On other platforms, you are able to install several versions side-by-side, for example in Ubuntu and Fedora. Asterisk already works with Lua 5.3. Asterisk failed to detect Lua 5.3 on those platforms which allow several versions. ASTERISK-27592 Change-Id: If7a4b395d844a464e9a1f4f626c5bff4ee67eed8 2017-12-22 19:50 +0000 [8494e78010] Richard Mudgett * res_pjsip: Split type=identify to IP address and SIP header matching priorities The type=identify endpoint identification method can match by IP address and by SIP header. However, the SIP header matching has limited usefulness because you cannot specify the SIP header matching priority relative to the IP address matching. All the matching happens at the same priority and the order of evaluating the identify sections is indeterminate. e.g., If you had two type=identify sections where one matches by IP address for endpoint alice and the other matches by SIP header for endpoint bob then you couldn't predict which endpoint is matched when a request comes in that matches both. * Extract the SIP header matching criteria into its own "header" endpoint identification method so the user can specify the relative priority of the SIP header and the IP address matching criteria in the global endpoint_identifier_order option. The "ip" endpoint identification method now only matches by IP address. ASTERISK-27491 Change-Id: I9df142a575b7e1e3471b7cda5d3ea156cef08095 2018-01-16 08:32 +0000 [7ed7d525fb] Richard Mudgett * taskprocessor.c: Increase the number of tps_singletons container buckets. Since v12 the number of taskprocessors in the system has increased a lot. Small systems can easily have over a hundred and larger systems can have thousands. Most uses of the tps_singletons container deal with creating and destroying the taskprocessors. However, the pjsip distributor looks up taskprocessors/serializers by name frequently. It needs to find the serializer for incoming SIP responses to distribute them to the appropriate serializer. Change-Id: Ice0603606614ba49f7c0c316c524735c064e7e43 2018-01-16 08:20 +0000 [f0a3c977d6] George Joseph * pjproject_bundled: Prevent crash on bad outgoing header We still need to figure out how a bad header is getting into the outgoing message but this patch to pjproject prevents attempting to print that header and causing a crash. For several users, this crash happens when sending 183 progress messages. ASTERISK-26832 Reported by: Ross Beer, Jan Rozhon Change-Id: Ie5c5a921c890c843587763e7f33f987dfe66bd16 2018-01-16 06:34 +0000 [a046305fae] Alexander Traud * BuildSystem: Avoid $EUID and use id -u instead. Makefile included a call to ${EUID} which requires the shell bash. To keep compatibility with other shells like dash or ksh, use id -u instead. ASTERISK-27589 Change-Id: Ia6e74f5bc9aab4e6dc62b7439f647b7964e6f657 2018-01-15 18:03 +0000 [6fbe315f77] Richard Mudgett * cel_odbc.c: Fix menuslect module description display. Asterisk's makefile for menuselect has a very simple source file parsing script that looks for AST_MODULE_INFO lines to extract the quoted string as a module description. If it does not find a quoted string it uses the whole line as the description. Change-Id: I80f13a63818e4e28d683639a94a4dfaea405c1d5 2017-11-19 16:30 +0000 [9cfdb81e91] Corey Farrell * loader: Add dependency fields to module structures. * Declare 'requires' and 'enhances' text fields on module info structure. * Rename 'nonoptreq' to 'optional_modules'. * Update doxygen comments. Still need to investigate dependencies among modules I cannot compile. Change-Id: I3ad9547a0a6442409ff4e352a6d897bef2cc04bf 2017-11-19 20:10 +0000 [35ae99c712] Corey Farrell * vector: Additional string vector definitions. ast_vector_string_split: This function will add items to an ast_vector_string by splitting values of a string buffer. Items are appended to the vector in the order they are found. ast_vector_const_string: A vector of 'const char *'. Change-Id: I1bf02a1efeb2baeea11c59c557d39dd1197494d7 2018-01-15 10:57 +0000 [645297614e] Alexander Traud * BuildSystem: Resolve resolv.h not via Generic but Particular Header-Check. ASTERISK-27585 Change-Id: I27c67563788e6f67eeda5fb51a741823a50a95e2 2018-01-13 13:49 +0000 [cabe80631b] George Joseph * config_transport: Enable TCP_NODELAY on TLS transports We did this for TCP transports already but I'm not sure why we didn't do it for TLS transports. ASTERISK_27474 #not_final_fix Change-Id: I5b1ef4b882f7b859e718236686b7898751dbb262 2018-01-12 18:37 +0000 [de7f2a6cb4] Corey Farrell * res_stasis_recording: Allow symbolic links in configured recordings dir. If any component of ast_config_AST_RECORDING_DIR is a symbolic link we would incorrectly assume the ARI user was trying to escape the recording path. Create additional check to check the recording directory's realpath, only deny access if both do not match. This is needed by the testsuite when run by 'run-local'. Change-Id: I9145e841865edadcb5f75cead3471ad06bbb56c0 2018-01-12 12:00 +0000 [99535b0497] Corey Farrell * menuselect: Remove unused dev-mode option TRACE_FRAMES. ASTERISK-27575 #close Change-Id: Ica3a522892afed7a96816a5ecf140e1671f46ad4 2018-01-12 03:50 +0000 [eb9b85baec] Alexander Traud * res_config_pgsql: Avoid typecasting an int to unsigned char. clang 5.0 warned about this. ASTERISK-27576 Change-Id: If41f400a51973c06cdb9b75462e535b616bfe385 2018-01-12 03:17 +0000 [cff3add680] Alexander Traud * BuildSystem: Really do not pass unknown-warning options to the compiler. When an older GCC version is called with a too new warning option, GCC exited with an error and Asterisk was not built. Therefore, the configure script tests the installed compiler whether it supports that warning option. If not, Asterisk does not pass it to the installed compiler. However, some compilers (like clang) do not exit (error) but give just a warning in such a case. Because the compiler did not exit, Asterisk passed the unknown-warning option. ASTERISK-27560 Change-Id: Ia9d148e689c173df4e91699113605dab2de36038 2018-01-12 04:27 +0000 [685bab254c] Alexander Traud * app_osplookup.c: Avoid two format truncations. GCC 7 warned about this. ASTERISK-27578 Change-Id: I4a00458dbe9b575ef04338b6a7852272745e1552 2018-01-12 04:03 +0000 [797747afa7] Alexander Traud * chan_ooh323: Avoid typecasting an int to unsigned short. clang 5.0 warned about this. ASTERISK-27577 Change-Id: I898fe4255023138a9e8b579fe4482fcf582f2b78 2018-01-05 15:13 +0000 [b9e2b72de6] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: I0818b6e42631be1b69237e2b41d3415275693e53 2018-01-11 12:05 +0000 [6d5f4768a4] Joshua Colp * chan_sip: Check that an iostream exists before accessing. Before getting the file descriptor for an iostream check that it is present. ASTERISK-27534 Change-Id: Ie0aa1394007a37c30e337ea1176a6fb3a63bc99c 2018-01-11 08:09 +0000 [30b5ec023f] Tzafrir Cohen * Ignore quilt .pc directory, used in deb packaging Debian packaging uses quilt to manage patches. Book-keeping for them is done using quilt (either directly, or in a compatible format), and tracked in the directory .pc . Change-Id: I22c90f3d7ab8918e6216e7b686de6fa0e1fdaa7b Signed-off-by: Tzafrir Cohen 2018-01-09 11:23 +0000 [f0eb00d1e7] Corey Farrell * stasis: Remove silly usage of RAII_VAR. Change-Id: Ib11193531e797bcb16bba560a408eab155f706d1 2018-01-09 11:09 +0000 [a383e1ddb1] Corey Farrell * stasis_cache_pattern: Remove silly usage of RAII_VAR. Change-Id: Ic98a51f555062cd863b6db3f8d76065943a9dea3 2018-01-09 16:23 +0000 [9e2fcb82ed] Sean Bright * cdr_syslog: Deprecate unmaintained module There has been an open issue against cdr_syslog (ASTERISK~14441) about a race condition for 7.5 years that has never been addressed. Because this module is effectively unmaintained and currently broken, there is no sense in keeping it around. If logging CDRs to syslog is a desirable feature, it would probably be better to write the logs directly to the syslog server via socket instead of using the facilities provided by openlog/syslog/closelog. Doing so would address the race condition referenced in the associated issue. Change-Id: Ic77b94cd97f355a9cf5b1d3f3444964a6e0ba5dc 2018-01-09 11:16 +0000 [0de004dd85] Corey Farrell * stasis_bridges: Remove silly usage of RAII_VAR. Change-Id: I0fa7ab05454f183dc4ff10e26d18776d2b0fcf1f 2018-01-09 11:10 +0000 [01127e1664] Corey Farrell * stasis_cache: Remove silly usage of RAII_VAR. Change-Id: Ifa95e5801c949df296c7e4376347730fb0ed52ef 2018-01-09 10:57 +0000 [175a9ef873] Corey Farrell * stasis_endpoints: Remove silly usage of RAII_VAR. Change-Id: Ic099dc552f36c353c89783a4bcfd09f010432733 2018-01-09 10:55 +0000 [4b655184b0] Corey Farrell * stasis_message_router: Remove silly usage of RAII_VAR. Change-Id: I50d6ae230920e0b878ed9cc8f79eef746e06701d 2018-01-09 10:53 +0000 [3074c4165c] Corey Farrell * stasis_system: Remove silly usage of RAII_VAR. Change-Id: Iedbe5656cee68cd3a96a953558764aa02d4a0c3b 2018-01-03 17:26 +0000 [8f3167c5f1] Richard Mudgett * res_pjsip.c: Update the endpoint identification documentation. * Endpoint identify_by documentation. * IP/Header endpoint identifier documentation. Change-Id: Id92f00b495acca7be945daf749d2abd7f76a0b5a 2018-01-03 15:20 +0000 [42a61d9db6] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Remove unnecessary requirement. The requirement that "ip" must be in the endpoint identify_by list to allow the type=identify method to identify the endpoint is not necessary. The "ip" identifier method can match one and only one endpoint. To even work, the "ip" identifier method configuration must explicitly specify the identified endpoint. Therefore, why bother configuring the type=identify identifier in the first place? The requirement only adds the potential for configuration errors for no benefit. Even worse, those configuration errors cannot be detected when the configuration loads. The requirement was introduced with the ASTERISK_27206 patch. * Remove the code change that enforces the requiremnt. Listing the "ip" method in the identify_by value is simply documentation. Change-Id: Ia057f92a33fb5d9f51dc5d5692e3d5ee1a6f2c11 2018-01-05 19:03 +0000 [a7bbb18e5c] Richard Mudgett * res_pjsip.c: Fix ident_to_str() and refactor ident_handler(). * Extracted sip_endpoint_identifier_type2str() and sip_endpoint_identifier_str2type() to simplify the calling functions. * Fixed pjsip_configuration.c:ident_to_str() building the endpoint's identify_by value string. Change-Id: Ide876768a8d5d828b12052e2a75008b0563fc509 2018-01-04 17:04 +0000 [be488eb14a] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events. The AMI PJSIPShowEndpoint action could only list one IdentifyDetail AMI event per endpoint. However, there is no reason that multiple type=identify sections cannot identify the same endpoint. * Reworked format_ami_endpoint_identify() to generate as many IdentifyDetail AMI events as there are matching identifiers. Change-Id: Ie146792aef72d78e05416ab5b27bc552a30399db 2018-01-05 05:51 +0000 [3a7d917256] Alexander Traud * translate: Avoid absolute value on unsigned substraction. ast_format_get_sample_rate(.) returns an unsigned type. The difference of a substraction between two unsigned types does not get implicitly converted to a signed type. Therefore, using abs(.) did not make sense. ASTERISK-27549 Change-Id: Ib904d9ee0d46b6fdd1476fbc464fbbf813304017 2018-01-09 08:22 +0000 [25022de875] Sean Bright * Revert "codec_opus: Make libcurl a dependency in menuselect" This reverts commit 028f4320de60a204e457ad606ab0a3318493b431. Change-Id: Ieb91f825cb55202a937f5361c01d356e7662b70c 2018-01-08 10:54 +0000 [a21841bf40] Joshua Colp * res_pjsip_session: Always bundle streams if WebRTC is enabled. Some WebRTC clients can't handle renegotiation with the addition of streams that include an offer to bundle. They instead expect the newly added streams to already be bundled. This change does such a thing if WebRTC support is enabled on an endpoint. ASTERISK-27566 Change-Id: I7fe9b7ac35a2798627d9c2c8369129f407af6461 2018-01-08 20:25 +0000 [d46cbe788a] Corey Farrell * bridge_softmix: Fix sfu_append_source_streams test. * validate_stream: zero result from ast_format_cap_identical indicates they are not identical, rather than non-zero indicating an error. * validate_original_streams: use num_streams instead of ARRAY_LEN(params). * Fix declaration of alice_dest_stream and bob_dest_stream. Change-Id: I6b1dd8bed10439d3c7406f033eb1896b6c419147 2018-01-08 18:47 +0000 [5380fb9978] Corey Farrell * app_confbridge: Fix NULL check in action_kick_last. The check for last_user == NULL needs to happen before we dereference the variable, previously it was possible for us to check flags of a NULL last_user. Change-Id: I274f737aa8af9d2d53e4a78cdd7ad57561003945 2018-01-06 02:17 +0000 [55a540272f] Corey Farrell * res_stasis: Reduce RAII_VAR usage. In addition to being a micro-optimization (RAII_VAR has overhead), this change improves output of REF_DEBUG. Unfortunately when RAII_VAR calls ao2_cleanup it does so from a generated _dtor_varname function. For example this caused _dtor_app to release a reference instead of __stasis_app_unregister. Change-Id: I4ce67120583a446babf9adeec678b71d37fcd9e5 2018-01-04 18:47 +0000 [faeb9e1b26] Sungtae Kim * res_pjsip: Add AMI action 'PJSIPShowAuths' Add an AMI action which provides information on all configured Auths. ASTERISK-27547 Change-Id: I1a88a75b38a2b1dd9d1de6c0307b20a3f584c817 2018-01-07 21:38 +0000 [8b3083cac5] Corey Farrell * res_stasis: Fix dial bridge unload. If the dial bridge has been created it must be released by calling ast_bridge_destroy, simply releasing the ao2 reference is not enough. Also move stasis_app_control_shutdown earlier in unload to ensure the bridge cannot be created or grabbed after the app_bridges container is released. Change-Id: I372302de94ca63876069e2585a049c5060e5e767 2018-01-07 20:21 +0000 [6870ba5f26] Corey Farrell * res_stasis: Fix app_is_subscribed_bridge_id. Instead of searching for bridge_id provided in an argument this function always searched for BRIDGE_ALL first. Rewrite this function to work like the similar functions for channel and endpoint functions. Change-Id: Ib5caca69e11727c5c8a7284a1d00621f40f1e60a 2018-01-05 07:44 +0000 [7e9781c25e] Alexander Traud * General: Silence modules on (un)load. Some (normally optional) modules created notices, warnings, and even errors in normal situations like (un)load. This cluttered the command-line interface (CLI) on start and while stopping gracefully. However, when an user went for the script './contrib/scripts/install_prereq', those modules get compiled-in because their prerequisites were met at compile time. Furthermore, because of ASTERISK_27475, the former talkative module 'res_curl' is built as side-effect. ASTERISK-27553 Change-Id: I9f105f46d72553994e820679bfde3478a551b281 2018-01-06 15:40 +0000 [512286e3c8] Alexander Traud * BuildSystem: Really do not pass unknown-warning options to the compiler. When an older GCC version is called with a too new warning option, GCC exited with an error and Asterisk was not built. Therefore, the configure script tests the installed compiler whether it supports that warning option. If not, Asterisk does not pass it to the installed compiler. However, some compilers (like clang) do not exit (error) but give just a warning in such a case. Because the compiler did not exit, Asterisk passed the unknown-warning option. ASTERISK-27560 Change-Id: Ia9b7747f649b27ff5e9f75c3db3fee4fe7a29621 2018-01-06 01:25 +0000 [f84fcc1fc1] Alexander Traud * General: Avoid implicit conversion to char when changes value to negative. clang 5.0 warned about this. ASTERISK-27557 Change-Id: I7cceaa88e147cbdf81a3a7beec5c1c20210fa41e 2018-01-05 06:06 +0000 [b12c8cffad] Alexander Traud * bridge_softmix: Removed unused parameter from check_binaural_position_change(.). Found as a result of the function being passed an uninitalized variable by clang. ASTERISK-27550 Change-Id: I8af3bd84656b685a956d498459f8db3613f68954 2018-01-06 06:45 +0000 [ad3252ccef] Alexander Traud * editline: Avoid comparison between pointer and zero character constant. gcc 7.2 warned about this. ASTERISK-27559 Change-Id: I48960dda9cf0a11b6a9426f775e632363f8caa74 2018-01-06 05:01 +0000 [ef68df9111] Alexander Traud * codec_gsm: Avoid shifting a negative signed value. clang 5.0 warned about this. ASTERISK-27558 Change-Id: Icc452ecb0d86bbeba78dae768cc472ec540699df 2018-01-04 12:23 +0000 [b20b5758d9] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Fix apply identify validation. The ip_identify_apply() did not validate the configuration for simple static configuration errors or deal well with address resolution errors. * Added missing configuration validation checks. * Fixed address resolution error handling. * Demoted an error message to a warning since it does not fail applying the identify object configuration. Change-Id: I8b519607263fe88e8ce964f526a45359fd362b6e 2018-01-04 17:42 +0000 [705e6c04b3] Richard Mudgett * res_pjsip.c: Fix endpoint identifier registration name search. If an endpoint identifier name in the endpoint_identifier_order list is a prefix to the identifier we are registering, we could install it in the wrong position of the list. Assuming endpoint_identifier_order=username,ip,anonymous then registering the "ip_only" identifier would put the identifier in the wrong position of the priority list. * Fix incorrect strncmp() string prefix matching. Change-Id: Ib8819ec4b811da8a27419fd93528c54d34f01484 2018-01-05 03:33 +0000 [af064eaf13] Alexander Traud * BuildSystem: Find ptlib-config on Debian/Ubuntu. The current configure script requires that tool when libpt-dev is installed. libpt-dev was installed by libopenh323-dev, bacause you wanted to go for H.323 based channel drivers. ASTERISK-25329 Change-Id: I9c6ab78b7246c21536e1d252dcbffe682f63f83d 2018-01-05 06:42 +0000 [f0c8f04c73] Alexander Traud * chan_ooh323: Limit outgoinglimit to positive values as intended. ASTERISK-27552 Change-Id: Ifbf9d51e7374ca2e8b27ec568f6770050fc1a854 2018-01-05 06:19 +0000 [09f339bda5] Alexander Traud * ooh323cDriver: Fix typo in header guard. ASTERISK-27551 Change-Id: I39ff66031e3373e895e2bc47b23a5e860ea4e012 2018-01-05 03:36 +0000 [bc1b4f4d43] Alexander Traud * BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf. ASTERISK-26046 Change-Id: I48f05698c235f709225b92bec5aa260fb57d69d1 2018-01-04 15:37 +0000 [cfb88f3ac1] Corey Farrell * pbx: Prevent execution of NULL pointer. pbx_extension_helper has a check for q->swo.exec == NULL but it doesn't actually return so we would still run the function. Fix the return. Move the 'int res' variable into the only scope which uses it. Also fix a copy-paste error in ast_pbx_init which could result in a crash on allocation failure (we exit with a normal error instead). Change-Id: I0693af921fdc7f56b6a72a21fb816ed08b960a69 2018-01-04 10:50 +0000 [82cf585fb5] Corey Farrell * translators: Don't use ast_module_running_ref. Translators are run during module load before the module is actually running, so it cannot use ast_module_running_ref. ASTERISK-20346 Change-Id: Iaa0e75da99c696e38000f1a41e340abbd7a88f56 2018-01-04 09:39 +0000 [da365affbd] Corey Farrell * rtp_engine: Add missing unlock. Change-Id: I380c31a255e060309f4916da11176e0d00813215 2018-01-04 09:30 +0000 [73bf5035b8] Corey Farrell * res_pjsip_history: Add missing unlock to CLI command. Change-Id: I872060a30543776a176a316309602d924a23eb29 2018-01-04 09:27 +0000 [aaed0b8b3a] Corey Farrell * aco: Fix NULL dereference in error path. Change-Id: Id505167cf0f9414a3c144fa2c1e181a2cf288694 2018-01-03 19:07 +0000 [e3c9314a2e] Corey Farrell * func_odbc: Add missing unlock's to acf_odbc_read. Change-Id: I828329ecbd252ae8f27a369a046d2b03102b07c6 2017-12-29 18:24 +0000 [55f1d69c43] Corey Farrell * loader: Create ast_module_running_ref. This function returns NULL if the module in question is not running. I did not change ast_module_ref as most callers do not check the result and they always call ast_module_unref. Make use of this function when running registered items from: * app_stack API's * bridge technologies * CLI commands * File formats * Manager Actions * RTP engines * Sorcery Wizards * Timing Interfaces * Translators * AGI Commands * Fax Technologies ASTERISK-20346 #close Change-Id: Ia16fd28e188b2fc0b9d18b8a5d9cacc31df73fcc 2018-01-03 10:41 +0000 [62f862e2cd] Kevin Harwell * res_pjsip_session: Check if sequence header is missing The pjsip_msg_find_hdr function can return NULL. This patch adds a check when searching for the sequence header to make sure a NULL pointer is never de-referenced. Change-Id: I19af23aeeded65be016be92360e8cb7ffe51fad2 2018-01-02 07:36 +0000 [9b5d1454b4] Tzafrir Cohen * cdr: submit: fix logic of test for batch mode ASTERISK-27539 #close Change-Id: I33cdf329d2bb4486dcae975c450f6aae94c515f7 2017-12-29 23:14 +0000 [ffbf5be116] Sungtae Kim * res_pjsip: Add AMI action 'PJSIPShowAors' Add an AMI action which provides information on all configured AORs. ASTERISK-27537 Change-Id: If8b990a00909e5b6c0f04a3b8dccd9903dc445eb 2018-01-02 00:26 +0000 [f298178583] Corey Farrell * aco: Add missing aco_option_type_string for OPT_TIMELEN_T. ASTERISK-27117 Change-Id: I8f6c34bb30830be9f7a40823723eb4dcaaa91c61 2017-12-31 10:26 +0000 [15f8b9b8bf] Sean Bright * ice: Increase foundation buffer size Per RFC 5245, the foundation specified with an ICE candidate can be up to 32 characters but we are only allowing for 31. ASTERISK-27498 #close Reported by: Michele Prà Change-Id: I05ce7a5952721a76a2b4c90366168022558dc7cf 2017-12-29 22:03 +0000 [b32d6d5e2d] Corey Farrell * astobj2: Create case-insensitive variants of container function macros. * AO2_STRING_FIELD_CASE_HASH_FN * AO2_STRING_FIELD_CASE_CMP_FN * AO2_STRING_FIELD_CASE_SORT_FN Change-Id: I11af8c6a0c43380a42732553f519c667abb842cf 2017-12-29 22:59 +0000 [bc73337e07] Corey Farrell * core: Use macros to generate ao2_container callbacks where possible. This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where possible in the Asterisk core. This removes CMP_STOP from the result of CMP_FN callbacks for the following structure types: * ast_bucket_metadata * ast_bucket_scheme * generic_monitor_instance_list (ccss.c) * ast_bucket_file (media_cache.c) * named_acl Change-Id: Ide4c1449a894bce70dea1fef664dade9b57578f1 2017-12-29 14:50 +0000 [0fe7df641a] Corey Farrell * datastore: Add automatic module references. Add a reference to the calling module when it is active to protect access to datastore->info. Remove module references done by func_periodic_hook as the datastore now handles it. ASTERISK-25128 #close Change-Id: I8357a3711e77591d0d1dd8ab4211a7eedd782c89 2017-12-28 13:27 +0000 [2dde5bef47] Richard Mudgett * stasis_channels.c: Misc cleanup. * Use current OBJ_SEARCH_xxx defines instead of the deprecated versions. * Fix hash_cb and cmp_cb container functions to correctly use the OBJ_SEARCH_xxx values. * Remove incorrect usage of CMP_STOP. Most uses in the system have no effect. This allows the collapse of channel_role_single_cmp_cb() and channel_role_multi_cmp_cb() into channel_role_cmp_cb(). * Remove unnecessary usage of RAII_VAR(). Change-Id: I02c405518cab22aa2a082b61e2353bf7cd629a70 2017-12-13 15:43 +0000 [898b3b080a] Sean Bright * cdr_mysql: Make sure connection charset is always set When the MYSQL_OPT_RECONNECT option is enabled, the MySQL client API will transparently reconnect when it needs to. Ideally this simplifies our code, but when this reconnection occurs all connection state is lost. Because we are not notified that this has happened, we don't know to set our character set again (with "SET NAMES 'xyz'"). Rather than calling SET NAMES, we instead set the MYSQL_SET_CHARSET_NAME option which will do it for us under the hood on each connect. This option has been present in the MySQL C API for at least 15 years, so it should be safe for most installations. I also snuck a few other changes into this patch: * Default the MySQL port to MYSQL_PORT (3306) instead of 0 if it's not defined. * Fix some erroneous and/or silly checks on the contents of the configuration ast_str values. ASTERISK-27366 #close Reported by: Halil İbrahim YILDIZ Change-Id: I36bf8dc5d5f83584e803b3b1a151dea9396ab8f5 2017-12-27 20:48 +0000 [d69b7c6c6d] Richard Mudgett * manager.c: Update AMI Status event documentation The AMI Status event had linkedid listed twice and was missing the effective connected line name and number headers. NOTE: The linkedid and other standard channel snapshot fields in the XML documentation are part of the XML template defined in doc/appdocsxml.xslt. Change-Id: I004c4c4f9e7b40ef55035c831702721bec82496c 2017-12-27 22:36 +0000 [fa36f9c01b] Richard Mudgett * bridge_native_rtp.c: Fix reentrancy framehook crash. If two channels enter different native rtp bridges at the same time it is possible that the framehook interface data pointer can be corrupted because the struct variable was declared static. * Fixed the reentrancy corruption by changing the framehook interface struct static variable to a stack local variable. * Moved the hook.data assignment outside of the channel lock. It did not need the lock's protection. It probably was giving a false sense of security. The testsuite channels/pjsip/basic_calls/two_parties/nominal/alice_initiated/bob_hangs_up test caught this with MALLOC_DEBUG and DO_CRASH enabled. Change-Id: If9e35b97d19209b0f984941c1d8eb5f7c55eea91 2017-12-27 20:22 +0000 [1d3dc9aea2] Richard Mudgett * func_channel.c: Update MASTER_CHANNEL documentation Be more explicit in what is meant by the master channel to eliminate misunderstanding. ASTERISK-23133 Change-Id: I453bcaf4b99404a5a3e345dbf093ac6c1afcfc72 2017-12-27 19:27 +0000 [6338a03ce9] Corey Farrell * menuselect: Fix check for running configure. menuselect/Makefile checks that autoconfig.h and makeopts were newer than the '.in' files. Unfortunately running ./configure does not touch autoconfig.h unless the contents will change. Instead of looking at autoconfig.h we just need to ensure that makeopts is newer than configure. Also make change to configure.ac so bootstrap.sh doesn't re-add the extra trailing line-feed. Change-Id: Ief1f831d6717007f9cebb668c14e92782cd2b794 2017-12-21 23:56 +0000 [94eb12ca56] Corey Farrell * cdr: Missing NULL check and unlock. * handle_dial_message: Missing a check for NULL peer. * cdr_generic_register: Missing unlock on allocation failure. cdr_generic_register is fixed by reordering so the new structure is allocated and initialized before locking the list. Change-Id: I5799b99270d1a7a716a555c31ac85f4b00ce8686 2017-12-23 22:51 +0000 [23aa20bf20] Corey Farrell * loader: Add volatile to resource_being_loaded. Some compiler optimizers seem to assume that dlopen will not use __attribute__((constructor)) functions to call back to the program. This was causing resource_being_loaded to be optimized away completely. ASTERISK-27531 #close Tested By: abelbeck Change-Id: If17a3b889e06811a0e7119f0539d052494d6ece9 2017-12-20 16:17 +0000 [553306548c] Kevin Harwell * AST-2017-014: res_pjsip - Missing contact header can cause crash Those SIP messages that create dialogs require a contact header to be present. If the contact header was missing from the message it could cause Asterisk to crash. This patch checks to make sure SIP messages that create a dialog contain the contact header. If the message does not and it is required Asterisk now returns a "400 Missing Contact header" response. Also added NULL checks when retrieving the contact header that were missing as a "just in case". ASTERISK-27480 #close Change-Id: I1810db87683fc637a9e3e1384a746037fec20afe 2017-12-22 14:00 +0000 [c2529a352c] Corey Farrell * astobj.h: Remove from Asterisk core. This is the old ASTOBJ macro's which are no longer used except by the deprecated netsock.c. Move it to the chan_iax2 include folder so it does not get used elsewhere. Change-Id: I7e4ae96678b36b9f41d3cae14b167f110eb5d349 2017-12-22 08:23 +0000 [fd0ca1c3f9] Sean Bright * Remove as much trailing whitespace as possible. Change-Id: I873c1c6d00f447269bd841494459efccdd2c19c0 2017-12-21 09:51 +0000 [a1a179c09d] Sean Bright * Fix some invalid Unicode characters configs/samples/minivm.conf.sample contains invalid UTF-8, but that appears to be intentional. Change-Id: I7b1e0d332f3380fd0425962a3c9c55f9b200c8cc 2017-12-20 21:11 +0000 [f2f51ff4ea] Corey Farrell * app_voicemail: Fix file copy error handling. Fix error where input/output file descriptors would be closed multiple times. Change-Id: Iba5140b60cb7de79e3d5d92be3c256947aa99da9 2017-12-20 14:54 +0000 [9415ec2877] Sean Bright * docs: Remove old API changes documentation Change-Id: I1bc7957121cc7ae27dca04acc3613f4e1858476a 2017-12-20 11:14 +0000 [1b80ffa495] Corey Farrell * Fix Common Typo's. Fix instances of: * Retreive * Recieve * other then * different then * Repeated words ("the the", "an an", "and and", etc). * othterwise, teh ASTERISK-24198 #close Change-Id: I3809a9c113b92fd9d0d9f9bac98e9c66dc8b2d31 2017-12-20 11:30 +0000 [3625e91586] Richard Mudgett * manager.h: Bump AMI version Change-Id: I62e6ddeb261ef012687e1fb6734c554e2499b6bf 2017-12-20 10:23 +0000 [aaa3884d4a] Corey Farrell * bridge: Old channel video source not set to NULL after unref. The bridge holds onto the old channel video source after it's been released. This can lead to use after free errors. ASTERISK-27229 #close Change-Id: Ib2dab61677dd8a21f7ad53cdc9b8ca93297838b3 2017-12-20 10:13 +0000 [c2850bfebc] Corey Farrell * core: Fix unused variable error in handle_show_sysinfo. Apparently in OSX it's possible for OSX to HAVE_SYSCTL but not HAVE_SYSINFO or HAVE_SWAPCTL. In this case freeswap caused an unused variable error. ASTERISK-26563 #close Change-Id: I8ec5b1897b786cc1abaf62264aa75039eea05510 2017-12-20 00:53 +0000 [fff7782cf5] Corey Farrell * app_festival: Fix fd leak on connection failure. Change-Id: If5efaddcf735ff7d17e55c36cc1388946cee9e0f 2017-12-18 20:12 +0000 [d51837a1b9] Corey Farrell * CLI: Address multiple issues. * listen uses the variable `s` for the result from ast_poll() then overwrites it with the result of accept(). Create a separate variable poll_result to avoid confusion since ast_poll does not return a file descriptor. * Resolve fd leak that would occur if setsockopt failed in listen. * Reserve an extra byte while processing completion results from remote daemon. This fixes a bug where completion processing used strstr() on a string that was not '\0' terminated. This was no risk to the Asterisk daemon, the bug was only reachable the remote console process. * Resolve leak in handle_showchan when the channel is not found. * Multiple leaks and a deadlock in pbx_config CLI completion. * Fix leaks in "manager show command". Change-Id: I8f633ceb1714867ae30ef4e421858f77c14485a9 2017-12-18 22:48 +0000 [b8f54f742f] Corey Farrell * dns_core: Protect against array index violation. Add a check to allocate_dns_record to prevent calling a pointer retrieved from beyond dns_alloc_table. ASTERISK-27495 #close Change-Id: Ie2f6e4991cea46baa12e837bd64cc22b44d322bb 2017-12-18 18:59 +0000 [3c037ef972] Corey Farrell * chan_sip: Fix memory leaks. In change_redirecting_information variables we use ast_strlen_zero to see if a value should be saved. In the case where the value is not NULL but is a zero length string we leaked. handle_response_subscribe leaked a reference to the ccss monitor instance. Change-Id: Ib11444de69c3d5b2360a88ba2feb54d2c2e9f05f 2017-12-16 07:51 +0000 [3b99a0332c] Ivan Poddubny * bridge: Stop music on hold on adding an arbitrary channel to a bridge When a channel that is on hold gets added to a bridge by the Bridge AMI action or the dialplan application of the same name, music continues to play, causing "robotic sound". This commit adds a call to ast_moh_stop to stop the music. Also, it makes the AMI Park action use the right MOH class when the channel gets parked. Reported by: Zane Conkle ASTERISK-25079 #close Change-Id: I4b129c5a20c15e63968842460ac5a1a85903cf9f 2017-12-18 15:36 +0000 [b3e839debd] Corey Farrell * Remove constant conditionals (dead-code). Some variables are set and never changed, making them constant. This means that code in the 'false' block of the conditional is unreachable. In chan_skinny and res_config_ldap I used preprocessor directive `#if 0` as I'm unsure if the unreachable code could be enabled in the future. Change-Id: I62e2aac353d739fb3c983cf768933120f5fba059 2017-12-19 02:50 +0000 [c02e256407] Oron Peled * chan_console: Use correct parameter for 'set active' chan_console supports multiple devices but the CLI only works on a single device. 'console set active' selects this device. Sadly that CLI picks the wrong command-line parameter and will only work for a device called 'active'. ASTERISK-27490 #close Change-Id: I2f0e5fe63db19845bee862575b739360797dc73d 2017-12-18 23:17 +0000 [bf33a09c37] Corey Farrell * core: Fix multiple trivial issues in the core. * Fix small leaks in from error conditions in sdp.c and translate.c. * Check new file descriptor is less than 0, not less than or equal. Change-Id: Id7782775486175c739e0c4bf3ea5e17e3f452a99 2017-12-18 06:14 +0000 [81474dfb23] Aaron An * res_rtp_asterisk: Avoid close the rtp/rtcp fd twice. When RTCP-MUX enabled. rtp->s is the same as rtcp->s, check this before close the file descriptor. Close the FD twice will hangs the asterisk under heavy load. ASTERISK-27299 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: I870a072d73fd207463ac116ef97100addbc0820a 2017-12-18 19:47 +0000 [8dfc973d64] Corey Farrell * main/app: Fix leaks. * ast_linear_stream would leak a file descriptor if it failed to allocate lin. * ast_control_tone leaked zone and ts if ast_playtones_start failed. Additionally added whitespace to ast_linear_stream, pulled assignments out of conditionals for improved readability. Change-Id: I6d1a10cf9161b1529d939b9b2d63ea36d395b657 2017-12-18 19:19 +0000 [a790ced2e8] Corey Farrell * func_callerid: Initialize app argument structures. This module uses AST_DEFINE_APP_ARGS_TYPE to define struct's instead of directly using AST_DECLARE_APP_ARGS. Initialize the variables declared in this way. Change-Id: If97fbdd8d63a204e2efd498a192effc14e90fb31 2017-08-11 17:02 +0000 [4c04e13783] Richard Mudgett * bridge_softmix.c: Change remove_destination_streams() return meaning. The return value of remove_destination_streams() now means we removed a stream from the topology by making it a dead stream. Now we won't try to request a topology change if we didn't remove any streams. Change-Id: Icd91571d856a1d04299a24c411e325c1d9d5c61d 2017-08-11 16:57 +0000 [ea4179599f] Richard Mudgett * bridge_softmix.c: Don't match dead streams. * Made is_video_source() and is_video_dest() not match dead streams. * Optimized is_video_dest() to reduce duplicated code. Change-Id: I4e7ab762c7ee98395e78e6516399f57a2609b9a1 2017-12-18 18:40 +0000 [91d9eae79b] Corey Farrell * bridge_softmix: Fix memory leaks. Change-Id: Ifaf3e93b398595d21d07f535330fef77ff15a80c 2015-11-11 17:20 +0000 [f6393b59af] Richard Mudgett * ast_json_pack(): Use safer json ref mechanism. Change-Id: I49204db2e57ae96eee43909c18ed007c09ac817e 2017-12-18 18:04 +0000 [dc04d1ec93] Corey Farrell * app_voicemail: Fix memory management issues. * mwi_sub_event_cb: mwist leaked on separate_mailbox failure. * add_email_attachment: A reference to sox_gain_tmpdir was used after the storage was out of scope. Change-Id: I6282c542ff7b82fa091177a912d11234a8b00a30 2015-11-11 16:52 +0000 [7054fb8756] Richard Mudgett * rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage. Change-Id: I58a22c2ca82e91d7537409b7b3af2d735827a54d 2017-12-06 20:35 +0000 [5335ad117d] Rodrigo Ramírez Norambuena * app_queue: Add feature to set wrapuptime on the queue member This patch adds the ability to set the wrapuptime on the queue member config. When the option is set the wrapuptime on the queue member is used instead of the queue's wrapuptime. ASTERISK-27483 #close Change-Id: I11c85809537f974eb44dc5bbf82bcedd8a458902 2017-12-18 14:00 +0000 [064c74e4af] Corey Farrell * netsock: Remove from Asterisk core. This moves netsock.c / netsock.h to the chan_iax2 module. netsock.h has been marked deprecated since 13.0.0, chan_iax2 is the only remaining user. Change-Id: I28c6578043bac18de5ea608e136acec4f83d5dd3 2017-12-18 12:23 +0000 [731a23fba7] Corey Farrell * CLI: Fix 'core set debug channel' completion bug. The completion generator is missing a return so typing "core set debug all off " causes the command to actually execute. Change-Id: Ibf6462088a74eee66967732b50445783ebefc20b 2017-12-18 08:25 +0000 [1769d4a5c6] Joshua Colp * confbridge: Clarify mute sound documentation. The mute/unmute sounds are only played when the action is initiated using the DTMF menu. ASTERISK-24756 Change-Id: I55b3dd5bc166096bf5e2f547ddd0ce355f36e3dc 2017-12-18 06:36 +0000 [b40c00c97b] Joshua Colp * app_transfer: Remove LOCAL from documentation. The Local channel has never supported app_transfer from what I can see so remove it from the documentation. ASTERISK-25649 Change-Id: Icbcfe297f6f866285a26b3e9fd5c6d00fa22e0e9 2017-12-15 19:01 +0000 [4a461bcde4] Richard Mudgett * chan_pjsip.c: Improve ast_request() diagnostic msgs. Attempting to dial PJSIP/endpoint when the endpoint doesn't exist and disable_multi_domain=no results in a misleading empty endpoint name message. The message should say the endpoint was not found. * Added missing endpoint not found message. * Added more information to the empty endpoint name msgs if available. * Eliminated RAII_VAR in request(). Change-Id: I21da85ebd62dcc32115b2ffcb5157416ebae51e4 2016-10-06 01:29 +0000 [6f8b34f9c1] Corey Farrell * chan_sip: Add security event for calls to invalid extension. Log a message to security events when an INVITE is received to an invalid extension. ASTERISK-25869 #close Change-Id: I0da40cd7c2206c825c2f0d4e172275df331fcc8f 2017-12-15 10:26 +0000 [e6768c0f81] Corey Farrell * cdr: Minor optimizations. * bridge_candidate_process: remove SCOPED_AO2LOCK and return value. * handle_standard_bridge_enter_message: replace recursive call with goto statement. ASTERISK-24297 Change-Id: Id2eaa0822fb8dc799f63422bb3aa89de9d4ee2a2 2017-12-12 12:55 +0000 [bf2d35931d] Corey Farrell * aco: Minimize use of regex. Remove nearly all use of regex from ACO users. Still remaining: * app_confbridge has a legitamate use of option name regex. * ast_sorcery_object_fields_register is implemented with regex, all callers use simple prefix based regex. I haven't decided the best way to fix this in both 13/15 and master. Change-Id: Ib5ed478218d8a661ace4d2eaaea98b59a897974b 2017-12-12 12:36 +0000 [a455e18320] Corey Farrell * aco: Create ways to minimize use of regex. ACO uses regex in many situations where it is completely unneeded. In some cases this doubles the total processing performed by aco_process_config. * Create ACO_IGNORE category type for use in place of skip_category regex source string. * Create additional aco_category_op values to allow specifying category filter using either a single plain string or a NULL terminated array of plain strings. * Create ACO_PREFIX to allow matching option names to case insensitive prefixes. Change-Id: I66a920dcd8e2b0301f73f968016440a985e72821 2017-12-15 07:56 +0000 [03c25a869f] Corey Farrell * res_smdi: Fix shutdown ref. When adding shutdown refs for OPTIONAL_API components I accidentally added it to the unload_module function in res_smdi. Move it to load_module. Change-Id: I2b9da38fbc11ef78ea23dbb2df92b684be7f647c 2017-12-11 17:07 +0000 [9d5797616c] Corey Farrell * loader: Use vector to build apha sorted module lists. Change-Id: I9c519f4dec3cda98b2f34d314255a31d49a6a467 2017-11-21 00:28 +0000 [7b54903313] Corey Farrell * loader: Replace priority heap with vector. This is needed for future changes which will require being able to process the load priority out of order. Change-Id: Ia23421197f09789940510b03ebbbf3bf24d51bea 2017-12-14 18:55 +0000 [9755eff46f] Sean Bright * res_hep: hepv3_is_loaded() should check if we are enabled res_hep_pjsip.so and res_hep_rtcp.so will still load and do a lot of unnecessary work even if 'enabled' is set to 'no' in hep.conf. Change-Id: I3eddfeea09c6b5bc7c641952ee0ae487fd09b64b 2017-11-20 23:10 +0000 [3505cc88e8] Corey Farrell * loader: Rework of load_dynamic_module. * Split off load_dlopen to perform actual dlopen, check results and log warnings when needed. * Always use RTLD_NOW. * Use flags which minimize number of calls to dlopen required. First attempt always uses RTLD_GLOBAL when global_symbols_only is enabled, RTLD_LOCAL when it is not. This patch significantly reduces the number of dlopen's performed. With 299 modules my system ran dlopen 857 times before this patch, 655 times after this patch. Change-Id: Ib2c9903cfddcc01aed3e01c1e7fe4a3fb9af0f8b 2017-11-21 20:34 +0000 [80bf0ee99a] Corey Farrell * loader: Minor fix to module registration. This protects the module loader itself against crashing if dlopen is called on a module from outside loader.c. * Expand scope of lock inside ast_module_register to include reading of resource_being_loaded. * NULL check resource_being_loaded. * Set resource_being_loaded NULL as soon as dlopen returns. This fixes some error paths where it was not NULL'ed. * Create module_destroy function to deduplicate code from ast_module_unregister and modules_shutdown. * Resolve leak that occured if a module did not successfully register. * Simplify checking for successful registration. Change-Id: I40f07a315e55b92df4fc7faf525ed6d4f396e7d2 2017-12-14 15:27 +0000 [a8aa209901] Corey Farrell * res_clialiases: Fix completion pass-through. Never ignore contents of line when generating completion options. Change-Id: I74389efdfea154019d3b56a9f381610614c044c8 2017-12-11 18:20 +0000 [98f7e9251f] Richard Mudgett * res_rtp_asterisk.c: Disable packet flood detection for video streams. We should not do flood detection on video RTP streams. Video RTP streams are very bursty by nature. They send out a burst of packets to update the video frame then wait for the next video frame update. Really only audio streams can be checked for flooding. The others are either bursty or don't have a set rate. * Added code to selectively disable packet flood detection for video RTP streams. ASTERISK-27440 Change-Id: I78031491a6e75c2d4b1e9c2462dc498fe9880a70 2017-12-14 14:05 +0000 [283d2df680] George Joseph * res_pjsip_sdp_rtp: Add NULL check in add_crypto_to_stream add_crypto_to_stream wasn't checking for a NULL session->inv_session->neg before calling pjmedia_sdp_neg_get_state. This was causing a crash if the negotiation hadn't already been completed and asterisk was compiled with --enable-dev-mode. Change-Id: I57c6229954a38145da9810fc18657bfcc4d9d0c9 2017-12-14 12:14 +0000 [c387beb456] Sean Bright * res_musiconhold: Start playlist after initial announcement Reset the samples counter to zero when we are done playing an announcement so that we don't skip into the middle of the first file in the playlist. Also add the selected annoucement to the output of 'moh show classes.' ASTERISK-24329 #close Reported by: Thomas Frederiksen Change-Id: I2a5f986a31279c981592f49391409ebf38d6f6d0 2017-12-14 10:51 +0000 [7a8a187a56] Sean Bright * coverity: Fix warnings in res_smdi ASTERISK-19657 #close Reported by: Matt Jordan III, Esq. Change-Id: I59a5e6ef3e7d9e848bec1f4b40cb73321bc7956a 2017-12-14 10:22 +0000 [dac5e3a0df] Sean Bright * configs: Comment out and change IP of iax.conf [demo] This no longer appears to exist, so no sense in causing confusion. ASTERISK-27175 #close Reported by: Tzafrir Cohen Change-Id: Idde967924c69f6a741dc9a5ab7dacb44d22cf100 2017-12-13 14:26 +0000 [a51bfe5a79] George Joseph * README: Remove outdated references to tex docs Added links to the wiki to replace references to outdated tex docs. ASTERISK-27430 Reported by: Corey Farrell Change-Id: I5007e732b30bc7b63d124c530ae8857c89991209 2017-12-13 09:50 +0000 [5f6a3c4399] Corey Farrell * CLI: Remove special handling of 'core set verbose' from rasterisk. rasterisk does not need to handle setting verbose levels locally, it should just tell the daemon what it wants and print what it is given. Just max out the verbose level on the local client so all filtering happens on the daemon. ASTERISK-20281 #close Change-Id: Ia305f75f1fc424a9169bfa30ef70d626ace2c8a8 2017-12-08 06:48 +0000 [daa3a3009a] sungtae kim * Add new AMI action for app_voicemail Currently, to figure out specified voicemail's status, there's only one way to do it, which is use a VoicemailUserEntry AMI message. But it consumed it too much resource(it check everything). So, added new AMI action. ASTERISK-27470 Change-Id: Ie4eba1424a142e5fbd1d9fb1821a3fc1a1e238b7 2017-11-30 10:12 +0000 [62f2860c39] Joshua Colp * AST-2017-012: Place single RTCP report block at beginning of report. When the RTCP code was transitioned over to Stasis a code change was made to keep track of how many reports are present. This count controlled where report blocks were placed in the RTCP report. If a compound RTCP packet was received this logic would incorrectly place a report block in the wrong location resulting in a write to an invalid location. This change removes this counting logic and always places the report block at the first position. If in the future multiple reports are supported the logic can be extended but for now keeping a count serves no purpose. ASTERISK-27382 ASTERISK-27429 Change-Id: Iad6c8a9985c4b608ef493e19c421211615485116 2017-12-13 06:54 +0000 [3370cd21df] Joshua Colp * res_pjsip_session: Reinvite using active stream topology if none requested. When a connected line update is sent to an endpoint we do not request a specific stream topology to be used. Previously this resulted in the configured stream topology being used which may actually differ from the currently negotiated topology. PJSIP is helpful in this regard in that it will fill in any missing streams with removed ones. This results in our own state not matching the SDP, though, and we do not apply the negotiated SDP. This change tweaks the code to use the actively negotiated stream topology if it is present with a fallback to the configured one. This results in the SDP and the state having matching information and the world is happy. ASTERISK*27397 Change-Id: I7a57117f0183479e6884b7bf3a53bb8c7464f604 2017-12-06 08:24 +0000 [0b532367bd] Joshua Colp * pjsip: Ignore state changes from old transactions. When we fail over to a new target we create a new transaction and it becomes the current INVITE transaction. This does not prevent the previous transaction from raising state changes and causing the session to be prematurely disconnected if a transport error occurs immediately. This change backports a fix from PJSIP that eliminates the incorrect state change and reduces when they would be raised in the first place. ASTERISK-27408 Change-Id: Id22d087591782eee31311753d11e7eca4b95ef34 2017-12-12 22:42 +0000 [cb249b2419] Yasuhiko Kamata * chan_sip: 3PCC patch for AMI "SIPnotify" A patch for sending in-dialog SIP NOTIFY message with "SIPnotify" AMI action. ASTERISK-27461 Change-Id: I5797ded4752acd966db6b13971284db684cc5ab4 2017-12-12 15:38 +0000 [c7f94e570e] Ivan Poddubny * app_queue: Fix extension state subscriptions removed on dialplan reload The approach with having a single global subscription to all extension state changes has one issue: dynamically created hints don't have any watchers and are therefore garbage collected on the first dialplan reload. This change creates a state subscription for every queue member with a hint as state_interface, thus increasing the count of watches for hints, so they are not destroyed prematurely anymore. There are 2 side effects: 1. The state change callback in app_queue is not executed when there are no members referring to the extension. 2. The callback is called multiple times for the same hint if it's associated with more than one queue member. Reported by: Steven T. Wheeler ASTERISK-18411 #close Change-Id: I4956af2136ea2a7f110ac9272eae5f6e676d8f89 2017-12-12 15:28 +0000 [0c9cc7e975] Sean Bright * chan_sip: Don't send trailing \0 on keep alive packets This is a partial fix for ASTERISK~25817 but does not address the comments regarding RFC 5626. Change-Id: I227e2d10c0035bbfa1c6e46ae2318fd1122d8420 2017-12-12 15:19 +0000 [5039b5741c] Dwayne Hubbard * chan_sip: Don't crash in Dial on invalid destination Stripping the DNID in a SIP dial string can result in attempting to call the argument parsing macros on an empty string, causing a crash. ASTERISK-26131 #close Reported by: Dwayne Hubbard Patches: dw-asterisk-master-dnid-crash.patch (license #6257) patch uploaded by Dwayne Hubbard Change-Id: Ib84c1f740a9ec0539d582b09d847fc85ddca1c5e 2017-12-12 15:16 +0000 [6a67828b46] Corey Farrell * menuselect: Tweak check for recently run configure. Recently menuselect has randomly produced an error stating that configure was just run and make had to be restarted. I believe this is due to an incorrect menuselect/Makefile rule. The original rule produced an error if makeopts or autoconfig.h were older than makeopts.in or autoconfig.h.in. I believe this can create an issue if makeopts is older than autoconfig.h.in or if autoconfig.h is older than makeopts.in. The new rules compare files independently. Change-Id: Ibca155035fa1392c95e33cbf25f257902abba17b 2017-12-07 17:51 +0000 [22810fc635] Richard Mudgett * chan_pjsip/res_pjsip: Add CHANNEL(pjsip,request_uri) This patch does three things associated with the initial incoming INVITE request URI. 1) Add access to the full initial incoming INVITE request URI. 2) We were not setting DNID on incoming PJSIP channels. The DNID is the user portion of the initial incoming INVITE Request-URI. The value is accessed by reading CALLERID(dnid). 3) Fix CHANNEL(pjsip,target_uri) documentation. * The initial incoming INVITE request URI is now available using CHANNEL(pjsip,request_uri). * Set the DNID on PJSIP channel creation so CALLERID(dnid) can return the initial incoming INVITE request URI user portion. * CHANNEL(pjsip,target_uri) now correctly documents that the target URI is the contact URI. * Refactored print_escaped_uri() out of channel_read_pjsip() to handle pjsip_uri_print() error condition when the buffer is too small. ASTERISK-27478 Change-Id: I512e60d1f162395c946451becb37af3333337b33 2017-12-12 09:28 +0000 [ec1f4bf48d] Sean Bright * res_pjsip: Add TLSv1.1 and TLSv1.2 support Support for these protocols was added in the same commit as the 'proto' field, so we can safely use the same ./configure check. For reference: https://trac.pjsip.org/repos/changeset/4968 Change-Id: Icf4975d785d6bfb8f30ac7ffa695a0adf9382dac 2017-12-12 08:06 +0000 [0b9d2135a9] Sean Bright * res_pjsip: Assign support levels to a few modules Change-Id: I51f6945c4023cb93fc7b87be5ab4c50e9e6ee27d 2017-12-09 00:35 +0000 [c01ba7437e] Corey Farrell * CLI: Fix 'core show sysinfo' function ordering. Handle CLI initialization before any processing occurs. Change-Id: I598b911d2e409214bbdfd0ba0882be1d602d221c 2017-12-11 15:27 +0000 [b088cddc03] Kevin Harwell * pjsip_options: wrongly applied "UNKNOWN" status A couple of places were setting the status to "UNKNOWN" when qualifies were being disabled. Instead this should be set to the "CREATED" status that represents when a contact is given (uri available), but the qualify frequency is set to zero so we don't know the status. This patch updates the relevant places with "CREATED". It also updates the "CREATED" status description (value shown in CLI/AMI/ARI output) to a value of "NonQualified"/"NonQual" as this description is hopefully less confusing. ASTERISK-27467 Change-Id: Id67509d25df92a72eb3683720ad2a95a27b50c89 2017-12-08 12:04 +0000 [c2ec82bf36] Richard Mudgett * stasis_channels.c: Don't set channel snapshot caller_dnid twice. Change-Id: Ib8d45bbdfbda81e65045f6dff874d189b74e5471 2017-12-11 09:45 +0000 [00578fae0a] Sean Bright * codec_opus: Make libcurl a dependency in menuselect ASTERISK-27475 #close Change-Id: If7384bc6ed002ef140dec69798d14c52b7cfd800 2017-12-08 12:48 +0000 [521f741b04] Sean Bright * pjsip: Improve CLI completion performance Use the new ast_cli_completion_add() function to improve completion performance for commands like 'pjsip show endpoint.' Change-Id: I76d802294d2ac1766110dc75f7d117c8541ce348 2017-12-07 14:19 +0000 [9a9edc6c9e] Sean Bright * astdb: Improve prefix searches in astdb Using the LIKE operator requires a full table scan of 'astdb', whereas a comparison operation is able to use the primary key index. This patch adds a new function to the AstDB API for quick prefix matches and updates res_sorcery_astdb to utilize it. This showed substantial performance improvement in my test environment. Related to ASTERISK~26806, but does not completely resolve it. Change-Id: I7d37f9ba2aea139dabf2ca72d31fbe34bd9b2fa1 2017-12-08 18:19 +0000 [d2e87b8e14] Corey Farrell * loader: Refactor resource_name_match. Optimize resource_name_match. This change eliminates use of ast_strdupa, instead verifying that both basename's are the same length, then using strncasecmp. Change-Id: I477275c0e954c99d74be5abfc8bb6545b04e5a3d 2017-12-08 14:58 +0000 [dbb376f166] Sean Bright * pjsip_configuration: Add correct file header Change-Id: I25348c386a222bb704aff07f54375108a6402906 2017-12-07 09:52 +0000 [2ffe52a116] Sean Bright * utils: Add convenience function for setting fd flags There are many places in the code base where we ignore the return value of fcntl() when getting/setting file descriptior flags. This patch introduces a convenience function that allows setting or clearing file descriptor flags and will also log an error on failure for later analysis. Change-Id: I8b81901e1b1bd537ca632567cdb408931c6eded7 2017-12-07 19:33 +0000 [e2dbc26376] Corey Farrell * res_stasis and res_speech: Fix load order. res_stasis was missing AST_MODFLAG_LOAD_ORDER. Set res_stasis and res_speech to start at (AST_MODPRI_APP_DEPEND - 1) so they are ready for dependent modules. Change-Id: I27f4f3810a95b6be8a5bfbf62be2ace6bfab6ff3 2017-12-07 18:22 +0000 [0e4d31eb9c] Kevin Harwell * pjsip_options: contacts sometimes not being updated on reload For both dynamic and static contacts it was possible that potential AOR changes were not being applied to all contacts. This was because the qualify and schedule code was only retrieving AOR's, and contacts with frequencies greater than zero. For instance the following could happen: and AOR/contact has a frequency of 5, it then gets set to 0, and then a reload occurs. All scheduled OPTIONS are stopped, a list of AOR's is retrieved with frequency > 0, but none are selected since in this scenario all are 0. The contact for the one previously set to 5 though does not get updated, so it's status remains "AVAILABLE". This patch makes it so all contacts (static and dynamic) are selected, and appropriately updated if need be. ASTERISK-27467 #close Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb 2017-12-07 18:18 +0000 [bd2218ce63] Kevin Harwell * pjsip_options: dynamic contact's fields not updated on reload Dynamic contacts were not being properly updated on reload. As a matter of fact any changes to the AOR that a dynamic contact was associated with were not being applied. On reload, this patch makes it so for each dynamic contact, the associated AOR is now retrieved and the AOR's fields are applied to the contact. ASTERISK-27467 Change-Id: I8e3165dc6a745218c1c9db837f77fafa0516985d 2017-12-06 23:35 +0000 [c2c9995830] Corey Farrell * translate: Skip matrix_rebuild during shutdown. Change-Id: I1e5eef4029cba56e33d786c5a5ade8091e531a1e 2017-12-06 14:49 +0000 [ab191e9782] Corey Farrell * sounds_index: Avoid repeatedly reindexing. The sounds index is rebuilt each time a format is registered or unregistered. This causes the index to be repeatedly rebuilt during startup and shutdown. This patch significantly reduces the work done by delaying sound index initialization until after modules are loaded. This way a reindex only occurs if a format module is loaded after startup. We also skip reindexing when format modules are unloaded during shutdown. Change-Id: I585fd6ee04200612ab1490dc804f76805f89cf0a 2017-12-05 18:04 +0000 [3078b7adc2] Richard Mudgett * CDR: Fix deadlock setting some CDR values. Setting channel variables with the AMI Originate action caused a deadlock when you set CDR(amaflags) or CDR(accountcode). This path has the channel locked when the CDR function is called. The CDR function then synchronously passes the job to a stasis thread. The stasis handling function then attempts to lock the channel. Deadlock results. * Avoid deadlock by making the CDR function handle setting amaflags and accountcode directly on the channel rather than passing it off to the CDR processing code under a stasis thread to do it. * Made the CHANNEL function and the CDR function process amaflags the same way. * Fixed referencing the wrong message type in cdr_prop_write(). ASTERISK-27460 Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f 2017-12-06 12:42 +0000 [2af59ebb3a] Corey Farrell * media_index: Improve startup. This eliminates some wasteful operations in media_index startup. * Replace statically set string-fields with char[0]. * Eliminate pointless RAII_VAR's. * alloc_variant: Avoid pointless ao2_find on new info->variant. * Stop trying find_variant before alloc_variant. * process_media_file: replace ast_str with ast_asprintf. This avoids reallocation of file_id_str. Overall sounds_index.c is about 27% of Asterisk startup time when using sample configs. This patch reduces it to 20%. This is a half-fix. The real problem is that the media_index is regenerated repeatedly - 68 times in my test. Change-Id: Ia50b752f8efb356f852b05c4be495a6631af8652 2017-12-06 07:36 +0000 [e97e41552e] Richard Mudgett * bridge_basic.c: Update transfer diagnostic messages addendum. * Added start DTMF transfer verbose messages. * Made associated transfer messages use a similar message format. * Adjusted message verbose level as requested by initial reporter. ASTERISK-27449 Change-Id: I2045714586414b3c5ef1f3cc56c1c4af4b31f551 2017-11-29 06:21 +0000 [9d00583164] Niklas Larsson * bridge_basic.c: Update transfer diagnostic messages. * Add the channel name to diagnostic messages so you will know which channel failed to transfer. * Promoted some debug messages to verbose 4 messages. ASTERISK-27449 #close Change-Id: Idac66b7628c99379cc9269158377fd87dc97a880 2017-12-01 13:54 +0000 [8536a09b86] Richard Mudgett * security-events: Fix SuccessfulAuth using_password declaration. The SuccessfulAuth using_password field was declared as a pointer to a uint32_t when the field was later read as a uint32_t value. This resulted in unnecessary casts and a non-portable field value reinterpret in main/security_events.c:add_json_object(). i.e., It would work on a 32 bit architecture but not on a 64 bit big endian architecture. Change-Id: Ia08bc797613a62f07e5473425f9ccd8d77c80935 2017-11-30 12:50 +0000 [ab63448fa6] Richard Mudgett * res_rtp_asterisk.c: Increase strictrtp learning timeout time. More complicated direct media reinvite negotiations can result in longer delays before direct media flows. The strictrtp learning timeout time was too short. One log showed that the first RTP packet came in just after three seconds. * Increase the strictrtp learning timeout time from 1.5 to 5 seconds. ASTERISK-27453 Change-Id: Ic5e711164cbb91b4d1c1e40c83697755640f138c 2017-12-04 08:33 +0000 [e0354bbe82] Alexander Traud * res_rtp_asterisk: Correct default in sample configuration file. With Asterisk 12 (commit 866d968), the default of "icesupport" changed to - "yes" in the module "res_rtp_asterisk" and - "no" in the module "chan_sip". The latter was reflected in the sample configuration file for "sip.conf". The former did not make it into "rtp.conf.sample". ASTERISK-20643 Change-Id: I2a2e0a900455d0767a99ea576e30adc6d7608a36 2017-12-04 05:27 +0000 [b2c4e8660a] Alexander Traud * chan_sip: Peers with distinct source ports don't match, regardless of transport. Previously, peers connected via TCP (or TLS) were matched by ignoring their source port. One cannot say anything when protocol:IP:port match, yes (see ). However, when the ports do not match, the peers do not match as well. This change allows two peers connected to an Asterisk server via TCP (or TLS) behind a NAT (= same source IP address) to be differentiated via their port as well. ASTERISK-27457 Reported by: Stephane Chazelas Change-Id: Id190428bf1d931f2dbfd4b293f53ff8f20d98efa 2017-12-04 03:40 +0000 [0611fe581c] Sungtae Kim * Add new object for VoicemailUserEntry Currently, when the app_voicemail sending VoicemailUserEntry AMI event, there's no OldMessageCount info for default. To check the OldMessageCount info, it required IMAP_STORAGE define, but this is not correct. Added OldMessageCount item as a default. ASTERISK-27456 Change-Id: I5c71521c2d1daf8b7b161e31c34d28cca6aea4c7 2017-12-03 18:49 +0000 [e2715d2cd4] Joshua Colp * pjproject: Clean up disabling of WebRTC support. The definition in config_site.h and the argument to the configure script are not necessary to disable WebRTC support. The correct argument, --disable-libwebrtc, is already passed. ASTERISK-26980 Change-Id: I27da2c894f87914956a72710222e17462d8a44bc 2017-12-02 15:55 +0000 [39939cecfa] Corey Farrell * autoconf: Remove use of m4_ifblank. The m4_ifblank macro is not available on CentOS 6, reverse conditionals to allow use of m4_ifval instead. ./bootstrap.sh was run but this patch does not result in any difference to the generated configure script. Change-Id: I280785deb872ed8d3339d99cce63a2b54d5f1438 2017-11-30 14:38 +0000 [075faac2fd] George Joseph * AST-2017-013: chan_skinny: Call pthread_detach when sess threads end chan_skinny creates a new thread for each new session. In trying to be a good cleanup citizen, the threads are joinable and the unload_module function does a pthread_cancel() and a pthread_join() on any sessions that are active at that time. This has an unintended side effect though. Since you can call pthread_join on a thread that's already terminated, pthreads keeps the thread's storage around until you explicitly call pthread_join (or pthread_detach()). Since only the module_unload function was calling pthread_join, and even then only on the ones active at the tme, the storage for every thread/session ever created sticks around until asterisk exits. * A thread can detach itself so the session_destroy() function now calls pthread_detach() just before it frees the session memory allocation. The module_unload function still takes care of the ones that are still active should the module be unloaded. ASTERISK-27452 Reported by: Juan Sacco Change-Id: I9af7268eba14bf76960566f891320f97b974e6dd (cherry picked from commit 8f5dff543e457ee3450d21e741901609af0cd779) 2017-12-01 10:01 +0000 [d9fdeae6a4] Sean Bright * config: Speed up config template lookup ast_category_get() has an (undocumented) implementation detail where it tries to match the category name first by an explicit pointer comparison and if that fails falls back to a normal match. When initially building an ast_config during ast_config_load, this pointer comparison can never succeed, but we will end up iterating all categories twice. As the number of categories using a template increases, this dual looping becomes quite expensive. So we pass a flag to category_get_sep() indicating if a pointer match is even possible before trying to do so, saving us a full pass over the list of current categories. In my tests, loading a file with 3 template categories and 12000 additional categories that use those 3 templates (this file configures 4000 PJSIP endpoints with AOR & Auth) takes 1.2 seconds. After this change, that drops to 22ms. Change-Id: I59b95f288e11eb6bb34f31ce4cc772136b275e4a 2017-12-01 08:29 +0000 [1ad0fbc80e] Sean Bright * config: Speed up ACO & sorcery initialization When starting Asterisk in the foreground, there is a perceptible delay when loading modules that use the ACO and sorcery config frameworks. For example, a lightly configured res_pjsip took 853ms to load on my VM. I tracked down the slowness to the XPath queries used to associate the relevant documentation with the config options. One improvement was adding a call to xmlXPathOrderDocElems after loading an XML document. From the libxml2 docs: Call this routine to speed up XPath computation on static documents. The second change was to remove recursive descent and wildcard operators from the XPath queries. After these changes, res_pjsip takes 85ms to load on my VM and there is no longer a perceptible delay when starting Asterisk in the foreground. Change-Id: I45d457f1580e26bf5a2b0dab16e8e9ae46dcbd82 2017-12-01 06:07 +0000 [892df22ccd] Joshua Colp * res_http_post: Not all versions of gmime have GMIME_MAJOR_VERSION. This change makes the presence of the GMIME_MAJOR_VERSION definition optional, as not all versions of gmime actually define it. ASTERISK-27454 Change-Id: I01d99590045971ed6787899147170a5954077238 2017-11-30 21:24 +0000 [35a7036a0d] Corey Farrell * README-SERIOUSLY.bestpractices.txt: Convert to markdown Follow-up to conversion of README.md. Change-Id: I17ee7cf25bc027ece844efa2c1dfe613aff1e35b 2017-11-17 10:38 +0000 [ce5cfc8ffb] Corey Farrell * autoconf: Use m4 conditionals where possible. Change-Id: I530c0a72f965437acef6a9a4fbfe5c487f078b65 2017-11-17 09:15 +0000 [87a57e8d46] Corey Farrell * autoconf: Fix call to AC_CONFIG_AUX_DIR. The `pwd` parameter to AC_CONFIG_AUX_DIR is unnecessary, the default value is $srcdir. Additionally remove the AC_REVISION call. It only added a comment and is pointless without SVN tag replacements. Change-Id: I99299a3217f095bddcb2edefb3b9af0ab147bc29 2017-11-20 16:58 +0000 [d12a2ab400] Corey Farrell * CLI: Remove compatibility code. Previous commits maintained compatibility with older remote console clients as well as maintaining all API's. Remove the following compatibility code: * ast_cli_generatornummatches. * Remote command "_command nummatches". * Sorting / duplicate removal by remote console. Change-Id: I59e6ce94fa57ae564888442049695f7e46746437 2017-11-26 11:47 +0000 [58115e9c21] Alexander Traud * translate: Transcode siren14, speex32, silk24, and silk12 via slin16. When a format has no pre-recorded sound files, Asterisk has to transcode between formats. For this, Asterisk has a fixed translation table. If the pre-recorded sound files are not available in the same sample rate, Asterisk has not only to transcode but also to resample. Asterisk has pre-recorded files for SLN (8000 kHz) and SLN16 (16000 kHz). However before this change, Asterisk did not take the sample rate into account, because the translation paths to SLN and SLN16 got the same score/weight in the table. Consequently, you might have got narrow-band audio with siren14, speex32, silk24, and silk12 although those are (ultra) wide-band audio codecs. With this change, the distance in sample-rates is taken into account. Now on the Command-Line interface (CLI) 'core show channels', you should see: (slin@16000)->(slin@32000)->(speex@32000). ASTERISK-23735 Reported by: Richard Kenner Change-Id: I9448295c1978be26f8633b6066395e7bbbe2e213 2017-11-26 09:44 +0000 [55c4d8e008] Richard Mudgett * res_ari: Fix inverted test giving wrong error message. The patch for ASTERISK_24560 inverted a test checking if the bridge name is being updated to a different name. * Fix the test to return "Changing bridge name is not implemented" when someone attempts to change the bridge name. ASTERISK-27445 Change-Id: I4b70bf08b0e02e016108b077ff75b345dec12fc9 2017-11-25 04:09 +0000 [74e7005a74] Alexander Traud * translate: Show sample rate for silk, speex, and slin in translation table. ASTERISK-24662 Change-Id: I3822956984292c99c48bca8e97807e498ccc0e88 2017-11-23 13:27 +0000 [02a9952709] Richard Mudgett * features.conf.sample: Clarify ActivatedBy documentation wording. Change-Id: Id2899331fe05d1909a862ea879742879d086bc64 2017-11-22 18:37 +0000 [4b1262c94b] Corey Farrell * Add defaultbranch to .gitreview. Although the default value of defaultbranch is master I'm adding it anyways. This way when new major branches are being created the value can be updated instead of having to remember the name of the key. Change-Id: I3db009217c5ae399fb84bee95076f4dbb7fa52d2 2017-11-22 18:43 +0000 [fcd9ba2b87] Alexander Anikin * add cmd connection creation on creation ooh323 call data structure ASTERISK-27353 #close Reported by: Marco Giordani Change-Id: I455096bd7da016b871afe09af86067c2c7c9f33f 2017-11-22 10:42 +0000 [db21f7f2e1] Kevin Harwell * pjsip: 183 without To tag does not negotiate media If a 183 with sdp response is receive without a To tag the sdp is not negotiated. According to RFC 3261 section 12.1.2 while a To tag is required, the client needs to still be able to handle the missing tag case for backwards compatibility. This patch, accepted by and applied to pjproject, makes it so if an incoming 180/183 with SDP comes in without a To tag it gets appropriately handled. ASTERISK-27442 #close Change-Id: Ic9d6b01e05e8f4874eebbd7adfe05d932025d203 2017-11-21 06:39 +0000 [1a349d832d] Alexander Traud * res_rtp_asterisk: ICE server-reflexive candidates (srflx) with Dual-Stack. Previously, Asterisk sent srflx only when configured exclusively for IPv4. Now, srflx is gathered and sent via SDP, even when Asterisk is enabled for Dual Stack (IPv4+IPv6) and an IPv4 interface is available/used. ASTERISK-27437 Change-Id: Ie07d8e2bfa7b6fe06fcdc73d390a7a9a4d8c0bc1 2017-11-20 13:05 +0000 [8e1506154f] Corey Farrell * res_parking: Set load_pri more appropriately. res_parking had an inplicit load_pri of 0 meaning it was one of the very first modules loaded after modules with global symbols. Set it to AST_MODPRI_DEVSTATE_PROVIDER as it provides device state for parking lots. Change-Id: I297b6fb3ff6993ec004e667b22a74f5925906259 2017-11-17 21:33 +0000 [90f9885f73] Corey Farrell * README: Convert to README.md. Convert the README file to markdown format, remove the old README. This causes websites like github to display the README in a much nicer format with live links. The raw file is still very readable from plain text editors and terminals. Change-Id: I7d13131764a9a9026e5f8a6ddb245a01bbd788e7 2017-11-20 16:48 +0000 [b79d04f8f8] Corey Farrell * CLI: Finish conversion of completion handling to vectors. Change-Id: Ib81318f4ee52a5e73b003316e13fe9be1dd897a1 2017-11-07 15:34 +0000 [fbb8c0d3e4] Corey Farrell * CLI: Refactor cli_complete. * Stop using "_COMMAND NUMMATCHES" on remote consoles. Using this command had doubled the amount of work needed from the Asterisk daemon for each completion request. * Fix code formatting. * Remove static buffer used to send the command, use the same buffer that will receive the results. * Move sort from ast_cli_display_match_list. Change-Id: Ie2211b519a3d4bec45bf46e0095bdd01d384cb69 2017-11-07 14:13 +0000 [1cd24cd726] Corey Farrell * CLI: Rewrite ast_el_strtoarr to use vector's internally. This rewrites ast_el_strtoarr to use vector's internally, but still return the original NULL terminated array of strings. Change-Id: Ibfe776cbe14f750effa9ca360930acaccc02e957 2017-11-07 14:47 +0000 [9c0a2110f0] Corey Farrell * CLI: Refactor ast_cli_display_match_list. * Stop estimating line count, just print until we run out of matches. * Stop freeing entries, the caller does that anyways. * Stop calculating / returning numoutput, it was ignored. Change-Id: I7f92afa8bea92241a95227587367424c8c32a5cb 2017-11-08 23:42 +0000 [9587a61f4c] Corey Farrell * CLI: Create ast_cli_completion_add function. Some completion generators are very inefficent due to the way CLI requests matches one at a time. ast_cli_completion_add can be called multiple times during one invokation of a CLI generator to add all results without having to reinitialize the search state for each match. Change-Id: I73d26d270bbbe1e3e6390799cfc1b639e39cceec 2017-11-09 00:39 +0000 [a02cbc2ef3] Corey Farrell * CLI: Remove calls to ast_cli_generator. The ability to add to localized storage cannot be supported by ast_cli_generator. The only calls to ast_cli_generator should be by functions that need to proxy the CLI generator, for example 'cli check permissions' or 'core show help'. * ast_cli_generatornummatches now retrieves the vector of matches and reports the number of elements (not including 'best' match). * test_substitution retrieves and iterates the vector. Change-Id: I8cd6b93905363cf7a33a2d2b0e2a8f8446d9f248 2017-11-20 09:13 +0000 [491e2eba0d] Alexander Traud * chan_sip: ICE contained square brackets around IPv6 addresses. ASTERISK-27434 Change-Id: Iaeed89b4fa05d94c5f0ec2d3b7cd6e93d2d5a8f7 2017-11-19 21:23 +0000 [10b4b5d200] Corey Farrell * loader: Fix comments in struct ast_module. Make the comments follow doxygen format, move comments to the line before each field they describe. Change-Id: Ic445468398b5e88f13910f7c2f70bd15aad33a27 2017-11-16 17:25 +0000 [9ae805c900] Corey Farrell * cli: Remove silly usage of RAII_VAR. Change-Id: I81aacfee7cd26e4fc5eef07bca582700c2975bd7 2017-11-16 13:19 +0000 [89ccab95c2] Corey Farrell * ccss: Remove silly usage of RAII_VAR. Change-Id: I5ce40035e0a940e4e56f6322c1dcd47fbd509b98 2017-11-16 12:51 +0000 [5e99c334d1] Corey Farrell * app: Remove silly usage of RAII_VAR. Change-Id: Ideb594f7aae134974fb78d5477ba0853b97b8625 2017-11-16 12:19 +0000 [abdd9fa1a8] Corey Farrell * aoc: Remove silly usage of RAII_VAR. Change-Id: I07907f833b81aeb0128bc9442a2abb52679c7511 2017-11-16 12:55 +0000 [48e1b39b28] Corey Farrell * abstract_jb: Remove silly usage of RAII_VAR. Change-Id: I9d56175369363d1dc735504cf78a3a5577069f49 2017-11-20 13:08 +0000 [d6bbcec571] Corey Farrell * res_mwi_external_ami: Remove incorrect load priority. res_mwi_external_ami specified AST_MODFLAG_LOAD_ORDER but didn't set load_pri, resulting in an actual load priority of 0. This module only provides AMI actions so it has no reason to load early. Change-Id: I82987fcf10d3ea42716b2f9df915b16687fd5839 2017-11-20 12:54 +0000 [58fa3885cc] Corey Farrell * Loader: Remove unneeded load_pri declarations. Instead of specifying AST_MODFLAG_LOAD_ORDER with load_pri AST_MODPRI_DEFAULT just use AST_MODFLAG_DEFAULT. Change-Id: I0123258eafce324249433a69df15a85cc16e509f 2017-11-20 09:49 +0000 [7397961b02] Alexander Traud * BuildSystem: pjsip_evsub_set_uas_timeout was not used. ASTERISK-27435 Change-Id: Id318a7ae6d7d69b53f911d30bf3eece64852f15c 2017-11-19 09:57 +0000 [b4f7f8250f] Corey Farrell * Build: Fix OSX build issues. OSX does not support 'readlink -f' or 'sed -r'. Replace readlink with the GNU make macro 'realpath'. Replace sed with grep in one place, cut in the other. ASTERISK-27332 Change-Id: I5d34ecca905384decb22ead45c913ae5e8aff748 2017-11-19 13:52 +0000 [999e0c17d7] Corey Farrell * Build: Fix issues building without SSL. * Fix conditional in libasteriskssl. * Use variables produced by configure to link the SSL and uuid libraries into libasteriskpj.so instead of hard-coding them. ASTERISK-27431 Change-Id: I3977931fd3ef8c4e4376349ccddb354eb839b58d 2017-11-19 13:28 +0000 [53f42cc052] Corey Farrell * res_pjsip: Fix warning by deferring implicit type cast. Mac doesn't like the comparison of -1 to an enum, so store the result of ast_sip_str_to_dtmf to an int so we can check for the negative return value. ast_sip_str_to_dtmf returns an int so this is only delaying the implicit type cast. Change-Id: I0c262c1719ee951aae1f437d733a301cf5f8ad29 2017-11-18 21:13 +0000 [75cb403775] Corey Farrell * tests: Fix warnings found on Mac. test_pbx used raise without explicitly including signal.h. On Mac for some reason nothing else includes it. test_logger checked if an unsigned int was negative. Switch the variable to 'int' so that error check can be effective. Change-Id: Ie1db5dd1818ac25cc2ae41b644f848b5865b1362 2017-11-18 20:25 +0000 [83a2c4d2ae] Corey Farrell * res_snmp: Declare RONLY if net-snmp headers do not. Some net-snmp builds do not provide the RONLY declare, only NETSNMP_OLDAPI_RONLY. Map RONLY to NETSNMP_OLDAPI_RONLY to get around this error. Change-Id: Ida5c7ad9406515825485c4d3b4a34fd6ad0da577 2017-11-18 20:02 +0000 [5a899fc503] Corey Farrell * res_fax: Remove checks for unsigned values being >= 0. It's impossible for gwtimeout or fdtimeout to be less than 0 because they are unsigned int's. Remove checks and unreachable branches. Change-Id: Ib2286960621e6ee245e40013c84986143302bc78 2017-11-18 19:50 +0000 [b4862e463c] Corey Farrell * iostream: Fix ast_iostream_printf declaration. This adds the printf attribute and changes 'fmt' from 'const void *' to 'const char *'. This resolves a warning from some compiler for vsnprintf needing a literal string for format. Change-Id: I71c33a8262590042ee451e1146760c10bb22fb78 2017-11-18 19:29 +0000 [2fab3aacd6] Corey Farrell * app_minivm: Fix possible uninitialized return value. Declare 'res' initialized to -1 to deal with earlier error paths that could cause 'res' to be returned uninitialized. Change-Id: I8ac2a5755bf4174d89ef893e924c940f702b104e 2017-11-16 02:47 +0000 [0ca406c202] Pirmin Walthert * res_rtp_asterisk.c: Fix rtp source address learning for broken clients Some clients do not send rtp packets every ptime ms. This can lead to situations in which the rtp source learning algorithm will never learn the address of the client. This has been discovered on a Mac mini with a pjsip based softphone after updating to Sierra: as soon as USB headsets are involved, the softphone will send the second packet 30ms after the first, the third 30ms after the second and the fourth 1ms after the third. So in the old implmentation the rtp source learning algorithm was repeatedly reset on the fourth packet. The patch changes the algorithm in a way that doesn't take the arrival time between two consecutive packets into account but the time between the first and the last packet of a learning sequence. The patch also fixes a second problem: when a user was using a wrong value for the probation setting there was a LOG_WARNING output stating that the value had been set to the default value instead. However the code for setting the value back to defaults was missing. ASTERISK-27421 #close Change-Id: If778fe07678a6fd2041eaca7cd78267d0ef4fc6c 2017-11-17 19:36 +0000 [9316a064fd] Corey Farrell * README: Send people to secure websites where available. We should be sending people to secure web URL's where available. Update README's and docs. Change-Id: Id5b1e049b0b18b49a784f1254605aefa244ce19a 2017-11-17 19:54 +0000 [5d0529c4d9] Corey Farrell * doxygen: Remove obsolete contents. Remove doxygen contents that have nothing to do with the current state of Asterisk. Change-Id: Ic072cc8641f9533a202990ccf275ce87e3efd95c 2017-11-17 09:57 +0000 [1b6e4c1175] Sean Bright * res_pjsip: Use reasonable buffer lengths for endpoint identification Domains themselves can be up to 255 characters long (per RFC 1035), so our current buffer sizes are wholly inadequate for many use cases. Change-Id: If3f30a68307f1365a1fe06bc4b854c62842c9292 2017-11-11 10:09 +0000 [b9f4bb5988] Corey Farrell * menuselect: Remove ineffective weak attribute detection. menuselect detects compiler support for multiple styles of weak functions. This is a remnant from 2013 when OPTIONAL_API required weak functions. It is no longer correct for menuselect to switch dependencies from optional to required based on lack of weak function support. Note an issue remains - dependencies should switch from optional to required based on OPTIONAL_API being enabled or disabled. I don't think this is possible. menuselect needs to know at startup if OPTIONAL_API is enabled or disabled, so the only way to fix this is to remove OPTIONAL_API from menuselect and create a configure option. I've left the code that switches in place but it's preprocessed out. Additionally removed: - WEAKREF variable from Asterisk makeopts.in. - Related disabled code from test_utils. - Pointless AC_REVISION call from menuselect/configure.ac. Change-Id: Ifa702e5f98eb45f338b2f131a93354632a8fb389 2017-11-16 09:48 +0000 [c4f11911ea] Corey Farrell * acl: Fix allocation related issues. Add checks for allocation errors, cleanup and report failure when they occur. * ast_duplicate_acl_list: Replace log warnings with errors, add missing line-feed. * ast_append_acl: Add missing line-feed to logger message. * ast_append_ha: Avoid ast_strdupa in loop by moving debug message to separate function. * ast_ha_join: Use two separate calls to ast_str_append to avoid using ast_strdupa in a loop. Change-Id: Ia19eaaeb0b139ff7ce7b971c7550e85c8b78ab76 2017-11-16 09:04 +0000 [781a520b73] Joshua Colp * bridge_basic: Ignore answer from transfer target when they've timed out. This is a fun one. Given the following attended transfer scenario: 1. Transfer target is called 2. Transferer hangs up 3. Transfer target call attempt reaches timeout 4. Transfer target is told to hang up 5. Transfer target answers before channel is hung up 6. Transferer recall target is called A crash would occur. This is because the transfer target call attempt, despite being told to hang up, would raise a recall target answer before the recall target had been answered. As it had not answered there would be no recall target channel and it would implode. This change makes it so that if the transfer target has been hung up we don't tell the attended transfer code that it has answered. We also clear out the stimulus that the recall target has been answered after telling the transfer target to hang up, in case it was able to raise the information before we told it to hangup. ASTERISK-27361 Change-Id: Ifb8b255a9c4d2c5c1b8ad77bf54f659ed286df99 2017-11-16 19:39 +0000 [a95f2994c6] Corey Farrell * aoc: Fix memory management issues. aoc_publish_blob failed to check for msg allocation error and never released msg. Change-Id: Ib31a9ffb81056a0d496a49d7eec795005a44bcd5 2017-11-16 16:18 +0000 [7a735d45e2] Sean Bright * res_pjsip_transport_websocket: Give transport a meaningful description We were not \0 terminating this string, so any attempt to print it would in the best case show an empty string and in the worst case potentially crash. Change-Id: I63d96ef8f7516ac02a0f91e22dfa8acdc615042c 2017-11-16 15:00 +0000 [6c53fb5d21] Sean Bright * res_pjsip: Use sorcery prefix operation for contact lookup This improves performance for registrations assuming that res_config_astdb is not in use. Change-Id: I86f37aa9ef07a4fe63448cb881bbadd996834bb1 2017-10-19 14:44 +0000 [d995064fb7] Nir Simionovich * This patch adds a beanstalk CEL backend. Beanstalkd is a simple to use job queue. It provides a means to create multiple job queues called "tubes". Each tube can store multiple jobs, with varying priorities with the queue. Queue processing is available via a simple TCP socket or via well defined libraries, avaialble at https://github.com/kr/beanstalkd/wiki/client-libraries This module is based upon the beanstalk-client library, available for download at: https://github.com/deepfryed/beanstalk-client This module currently doesn't support user defined events. Change-Id: Ic3a087faeeac045d69a2a018e60e29831ddb95ab 2017-11-09 19:58 +0000 [e793501084] Richard Mudgett * chan_pjsip.c: Improve answer failure log messages. * Balanced the session->inv_session refs on answer failure. Change-Id: I33542d639d37e692cb46550b972a5fcfc3b804b8 2017-11-14 18:00 +0000 [b7b800b689] Richard Mudgett * audiohook.c: Fix freeing a frame and still using it. Memory corruption happened to the media frame caches when an audio hook freed a frame when it shouldn't. I think the freed frame was because a jitter buffer interpolated a missing frame and the audio hook unconditionally freed it. * Made audiohook.c:audio_audiohook_write_list() not free an interpolated frame if it is the same frame as what was passed into the routine. * Made plc.c:normalise_history() use memmove() instead of memcpy() on a memory block that could overlap. Found by valgrind investigating this issue. ASTERISK-27238 ASTERISK-27412 Change-Id: I548d86894281fc4529aefeb9f161f2131ecc6fde 2017-11-15 12:10 +0000 [f512707362] George Joseph * app_record: Don't set RECORD_STATUS chan var until file is closed We've been calling pbx_builtin_setvar_helper to set the RECORD_STATUS variable before actually closing the recorded file. If a client is watching VarSet events and tries to do something with the file when a RECORD_STATUS event is seen, they might attempt to do so while the file it's still open. We now delay calling pbx_builtin_setvar_helper until after we close the file. ASTERISK-27423 Change-Id: I7fe9de99953e46b4bafa2b38cf151fe8f6488254 2017-11-07 08:25 +0000 [cf1cb3345e] George Joseph * ast_coredumper: Add ability to use directory other than /tmp The OUTPUTDIR environment variable can now be set either in the environment itself or in ast_debug_tools.conf. If set, it's used for all work products instead of /tmp. Also added the --tarball-config option that includes the contents of /etc/asterisk when either --tarball-coredumps or --tarball-results are used. Change-Id: I66b2553319df61caea5b313d084f51978f730b4c 2017-11-13 07:14 +0000 [29e0add14f] Joshua Colp * pjsip / hep: Provide correct local address for Websockets. Previously for PJSIP the local address of WebSocket connections was set to the remote address. For logging purposes this is not particularly useful. The WebSocket API has been extended to allow the local address to be queried and this is used in PJSIP to set the local address to the correct value. The PJSIP HEP support has also been tweaked so that reliable transports always use the local address on the transport and do not try to (wrongly) guess. As they are connection based it is impossible for the source to be anything else. ASTERISK-26758 ASTERISK-27363 Change-Id: Icd305fd038ad755e2682ab2786e381f6bf29e8ca 2017-11-13 17:47 +0000 [14253f9535] Corey Farrell * alertpipe: Correct documented return of ast_alertpipe_write. Change-Id: I4ea49c441890a81384144479dc93ab5a3989486d 2017-11-09 19:47 +0000 [edd1016dd8] Corey Farrell * core: Use ast_alertpipe for Asterisk signal monitoring thread. Reduce the signal monitoring thread file descriptor use from two to one on systems that support eventfd. Change-Id: Id4041a237d481ff699639e153ea6982fee14a462 2017-11-13 16:20 +0000 [cdaaa14a5f] Corey Farrell * core: Fix configuration of remote console socket path. The remote console socket path is the combination of asterisk.conf settings astrundir from [directories] and astctl from [files]. Unconditionally combine the two strings after processing all values to ensure we end up with the correct socket path. ASTERISK-27415 Change-Id: Ib1e2805d55d6b0955c6430a1a2a93acbf9b091e8 2017-11-10 10:37 +0000 [f6ebd16bb8] George Joseph * bundled_pjproject: sip_parser: Fix return code in pjsip_find_msg The default return code for pjsip_find_msg was PJ_SUCCESS so if a Content-Length header wasn't found at all, pjsip_find_msg was returning PJ_SUCCESS instead of PJSIP_EMISSINGHDR. Also added the volatile keyword to a few variables that are used both inside and outside the PJ_TRY/PJ_CATCH block. Partial fix for ASTERISK_27408 Change-Id: If82ba9de921e3d57df9c68cf96ee45ccc1491f7a 2017-11-13 14:35 +0000 [2e7f6cd31b] Ben Ford * bundled_pjproject: Update to 2.7.1 Update from 2.7 to 2.7.1 for bundled pjproject. Changed version and removed patch files included in the update. Change-Id: I55cea8e734b318c2df9daf86aa0802c559ec8357 2017-11-09 08:21 +0000 [ffccce76d9] Sean Bright * sorcery: Add ast_sorcery_retrieve_by_prefix() Some consumers of the sorcery API use ast_sorcery_retrieve_by_regex only so that they can anchor the potential match as a prefix and not because they truly need regular expressions. Rather than using regular expressions for simple prefix lookups, add a new operation - ast_sorcery_retrieve_by_prefix - that does them. Change-Id: I56f4e20ba1154bd52281f995c27a429a854f6a79 2017-11-07 17:07 +0000 [14d60cee0c] Corey Farrell * CLI: Create ast_cli_completion_vector. This is a rewrite of ast_cli_completion_matches using a vector to build the list. The original function calls the vector version, NULL terminates the vector and extracts the elements array. One change in behavior the results are now sorted and deduplicated. This will solve bugs where some duplicate checking was done before the list was sorted. Change-Id: Iede20c5b4d965fa5ec71fda136ce9425eeb69519 2017-11-07 14:00 +0000 [4930404715] Corey Farrell * vectors: Add new macro and a string vector definition. * AST_VECTOR_STEAL_ELEMENTS - steal the array of elements for use with non-vector code. * struct ast_vector_string - a vector of 'char *'. Change-Id: I104d1b204be03fccf67e02a195596adcb5ab1e42 2017-11-11 13:01 +0000 [90bb0a3e10] Richard Mudgett * core: Add cache_media_frames debugging option. The media frame cache gets in the way of finding use after free errors of media frames. Tools like valgrind and MALLOC_DEBUG don't know when a frame is released because it gets put into the cache instead of being freed. * Added the "cache_media_frames" option to asterisk.conf. Disabling the option helps track down media frame mismanagement when using valgrind or MALLOC_DEBUG. The cache gets in the way of determining if the frame is used after free and who freed it. NOTE: This option has no effect when Asterisk is compiled with the LOW_MEMORY compile time option enabled because the cache code does not exist. To disable the media frame cache simply disable the cache_media_frames option in asterisk.conf and restart Asterisk. Sample asterisk.conf setting: [options] cache_media_frames=no ASTERISK-27413 Change-Id: I0ab2ce0f4547cccf2eb214901835c2d951b78c00 2017-11-11 09:42 +0000 [b865d29f1c] Richard Mudgett * frame.c: Make ast_frame_free()/ast_frfree() NULL tolerant Change-Id: Ic49d821ef88ada38a31bdd835b9531443c55d793 2017-11-10 22:04 +0000 [96987737b9] Corey Farrell * menuselect: Delete and ignore aclocal.m4. This file is temporary output from the bootstrap.sh command, it does not need to be committed. Change-Id: Ie0fd113aff6eac44924c0bd0c900833c6c86a6d9 2017-10-30 22:09 +0000 [e9f8b317c3] Corey Farrell * Build: Make function constructor/destructor attributes mandatory. This change causes the configure script to fail if the C compiler does not support both function attributes constructor and destructor. These were already required as modules cannot function without these attributes and Asterisk requires modules. This also has AST_GCC_ATTRIBUTE set a variable ax_cv_have_func_attribute_$1. This is the same variable name used by autoconf-archive's AX_GCC_FUNC_ATTRIBUTE, used for the same purpose. Change-Id: Id68e8a1447f2a6d707c54b56350e7bfdb33fb663 2017-11-10 07:06 +0000 [96f2ee865e] Joshua Colp * pjsip: Add patch to allow all transports to be destroyed. If a transport is created with the same transport type, source IP address, and source port as one that already exists the old transport is moved into a linked list called "tp_list". If this old transport is later shutdown it will not be destroyed as the process checks whether the transport is valid or not. This check does not look at the "tp_list" when making the determination causing the transport to not be destroyed. This change updates the logic to query not just the main storage method for transports but also the "tp_list". Upstream issue https://trac.pjsip.org/repos/ticket/2061 ASTERISK-27411 Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429 2017-11-09 20:34 +0000 [bb77666620] Corey Farrell * core: Remove disabled code. handle_quit has been disabled since 2003, remove it. Change-Id: Idc3aaa6c81676160547078f9b71e8aa43de2db18 2017-11-09 13:24 +0000 [23b0ef3e9b] Corey Farrell * Build System: Disable parallel make in the root Makefile. This ensures that the root Makefile runs only a single target at a time. SUBMAKE will still honor requested parallelism, so 'make -j8' will build one directory at a time but allow 8 jobs at once when building a sub directory. This will fix some display glitches related to rebuild of XML documentation. It will also prevent some edge case errors where bundled pjproject needs to be rebuild before other parts of Asterisk. Change-Id: I4f2ec6fbbec1ada0ccb1109a28ea303524239b1e 2017-03-29 20:46 +0000 [12010fc5c0] Richard Mudgett * chan_pjsip.c: Fix uninitialized cause value on failure. Change-Id: I3f9dd3c31bd582e54a30381500077de2319d8cc3 2017-11-08 01:40 +0000 [0bda39c668] Corey Farrell * DEBUG_FD_LEAKS: Add missing FD creators. This adds FD tracking for the following functions: * eventfd * timerfd_create * socketpair * accept ASTERISK-27404 Change-Id: Id6848fe904ade2d34eb39d2a20bd6b223e1111fc 2017-11-07 11:49 +0000 [05f557820b] Corey Farrell * bridge_softmix: Note why ast_stream_topology_set_stream cannot fail. This appeared in my audit of ast_stream_topology_set_stream callers not checking for errors but in this situation the call cannot fail. Add comment so this can be ignored in the future. Change-Id: I91d25704859efbe50b8b82cfe1cd3c40ba177c9f 2017-10-19 13:35 +0000 [dd1a914495] Kevin Harwell * AST-2017-011 - res_pjsip_session: session leak when a call is rejected A previous commit made it so when an invite session transitioned into a disconnected state destruction of the Asterisk pjsip session object was postponed until either a transport error occurred or the event timer expired. However, if a call was rejected (for instance a 488) before the session was fully established the event timer may not have been initiated, or it was canceled without triggering either of the session finalizing states mentioned above. Really the only time destruction of the session should be delayed is when a BYE is being transacted. This is because it's possible in some cases for the session to be disconnected, but the BYE is still transacting. This patch makes it so the session object always gets released (no more memory leak) when the pjsip session is in a disconnected state. Except when the method is a BYE. Then it waits until a transport error occurs or an event timeout. ASTERISK-27345 #close Reported by: Corey Farrell Change-Id: I1e724737b758c20ac76d19d3611e3d2876ae10ed 2017-10-03 16:19 +0000 [b358e441cd] Richard Mudgett * AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun cdr_object_update_party_b_userfield_cb() could overrun the fixed buffer if the supplied string is too long. The long string could be supplied by external means using the CDR(userfield) function. This may seem reminiscent to AST-2017-001 (ASTERISK_26897) and it is. The earlier patch fixed the buffer overrun for Party A's userfield while this patch fixes the same thing for Party B's userfield. ASTERISK-27337 Change-Id: I0fa767f65ecec7e676ca465306ff9e0edbf3b652 2017-10-19 13:53 +0000 [74432f51f9] George Joseph * AST-2017-009: pjproject: Add validation of numeric header values Parsing the numeric header fields like cseq, ttl, port, etc. all had the potential to overflow, either causing unintended values to be captured or, if the values were subsequently converted back to strings, a buffer overrun. To address this, new "strto" functions have been created that do range checking and those functions are used wherever possible in the parser. * Created pjlib/include/limits.h and pjlib/include/compat/limits.h to either include the system limits.h or define common numeric limits if there is no system limits.h. * Created strto*_validate functions in sip_parser that take bounds and on failure call the on_str_parse_error function which prints an error message and calls PJ_THROW. * Updated sip_parser to validate the numeric fields. * Fixed an issue in sip_transport that prevented error messages from being properly displayed. * Added "volatile" to some variables referenced in PJ_CATCH blocks as the optimizer was sometimes optimizing them away. * Fixed length calculation in sip_transaction/create_tsx_key_2543 to account for signed ints being 11 characters, not 9. ASTERISK-27319 Reported by: Youngsung Kim at LINE Corporation Change-Id: I48de2e4ccf196990906304e8d7061f4ffdd772ff 2017-11-06 17:58 +0000 [2c4db2a3d5] Corey Farrell * res_pjsip_pubsub: Fix multiple leaks on failure to append vectors. Change-Id: I68ece0073ea79667ca41eb10405f516f1d30d482 2017-11-06 18:12 +0000 [48e96aba6a] Corey Farrell * res_pjsip_history: Fix multiple leaks on vector append failure. Change-Id: I41e8d5183ace284095cc721f3b1fb32ade3f940f 2017-11-06 18:01 +0000 [ecb81ae4de] Corey Farrell * res_pjsip_session: Fix multiple leaks. * Pre-initialize cloned media state vectors to final size to ensure vector errors cannot happen later in the clone initialization. * Release session_media on vector replace failure in ast_sip_session_media_state_add. * Release clone and media_state in ast_sip_session_refresh if we fail to append to the stream topology, return an error. Change-Id: Ib5ffc9b198683fa7e9bf166d74d30c1334c23acb 2017-11-07 12:03 +0000 [9b3db9a7fd] Corey Farrell * main/sdp_state: Check for errors from ast_stream_topology_set_stream. Change-Id: I84a83ae69daba5d185cc1d939b133a4c23565497 2017-11-06 16:37 +0000 [0cfc3cbf02] Richard Mudgett * res_pjsip_registrar.c: Fix AOR and pjproject group deadlock. One of the patches for ASTERISK_27147 introduced a deadlock regression. When the connection oriented transport shut down, the code attempted to remove the associated contact. However, that same transport had just requested a registration that we hadn't responded to yet. Depending upon timing we could deadlock. * Made send the REGISTER response after we completed processing the request contacts and released the AOR lock to avoid the deadlock. ASTERISK-27391 Change-Id: I89a90f87cb7a02facbafb44c75d8845f93417364 2017-11-07 11:40 +0000 [eba1179795] Corey Farrell * res_pjsip_session: Check for errors from ast_stream_topology_set_stream. Free memory and return error if ast_stream_topology_set_stream fails. Change-Id: I9f4dbf44bed627243d2f1dd8aea2eab6c38a028d 2017-11-07 11:34 +0000 [4ac6dd4e95] Corey Farrell * res_pjsip_t38: Better error checking for t38_create_media_state. Change-Id: I81b2587427c6982aa3e2a3f9ad69cce8d316eb10 2017-11-06 15:38 +0000 [fb18895108] Corey Farrell * stream: Return error from ast_stream_topology_set_stream. ast_stream_topology_set_stream had suppressed error codes from AST_VECTOR_APPEND. The result of AST_VECTOR_APPEND needs to be returned to the caller so they can take appropriate action on the stream. Change-Id: I6c0d12755743eadba1357f6153526cc055592856 2017-11-06 17:21 +0000 [801094da7b] Corey Farrell * res_stasis: Fix multiple leaks. * res/stasis/app.c JSON passed to app_send needs to be released. * res/stasis_message.c: objects leak if vector append fails. Change-Id: I8dd5385b9f50a5cadf2b1d16efecffd6ddb4db4a 2017-11-07 06:56 +0000 [02329b9a34] Richard Mudgett * res_pjproject.c: Fix ast_strdup() alloc failure. Change-Id: I74688038e7afe3a279359cce53aadb28ade51ead 2017-11-05 22:06 +0000 [a36d8cc533] Aaron An * res_pjsip: Avoid crash when contact uri is empty string Asterisk will crash if contact uri is invalid, so contact_apply_handler should check if the uri is NULL or empty. ASTERISK-27393 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: Ia0309bdc6b697c73c9c736e1caec910b77ca69f5 2017-11-06 17:55 +0000 [7ef38d399a] Corey Farrell * res_pjsip_outbound_registration: Fix leak on vector add failure. Change-Id: I774b88b3c9da41edd4dc8d78f095481f52f2bd46 2017-11-06 17:48 +0000 [8684219f79] Corey Farrell * res_pjsip_exten_state: Check for vector append failure. Release reference to publisher if we fail to add it to the vector. Change-Id: I64dff3f481b67b9884f37cadba7a5ccf23d084f3 2017-11-06 17:44 +0000 [f899368cd6] Corey Farrell * res_pjsip_config_wizard: Fix leaks and add check for malloc failure. wizard_apply_handler(): - Free host if we fail to add it to the vector. wizard_mapped_observer(): - Check for otw allocation failure. - Free otw if we fail to add it to the vector. Change-Id: Ib5d3bcabbd9c24dd8a3c9cc692a794a5f60243ad 2017-11-06 17:38 +0000 [4016884ef3] Corey Farrell * res_stasis_playback: Check for failure to append vector. Free resources and return error if we fail to append the vector in stasis_app_control_play_uri. Change-Id: I22c4a90dd859b253f2850c6511de48b25609422b 2017-11-06 17:33 +0000 [24b9751aaa] Corey Farrell * test_sorcery_memory_cache_thrash: Handle error from vector append. Cleanup resources when we fail to append the vector and report test failure. Change-Id: I6eb41586fd11dee8c0dfe35e91cb465a4cab7298 2017-11-06 17:28 +0000 [29205e7adc] Corey Farrell * res_pjsip: Fix leak on error in ast_sip_auth_vector_init. Change-Id: Ib0fc7a18f3135ca8990c3984c9e15f6d26e556e8 2017-11-06 17:17 +0000 [70fcc043bb] Corey Farrell * res_pjproject: Handle error from adding to the buildopts vector. Change-Id: I076c7bd207c7989a23005395ce1735392657be65 2017-11-06 17:11 +0000 [5247ba4b88] Corey Farrell * res_ari_events: Fix use after free / double-free of JSON message. When stasis_app_message_handler needs to queue a message for a later connection it needs to bump the message reference so it doesn't get freed when the caller releases it's reference. Change-Id: I82696df8fe723b3365c15c3f7089501da8daa892 2017-11-06 15:33 +0000 [adb4fdcb7b] Corey Farrell * stasis: Release object if vector append fails. Change-Id: I3e5cc669169aab6175ddfaf7486edeaeb4fdcfb1 2017-11-06 15:20 +0000 [2f4f216026] Corey Farrell * RTP Engine: Deal with errors returned from AST_VECTOR_REPLACE. Check for errors from AST_VECTOR_REPLACE and clean memory if needed. Change-Id: I124d15cc1d645f85a72a1279f623c1993b304b0b 2017-11-06 15:16 +0000 [5762f72425] Corey Farrell * PBX: Handle errors from AST_VECTOR_APPEND. This resolves potentials leaks on AST_VECTOR_APPEND error in: * ast_context_add_include2 * ast_context_add_switch2 * ast_context_add_ignorepat2 Change-Id: Ib60e95c4f622fa3b832d87227c0523a695d736b6 2017-11-06 15:10 +0000 [714026b32e] Corey Farrell * Messaging: Report error on failure to register tech or handler. Message tech and handler registrations use a vector which could fail to expand. If it does log and error and return error. Change-Id: I593a8de81a07fb0452e9b0efd5d4018b77bca6f4 2017-11-06 15:07 +0000 [e43c8af77c] Corey Farrell * format_cap: Fix leak on AST_VECTOR_APPEND error. format_cap_framed_init can fail on AST_VECTOR_APPEND. This should report failure to the caller and clean the newly allocated frame. Change-Id: Ica0661235bf09497bf23d844ceb01f21b41a55b0 2017-11-06 14:23 +0000 [64bcb65a78] Corey Farrell * stasis: Remove silly use of RAII_VAR in stasis_forward_all. Change-Id: I46de4c968d40144d5b049966304ff66c1469fb65 2017-11-06 12:51 +0000 [b7e1034009] Corey Farrell * CLI: Remove unused internal command. The internal CLI command "_command complete" was last used by Asterisk 0.2.0. Since then we've been using "_command nummatches" and "_command matchesarray". Change-Id: I682fe1e21a24a3bb5bd04146e639f1c5866bcfce 2017-11-03 18:08 +0000 [923424019b] Richard Mudgett * stasis_bridges.c: Fix off-nominal json memory leaks. Change-Id: Ib1181a36b317c86bff1ef2e44a17a0b1c73cfdc8 2017-11-03 17:43 +0000 [f81970d3fc] Richard Mudgett * stasis_channels.c: Remove a very silly RAII_VAR(). Change-Id: I28b458b3c1a442c4ef0be7b4986a95ea4149e14f 2017-11-06 10:29 +0000 [36fedea8c1] Joshua Colp * res_pjsip_pubsub: Ensure remote URI contains URI only. This change makes it so that any user of the pubsub API that requests the remote URI receives only the URI. Previously the entire string was returned, which could contain a display name. ASTERISK-27290 Change-Id: If1d0cd6630f0a264856d31d2a67933109187a017 2017-11-03 16:14 +0000 [9771f089f5] Richard Mudgett * stasis/app.c: Optimize stasis_app_get_debug_by_name() * Eliminate RAII_VAR() * Short circuit application name lookup if global debug enabled. Change-Id: I5f78b7bd6ca7fd2c3b07cbbe036c6a93b4681123 2017-11-02 18:40 +0000 [ee08f10d06] Richard Mudgett * Fix ast_(v)asprintf() malloc failure usage conditions. When (v)asprintf() fails, the state of the allocated buffer is undefined. The library had better not leave an allocated buffer as a result or no one will know to free it. The most likely way it can return failure is for an allocation failure. If the printf conversion fails then you actually have a threading problem which is much worse because another thread modified the parameter values. * Made __ast_asprintf()/__ast_vasprintf() set the returned buffer to NULL on failure. That is much more useful than either an uninitialized pointer or a pointer that has already been freed. Many uses won't have to check for failure to ensure that the buffer won't be double freed or prevent an attempt to free an uninitialized pointer. * stasis.c: Fixed memory leak in multi_object_blob_to_ami() allocated by ast_asprintf(). * ari/resource_bridges.c:ari_bridges_play_helper(): Remove assignment to the wrong thing which is now not needed even if assigning to the right thing. Change-Id: Ib5252fb8850ecf0f78ed0ee2ca0796bda7e91c23 2017-11-06 08:05 +0000 [ca4e6b568f] Sean Bright * res_pjsip: Ignore empty TLS configuration When using realtime, fields that are not explicitly set by an administrator are still presented to sorcery as empty strings. Handle this case explicitly. In this particular case, if any of these fields are required for TLS support, their existence should be validated in the 'apply' handler once we have a complete transport definition. ASTERISK-27032 #close Reported by: seanchann.zhou Change-Id: Ie3b5fb421977ccdb33e415d4ec52c3fd192601b7 2017-09-29 09:50 +0000 [04d3785a79] Sean Bright * dtls: Add support for ephemeral DTLS certificates. This mimics the behavior of Chrome and Firefox and creates an ephemeral X.509 certificate for each DTLS session. Currently, the only supported key type is ECDSA because of its faster generation time, but other key types can be added in the future as necessary. ASTERISK-27395 Change-Id: I5122e5f4b83c6320cc17407a187fcf491daf30b4 2017-11-06 03:21 +0000 [4013bfa52b] Corey Farrell * configure: Add autoconf check for libopusfile. This check is being added to make it easier for end-users of third party open source Opus modules. This was removed by ASTERISK-26426 but only the module needed to be removed. Change-Id: I62b9cd0c4fa8a77596ab0e042948a643a1152677 2017-11-06 03:18 +0000 [19332e6968] Alexander Traud * tcptls: Print notice when TLS is enabled but not configured. Asterisk can be compiled without a SSL/TLS library, without the Development Headers of OpenSSL. However, if TLS (SIP) or Secure-WebSockets (WebRTC) was enabled in a configuration file, Asterisk did not notice the user. Asterisk failed silently, only the corresponding TCP ports were not open. ASTERISK-27394 Reported-by: mossley74 Change-Id: Ib8b7539a5b2af8154c22e5f7a40fc68f95d95b93 2017-11-04 06:05 +0000 [2ebea5aa03] Alexander Traud * install_prereq: Checkout of libSRTP 2.x. Since Asterisk 13.17, libSRTP 2.x is supported. Therefore, its latest version is installed again via the script install_prereq. ASTERISK-27356 Change-Id: I13125839a79052356469e41edacbebff0a937d39 2017-11-01 17:47 +0000 [79ddcdbc70] Richard Mudgett * Stasis/ARI: Fix off-nominal path json memory leaks. Change-Id: Id569c624c426e3b22a99936473c730592d8b83fb 2017-11-02 11:38 +0000 [229790ea3d] Richard Mudgett * AOC: Fix AOC-S json memory leak. Change-Id: I3a1d40a41a8a7d00fa4a187de6a343a79155d3ef 2017-11-01 18:04 +0000 [de4a4796d0] Richard Mudgett * res_stasis_device_state.c: Optimize stasis_app_device_states_to_json() * Eliminate RAII_VAR() * Replace looped alloca with a char[] since that is how it is used anyway. Change-Id: Ia27e64a884afa0f50b9ffdb1cf23da6bfa51ffdf 2017-11-01 18:58 +0000 [103b05bb4b] Richard Mudgett * res_stasis_mailbox.c: Fix leak of mailbox container. Change-Id: I7d33c1635713047e7d1597c9d882f7dc006d94b4 2017-11-03 10:35 +0000 [290bad22c9] Corey Farrell * Build System: Fix build failure caused by recent CLI improvements. We use the editline library to help with filename completion in our CLI interface. Some systems failed to find the header when included from loader.c. This is fixed by setting the proper CFLAGS for the build of loader.o. ASTERISK-27378 Change-Id: Ib7fd496f1d7ed48141a2eadd5dd61cab2f2308be 2017-11-01 11:12 +0000 [f8e0f9be22] Ben Ford * res_pjsip: Add to list of valid characters for from_user. Fixes a regression where some characters were unable to be used in the from_user field of an endpoint. Additionally, the backtick was removed from the list of valid characters, since it is not valid, and it was replaced with a single quote, which is a valid character. ASTERISK-27387 Change-Id: Id80c10a644508365c87b3182e99ea49da11b0281 2017-11-02 05:34 +0000 [8701479386] Joshua Colp * core: Don't attempt to write to a stream that does not exist. When a frame is provided to ast_write ensure that a multistream capable channel has a stream for it before attempting to give it to the channel driver. In some cases (such as a deferred SDP negotiation) the stream may not yet exist. ASTERISK-27364 Change-Id: Icf84ca982a67cdd6e9a71851eb7eb1bd0e865276 2017-11-02 01:57 +0000 [606ae3484a] Corey Farrell * Add missing menuselect dependencies. This adds menuselect dependencies for modules that use symbols of other modules. ASTERISK-27390 Change-Id: Ia2d2849f5b87a72af7324a82edc3f283eafb5385 2017-11-01 22:57 +0000 [b616b7e4a9] Corey Farrell * res/ari/resource_bridges.h: Update from 'make ari-stubs'. A comment was updated when I ran 'make ari-stubs'. Change-Id: Ib5154ae3ad72aff53374c28ead540fe349c42175 2017-11-01 19:46 +0000 [79f111e1f3] Corey Farrell * Prevent unload of modules which implement an Optional API. Once an Optional API module is loaded it should stay loaded. Unloading an optional API module runs the risk of a crash if something else is using it. This patch causes all optional API providers to tell the module loader not to unload except at shutdown. ASTERISK-27389 Change-Id: Ia07786fe655681aec49cc8d3d96e06483b11f5e6 2017-10-30 17:30 +0000 [b9f457eac0] Corey Farrell * Modules: Additional improvements to CLI completion. Replace 'needsreload' argument with a 'type' argument to specify which type of modules you want completion. This provides more accurate CLI completion for load and unload commands. * 'module unload' now excludes modules that have active references or are not running. * 'module load' now excludes modules that are already running. * 'core set debug [atleast] [module]' shows running modules only. ASTERISK-27378 Change-Id: Iea3e00054461484196c46f688f02635cc886bad1 2017-11-01 13:58 +0000 [1bfd1cf640] Sean Bright * pjsip_message_filter: Only do interface lookup for wildcard addresses. Change-Id: Ie083987e69dc43b6861671c218cacacc11b2072f 2017-10-31 15:08 +0000 [1e70011710] Kevin Harwell * features: Bridge application's BRIDGERESULT not appropriately set The dialplan application "Bridge" was not setting the BRIDGERESULT to failure when a failure did occur. Even worse if it did fail to join the bridge it would still report success. This patch now sets the BRIDGERESULT variable to an appropriate value for a given condition state. Also, removed the value INCOMPATIBLE as a valid result type since it is no longer used. ASTERISK-27369 #close Change-Id: I22588e7125a765edf35cff28c98ca143e9927554 2017-10-31 13:18 +0000 [f2175c5a39] Corey Farrell * res_ari_channels: Fix reference leak in channel_state_invalid. channel_state_invalid leaked a reference to the channel snapshot any time it was aquired. ASTERISK-27067 #close Change-Id: I8c653f00416b39978513c5605c4be0f03b1df29a 2017-10-25 17:31 +0000 [4c535f5c30] Joshua Colp * core / pjsip: Add support for grouping streams together. In WebRTC streams (or media tracks in their world) can be grouped together using the mslabel. This informs the browser that each should be synchronized with each other. This change extends the stream API so this information can be stored with streams. The PJSIP support has been extended to use the mslabel to determine grouped streams and store this association on the streams. Finally when creating the SDP the group information is used to cause each media stream to use the same mslabel. ASTERISK-27379 Change-Id: Id6299aa031efe46254edbdc7973c534d54d641ad 2017-10-30 09:20 +0000 [022de525be] Tzafrir Cohen * ast_coredumper: allow setting asterisk binary explicitly Adds an extra option, --asterisk-bin= to ast_coredumper. If provided, the binary given to gdb will be the parameter, rather than asterisk from the PATH. ASTERISK-27380 #close Change-Id: I25f5b91eb75059b0fb2f142e468c26b283b0a9f3 2017-10-25 01:10 +0000 [3052b56423] Florian Floimair * alembic: Add bundle column in ps_endpoints table The ps_endpoints table was missing the bundle column introduced with the bundle feature in commit 065c3005ad92. ASTERISK-27374 #close Change-Id: Ic900f4f2c20f64b99ea898d50f5c0a7117472d46 2017-10-30 00:32 +0000 [e82b921c35] Corey Farrell * Modules: Fix issues with CLI completion. * Stop using ast_module_helper to check if a module is loaded, use ast_module_check instead (app_confbridge and app_meetme). * Stop ast_module_helper from listing reload classes when needsreload was not requested. ASTERISK-27378 Change-Id: Iaed8c1e4fcbeb242921dbac7929a0fe75ff4b239 2017-10-28 19:18 +0000 [9bad4c74cc] Igor Goncharovskiy * app_agent_spool: Fix typo in dtmf features usage desctiption Fix typo, that specify usage wrong option 'dtmf-features' for CHANNEL() function instead of correct 'dtmf_features' ASTERISK-27377 #close Change-Id: I15ecc829c1035b359584673e12cdb5c9291ac930 2017-10-27 13:41 +0000 [0991874430] Corey Farrell * res_pjsip_pubsub: Resolve potential crash in allocate_subscription. When allocate_subscription fails to initialize fields of the new sub it calls destroy_subscription. Change-Id: I5b79c915ec216dc00c13c1e4172137864a4bec85 2017-10-26 12:18 +0000 [26607e4e3b] Richard Mudgett * app_voicemail.c: Fix compiler warning with IMAP build. ASTERISK-27181 Change-Id: Ic4468b49860bd7f67e922baf4c9e96828c184d17 2017-10-25 14:38 +0000 [2ca3dbb197] Richard Mudgett * codec.c: Defensively check the returned samples. Earlier versions of the codec_opus samples_count callback can return negative error values on undecodable frames. This resulted in a divide by zero exception. * Added a defensive check in ast_codec_samples_count() for a "negative" samples count return value. Log the event and set the count to zero. ASTERISK-27194 Change-Id: Icf69350307ecbbc80a3d74de46af9bd80ea17819 2017-10-24 10:33 +0000 [9e1fbab382] Joshua Colp * res_pjsip: Add 'ip' as a valid option to 'identify_by' on endpoint. When the identify_by option on an endpoint is set to ip it will only be identified using the res_pjsip_endpoint_identifier_ip module. This ensures that it is not mistakenly matched using the username of the From header. To ensure behavior has not changed the default has been changed to "username,ip" for the identify_by option. ASTERISK-27206 Change-Id: I2170b86a7f7e221b4f00bf14aa1ef1ac5b050bbd 2017-10-25 12:26 +0000 [4aec70690d] George Joseph * ast_coredumper: Add gzipping of binaries and display of signal info The --tarball-coredump option now creates a gzipped tarball of coredumps processed, their results txt files and copies of /etc/os-release, /usr/sbin/asterisk, /usr/lib(64)/libasterisk* and /usr/lib(64)/asterisk as those files are needed to properly examine the coredump. The file will be named /tmp/asterisk..coredumps.tar.gz or /tmp/asterisk-.coredumps.tar.gz if --tarball-uniqueid was specified. Added dumps of *_siginfo to the top of the txt files so you can tell what signal was invoked. Change-Id: Ib9ee6d83592d4b1bc90cb3419a05376a88d1ded9 2017-10-25 09:23 +0000 [3821be1c68] Ben Ford * http.c: Fix http header send content. Currently ast_http_send barricades a portion of the content that needs to be sent in order to establish a connection for things like the ARI client. The conditional and contents have been changed to ensure that everything that needs to be sent, will be sent. ASTERISK-27372 Change-Id: I8816d2d8f80f4fefc6dcae4b5fdfc97f1e46496d 2017-03-30 09:51 +0000 [5553adb8ba] Corey Farrell * Build System: Fix --disable-xmldoc option. The configure option to disable XML documentation does not currently work. This patch makes it effective, but also causes an ABI change by removing the ast_xmldoc_* symbols. Disabling xmldoc also prevents docs from being automatically generated, but they can still be manually generated with 'make doc/core-en_US.xml'. ASTERISK-26639 Change-Id: Ifac562340c09f80c83e0203de098fcac93bf8c44 2017-10-23 00:55 +0000 [569e9a8391] Corey Farrell * Single API for ast_store_lock_info and ast_remove_lock_info. This makes the 'bt' parameter unconditional for ast_store_lock_info and ast_remove_lock_info. The 'bt' parameter is unused when HAVE_BKTR is undefined. Change-Id: Ieced0e920928b735a39c3b5952b806c473d67453 2017-10-24 09:43 +0000 [6474de5f72] Corey Farrell * chan_sip: Fix SUBSCRIBE with missing "Expires" header. When chan_sip receives a SUBSCRIBE request with no "Expires" header it processes the request as an unsubscribe. This is incorrect, per RFC3264 when the "Expires" header is missing a default expiry should be used. ASTERISK-18140 Change-Id: Ibf6dcd4fdd07a32c2bc38be1dd557981f08188b5 2017-10-24 07:24 +0000 [7126520b3e] Alexander Traud * lpc10: Avoid compiler warning when DONT_OPTIMIZE/COMPILE_DOUBLE. ASTERISK-23556 Reported by: Marcello Ceschia Change-Id: Ic27e88e0336a0d83877dc857938659dc5560b93c 2017-10-07 12:14 +0000 [841ac3ded6] Corey Farrell * hashtab: Use ast_free. A few places in hashtab use free instead of ast_free, remove declaration of ASTMM_LIBC from hashtab.c as it's no longer needed. Change-Id: I2ff089bad71640c03c3ce97f1b00fc962ef79427 2017-10-23 01:02 +0000 [fb585cf185] Corey Farrell * Bundled pjproject: Enable pj_assert when dev-mode is enabled. ASTERISK-27359 Change-Id: Ib01fb6c01f9bb87129374a51cb9318c474147517 2017-10-23 13:44 +0000 [ee21076151] Corey Farrell * main/Makefile: Remove rule for non-existant testexpr2. Change-Id: Ibb3e47f27a395d74d8c5263db015b05434f5969b 2017-10-23 12:42 +0000 [a9e9608982] Corey Farrell * test_config: Fix failure and segfault when config_hook is run twice. On second run the config_hook test was unexpectedly failing to load test_config.conf because it was still unmodified since the last load. This is fixed by not passing CONFIG_FLAG_FILEUNCHANGED for the initial loads, only using it when we are tested that a reload of unmodified files do not initiate the hook. ASTERISK-25960 Change-Id: Ifd679509a23ed163e5cc647490bf7df4ae3cd856 2017-10-23 12:23 +0000 [6f0431798e] George Joseph * res_pjsip_sdp_rtp: Fix setting of address type for rtp_ipv6 create_outgoing_sdp_stream was setting "addr_type = STR_IP6" only when an ipv6 media_address was specified on the endpoint. If rtp_ipv6 was set and ast_sip_get_host_ip_string returned an ipv6 address, we were leaving the addr_type set at the default of STR_IP4. This caused the address type to be set incorrectly on the "o" and "c" SDP attributes even though the address was set correctly. Some clients don't like the mismatch. * Removed the test for endpoint/media_address and now check all addresses for ipv6. ASTERISK-27198 Reported by: Martin Cisárik Change-Id: I5214fc31b728117842243807e7927a319cf77592 2017-10-23 07:53 +0000 [488f98310f] Richard Mudgett * app_agent_pool.c: Fix online documentation typo. Change-Id: Ib0bc95fd0ec288c78c313823254d7a84ebfc4429 2017-10-22 17:32 +0000 [252353e0a9] Joshua Colp * res_xmpp: Ensure the connection filter is available. Users of the API that res_xmpp provides expect that a filter be available on the client at all times. When OAuth authentication support was added this requirement was not maintained. This change merely moves the OAuth authentication to after the filter is created, ensuring users of res_xmpp can add things to the filter as needed. ASTERISK-27346 Change-Id: I4ac474afe220e833288ff574e32e2b9a23394886 2017-10-21 03:44 +0000 [840e08716b] Alexander Traud * chan_sip: Crypto attribute not last but first on SDP media level. This matches the behavior of the other SIP channel driver, chan_pjsip. ASTERISK-27365 Change-Id: I8f23a51290a58b75816da2999ed1965441dfc5d6 2017-10-17 10:53 +0000 [e41561fc2a] Richard Mudgett * res_pjproject.c: Upgrade bundled PJPROJECT to 2.7 Update patches included in bundled PJPROJECT for the new version. ASTERISK-27355 Change-Id: I9ac5dbbffaadca25ad24fac8b9ab615e5ace6083 2017-10-16 16:46 +0000 [4559cd0e28] Nir Simionovich * This patch adds a beanstalk CDR backend. Beanstalkd is a simple to use job queue. It provides a means to create multiple job queues called "tubes". Each tube can store multiple jobs, with varying priorities with the queue. Queue processing is available via a simple TCP socket or via well defined libraries, avaialble at https://github.com/kr/beanstalkd/wiki/client-libraries This module is based upon the beanstalk-client library, available for download at: https://github.com/deepfryed/beanstalk-client Change-Id: I5fe4089a34ab3b39230786d9bbfddafa56715f48 2017-10-18 13:41 +0000 [4760b2445c] Corey Farrell * res_pjsip_pubsub: Prevent unload except during shutdown. Prevent unload of the module as certain pjsip initialization functions cannot be reversed. This required a reorder of the module_load so that the non-reversable pjsip functions are not called until all potential errors have been ruled out. ASTERISK-24483 Change-Id: Iee900f20bdd6ee1bfe23efdec0d87765eadce8a7 2017-10-18 13:37 +0000 [449ee66a11] Corey Farrell * res_pjsip_refer: Prevent unload except during shutdown. Prevent unload of the module as certain pjsip initialization functions cannot be reversed. ASTERISK-24483 Change-Id: I94597ec8b8491f5af9c57bf66dbc3b078fe2d49d 2017-10-18 12:04 +0000 [c9e19b31f5] Corey Farrell * chan_sip: Fix output of 'sip set debug off'. When sip.conf contains 'sipdebug=yes' it is impossible to disable it using CLI 'sip set debug off'. This corrects the output of that CLI command to instruct the user to turn sipdebug off in the configuration file. ASTERISK-23462 #close Change-Id: I1cceade9caa9578e1b060feb832e3495ef5ad318 2017-10-16 10:53 +0000 [955a891a84] Corey Farrell * app_macro deprecation. * Mark the module deprecated. * Disable the module by default. * Produce a warning the first time a macro is used. * Note deprecation related options in app_dial and app_queue. ASTERISK-27350 Change-Id: I560ea043bacdbc5534a17d97854273d52c2f1bdc 2017-10-18 03:30 +0000 [95b45d1c46] Alexander Traud * res_srtp: Add support for libsrtp2 with AES-GCM. Beside allowing AES-GCM again, this adds AES-192 again. ASTERISK-27356 Change-Id: Ia97a435faf26300335d9552fa676b5d17e5f7233 2017-10-14 14:41 +0000 [5d8c517960] Joshua Colp * bridge_softmix: Reduce topology cloning and improve renegotiation. As channels join and leave an SFU the bridge_softmix module needs to renegotiate to add and remove their streams from the other participants. Previously this was done by constructing the ideal stream topology every time but in the case of leave this was incomplete. This change makes it so bridge_softmix keeps an ideal stream topology for each channel and uses it when making changes. This ensures that when we request a renegotiation we are always certain that we are aiming for the best stream topology possible. In the case of a channel leaving this ensures that we try to have an existing participant fill their place if a participant has a fixed limit on the maximum number of video streams they allow. ASTERISK-27354 Change-Id: I58070f421ddeadd2844a33b869b052630cf2e514 2017-10-06 15:55 +0000 [73164d0d7f] Richard Mudgett * cdr.c: Rename the Party A CDR container. * Rename the Party A CDR container from active_cdrs_by_channel to active_cdrs_master. * Renamed the support functions associated with active_cdrs_master appropriately. ASTERISK-27335 Change-Id: I6104bb3edc3a0b7243ce502e45e8832b0cff14f7 2017-10-02 17:42 +0000 [fe1120cf88] Richard Mudgett * cdr.c: Add container to key off of Party B channel names. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is because of a n*m loop used when processing Party B information. * Added a new CDR container that is keyed to Party B so we don't need such a large loop when processing Party B information. NOTE: To reduce the size of the patch I deferred to another patch the renaming of the Party A active_cdrs_by_channel container to active_cdrs_master and renaming the container's hash and cmp functions appropriately. ASTERISK-27335 Change-Id: I0bf66e8868f8adaa4b5dcf9e682e34951c350249 2017-10-11 06:04 +0000 [da24d425eb] Torrey Searle * contrib/script/sip_to_pjsip: implement 'all' for allow/disallow when 'all' is specified in an allow or disallow section, it should erase all values from the inverse section in the default config. E.G. allow=all should erase any deny values from default config & vice-versa ASTERISK-27333 #close Change-Id: I99219478fb98f08751d769daaee0b7795118a5a6 2017-10-14 04:11 +0000 [c4f40b778a] Guido Falsi * chan_dahdi: wrap include file which is not present on BSD systems in #ifdef The sys/sysmacros.h include file does not exist in BSD systems and is not required to build this module there. Since an "#if defined(__NetBSD__) || defined(__FreeBSD__)" section already exist I moved that include line inside it's #else branch. ASTERISK-27343 #close Change-Id: Ibfb64f4e9a0ce8b6eda7a7695cfe57916f175dc1 2017-10-13 09:43 +0000 [8f65d91dfd] Alexander Traud * res_pjsip_session: Rewrite o= with external_media_address. PJSIP allows a domain name as external_media_address. This allows chan_pjsip to be used behind a NAT with changing IP addresses. The IP address of that domain is resolved to the c= line already. This change sets also the o= line to that domain. ASTERISK-27341 #close Change-Id: I690163b6e762042ec38b3995aa5c9bea909d8ec4 2017-10-12 12:03 +0000 [7d51a79beb] Joshua Colp * bridge_simple: Improve renegotiation success rate. When making channels compatible the bridge_simple module will renegotiate one to better match the other. Some endpoints incorrectly terminate the call if this process fails. To better handle this scenario the audio streams present on the new requested topology will include any existing negotiated formats that happen to exist on the first valid audio stream. This ensures formats are persent that are known to be acceptable to the remote endpoint. ASTERISK-27259 Change-Id: I8fc0cc03e8bcfd0be8302f13b9f32d8268977f43 2017-10-13 08:51 +0000 [ee65d5ac7c] Corey Farrell * ast_bt_get_symbols: Prevent double-free. It's possible for bfdobj to be created but syms not created. If syms was not allocated in the current loop iteration but was allocated in the previous iteration it would crash. ASTERISK-27340 Change-Id: I5b110c609f6dfe91339f782a99a431bca5837363 2017-10-13 08:12 +0000 [44d9446eb5] Alexander Traud * tcptls: NULL-check the parameter of ast_ssl_teardown before accessing it. This avoids a crash on stopping a chan_sip which failed to start its TLS server. ASTERISK-27339 #close Change-Id: I327fc70db68eaaca5b50a15c7fd687fde79263d5 2017-09-29 14:26 +0000 [f369be21a8] Richard Mudgett * cdr.c: Eliminated many calls to ao2_global_obj_ref(). The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were getting the global config to determine if we needed to log a debugging message. * Many calls to ao2_global_obj_ref() were just so we could determine if debug mode is enabled. Made a global flag to check instead. * Eliminated many RAII_VAR() usages associated with the remaining ao2_global_obj_ref() calls. * Added missing NULL checks for the returned ao2_global_obj_ref() value. ASTERISK-27335 Change-Id: Iceaad93172862f610cad0188956634187bfcc7cd 2017-10-06 13:45 +0000 [2eea087401] Richard Mudgett * cdr.c: Defer getting ao2_global_obj_ref() until needed. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were getting the global config even if we didn't need it. * Most uses of the global config were only needed on off nominal code paths so it makes sense to not get it until absolutely needed. ASTERISK-27335 Change-Id: I00c63b7ec233e5bfffd5d976f05568613d3c2365 2017-10-05 18:08 +0000 [7c7a917874] Richard Mudgett * cdr.c: Set stringfields only if they are different. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were repeatedly setting string fields to potentially the same string in base_process_party_a(). Setting a string field involves allocating room for the new string out of a memory pool which may have to allocate even more memory. * Check to see if the string field is already set to the desired string. ASTERISK-27335 Change-Id: I3ccb7e23f1488417e08cafe477755033eed65a7c 2017-10-05 18:03 +0000 [c80c8f2ab9] Richard Mudgett * cdr.c: Fix setting dnid, callingsubaddr, and calledsubaddr The string comparisons for setting these CDR variables was inverted. We were repeatedly setting these CDR variables only if the channel snapshots had the same value. ASTERISK-27335 Change-Id: I9482073524411e7ea6c03805b16de200cb1669ea 2017-08-25 08:19 +0000 [21c0283b78] Thomas Sevestre * features, manager : Add CancelAtxfer AMI action Add action to cancel feature attended transfer with AMI interface ASTERISK-27215 #close Change-Id: Iab8a81362b5a1757e2608f70b014ef863200cb42 2017-10-06 04:55 +0000 [6576e4320a] Daniel Tryba * res_pjsip_session: Prevent user=phone being added to anonimized URIs. Move ast_sip_add_usereqphone to be called after anonymization of URIs, to prevent the user_eq_phone adding "user=phone" to URIs containing a username that is not a phonenumber (RFC3261 19.1.1). An extra call to ast_sip_add_usereqphone on the saved version before anonymization is added to add user=phone" to the PAI. ASTERISK-27047 #close Change-Id: Ie5644bc66341b86dc08b1f7442210de2e6acdec6 2017-10-06 05:14 +0000 [a56316423f] Daniel Tryba * res_pjsip: Prevent "user=phone" being added multiple times to header ast_sip_add_usereqphone adds "user=phone" to the header every time is is called without checking whether the param already exists. Preventing this by searching to string representation of header for "user=phone". ASTERISK-26988 #close Change-Id: Ib84383b07254de357dc6a98d91fc1d2c2c3719e6 2017-10-05 18:12 +0000 [e5b9eb0460] Richard Mudgett * cdr.c: Defer misc checks. Try to defer some checks until needed in case there is an early exit. Change-Id: Ibc6b34c38a4f60ad4f9b67984b7d070a07257064 2017-10-06 20:48 +0000 [e8bde6916a] Seán C McCord * ari/bridge: Add mute, dtmf suppression controls Add bridge_features structure to bridge creation. Specifically, this implements mute and DTMF suppression, but others should be able to be easily added to the same structure. ASTERISK-27322 #close Reported by: Darren Sessions Sponsored by: AVOXI Change-Id: Id4002adfb65c9a8027ee9e1a5f477e0f01cf9d61 2017-10-11 07:03 +0000 [ab4d36533c] George Joseph * chan_vpb: Fix a gcc 7 out-of-bounds complaint chan_vpb was trying to use sizeof(*p->play_dtmf), where p->play_dtmf is defined as char[16], to get the length of the array but since p->play_dtmf is an actual array, sizeof(*p->play_dtmf) returns the size of the first array element, which is 1. gcc7 validly complains because the context in which it's used could cause an out-of-bounds condition. Change-Id: If9c4bfdb6b02fa72d39e0c09bf88900663c000ba 2017-10-06 02:39 +0000 [be7da57546] Nathan Bruning * app_queue.c: clear moh field in init_queue ASTERISK-27301 #close Change-Id: Ic31361f34e2de3b6470e68fc37205a7711082eba 2017-10-09 21:00 +0000 [b8dadccbe1] Corey Farrell * sorcery: Use ao2_weakproxy to hold list of instances. * Store weak proxy objects in instances container. * Remove special unreference function and replace with macro that calls ao2_cleanup. * Add REF_DEBUG information to ast_sorcery_open. Change-Id: I5a150a4e13cee319d46b5a4654f95a4623a978f8 2017-10-09 21:55 +0000 [7774623804] Corey Farrell * named_locks: Use ao2_weakproxy_find. Change-Id: I0ce8a1b7101b6caac6a19f83a89f00eaba1e9d9c 2017-10-09 17:51 +0000 [b058f8673a] Corey Farrell * astobj2: Add ao2_weakproxy_find function. This function finds a weak proxy in an ao2_container and returns the real object associated with it. Change-Id: I9da822049747275f5961b5c0a7f14e87157d65d8 2017-10-10 15:09 +0000 [fd3101e8ad] Corey Farrell * astobj2: Run weakproxy callbacks outside of lock. Copy the list of weakproxy callbacks to temporary memory so they can be run without holding the weakproxy lock. Change-Id: Ib167622a8a0f873fd73938f7611b2a5914308047 2017-10-10 12:01 +0000 [3ad7d2f36c] Sean Bright * app_originate: Set ORIGINATE_STATUS correctly on failure We were ignoring the return value from ast_pbx_outgoing_exten() and ast_pbx_outgoing_app() which could fail before setting the reason code. This resulted in failures being reported as success. ASTERISK-25266 #close Reported by: Allen Ford Change-Id: Idf16237b7e41b527d2c69c865829128686beeb3b 2017-10-03 15:16 +0000 [b1d9fc87bc] Torrey Searle * contrib/thirdparty/sip_to_pjsip: add additional flag mappings add mappings for udptl redundancy, rtptimeout, and debug flags Change-Id: Ie73cf5c83c05dee01eb9624ede76c1a30225d73a 2017-10-02 16:46 +0000 [b0408d05c0] Richard Mudgett * cdr.c: Eliminated simple RAII_VAR usages. Change-Id: I150505db307249a962987e7b941bdd369bb91f35 2017-10-10 09:49 +0000 [11cefdf621] Tzafrir Cohen * cdr_mysql: avoid releasing a config string Fixes a memory corruption issue after a reload of cdr_mysql. Issue was accidentally included in 747beb1ed159f89a3b58742e4257740b3d6d6bba . ASTERISK-27270 #close Change-Id: I90b6a9d18710c0f9009466370bd5f4bac5d5d12e 2017-10-10 07:42 +0000 [b228f5c5e6] Tzafrir Cohen * declare optional openssl dependencies in moduleinfo Declare optional openssl dependencies in: * res_rtp_asterisk.c * tcptls.c ASTERISK-27328 #close Change-Id: I2636f1c05b8104b4fe6f36cce0ebd9a98b9c78ab 2017-10-09 22:51 +0000 [fae09c6676] Corey Farrell * res_pjproject: Fix cleanup of buildopts vector. ASTERISK-27306 Change-Id: I3bed0edf3f55b1d4adcbabb25ec14f11dc766c72 2017-10-03 16:09 +0000 [fdf9aacca3] Richard Mudgett * cdr.c: Replace redundant check with an ast_assert() The only caller of cdr_object_fn_table.process_party_b() explicitly does the check before calling. Change-Id: Ib0c53cdf5048227842846e0df9d2c19117c45618 2017-10-02 17:41 +0000 [2e4b5fadbd] Richard Mudgett * cdr.c: Replace inlined code with ao2_t_replace() Change-Id: I9f424f5282ca7d833592f958d95f1b2bafb549b0 2017-09-29 12:07 +0000 [62980eedc3] Richard Mudgett * cdr.c: Use current ao2 flag names Change-Id: Ib59d7d2f2a4a822754628f2c48a308d6791a6e6e 2017-09-29 12:31 +0000 [e769846f11] Richard Mudgett * cdr.h: Fix doxygen comments. * Also some misc formatting in cdr.c. Change-Id: Ied89a28802a662c37c43326a1aafdce596e0df4a 2017-09-20 18:36 +0000 [fb19799b62] Richard Mudgett * res_pjsip_registrar.c: Update remove_existing AOR contact handling. When "rewrite_contact" is enabled, the "max_contacts" count option can block re-registrations because the source port from the endpoint can be random. When the re-registration is blocked, the endpoint may give up re-registering and require manual intervention. * The "remove_existing" option now allows a registration to succeed by displacing any existing contacts that now exceed the "max_contacts" count. Any removed contacts are the next to expire. The behaviour change is beneficial when "rewrite_contact" is enabled and "max_contacts" is greater than one. The removed contact is likely the old contact created by "rewrite_contact" that the device is refreshing. ASTERISK-27192 Change-Id: I64c107a10b70db1697d17136051ae6bf22b5314b 2017-10-09 08:15 +0000 [ad38a55a2d] Sean Bright * res_config_sqlite: Don't enable SQLite CDRs when running 'make samples' Change-Id: I65a5190b2732b2246d67472db70dd37db64ddad4 2017-10-08 14:05 +0000 [a0a1f95abf] David Hajek * res/res_ari.c Fix: Memory leaks in ARI when using Content-Type: application/json ASTERISK-27305 Reported by: David Hajek Tested by: David Hajek Change-Id: Ife3e289062e6cf7d0e7d342dbf79ed96feff441e 2017-10-08 09:11 +0000 [feeb0974eb] Alexander Traud * tcptls: Do not re-bind to wildcard on client creation. Since ASTERISK-26922, this issue affected only those chan_sip which were * enabled for dual-stack (bindaddr=::), and * enabled for TCP (tcpenable=yes) and/or TLS (tlsenable=yes), and * tried to register and/or invite a IPv4-only service, * via TCP and/or TLS. Now, ast_tcptls_client_create does not re-bind to [::] anymore. ASTERISK-27324 #close Change-Id: I4b242837bdeb1ec7130dc82505c6180a946fd9b5 2017-10-07 15:47 +0000 [eb224fea5e] Corey Farrell * res_pjsip_session: Fix format_cap leak. ASTERISK-27306 Change-Id: I2c8d3fc148f9f53715c958314e1146f9611741f3 2017-10-06 10:51 +0000 [f4798faacc] Matt Jordan * res_corosync: Fix linking issue with Corosync 2.x At some point in time in the history of Corosync (certainly within the 2.x branch), the corosync_cfg_state_track function was removed. Unfortunately, the cfg library is only linked if this function is present. Without the cfg library being linked to res_corosync, loading of res_corosync will fail. This patch makes it so that detecting corosync's core libraries, determined by the COROSYNC external library checks, links both the cpg and cfg libraries with res_corosync. Change-Id: I674e9e1c8fea11c3bf81154aaa7c1fd43f945465 2017-10-05 16:26 +0000 [a68a91f722] Corey Farrell * res_pjsip: Fix leak of persistent endpoint references. Do not manually call sip_endpoint_apply_handler from load_all_endpoints. This is not necessary and causes memory leaks. Additionally reinitialize persistent->aors when we reuse a persistent object with a new endpoint. ASTERISK-27306 Change-Id: I59bbfc8da8a14d5f4af8c5bb1e71f8592ae823eb 2017-10-05 17:59 +0000 [3bd00c4a7e] Corey Farrell * vector: multiple evaluation of elem in AST_VECTOR_ADD_SORTED. Use temporary variable to prevent multiple evaluations of elem argument. This resolves a memory leak in res_pjproject startup. ASTERISK-27317 #close Change-Id: Ib960d7f5576f9e1a3c478ecb48995582a574e06d 2017-10-05 15:54 +0000 [b35ac9e566] Corey Farrell * res_pjsip: Fix leak of fake_auth references. pjsip_distributor leaks references to fake_auth when the default realm has not changed. ASTERISK-27306 Change-Id: I3fcf103b3680ad2d1d4610dcd6738eeaebf4d202 2017-10-05 20:23 +0000 [0f3e725503] Corey Farrell * main/strings: Fix uninitialized value. ast_strings_match uses sscanf and checks for non-zero return to verify a token was parsed. This is incorrect as sscanf returns EOF (-1) for errors. ASTERISK-27318 #close Change-Id: Ifcece92605f58116eff24c5a0a3b0ee08b3c87b1 2017-10-05 19:55 +0000 [0b6be1b2d4] Corey Farrell * res_sdp_translator_pjmedia: Fix test unregistration. ASTERISK-27306 Change-Id: Ib3ed47167cb697ab7bd0a56cab589893f491651b 2017-10-02 07:48 +0000 [59b6e8467a] Daniel Tryba * res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy Currently privacy requests are only granted if the Privacy header value is exactly "id" (defined in RFC 3325). It ignores any other possible value (or a combination there of). This patch reverses the logic from testing for "id" to grant privacy, to testing for "none" and granting privacy for any other value. "none" must not be used in combination with any other value (RFC 3323 section 4.2). ASTERISK-27284 #close Change-Id: If438a21f31a962da32d7a33ff33bdeb1e776fe56 2017-10-04 10:59 +0000 [65399a5eda] Corey Farrell * res_pjsip: Add REF_DEBUG info to module references. This provides better information to REF_DEBUG log for troubleshooting when the system is unable to unload res_pjsip.so during shutdown due to module references. ASTERISK-27306 Change-Id: I63197ad33d1aebe60d12e0a6561718bdc54e4612 2017-10-04 10:46 +0000 [7d04544986] Corey Farrell * res_pjsip: Fix issues that prevented shutdown of modules. res_pjsip and res_pjsip_session had circular references, preventing both modules from shutting down. * Move session supplement registration to res_pjsip. * Use create internal functions for use by pjsip_message_filter.c. ASTERISK-27306 Change-Id: Ifbd5c19ec848010111afeab2436f9699da06ba6b 2017-09-28 02:56 +0000 [2301447a20] Benoît Dereck-Tricot * res_calendar_icalendar: Filter out occurrences superceded by another VEVENT When we are loading the calendars, we call libical's icalcomponent_foreach_recurrence method for each VEVENT component that we have in our calendar. That method has no knowledge concerning the existence of the other VEVENT components and will feed our callback with all ocurrences matching the requested time span. The occurrences generated by icalcomponent_foreach_recurrence while expanding a recurring VEVENT's RRULE and RDATE properties can be superceded by an other VEVENT sharing the same UID. I use an external iterator (in libical terminology) to avoid messing with the internal ones from the calling function, and search for VEVENTS which could supersede the current occurrence. The event which can invalidate this occurence needs to have: - the same UID as our recurrent component (comp) - a RECURRENCE-ID property, which represents the start time of this occurrence If one component is found, just clean and return. ASTERISK-27296 #close Reported by: Benoît Dereck-Tricot Change-Id: I8587ae3eaa765af7cb21eda3b6bf84e8a1c87af8 2017-09-28 17:37 +0000 [b2dbfe23ef] Richard Mudgett * app_queue.c: Fix announcements when announce-to-first-user not enabled. The previous patch for ASTERISK-27216 made it so you wouldn't get any position or periodic announcements unless you had announce-to-first-user enabled. The announce-to-first-user feature was added by ASTERISK_21782 as a result of the patch which introduced the redundant announcements that ASTERISK-27216 removes. * By noting that the makeannouncement variable is used to suppresses the first user announcement, we set its initial value to the announce-to-first-user enable setting. ASTERISK-27216 Change-Id: Ieaeb7dbea8ae7073086b775fbafe0625b000b10a 2017-09-21 14:43 +0000 [80097676e7] Richard Mudgett * heap.c: No need to calloc heap pointer array. Change-Id: I5ae2f316229f336eb90d99c7af7ed07a33097e68 2017-09-27 13:45 +0000 [d1de7948fe] George Joseph * logger: Bring back ability to turn debug on by source file Somewhere along the way we lost the ability to debug individual source files. For modules, this wasn't a big deal but all the source files in ./main are in the one "core" module so debugging individual core capabilities was almost impossible. * Added a test to DEBUG_ATLEAST that also checks __FILE__ instead of just module name. Any source file will work even if it's in a module subdirectory. Change-Id: Icc0af41837f3b1679dec7af21fa32cd1f7469f6e 2017-09-28 05:33 +0000 [f21408c866] Joshua Colp * res_stasis: Add 'video_sfu' as a requested bridge type. This change adds 'video_sfu' as a requested bridge type when creating a bridge. By specifying this a mixing type bridge is created that exchanges video in an SFU fashion. Change-Id: I2ada47cf5f3fc176518b647c0b4aa39d55339606 2017-09-27 11:16 +0000 [a6dc0527a2] Richard Mudgett * res_pjsip_outbound_publish.c: Fix misplaced parenthesis. The pjsip_publishc_init() call was referenced with a misplaced parentheses. As a result, outbound publication messages went out with an expiration of 1 second. ASTERISK-27298 Change-Id: I93622eabc8ee83e7a22e98c107f921284c605a08 2017-09-26 11:01 +0000 [61ea872233] George Joseph * pjsip_message_filter: Fix regression causing bad contact address The "res_pjsip: Filter out non SIP(S) requests" commit moved the filtering of messages to pjproject's PJSIP_MOD_PRIORITY_TRANSPORT_LAYER in order to filter out incoming bad uri schemes as early as possible. Since the change affected outgoing messages as well and the TRANSPORT layer is the last to be run on outgoing messages, we were overwriting the setting of external_signaling_address (which is set earlier by res_pjsip_nat) with an internal address. * pjsip_message_filter now registers itself as a pjproject module twice. Once in the TSX layer for the outgoing messages (as it was originally), then a second time in the TRANSPORT layer for the incoming messages to catch the invalid uri schemes. ASTERISK-27295 Reported by: Sean Bright Change-Id: I2c90190c43370f8a9d1c4693a19fd65840689c8c 2017-09-13 21:31 +0000 [9d65057cdf] Richard Mudgett * res_rtp_asterisk.c: Fix bridge_p2p_rtp_write() reentrancy potential. The bridge_p2p_rtp_write() has potential reentrancy problems. * Accessing the bridged RTP members must be done with the instance1 lock held. The DTMF and asymmetric codec checks must be split to be done with the correct RTP instance struct locked. i.e., They must be done when working on the appropriate side of the point to point bridge. * Forcing the RTP mark bit was referencing the wrong side of the point to point bridge. The set mark bit is used everywhere else to set the mark bit when sending not receiving. The patches for ASTERISK_26745 and ASTERISK_27158 did not take into account that not everything carried by RTP uses a codec. The telephony DTMF events are not exchanged with a codec. As a result when RFC2833/RFC4733 sent digits you would crash if "core set debug 1" is enabled, the DTMF digits would always get passed to the core even though the local native RTP bridge is active, and the DTMF digits would go out using the wrong SSRC id. * Add protection for non-format payload types like DTMF when updating the lastrxformat and lasttxformat. Also protect against non-format payload types when checking for asymmetric codecs. ASTERISK-27292 Change-Id: I6344ab7de21e26f84503c4d1fca1a41579364186 2017-09-26 10:55 +0000 [c9e972a26a] Sean Bright * res_rtp_asterisk: Trim trailing byte off of SDES packet This could have been fixed by subtracting 1 from the final value of 'len' but the way the packet was being constructed was confusing so I took the opportunity to (I think) make it more clear. We were sending 1 extra byte at the end of the SDES RTCP packet which caused Chrome to complain (in its debug log): Too little data (1 byte) remaining in buffer to parse RTCP header (4 bytes). We now send the correct number of bytes. Change-Id: I9dcf087cdaf97da0374ae0acb7d379746a71e81b 2017-09-25 13:00 +0000 [721947ebae] Sean Bright * webrtc: Allow 'webrtc' to be set on endpoints without dtls_ca_file If using a legitimate certificate from a trusted certificate authority, you don't need to provide CA file. Change-Id: I8623973b4209b44889243716d7880274caed8a6d 2017-09-25 13:09 +0000 [0cbeaa5589] Sean Bright * pjproject: Patch to correct STUN FINGERPRINT usage Change-Id: I0e453253dff1388b0186b36c754457c1d0d12db6 2017-09-25 12:30 +0000 [b74cbadd05] Kevin Harwell * res_pjsip_session: outgoing call did not offer all configured codecs For some scenarios when an outgoing call was made only a subset of the configured codecs were offered. If the codecs being offered happened to not have a codec supported by the phone then the call would fail. For instance Alice and Bob both are configured in Asterisk for g722 and ulaw( allow=!all,g722,ulaw). Alice's endpoint however only supports g722 while Bob's only supports ulaw. When Alice calls Bob, Alice negotiates g722 fine with Asterisk. But when Asterisk sends the outgoing offer to Bob it only contains g722 and not both g722 and ulaw, so the call ends. This patch makes it so all the audio codecs configured on the endpoint always get sent, and not just a subset. However priority is given to those codecs that are compatible with the "other side". ASTERISK-27259 #close Change-Id: Iffabc373bd94cd1dc700925dcfe406e12918c696 2017-09-25 10:59 +0000 [08e67f814b] Richard Mudgett * channel.c: Fix invalid reference in conditionaled out code. ASTERISK-27289 Change-Id: I7a415948116493050614d9f4fa91ffbe0c21ec4c 2017-09-25 07:25 +0000 [4275ca16a1] George Joseph * build: A few gcc 7 error fixes Change-Id: I7b5300fbf1af7d88d47129db13ad6dbdc9b553ec 2017-09-15 02:59 +0000 [c3c73b3511] Stefan Engström * app_queue: Only do announcement logic between ringing cycles This patch reverts the change by patch 2263 from old reviewboard. Note that reverting that 2263-patch still preserves the behaviour that the commit log of the 2263-patch claimed to add. The reason for this is: The function wait_for_answer is only called from try_calling which in turn is only called from the main for loop in queue_exec, and earlier in that loop we already check the things that's removed by this patch. There's no need to check those things twice each loop iteration, and I think the proper place to check it is before each ringing cycle. By checking it in wait_for_answer, you allow the issue explained in the jira - that the head caller hears announcements while the agents' sip phones are actively ringing. Reported-by: Stefan Engström Tested-by: Stefan Engström ASTERISK-27216 #close Change-Id: Ic4290dc75256f9743900c6762ee1bb915f672db0 2017-09-23 12:32 +0000 [0fad11f21c] Sean Bright * app_stream_echo: Don't echo declined streams Discovered while experimenting with Cyber Mega Phone 2K Ultimate Dynamic Edition after accepting the audio request but declining the video one. Change-Id: Iaa86d41fccfbc1b559a30ccf740d78a3b5f8a98c 2017-09-22 17:49 +0000 [601e0c563f] Joshua Colp * res_pjsip_session: Reduce (and improve) SDP renegotiation. When pruning a request to change the topology of a channel be more intelligent about the resulting topology that is actually used for SDP renegotiation. In a case where a stream has not already been negotiated we don't need to renegotiate and offer a declined stream. This can occur if something in Asterisk (such as ConfBridge) requests to add video to a PJSIP channel that has no video codecs configured. In this case since the stream did not already exist we can safely remove the stream from the requested topology, resulting in no renegotiation occurring. In a case where a renegotiation is requested with a codec that is not supported we can reuse the formats of the existing stream if it exists to ensure that the stream continues to flow, instead of removing it. Change-Id: I636540798d55922377318fe619c510fb6ed125fb 2017-09-22 15:29 +0000 [36690c26f8] Kevin Harwell * res_pjsip_session: Don't end session when receiving a 500 on a reinvite During a reinvite, if a remote endpoint error occurs and it returns a 500 the session would end. This patch makes it so the session is not terminated, but continues as it was. The reason for this is because some endpoints may send non session terminating "server errors" like a failed codec negotiation. So in this case instead of ending the call it can hopefully continue. In the case of a real server error the session is already "doomed", will be known soon enough and appropriately ended by Asterisk later. Change-Id: Ifeedae86b8cb44b92d52c79046522ec5f0aff1d5 2017-09-22 10:02 +0000 [ebd0a4bebf] Sean Bright * res_pjsip: Use ast_sip_is_content_type() where appropriate Change-Id: If3ab0d73d79ac4623308bd48508af2bfd554937d 2017-09-21 09:47 +0000 [6c0e13da22] George Joseph * res_pjsip_session/BUNDLE: Handle no audio codecs on endpoint When an INVITE came in with both audio and video streams but there were no audio codecs defined for the endpoint, we weren't declining the audio stream. Since it's usually the first/transport stream, when the video stream was processed and tried to use the transport, it was empty and caused a crash. We now decline the the stream if there are no matching codecs so when the video stream is processed, it's now the first/transport stream and processes normally. Change-Id: Ic854eda54c95031e66b076ecfae3041d34daa692 2017-09-19 14:28 +0000 [7c93982e9d] Richard Mudgett * res_rtp_asterisk.c: Fix bundled SSRC handling. Assertions in the v15+ AST-2017-008 patches found that we were not handling the case if the incoming SDP did not specify the required SSRC attributes for bundled to work. * Be strict on matching SSRC for bundled instances including the parent instance. If the SSRC doesn't match then discard the packet. Bundled has to tell us in the SDP signaling what SSRC to expect. Otherwise, we will not know how to find the bundled instance structure. Change-Id: I152830bbff71c662408909042068fada39e617f9 2017-09-16 09:19 +0000 [f2985e3106] Joshua Colp * bridge: Change participant SFU streams when source streams change. Some endpoints do not like a stream being reused for a new media stream. The frame/jitterbuffer can rely on underlying attributes of the media stream in order to order the packets. When a new stream takes its place without any notice the buffer can get confused and the media ends up getting dropped. This change uses the SSRC change to determine that a new source is reusing an existing stream and then bridge_softmix renegotiates each participant such that they see a new media stream. This causes the frame/jitterbuffer to start fresh and work as expected. ASTERISK-27277 Change-Id: I30ccbdba16ca073d7f31e0e59ab778c153afae07 2017-09-20 10:45 +0000 [971548405b] George Joseph * res_pjsip_session: Change some asserts to warning/debug messages There was an issue reported where an SDP received on a 183 Session Progress message caused a crash because the pending streams had already been processed when the OK was received. In that case the pending topology was legitimately NULL. There was an assert for an incorrect number of streams in the topology but not one for topology being NULL. In any case, if you're not in dev-mode the asserts don't do anything and since the scenario is legit, the asserts weren't appropriate anyway. * Changed several asserts to warning or debug messages and return codes as appropriate. ASTERISK-27264 Reported by: Daniel Heckl Change-Id: I58daaa9d2938fa980857ab3ec41925ab5ff9c848 2017-09-19 05:22 +0000 [cad68137a7] Rodrigo Ramírez Norambuena * res_config_pgsql: Fix removed support to previous for versions PostgreSQL 9.1 In PostgreSQL 9.1 the backslash are string literals and not the escape of characters. In previous issue ASTERISK_26057 was fixed the use of escape LIKE but the support for old version of Postgresql than 9.1 was dropped. The sentence before make was "ESCAPE '\'" but in version before than 9.1 need it to be as follow "ESCAPE '\\'". ASTERISK-27283 Change-Id: I96d9ee1ed7693ab17503cb36a9cd72847165f949 2017-09-15 09:43 +0000 [e666051d79] Ben Ford * res_pjsip_session: Check for removed stream state. When a sip session is refreshed, the stream topology is looped through, checking each stream for compatible formats. This would cause a crash if the stream state was AST_STREAM_STATE_REMOVED, since the formats would never be set for this stream, causing a NULL value to be returned from ast_stream_get_formats. This commit adds a check for streams with removed states. Also removed a stray semicolon. Change-Id: Ic86f8b65a4a26a60885b28b8b1a0b22e1b471d42 2017-09-19 05:44 +0000 [b6aa728a58] George Joseph * chan_pjsip: Ignore AST_CONTROL_STREAM_TOPOLOGY_CHANGED for now chan_pjsip_indicate was missing a case for the recently added AST_CONTROL_STREAM_TOPOLOGY_CHANGED condition and was returning an error and causing the call to be hung up instead of just ignoring it. ASTERISK-27260 Reported by: Daniel Heckl Change-Id: I4fecbb00a0b8a853da85155065c1a6bddf235e80 2017-09-07 04:41 +0000 [6b7d5671d1] Jean Aunis * bridge : Fix one-way direct-media when early bridging with native_rtp When two channels were early bridged in a native_rtp bridge, the RTP description on one side was not updated when the other side answered. This patch forbids non-answered channels to enter a native_rtp bridge, and triggers a bridge reconfiguration when an ANSWER frame is received. ASTERISK-27257 Change-Id: If1aaee1b4ed9658a1aa91ab715ee0a6413b878df 2017-09-18 09:51 +0000 [1e4c1cec7f] Alexander Traud * res_srtp: lower log level of auth failures Previously, sRTP authentication failures were reported on log level WARNING. When such failures happen, each RT(C)P packet is affected, spamming the log. Now, those failures are reported at log level VERBOSE 2. Furthermore, the amount is further reduced (previously all two seconds, now all three seconds). Additionally, the new log entry informs whether media (RTP) or statistics (RTCP) are affected. ASTERISK-16898 #close Change-Id: I6c98d46b711f56e08655abeb01c951ab8e8d7fa0 2017-09-19 10:38 +0000 [b748038230] George Joseph * res_pjsip_pubsub: Check for Content-Type header in rx_notify_request pubsub_on_rx_notify_request wasn't checking for a null Content-Type header before checking that it was application/simple-message-summary. ASTERISK-27279 Reported by: Ross Beer Change-Id: Iec2a6c4d2e74af37ff779ecc9fd35644c5c4ea52 2017-09-19 09:34 +0000 [a5f1d58fe1] David J. Pryke * chan_sip: Expose read-only access to the full SIP INVITE Request-URI Provide a way to get the contents of the the Request URI from the initial SIP INVITE in dial plan function call. (In this case "${CHANNEL(ruri)}") ASTERISK-27278 Reported by: David J. Pryke Tested by: David J. Pryke Change-Id: I1dd4d6988eed1b6c98a9701e0e833a15ef0dac3e 2017-09-19 07:53 +0000 [6fd3db51e8] Joshua Colp * app_confbridge: Only create a channel that records audio. This change makes it so that the conference recorder channel that is created only contains audio formats and an audio stream. This is because the underlying application used by ConfBridge to record, MixMonitor, only allows recording audio. Having additional streams (and in particular a video stream) can result in clients needlessly renegotiating to add a video stream that will never receive video. Change-Id: I89d38aedc9205eca7741d5435e73e73bb9de97a0 2017-09-19 06:34 +0000 [56f0d5fc0f] Rodrigo Ramírez Norambuena * res_config_pgsql: Add missing \n in debug log and update copyright year Change-Id: I4ba338ecbdecc6a814a902eddc4121c8ef3cda58 2017-09-13 14:14 +0000 [55567ee1d8] Sean Bright * res_calendar: Plug memory leak and micro-optimization ast_variables_destroy is NULL safe, so there is no need to check its argument before passing it. ASTERISK-25524 #close Reported by: Jesper Change-Id: Ib0f8057642e9d471960f1a79fd42e5a3ce587d3b 2017-09-13 03:46 +0000 [1199927fc0] alex * cdr_mysql.c: Apply cdrzone to start and answer Change-Id: I7de0a5adc89824a5f2b696fc22c80fc22dff36b0 2017-08-25 17:01 +0000 [087f667ab1] Richard Mudgett * AST-2017-008: Improve RTP and RTCP packet processing. Validate RTCP packets before processing them. * Validate that the received packet is of a minimum length and apply the RFC3550 RTCP packet validation checks. * Fixed potentially reading garbage beyond the received RTCP record data. * Fixed rtp->themssrc only being set once when the remote could change the SSRC. We would effectively stop handling the RTCP statistic records. * Fixed rtp->themssrc to not treat a zero value as special by adding rtp->themssrc_valid to indicate if rtp->themssrc is available. ASTERISK-27274 Make strict RTP learning more flexible. Direct media can cause strict RTP to attempt to learn a remote address again before it has had a chance to learn the remote address the first time. Because of the rapid relearn requests, strict RTP could latch onto the first remote address and fail to latch onto the direct media remote address. As a result, you have one way audio until the call is placed on and off hold. The new algorithm learns remote addresses for a set time (1.5 seconds) before locking the remote address. In addition, we must see a configured number of remote packets from the same address in a row before switching. * Fixed strict RTP learning from always accepting the first new address packet as the new stream. * Fixed strict RTP to initialize the expected sequence number with the last received sequence number instead of the last transmitted sequence number. * Fixed the predicted next sequence number calculation in rtp_learning_rtp_seq_update() to handle overflow. ASTERISK-27252 Change-Id: Ia2d3aa6e0f22906c25971e74f10027d96525f31c 2017-09-13 16:23 +0000 [d178f497d2] George Joseph * res_pjsip: Filter out non SIP(S) requests Incoming requests with non sip(s) URIs in the Request, To, From or Contact URIs are now rejected with PJSIP_SC_UNSUPPORTED_URI_SCHEME (416). This is performed in pjsip_message_filter (formerly pjsip_message_ip_updater) and is done at pjproject's "TRANSPORT" layer before a request can even reach the distributor. URIs read by res_pjsip_outbound_publish from pjsip.conf are now also checked for both length and sip(s) scheme. Those URIs read by outbound registration and aor were already being checked for scheme but their error messages needed to be updated to include scheme failure as well as length failure. Change-Id: Ibb2f9f1d2dc7549da562af4cbd9156c44ffdd460 2017-09-14 07:54 +0000 [01f2220bec] Joshua Colp * tcptls: Change error message to debug. The Websocket implementation will steal the underlying stream of TCP/TLS sessions. This results in an error message being output about a stream not being present when in reality this is actually fine. This change moves it to a debug message instead. Change-Id: I66cc639080b4b4599beadb4faa7d313f2721d094 2017-09-13 14:08 +0000 [d8112cd98b] Sean Bright * res_calendar: Various fixes * The way that we were looking at XML elements for CalDAV was extremely fragile, so use SAX2 for increased robustness. * Don't complain about a 'channel' not be specified if autoreminder is not set. Assume that if 'channel' is not set, we don't want to be notified. * Fix some truncated CLI output in 'calendar show calendar' and make the 'Autoreminder' description a bit more clear ASTERISK-24588 #close Reported by: Stefan Gofferje ASTERISK-25523 #close Reported by: Jesper Change-Id: I200d11afca6a47e7d97888f286977e2e69874b2c 2017-09-13 09:38 +0000 [eec0396395] Sean Bright * chan_rtp: Use μ-law by default instead of signed linear Multicast/Unicast RTP do not use SDP so we need to use a format that cleanly maps to one of the static RTP payload types. Without this change, an Originate to a Multicast or Unicast channel without a format specified would produce no audio on the receiving device. ASTERISK-21399 #close Reported by: Tzafrir Cohen Change-Id: I97e332b566e85da04b0004b9b0daae746cfca0e3 2017-09-11 05:46 +0000 [446d48fd49] George Joseph * res_pjsip: Add handling for incoming unsolicited MWI NOTIFY A new endpoint parameter "incoming_mwi_mailbox" allows Asterisk to receive unsolicited MWI NOTIFY requests and make them available to other modules via the stasis message bus. res_pjsip_pubsub has a new handler "pubsub_on_rx_mwi_notify_request" that parses a simple-message-summary body and, if endpoint->incoming_mwi_account is set, calls ast_publish_mwi_state with the voice-message counts from the message. Change-Id: I08bae3d16e77af48fcccc2c936acce8fc0ef0f3c 2017-09-08 21:41 +0000 [4889574ff5] Richard Mudgett * res_rtp_asterisk.c: Add doxygen to RTCP payload types. Change-Id: I3f20ce428777cc4ce9c13b2f808d29ff8c873998 2017-09-11 05:52 +0000 [f9bad3bd61] George Joseph * alembic: Fix typo in add_auto_info_to_endpoint_dtmf_mode The downgrade function was missing "_v2" at the end of the alter column type. Change-Id: Iaa9bcef48d6f3590ce07a61342d8e66f00263d8e 2017-09-10 06:17 +0000 [680aba21ec] Walter Doekes * res/res_pjsip: Fix localnet checks in pjsip, part 2. In 45744fc53, I mistakenly broke SDP media address rewriting by misinterpreting which address was checked in the localnet comparison. Instead of checking the remote peer address to decide whether we need media address rewriting, we check our local media address: if it's local, then we rewrite. This feels awkward, but works and even made directmedia work properly if you set local_net. (For the record: for local peers, the SDP media rewrite code is not called, so the comparison does no harm there.) ASTERISK-27248 #close Change-Id: I566be1c33f4d0a689567d451ed46bab9c3861d4f 2017-09-08 21:19 +0000 [c8d53a1638] Rodrigo Ramírez Norambuena * cdr_pgsql: Refactor magic number by definition for version Change-Id: I43f25976aa3069793ddbe0086833965a6fb0a518 2017-09-05 11:13 +0000 [e9a81157ac] Florian Floimair * alembic: Add support for MS-SQL MS-SQL has no native Enum-type support and therefore needs to work with constraints. Since these constraints need unique names the suggested approach referenced in the following alembic documentation has been applied: http://bit.ly/2x9r8pb ASTERISK-27255 #close Change-Id: I8b579750dae0c549f1103ee50172644afb9b2f95 2017-09-05 07:31 +0000 [525f84bb35] Jacek Konieczny * func_cdr: honour 'u' flag on dummy channel Fixes ${CDR(...,u)} when used in cdr_custom.conf ASTERISK-27165 #close Change-Id: Ia4e0b6ba93e03d27886354c279737790e2cd6a83 2017-09-06 10:50 +0000 [2b3f903e6f] Sean Bright * app_waitforsilence: Cleanup & don't treat missing frames as 'noise' * WaitForSilence completes successfully if it receives no media in the specified timeout, but when acting as WaitForNoise that logic needs to be reversed. * Use standard argument parsing macros and add some error checking for invalid values. * The documentation indicated that the first argument to both WaitForSilence and WaitForNoise was required when it was not. Update the documentation to reflect that. * Wrap up some behavior in structs to avoid boolean checks all over the place. ASTERISK-24066 #close Reported by: M vd S Change-Id: I01d40adc5b63342bb5018a1bea2081a0aa191ef9 2017-09-06 16:05 +0000 [5553644284] Scott Griepentrog * chan_sip: when getting sip pvt return failure if not found In handle_request_invite, when processing a pickup, a call is made to get_sip_pvt_from_replaces to locate the pvt for the subscription. The pvt is assumed to be valid when zero is returned indicating no error, and is dereferenced which can cause a crash if it was not found. This change checks the not found case and returns -1 which allows the calling code to fail appropriately. ASTERISK-27217 #close Reported-by: Bryan Walters Change-Id: I6bee92b8b8b85fcac3fd66f8c00ab18bc1765612 2017-09-06 13:38 +0000 [23571f31ac] Richard Mudgett * stasis/control.c: Fix set_interval_hook() ref leak. Change-Id: Ia0edb7dc0dbbb879c079ff7000f1b722d86ce7dc 2017-09-01 05:17 +0000 [94091c7b96] George Joseph * stasis/control: Fix possible deadlock with swap channel If an error occurs during a bridge impart it's possible that the "bridge_after" callback might try to run before control_swap_channel_in_bridge has been signalled to continue. Since control_swap_channel_in_bridge is holding the control lock and the callback needs it, a deadlock will occur. * control_swap_channel_in_bridge now only holds the control lock while it's actually modifying the control structure and releases it while the bridge impart is running. * bridge_after_cb is now tolerant of impart failures. Change-Id: Ifd239aa93955b3eb475521f61e284fcb0da2c3b3 2017-09-06 05:23 +0000 [67a2ca31f5] Vitezslav Novy * chan_sip: Do not change IP address in SDP origin line (o=) in SIP reINVITE If directmedia=yes is configured, when call is answered, Asterisk sends reINVITE to both parties to set up media path directly between the endpoints. In this reINVITE msg SDP origin line (o=) contains IP address of endpoint instead of IP of asterisk. This behavior violates RFC3264, sec 8: "When issuing an offer that modifies the session, the "o=" line of the new SDP MUST be identical to that in the previous SDP, except that the version in the origin field MUST increment by one from the previous SDP." This patch assures IP address of Asterisk is always sent in SDP origin line. ASTERISK-17540 Reported by: saghul Change-Id: I533a047490c43dcff32eeca8378b2ba02345b64e 2017-09-06 07:54 +0000 [0cbb17ce8f] George Joseph * alembic: Fix enum creation for dtls_fingerprint Change-Id: Ic061c5066a146616a68376881c7e4cf6d6e7e7db 2017-09-05 11:08 +0000 [a133c5cc53] Florian Floimair * alembic: fix erroneous commit for add_prune_on_boot Added include for postgresql ENUM type and redefined values in the same way as in the other migration scripts. ASTERISK-27254 #close Change-Id: Id667304cdf3891b1c2f7d35fab3e2a84026159fa 2017-09-06 03:02 +0000 [2d395793b7] Alexander Traud * res_srtp: Add support for libsrtp2.1. Asterisk is able to use libSRTP 2.0.x. However since libSRTP 2.1.x, the macro SRTP_AES_ICM got renamed to SRTP_AES_ICM_128. Beside to still compile with previous versions of libSRTP, this change allows libSRTP 2.1.x as well. ASTERISK-27253 #close Change-Id: I2e6eb3c3bc844fee8a624060a2eb6f182dc70315 2017-09-05 09:35 +0000 [bfc29de3ea] Ben Ford * chan_pjsip: Suppress frame warnings. When rtp_keepalive is on for a PJSIP endpoint dialing to another Asterisk instance also using PJSIP, Asterisk will continue to print warning messages about not being able to send frames of a certain type. This suppresses that warning message. Change-Id: I0332a05519d7bda9cacfa26d433909ff1909be67 2017-09-05 10:05 +0000 [c3a6c8fd2d] Sean Bright * formats: Restore previous fread() behavior Some formats are able to handle short reads while others are not, so restore the previous behavior for the format modules so that we don't have spurious errors when playing back files. ASTERISK-27232 #close Reported by: Jens T. Change-Id: Iab7f52b25a394f277566c8a2a4b15a692280a300 2017-09-05 09:16 +0000 [f856d9b42b] Walter Doekes * res/res_pjsip: Standardize/fix localnet checks across pjsip. In 2dee95cc (ASTERISK-27024) and 776ffd77 (ASTERISK-26879) there was confusion about whether the transport_state->localnet ACL has ALLOW or DENY semantics. For the record: the localnet has DENY semantics, meaning that "not in the list" means ALLOW, and the local nets are in the list. Therefore, checks like this look wrong, but are right: /* See if where we are sending this request is local or not, and if not that we can get a Contact URI to modify */ if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { ast_debug(5, "Request is being sent to local address, " "skipping NAT manipulation\n"); (In the list == localnet == DENY == skip NAT manipulation.) And conversely, other checks that looked right, were wrong. This change adds two macro's to reduce the confusion and uses those instead: ast_sip_transport_is_nonlocal(transport_state, addr) ast_sip_transport_is_local(transport_state, addr) ASTERISK-27248 #close Change-Id: Ie7767519eb5a822c4848e531a53c0fd054fae934 2017-09-05 08:39 +0000 [68bcfccd52] Joshua Colp * res_pjsip_session: Preserve stream name during renegotiation. Stream names within Asterisk can have meaning so when an externally initiated renegotiation occurs we need to preserve the name of the stream if it already exists. Change-Id: I29f50d0cc7f3238287d6d647777e76e1bdf8c596 2017-09-05 07:50 +0000 [0ec95515f3] George Joseph * res_calendar*, res_smdi: Move to "extended" support Change-Id: I31eee8be30c6b0fc3dadb31111dd47742da8892d 2017-09-05 05:23 +0000 [9b3f6d26bd] George Joseph * res_pjsip_t38: Make t38_reinvite_response_cb tolerant of NULL channel t38_reinvite_response_cb can get called by res_pjsip_session's session_inv_on_tsx_state_changed in situations where session->channel is NULL. If it is, the ast_log warning segfaults because it tries to get the channel name from a NULL channel. * Check session->channel and print "unknown channel" when it's NULL. ASTERISK-27236 Reported by: Ross Beer Change-Id: I4326e288d36327f6c79ab52226d54905cdc87dc7 2017-09-01 16:17 +0000 [60b44d1e38] Sean Bright * rtp_engine: Prevent possible double free with DTLS config ASTERISK-27225 #close Reported by: Richard Kenner Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89 2017-09-01 13:15 +0000 [ef8eb9d11b] Sean Bright * chan_ooh323: Fix confusing indentation warning ASTERISK-27177 #close Reported by: Tzafrir Cohen Change-Id: I40311c404edb2302a7543ad5ca7a06b2a38f2d97 2017-09-01 09:51 +0000 [1bdbefbe76] Sean Bright * app_directory: Handle a NULL mailbox without crashing ASTERISK-27241 #close Reported by: David Moore Change-Id: Ibbbca85517b04c315406ebfe3b6f7e0763daedc6 2017-07-24 10:48 +0000 [f78f5278ff] George Joseph * pjsip_message_ip_updater: Fix issue handling "tel" URIs sanitize_tdata was assuming all URIs were SIP URIs so when a non SIP uri was in the From, To or Contact headers, the unconditional cast of a non-pjsip_sip_uri structure to pjsip_sip_uri caused a segfault when trying to access uri->other_param. * Added PJSIP_URI_SCHEME_IS_SIP(uri) || PJSIP_URI_SCHEME_IS_SIPS(uri) checks before attempting to cast or use the returned uri. ASTERISK-27152 Reported-by: Ross Beer Change-Id: Id380df790e6622c8058a96035f8b8f4aa0b8551f 2017-07-01 19:24 +0000 [1bf3dfffd7] Corey Farrell * AST-2017-006: Fix app_minivm application MinivmNotify command injection An admin can configure app_minivm with an externnotify program to be run when a voicemail is received. The app_minivm application MinivmNotify uses ast_safe_system() for this purpose which is vulnerable to command injection since the Caller-ID name and number values given to externnotify can come from an external untrusted source. * Add ast_safe_execvp() function. This gives modules the ability to run external commands with greater safety compared to ast_safe_system(). Specifically when some parameters are filled by untrusted sources the new function does not allow malicious input to break argument encoding. This may be of particular concern where CALLERID(name) or CALLERID(num) may be used as a parameter to a script run by ast_safe_system() which could potentially allow arbitrary command execution. * Changed app_minivm.c:run_externnotify() to use the new ast_safe_execvp() instead of ast_safe_system() to avoid command injection. * Document code injection potential from untrusted data sources for other shell commands that are under user control. ASTERISK-27103 Change-Id: I7552472247a84cde24e1358aaf64af160107aef1 2017-05-22 10:36 +0000 [7f2a60fb38] Joshua Colp * res_rtp_asterisk: Only learn a new source in learn state. This change moves the logic which learns a new source address for RTP so it only occurs in the learning state. The learning state is entered on initial allocation of RTP or if we are told that the remote address for the media has changed. While in the learning state if we continue to receive media from the original source we restart the learning process. It is only once we receive a sufficient number of RTP packets from the new source that we will switch to it. Once this is done the closed state is entered where all packets that do not originate from the expected source are dropped. The learning process has also been improved to take into account the time between received packets so a flood of them while in the learning state does not cause media to be switched. Finally RTCP now drops packets which are not for the learned SSRC if strict RTP is enabled. ASTERISK-27013 Change-Id: I56a96e993700906355e79bc880ad9d4ad3ab129c 2017-08-30 07:28 +0000 [5ba82cedc6] Joshua Colp * res_rtp_asterisk: Allow remote SSRC to change on an RTP instance. When SDP renegotiation occurs it is possible for an RTP instance to be reused for a new stream, resulting in the remote SSRC changing if it is part of a bundle group. This change allows this and updates its mapping in the current bundle group. ASTERISK-27231 Change-Id: I6e3703974f236bc024c5dbe9bd43adae0c6fb490 2017-08-25 21:06 +0000 [71be8d5bbe] Andre Nazario * chan_pjsip: Add tag info in CHANNEL function Create local_tag and remote_tag in CHANNEL info to get tag from From and To headers of a SIP dialog. ASTERISK-27220 Change-Id: I59b16c4b928896fcbde02ad88f0e98922b15d524 2017-08-29 14:22 +0000 [4650fc477a] Richard Mudgett * bridge_native_rtp.c: Fixup native_rtp_framehook() * Fix framehook to test frame type for control frame. * Made framehook exit early if frame type is not a control frame. * Eliminated RAII_VAR in framehook. * Use switch instead of else-if ladder for control frame handling. Change-Id: Ia555fc3600bd85470e3c0141147dbe3ad07c1d18 2017-08-29 09:26 +0000 [06cc5ae9ff] Sean Bright * confbridge: Handle user hangup during name recording This prevents orphaned CBAnn channels from getting stuck in the bridge. ASTERISK-26994 #close Reported by: James Terhune Change-Id: I5e43e832a9507ec3f2c59752cd900b41dab80457 2017-08-24 11:45 +0000 [9a9589e8e1] Joshua Colp * core: Reduce video update queueing. A video update frame is used to indicate that a channel with video negotiated should provide a full frame so the decoder decoding the stream is able to do so. In situations where a queue is used to store frames it makes no sense for the queue to contain multiple video update frames. One is sufficient to have a full frame be sent. ASTERISK-27222 Change-Id: Id3f40a6f51b740ae4704003a1800185c0c658ee7 2017-08-25 13:44 +0000 [da13cdb9e7] Sean Bright * voicemail: Fix various abuses of mkstemp mkstemp() returns a unique filename, but appending an extension to that filename does not guarantee uniqueness. Instead, use mkdtemp() and we can put whatever extension we want on the files that we create inside the directory. In the case of app_minivm, we also now properly clean up any temporary files that we create. ASTERISK-20858 #close Reported by: Walter Doekes Change-Id: I30ad04f0e115f0b11693ff678ba5184d8b938e43 2017-08-25 12:20 +0000 [43670e471f] Sean Bright * app_record: Resolve some absolute vs. relative filename bugs If the Record() application is called with a relative filename that includes directories, we were not properly creating the intermediate directories and Record() would fail. Secondarily, updated the documentation for RECORDED_FILE to mention that it does not include a filename extension. Finally, rewrote the '%d' functionality to be a bit more straight forward and less noisy. ASTERISK-16777 #close Reported by: klaus3000 Change-Id: Ibc2640cba3a8c7f17d97b02f76b7608b1e7ffde2 2017-08-23 10:01 +0000 [2ee644aacf] Florian Floimair * alembic: Add dtls_fingerprint column in ps_endpoints table The ps_endpoints table was missing the dtls_fingerprint column introduced with commit adba2a8d7fd. ASTERISK-27168 #close Change-Id: I9cb5006f7f50718b5239919562773adabb334cfd 2017-08-21 04:28 +0000 [33a648d4c6] Torrey Searle * res/res_pjsip_session: allow SDP answer to be regenerated If an SDP answer hasn't been sent yet, it's legal to change it. This is required for PJSIP_DTMF_MODE to work correctly, and can also have use in the future for updating codecs too. ASTERISK-27209 #close Change-Id: Idbbfb7cb3f72fbd96c94d10d93540f69bd51e7a1 2017-08-24 09:42 +0000 [02f95d290f] Sean Bright * app_queue: Evaluate realtime queues when running dialplan functions ASTERISK-19103 #close Reported by: Jim Van Meggelen Change-Id: I4bd32a9d1fcebb8ac56bff0e084d4f53e31b692b 2017-08-23 09:19 +0000 [b1097be134] Eelco Brolman (License 6442) * app_voicemail: Honor escape digits in "greeting only" mode ASTERISK-21241 #close Reported by: Eelco Brolman Patches: Patch uploaded by Eelco Brolman (License 6442) Change-Id: Icbe39b5c82a49b46cf1d168dc17766f3d84f54fe 2017-08-24 08:35 +0000 [7937d5b8b3] Sean Bright * res_smdi: Clean up memory leak Change-Id: I1e33290929e1aa7c5b9cb513f8254f2884974de8 2017-08-18 17:37 +0000 [f2c14f00b8] Richard Mudgett * res_pjsip_session.c: Fix crash when declining an active stream. If a previously active stream is declined we could crash because the channel's thread is still using the stream while we are updating the topology in the serializer thread. * Defer removing any declined stream's handler until we have blocked the channel's thread with the channel lock. ASTERISK-27212 Change-Id: I50e1d3ef26f8e41948f4c411ee329aa3b960a420 2017-08-16 17:50 +0000 [17976d1b4e] Richard Mudgett * bridge_channel.c: Fix FRACK when mapping frames to the bridge. * Add protection checks when mapping streams to the bridge. The channel and bridge may be in the process of updating the stream mapping when a media frame comes in so we may not be able to map the frame at the time. * We need to map the streams to the bridge's stream numbers right before they are written into the bridge. That way we don't have to keep locking/unlocking the bridge and we won't have any synchronization problems before the frames actually go into the bridge. * Protect the deferred queue with the bridge_channel lock. ASTERISK-27212 Change-Id: Id6860dd61b594b90c8395f6e2c0150219094c21a 2017-08-11 16:31 +0000 [9c70c88369] Richard Mudgett * channel: Fix topology API locking. * ast_channel_request_stream_topology_change() must not be called with any channel locks held. * ast_channel_stream_topology_changed() must be called with only the passed channel lock held. ASTERISK-27212 Change-Id: I843de7956d9f1cc7cc02025aea3463d8fe19c691 2017-08-16 15:22 +0000 [6ad8249233] Richard Mudgett * bridge: Fix softmix bridge deadlock. * Fix deadlock in bridge_softmix.c:softmix_bridge_stream_topology_changed() between bridge_channel and channel locks. * The new bridge technology topology change callbacks must be called with the bridge locked. The callback references the bridge channel list, the bridge technology could change, and the bridge stream mapping is updated. ASTERISK-27212 Change-Id: Ide4360ab853607e738ad471721af3f561ddd83be 2017-08-14 12:20 +0000 [850a3fd017] Richard Mudgett * chan_pjsip.c: Fix topology refresh response code accuracy. There are other 1xx and 2xx codes than 100 and 200 respectively. Change-Id: I680db0997343256add1478714f5bf5b5569aee17 2017-08-11 17:06 +0000 [87c7a1c79c] Richard Mudgett * bridge_softmix.c: Restored softmix_bridge_leave() shortcut exit. Change-Id: I13026cd90954e0265eab94a0faf635a3e11f0e35 2017-08-17 17:07 +0000 [5bbf7b2aad] Richard Mudgett * app_confbridge: Document sfu video_mode value. Change-Id: I26e17df2c93f3933b23f78070603adbcc84ba204 2017-08-17 17:06 +0000 [f96536b1ea] Richard Mudgett * confbridge.h: Fix doxygen comments. Change-Id: I16133166a85fdb557c66ffcbfe8128d0b4725b0e 2017-08-11 11:40 +0000 [946ef2d711] Richard Mudgett * bridge_softmix.c: Remove always true test. Change-Id: I26238df2ff0d0f6dfe95c3aa35da588f1ee71727 2017-08-17 16:46 +0000 [22af5e3784] Sungtae Kim * app_queue: Fix initial hold time queue statistic Fixed to use correct initial value and fixed to use the correct queue info to check the first value. ASTERISK-27204 Change-Id: Ia9e36c828e566e1cc25c66f73307566e4acb8e73 2017-08-20 08:15 +0000 [83b81d1f8d] Michael Kuron * res_xmpp: fix inverted return code check in OAuth fetch_access_token calls func_curl via ast_func_read. The latter returns 0 upon success and -1 if the function is not available. This commit inverts the return code check so that an error is printed if the module is not loaded and not if it is loaded. ASTERISK-27207 #close Change-Id: I9ef903f80702d1218e8701f65a4e5e918e6548fb 2017-08-17 12:00 +0000 [667986d875] Sean Bright * res_calendar_icalendar: Properly handle recurring events When looking for recurring events, use the correct end time based on the configured 'timeframe.' ASTERISK-27174 #close Reported by: Mark Thompson Change-Id: Id90c3cfc79d561a5521d79be176683e225f2edef 2017-08-16 15:43 +0000 [0e777258be] George Joseph * Fix downloader not working with curl The codec/dpma downloader wasn't handling curl correctly. The logic that transforms makeopts into a bash-sourceable file wasn't handling the make 'or' command in DOWNLOAD_TIMEOUT so bash was looking for an 'or' command. That logic has been eliminated. Instead of trying to transform and source makeopts, the downloader now calls a make scriptlet to print the value of a specific variable. This way, make handles the ors (or any other make construct that happens to creep into that file). ASTERISK-27202 Reported by: Sean McCord Change-Id: Iadfb6693528e4d4da7b8bb201fa66da2c71c7f99 2017-08-15 13:12 +0000 [e4e2e53c8a] Kevin Harwell * manager: hook event is not being raised When the iostream code went in it introduced a conditional that made it so the hook event was not being raised even if a hook is present. This patch adds a check to see if a hook is present in astman_append. If so then call into the send_string function, which in turn raises the even for specified hook. Also updated the ami hooks unit test, so the test could be automated. ASTERISK-27200 #close Change-Id: Iff37f02f9708195d8f23e68f959d6eab720e1e36 2017-08-15 15:15 +0000 [c049d1c3b2] Richard Mudgett * configure: Check cache for valid pjproject tarball before downloading. On a fresh Asterisk source directory, the bundled pjproject tarball is unconditionally downloaded even if the tarball is already in a specified cache directory. * Made check if the pjproject tarball is valid in the cache directory before downloading the tarball on a fresh source directory. Change-Id: Ic7ec842d3c97ecd8dafbad6f056b7fdbce41cae5 2017-08-15 11:14 +0000 [9e2b2a9837] Richard Mudgett * res_pjsip: Fix prune_on_boot to remove only contacts for the host. * Check that the contact's reg_server matches the host's name before deleting any prune_on_boot contacts. We don't want to delete reliable transport contacts made with other servers if the ps_contacts database table is shared with other servers. Thanks to Ross Beer for pointing out that the original prune logic would delete reliable transport contacts from other servers. ASTERISK-27147 Change-Id: I8e439d0d1c266ffdfd7b73d1e5e466180a689bd0 2017-08-04 09:25 +0000 [15fbcc74d8] Andrey Egorov * res_xmpp: Google OAuth 2.0 protocol support for XMPP / Motif Add ability to use tokens instead of passwords according to Google OAuth 2.0 protocol. ASTERISK-27169 Reported by: Andrey Egorov Tested by: Andrey Egorov Change-Id: I07f7052a502457ab55010a4d3686653b60f4c8db 2017-08-10 14:18 +0000 [bd28a9bbd8] Richard Mudgett * STUN/netsock2: Fix some valgrind uninitialized memory findings. * netsock2.c: Test the addr->len member first as it may be the only member initialized in the struct. * stun.c:ast_stun_handle_packet(): The combinded[] local array could get used uninitialized by ast_stun_request(). The uninitialized string gets copied to another location and could overflow the destination memory buffer. These valgrind findings were found for ASTERISK_27150 but are not necessarily a fix for the issue. Change-Id: I55f8687ba4ffc0f69578fd850af006a56cbc9a57 2017-08-02 18:44 +0000 [1bec781cce] Richard Mudgett * res_pjsip_outbound_registration.c: Re-REGISTER on transport shutdown. The fix for the issue is broken up into three parts. This is part three which handles the client side of REGISTER requests. The registered contact may no longer be valid on the server when the transport used is reliable and the connection is broken. * Re-REGISTER our contact if the reliable transport is broken after registration completes. We attempt to re-REGISTER immediately to minimize the time we are unreachable. Time may have already passed between the connection being broken and the loss being detected. * Reorder sip_outbound_registration_state_alloc() so the STATSD_GUAGE's are still correct if an allocation failure happens. ASTERISK-27147 Change-Id: I3668405b1ee75dfefb07c0d637826176f741ce83 2017-07-31 14:21 +0000 [82f4ade959] Richard Mudgett * res_pjsip: Remove ephemeral registered contacts on transport shutdown. The fix for the issue is broken up into three parts. This is part two which handles the server side of REGISTER requests when rewrite_contact is enabled. Any registered reliable transport contact becomes invalid when the transport connection becomes disconnected. * Monitor the rewrite_contact's reliable transport REGISTER contact for shutdown. If it is shutdown then the contact must be removed because it is no longer valid. Otherwise, when the client attempts to re-REGISTER it may be blocked because the invalid contact is there. Also if we try to send a call to the endpoint using the invalid contact then the endpoint is not likely to see the request. The endpoint either won't be listening on that port for new connections or a NAT/firewall will block it. * Prune any rewrite_contact's registered reliable transport contacts on boot. The reliable transport no longer exists so the contact is invalid. * Websockets always rewrite the REGISTER contact address and the transport needs to be monitored for shutdown. * Made the websocket transport set a unique name since that is what we use as the ao2 container key. Otherwise, we would not know which transport we find when one of them shuts down. The names are also used for PJPROJECT debug logging. * Made the websocket transport post the PJSIP_TP_STATE_CONNECTED state event. Now the global keep_alive_interval option, initially idle shutdown timer, and the server REGISTER contact monitor can work on wetsocket transports. * Made the websocket transport set the PJSIP_TP_DIR_INCOMING direction. Now initially idle websockets will automatically shutdown. ASTERISK-27147 Change-Id: I397a5e7d18476830f7ffe1726adf9ee6c15964f4 2017-07-28 18:26 +0000 [1dcb92bba8] Richard Mudgett * res_pjsip: PJSIP Transport state monitor refactor. The fix for the issue is broken up into three parts. This is part one which refactors the transport state monitor code to allow more modules to be able to monitor transports. * Pull the management of PJPROJECT's transport state callback code from res_pjsip_transport_management.c into res_pjsip. Now other modules can dynamically add and remove themselves from transport monitoring without worrying about breaking PJPROJECT's callback chain. * Add the ability for other modules to get a callback whenever a specific transport is shutdown. ASTERISK-27147 Change-Id: I7d9a31371eb1487c9b7050cf82a9af5180a57912 2017-07-27 15:36 +0000 [ee5edfb050] Richard Mudgett * res_pjsip_transport_management.c: Rename some variables. * Use monitored instead of the misleading keepalive name. Change-Id: I9e5bcbb4ab2b82d49bcd0f06dfe85d15e0b552b6 2017-08-09 15:24 +0000 [ecd1f87edf] Richard Mudgett * UPGRADE notes: Prepare for the eventual 16 branch. Change-Id: I4ca2f07ed62d77f1fdd10c3b216f6a28dd75720c 2017-08-10 09:09 +0000 [4ed2733dde] Scott Griepentrog * res_pjsip_messaging: IPv6 receive address needs brackets When handling an incoming SIP MESSAGE, PJSIP attaches the IP address that the message was received from to the message in the variable PJSIP_RECVADDR. When the IP address is IPv6 the :PORT appended results in an unparseable mess. By using an additional bit flag on the pj_sockaddr_print call, the conventional use of brackets around the address is achieved. ASTERISK-27193 #close Change-Id: I12342521f2ce87a5b6e4883d480a3fd957aa9fd9 2017-07-26 09:17 +0000 [d430f718f5] Torrey Searle * res_rtp_asterisk: enable rtcp & QOS stats on native bridge Asterisk wasn't generating or forwarding RTCP packets when native bridge was activated. Also the stats weren't available via CHANNEL(qos). Now the RTCP stats are always calculated. ASTERISK-27158 #close Change-Id: I46fb8f61c95e836b9d2dda6054b0cf205c16037b 2017-07-28 07:53 +0000 [a2dde59154] Torrey Searle * res_rtp_asterisk: Make P2P bridge Asymmetric codec aware Introduce a new property to rtp-engine to make it aware of the desire for assymetric codecs or not. If asymmetric codecs is not allowed, the bridge will compare read/write formats and shut down the p2p bridge if needed ASTERISK-26745 #close Change-Id: I0d9c83e5356df81661e58d40a8db565833501a6f 2017-08-08 13:33 +0000 [305bd0d99f] George Joseph * Make --with-pjproject-bundled the default for Asterisk 15 '--with-pjproject-bundled' is now the default when running ./configure. It can be disabled with '--without-pjproject-bundled'. To make building without an internet connection easier, a new ./configure option '--with-download-cache' was added that sets the cache for externals (like pjproject, the codecs and the DPMA), AND the sounds files. It can also be specified as an environment variable named "AST_DOWNLOAD_CACHE". The existing '--with-sounds-cache' option / SOUNDS_CACHE_DIR env variable and '--with-externals-cache' option / EXTERNALS_CACHE_DIR env variable remain and if specified, will override '--with-downloads-cache'. ASTERISK-27189 Change-Id: Ifa9783fddf44aafadb060c9feba713dfa81d38ce 2017-08-05 06:36 +0000 [62092bc114] Joshua Colp * res_pjsip_session: Release media resources on session end quicker. A change was made long ago where the session was kept around until the underlying INVITE session had been destroyed. This had the side effect of also keeping the underlying media resources around for this time as well. This change ensures that when we are told to terminate the session we immediately release any media sessions associated with it. ASTERISK-27110 Change-Id: I643e431d5c3bf05cda220c1d39e824a505a29b82 2017-07-29 20:03 +0000 [4b58609c33] Kirill Katsnelson * chan_sip: Access incoming REFER headers in dialplan This adds a way to access information passed along with SIP headers in a REFER message that initiates a transfer. Headers matching a dialplan variable GET_TRANSFERRER_DATA in the transferrer channel are added to a HASH object TRANSFER_DATA to be accessed with functions HASHKEY and HASH. The variable GET_TRANSFERRER_DATA is interpreted to be a prefix for headers that should be put into the hash. If not set, no headers are included. If set to a string (perhaps 'X-' in a typical case), all headers starting this string are added. Empty string matches all headers. If there are multiple of the same header, only the latest occurrence in the REFER message is available in the hash. Obviously, the variable GET_TRANSFERRER_DATA must be inherited by the referrer channel, and should be set with the '_' or '__' prefix. I avoided a specific reference to SIP or REFER, as in my mind the mechanism can be generalized to other channel techs. ASTERISK-27162 Change-Id: I73d7a1e95981693bc59aa0d5093c074b555f708e 2017-08-06 11:15 +0000 [88c65f7cb6] Joshua Colp * bridge: Fix stream topology/participant locking and video misrouting. This change fixes a few locking issues and some video misrouting. 1. When accessing the stream topology of a channel the channel lock must be held to guarantee the topology remains valid. 2. When a channel was joined to a bridge the bridge specific implementation for stream mapping was not invoked, causing video to be misrouted for a brief period of time. ASTERISK-27182 Change-Id: I5d2f779248b84d41c5bb3896bf22ba324b336b03 2017-08-05 14:43 +0000 [16cfc3a954] Corey Farrell * channel: Fix leak on successful call to chan->tech->requester. joint_cap needs to be released unconditionally as chan->tech->requester does not steal the reference even on success. ASTERISK-27180 #close Change-Id: I647728992559bdb0a9c7357c20be1b36400d68b6 2017-08-04 16:47 +0000 [104a8047a5] Kevin Harwell * res_pjsip_session/_sdp_rtp: Handling of 'msid' is incorrect Currently, the handling of the msid attribute is not quite right. According to the spec the msid's between the offer/answer are not dependent upon one another. Meaning the same msid's given in an offer do not have to be returned in the answer for a given stream. And they probably shouldn't be (copied/reused) since this can potentially cause some browser side confusion. This patch generates new msids when both an offer and answer are sent from Asterisk. However, Asterisk does reuse the original msid it sent out for a reinvite. Also audio+video streams are paired together by sharing the same stream id, but a different track id. ASTERISK-27179 #close Change-Id: Ifaec06dc7e65ad841633a24ebec8c8a9302d6643 2017-08-03 20:58 +0000 [7f8f3ca4dd] Corey Farrell * Correct some leaks in unit tests. * chan_sip: channel in test_sip_rtpqos_1. * test_config: config hook, config info and global config holder. * test_core_format: format in format_attribute_set_without_interface. * test_stream: unneeded frame duplication. * test_taskprocessor: task_data. Change-Id: I94d364d195cf3b3b5de2bf3ad565343275c7ad31 2017-07-26 17:49 +0000 [842e1414d0] Richard Mudgett * res_pjsip_transport_websocket.c: Fix serializer ref leak. Change-Id: Ib5a19bfd597f63d9021baeb645fc11153b3afa57 2017-08-02 18:41 +0000 [615b6a200a] Richard Mudgett * res_pjsip_outbound_registration.c: Misc fixes. * Remove unnecessary CMP_STOP. * In handle_client_registration() use DEBUG_ATLEAST() to only do work needed for the debug log message when the debug log message is needed. * In sip_outbound_registration_state_destroy() check state->registration for NULL. Change-Id: I656d0fa11dda0b00048103efb1558e67a426fd80 2017-07-31 20:20 +0000 [564927c5ed] Richard Mudgett * res_pjsip_nat.c: Remove unnecessary CMP_STOP. Change-Id: I6279b0d723bc3b75b8d65e81e02da9ea9bc0c3da 2017-07-31 14:20 +0000 [5655cded78] Richard Mudgett * res_pjsip_registrar.c: Remove unnecessary CMP_STOP. Most uses of CMP_STOP are superfluous and are only respected when OBJ_MULTIPLE is used to search the container. Change-Id: I20571a202ec0aa1098bb2749eeba18de7ca110b8 2017-08-03 13:13 +0000 [123c93a77c] Tzafrir Cohen * Support GMIME 3.0 Support building the Asterisk httpd with version 3.0 of gmime as well as earlier versions of that library. ASTERISK-27173 Change-Id: I7e13dd05a3083ccb0df2dabf83110223f6a9fa8f 2017-08-02 09:43 +0000 [521b6fed12] Kevin Harwell * alembic/res_pjsip: Add "webrtc" configuration option When the "webrtc" option was added in res_pjsip it was not added to the alembic scripts. This patch adds the option for alembic. Also, changed the sorcery configuration type to an OPT_YESNO_T value instead of an OPT_BOOL_T so if this field is ever written to a database it will write out the correct value. ASTERISK-27119 #close Change-Id: I3e199f060aea25e193c439fc5cf96be4d3ed1c7b 2017-07-30 01:17 +0000 [4c0798e91d] Kirill Katsnelson * chan_sip: Add dialplan function SIP_HEADERS Syntax: SIP_HEADERS([prefix]) If the argument is specified, only the headers matching the given prefix are returned. The function returns a comma-separated list of SIP header names from an incoming INVITE message. Multiple headers with the same name are included in the list only once. The returned list can be iterated over using the functions POP() and SIP_HEADER(). For example, '${SIP_HEADERS(Co)}' might return the string 'Contact,Content-Length,Content-Type'. Practical use is rather '${SIP_HEADERS(X-)}' to enumerate optional extended headers sent by a peer. ASTERISK-27163 Change-Id: I2076d3893d03a2f82429f393b5b46db6cf68a267 2017-08-02 14:16 +0000 [4b03eb5c38] Corey Farrell * Fix compile error for old versions of GCC. Use -Wno-format-truncation only if supported by compiler. ASTERISK-27171 #close Change-Id: Iac0aed7a5bcaa16c21b7d62c4e4678d244c4ccb6 2017-08-02 16:08 +0000 [148cf2e0f7] Corey Farrell * app_privacy: remove unused header asterisk/image.h Change-Id: I56ed530633a642633b18383821069e806c92ae82 2017-07-26 08:48 +0000 [2be8d91c0f] snuffy (license 5024) * res_pjsip_pidf_eyebeam_body_supplement: Correct status presentation This change fixes PIDF content generation when the underlying device state is considered in use. Previously it was incorrectly marked as closed meaning they were offline/unavailable. The code now correctly marks them as open. Additionally: * Generate an XML element for our activity instead of a using a text node. * Consider every extension state other than "unavailable" to be 'open' status. * Update the XML namespaces and structure to reflect those documented in RFC 4480 * Use 'on-the-phone' (defined in RFC 4880) instead of 'busy' as the "in use" activity. This change results in eyeBeam using the appropriate icon for the watched user. This was tested on eyeBeam 1.5.20.2 build 59030 on Windows. ASTERISK-26659 #close Reported by: Abraham Liebsch patches: ASTERISK-26659.diff submitted by snuffy (license 5024) Change-Id: I6e5ad450f91106029fb30517b8c0ea0c2058c810 2017-07-23 18:34 +0000 [2a4283f3e7] Joshua Colp * res_pjsip: Add support for dnsmgr to external_media_address. The "external_media_address" option on transports is now resolved using dnsmgr. This allows it to be automatically refreshed regularly if refreshes are enabled in dnsmgr. If the system is using a dynamic IP address a dynamic DNS hostname can be provided to keep the IP address up to date. Change-Id: Ia54771720dff0105bde55d5bbb81a3ba437e05b2 2017-07-27 20:58 +0000 [58d032112b] Corey Farrell * Fix compiler warnings on Fedora 26 / GCC 7. GCC 7 has added capability to produce warnings, this fixes most of those warnings. The specific warnings are disabled in a few places: * app_voicemail.c: truncation of paths more than 4096 chars in many places. * chan_mgcp.c: callid truncated to 80 chars. * cdr.c: two userfields are combined to cdr copy, fix would break ABI. * tcptls.c: ignore use of deprecated method SSLv3_client_method(). ASTERISK-27156 #close Change-Id: I65f280e7d3cfad279d16f41823a4d6fddcbc4c88 2017-07-26 09:27 +0000 [3f98488279] Sean Bright * app_queue: Add announce-position-only-up option Setting this option will cause the Queue application to only announce the caller's position if it has improved since the last time that we announced it. Change-Id: I173a124121422209485b043e2bf784f54242fce6 2017-07-27 06:35 +0000 [ac6d98b28d] Ian Gilmour (license 6889) * bundled_pjproject: Improve SSL/TLS error handling OpenSSL has 2 levels or error processing. It's possible for the top layer to return SSL_ERROR_SYSCALL but the lower layer return no error, in which case processing should continue. Only the top layer was being examined though so connections were being torn down when they didn't need to be. This patch adds the examination of the lower level codes, and if they return no errors, allows processing to continue. ASTERISK-27001 Reported-by: Ian Gilmour patches: pjproject-2.6.patch submitted by Ian Gilmour (license 6889) Updated-by: George Joseph and Sauw Ming (Teluu) Merged to upstream pjproject on 7/27/2017 (commit 5631) Change-Id: I23844ca0c68ef1ee550f14d46f6dae57d33b7bd2 2017-06-26 07:52 +0000 [65c560894d] Torrey Searle * chan_pjsip: add a new function PJSIP_DTMF_MODE This function is a replica of SIPDtmfMode, allowing the DTMF mode of a PJSIP call to be modified on a per-call basis ASTERISK-27085 #close Change-Id: I20eef5da3e5d1d3e58b304416bc79683f87e7612 2017-07-25 15:17 +0000 [b3914df10b] Sean Bright * res_rtp_asterisk: Fix mapping of pjsip's ICE roles to ours Change-Id: Ia578ede1a55b21014581793992a429441903278b 2017-07-20 08:08 +0000 [4f4936fd72] Sergej Kasumovic * res_stasis_device_state: Unsubscribe should remove old subscriptions Case scenario with Applications ARI: * Once you subscribe to deviceState with Applications REST API, it will be added into subscription pool. * When you unsubscribe it will remove from the device_state_subscription hash table but not from the subscription pool. * When you subscribe again, it will add it to pool again. * Now you will have two subscriptions and you will receive same event twice. This fix should now remove deviceState subscription from pool and it should fix unsubscribe on deviceState. ASTERISK-27130 #close Change-Id: I718b70d770a086e39b4ddba4f69a3c616d4476c4 2017-07-24 13:30 +0000 [a6eb9ee7d2] Joshua Colp * core: Add VP9 passthrough support. This change adds VP9 as a known codec and creates a cached "vp9" media format for use. Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc 2017-07-19 18:11 +0000 [922930753c] Richard Mudgett * app_voicemail.c: Allow mailbox entry on authentication retry prompt. The following testsuite voicemail tests were failing to re-enter the mailbox after the first login attempt. tests/apps/voicemail/authenticate_invalid_mailbox tests/apps/voicemail/authenticate_invalid_password The tests were noting the start of the vm-incorrect-mailbox prompt and immediately sending the mailbox for the next login attempt. Since the invalid message playback had to complete before the digits were recognized, the test passed for the wrong reason and added approximately 20 seconds to the test times. * Allow the vm-incorrect-mailbox prompt to get interrupted by the mailbox digits like the initial vm-login prompt so the tests are able to enter the intended mailbox. Change-Id: I1dc53fe917bfe03a4587b2c4cd24c94696a69df8 2017-07-21 15:57 +0000 [2697e45157] Matthew Fredrickson * format.h: Fix a few minor errors in comments. A few minor problems were found in comments in format.h. This patch fixes them. Change-Id: I07f0bdb47b93359b361c4c3d8ecc87cd3199dd94 2017-07-14 13:47 +0000 [19b080b547] Rusty Newton * say.c: Fix file locations for second, seconds, minute, minutes files The seconds and minutes files have always existed in the base language directory of the Core package. So say.c has always been calling the wrong location (under digits/) for those two files and in the case of second and minute they didn't exist in the Core packages at all. The 1.6 sounds release moves the second and minute files into Core from Extra for the languages that already had them. A future release will include the second and minute files for languages that didn't already have them. This patch just changes all the target locations for second, seconds, minute, and minutes that were under the digits subdir to be under the root of sounds instead. Which is where the sounds will be for some languages after 1.6 sounds and for all languages after a future release. ASTERISK-25810 #close Change-Id: I05d9d4bee6a7237030530a46e7eb3df15f13f702 Reported-by: Nicolas Riendeau 2017-07-21 14:20 +0000 [a2f6028a51] Rusty Newton * Sounds: Update Makefile for Extra sounds 1.5.1 release Incrementing version for the Extra sounds release. 1.5.1 Extra sounds removes two prompts that were moved into the Core packages in the 1.6 Core sounds release. ASTERISK-27142 #close Change-Id: I82f017812b0ea9599e19dd4635afd55611f13ee7 2017-07-21 11:17 +0000 [063c9a935f] George Joseph * Update make_ari_stubs in master to make the version 16 Ready for next major version Change-Id: If9dc99b3b78768529e69a297d8f87e23582ca6d0 2017-07-21 11:24 +0000 [ba52a36ff2] George Joseph * Restore the incorrectly deleted spandspflow2pcap.log Change-Id: Iafe78cf0fb1e7064223d4dea279eeb776c8fa8e5 2017-07-20 10:52 +0000 [3e8d628c0e] George Joseph * Update AMI and ARI versions for master/15 and update UPDATE.txt AMI goes from 3.2.0 to 4.0.0 ARI goes from 2.0.0 to 3.0.0 Copied UPGRADE.txt -> UPGRADE-15.txt Created new UPGRADE.txt Removed a log file that was accidentally checked in a while ago Change-Id: I1c794f910038459b13e16f9c3a12c44e56f142f7 2017-07-20 09:57 +0000 [25c9464325] Sean Bright * corosync: Fix corosync library name in configure.ac Also add new corosync packages to install_prereq. Reported by Travis Ryan in #asterisk-dev Change-Id: Ib861c95ba630fed62dc54e56784ad8446ed9d2db 2017-07-17 11:01 +0000 [680c491a62] Joshua Colp * bridge_softmix / res_rtp_asterisk: Fix packet loss and renegotiation issues. This change does a few things to improve packet loss and renegotiation: 1. On outgoing RTP streams we will now properly reflect out of order packets and packet loss in the sequence number. This allows the remote jitterbuffer to better reorder things. 2. Video updates can now be discarded for a period of time after one has been sent to prevent flooding of clients. 3. For declined and removed streams we will now release any media session resources associated with them. This was not previously done and caused an issue where old state was being used for a new stream. 4. RTP bundling was not actually removing bundled RTP instances from the parent. This has been resolved by removing based on the RTP instance itself and not the SSRC. 5. The code did not properly handle explicitly unbundling an RTP instance from its parent. This now works as expected. ASTERISK-27143 Change-Id: Ibd91362f0e4990b6129638e712bc8adf0899fd45 2017-07-18 15:04 +0000 [e7d9e42616] Benjamin Keith Ford * pjsip: Increase maximum packet size. The maximum packet size for PJSIP has been increased to handle the multiple streams being added for WebRTC. Change-Id: I9ea1e8d02668c544acadcb1c6200e1cc1bd588b3 2017-07-17 07:19 +0000 [bcd3f65174] Joshua Colp * bridge_softmix: Don't reorder streams on participant leaving. When a participant leaves a bridge while operating in SFU mode their respective stream on every other participant needs to be removed. Leaving the stream out of the new topology results in every stream after it being moved and reordered. This causes problems with clients. Instead simply mark the stream as removed which leaves it in place in the SDP and doesn't reorder or touch any other streams. ASTERISK-27136 Change-Id: I4b3f840adcdf69b83842b0d8a737665ba0ef9cb1 2017-07-16 12:31 +0000 [f48695ce5b] Joshua Colp * bridge_softmix: Use removed stream spots when renegotiating. Streams are never truly removed in SDP, they still occupy a location within the SDP. This location can be reused by another stream if it so chooses. This change takes advantage of this such that if a new stream is needing to be added for a new participant any removed streams are instead replaced first. This reduces the size of the SDP and the number of streams. ASTERISK-27134 Change-Id: I95cdcfd55cf47e02ea52abb5d94008db3fb68b1d 2017-07-16 12:18 +0000 [942ee54b53] Joshua Colp * res_rtp_asterisk: Use RTP component for ICE if RTCP-MUX is in use. This change makes it so that if an RTCP packet is being sent the RTP ICE component is used for sending if RTCP-MUX is in use. ASTERISK-27133 Change-Id: I6200f611ede709602ee9b89501720c29545ed68b 2017-07-14 01:25 +0000 [26f149ab0a] Sergej Kasumovic * app_confbridge: Make sure name recordings are always removed from the filesystem This commit fixes two possible scenarios: * When recording name and if during recording you hangup, file is never removed. This is due to the fact file location is nulled. * When recording name and if you hangup during thank-you prompt, file is never removed. ASTERISK-27123 #close Change-Id: I39b7271408b4b54ce880c5111a886aa8f28c2625 2017-07-14 01:11 +0000 [d3f5b265c7] Sergej Kasumovic * chan_iax2: On reload make sure to check for existing MWI subscription On every reload of chan_iax2 module, MWI subscription was added, which results in additional taskprocessors being accumulated over time. This commit fixes it by making sure we check for existing subscription first. This was verified with 'core show taskprocessors' CLI command. ASTERISK-27122 #close Change-Id: Ie2ef528fd5ca01b933eeb88188cc10967899cfb9 2017-07-10 18:17 +0000 [7da6ddda30] Kevin Harwell * res_pjsip: Add "webrtc" configuration option This patch creates a new configuration option called "webrtc". When enabled it defaults and enables the following options that are needed in order for webrtc to work in Asterisk: rtcp-mux, use_avpf, ice_support, and use_received_transport=enabled media_encryption=dtls dtls_verify=fingerprint dtls_setup=actpass When "webrtc" is enabled, this patch also parses the "msid" media level attribute from an SDP. It will also appropriately add it onto the outgoing session when applicable. Lastly, when "webrtc" is enabled h264 RTCP FIR feedback frames are now sent. ASTERISK-27119 #close Change-Id: I5ec02e07c5d5b9ad86a34fdf31bf2f9da9aac6fd 2017-07-13 15:43 +0000 [3fbb4a0a08] Rusty Newton * Sounds: Update for core sounds 1.6 release Added necessary lines to make the en_NZ language set selectable and to get core sounds 1.6 pulled down. ASTERISK-26807 #close ASTERISK-25816 #close ASTERISK-26274 #close Change-Id: I84e4dd4696568cc1ba318d12ac4b075461d6eed4 2017-07-10 14:04 +0000 [78a50b0343] Corey Farrell * core: Add PARSE_TIMELEN support to ast_parse_arg and ACO. This adds support for parsing timelen values from config files. This includes support for all flags which apply to PARSE_INT32. Support for this parser is added to ACO via the OPT_TIMELEN_T option type. Fixes an issue where extra characters provided to ast_app_parse_timelen were ignored, they now cause an error. Testing is included. ASTERISK-27117 #close Change-Id: I6b333feca7e3f83b4ef5bf2636fc0fd613742554 2017-06-30 13:55 +0000 [065c3005ad] Joshua Colp * res_rtp_asterisk / res_pjsip: Add support for BUNDLE. BUNDLE is a specification used in WebRTC to allow multiple streams to use the same underlying transport. This reduces the number of ICE and DTLS negotiations that has to occur to 1 normally. This change implements this by adding support for it to the RTP SDP module in PJSIP. BUNDLE can be turned on using the "bundle" option and on an offer we will offer to bundle streams together. On an answer we will accept any bundle groups provided. Once accepted each stream is bundled to another RTP instance for transport. For the res_rtp_asterisk changes the ability to bundle an RTP instance to another based on the SSRC received from the remote side has been added. For outgoing traffic if an RTP instance is bundled to another we will use the other RTP instance for any transport related things. For incoming traffic received from the transport instance we look up the correct instance based on the SSRC and use it for any non-transport related data. ASTERISK-27118 Change-Id: I96c0920b9f9aca7382256484765a239017973c11 2017-07-11 09:55 +0000 [8b535a406b] Torrey Searle * res/res_stasis_snoop: generate silence when audiohook returns null Currently when rtp is paused, no packets are written to the recorded audio file, causing the silence to be skipped and recording not properly time aligned. The read handler as been adapted to return a silence frame of the correct size. ASTERISK-27128 #close Change-Id: I2d7f60650457860b9c70907b14426756b058a844 2017-06-22 07:47 +0000 [d42a9cc9dc] Torrey Searle * res/res_pjsip_t38 ensure t38 requests get rejected quickly arm the t38 webhook always, so we can correctly reject a T38 negotiation request when t38 is disabled on a channel Change-Id: Ib1ffe35aee145d4e0fe61dd012580be11aae079d 2017-07-12 13:24 +0000 [6b138046e7] Corey Farrell * core: Add digit filtering to ast_waitfordigit_full This adds a parameter to ast_waitfordigit_full which can be used to only stop waiting when certain expected digits are received. Any unexpected DTMF digits are simply ignored. This also creates a new dialplan application WaitDigit. ASTERISK-27129 #close Change-Id: Id233935ea3d13e71c75a0861834c5936c3700ef9 2017-07-11 04:48 +0000 [b54eb167b4] Holger Hans Peter Freyther * app_playback.c: Use the timezonename parameter In say_date_generic the timezonename parameter is passed but never used. Fix it by passing it to the ast_localtime function. ASTERISK-27124 Change-Id: I63106b8db10426d417d7275f22554a616e92fae4 2017-07-12 15:07 +0000 [e83b9d141a] Sean Bright * basic-pbx: Remove res_pjsip_multihomed from sample config ASTERISK-27127 #close Reported by: HZMI8gkCvPpom0tM Change-Id: I2b0c54570d58156e37166ac536728af3b6c01789 2017-07-11 14:33 +0000 [7f09fd2c2f] Joshua Colp * bridge/core_unreal: Fix SFU bugs with forwarding frames. This change fixes a few things uncovered during SFU testing. 1. Unreal channels incorrectly forwarded video frames when no video stream was present on them. This caused a crash when they were read as the core requires a stream to exist for the underlying media type. The Unreal channel will now ensure a stream exists for the media type before forwarding the frame and if no stream exists then the frame is dropped. 2. Mapping of frames during bridging from the stream number of the underlying channel to the stream number of the bridge was done in the wrong location. This resulted in the frame getting dropped. This mapping now occurs on reading of the frame from the channel. 3. Bridging was using the wrong ast_read function resulting in it living in a non-multistream world. 4. In bridge_softmix when adding new streams to existing channels the wrong stream topology was copied resulting in no streams being added. Change-Id: Ib7445722c3219951d6740802a0feddf2908c18c8 2017-07-11 07:26 +0000 [b7a875778a] George Joseph * res_musiconhold: Add kill_escalation_delay, kill_method to class By default, when res_musiconhold reloads or unloads, it sends a HUP signal to custom applications (and all descendants), waits 100ms, then sends a TERM signal, waits 100ms, then finally sends a KILL signal. An application which is interacting with an external device and/or spawns children of its own may not be able to exit cleanly in the default times, expecially if sent a KILL signal, or if it's children are getting signals directly from res_musiconhoild. * To allow extra time, the 'kill_escalation_delay' class option can be used to set the number of milliseconds res_musiconhold waits before escalating kill signals, with the default being the current 100ms. * To control to whom the signals are sent, the "kill_method" class option can be set to "process_group" (the default, existing behavior), which sends signals to the application and its descendants directly, or "process" which sends signals only to the application itself. Change-Id: Iff70a1a9405685a9021a68416830c0db5158603b 2017-07-05 12:44 +0000 [5d86da61a6] Benjamin Keith Ford * manager: Remove AMI "Queues" action. When performing the "Queues" action via AMI, it outputs the same text that the Asterisk CLI outputs when running a "queue show" command, which does not conform with the AMI spec. "QueueStatus" already does what the "Queues" action should do, so instead of correcting the output, the "Queues" action will be removed and "QueueStatus" should be used instead. ASTERISK-27073 #close Reported by: Brian Change-Id: Id11743859758255b69cc3a557750d7a56c6d16f8 2017-07-03 07:30 +0000 [d58ef31acd] Tzafrir Cohen * Avoid setting maxfiles for a remote asterisk Setting maxfiles (maximum number of open files) has no practical effect on a remote asterisk (rasterisk, rasterisk -x). It has an ill effect of printing an extra message, which may be annoying in case of -x. ASTERISK-27105 #close Change-Id: Iaf9eb344e4b4b517df91b736b27ec55f6a6921a2 2017-07-05 15:31 +0000 [303f935a50] George Joseph * http.c: Reduce log spam Messages like "fwrite() failed: Connection reset by peer" are no help whatsoever, especially since they can be caused simply by a client disconnecting. * Make those WARNINGs DEBUGs. * Check the return from ast_iostream_printf of headers. Change-Id: I17bd5f3621514152a7b2b263c801324c5e96568b 2017-07-07 11:19 +0000 [8f72128e66] Benjamin Keith Ford * res_pjsip: Fix crash with from_user containing invalid characters. If the from_user field contains certain characters (like @, {, ^, etc.), PJSIP will return a null value for the URI when attempting to parse it. This causes a crash when trying to dial out through a trunk that contains these invalid characters in its from_user field. This change checks the configuration and ensures that an endpoint will not be created if the from_user contains an invalid character. It also adds a null check to the PJSIP URI parsing as a backup. ASTERISK-27036 #close Reported by: Maxim Vasilev Change-Id: I0396fdb5080604e0bdf1277464d5c8a85db913d0 2017-06-27 19:27 +0000 [03ae8b0105] Richard Mudgett * json.c: Add backtrace log to find 'Invalid UTF-8 string' errors Change-Id: I9020ff9f2b3749904317c0c173f47a1bbed6f929 2017-07-05 13:39 +0000 [9cd8a1df79] Michael Walton (modified) * res_rtp_asterisk.c: Fix TURN deadlock by using ICE session group lock. When a message is received on the TURN socket, the code processing the message needs to call into the ICE/STUN session for further processing. This code path locks the TURN group lock then the ICE/STUN group lock. In another thread an ICE/STUN timer can fire off to send a keep alive message over the TURN socket. In this code path, the ICE/STUN group lock is obtained then the TURN group lock is obtained to send the packet. A classic deadlock case if the group locks are not the same. * Made TURN get created using the ICE/STUN session's group lock. NOTE: I was originally concerned that the ICE/STUN session can get recreated by ice_reset_session() for an event like RTCP multiplexing causing a change during SDP negotiation. In this case the TURN group lock would become different. However, TURN is also recreated as part of the ICE/STUN recreation in ice_create() when all known ICE candidates are added to the new ICE session. While the ICE/STUN and TURN sessions are being recreated there is a period where the group locks could be different. ASTERISK-27023 #close Patches: res_rtp_asterisk-turn-deadlock-fix.patch (license #6502) patch uploaded by Michael Walton (modified) Change-Id: Ic870edb99ce4988a8c8eb6e678ca7f19da1432b9 2017-07-06 05:55 +0000 [7a4f577eb7] George Joseph * Fix alembic branches Change-Id: I04f607f084bda9b1b7f626e8e9735c37dc751187 2017-06-23 11:17 +0000 [1028f64be4] Richard Mudgett * bridge_native_rtp.c: Fix direct media video RTP instance ACL check. The video stream was using the audio stream RTP instance addresses to check if the video RTP gets directed to an allowed direct media Access Control List (ACL) address. There is no guarantee that the video RTP instance uses the same addresses as the audio RTP instance. This looks like it has been a bug since v11 when direct media ACL was first added to chan_sip and then faithfully reproduced through a couple code refactorings into the new bridging architecture. Change-Id: I8ddd56320e0eea769f3ceed3fa5b6bdfb51d681a 2017-07-05 10:29 +0000 [325eeced6a] Sean Bright * core: Remove 'Data Retrieval API' This API was not actively maintained, was not added to new modules (such as res_pjsip), and there exist better alternatives to acquire the same information, such as the ARI. Change-Id: I4b2185a83aeb74798b4ad43ff8f89f971096aa83 2017-06-19 11:22 +0000 [d556c67f9f] Rodrigo Ramírez Norambuena * app_queue: Add change priority of call This patch include a feature to change the priority a caller in a queue by CLI and AMI. Change-Id: I55d520d71cc1cefe9a9b81fefaefc14679e96133 2017-07-03 10:59 +0000 [910c05455d] Alexander Traud * chan_sip: Only when different, add TCP|TLS in autodomain (SIP Domain Support). When sip.conf contained tcpenable=yes and autodomain=yes, the TCP domain was added in any case, because of a local Boolean-negation error of the return value of ast_sockaddr_cmp. After fixing this error for TCP and TLS, the TLS domain was still always added with tlsenable=yes, because the domains were not compared just on the address but also on the port – and TLS is always on a different port than UDP/TCP. ASTERISK-27106 Change-Id: I14fe9e319e238320b094016980445ef3a5b3337c 2017-07-03 10:38 +0000 [4398aa8fa4] Alexander Traud * chan_sip: Fix a typo for tlsbindaddr in autodomain (SIP Domain Support). Because of a copy-and-paste error when the struct ast_sockaddr changed, tlsbindaddr was not added, when sip.conf contained autodomain=yes; see "show sip domains" on the command-line interface (CLI) of Asterisk. ASTERISK-27106 Change-Id: I3d0957150017c223136968ef1266f275d0d6695e 2017-06-29 13:58 +0000 [950b39a4f5] Sean Bright * app_voicemail: Cleanup ODBC connection handling The primary focus of this patch is adding a missing call to ast_odbc_release_obj(), but is also a general cleanup of the ODBC related code in app_voicemail. ASTERISK-27093 #close Change-Id: I8e285142eaeb3146b4287a928276b70db76c902b 2017-06-30 23:57 +0000 [50ddb56dad] Corey Farrell * channel: Clear channel flag in error branch. Clear channel flag AST_FLAG_END_DTMF_ONLY in ast_waitfordigit_full when ast_read returns NULL. ASTERISK-27100 #close Change-Id: Id3039e9a4e74e0cb359f636c9fd0c9740ebf7d9d 2017-06-29 18:27 +0000 [b485f6c59c] Richard Mudgett * pjsip_distributor.c: Fix deadlock with TCP type transports. When a SIP message comes in on a transport, pjproject obtains the lock on the transport and pulls the data out of the socket. Unlike UDP, the TCP transport does not allow concurrent access. Without concurrency the transport lock is not released when the transport's message complete callback is called. The processing continues and eventually Asterisk starts processing the SIP message. The first thing Asterisk tries to do is determine the associated dialog of the message to determine the associated serializer. To get the associated serializer safely requires us to get the dialog lock. To send a request or response message for a dialog, pjproject obtains the dialog lock and then obtains the transport lock. Deadlock can result because of the opposite order the locks are obtained. * Fix the deadlock by obtaining the serializer associated with the dialog another way that doesn't involve obtaining the dialog lock. In this case, we use an ao2 container to hold the associated endpoint and serializer. The new locks are held a brief time and won't overlap other existing lock times. ASTERISK-27090 #close Change-Id: I9ed63f4da9649e9db6ed4be29c360968917a89bd 2017-06-29 18:22 +0000 [65a5ac0168] Richard Mudgett * pjsip_distributor.c: Fix unidentified_requests hash functions. The OBJ_SEARCH_xxx defines should not be used as if they were individual bits. They represent a multi-bit enumeration value field. Change-Id: I32abc9a475396dab02402a7014357dd94284e17b 2017-06-29 15:06 +0000 [e7d41050e0] Kevin Harwell * app_stream_echo: misc bug fixes Fixed the following bugs: * calls to stream_echo_write had the last two parameters swapped * ast_read should have been ast_read_stream * added a null check on the frame's subclass format This also resets the update_sent flag upon receiving SRRCHANGE control frame. This will then force a video update. ASTERISK-26997 Change-Id: I6ad7c8253559b800800433c52339e7f5aa583566 2017-06-29 14:56 +0000 [7df7b8a90c] Kevin Harwell * res_rtp_asterisk: trigger source change control frame when dtls is established There needed to be a way to notify handlers upstream that DTLS had been established. This patch makes it so once DTLS has been estalished a source change control frame is put into the read queue. Any handlers can then watch for that frame and trigger off of it. ASTERISK-27096 #close Change-Id: I27ff344f5a8c691a1890dfe3254a4b1a49e7f4a0 2017-06-30 08:31 +0000 [f573e599c0] George Joseph * pjproject_bundled: Allow passing configure options to bundled There wasn't any good way to pass options like --host or --build down to the pjproject configure which makes cross-compiling difficult. * Added a new PJPROJECT_CONFIGURE_OPTS environment variable which can be used to pass arbitrary options to pjproject configure. * Automatically set the pjproject configure --host and --build options to match those supplied for the asterisk configure. ASTERISK-27097 #close Reported-by: Kinsey Moore Change-Id: I5fa776e110262851173002a26ffe1172e4c35b2e 2017-06-29 14:50 +0000 [c0c99c7618] George Joseph * chan_pjsip: Fix ability to send UPDATE on COLP When connected_line_method is "invite", we're supposed to determine if the client can support UPDATE and if it can, send UPDATE instead of INVITE to avoid the SDP renegotiation. Not only was pjproject not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing that invite_tsx wasn't NULL which isn't always the case. * Updated chan_pjsip/update_connected_line_information to drop the requirement that invite_tsx isn't NULL. * Submitted patch to pjproject sip_inv.c that sets the PJSIP_INV_SUPPORT_UPDATE flag correctly. * Updated pjsip.conf.sample to clarify what happens when "invite" is specified. ASTERISK-27095 Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560 2017-06-15 03:12 +0000 [fb7247c57c] Torrey Searle * res_pjsip: Add DTMF INFO Failback mode The existing auto dtmf mode reverts to inband if 4733 fails to be negotiated. This patch adds a new mode auto_info which will switch to INFO instead of inband if 4733 is not available. ASTERISK-27066 #close Change-Id: Id185b11e84afd9191a2f269e8443019047765e91 2017-06-29 03:47 +0000 [ab7d99e62d] Niklas Larsson * app_queue: Add priority to AMI QueueStatus Add priority to callers in AMI QueueStatus response ASTERISK-27092 #close Change-Id: I8d1f737a72c7c38f4cfe1a4ee3ecc0a4f85bd199 2017-05-30 09:12 +0000 [45df25a579] Mark Michelson * chan_pjsip: Add support for multiple streams of the same type. The stream topology (list of streams and order) is now stored with the configured PJSIP endpoints and used during the negotiation process. Media negotiation state information has been changed to be stored in a separate object. Two of these objects exist at any one time on a session. The active media state information is what was previously negotiated and the pending media state information is what the media state will become if negotiation succeeds. Streams and other state information is stored in this object using the index (or position) of each individual stream for easy lookup. The ability for a media type handler to specify a callback for writing has been added as well as the ability to add file descriptors with a callback which is invoked when data is available to be read on them. This allows media logic to live outside of the chan_pjsip module. Direct media has been changed so that only the first audio and video stream are directly connected. In the future once the RTP engine glue API has been updated to know about streams each individual stream can be directly connected as appropriate. Media negotiation itself will currently answer all the provided streams on an offer within configured limits and on an offer will use the topology created as a result of the disallow/allow codec lines. If a stream has been removed or declined we will now mark it as such within the resulting SDP. Applications can now also request that the stream topology change. If we are told to do so we will limit any provided formats to the ones configured on the endpoint and send a re-invite with the new topology. Two new configuration options have also been added to PJSIP endpoints: max_audio_streams: determines the maximum number of audio streams to offer/accept from an endpoint. Defaults to 1. max_video_streams: determines the maximum number of video streams to offer/accept from an endpoint. Defaults to 1. ASTERISK-27076 Change-Id: I8afd8dd2eb538806a39b887af0abd046266e14c7 2017-06-28 09:03 +0000 [642f8356ab] Joshua Colp * res_rtp_asterisk: Fix issues with ICE renegotiation. When re-inviting to add more streams it is possible for the role of existing ICE sessions to be changed to the incorrect value. This results in subsequent refreshes within the sessions getting a role conflict and the ICE session breaking down. This change only sets the role to be the new value if an ICE renegotiation is actually going to happen, otherwise the existing role is preserved. As well if we encounter a situation where a unidirectional ICE negotiation happens and the other side does not send us candidates we will not store any information for sending traffic, even though we know where they are reachable. This change fixes this by using the source of the ICE traffic itself as the target if no candidates are known and we receive some ICE traffic. ASTERISK-27088 Change-Id: I71228181e358917fcefc3100fad21b2fc02a59a9 2017-06-27 10:46 +0000 [a48d3e4d31] Torrey Searle * res/res_pjsip_t38: fix incorrect increment of media_count The T38 sdp callback incorrectly has a side effect of incrementing the media_count. This can lead to core dumps. Change-Id: I7bb2f4987de4046ec52cfc34e5ea0662dae32af8 2017-06-08 22:50 +0000 [80e11bd79b] George Joseph * bridge_native_rtp: Keep rtp instance refs on bridge_channel There have been reports of deadlocks caused by an attempt to send a frame to a channel's rtp instance after the channel has left the native bridge and been destroyed. This patch effectively causes the bridge channel to keep a reference to the glue and both the audio and video rtp instances so what gets started will get stopped. ASTERISK-26978 #close Reported-by: Ross Beer Change-Id: I9e1ac49fa4af68d64826ccccd152593cf8cdb21a 2017-06-27 04:37 +0000 [7827755570] Ivan Poddubny * app_queue: Fix returning to dialplan when a queue is empty The fix for ASTERISK-25665 introduced a regression. The return value of queue_exec used to be 0 in case of leavewhenempty but it was changed to -1 (returned from wait_our_turn and passed transparently by queue_exec), thus leading to hangup instead of returning back to dialplan. This commit resets the value back to 0 in this case, restoring original behavior. ASTERISK-27065 #close Reported by: Marek Cervenka Change-Id: Id9c83b75aeda463250155e88c5004be52bbca5ac 2017-06-19 17:21 +0000 [0cef7b9d4e] Alexei Gradinari * app_voicemail: IMAP connection control A new global option "imap_poll_logout" was added to specify whether need to disconnect from the IMAP server after polling of mailboxes. ASTERISK-27068 #close Closing IMAP connection after loading mailbox from voicemail.conf ASTERISK-24052 #close Change-Id: Ib7558ba04516240a32b65f42e9be64372a0ae12a 2017-06-21 17:57 +0000 [975e271b01] Richard Mudgett * res_pjsip_mwi.c: Eliminate RAII_VAR in contact delete observer Change-Id: I0bc97c6608de1d1a4228826b3b3be43f162f05f3 2017-06-16 18:08 +0000 [34db4c3993] Alexei Gradinari * res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact Do not need to unsubscribe/subscribe on creating the ednpoint's contact. The modified function create_mwi_subscriptions_for_endpoint adds the subscription only if it does not exist. The subscriptions aren't added for active contacts which are retrieved on startup from realtime if mwi_disable_initial_unsolicited=yes. Because the mwi_contact_added is not called. So the subscriptions also should be created on updating contact. ASTERISK-26230 #close Change-Id: I47e265af9296ca09aa42a316fdacac104148cee4 2017-06-20 16:05 +0000 [27dae55fb6] Kevin Harwell * core_local: local channel data not being properly unref'ed and unlocked In an earlier version of Asterisk a local channel [un]lock all functions were added in order to keep a crash from occurring when a channel hung up too early during an attended transfer. Unfortunately, when a transfer failure occurs and depending on the timing, the local channels sometime do not get properly unlocked and deref'ed after being locked and ref'ed. This happens because the underlying local channel structure gets NULLed out before unlocking. This patch reworks those [un]lock functions and makes sure the values that get locked and ref'ed later get unlocked and deref'ed. ASTERISK-27074 #close Change-Id: Ice96653e29bd9d6674ed5f95feb6b448ab148b09 2017-06-20 16:01 +0000 [45a1f4e2ae] Kevin Harwell * bridge: stuck channel(s) after failed attended transfer If an attended transfer failed it was possible for some of the channels involved to get "stuck" because Asterisk was not hanging up the transfer target. This patch ensures Asterisk hangs up the transfer target when an attended transfer failure occurs. ASTERISK-27075 #close Change-Id: I98a6ecd92d3461ab98c36f0d9451d23adaf3e5f9 2017-05-19 23:28 +0000 [d2fbbdd692] Richard Mudgett * SDP: Create declined m= SDP lines using remote SDP if applicable. * Update SDP unit tests to test negotiating with declined streams. Generation of declined m= lines created and responded tested. Change-Id: I5cb99f5010994ab0c7d9cf2d395eca23fab37b98 2017-05-02 18:51 +0000 [3a18a09030] Richard Mudgett * SDP: Rework SDP offer/answer model and update capabilities merges. The SDP offer/answer model requires an answer to an offer before a new SDP can be processed. This allows our local SDP creation to be deferred until we know that we need to create an offer or an answer SDP. Once the local SDP is created it won't change until the SDP negotiation is restarted. An offer SDP in an initial SIP INVITE can receive more than one answer SDP. In this case, we need to merge each answer SDP with our original offer capabilities to get the currently negotiated capabilities. To satisfy this requirement means that we cannot update our proposed capabilities until the negotiations are restarted. Local topology updates from ast_sdp_state_update_local_topology() are merged together until the next offer SDP is created. These accumulated updates are then merged with the current negotiated capabilities to create the new proposed capabilities that the offer SDP is built. Local topology updates are merged in several passes to attempt to be smart about how streams from the system are matched with the previously negotiated stream slots. To allow for T.38 support when merging, type matching considers audio and image types to be equivalent. First streams are matched by stream name and type. Then streams are matched by stream type only. Any remaining unmatched existing streams are declined. Any new active streams are either backfilled into pre-merge declined slots or appended onto the end of the merged topology. Any excess new streams above the maximum supported number of streams are simply discarded. Remote topology negotiation merges depend if the topology is an offer or answer. An offer remote topology negotiation dictates the stream slot ordering and new streams can be added. A remote offer can do anything to the previously negotiated streams except reduce the number of stream slots. An answer remote topology negotiation is limited to what our offer requested. The answer can only decline streams, pick codecs from the offered list, or indicate the remote's stream hold state. I had originally kept the RTP instance if the remote offer SDP changed a stream type between audio and video since they both use RTP. However, I later removed this support in favor of simply creating a new RTP instance since the stream's purpose has to be changing anyway. Any RTP packets from the old stream type might cause mischief for the bridged peer. * Added ast_sdp_state_restart_negotiations() to restart the SDP offer/answer negotiations. We will thus know to create a new local SDP when it is time to create an offer or answer. * Removed ast_sdp_state_reset(). Save the current topology before starting T.38. To recover from T.38 simply update the local topology to the saved topology and restart the SDP negotiations to get the offer SDP renegotiating the previous configuration. * Allow initial topology for ast_sdp_state_alloc() to be NULL so an initial remote offer SDP can dictate the streams we start with. We can always update the local topology later if it turns out we need to offer SDP first because the remote chose to defer sending us a SDP. * Made the ast_sdp_state_alloc() initial topology limit to max_streams, limit to configured codecs, handle declined streams, and discard unsupported types. * Convert struct ast_sdp to ao2 object. Needed to easily save off a remote SDP to refer to later for various reasons such as generating declined m= lines in the local SDP. * Improve converting remote SDP streams to a topology including stream state. A stream state of AST_STREAM_STATE_REMOVED indicates the stream is declined/dead. * Improve merging streams to take into account the stream state. * Added query for remote hold state. * Added maximum streams allowed SDP config option. * Added ability to create new streams as needed. New streams are created with configured default audio, video, or image codecs depending on stream type. * Added global locally_held state along with a per stream local hold state. Historically, Asterisk only has a global locally held state because when the we put the remote on hold we do it for all active streams. * Added queries for a rejected offer and current SDP negotiation role. The rejected query allows the using module to know how to respond to a failed remote SDP set. Should the using module respond with a 488 Not Acceptable Here or 500 Internal Error to the offer SDP? * Moved sdp_state_capabilities.connection_address to ast_sdp_state. There seems no reason to keep it in the sdp_state_capabilities struct since it was only used by the ast_sdp_state.proposed_capabilities instance. * Callbacks are now available to allow the using module some customization of negotiated streams and to complete setting up streams for use. See the typedef doxygen for each callback for what is allowable and when they are called. * Added topology answerer modify callback. * Added topology pre and post apply callbacks. * Added topology offerer modify callback. * Added topology offerer configure callback. * Had to rework the unit tests because I changed how SDP topologies are merged. Replaced several unit tests with new negotiation tests. Change-Id: If07fe6d79fbdce33968a9401d41d908385043a06 2017-06-18 19:24 +0000 [70d2ccb9da] Corey Farrell * Core: Add support for systemd socket activation. This change adds support for socket activation of certain SOCK_STREAM listeners in Asterisk: * AMI / AMI over TLS * CLI * HTTP / HTTPS Example systemd units are provided. This support extends to any socket which is initialized using ast_tcptls_server_start, so any unknown modules using this function will support socket activation. Asterisk continues to function as normal if socket activation is not enabled or if systemd development headers are not available during build. ASTERISK-27063 #close Change-Id: Id814ee6a892f4b80d018365c8ad8d89063474f4d 2017-06-19 11:28 +0000 [a7488f8a70] Rodrigo Ramírez Norambuena * cdr: fix mistake spelling of a word for Unanswered. Change-Id: I7a610bef369924523a445c7e849ee88cc45dc5df 2017-06-12 16:17 +0000 [d7b6e06abb] Alexei Gradinari * res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact If the endpoint's last contact is deleted unsolicited MWI has to be unsubscribed. ASTERISK-27051 #close Change-Id: I33e174e0b9dba0998927d16d6d100fda5c7254e0 2017-06-16 09:31 +0000 [854a6de819] George Joseph * res_stasis: Plug reference leak on stolen channels When a stasis channel is stolen by another app, the control structure is unreffed but never unlinked from the app_controls container. This causes the channel reference to leak. Added OBJ_UNLINK to the callback in channel_stolen_cb. Also added some additional channel lifecycle debug messages to channel.c. ASTERISK-27059 #close Repoorted-by: George Joseph Change-Id: Ib820936cd49453f20156971785e7f4f182c56e14 2017-06-16 14:56 +0000 [e33bd96638] Matthew Fredrickson * formats/format_g729: Fix typo in comment There was a typo in a comment. This commit is to fix the typo. ASTERISK-27060 #close Change-Id: Ic2699f8dbeaacd58ccb6ec3203e853e1babe3235 2017-06-08 12:28 +0000 [0ad95bc8a0] Frederic LE FOLL * Core/PBX: Deadlock between dialplan execution and application unregistration. Not easy to reproduce, but we have noticed deadlocks when unloading a module while dialplan is handling a request. The deadlock is between : 1) Dialplan execution: pbx_extension_helper() first taking conlock, then pbx_findapp() [when called] asking for lock on apps list. 2) Application unregistration: ast_unregister_application() first taking lock on apps list, then unreference_cached_app() [when called] asking for conlock. As a protection, I suggest to modify ast_unregister_application(), so that it anticipates the need of conlock, before taking the lock on apps list. The side effect is a longer unavailability of conlock when unregistering an application. ASTERISK-27041 Change-Id: I0db0f1eb320da6a5758cce3a47d765be1face8e2 2017-06-12 09:23 +0000 [7a46309d3d] Alexei Gradinari * res_pjsip: New endpoint option "notify_early_inuse_ringing" This option was added to control whether to notify dialog-info state 'early' or 'confirmed' on Ringing when already INUSE. The value "yes" is useful for some SIP phones (Cisco SPA) to be able to indicate and pick up ringing devices. ASTERISK-26919 #close Change-Id: Ie050bc30023543c7dfb4365c5be3ce58c738c711 2017-06-15 13:48 +0000 [53b7df82f4] Alexei Gradinari * app_voicemail: IMAP logout on reload/unload Closing IMAP connection on module reload or unload. ASTERISK-24052 #close Change-Id: I2a40182aa9ef249fa6865d33570430e9ada68525 2017-03-30 09:33 +0000 [9aeab4aced] Jan Friesse * res_corosync: Change thread stack size In Corosync 2.x libraries were changed to use LibQB IPC. Sadly LibQB IPC doesn't support copy-free access to received buffer, so Corosync libraries were rewritten to use stack as buffer. Mostly the needed stack size is quite small, but for all *_dispatch functions, 1MiB is needed. Asterisk function ast_pthread_create_background set stack size for new thread to much smaller AST_BACKGROUND_STACKSIZE (~500KiB). This results in Asterisk crash when running with Corosync 2.x. Patch solves this issue by creating it's own version of ast_pthread_create_background which sets stack size to much higher value (actually it's AST_BACKGROUND_STACKSIZE + 3MiB). Another problem may appear when "corosync show members" netconsole command is executed. It is also executed in thread and also has only 500KiB stack size. Sadly it calls corosync_cfg_get_node_addrs which again needs at least 1MiB stack. Solution is to use HAVE_COROSYNC_CFG_STATE_TRACK as a discriminator between Corosync 1.x and 2.x. If 1.x is found, nothing changes. If 2.x is found, NodeID is displayed instead of IP address. ASTERISK-25370 #close Reported by: mdu113 Change-Id: Id95b0d21ab6e708e7d74ad8786c587211676fa08 2017-06-13 11:33 +0000 [1ac0096512] George Joseph * res_ari: Add "module loaded" check to ari stubs The recent change to make the use of LOAD_DECLINE more consistent caused res_ari to unload itself before declining if the ari.conf file wasn't found. The ari stubs though still tried to use the configuration resulting in segfaults. This patch creates a new CHECK_ARI_MODULE_LOADED macro which tests to see if res_ari is actually loaded and causes the stubs to also decline if it isn't. The macro was then added to the mustache template's "load_module" function. ASTERISK-27026 #close Reported-by: Ronald Raikes Change-Id: I263d56efa628ee3c411bdcd16d49af6260c6c91d 2017-06-15 12:33 +0000 [11ec2945c7] Richard Mudgett * chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read. The construction of the returned string assumed incorrectly that the supplied buffer would always be initialized as an empty string. If it is not an empty string we could overrun the supplied buffer by the length of the non-empty buffer string plus one. It is also theoreticaly possible for the supplied buffer to be overrun by a string terminator during a read operation even if the supplied buffer is an empty string. * Fix the assumption that the supplied buffer would already be an empty string. The buffer is not guaranteed to contain an empty string by all possible callers. * Fix string terminator buffer overrun potential. Change-Id: If6a0806806527678c8554b1dcb34fd7808aa95c9 2017-06-08 11:38 +0000 [e563a1920e] Richard Mudgett * SDP: Add get/set option calls for RTP sched context per type. Change-Id: I82dc75c63c48904e9e5a49e2205dcc06e88487e4 2017-05-11 18:49 +0000 [716abaf33d] Richard Mudgett * SDP: Search for the ice-lite attribute in the right place. * Pulled finding the rtcp-mux attribute flag out of the ICE candidate for loop. Also ordered the RTCP ICE candidate skip test to fail earlier. Change-Id: I8905d9c68563027a46cd3ae14dbcc27e9c814809 2017-05-11 18:46 +0000 [a95584d079] Richard Mudgett * SDP: Set the remote c= line in RTP instance. Change-Id: I23b646392082deab65bedeb19b12dcbcb9216d0c 2017-06-09 19:03 +0000 [06265b8c8a] Richard Mudgett * stream: Add ast_stream_topology_del_stream() and unit test. Change-Id: If07e3c716a2e3ff85ae905c17572ea6ec3cdc1f9 2017-05-11 14:09 +0000 [0fdb99c268] Richard Mudgett * SDP: Add t= line in sdp_create_from_state() Change-Id: I4060391328a893101ed87d0d9bacbbab4fd8b141 2017-06-14 13:07 +0000 [4797a8bb81] Richard Mudgett * stream: Ignore declined streams for some topology calls. * Made ast_format_cap_from_stream_topology() not include any formats from declined streams. * Made ast_stream_topology_get_first_stream_by_type() ignore declined streams to return the first active stream of the type. * Updated unit tests to check these changes have the expected effect. Change-Id: Iabbc6a3e8edf263a25fd3056c3c614407c7897df 2017-06-15 07:32 +0000 [bd16c3c524] Joshua Colp * channel: Fix reference counting in ast_channel_suppress. The ast_channel_suppress function wrongly decremented the reference count of the underlying structure used to keep track of what should be suppressed on a channel if the function was called multiple times on the same channel. This change cleans up the reference counting a bit so this no longer occurs. ASTERISK-27016 Change-Id: I2eed4077cb4916e6626f9f120b63b963acc5c136 2017-06-14 12:34 +0000 [b8b0b61a24] Richard Mudgett * app_voicemail.c: Fix compile error when IMAP enabled. Change-Id: I2703f15b4099b4210c68eccf293105d1975c1fc1 2017-06-12 17:55 +0000 [023eede265] Alexei Gradinari * app_voicemail: IMAP logout on MWI unsubscribe Closing IMAP connection on MWI unsubscribe. ASTERISK-24052 #close Change-Id: I4ff964026002b2817b48c20fb4239f0a880228fd 2017-06-14 11:12 +0000 [65ed2ea311] George Joseph * res_pjsip_pubsub: Fix reference to released endpoint destroy_subscription was attempting to get the id of the subscription tree's endpoint after we'd already called ao2_cleanup on it causing a segfault. Moved the cleanup until after the debug statement and since endpoint could also be NULL at this point, check for that as well. ASTERISK-27057 #close Reported-by: Ryan Smith Change-Id: Ice0a7727f560cf204d870a774c6df71e159b1678 2017-06-14 08:29 +0000 [ea3f8c6889] Florian Floimair (license 6892) * res_pjsip_session: Correct inverted test in session_outgoing_nat_hook There was a typo introduced in commit 776ffd77 which was preventing the transport's external media address from being used. ASTERISK-27024 #close Reported-by: Christopher van de Sande patches: patch.diff submitted by Florian Floimair (license 6892) Change-Id: I7ec617171eaa2d86d2680b00cf37d5088adafc27 2017-06-14 08:54 +0000 [88f18faf2a] George Joseph * res_rtp_asterisk: Fix ssrc change for rtcp srtp It looks like there was a copy/paste error in ast_rtp_change_source where if there was a rtcp srtp instance, instead of updating its ssrc we were updating the srtp instance ssrc twice. ASTERISK-27022 #close Reported-by: Michael Walton Change-Id: Ic88f3aee7227b401c58745ac265ff92c19620095 2017-06-08 14:38 +0000 [d6386a8f0c] Joshua Colp * bridge: Add a deferred queue. This change adds a deferred queue to bridging. If a bridge technology determines that a frame can not be written and should be deferred it can indicate back to bridging to do so. Bridging will then requeue any deferred frames upon a new channel joining the bridge. This change has been leveraged for T.38 request negotiate control frames. Without the deferred queue there is a race condition between the bridge receiving the T.38 request negotiate and the second channel joining and being in the bridge. If the channel is not yet in the bridge then the T.38 negotiation fails. A unit test has also been added that confirms that a T.38 request negotiate control frame is deferred when no other channel is in the bridge and that it is requeued when a new channel joins the bridge. ASTERISK-26923 Change-Id: Ie05b08523f399eae579130f4a5f562a344d2e415 2017-06-13 14:17 +0000 [9e53c30610] Kevin Harwell * res_pjsip_refer/session: Calls dropped during transfer When doing an attended transfer it's possible for the transferer, after receiving an accepted response from Asterisk, to send a BYE to Asterisk, which can then be processed before Asterisk has time to start and/or complete the transfer process. This of course causes the transfer to not complete successfully, thus dropping the call. This patch makes it so any BYEs received from the transferer, after the REFER, that initiate a session end are deferred until the transfer is complete. This allows the channel that would have otherwise been hung up by Asterisk to remain available throughout the transfer process. ASTERISK-27053 #close Change-Id: I43586db79079457d92d71f1fd993be9a3b409d5a 2017-06-13 10:47 +0000 [b2fd7e5069] George Joseph * pjproject_bundled: Use the asterisk github mirror for download We now mirror the pjproject tarball and md5 at https://github.com/asterisk/third-party/tree/master/pjproject To improve download reliability, we now get the tarball from our mirror instead of from pjsip.org. ASTERISK-27052 #close Reported-by: 'alex' Change-Id: I60236587a8935bfa71fcc391f4e2ecb31918c08a 2017-06-12 09:57 +0000 [42f738e052] Alexei Gradinari * res_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled If sending unsolicited mwi to all endpoints on startup is disabled (mwi_disable_initial_unsolicited=yes) do not need to create subscriptions. If there are many (thousands) realtime endpoints configured with unsolicited mwi and Vociemail Storage configured as ODBC or IMAP there will be huge number of DB/IMAP requests on startup. ASTERISK-26230 #close Change-Id: I50ae909639e3ee298b931a54def4b2b9e0fb86c5 2017-06-11 12:06 +0000 [847087a4ff] Sean Bright * codecs.conf.sample: Fix max_bandwidth speling error Reported by Sylvain Boily via asterisk-dev mailing list. Change-Id: Idc7623f335aea3e144dd369ba383b9a757480a9d 2017-06-08 17:31 +0000 [8d1f54b92e] Jørgen H * res_pjsip_transport_websocket: Add NULL check in get_write_timeout Added check for NULL return value when calling ast_sorcery_retrieve_by_id in function get_write_timeout ASTERISK-27046 Change-Id: I9357717278da631c3a1cb502c412693929b0cb41 2017-06-08 10:54 +0000 [d27168d36f] Guido Falsi * BuildSystem: Add patches to allow building with recent LibreSSL Add some #if defined checks which allow building against LibreSSL. These patchess come from OpenBSD ports: https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/telephony/asterisk/patches/ ASTERISK-27043 #close Reported by: OpenBSD ports Change-Id: I2f6c08a5840b85ad4d2b75370b947ddde7a9a572 2017-06-06 14:54 +0000 [fcb1a0d7e8] David M. Lee * CFLAGS for BIND8 support Some systems (like macOS) require BIND_8_COMPAT to be defined so that the nameser libraries are, well, BIND8 compatible. Change-Id: If79fc27a64f90de1835b5aa3aadfa9be22bd16b0 2017-06-08 10:36 +0000 [7b668297f3] Guido Falsi * BuildSystem: Fix build on FreeBSD due to missing crypt.h FreeBSD does not include a crypt.h include file. Definitions for crypt() and crypt_r() are in unistd.h ASTERISK-27042 #close Change-Id: Ib307ee5e384870c6af50efa89fb73722dd0c3a7e 2017-06-07 15:19 +0000 [5b80496b42] Joshua Colp * chan_pjsip: Update device state when in early media. The chan_pjsip module uses a calculation approach for determining device state. This means that in situations where we would expect device state to change we need to tell the core to query. A scenario that was missed is when early media was signaled. This change adds the notification for the core to query device state when we are told that early media is being provided. ASTERISK-27039 Change-Id: Iafebfd152894966344ff2e950a3cee9f59a3eb6f 2017-06-07 14:32 +0000 [e497a76d24] Sean Bright * eventfd: Disable during cross compilation Reported by Lonnie Abelbeck via private e-mail. Change-Id: Icc80f12b8d8d591e14a8e0ed9f1c02cbd193a89b 2017-06-07 11:21 +0000 [19da99df2f] Alexei Gradinari * CHANGES: correct version for a new option 'refer_blind_progress' Change-Id: If4817d26a8974610827624fb8a4e56d681d6bf97 2017-06-06 07:04 +0000 [d3e951edf5] Joshua Colp * pjsip: Extend 'asymmetric_rtp_codec' option to include us changing. PJSIP support in Asterisk differs from chan_sip in that it allows media to be sent as-is without transcoding provided the codecs were negotiated in the SDP. This is allowed according to the RFC. Support for this differs quite a lot though and some endpoints do not handle it well. This change extends the 'asymmetric_rtp_codec' option to also cover this case. When set to no (the default) the code behaves as chan_sip does - the best codec is selected and we will only ever send that, unless we change what we are sending if the remote side changes. When set to yes we will send media as-is without transcoding if the codec has been negotiated in the SDP. ASTERISK-26996 Change-Id: Ib1647f6902a0843e8c435946f831c2159e8d1d51 2017-06-06 10:04 +0000 [b3ca24d216] Sean Bright * res_rtp_multicast: Use consistent timestamps when possible When a frame destined for a MulticastRTP channel does not have timing information (such as when an 'originate' is done), we generate the RTP timestamps ourselves without regard to the number of samples we are about to send. Instead, use the same method as res_rtp_asterisk and 'predict' a timestamp given the number of samples. If the difference between the timestamp that we generate and the one we predict is within a specific threshold, use the predicted timestamp so that we end up with timestamps that are consistent with the number of samples we are actually sending. Change-Id: I2bf0db3541b1573043330421cbb114ff0f22ec1f 2017-05-31 10:41 +0000 [861984eac0] Joshua Colp * res_pjsip: Add support for returning only reachable contacts and use it. This introduces the ability for PJSIP code to specify filtering flags when retrieving PJSIP contacts. The first flag for use causes the query code to only retrieve contacts that are not unreachable. This change has been leveraged by both the Dial() process and the PJSIP_DIAL_CONTACTS dialplan function so they will now only attempt calls to contacts which are not unreachable. ASTERISK-26281 Change-Id: I8233b4faa21ba3db114f5a42e946e4b191446f6c 2017-06-05 11:27 +0000 [d8802a6a0f] Kevin Harwell * channel: ast_write frame wrongly freed after call to audiohooks ASTERISK-26419 introduced a bug when calling ast_audiohook_write_list in ast_write. It would free the frame given to ast_write if the frame returned by ast_audiohook_write_list was different than the given one. The frame give to ast_write should never be freed within that function. It is the caller's resposibility to free the frame after writing (or when it its done with it). By freeing it within ast_write this of course led to some memory corruption problems. This patch makes it so the frame given to ast_write is no longer freed within the function. The frame returned by ast_audiohook_write_list is now subsequently used in ast_write and is freed later. It is freed either after translate if the frame returned by translate is different, or near the end of ast_write prior to function exit. ASTERISK-26973 #close Change-Id: Ic9085ba5f555eeed12f6e565a638c3649695988b 2017-05-31 11:45 +0000 [001f4ddda4] Sean Bright * pbx_builtin: Properly handle hangup during Background Before this patch, when a user hung up during a Background, we would stuff 0xff into a char and attempt a dialplan lookup of it. This caused problems for some realtime engines which interpreted the value as the beginning of an invalid UTF-8 sequence. ASTERISK-19291 #close Reported by: Andrew Nowrot Change-Id: I8ca6da93252d61c76ebdb46a4aa65e73ca985358 2017-05-31 04:25 +0000 [f6eeaaafd5] Joshua Colp * channel / app_meetme: Fix parentheses. ASTERISK-27025 Change-Id: Id736b0aa4ec6b6b0f04663d64fa8d151f81fdbed 2017-05-30 16:07 +0000 [9dce4a947b] Sean Bright * stasis_recording: Correct ast_asprintf error checking ASTERISK-27021 #close Reported by: Tim Morgan Change-Id: I0ac061f040093e806c3b1f4e2340864f3ce4dd75 2017-05-28 15:43 +0000 [5c27fe2187] Sean Bright * format: Reintroduce smoother flags In review 4843 (ASTERISK-24858), we added a hack that forced a smoother creation when sending signed linear so that the byte order was adjusted during transmission. This was needed because smoother flags were lost during the new format work that was done in Asterisk 13. Rather than rolling that same hack into res_rtp_multicast, re-introduce smoother flags so that formats can dictate their own options. Change-Id: I77b835fba0e539c6ce50014a984766f63cab2c16 2017-05-24 10:09 +0000 [39d14834f8] Mark Michelson * Confbridge: Add "sfu" video mode to bridge profile options. A previous commit added plumbing to bridge_softmix to allow for an SFU experience with Asterisk. This commit adds an option to app_confbridge that allows for a confbridge to actually make use of the SFU video mode. SFU mode is implemented in a "set it and forget it" kind of way. That is, when the bridge is created, if SFU mode is enabled, then the video mode gets set to SFU and cannot be changed. Future improvements may allow for a hybrid experience (e.g. forward multiple video streams, specifically those of the most recent talkers), but for this addition, no such capability is present. Change-Id: I87bbcb63dec6dbbb42488f894871b86f112b2020 2017-05-05 11:56 +0000 [2da869408a] Mark Michelson * Add primitive SFU support to bridge_softmix. This sets up the "plumbing" in bridge_softmix to be able to accommodate Asterisk asking as an SFU (selective forwarding unit) for conferences. The way this works is that whenever a channel enters or leaves a conference, all participants in the bridge get sent a stream topology change request. The topologies consist of the channels' original topology, along with video destination streams corresponding to each participants' source video streams. So for instance, if Alice, Bob, and Carol are in the conference, and each supplies one video stream, then the topologies for each would look like so: Alice: Audio, Source video(Alice), Destination Video(Bob), Destination video (Carol) Bob: Audio, Source video(Bob) Destination Video(Alice), Destination video (Carol) Carol: Audio, Source video(Carol) Destination Video(Alice), Destination video (Bob) This way, video that arrives from a source video stream can then be copied out to the destination video streams on the other participants' channels. Once the bridge gets told that a topology on a channel has changed, the bridge constructs a map in order to get the video frames routed to the proper destination streams. This is done using the bridge channel's stream_map. This change is bare-bones with regards to SFU support. Some key features are missing at this point: * Stream limits. This commit makes no effort to limit the number of streams on a specific channel. This means that if there were 50 video callers in a conference, bridge_softmix will happily send out topology change requests to every channel in the bridge, requesting 50+ streams. * Configuration. The plumbing has been added to bridge_softmix, but there has been nothing added as of yet to app_confbridge to enable SFU video mode. * Testing. Some functions included here have unit tests. However, the functionality as a whole has only been verified by hand-tracing the code. * Selectivenss. For a "selective" forwarding unit, this does not currently have any means of being selective. * Features. Presumably, someone might wish to only receive video from specific sources. There are no external-facing functions at the moment that allow for users to select who they receive video from. * Efficiency. The current scheme treats all video streams as being unidirectional. We could be re-using a source video stream as a desetnation, too. But to simplify things on this first round, I did it this way. Change-Id: I7c44a829cc63acf8b596a337b2dc3c13898a6c4d 2017-05-30 09:34 +0000 [045d7b8cb7] Sean Bright * format_mp3: Re-work menuselect/build issues Rather than removing format_mp3 from ALL_C_MODS (which caused format_mp3 to not show up in menuselect), use .PHONY targets when the necessary source files are not present. ASTERISK-23951 Reported by: Tzafrir Cohen Change-Id: I0a7512c51acc9e86043671795020b0de725bd9e8 2017-05-30 09:43 +0000 [80206cdc65] George Joseph * test_json: Fix test names with reserved words Some of the test names were actually reserved words (true, false, int, null, string, bool). When the jenkins test results analyzer does its thing it tries to create a map using the test names as keys and fails because they're reserved words. Added "type_" to those test names. Change-Id: I90d809f46969c78a1c605b736ff0635196a2cf1b 2017-05-26 11:41 +0000 [9c4f63263c] Joshua Colp * manager: Clear the flag on the other channel. During the channel flag audit an incorrect change was done. The flag should be cleared on the second channel. ASTERISK-26469 Change-Id: I770c5a389550a2fb5a6ade942fccbb2e1d9199c8 2017-05-26 11:15 +0000 [1f136fe885] Sean Bright * res_srtp: Add support for libsrtp2 ASTERISK-25294 #close Reported by: Tzafrir Cohen ASTERISK-26976 #close Reported by: Alex Change-Id: I789b1c3d1ed31365bbd9339fa58ef36f48833c40 2017-05-25 11:10 +0000 [59348aa182] Sean Bright * format_mp3: Don't try to build format_mp3 if we don't have sources ASTERISK-23951 #close Reported by: Tzafrir Cohen Change-Id: Iebf181d44bb735787fde4b5be863c4d7e2478a30 2017-05-23 11:07 +0000 [44c5a144ce] Martin Tomec * Sqlite3: make busy_timeout configurable. Enables runtime configuration of busy_timeout for sqlite databases. Default timeout remains 1000ms. ASTERISK-27014 #close Change-Id: I8921a3aac3c335843be4cb17d2dd0a5c157a36da 2017-05-24 15:50 +0000 [08edd54c1b] George Joseph * unittests: Add a unit test that causes a SEGV and... ...that can only be run by explicitly calling it with 'test execute category /DO_NOT_RUN/ name RAISE_SEGV' This allows us to more easily test CI and debugging tools that should do certain things when asterisk coredumps. To allow this a new member was added to the ast_test_info structure named 'explicit_only'. If set by a test, the test will be skipped during a 'test execute all' or 'test execute category ...'. Change-Id: Ia3a11856aae4887df9a02b6b081cc777b36eb6ed 2017-05-23 15:42 +0000 [d847fe6585] Sean Bright * res_agi: Allow configuration of audio format of EAGI pipe This change allows the format of the EAGI audio pipe to be changed by setting the dialplan variable 'EAGI_AUDIO_FORMAT' to the name of one of the loaded formats. ASTERISK-26124 #close Change-Id: I7a10fad401ad2a21c68c2e7246fa357d5cee5bbd 2017-05-23 13:33 +0000 [e2e6baa8d8] Sean Bright * res_agi: Clarify 'RECORD FILE' documentation Documented the 'beep' option in both the parameters list and the command description. ASTERISK-23839 #close Change-Id: I4970395c922dbdce3f7cf0f56d5b065ec9aa53ea 2017-05-23 13:06 +0000 [3dcb3c88aa] Sean Bright * res_agi: Prevent crash when SET VARIABLE called without arguments Explicitly check that the appropriate number of arguments were passed to SET VARIABLE before attempting to reference them. Also initialize the arguments array to zeroes before populating it. ASTERISK-22432 #close Change-Id: I5143607d80a2724f749c1674f3126b04ed32ea97 2017-05-23 12:35 +0000 [e490aa3176] Sean Bright * res_agi: Fix malformed AGI usage response If the generated XML documentation for a command does not end with a \n, the postamble of the usage message does not appear on its own line. ASTERISK-25662 #close Change-Id: If190f1e9e37fe215fed95897d78d4a6e142b0020 2017-05-23 10:06 +0000 [8ae0227cf3] Sean Bright * res_format_attr_h26x: Trim blanks in fmtp attributes Some devices separate format attributes with a semicolon followed by a space, so trim blanks before trying to match them. ASTERISK-27008 #close Change-Id: Ia44cb2e4fef5c73dc541a29da79cb0e19c22d9cc 2017-05-15 15:03 +0000 [faab058014] Joshua Colp * app_queue: Fix members showing as being in call when not. A change was done which added an 'in_call' flag to queue members that was set to true while talking to an agent. Unfortunately in practice this does not accurately reflect whether they are talking to an agent or not. If a Local channel is involved and a transfer is performed then the app_queue application would incorrectly think the agent was still in a call with the caller. This was done to fix a race condition between an agent becoming available by device state and the checking of the last call information for the wrapup time. There was a small window where the last call information would be the previous value instead of the new one. This change goes about fixing the original issue in a different way by considering the call completed if device state is received which would make the agent available and if they are currently in a call. If this occurs the last call information is updated before the agent becomes available ensuring that old information is not present when checking if the member should be called. This also improves the transfer situation by actually updating and enforcing the wrapup time. ASTERISK-26399 ASTERISK-26400 ASTERISK-26715 ASTERISK-26975 Change-Id: Ife1cb686e3173b3a6d368601adef9aff69d4beea 2017-05-23 05:45 +0000 [36e90952ec] Robert Mordec * app_confbridge: Race between removing and playing name recording while leaving When user leaves a conference, its channel calls async_play_sound_file() in order to play the name announcement and then unlinks the sound file. The async_play_sound_file() function adds a task to conference playback queue, which then runs playback_common() function in a different thread. It leads to a race condition when, in some cases, channel thread may unlink the sound file before playback_common() had a chance to open it. This patch creates a file deletion task, that is queued after playback. ASTERISK-27012 #close Change-Id: I412f7922d412004b80917d4e892546c15bd70dd3 2017-05-22 13:51 +0000 [440ff38c08] Kevin Harwell * res_rtp_asterisk: rtcp mux using the wrong srtp unprotecting algorithm When using rtcp mux if an rtcp payload came in it would still use the srtp unprotect algorithm instead of the srtp unprotect rtcp method. Since rtcp data was being passed to the rtp unprotect method this would result in an error. This patch ensures that the correct unprotect method is chosen by making sure the passed in rtcp flag is appropriately set when rtcp mux is enabled and an rtcp payload is received. ASTERISK-26979 #close Change-Id: Ic5409f9d1a267f1d4785fc5aed867daaecca6241 2017-05-19 10:05 +0000 [0f487978a9] Sean Bright * chan_sip: Better ICE handling for RTCP-MUX If we are offered or are offering RTCP-MUX, don't consider RTCP ICE candidates. This confuses certain browsers (current Firefox for example) and causes intial audio setup delays. ASTERISK-26982 #close Change-Id: Ifeaf47e83972fe8dbe58b7fb3d6d1823400cfb91 2017-05-12 10:38 +0000 [be4beff3e4] Steve Davies * app_queue: Add QUEUE_RAISE_PENALTY feature Additional variable to work alongside QUEUE_MAX_PENALTY and QUEUE_MIN_PENALTY, including an extra parameter in queuerules.conf. This value causes lower Agent penalty values to "raise up" so that they can join higher penalty agents and be treated equally after a period of time. ASTERISK-26995 #close Change-Id: If1c6421a983667a5ac4c359f6dac25b212b4c459 2017-04-13 17:17 +0000 [7c0466092c] Mark Michelson * AST-2017-003: Handle zero-length body parts correctly. ASTERISK-26939 #close Change-Id: I7ea235ab39833a187db4e078f0788bd0af0a24fd 2017-04-13 11:14 +0000 [949e9147bf] George Joseph * AST-2017-004: chan_skinny: Add EOF check in skinny_session The while(1) loop in skinny_session wasn't checking for EOF so a packet that was longer than a header but still truncated would spin the while loop infinitely. Not only does this permanently tie up a thread and drive a core to 100% utilization, the call of ast_log() in such a tight loop eats all available process memory. Added poll with timeout to top of read loop ASTERISK-26940 #close Reported-by: Sandro Gauci Change-Id: I2ce65f3c5cb24b4943a9f75b64d545a1e2cd2898 2017-04-13 17:16 +0000 [2bb98d8fac] Mark Michelson * AST-2017-002: Ensure transaction key buffer is large enough. ASTERISK-26938 #close Change-Id: I266490792fd8896a23be7cb92f316b7e69356413 2017-05-18 16:35 +0000 [4141748e85] Sean Bright * res_hep_rtcp: Add support level to module info Change-Id: I5661478f9cf12d431f730e42be79323b62831e92 2017-05-15 13:26 +0000 [a60d1f3974] Kevin Harwell * app_stream_echo: Added a multi-stream echo application If the channel does not have multi-stream support then this application acts just like app_echo. If it does have multi-stream support then each stream is echoed back to itself (one-to-one). If a "num" is specified, then a new topology is made that contains clones (from the channel's topology) of all media types that are not equal to the given "type". If the media type differs then the first stream matching the "type" is cloned into the new topology and then up to "num" - 1 of the same stream are also cloned into it. Any additional streams from the original topology matching the "type" are subsequently ignored (i.e. not added to the new topology). For this same case when a frame is read from a stream that frame is still echoed back like before, but now that frame is also echoed out to the additional streams that matched on the specified "type". ASTERISK-26997 #close Change-Id: I254144486734178e196c7f590a26ffc13543ff2c 2017-05-15 13:25 +0000 [51375686f7] Kevin Harwell * core/conversions: Added string to unsigned integer and long conversions Added functions that convert a string to an unsigned integer or unsigned long. A couple of unit test were also created to test the routines. The reasons for adding these conversion utilities (and hopefully eventually more) are as follows: * Conversion routines are functionally contained with consistent and better error checking * The function names offer a better description of what is happening * It encourages code reuse for easier bug fixing at a single source * It's simpler to use * It's unit testable For instance, currently in a lot of places when converting to an integer or similar the "sscanf" function is used. When using "sscanf" it may not be immediately clear what's happening as it lacks semantic naming. Limited error checking is usually done as well. For example, most of the time a check is done to make sure the value converted, but does not check for overflows or negative valued conversions when converting unsigned numbers. Why use/wrap "strtoul" and not "sscanf" then? Primarily, it lacks some of the built in error handling that "strtoul" has. For instance "strtoul" contains overflow checks. Less so, but can still factor as reasons, "sscanf" is slightly more complex in its use. And maybe a bit controversial, but it may be ("big if") potentially slower than "strtoul" in some cases. Change-Id: If7eaca4a48f8c7b89cc8b5a1f4bed2852fca82bb 2017-05-13 11:40 +0000 [5a7af00e80] Joshua Colp * asterisk: Audit locking of channel when manipulating flags. When manipulating flags on a channel the channel has to be locked to guarantee that nothing else is also manipulating the flags. This change introduces locking where necessary to guarantee this. It also adds helper functions that manipulate channel flags and lock to reduce repeated code. ASTERISK-26789 Change-Id: I489280662dba0f4c50981bfc5b5a7073fef2db10 2017-05-12 21:04 +0000 [30fbed65f1] Richard Mudgett * res_pjsip_session.c: Process initial INVITE sooner. (key exists) Retransmissions of an initial INVITE could be queued in the serializer before we have processed the first INVITE message. If the first INVITE message doesn't get completely processed before the retransmissions are seen then we could try to setup the same call from the retransmissions. A symptom of this is seeing a (key exists) message associated with an INVITE. An earlier change attempted to address this kind of problem by calculating a distributor serializer to use for unassociated messages. Part of that change also made incoming calls keep using that distributor serializer. (ASTERISK-26088) However, some leftover code was still deferring the INVITE processing to the session's serializer even though we were already in that serializer. This not only is unnecessary but would cause the same call resetup problem. * Removed the code to defer processing the initial INVITE to the session's serializer because we are already running in that serializer. ASTERISK-26998 #close Change-Id: I1e822d82dcc650e508bc2d40d545d5de4f3421f6 2017-05-14 00:37 +0000 [6e7b78414f] Rodrigo Ramírez Norambuena * Fix spelling queues.conf.sample file Change-Id: Ie1c2d83af66f27a449da09a68d987e0992627fee 2017-05-08 13:40 +0000 [93b7f84c1a] Vitezslav Novy * chan_sip: Change sip_get_codec() to return correct codec list Return cahnnel nativeformats to fix bridge technology selection process. Same approach as in pjsip module. ASTERISK-26143 Reported-by: Henning Holtschneider Change-Id: I64e863753954d6ad67a9e722df2ebc328705ad48 2017-05-08 15:56 +0000 [808f299808] Alexei Gradinari * res_pjsip: New endpoint option "refer_blind_progress" This option was added to turn off notifying the progress details on Blind Transfer. If this option is not set then the chan_pjsip will send NOTIFY "200 OK" immediately after "202 Accepted". Some SIP phones like Mitel/Aastra or Snom keep the line busy until receive "200 OK". ASTERISK-26333 #close Change-Id: Id606fbff2e02e967c02138457badc399144720f2 2017-05-11 00:25 +0000 [045dbcc2d6] Ivan Poddubny * app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON There are 2 places in app_queue.c that log EXITEMPTY event: one in wait_our_turn, and another one in queue_exec in the loop trying to call an agent after wait_our_turn. In most cases it leads to logging EXITEMPTY twice. ABANDON is also logged on two places, and in the rare case when an agent and caller hang up simultaneously it's also possible to get duplicates in queue_log. This commit changes wait_our_turn to return -1 ("the caller should exit the queue") instead of 0 ("the caller's turn has arrived") in case of leaving when empty, so queue_exec skips the agent calling loop. Also, leave_queue is now executed only once in this case, because 2nd time is just a noop when the queue entry has already been removed. Also, it sets qe->handled to -1 to indicate that the call was not answered by an agent, but the necessary handling has already been done in order to avoid logging an extra ABANDON entry. ASTERISK-25665 #close Reported by: Ove Aursand Change-Id: I4578dd383bf2ac41589cf167865e8aaebcd4c11e 2017-04-27 19:37 +0000 [b8659be9b0] Richard Mudgett * SDP: Make process possible multiple fmtp attributes per rtpmap. Change-Id: Ie7511008d82b59590e0eb520a21b5e1da4bd7349 2017-04-28 11:53 +0000 [c2906dfa05] Richard Mudgett * SDP: Remove sdp_state.remote_capabilities The sdp_state.remote_capabilities was only used inside merge_sdps() and subsequent calls to merge_sdps() by re-INVITE's would leak them. Change-Id: I0ceb7838ea044cc913e8ad4a255c39c9740ae0ce 2017-05-05 14:30 +0000 [16785c0908] Richard Mudgett * SDP: Add interface_address to specify our address to use. When we optionally set the interface_address we are forcing the media to go out a specific interface address. This allows us to optionally have the media go out the interface that SIP signalling came in on or if we are configured to have the media always go out a specific address. Change-Id: I160d9fac322a075bd2557b430632544178196189 2017-05-05 14:49 +0000 [367042bd3e] Richard Mudgett * SDP: Explicitly stop a RTP instance before destoying it. * Made sdp_add_m_from_rtp_stream() and sdp_add_m_from_udptl_stream() handle generating disabled/declined streams. * Added /main/sdp/sdp_merge_asymmetric unit test. It currently does not check the offerer side negotiated SDP because that isn't the purpose of this patch and there is much to be done to handle declined/dummy streams. * Added T.38 image streams to the /main/sdp/sdp_merge_symmetric and /main/sdp/sdp_merge_crisscross unit tests. Change-Id: Ib4dcb3ca4f9a9133b376f4e3302f9a1f963f2b31 2017-04-28 19:48 +0000 [be5809fac8] Richard Mudgett * SDP: Rework merge_capabilities(). * Tried to give better variable names. * Made our SDP answer use the offer's RTP payload types as the SDP RFC says we SHOULD. * Updating the local topology now takes the stream format caps. We are likely preparing to send an offer. Change-Id: I34d3be8e3036402a8575ffcae3eebc5ce348d7c0 2017-04-28 12:30 +0000 [ae7689f093] Richard Mudgett * SDP: Update ast_get_topology_from_sdp() to keep RTP map. * Add failure exits to ast_get_topology_from_sdp(). Change-Id: I4cc85c1ede8d712766ed20f544dbcef04c8c1049 2017-05-09 10:34 +0000 [cbbd119c21] Joshua Colp * tcptls: Improve error messages for TLS connections. This change uses the functions provided by OpenSSL to query and better construct error messages for situations where the connection encounters a problem. ASTERISK-26606 Change-Id: I7ae40ce88c0dc4e185c4df1ceb3a6ccc198f075b 2017-05-04 17:28 +0000 [10a4439ac9] Joshua Elson * Prevent Undefined Capath Crash It is possible to initialize a valid config without a capath or cafile definition. This will cause a crash on a reload. This fix ensures capath is always allocated. ASTERISK-26983 #close Change-Id: I63ff715d9d9023427543a5b8a4ba7b0d82533c12 2017-05-05 11:33 +0000 [1a1c86239d] George Joseph * cel_odbc: Fix timestamp processing for microseconds When a column is of type timestamp, the fraction part of the event field's seconds was frequently parsed incorrectly especially if there were leading zeros. For instance "2017-05-23 23:55:03.023" would be parsed into an int as "23" then when the timestamp was formatted again to be inserted into the database column it'd be "2017-05-23 23:55:03.23" which is now 230 milliseconds instead of 23 milliseconds. "03.000001" would be transformed to "03.1", etc. * If the event field is 'eventtime' and the db column is timestamp, then existing processing has already correctly formatted the timestamp so now we simply use it rather than parsing it and re-printing it. This is the most common use case anyway. * If the event field is other than 'eventtime' and the db column is timestamp, we now parse the seconds, including the fractional part into a double rather than 2 ints. This preserves the magnitude and precision of the fractional part. When we print it, we now print it as a "%09.6lf" which correctly represents the input. To be honest, why we parse the string timestamp into components, test the components, then print the components back into a string timestamp is beyond me. We should use parse it, test it, then if it passes, use the original string representation in the database call. Maybe someone thought that some implementations wouldn't take a partial timestamp string like "2017-05-06" and decided to always produce a full timestamp string even if an abbreviated one was supplied. Anyway, I'm leaving it as it is. ASTERISK-25032 #close Reported-by: Etienne Lessard Change-Id: Id407e6221f79a5c1120e1a70bc7e893bbcaf1938 2017-05-09 05:25 +0000 [3c36c29c81] Joshua Colp * res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages. This change adds the required logic to allow the SIP Call-ID to be placed into the HEP RTCP traffic if the chan_sip module is used. In cases where the option is enabled but the channel is not either SIP or PJSIP then the code will fallback to the channel name as done previously. Based on the change on Nir's branch at: team/nirs/hep-chan-sip-support ASTERISK-26427 Change-Id: I09ffa5f6e2fdfd99ee999650ba4e0a7aad6dc40d 2017-05-08 16:11 +0000 [201346fb7d] George Joseph * logger: Added logger_queue_limit to the configuration options. All log messages go to a queue serviced by a single thread which does all the IO. This setting controls how big that queue can get (and therefore how much memory is allocated) before new messages are discarded. The default is 1000. Should something go bezerk and log tons of messages in a tight loop, this will prevent memory escalation. When the limit is reached, a WARNING is logged to that effect and messages are discarded until the queue is empty again. At that time another WARNING will be logged with the count of discarded messages. There's no "low water mark" for this queue because the logger thread empties the entire queue and processes it in 1 batch before going back and waiting on the queue again. Implementing a low water mark would mean additional locking as the thread processes each message and it's not worth it. A "test" was added to test_logger.c but since the outcome is non-deterministic, it's really just a cli command, not a unit test. Change-Id: Ib4520c95e1ca5325dbf584c7989ce391649836d1 2017-05-02 18:05 +0000 [56c5c51076] Richard Mudgett * stream: ast_stream_clone() cannot copy the opaque user data. ast_stream_clone() cannot copy the opaque user data stored on a stream. We don't know how to clone the data so it isn't copied into the clone. Change-Id: Ia51321bf38ecbfdcc53787ca77ea5fd2cabdf367 2017-05-04 17:32 +0000 [924628812b] Richard Mudgett * netsock2.c: Made get/set addr port avoid potential uninitialized memory. Change-Id: I532052bd7cd95a4b3565485fc01e2a1ea07ee647 2017-05-05 08:48 +0000 [4146facfec] Joshua Colp * func_cdr: Allow empty value for CDR dialplan function. A regression was introduced in 12 where passing an empty value to the CDR dialplan function was not longer allowed. This change returns to the behavior of 11 where it is permitted. ASTERISK-26173 Change-Id: I3f148203b54ec088007e29e30005a5de122e51c5 2017-05-04 16:04 +0000 [0001834157] George Joseph * app_confbridge: Fix reference to cfg in menu_template_handler menu_template_handler wasn't properly accounting for the fact that it might be called both during a load/reload (which isn't really valid but not prevented) and by a dialplan function. In both cases it was attempting to use the "pending" config which wasn't valid in the latter case. aco_process_config is also partly to blame because it wasn't properly cleaning "pending" up when a reload was done and no changes were made. Both of these contributed to a crash if CONFBRIDGE(menu,template) was called in a dialplan after a reload. * aco_process_config now sets info->internal->pending to NULL after it unrefs it although this isn't strictly necessary in the context of this fix. * menu_template_handler now uses the "current" config and silently ignores any attempt to be called as a result of someone uses the "template" parameter in the conf file. Luckily there's no other place in the codebase where aco_pending_config is used outside of aco_process_config. ASTERISK-25506 #close Reported-by: Frederic LE FOLL Change-Id: Ib349a17d3d088f092480b19addd7122fcaac21a7 2017-04-30 16:40 +0000 [c90d81ef51] Joshua Colp * bridge: Fix returning to dialplan when executing Bridge() from AMI. When using the Bridge AMI action on the same channel multiple times it was possible for the channel to return to the wrong location in the dialplan if the other party hung up. This happened because the priority of the channel was not preserved across each action invocation and it would fail to move on to the next priority in other cases. This change makes it so that the priority of a channel is preserved when taking control of it from another thread and it is incremented as appropriate such that the priority reflects where the channel should next be executed in the dialplan, not where it may or may not currently be. The Bridge AMI action was also changed to ensure that it too starts the channels at the next location in the dialplan. ASTERISK-24529 Change-Id: I52406669cf64208aef7252a65b63ade31fbf7a5a 2017-04-25 11:49 +0000 [7b0e3b92fd] Kevin Harwell * bridge_simple: Added support for streams This patch is the first cut at adding stream support to the bridging framework. Changes were made to the framework that allows mapping of stream topologies to a bridge's supported media types. The first channel to enter a bridge initially defines the media types for a bridge (i.e. a one to one mapping is created between the bridge and the first channel). Subsequently added channels merge their media types into the bridge's adding to it when necessary. This allows channels with different sized topologies to map correctly to each other according to media type. The bridge drops any frame that does not have a matching index into a given write stream. For now though, bridge_simple will align its two channels according to size or first to join. Once both channels join the bridge the one with the most streams will indicate to the other channel to update its streams to be the same as that of the other. If both channels have the same number of streams then the first channel to join is chosen as the stream base. A topology change source was also added to a channel when a stream toplogy change request is made. This allows subsystems to know whether or not they initiated a change request. Thus avoiding potential recursive situations. ASTERISK-26966 #close Change-Id: I1eb5987921dd80c3cdcf52accc136393ca2d4163 2017-05-01 13:04 +0000 [008e25def9] Kevin Harwell * res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures When a call gets put on hold RTP is temporarily stopped and Asterisk was setting the remote RTCP address to NULL. Then when RTCP data was received from the remote endpoint, Asterisk would be missing this information when publishing the rtcp_message stasis event. Consequently, message subscribers (in this case res_hep_rtcp) trying to parse the "from" field output the following error: "ast_sockaddr_split_hostport: Port missing in (null)" This patch makes it so the remote RTCP address is no longer set to NULL when stopping RTP. There was only one place that appeared to check if the remote RTCP address was NULL as a way to tell if RTCP was running. This patch added an additional check on the RTCP schedid for that case to make sure RTCP was truly not running. ASTERISK-26860 #close Change-Id: I6be200fb20db647e48b5138ea4b81dfa7962974b 2017-05-02 11:34 +0000 [675e058e77] Sean Bright * cleanup: Change severity of fread short-read warning Many sound files don't have a full frame's worth of data at EOF, so the warning messages were a bit too noisy. So we demote them to debug messages. Change-Id: I6b617467d687658adca39170a81797a11cc766f6 2017-04-26 16:22 +0000 [cd272da7a8] Richard Mudgett * SDP: Replace SDP telephone_event option with dtmf option The telephone_event option was used as a flag and a bit mapped value in different places when it is a boolean. It is also inadequate to configure the DTMF operation of the RTP instance created for the stream. Change-Id: Ib1addeaf0ce86f07039f2f979cab29405dc5239b 2017-04-29 16:11 +0000 [52e4f02b1a] Richard Mudgett * res_pjsip_t38.c: Fix deadlock in T.38 framehook. A deadlock can happen between a channel lock and a pjsip session media container lock. One thread is processing a reINVITE's SDP and walking through the session's media container when it waits for the channel lock to put the determined format capabilities onto the channel. The other thread is writing a frame to the channel and processing the T.38 frame hook. The T.38 frame hook then waits for the pjsip session's media container lock. The two threads are now deadlocked. * Made the T.38 frame hook release the channel lock before searching the session's media container. This fix has been done to several other frame hooks to fix deadlocks. ASTERISK-26974 #close Change-Id: Ie984a76ce00bef6ec9aa239010e51e8dd74c8186 2017-04-28 10:56 +0000 [8170793be6] George Joseph * res_pjsip_outbound_authenticator_digest: Add context to log messages There was no context info in this module's log messages so it was impossible to toubleshoot. Added endpoint or host to all messages and added the realms in the challenge for the "No auth credentials for any realm" message. Change-Id: Ifeed2786f35fbea7d141237ae15625e472acff9b 2017-04-27 16:46 +0000 [48566b8c66] Richard Mudgett * res_sdp_translator_pjmedia.c: Add TODO notes. Change-Id: If27ca61f79accc882c3376d2e876d2b44aa1347b 2017-04-24 18:13 +0000 [ede90e4aa5] Richard Mudgett * SDP: Make SDP translation to/from internal representation more const. Change-Id: I473a174b869728604b37c60853896b0c458bc504 2017-04-20 19:25 +0000 [5c1851cbc0] Richard Mudgett * stream: Make ast_stream_topology_create_from_format_cap() allow NULL cap. Change-Id: Ie29760c49c25d7022ba2124698283181a0dd5d08 2017-04-24 16:55 +0000 [d71c6e3bfd] Richard Mudgett * SDP: Make ast_sdp_state_set_remote_sdp() return error. Change-Id: I7707c9d872c476d897ff459008652b35142a35e1 2017-04-14 11:52 +0000 [176123e76c] Richard Mudgett * SDP: Misc cleanups (Mostly memory leaks) Change-Id: I74431b385da333f2c5f5a6d7c55e70b69a4f05d2 2017-04-27 18:15 +0000 [bad091b317] Richard Mudgett * chan_vpb.cc: Fix compile error. Change-Id: I6d9edd34d8b2474222c86f44e379ead61e57a54f 2017-04-26 16:14 +0000 [d6535c0080] Mark Michelson * SDP API: Add SSRC-level attributes RFC 5576 defines how SSRC-level attributes may be added to SDP media descriptions. In general, this is useful for grouping related SSRCes, indicating SSRC-level format attributes, and resolving collisions in RTP SSRC values. These attributes are used widely by browsers during WebRTC communications, including attributes defined by documents outside of RFC 5576. This commit introduces the addition of SSRC-level attributes into SDPs generated by Asterisk. Since Asterisk does not tend to use multiple SSRCs on a media stream, the initial support is minimal. Asterisk includes an SSRC-level CNAME attribute if configured to do so. This at least gives browsers (and possibly others) the ability to resolve SSRC collisions at offer-answer time. In order to facilitate this, the RTP engine API has been enhanced to be able to retrieve the SSRC and CNAME on a given RTP instance. res_rtp_asterisk currently does not provide meaningful CNAME values in its RTCP SDES items, and therefore it currently will always return an empty string as the CNAME value. A task in the near future will result in res_rtp_asterisk generating more meaningful CNAMEs. Change-Id: I29e7f23e7db77524f82a3b6e8531b1195ff57789 2017-04-27 08:02 +0000 [d6b2a58736] George Joseph * res_pjsip_session: Add cleanup to ast_sip_session_terminate If you use ast_request to create a PJSIP channel but then hang it up without causing a transaction to be sent, the session will never be destroyed. This is due ot the fact that it's pjproject that triggers the session cleanup when the transaction ends. app_chanisavail was doing this to get more granular channel state and it's also possible for this to happen via ARI. * ast_sip_session_terminate was modified to explicitly call the cleanup tasks and unreference session if the invite state is NULL AND invite_tsx is NULL (meaning we never sent a transaction). * chan_pjsip/hangup was modified to bump session before it calls ast_sip_session_terminate to insure that session stays valid while it does its own cleanup. * Added test events to session_destructor for a future testsuite test. ASTERISK-26908 #close Reported-by: Richard Mudgett Change-Id: I52daf6f757184e5544c261f64f6fe9602c4680a9 2017-04-24 10:59 +0000 [2b22c3c84b] Joshua Colp * channel: Add ability to request an outgoing channel with stream topology. This change extends the ast_request functionality by adding another function and callback to create an outgoing channel with a requested stream topology. Fallback is provided by either converting the requested stream topology into a format capabilities structure if the channel driver does not support streams or by converting the requested format capabilities into a stream topology if the channel driver does support streams. The Dial application has also been updated to request an outgoing channel with the stream topology of the calling channel. ASTERISK-26959 Change-Id: Ifa9037a672ac21d42dd7125aa09816dc879a70e6 2017-04-26 14:20 +0000 [c6b757fa05] Kevin Harwell * res_pjsip/res_pjsip_callerid: NULL check on caller id name string It's possible for a name in a party id structure to be marked as valid, but the name string itself be NULL (for instance this is possible to do by using the dialplan CALLERID function). There were a couple of places where the name was validated, but the string itself was not checked before passing it to functions like 'strlen'. This of course caused a crashed. This patch adds in a NULL check before attempting to pass it into a function that is not NULL tolerant. ASTERISK-25823 #close Change-Id: Iaa6ffe9d92f598fe9e3c8ae373fadbe3dfbf1d4a 2017-04-25 11:43 +0000 [cf3429b934] Kevin Harwell * vector: defaults and indexes Added an pre-defined integer vector declaration. This makes integer vectors easier to declare and pass around. Also, added the ability to default a vector up to a given size with a default value. Lastly, added functionality that returns the "nth" index of a matching value. Also, updated a unit test to test these changes. Change-Id: Iaf4b51b2540eda57cb43f67aa59cf1d96cdbcaa5 2017-04-26 05:38 +0000 [985a5fd7aa] Joshua Colp * frame: Better handle interpolated frames. Interpolated frames are frames which contain a number of samples but have no actual data. Audiohooks did not handle this case when translating an incoming frame into signed linear. It assumed that a frame would always contain media when it may not. If this occurs audiohooks will now immediately return and not act on the frame. As well for users of ast_trans_frameout the function has been changed to be a bit more sane and ensure that the data pointer on a frame is set to NULL if no data is actually on the frame. This allows the various spots in Asterisk that check for an interpolated frame based on the presence of a data pointer to work as expected. ASTERISK-26926 Change-Id: I7fa22f631fa28d540722ed789ce28e84c7f8662b 2017-04-26 09:22 +0000 [99dea9ba84] Yasin CANER * res_pjsip_session : fixed wrong From Header number On Re-invite ASTERISK-26964 #close Change-Id: I55a9caa7dc90e6c4c219cb09b5c2ec08af84a302 2017-04-26 08:45 +0000 [858ed60446] George Joseph * pjproject_bundled: Add --disable-libwebrtc to configure Without the disable, pjproject tries to build it's internal webrtc implementation which requires sse2. This fails on platforms without sse2. ASTERISK-26930 #close Reported-by: abelbeck Change-Id: I07231f9160c35cfa42b194d3aad4e7d51fd9a410 2017-04-26 07:58 +0000 [585f9405b1] Thierry Magnien * channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections For outgoing TCP connections, Asterisk uses the first IP address of the interface instead of the IP address we asked him to bind to. ASTERISK-26922 #close Reported-by: Ksenia Change-Id: I43c71ca89211dbf1838e5bcdb9be8d06d98e54eb 2017-04-21 12:04 +0000 [f5b67871df] Sean Bright * cleanup: Fix fread() and fwrite() error handling Cleaned up some of the incorrect uses of fread() and fwrite(), mostly in the format modules. Neither of these functions will ever return a value less than 0, which we were checking for in some cases. I've introduced a fair amount of duplication in the format modules, but I plan to change how format modules work internally in a subsequent patch set, so this is simply a stop-gap. Change-Id: I8ca1cd47c20b2c0b72088bd13b9046f6977aa872 2017-04-25 07:52 +0000 [199d4776c0] Joshua Colp * alembic: Add table for 'resource_list' PJSIP RLS type. This change adds an Alembic migration which adds a ps_resource_list table that can contain resource_list RLS configuration objects. ASTERISK-26929 Change-Id: I7c888fafc67b3e87012de974f71ca7a5b8b1ec05 2017-04-14 05:21 +0000 [19a79ae12c] Joshua Colp * sdp: Add support for T.38 This change adds a T.38 format which can be used in a stream topology to specify that a UDPTL stream needs to be created. The SDP API has been changed to understand T.38 and create the UDPTL session, add the attributes, and parse the attributes. This change does not change the boundary of the T.38 state machine. It is still up to the channel driver to implement and act on it (such as queueing control frames or reacting to them). ASTERISK-26949 Change-Id: If28956762ccb8ead562ac6c03d162d3d6014f2c7 2017-03-21 15:44 +0000 [32b3e36c68] Mark Michelson * SDP: Ensure SDPs "merge" properly. The gist of this work ensures that when a remote SDP is received, it is merged properly with the local capabilities. The remote SDP is converted into a stream topology. That topology is then merged with the current local topology on the SDP state. That new merged topology is then used to create an SDP. Finally, adjustments are made to RTP instances based on knowledge gained from the remote SDP. There are also a battery of tests in this commit that ensure that some basic SDP merges work as expected. While this may not sound like a big change, it has the property that it caused lots of ancillary changes. * The remote SDP is no longer stored on the SDP state. Biggest reason: there's no need for it. The remote SDP is used at the time it is being set and nowhere else. * Some new SDP APIs were added in order to find attributes and convert generic SDP attributes into rtpmap structures. * Writing tests made me realize that retrieving a value from an SDP options structure, the SDP options needs to be made const. * The SDP state machine was essentially gutted by a previous commit. Initially, I attempted to reinstate it, but I found that as it had been defined, it was not all that useful. What was more useful was knowing the role we play in SDP negotiation, so the SDP state machine has been transformed into an indicator of role. * Rather than storing separate local and joint stream state capabilities, it makes more sense to keep track of current stream state and update it as things change. Change-Id: I5938c2be3c6f0a003aa88a39a59e0880f8b2df3d 2017-04-24 13:16 +0000 [0611f2ca17] Sean Bright * res_hep: Add additional config initialization and validation * Initialize hepv3_runtime_data.sockfd to -1 so that our ao2 destructor does not close fd 0 * Add logging output when the required option - capture_address - is not specified. * Remove a no longer relevant #define and correct related documentation * Pass appropriate flags to aco_option_register so that capture_address cannot be the empty string. ASTERISK-26953 #close Change-Id: Ief08441bc6596d6f1718fa810e54a5048124f076 2017-04-17 19:06 +0000 [59203c51cc] Sean Bright * core: Use eventfd for alert pipes on Linux when possible The primary win of switching to eventfd when possible is that it only uses a single file descriptor while pipe() will use two. This means for each bridge channel we're reducing the number of required file descriptors by 1, and - if you're using timerfd - we also now have 1 less file descriptor per Asterisk channel. The API is not ideal (passing int arrays), but this is the cleanest approach I could come up with to maintain API/ABI. I've also removed what I believe to be an erroneous code block that checked the non-blocking flag on the pipe ends for each read. If the file descriptor is 'losing' its non-blocking mode, it is because of a bug somewhere else in our code. In my testing I haven't seen any measurable difference in performance. Change-Id: Iff0fb1573e7f7a187d5211ddc60aa8f3da3edb1d 2017-04-21 12:33 +0000 [f1d20c84a1] Richard Mudgett * res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions. If ICE is enabled and a STUN server does not respond then we will block until we give up on the STUN response. This will take nine seconds. In the mean time the peer that sent the INVITE will send retransmissions. * Restructure res_pjsip_session.c:new_invite() to send a 100 Trying out earlier to prevent these retransmissions. ASTERISK-26890 Change-Id: Ie3fc611e53a0eff6586ad55e4aacad81cf6319a8 2017-04-21 12:07 +0000 [835c209445] Richard Mudgett * res_pjsip_session.c: Restructure ast_sip_session_alloc() * Restructure ast_sip_session_alloc() to need less cleanup on off nominal error paths. * Made ast_sip_session_alloc() and ast_sip_session_create_outgoing() avoid unnecessary ref manipulation to return a session. This is faster than calling a function. That function may do logging of the ref changes with REF_DEBUG enabled. Change-Id: I2a0affc4be51013d3f0485782c96b8fee3ddb00a 2017-04-20 02:13 +0000 [b4b1943c5d] Jean Aunis * chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK Some equipments may send a re-INVITE containing an SDP in the final ACK request. If this happens in the context of direct media, the remote end should be updated with a re-INVITE. This patch queues an "update RTP peer" frame to trigger the re-INVITE, instead of the "source change" frame wich was used previously. ASTERISK-26951 Change-Id: I3644d2025f20e086ea9f8f62b486172c52b5b2e6 2017-04-19 15:08 +0000 [c47b3e74d2] Sean Bright * pbx: Use same thread if AST_OUTGOING_WAIT_COMPLETE specified Both ast_pbx_outgoing_app() and ast_pbx_outgoing_exten() cause the core to spawn a new thread to perform the dial. When AST_OUTGOING_WAIT_COMPLETE is passed to these functions, the calling thread will be blocked until the newly created channel has been hung up. After this patch, we run the dial on the current thread rather than spawning a new one. The only in-tree code that passes AST_OUTGOING_WAIT_COMPLETE is pbx_spool, so you should see reduced thread usage if you are using .call files. Change-Id: I512735d243f0a9da2bcc128f7a96dece71f2d913 2017-04-19 13:23 +0000 [afad2ffd9f] Richard Mudgett * res_rtp_asterisk.c: Fix crash in RTCP DTLS operation. Occasionally a crash happens when processing the RTCP DTLS timeout handler. The RTCP DTLS timeout timer could be left running if we have not completed the DTLS handshake before we place the call on hold or we attempt direct media. * Made ast_rtp_prop_set() stop the RTCP DTLS timer when disabling RTCP. * Made some sanity tweaks to ast_rtp_prop_set() when switching from standard RTCP mode to RTCP multiplexed mode. ASTERISK-26692 #close Change-Id: If6c64c79129961acfa4b3d63a864e8f6b664acc0 2017-03-22 16:05 +0000 [d165079cbc] Richard Mudgett * rtp_engine/res_rtp_asterisk: Fix RTP struct reentrancy crashes. The struct ast_rtp_instance has historically been indirectly protected from reentrancy issues by the channel lock because early channel drivers held the lock for really long times. Holding the channel lock for such a long time has caused many deadlock problems in the past. Along comes chan_pjsip/res_pjsip which doesn't necessarily hold the channel lock because sometimes there may not be an associated channel created yet or the channel pointer isn't available. In the case of ASTERISK-26835 a pjsip serializer thread was processing a message's SDP body while another thread was reading a RTP packet from the socket. Both threads wound up changing the rtp->rtcp->local_addr_str string and interfering with each other. The classic reentrancy problem resulted in a crash. In the case of ASTERISK-26853 a pjsip serializer thread was processing a message's SDP body while another thread was reading a RTP packet from the socket. Both threads wound up processing ICE candidates in PJPROJECT and interfering with each other. The classic reentrancy problem resulted in a crash. * rtp_engine.c: Make the ast_rtp_instance_xxx() calls lock the RTP instance struct. * rtp_engine.c: Make ICE and DTLS wrapper functions to lock the RTP instance struct for the API call. * res_rtp_asterisk.c: Lock the RTP instance to prevent a reentrancy problem with rtp->rtcp->local_addr_str in the scheduler thread running ast_rtcp_write(). * res_rtp_asterisk.c: Avoid deadlock when local RTP bridging in bridge_p2p_rtp_write() because there are two RTP instance structs involved. * res_rtp_asterisk.c: Avoid deadlock when trying to stop scheduler callbacks. We cannot hold the instance lock when trying to stop a scheduler callback. * res_rtp_asterisk.c: Remove the lock in struct dtls_details and use the struct ast_rtp_instance ao2 object lock instead. The lock was used to synchronize two threads to prevent a race condition between starting and stopping a timeout timer. The race condition is no longer present between dtls_perform_handshake() and __rtp_recvfrom() because the instance lock prevents these functions from overlapping each other with regards to the timeout timer. * res_rtp_asterisk.c: Remove the lock in struct ast_rtp and use the struct ast_rtp_instance ao2 object lock instead. The lock was used to synchronize two threads using a condition signal to know when TURN negotiations complete. * res_rtp_asterisk.c: Avoid deadlock when trying to stop the TURN ioqueue_worker_thread(). We cannot hold the instance lock when trying to create or shut down the worker thread without a risk of deadlock. This patch exposed a race condition between a PJSIP serializer thread setting up an ICE session in ice_create() and another thread reading RTP packets. * res_rtp_asterisk.c:ice_create(): Set the new rtp->ice pointer after we have re-locked the RTP instance to prevent the other thread from trying to process ICE packets on an incomplete ICE session setup. A similar race condition is between a PJSIP serializer thread resetting up an ICE session in ice_create() and the timer_worker_thread() processing the completion of the previous ICE session. * res_rtp_asterisk.c:ast_rtp_on_ice_complete(): Protect against an uninitialized/null remote_address after calling update_address_with_ice_candidate(). * res_rtp_asterisk.c: Eliminate the chance of ice_reset_session() destroying and setting the rtp->ice pointer to NULL while other threads are using it by adding an ao2 wrapper around the PJPROJECT ice pointer. Now when we have to unlock the RTP instance object to call a PJPROJECT ICE function we will hold a ref to the wrapper. Also added some rtp->ice NULL checks after we relock the RTP instance and have to do something with the ICE structure. ASTERISK-26835 #close ASTERISK-26853 #close Change-Id: I780b39ec935dcefcce880d50c1a7261744f1d1b4 2017-04-19 08:39 +0000 [b8b3380944] Sean Bright * build: Update config.guess and config.sub Change-Id: Id078a1df07a771808775e1053cdfe1d99c8fb172 2017-04-14 13:52 +0000 [6c0ab9afa7] Sean Bright * format_wav: Read 16khz wav samples properly When opening a PCM wave file for reading, we aren't tracking the frequency of the opened file, so we treat 16khz files as 8khz and do half reads. This patch also cleans up some of the data types and an unnecessarily complex `if` expression. ASTERISK-26613 #close Reported by: Vitaly K Change-Id: I05f8b263058dc573ea8ffe0c62e7964506e11815 2017-04-16 19:59 +0000 [b55d21ad91] George Joseph * make ari-stubs so doc periodic jobs can run The periodic doc job does a make ari-stubs and checks that there are no changes before generating the docs. Since I changed the mustache template (and the generated code directly) recently and forgot to regenerate the stubs, the doc job thinks they're out of date. Change-Id: I94b97035311eccf52b0101b8590223265a7881d4 2017-04-14 12:51 +0000 [4fb9f5d60e] Sean Bright * format_ogg_vorbis: Clear ogg/vorbis data structures on close On filestream close, we need to clear out the ogg & vorbis data structures to prevent a memory leak. ASTERISK-26169 #close Reported by: Ivan Myalkin Change-Id: Iee94c5a5d5bdafbf8b181c5c064d15d90ace8274 2017-04-14 17:32 +0000 [a3e623dd70] Richard Mudgett * Revert "bridging: Ensure successful T.38 negotation" This reverts commit 7819f95791fe0ca0e0cdc417e2687a5900444053. Change-Id: Ib91a7e6c9856f5f41329e42f40ba2394fee861a4 2017-04-14 16:50 +0000 [f6600f2c2e] Sean Bright * res_stun_monitor: Don't fail to load if DNS resolution fails res_stun_monitor will fail to load if DNS resolution of the STUN server fails. Instead, we continue without the STUN server being resolved and we will re-attempt the resolution on the STUN refresh interval. ASTERISK-21856 #close Reported by: Jeremy Kister Change-Id: I6334c54a1cc798f8a836b4b47948e0bb4ef59254 2017-04-14 14:36 +0000 [be71be7ed2] Roman S. * format_pcm: Track actual header size of .au files Sun's Au file format has a minimum data offset 24 bytes, but this offset is encoded in each .au file. Instead of assuming the minimum, read the actual value and store it for later use. ASTERISK-20984 #close Reported by: Roman S. Patches: asterisk-1.8.20.0-au-clicks-2.diff (license #6474) patch uploaded by Roman S. Change-Id: I524022fb19ff2fd5af2cc2d669d27a780ab2057c 2017-04-12 07:50 +0000 [2e6075c51f] George Joseph * modules: change module LOAD_FAILUREs to LOAD_DECLINES (master) Change-Id: Iac40ecb20e10513d67bf0eaf61807f306067b258 2017-04-10 05:13 +0000 [72c5f3b0ba] Alexander Traud * res_pjsip_sdp_rtp: No rtpmap for static RTP payload IDs in SDP. This saves around 100 bytes when G.711, G.722, G.729, and GSM are advertised in SDP. This reduces the chance to hit the MTU bearer of 1300 bytes for SIP over UDP, if many codecs are allowed in Asterisk. This new feature is enabled together with the optional feature compact_headers=yes via the file pjsip.conf. ASTERISK-26932 #close Change-Id: Iaa556ab4c8325cd34c334387ab2847fab07b1689 2017-04-12 07:47 +0000 [6db0939b96] George Joseph * modules: change module LOAD_FAILUREs to LOAD_DECLINES (14) Change-Id: If99e3b4fc2d7e86fc3e61182aa6c835b407ed49e 2017-04-11 11:07 +0000 [747beb1ed1] George Joseph * modules: change module LOAD_FAILUREs to LOAD_DECLINES In all non-pbx modules, AST_MODULE_LOAD_FAILURE has been changed to AST_MODULE_LOAD_DECLINE. This prevents asterisk from exiting if a module can't be loaded. If the user wishes to retain the FAILURE behavior for a specific module, they can use the "require" or "preload-require" keyword in modules.conf. A new API was added to logger: ast_is_logger_initialized(). This allows asterisk.c/check_init() to print to the error log once the logger subsystem is ready instead of just to stdout. If something does fail before the logger is initialized, we now print to stderr instead of stdout. Change-Id: I5f4b50623d9b5a6cb7c5624a8c5c1274c13b2b25 2017-04-05 06:41 +0000 [7819f95791] Torrey Searle * bridging: Ensure successful T.38 negotation When a T.38 happens immediatly after call establishment, the control frame can be lost because the other leg is not yet in the bridge. This patch detects this case an makes sure T.38 negotation happens when the 2nd leg is being made compatible with the negotating first leg ASTERISK-26923 #close Change-Id: If334125ee61ed63550d242fc9efe7987e37e1d94 2017-04-07 08:58 +0000 [7901225261] Torrey Searle * strings.h: Avoid overflows in the string hash functions On 2's compliment machines abs(INT_MIN) behavior is undefined and results in a negative value still being returnd. This results in negative hash codes that can result in crashes. ASTERISK-26528 #close Change-Id: Idff550145ca2133792a61a2e212b4a3e82c6517b 2017-04-07 16:14 +0000 [7312cbe803] Richard Mudgett * res_rtp_asterisk.c: Add stun_blacklist option Added the stun_blacklist option to rtp.conf. Some multihomed servers have IP interfaces that cannot reach the STUN server specified by stunaddr. Blacklist those interface subnets from trying to send a STUN packet to find the external IP address. Attempting to send the STUN packet needlessly delays processing incoming and outgoing SIP INVITEs because we will wait for a response that can never come until we give up on the response. Multiple subnets may be listed. ASTERISK-26890 #close Change-Id: I3ff4f729e787f00c3e6e670fe6435acce38be342 2017-04-06 17:31 +0000 [7c37365f03] Richard Mudgett * stun.c: Fix ast_stun_request() erratic timeout. If ast_stun_request() receives packets other than a STUN response then we could conceivably never exit if we continue to receive packets with less than three seconds between them. * Fix poll timeout to keep track of the time when we sent the STUN request. We will now send a STUN request every three seconds regardless of how many other packets we receive while waiting for a response until we have completed three STUN request transmission cycles. Change-Id: Ib606cb08585e06eb50877f67b8d3bd385a85c266 2017-04-06 18:30 +0000 [8d323c74fa] Richard Mudgett * sorcery.c: Speed up ast_sorcery_retrieve_by_id() Return early if ast_sorcery_retrieve_by_id() is not passed an id to find. Also eliminated the RAII_VAR() usage in the function. Change-Id: I871dbe162a301b5ced8b4393cec27180c7c6b218 2017-04-10 11:30 +0000 [5b4e2ec267] Richard Mudgett * res_pjsip: Fix pointer use after unref. Change-Id: I4b6e1b0070563eeaee223cb58326f1b962ed5bc1 2017-04-06 18:18 +0000 [6f793ac149] Richard Mudgett * res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member. * create_rtp(): Eliminate use of deprecated transport struct member. That member and several others in the transport structure were deprecated because of an infinite loop created when using realtime configuration. See 2451d4e4550336197ee2e482750cc53f30afa352 ASTERISK-26851 Change-Id: I0533aa13c9ce3c6cc394e0fd2b5bf1cd1b2ef3bc 2017-04-10 17:45 +0000 [d76bc0565c] Richard Mudgett * tcptls.c: Cleanup TCP/TLS listener thread on abnormal exit. Temporarily running out of file descriptors should not terminate the listener thread. Otherwise, when there becomes more file descriptors available, nothing is listening. * Added EMFILE exception to abnormal thread exit. * Added an abnormal TCP/TLS listener exit error message. * Closed the TCP/TLS listener socket on abnormal exit so Asterisk does not appear dead if something tries to connect to the socket. ASTERISK-26903 #close Change-Id: I10f2f784065136277f271159f0925927194581b5 2017-04-08 03:05 +0000 [2b8dbc9e00] Walter Doekes * samples: Undo removal of include from canonicalize-app-names commit. This include was accidentally removed in changeset Ia79aea64de89531362e993e34230c2044a70aa93. My bad. Change-Id: I1d716c7f9590b4e97909fb8bca1f2ed9bd0e4082 2017-04-07 08:35 +0000 [270b485f04] Joshua Colp * pjsip: Add Alembic for PUBLISH support. This change adds database tables for the PUBLISH support so it can be configured using realtime. A minor fix to the res_pjsip_publish_asterisk module was done so that it read the sorcery configuration from the correct section. Finally the sample configuration files have been updated. ASTERISK-26928 Change-Id: I81991ae5c75af98d247f7eacd1c0b0a763675952 2017-04-07 08:06 +0000 [7a46cd7433] Alexander Traud * pjproject_bundled: Crash on pj_ssl_get_info() while ioqueue_on_read_complete(). When the Asterisk channel driver res_pjsip offers SIP-over-TLS, sometimes, not reproducible, Asterisk crashed in pj_ssl_sock_get_info() because a NULL pointer was read. This change avoids this crash. ASTERISK-26927 #close Change-Id: I24a6011b44d1426d159742ff4421cf806a52938b 2017-04-05 09:10 +0000 [e6ae3651b8] Walter Doekes * samples: Canonicalize app names in extensions.conf.sample. This takes care of warnings by ossobv/asterisklint. Change-Id: Ia79aea64de89531362e993e34230c2044a70aa93 2017-04-04 16:20 +0000 [01e9eaf3a6] George Joseph * pjproject_bundled: Add 3 upstream patches 0035-r5572-svn-backport-dialog-transaction-deadlock.patch 0036-r5573-svn-backport-ua-pjsua-transaction-deadlock.patch 0037-r5576-svn-backport-session-timer-crash.patch Also removed the progress bar from wget download to stdout. ASTERISK-26905 #close Reported-by: Ross Beer Change-Id: I268fb3cf71a3bb24283ff0d24bd8b03239d81256 2017-04-04 11:44 +0000 [fac5115c43] Troy Bowman * app_queue: Log reason for PAUSEALL/UNPAUSEALL We needed the reason for our reporting when agents pause/unpause all of their queues at once. This is a small, simple patch that adds a reason for PAUSEALL and UNPAUSEALL. I have been using it in production for years. ASTERISK-26920 #close Change-Id: Ifb3f0d1a0abd5194253d9794023546e1395baf3d 2017-04-05 14:50 +0000 [40e9d5e8b7] George Joseph * sample_config: Add samples for pubsub to pjsip.conf.sample Added: * outbound-publish * resource_list * inbound-publication * asterisk-publication Change-Id: I65043a896c35483f30a92d30b5b118359af7ba5a 2017-04-03 15:38 +0000 [f2ee8ac21e] Richard Mudgett * res_pjsip_sdp_rtp.c: Don't alter global addr variable. * create_rtp(): Fix unexpected alteration of global address_rtp if a transport is bound to an address. * create_rtp(): Fix use of uninitialized memory if the endpoint RTP media address is invalid or the transport has an invalid address. ASTERISK-26851 Change-Id: Icde42e65164a88913cb5c2601b285eebcff397b7 2017-03-27 09:03 +0000 [380973cc47] Corey Farrell * CDR: Protect from data overflow in ast_cdr_setuserfield. ast_cdr_setuserfield wrote to a fixed length field using strcpy. This could result in a buffer overrun when called from chan_sip or func_cdr. This patch adds a maximum bytes written to the field by using ast_copy_string instead. ASTERISK-26897 #close patches: 0001-CDR-Protect-from-data-overflow-in-ast_cdr_setuserfie.patch submitted by Corey Farrell (license #5909) Change-Id: Ib23ca77e9b9e2803a450e1206af45df2d2fdf65c 2017-03-25 19:01 +0000 [6c3ae397cb] Daniel Journo * Unused realtime MOH classes not purged on 'moh reload' Purge Realtime MOH classes on 'moh reload' even when musiconhold.conf hasn't changed. ASTERISK-25974 #close Change-Id: I42c78ea76528473a656f204595956c9eedcf3246 2017-03-31 12:09 +0000 [8e36064109] Corey Farrell * core: Improve/simplify handling of required headers. * Report failures if configure finds a required header is missing. * Deduplicate includes between asterisk.h, astmm.h and compat.h. * Unconditionally include headers in compat.h if required elsewhere. Change-Id: Ie67d0185ca71fbfb81c9bdfaebe46a49e3c56dc5 2017-04-03 13:56 +0000 [a889621b14] Richard Mudgett * res_pjsip: Fix transport ref leak. We were leaking a transport ref in multihomed_on_rx_message() which resulted in the FRACK about excessive ref counts. ASTERISK-26916 #close Change-Id: I7a96658a9614a060565bb9ad51cb1c9c11ee145f 2017-04-03 02:30 +0000 [4fc22c7673] Alexander Traud * chan_sip: Session Timers required but refused wrongly. SIP user-agents indicate which protocol extensions are allowed in headers like Supported and Required. Such protocol extensions are Session Timers (RFC 4028) for example. Session Timers are supported since Mantis-10665. Since ASTERISK-21721, not only the first but multiple Supported/Required headers in a message are parsed. In that change, an existing variable was re-used within a newly added do-loop. Currently, at the end of that loop, that variable is an empty string always. Previously, that variable was used within log output. However, the log output was not changed. ASTERISK-26915 #close Change-Id: I09315f31b4d78fb214bb2a9fb6c0f5e143eae990 2017-03-31 16:31 +0000 [48be02c5d8] Joshua Colp * res_pjsip_session: Allow BYE to be sent on disconnected session. It is perfectly acceptable for a BYE to be sent on a disconnected session. This occurs when we respond to a challenge to the BYE for authentication credentials. ASTERISK-26363 Change-Id: I6ef0ddece812fea6665a1dd2549ef44fb9d90045 2017-03-31 13:14 +0000 [e8b1bb3041] Richard Mudgett * chan_vpb.cc: Fix compiler error. Added missing channel technology read/write stream callback initialization. Change-Id: I829043a327d987e0d964485dd3d27964bebbd623 2017-03-30 18:28 +0000 [f9695dc057] Corey Farrell * Forward declare 'struct ast_json' in asterisk.h The ast_json structure is used in many Asterisk headers and is often the only part of json.h used. This adds a forward declaration to asterisk.h and removes the include of json.h from many headers. The declaration has been left in endpoints.h and stasis.h to avoid problems with source files that use ast_json functions without directly including json.h. ari.h continues to include json.h as it uses enum ast_json_encoding_format. Change-Id: Id766aabce6bed56626d27e8d29f559b5e687b769 2017-03-30 08:11 +0000 [c537f99488] Sean Bright * cdr_pgsql: Fix buffer overflow calling libpq Implement the same buffer size checking done in cel_pgsql. ASTERISK-26896 #close Reported by: twisted Change-Id: Iaacfa1f1de7cb1e9414d121850d2d8c2888f3f48 2017-03-28 13:01 +0000 [a7d94f504f] Walter Doekes * build: Fix deb build issues with fakeroot If DESTDIR is set, don't call ldconfig. Assume that DESTDIR is used to create a binary archive. The ldconfig call should be delegated to the archive postinst script. This fixes the case where fakeroot wraps 'make install' causing $EUID to be 0 even though it doesn't have permission to call ldconfig. The previous logic in configure.ac to detect and correct libdir has been removed as it was not completely accurate. CentOS 64-bit users should again specifiy --libdir=/usr/lib64 when configuring to prevent install to /usr/lib. Updated Makefile:check-old-libdir to check for orphans in lib64 when installing to lib as well as orphans in lib when installing to lib64. Updated Makefile and main/Makefile uninstall targets to remove the orphans using the new logic. ASTERISK-26705 Change-Id: I51739d4a03e60bff38be719b8d2ead0007afdd51 2017-03-27 15:32 +0000 [f3290d6b66] Joshua Colp * sdp: Add support for setting connection address and clean up state. This change cleans up state management for media streams by moving RTP instances into their own session structure and adding additional details that are not relevant to the core (such as connection address). These can live either in the local capabilities or joint capabilities. The ability to set explicit connection address information for the purposes of direct media and NAT has also been added at the global and stream specific level. ASTERISK-26900 Change-Id: If7e5307239a9534420732de11c451a2705b6b681 2017-03-29 10:11 +0000 [5c1ea3ebbd] Sean Bright * astobj2: Prevent potential deadlocks with ao2_global_obj_release The ao2_global_obj_release() function holds an exclusive lock on the global object while it is being dereferenced. Any destructors that run during this time that call ao2_global_obj_ref() will deadlock because a read lock is required. Instead, we make the global object inaccessible inside of the write lock and only dereference it once we have released the lock. This allows the affected destructors to fail gracefully. While this doesn't completely solve the referenced issue (the error message about not being able to create an IQ continues to be shown) it does solve the backtrace spew that accompanied it. ASTERISK-21009 #close Reported by: Marcello Ceschia Change-Id: Idf40ae136b5070dba22cb576ea8414fbc9939385 2017-03-30 10:18 +0000 [4e5cc70fb4] Corey Farrell * CEL: Remove header declarations of non-existant functions. ast_cel_alloc and ast_cel_destroy do not exist in code, remove them from the headers. Change-Id: I99ce848e2e109e7d61771559f559b9e57973e45c 2017-03-27 11:49 +0000 [f66edcb8b0] Josh Roberson * cel_pgsql.c: Fix buffer overflow calling libpq PQEscapeStringConn() expects the buffer passed in to be an adequitely sized buffer to write out the escaped SQL value string into. It is possible, for large values (such as large values to Dial with a lot of devices) to have more than our 512+1 byte allocation and thus cause libpq to create a buffer overrun. glibc will nicely ABRT asterisk for you, citing a stack smash. Let's only allocate it to be as large as needed: If we have a value, then (strlen(value) * 2) + 1 (as recommended by libpq), and if we have none, just one byte to hold our null will do. ASTERISK-26896 #close Change-Id: If611c734292618ed68dde17816d09dd16667dea2 2017-03-29 08:04 +0000 [e76cc51d5e] Alexander Traud * srtp: Allow zero as tag value for a sRTP Crypto Suite. ASTERISK-25490 #close Change-Id: I1c5fc0942c33c96d62b24203aad0f1e1a1a0131f 2017-03-28 13:10 +0000 [2fe52174de] George Joseph * res_pjsip_config_wizard: Add 2 new parameters to help with proxy config Two new parameters have been added to the pjsip config wizard. * Setting 'sends_line_with_registrations' to true will cause the wizard to skip the creation of an identify object to match incoming request to the endpoint and instead add the line and endpoint parameters to the outbound registration object. * Setting 'outbound_proxy' is a shortcut for adding individual endpoint/outbound_proxy, aor/outbound_proxy and registration/outbound_proxy parameters. Change-Id: I678e5f80765734c056620528a6d40d82736ceeb0 (cherry picked from commit a827892ff77cd37912b528d9c45b446be091bbc0) (cherry picked from commit 27344675be1941d30508c6e6bd684acdd0791e1a) 2017-03-28 09:29 +0000 [7c0b12dc41] Sean Bright * alembic: Turn off execute bit on non-executable python scripts Change-Id: I744c986da4a38aeff8c00837eb89de7841fbc86c 2017-03-27 12:37 +0000 [3d8899bacf] Richard Mudgett * Add DTLS sanity check. Change-Id: Ib32612cf6c7ce9213a11b9cba82f630f8cd3564b 2017-03-08 07:24 +0000 [5d938045d4] Joshua Colp * channel: Remove old epoll support and fixed max number of file descriptors. This change removes the old epoll support which has not been used or maintained in quite some time. The fixed number of file descriptors on a channel has also been removed. File descriptors are now contained in a growable vector. This can be used like before by specifying a specific position to store a file descriptor at or using a new API call, ast_channel_fd_add, which adds a file descriptor to the channel and returns its position. Tests have been added which cover the growing behavior of the vector and the new API call. ASTERISK-26885 Change-Id: I1a754b506c009b83dfdeeb08c2d2815db30ef928 2017-03-27 09:35 +0000 [fd204d5c65] Sean Bright * res_musiconhold: Document the 'format' option ASTERISK-26086 #close Reported by: Jens Bürger Change-Id: I6aab666c0bf01fd0c64d7a5bcb22fa7f5d41335e 2017-03-24 07:43 +0000 [cf6a6226ab] Sean Bright * core: Remove embedded module support This has not worked for some time and is no longer actively maintained. Change-Id: I5110b0db69c152761b58fa025cb0a53b0e544d99 2017-03-27 08:58 +0000 [d22c678999] Sean Bright * res_musiconhold: Don't chdir() when scanning MoH files There doesn't appear to be any reason that we are chdir'ing in moh_scan_files, and in the event of an Asterisk crash, the core files may not get written because we have changed into a read-only directory. ASTERISK-23996 #close Reported by: Walter Doekes Change-Id: Iac806dce01b3335963fbd62d4b4da9a65c614354 2017-03-23 09:48 +0000 [d5a8799c4b] Sean Bright * res_xmpp: Use incremental backoff when a read error occurs If a read error occurs, we immediately attempt a reconnect without any delay. Instead, let's sleep and backoff up to 60 seconds before we try again. ASTERISK-24712 #close Reported by: Matthias Urlichs Change-Id: I6fe10ef4734837727437beab715e336777f13f48 2017-03-24 11:29 +0000 [d08c69a9e2] Sean Bright * res_pjsip_sdp_rtp: Set hangup cause for RTP timeouts chan_sip sets the hangup cause code to AST_CAUSE_REQUESTED_CHAN_UNAVAIL (44) when a channel is hung up due to an RTP timeout. So do the same when it happens with PJSIP for parity. Change-Id: I3546ebbde6460c22a27c9da1bf321711b5961ab8 2017-03-23 14:01 +0000 [d2f2cdf476] Kevin Harwell * AMI: Updated version Updated the AMI version for the following reason (see CHANGES for more details): The 'PJSIPShowEndpoint' command's response event of 'IdentifyDetail' now contains a new optional parameter, 'MatchHeader'. Change-Id: Ie206913ef1dcfa6a2ebe3282da2387e52d6f05b9 2017-03-23 12:07 +0000 [12dde3b568] Kevin Harwell * pjproject_bundled: raise timeout value used when downloading After configuring Asterisk with '--with-pjproject-bundled' the configure/build process attempts to download pjproject from its download site. Currently, a timeout of 10 seconds is used that will stop the download process if pjproject has not been fully downloaded in that time. For some systems this was not enough time and the process was timing out too early. This patch raises the download timeout value to '60'. Also, this patch fixes another bug where the DOWNLOAD_TIMEOUT variable was not being properly exported due to a naming error. DOWNLOAD_MAX_TIMEOUT is now properly renamed to DOWNLOAD_TIMEOUT. ASTERISK-26814 #close Change-Id: Ia56e4e8a3d39db76bc8a1852b2cf07ec10b39842 2017-03-22 20:33 +0000 [98a88e9ffa] Sean Bright * res_xmpp: Correct implementation of JABBER_STATUS & JabberStatus The documentation for JABBER_STATUS (and the deprecated JabberStatus app) indicate that a return value of 7 indicates that the specified buddy was not in the roster. It also indicates that you can specify a "bare" JID (one without a resource). Unfortunately the actual behavior does not match the documented behavior. Assuming that our roster includes the buddy online and available "valid@example.org/Valid" and does *not* include the buddy "invalid@example.org", the JABBER_STATUS() function returns the following before this patch: +------------------------------+------------+--------------------------+ | Buddy | Status | Result | +------------------------------+------------+--------------------------+ | valid@example.org | Online | 7 (Not in roster) | | valid@example.org/Valid | Online | 1 (Online) | | valid@example.org/Invalid | N/A | 7 (Not in roster) | | invalid@example.org | N/A | Error logged, no return | | invalid@example.org/Valid | N/A | Error logged, no return | +------------------------------+------------+--------------------------+ And after this patch: +------------------------------+------------+--------------------------+ | Buddy | Status | Result | +------------------------------+------------+--------------------------+ | valid@example.org | Online | 1 (Online) | | valid@example.org/Valid | Online | 1 (Online) | | valid@example.org/Invalid | N/A | 6 (Offline) | | invalid@example.org | N/A | 7 (Not in roster) | | invalid@example.org/Valid | N/A | 7 (Not in roster) | +------------------------------+------------+--------------------------+ This brings the behavior in line with the documentation. ASTERISK-23510 #close Reported by: Anthony Critelli Change-Id: I9c3241035363ef4a6bdc21fabfd8ffcd9ec657bf 2017-03-23 09:45 +0000 [be94105d6d] Sean Bright * res_xmpp: Try to provide useful errors messages from OpenSSL If any errors occur during the TLS connection setup, we currently dump a fairly generic error message. So instead we try to pull in something useful from OpenSSL to report instead. ASTERISK-24712 Reported by: Matthias Urlichs Change-Id: I288500991a9681f447d92913b11fedaf426087f4 2017-03-23 05:19 +0000 [ee81ee1f14] Sean Bright * res_xmpp: Fix ref counting issue The only remaining reference to the endpoint is in the endpoints container, and because it is unlinked in ast_endpoint_shutdown, we don't have to explicitly cleanup the endpoint ourselves. Change-Id: I912a2692e52d3e2ed445b32d8ae3f9004bc2f2e8 2017-03-23 09:30 +0000 [9493981419] Sean Bright * res_xmpp: Correctly check return value of SSL_connect SSL_connect returns non-zero for both success and some error conditions so simply negating is inadequate. Change-Id: Ifbf882896e598703b6c615407fa456d3199f95b1 2017-03-22 17:32 +0000 [7657c279b5] Sean Bright * res_xmpp: Don't crash when trying to send a message without a connection If we never establish a connection to our Jabber server, iksemel never sets up its internal transport pointer, so attempting to send a message dereferences a NULL pointer and causes a crash. ASTERISK-21855 #close Reported by: Jeremy Kister Change-Id: I204a568894e4a53ab929783ecc594a000f04d79c 2017-03-22 15:40 +0000 [0136ec12a3] Sean Bright * res_xmpp: Include client name in connection related error messages ASTERISK-25622 #close Reported by: Sean Darcy Change-Id: I8472cb7bfb58d411a3cfbd482da98cae2d94d1e9 2017-03-20 13:27 +0000 [9b103e7bea] Joshua C. Colp * rtp_engine: allocate RTP dynamic payloads per session Dynamic payload types were statically defined in Asterisk. This unfortunately limited the number of dynamic payloads that could be registered. With this patch dynamic payload type numbers are now assigned dynamically and per RTP instance. However, in order to limit any issues where some clients expect the old statically defined value this patch makes it so the value Asterisk used to pre- designate is used for the dynamic assignment if available. An option, "rtp_use_dynamic", has also been added (can be set in asterisk.conf) that turns the new dynamic behavior on or off. When off it reverts back to using statically defined payload values. This option defaults to "yes" in Asterisk 15. ASTERISK-26515 #close patches: ASTERISK-26515.diff submitted by jcolp (license 5000 Change-Id: I7653465c5ebeaf968f1a1cc8f3f4f5c4321da7fc 2017-03-21 12:32 +0000 [bb2936f3e4] Sebastian Gutierrez * cdr: Allow setting of user field from 'h' extension The CDR code previously did not allow the user field to be set from the 'h' extension in the dialplan. This change removes that limitation and allows it to be set. ASTERISK-26818 Change-Id: I0fed8a79b5e408bac4e30542b8f33a61c5ed9aa6 2017-03-14 16:45 +0000 [6b7697ed48] Richard Begg * res_pjsip_session: Enable RFC3578 overlap dialing support. Support for RFC3578 overlap dialling (i.e. 484 Response to partially matched destinations) as currently provided by chan_sip is missing from res_pjsip. This patch adds a new endpoint attribute (allow_overlap) [defaults to yes] which when set to yes enables 484 responses to partial destination matches rather than the current 404. ASTERISK-26864 Change-Id: Iea444da3ee7c7d4f1fde1d01d138a3d7b0fe40f6 2017-03-21 06:59 +0000 [d4fcf196a2] Sean Bright * res_hep: Capture actual transport type in use Rather than hard-coding UDP, allow consumers of the HEP API to specify which protocol is in use. Update the PJSIP provider to pass in the current protocol type. ASTERISK-26850 #close Change-Id: I54bbb0a001cfe4c6a87ad4b6f2014af233349978 2017-03-21 09:57 +0000 [1bf839d44b] Sean Bright * Revert "app_queue: Handle the caller being redirected out of a queue bridge" This reverts commit 163e9e53dc7d84dd42721e733b7706c8147bdd27. Change-Id: Ief28479c77a298879dfe2c56be7ee92dc465da4b 2017-03-21 08:26 +0000 [6b4b87787c] Sean Bright * res_pjsip_messaging: Check URI type before dereferencing We aren't validating that the URI we just parsed is a SIP/SIPS one before trying to access the user, host, and port members of a possibly uninitialized structure. Also update the MessageSend documentation to indicate what 'from' formats are accepted. ASTERISK-26484 #close Reported by: Vinod Dharashive Change-Id: I476b5cc5f18a7713d0ee945374f2a1c164857d30 2017-03-13 15:21 +0000 [65ad554c98] Joshua Elson * pjsip: prevent memory corruption on creation of xml bodies ASTERISK-26776 #close Change-Id: I884b6f4e8233a355d0be687ec78d41bc0e4d3fd2 2017-03-20 16:27 +0000 [fc794de756] Sean Bright * bridge_softmix: Ignore non-voice frames from translator Some codecs - codec_speex specifically - take voice frames and return other types of frames, like CNG. If we subsequently treat those as voice frames, we'll run into trouble when destroying the frame because of the requirement that each voice frame have an associated format. ASTERISK-26880 #close Reported by: Kirsty Tyerman Change-Id: I43f8450c48fb276ad8b99db8512be82949c1ca7c 2017-03-14 23:49 +0000 [25016a74f8] Aaron An * audiohook.c: Lost RTP packets lead to out-of-sync MixMonitor. Fixed a bug in function "ast_audiohook_write_frame" that checked the variable other_factory_samples and only flushed the factories, so they would be in sync, when other_factory_samples > 0. When there is not any rtp incoming the variable other_factory_samples will be 0, and although the result of "our_factory_ms - other_factory_ms" may be very large, this led to the record file not syncing. ASTERISK-26875 #close Reported-by: Aaron An Tested-by: Aaron An Change-Id: Ia4d890fb8fc1636a7188502bab35f555685aea22 2017-03-18 12:30 +0000 [fc71c18a9b] Sean Bright * thread safety: Don't use getprotobyname() POSIX does not require getprotobyname() to be thread safe and some implementations use static memory which causes issues when multiple threads are used. Further, our usage of it today is just to ultimately get IPPROTO_TCP for calls to setsockopt(). So instead we just use IPPROTO_TCP directly. Change-Id: I2e14e58674808f7ce99b2f5e900d0f90d0d8da48 2017-03-19 13:26 +0000 [516e028b44] Sean Bright * res_rtp_asterisk: Pass correct data length to ast_rtcp_interpret We are currently passing in the capacity of the read buffer instead of the number of bytes that we actually read off the wire. Change-Id: I60465049727d955c7f9a5e529e6f2aaff04cda36 2017-03-14 09:27 +0000 [79069f8ccb] Robert Mordec * app_queue: Member stuck as pending after forwarding previous call from queue Queue member will get stuck in pending_members if queue calls a device that is different from the one observed for state changes. This patch removes members from pending_members as a result of channel stasis events such as blind or attended transfers and hangup. ASTERISK-26862 #close Change-Id: I8bf6df487b9bb35726c08049ff25cdad5e357727 2017-02-22 23:26 +0000 [8cb4f9cea1] Richard Mudgett * CHANNEL(callid): Give dialplan access to the callid. * Added CHANNEL(callid) to retrieve the call identifier log tag associated with the channel. Dialplan now has access to the call log search key associated with the channel so it can be saved in case there is a problem with the call. ASTERISK-26878 Change-Id: I2c97ebd928b6f3c5bc80c5729e4d3c07f453049f 2017-03-16 08:42 +0000 [c13ea6080e] Sean Bright * app_queue: Fix locking behavior in stasis message handlers The queue_stasis_data structure contains various mutable fields that require appropriate locking. Specifically, the 'dying,' 'member_uniqueid,' and 'caller_uniqueid' fields need to be locked when read from or written to. Change-Id: I246b7dbff8447acc957a1299f6ad0ebd0fd39088 2017-03-07 19:28 +0000 [15aa3c0a23] Sean Bright * chan_sip: Add rtcp-mux support ASTERISK-26846 #close Change-Id: I541a1602ff55ab73684e9f8002edb9e0e745d639 2017-03-16 16:50 +0000 [57656e2b5b] Richard Mudgett * app_confbridge: Fix ConfbridgeTalking AMI event description. Thanks to Chris Howard for pointing this out on the wiki. Change-Id: I18e56de09a70e736b5d04719d45ef29cf0636705 2017-03-16 16:37 +0000 [82982a191c] Richard Mudgett * res_pjsip_asterisk.c: Fix compile error if libsrtp is not installed. struct ast_rtcp does not define the dtls member if SRTP is not enabled. ASTERISK-26732 Change-Id: Id15ea212e04490e012f2cf4a56818b4dd948875e 2017-03-16 15:45 +0000 [49b1f1ca16] Richard Mudgett * res_pjsip_sdp_rtp.c: Fix cut-n-paste error We were inadvertenly referencing the cos_video option to determine if we should set the tos_audio and cos_audio value on the RTP instance. Change-Id: Ia7964f486801d39dc6f5dae570baff079e1595b0 2017-03-16 10:39 +0000 [e6dc28b78f] Matt Jordan * res/res_pjsip_session: Only check localnet if it is defined If local_net is not defined on a transport, transport_state->localnet will be NULL. ast_apply_ha will, be default, return AST_SENSE_ALLOW in this case, causing the external_media_address, if set, to be skipped. This patch causes us to only check if we are sending within a network if local_net is defined. ASTERISK-26879 #close Change-Id: Ib661c31a954cabc9c99f1f25c9c9a5c5b82cbbfb 2017-03-14 16:22 +0000 [44568fc712] Richard Begg * res_pjsip_sdp_rtp: RTP instance does not use same IP as explicit transport Currently a wildcard address is used for the local RTP socket, which will not always result in the same address as used by the SIP socket (e.g. if explicit transport addresses are configured). Use the transport's host address when binding new local RTP sockets if available. ASTERISK-26851 Change-Id: I098c29c9d1f79a4f970d72ba894874ac75954f1a 2017-03-07 08:33 +0000 [5013d8f5d3] George Joseph * res_pjsip: Symmetric transports A new transport parameter 'symmetric_transport' has been added. When a request from a dynamic contact comes in on a transport with this option set to 'yes', the transport name will be saved and used for subsequent outgoing requests like OPTIONS, NOTIFY and INVITE. It's saved as a contact uri parameter named 'x-ast-txp' and will display with the contact uri in CLI, AMI, and ARI output. On the outgoing request, if a transport wasn't explicitly set on the endpoint AND the request URI is not a hostname, the saved transport will be used and the 'x-ast-txp' parameter stripped from the outgoing packet. * config_transport was modified to accept and store the new parameter. * config_transport/transport_apply was updated to store the transport name in the pjsip_transport->info field using the pjsip_transport->pool on UDP transports. * A 'multihomed_on_rx_message' function was added to pjsip_message_ip_updater that, for incoming requests, retrieves the transport name from pjsip_transport->info and retrieves the transport. If transport->symmetric_transport is set, an 'x-ast-txp' uri parameter containing the transport name is added to the incoming Contact header. * An 'ast_sip_get_transport_name' function was added to res_pjsip. It takes an ast_sip_endpoint and a pjsip_sip_uri and returns a transport name if endpoint->transport is set or if there's an 'x-ast-txp' parameter on the uri and the uri host is an ipv4 or ipv6 address. Otherwise it returns NULL. * An 'ast_sip_dlg_set_transport' function was added to res_pjsip which takes an ast_sip_endpoint, a pjsip_dialog, and an optional pjsip_tpselector. It calls ast_sip_get_transport_name() and if a non-NULL is returned, sets the selector and sets the transport on the dialog. If a selector was passed in, it's updated. * res_pjsip/ast_sip_create_dialog_uac and ast_sip_create_dialog_uas were modified to call ast_sip_dlg_set_transport() instead of their original logic. * res_pjsip/create_out_of_dialog_request was modified to call ast_sip_get_transport_name() and pjsip_tx_data_set_transport() instead of its original logic. * Existing transport logic was removed from endpt_send_request since that can only be called after a create_out_of_dialog_request. * res_pjsip/ast_sip_create_rdata was converted to a wrapper around a new 'ast_sip_create_rdata_with_contact' function which allows a contact_uri to be specified in addition to the existing parameters. (See below) * res_pjsip_pubsub/internal_pjsip_evsub_send_request was eliminated since all it did was transport selection and that is now done in ast_sip_create_dialog_uac and ast_sip_create_dialog_uas. * 'contact_uri' was added to subscription_persistence. This was necessary because although the parsed rdata contact header has the x-ast-txp parameter added (if appropriate), subscription_persistence_update stores the raw packet which doesn't have it. subscription_persistence_recreate was then updated to call ast_sip_create_rdata_with_contact with the persisted contact_uri so the recreated subscription has the correct transport info to send the NOTIFYs. * res_pjsip_session/internal_pjsip_inv_send_msg was eliminated since all it did was transport selection and that is now done in ast_sip_create_dialog_uac. * pjsip_message_ip_updater/multihomed_on_tx_message was updated to remove all traces of the x-ast-txp parameter from the outgoing headers. NOTE: This change does NOT modify the behavior of permanent contacts specified on an aor. To do so would require that the permanent contact's contact uri be updated with the x-ast-txp parameter and the aor sorcery object updated. If we need to persue this, we need to think about cloning permanent contacts into the same store as the dynamic ones on an aor load so they can be updated without disturbing the originally configured value. You CAN add the x-ast-txp parameter to a permanent contact's uri but it would be much simpler to just set endpoint->transport. Change-Id: I4ee1f51473da32ca54b877cd158523efcef9655f 2017-03-16 09:07 +0000 [68749a9fa7] Joshua Colp * res_rtp_asterisk: Fix crash when RTCP is not present when DTLS is stopped. This change removes an assumption that when DTLS is stopped an RTCP session will be present on the RTP session. This is not always the case. ASTERISK-26732 Change-Id: Ib9f7c09ce0b005efe362dbcc8795202b18f94611 2017-03-15 13:24 +0000 [c87e7dd9ec] Richard Mudgett * autochan/mixmonitor/chanspy: Fix unsafe channel locking and references. Dereferencing struct ast_autochan.chan without first calling ast_autochan_channel_lock() is unsafe because the pointer could change at any time due to a masquerade. Unfortunately, ast_autochan_channel_lock() itself uses struct ast_autochan.chan unsafely and can result in a deadlock if the original channel happens to get destroyed after a masquerade in addition to the pointer getting changed. The problem is more likely to happen with v11 and earlier because masquerades are used to optimize out local channels on those versions. However, it could still happen on newer versions if the channel is executing a dialplan application when the channel is transferred or redirected. In this situation a masquerade still must be used. * Added a lock to struct ast_autochan to safely be able to use ast_autochan.chan while trying to get the channel lock in ast_autochan_channel_lock(). The locking order is the channel lock then the autochan lock. Locking in the other direction requires deadlock avoidance. * Fix unsafe ast_autochan.chan usages in app_mixmonitor.c. * Fix unsafe ast_autochan.chan usages in app_chanspy.c. * app_chanspy.c: Removed unused autochan parameter from next_channel(). ASTERISK-26867 Change-Id: Id29dd22bc0f369b44e23ca423d2f3657187cc592 2017-03-07 14:13 +0000 [10fa49e327] Mark Michelson * Add rtcp-mux support This commit adds support for RFC 5761: Multiplexing RTP Data and Control Packets on a Single Port. Specifically, it enables the feature when using chan_pjsip. A new option, "rtcp_mux" has been added to endpoint configuration in pjsip.conf. If set, then Asterisk will attempt to use rtcp-mux with whatever it communicates with. Asterisk follows the rules set forth in RFC 5761 with regards to falling back to standard RTCP behavior if the far end does not indicate support for rtcp-mux. The lion's share of the changes in this commit are in res_rtp_asterisk.c. This is because it was pretty much hard wired to have an RTP and an RTCP transport. The strategy used here is that when rtcp-mux is enabled, the current RTCP transport and its trappings (such as DTLS SSL session) are freed, and the RTCP session instead just mooches off the RTP session. This leads to a lot of specialized if statements throughout. ASTERISK-26732 #close Reported by Dan Jenkins Change-Id: If46a93ba1282418d2803e3fd7869374da8b77ab5 2017-03-14 08:49 +0000 [dc4cdafd42] Torrey Searle * res/res_pjsip_refer: call xfer w/o extension When transfering to a URI without an extension, ensure that the s extension of the dialplan is entered ASTERISK-26869 #close Change-Id: I07403df66cf93f09e00a40ab5b41bfc6f72b1525 2017-03-09 11:05 +0000 [982d6173c5] Sean Bright * app_queue: Handle the caller being redirected out of a queue bridge A caller can leave the Queue() application after being bridged with a member in a few ways: * Caller or member hangup * Caller is transferred somewhere else (blind or atx) * Caller is externally redirected elsewhere The first 2 scenarios are currently handled by subscribing to stasis messages, but the 3rd is not explicitly covered. If a caller is redirected away from the Queue() application, the member who was last bridged with that caller will remain in an "In use" state until the caller hangs up. This patch adds handling of the caller leaving the queue via redirection. We monitor the caller-member bridge, and if the caller is the one that leaves, we treat it the same as we would a caller hangup. ASTERISK-26400 #close Reported by: Etienne Lessard Change-Id: Iba160907770de5a6c9efeffc9df5a13e9ea75334 2017-03-15 08:44 +0000 [0b8a57af6d] Joshua Colp * res_pjsip_endpoint_identifier_ip: Don't output error if no header_match. This change ensures that if no header_match option is set on an identify an error message is not output stating the option is set to an invalid value. ASTERISK-26863 Change-Id: I239bc6d2319dd3da24ba96a38d4d6e9b5526d62a 2017-03-14 07:50 +0000 [1475604eff] Matt Jordan * res_pjsip_endpoint_identifier_ip: Add an option to match requests by header This patch adds a new features to the endpoint identifier module, 'match_header'. When set, inbound requests are matched by a provided SIP header: value pair. This option works in conjunction with the existing 'match' configuration option, such that if any 'match*' attribute matches an inbound request, the request is associated with the specified endpoint. Since this module now identifies by more than just IP address, appropriate renaming of the module and/or variables can be done in a non-release branch. ASTERISK-26863 #close Change-Id: Icfc14835c962f92e35e67bbdb235cf0589de5453 (cherry picked from commit 30f52d79d7fc9ab0b628bef2b61ea515413795a2) 2017-03-14 16:16 +0000 [f997090877] Richard Mudgett * pbx.c: Fix crash from malformed exten pattern. Forgetting to indicate an exten is a pattern can cause a crash if the "pattern" has a character set range. e.g., "9999[3-5]" The crash is due to a buffer overwrite because the '-' exten eye-candy wasn't removed as expected and overran the allocated space. The buffer overwrite is fixed two ways in this patch. 1) Fix ext_strncpy() to distinguish between pattern and non-pattern extens. Now '-' characters are removed when they are eye-candy and not when they are part of a pattern character set. Since the function is private to pbx.c, the return value now returns the number of bytes written to the destination buffer instead of the strlen() of the final buffer so the callers that care don't need to add one. 2) Fix callers to ext_strncpy() to supply the correct available buffer size of the destination buffer. ASTERISK-26668 Change-Id: I555d97411140e47e0522684062d174fbe32aa84a 2017-03-14 16:51 +0000 [0dc007e94d] Richard Begg * chan_iax2: Reload of iax peer results in loss of host address/port When using a non-dynamic peer address, build_peer() invalidates the peer address structure by setting the address family to unspecified. However, if dnsmgr is enabled, the subsequent call to ast_dnsmgr_lookup() will not amend the peer address if the cache is still valid, resulting in peer connectivity failures. To fix this, we call ast_dnsmgr_refresh() instead. ASTERISK-26865 Change-Id: Id8a89a2f771ebbaf32255a35fe596a6dcb97a082 2017-03-14 15:12 +0000 [59130260e7] Matt Jordan * configure: Don't use the progress bar with curl when downloading to stdout In some scenarios, such as when there may not be a terminal (such as inside a Docker container), curl will apparently direct the progress bar to stdout. This can cause extra data to be appended to a file curl'd down to stdout, resulting in md5 verification failures. This patch removes the progress bar, and tells curl to download the file silently. ASTERISK-26872 #close Change-Id: Ie860b020f627d4372b3e7ce9453de5faafeebe6c 2017-03-02 17:11 +0000 [8470c2bdea] George Joseph * RFC sdp: Initial SDP creation * Added additional fields to ast_sdp_options. * Re-organized ast_sdp. * Updated field names to correspond to RFC4566 terminology. * Created allocs/frees for SDP children. * Created getters/setters for SDP children where appropriate. * Added ast_sdp_create_from_state. * Refactored res_sdp_translator_pjmedia for changes. Change-Id: Iefbd877af7f5a4d3c74deead1bff8802661b0d48 2017-03-14 09:55 +0000 [05713c36ea] Matt Jordan * configs/samples/hep.conf.sample: Clarify how the HEP stack works This patch updates the documenation in hep.conf.sample to better specify how the various HEP modules interact. ASTERISK-26717 #close Change-Id: I337fb742a89e3ec5edc7fc7a7a0295218d841124 2017-03-14 09:59 +0000 [0ded269bfa] Roman Bedros (License 6842) * funcs/func_devstate: Remove new line in Device field of during module load During module loading of func_devstate, Asterisk emits the current device state of all Custom device states currently stored in the AstDB. This was erroneously including a new line character ('\n') to the end of the device state, causing two new lines to be emitted in DeviceStateChange AMI events. Note that this only happened for those device state changes that occurred during startup. Regular device state changes for Custom device states are handled elsewhere, and did not have the newline. ASTERISK-26643 #close Reported by: Roman Bedros Tested by: Matt Jordan patches: ami_devstate.diff uploaded by Roman Bedros (License 6842) Change-Id: I1f4c02fc79c448d43bf725f5039c83d9611d7d93 2017-03-14 09:37 +0000 [b03b72717f] Matt Jordan * main/stasis_cache: Demote the ERROR message when removing a nonexistent item This patch demotes the ERROR message that is displayed when a nonexistent item is removed from the Stasis cache. The genesis of this demotion is due to chan_sip's realtime peers and their interaction with Asterisk's core ast_endpoint code, but ostensibly it could happen from other channel drivers as well. Since Mark Michelson already did an excellent job of explaining on this issue, it is quoted here for posterity: "Internally, when a realtime peer is retrieved, Asterisk creates an ast_endpoint structure. When that peer is destroyed, the ast_endpoint is destroyed as well. Part of the destruction of the ast_endpoint involves clearing the Stasis cache of all information about that endpoint. The problem here is that the act of creating the ast_endpoint is not enough to actually put any information in the Stasis cache. Instead, something has to happen, such as a state change, in order for the Stasis cache to have any information about that endpoint. When a device registers, chan_sip creates an ast_endpoint structure, processes the REGISTER, and then destroys the ast_endpoint. When the ast_endpoint is destroyed, there is nothing to destroy in the Stasis cache, so an error message is emitted. When you use rtcachefriends, ast_endpoint structures persist for the lifetime of the module and so you do not see this error message." ASTERISK-25237 #close Change-Id: I53cebc6b4a897a1ab9564182b75c177780feff70 2017-03-08 12:39 +0000 [2d7e68c075] Matt Jordan * res_pjsip_endpoint_identifier_ip: Clean up a spaces/tabs issue Tabs > spaces. Always. Change-Id: I899ff662361c7ab0327173bd7851a67b53dd65f1 2017-03-12 09:21 +0000 [12460b05c1] Joshua Colp * chan_pjsip: Don't assume a session will have a channel. When querying for PJSIP specific information using the dialplan function CHANNEL() it is possible that the underlying session will no longer have a channel associated with it. This is most likely to occur when the RTCP HEP module attempts to get the channel name. If this happens then a crash will occur. This change just adds a check that the channel exists on the session before querying it. ASTERISK-26857 Change-Id: I113479cffff6ae64cf8ed089e9e1565223426f01 2017-03-10 20:29 +0000 [d1ef127084] George Joseph * pjproject_bundled: Reduce the need for rebuilds Bundled pjproject should now only rebuild if one of the menuselect "Compiler Flags" options changes. Change-Id: If114a2e16b9e77af371a600d6a5e197bbf28fe43 2017-03-05 15:26 +0000 [36fed72614] Daniel Journo * pjsip/cli_commands: pjsip show channelstats shows wrong codec * cli_commands.c Fixed CLI output ASTERISK-26822 #close Change-Id: I3889ef6a8f6738fc312fab42db5efacd6e452b01 2017-03-08 14:29 +0000 [b14724adb3] Daniel Journo * res_musiconhold: moh general section is a class and issues warning * res_musiconhold.c: Ensure the general section is not treated as a moh class. ASTERISK-26353 #close Change-Id: Ia3dbd11ea2b43ab3e6c820a9827811dd24bea82d 2017-03-08 17:08 +0000 [35cfd2c0cc] Sean Bright * media_cache: Prefer ast_file_is_readable() over access() Change-Id: Icc0dc6e61b2e68d5cdcb74b016b2726a388c7def 2017-03-07 06:25 +0000 [bc2c66b594] Sean Bright * pbx_spool: Set AST_OUTGOING_ATTEMPT variable on channel Set a variable on the channel that indicates which attempt number we are currently performing to allow for attempt-specific behavior. ASTERISK-26568 #close Reported by: Roman Shubovich Change-Id: Iacd7e8d43b0ed5b6cb021c62f41f1a1f5733dd89 2017-03-07 07:37 +0000 [4e3b0cedba] Joshua Colp * res_pjsip_transport_websocket: Add support for IPv6. This change adds a PJSIP patch (which has been contributed upstream) to allow the registration of IPv6 transport types. Using this the res_pjsip_transport_websocket module now registers an IPv6 Websocket transport and uses it for the corresponding traffic. ASTERISK-26685 Change-Id: Id1f9126f995b31dc38db8fdb58afd289b4ad1647 2017-03-08 08:16 +0000 [60998371e3] Daniel Journo * app_voicemail: Cannot set fromstring on a per-mailbox basis * apps/app_voicemail.c fromstring field added to mailbox which will override the global fromstring if set. ASTERISK-24562 #close Change-Id: I5e90e3a1ec2b2d5340b49a0db825e4bbb158b2fe 2017-03-07 13:38 +0000 [5d0371d743] Mark Michelson * res_http_websocket: Fix faulty read logic. When doing some WebRTC testing, I found that the websocket would disconnect whenever I attempted to place a call into Asterisk. After looking into it, I pinpointed the problem to be due to the iostreams change being merged in. Under certain circumstances, a call to ast_iostream_read() can return a negative value. However, in this circumstance, the websocket code was treating this negative return as if it were a partial read from the websocket. The expected length would get adjusted by this negative value, resulting in the expected length being too large. This patch simply adds an if check to be sure that we are only updating the expected length of a read when the return from a read is positive. ASTERISK-26842 #close Reported by Mark Michelson Change-Id: Ib4423239828a013d27d7bc477d317d2f02db61ab 2017-03-07 08:12 +0000 [d51ca4b406] Jean Aunis * chan_sip: Call not cancelled after receiving a 422 response When receiving a 422 response, the invitestate variable must be reset to INV_CALLING. ASTERISK-26841 Change-Id: Ia0502d6b02192664cefa4e75bafdd2645ce56099 2017-03-07 05:22 +0000 [3ed05badb9] Joshua Colp * core: Add stream topology changing primitives with tests. This change adds a few things to facilitate stream topology changing: 1. Control frame types have been added for use by the channel driver to notify the application that the channel wants to change the stream topology or that a stream topology change has been accepted. They are also used by the indicate interface to the channel that the application uses to indicate it wants to do the same. 2. Legacy behavior has been adopted in ast_read() such that if a channel requests a stream topology change it is denied automatically and the current stream topology is preserved if the application is not capable of handling streams. Tests have also been written which confirm the multistream and non-multistream behavior. ASTERISK-26839 Change-Id: Ia68ef22bca8e8457265ca4f0f9de600cbcc10bc9 2017-03-06 15:54 +0000 [272259a2c6] Daniel Journo * Saynumber is trying to get "and" from "digits/" subfolder * say.c Changed 'digits/and' to 'vm-and' for en_GB ASTERISK-26598 #close Change-Id: If1b713e5daea6f952b339f139178d292a6c4fcfe 2017-03-06 13:15 +0000 [5a74abc53b] Sean Bright * pbx_spool: Gracefully handle long lines in call files Per the linked issue, we aren't checking the buffer filled by fgets() to determine if it contains a newline, so we will fail to correctly parse the trailing portion of a long line. This patch increases the buffer size from 256 to 1024, and skips any line that exceeds that length, logging a warning in the process. ASTERISK-17067 #close Reported by: Dave Olszewski Change-Id: I51bcf270c1b4347ba05b43f18dc2094c76f5d7b0 2017-03-02 21:27 +0000 [c9296b23d1] Richard Mudgett * core: Cleanup ast_get_hint() usage. * manager.c:manager_state_cb() Fix potential use of uninitialized hint[] if a hint does not exist for the requested extension. Ran into this when developing a testsuite test. The AMI event ExtensionStatus came out with the hint header value containing garbage. The AMI event PresenceStatus also had the same issue. * manager.c:action_extensionstate() no need to completely initialize the hint[]. Only initialize the first element. * pbx.c:ast_add_hint() Remove unnecessary assignment. * chan_sip.c: Eliminate an unneeded hint[] local variable. We only care about the return value of ast_get_hint() there. Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b 2017-02-16 04:22 +0000 [7922f26cb0] Jørgen H * res_pjsip WebRTC/websockets: Fix usage of WS vs WSS. According to the RFC[1] WSS should only be used in the Via header for secure Websockets. * Use WSS in Via for secure transport. * Only register one transport with the WS name because it would be ambiguous. Outgoing requests may try to find the transport by name and pjproject only finds the first one registered. This may mess up unsecure websockets but the impact should be minimal. Firefox and Chrome do not support anything other than secure websockets anymore. * Added and updated some debug messages concerning websockets. * security_events.c: Relax case restriction when determining security transport type. * The res_pjsip_nat module has been updated to not touch the transport on Websocket originating messages. [1] https://tools.ietf.org/html/rfc7118 ASTERISK-26796 #close Change-Id: Ie3a0fb1a41101a4c1e49d875a8aa87b189e7ab12 2017-02-24 15:30 +0000 [0560c32375] George Joseph * stream: Unit tests for stream read and tweaks framework * Removed the AST_CHAN_TP_MULTISTREAM tech property. We now rely on read_stream being set to indicate a multi stream channel. * Added ast_channel_is_multistream convenience function. * Fixed issue where stream and default_stream weren't being set on a frame retrieved from the queue. * Now testing for NULL being returned from the driver's read or read_stream callback. * Fixed issue where the dropnondefault code was crashing on a NULL f. * Now enforcing that if either read_stream or write_stream are set when ast_channel_tech_set is called that BOTH are set. * Added the unit tests. ASTERISK-26816 Change-Id: If7792b20d782e71e823dabd3124572cf0a4caab2 2017-03-01 07:23 +0000 [1dacf317f3] Sean Bright * res_config_pgsql: Make 'require' return consistent with other backends res_config_pgsql should match the behavior of other realtime backend drivers so that queue_log can disable adaptive logging. ASTERISK-25628 #close Reported by: Dmitry Wagin Change-Id: Ic1fb1600c7ce10fdfb1bcdc43c5576b7e0014372 2017-02-22 15:11 +0000 [9c55a71798] Mark Michelson * SDP: Add initial SDP state machine. This introduces and documents the various states in the state machine. This also introduces API functions that induce state changes, and places TODO comments telling what needs to be done in addition to what is already there. Those TODOs will be replaced with real code in upcoming changes. Change-Id: I871c0eb480b4c84d83e91ac5628e7a673e8b89ed 2017-02-28 13:48 +0000 [60e9e4fcc0] Sean Bright * media_cache: Mark cache entry stale if cache file is removed In the event that a cache file is removed out from under us, we should treat the cache entry as stale and force a refresh. ASTERISK-26774 #close Reported by: Igor Gamayunov Change-Id: I3b1bd0c999d59d18664ef73a29823bc5b431dc52 2017-02-28 09:41 +0000 [e5b44c26b4] Sean Bright * res_config_pgsql: Release table locks where appropriate The find_table() functions NULL or a locked table pointer. We are not consistently calling release_table() in failure paths. Change-Id: I6f665b455799c84b036e5b34904b82b05eab9544 2017-02-28 05:41 +0000 [6ebdcfe27d] Tzafrir Cohen * pjsip.conf.sample: user_agent: not a specific version Use the description of useragent from sip.conf here. ASTERISK-26825 #close Change-Id: I5b33a4aaa0ae1d793289d05e3bc09521affbf755 2017-02-27 20:07 +0000 [fb68db87b1] George Joseph * res_pjsip_pubsub: Remove unneeded endpoint unref When a subscription was being recreated and the endpoint wasn't found, we were trying to unref the endpoint. This was causing FRACKs. Removed the unref. ASTERISK-26823 #close Change-Id: If86d2aecff8fe853c7f38a1bfde721fcef3cd164 2017-02-16 04:16 +0000 [ee0a123f43] Jørgen H * res_pjsip: Fix crash when contact has no status This change fixes an assumption in res_pjsip that a contact will always have a status. There is a race condition where this is not true and would crash. The status will now be unknown when this situation occurs. ASTERISK-26623 #close Change-Id: Id52d3ca4d788562d236da49990a319118f8d22b5 2017-02-21 18:06 +0000 [22242fef5d] George Joseph * res_pjsip_outbound_registration: Subscribe to network change events Outbound registration now subscribes to network change events published by res_stun_monitor and refreshes all registrations when an event happens. The 'pjsip send (un)register' CLI commands were updated to accept '*all' as an argument to operate on all registrations. The 'PJSIP(Un)Register' AMI commands were also updated to accept '*all'. ASTERISK-26808 #close Change-Id: Iad58a9e0aa5d340477fca200bf293187a6ca5a25 2017-02-27 12:25 +0000 [4692a32ed7] George Joseph * build: Warn if asterisk is installed in both 32 and 64 bit sys dirs ... and clean them both up on uninstall. We've fixed the issue where 'make install' was installing to /usr/lib on 64-bit systems that use /usr/lib64. Now we need to clean up the remnants in /usr/lib. * 'make install' now prints a warning if DESTDIR/ASTLIBDIR contains 'lib64' and libasterisk* shared libraries or modules are also found in DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'. * 'make uninstall' ALWAYS cleans up both DESTDIR/ASTLIBDIR and DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'. ASTERISK-26705 Change-Id: I6edddeb3c07a51e7c7ba7cac3c05e4bf3ec3f01f 2017-02-27 07:02 +0000 [ff2b4308d1] Joshua Colp * bridge_native_rtp: Handle case where channel joins already suspended. The bridge_native_rtp module did not properly handle the case where a smart bridge operation occurs while a channel is suspended. In this scenario the module would incorrectly set up local or remote RTP bridging despite the media having to flow through Asterisk. The remote endpoint would see two media streams and experience wonky audio. The module has been changed so that it ensures both channels are not suspended when performing the native RTP bridging and this requirement has been documented in the bridge technology. ASTERISK-26781 Change-Id: Id4022d73ace837d4a293106445e3ade10dbc7c7c 2016-08-12 11:23 +0000 [5b1796f59d] frahaase * Binaural synthesis (confbridge): DTMF conference management. DTMF configuration options for the binaural softmix bridge: toggle binaural rendering (per channel). ASTERISK-26292 Change-Id: Ibfe708b9fe26097c1798fcbfcc4dc461267d8af8 2017-02-24 11:49 +0000 [2046743938] Joshua Colp * config: Improve documentation and behavior of outbound_proxy option. This change updates the documentation for the outbound_proxy option to ensure it is consistently stated that a full SIP URI must be provided for the option. The res_pjsip_outbound_registration module has also been changed so that the provided outbound_proxy value is checked to ensure it is a URI and if not an error is output stating so. ASTERISK-26782 Change-Id: I6c239a32274846fd44e65b44ad9bf6373479b593 2017-02-23 13:03 +0000 [c07c6714f2] Joshua Colp * channel: Add ast_read_stream function for reading frames from all streams. This change introduces an ast_read_stream function and callback in the channel technology which allows reading frames from all streams and not just the default streams. The stream number has also been added to frames. This is to allow the case where frames are queued onto the channel instead of being read directly from the driver. This change does impose a restriction on reading though: a chain of frames can only contain frames from the same stream. ASTERISK-26816 Change-Id: I5d7dc35e86694df91fd025126f6cfe0453aa38ce 2017-02-09 18:05 +0000 [a537dae6d0] George Joseph * pjproject_bundled: Update for pjproject 2.6 * Removed all 2.5.5 functional patches. * Updated usages of pj_release_pool to be "safe". * Updated configure options to disable webrtc. * Updated config_site.h to disable webrtc in pjmedia. * Added Richard Mudgett's recent resolver patches. Change-Id: Ib400cc4dfca68b3d07ce14d314e829bfddc252c7 2017-02-23 15:49 +0000 [b0067bcf2c] George Joseph * build: Execute ldconfig to build cache. (take two) On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. To make matters worse, options were being passed to ldconfig on both Linux and FreeBSD that actually prevented the rebuild of the cache. * Fedora has a /usr/share/config.site that automatically tells autoconf to use /usr/lib64 but CentOS does not. This logic was copied to configure.ac and modified so systems like Ubuntu, which still use /usr/lib for 64-bit systems, aren't affected. Now that we have them in the correct directory... In order for the system loader to find libasteriskssl and libasteriskpj, one of 3 things has to happen... - The linker cache must be rebuilt including the directory where the libasterisk* libraries were installed. Only root can rebuild the cache. This was busted. - We have to link the asterisk binary with an rpath pointing to the directrory where the libasterisk* libraries were installed. This makes things very complicated and will happen over the collective dead bodies of everyone who's had to package a distribution with an rpath. - Finally, you can start asterisk with LD_LIBRARY_PATH set to the directrory where the libasterisk* libraries were installed. There are no other options. So... * The invokation of ldconfig has been moved from main/Makefile to ASTTOPDIR/Makefile, the options have been removed, and DESTDIR/ASTLIBDIR appended. If you aren't root, you will be warned after the "Asterisk Installation Compete" banner that you must re-run 'make install' as root, manually run 'ldconfig DESTDIR/ASTLIBDIR' as root, or run asterisk with LD_LIBRARY_PATH. ASTERISK-26705 Change-Id: I2a64b7c33a7d3e9bde20f47e3d3ab771977af982 2017-02-23 14:48 +0000 [0f4b349d37] Sean Bright * res_config_pgsql: Fix thread safety problems * A missing AST_LIST_UNLOCK() in find_table() * The ESCAPE_STRING() macro uses pgsqlConn under the hood and we were not consistently locking before calling it. * There were a handful of other places where pgsqlConn was accessed directly without appropriate locking. Change-Id: Iea63f0728f76985a01e95b9912c3c5c6065836ed 2017-02-22 05:00 +0000 [6cc890b880] Joshua Colp * channel: Add support for writing to a specific stream. This change adds an ast_write_stream function which allows writing a frame to a specific media stream. It also moves ast_write() to using this underneath by writing media frames provided to it to the default streams of the channel. Existing functionality (such as audiohooks, framehooks, etc) are limited to being applied to the default stream only. Unit tests have also been added which test the behavior of both non-multistream and multistream channels to confirm that the write() and write_stream() callbacks are invoked appropriately. ASTERISK-26793 Change-Id: I4df20d1b65bd4d787fce0b4b478e19d2dfea245c 2016-08-12 11:23 +0000 [094c26aa68] frahaase * Binaural synthesis (confbridge): Adds binaural synthesis to bridge_softmix. Adds binaural synthesis to bridge_softmix (via convolution using libfftw3). Binaural synthesis is conducted at 48kHz. For a conference, only one spatial representation is rendered. The default rendering is applied for mono-capable channels. ASTERISK-26292 Change-Id: Iecdb381b6adc17c961049658678f6219adae1ddf 2017-02-22 08:53 +0000 [e57961db84] Sean Bright * res_config_ldap: Various code improvements The initial motivation for this patch was to properly handle memory allocation failures - we weren't checking the return values from the various LDAP library allocation functions. In the process, because update_ldap() and update2_ldap() were substantially the same code, they've been consolidated. Change-Id: Iebcfe404177cc6860ee5087976fe97812221b822 2017-02-22 13:08 +0000 [66a35e2451] Michael L. Young * build_tools: Fix download_externals to allow the use of curl or wget Not sure if this is really a bug versus an improvement. I can see it being viewed as a bug though by some. The current build_tools/download_externals file depends on wget in order to download external modules. The current build system is able to discover which tool to use for fetching remote files - either wget or curl. This patch takes advantage of this capability by modifying the two calls to the wget binary to instead use what was discovered by the build system. ASTERISK-26812 #close Change-Id: If9411a2554f009274d377445613ae91192d948a1 2017-02-22 11:12 +0000 [ced73d5b79] Joshua Colp * Revert "build: Execute ldconfig to build cache." This reverts commit 28c8e4f58f0f38792c7c79a05bd07788ebf15332. Change-Id: Ie2e1aaf61fd49045994974a4581545ac8348fe4c 2017-02-21 10:47 +0000 [15ed7af027] Sean Bright * pbx_realtime: Prevent premature extension matching The patterns provided by pbx_realtime were checked in the order in which they were returned from the realtime backend. If there was overlap between multiple patterns, the first one to correctly match was chosen even though it may not have been the best match. We now sort the patterns descending by their length and compare in that order. There may be cases where this still results in a sub-optimal match, but this patch should improve the overall behavior. ASTERISK-18271 #close Reported by: Charlie Smurthwaite Change-Id: I56d9ac15810eb1775966b669c3028e32cc7bd809 2017-02-22 08:32 +0000 [f58aefba5b] Joshua Colp * core: Show streams in "core show channel". The "core show channel" CLI command will now output the streams present on the channel with their details. ASTERISK-26811 Change-Id: I9c95b57aa09415005f0677a1949a0feb07e4987a 2017-02-21 15:09 +0000 [fc70ca9499] Peter Racz * pbx_dundi: DUNDi weight parameter not processed correctly The DUNDi weight field is not always converted from network byte order to host byte order. This can result in incorrect weight values and incorrect selection of DUNDi destinations. ASTERISK-18731 #close Reported by: Peter Racz Patches: dundi_weight.patch (license #6290) patch uploaded by Peter Racz Change-Id: Iba3e1a700ff539db57211a7bbc26f7b22ea9a1be 2017-02-15 14:43 +0000 [a738772edd] Mark Michelson * Add initial SDP state code. This establishes the basic allocation/destruction of an SDP state object, plus some of the simpler getter methods involved. Subsequent tasks will deal with adding a state machine, creating SDPs from capabilities and options, and merging SDPs into a joint SDP. Change-Id: Ie3757ce186f04b65e9d1883f5aace53f24e53709 2017-02-21 10:47 +0000 [ab04a018e4] Sean Bright * realtime: Fix ast_load_realtime_multientry handling ast_load_realtime_multientry() returns an ast_config structure whose ast_categorys are keyed with the empty strings. Several modules were giving semantic meaning to the category names causing problems at runtime. * app_directory: Treated the category name as the mailbox name, and would fail to direct calls to the appropriate extension after an entry was chosen. * app_queue: Queues, queue members, and queue rules were all affected and needed to be updated. * pbx_realtime: Pattern matching would never succeed because the extension entered by the user was always compared to the empty string. Change-Id: Ie7e44986344b0b76ea8f6ddb5879f5040c6ca8a7 2017-02-21 08:56 +0000 [6e6c96d713] Sean Bright * realtime: Centralize some common realtime backend code All of the realtime backends create artificial ast_categorys to pass back into the core as query results. These categories have no filename or line number information associated with them and the backends differ slightly on how they create them. So create a couple helper macros to help make things more consistent. Also updated the call sites to remove redundant error messages about memory allocation failure. Note that res_config_ldap sets the category filename to the 'table name' but that is not read by anything in the core, so I've dropped it. Change-Id: I3a1fd91e0c807dea1ce3b643b0a6fe5be9002897 2017-02-16 10:30 +0000 [28c8e4f58f] Joshua Colp * build: Execute ldconfig to build cache. On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. This change does the minimally invasive thing and executes ldconfig so that the libraries in the lib directory are found and their location cached. By doing so Asterisk starts up fine. If DESTDIR is specified, however, the old logic is executed as the install process may not have permission to alter the ldconfig cache. ASTERISK-26705 Change-Id: If4eca46ac510c6fea5568256280ffdb3888d7bb4 2017-01-08 20:32 +0000 [6f15500ced] Richard Mudgett * res_pjsip_authenticator_digest.c: Fix sorcery's immutable contract violation. The inbound authentication object is supposed to be immutable when it is stored in sorcery. However, the immutable property is violated if the authentication object does not have a realm set. The immutable contract violation has a different effect depending upon what sorcery back end is used. If it is the config file back end you would get the same object back until res_pjsip is reloaded. If it is the real-time or AstDB back end you would get a new object on each query. If it is cached you would get the same object back until it is refreshed from the database. Once an inbound authentication object has its realm set it may or may not get updated again if the default_realm changes. If the same authentication object is used for inbound and outbound authentication then the immutable violation can make it very hard to determine why the outbound authentication now fails. The only diagnostic message is a complaint about no realms matching when it had worked earlier. It fails because of the difference in behaviour for an empty realm setting between inbound and outbound authentication objects. * Fixed the sorcery object immutable violation by creating a new object and setting the default_realm on it instead. The new object is a shallow copy for speed. * The auth_store thread storage no longer holds an auth ref. It interferes with the shallow copy and never needed a ref anyway. ASTERISK-26799 #close Change-Id: I2328a52f61b78ed5fbba38180b7f183ee7e08956 2017-02-04 20:17 +0000 [6400f5f309] Richard Mudgett * res_pjsip: Update artificial auth whenever default_realm changes. There was code attempting to update the artificial authentication object whenever the default_realm changed. However, once the artificial authentication object was created it would never get updated. The artificial authentication object would require a system restart for a change to the default_realm to take effect. ASTERISK-26799 Change-Id: Id59036e9529c2d3ed728af2ed904dc36e7094802 2017-01-01 08:02 +0000 [0b660c9989] Richard Mudgett * res_pjsip: Update authentication realm documentation. Using the same auth section for inbound and outbound authentication is not recommended. There is a difference in meaning for an empty realm setting between inbound and outbound authentication uses. An empty inbound auth realm represents the global section's default_realm value when the authentication object is used to challenge an incoming request. An empty outgoing auth realm is treated as a don't care wildcard when the authentication object is used to respond to an incoming authentication challenge. ASTERISK-26799 Change-Id: Id3952f7cfa1b6683b9954f2c5d2352d2f11059ce 2017-02-13 17:11 +0000 [7f83bcd63d] Richard Mudgett * pjproject: Fixes to resolve DNS SRV crashes. * Re #1945 (misc): Don't trigger SRV complete callback when there is a parse error. * srv_resolver.c: Don't try to send query if already considered resolved. ** In resolve_hostnames() don't try to resolve a query that is already considered resolved. ** In resolve_hostnames() fix DNS typo in comments. ** In build_server_entries() move a common expression assigning to cnt earlier. * sip_transport.c: Fix tdata object name to actually contain the pointer. It helps if the logs referencing a tdata object buffer actually have a name that includes the correct pointer as part of the name. Also since the tdata has its own pool it helps if any logs referencing the pool have the same name as the tdata object. This change brings tdata logging in line with how tsx objects are named. ASTERISK-26669 #close ASTERISK-26738 #close Change-Id: I56af2ded25476b3e870ca586ee69ed6954ef75af 2017-02-20 13:38 +0000 [bf78c3c9c3] Richard Mudgett * pjproject: Increase SENDER_WIDTH column size for 64-bit system logs. ASTERISK-26669 ASTERISK-26738 Change-Id: Ibae6fc8cae69a1f04df0c577c4c11200499d6fe0 2017-02-06 14:26 +0000 [54812f18b5] Richard Mudgett * pjsip_distributor.c: Update some debug messages to get transaction name. * Removed overloaded unmatched response ignore. We obviously sent the request so we shouldn't ignore it because it isn't new work. ASTERISK-26669 ASTERISK-26738 Change-Id: I55fb5cadc83a8e6699b347c6dc7fa32c5a617d37 2017-02-20 06:28 +0000 [b18f1bfb13] Sean Bright * app_voicemail: vm_authenticate accesses uninitialized memory vm_authenticate doesn't always set the passed ast_vm_user argument, so we initialize to 0 before passing it in. ASTERISK-25893 #close Reported by: Filip Jenicek Change-Id: Ia3cc0128f93d352ed9add8d5c2f0f7232c2cbe4a 2017-02-20 11:19 +0000 [7739b0b3ae] Joshua Colp * Revert "build: Execute ldconfig to build cache." This reverts commit 8851c3e0885cb704a5a6159a51768ea5297e9b10. Change-Id: I124380be5e3bd57da978428a2a93604336ccd0db 2017-02-20 08:04 +0000 [ffa7d69766] George Joseph * pjproject cli: Add object count after object lists When listing a container, we now print the number of objects in the container at the end of the list. Change-Id: I791cbc3ee9da9a2af9adc655164b5d32953df812 2017-02-20 05:53 +0000 [e84353b8a8] Sean Bright * res_config_ldap: Don't try to delete non-existent attributes OpenLDAP will raise an error when we try to delete an LDAP attribute that doesn't exist. We need to filter out LDAP_MOD_DELETE requests based on which attributes the current LDAP entry actually has. There is of course a small window of opportunity for this to still fail, but it is much less likely now. Change-Id: I3fe1b04472733e43151563aaf9f8b49980273e6b 2017-02-20 05:49 +0000 [9f392574f9] Sean Bright * res_config_ldap: Remove extraneous line numbers from log messages Extraneous line numbers were being output in many log messages. These have been removed. Change-Id: Ice9efa3d252ee87f37fa8f5ea852fda482675431 2017-02-20 05:45 +0000 [ef0944395e] Sean Bright * res_config_ldap: Make memory allocation more consistent The code in update_ldap() and update2_ldap() was using both Asterisk's memory allocation routines as well as OpenLDAP's. I've changed it so that everything that is passed to OpenLDAP's functions are allocated with their routines. Change-Id: Iafec9c1fd8ea49ccc496d6316769a6a426daa804 2017-02-20 05:30 +0000 [dd3efdf525] Sean Bright * res_config_ldap: Fix configuration inheritance from _general The "_general" configuration section allows administrators to provide both general configuration options (host, port, url, etc.) as well as a global realtime-to-LDAP-attribute mapping that is a fallback if one of the later sections do not override it. This neglected to exclude the general configuration options from the mapping. As an example, during my testing, chan_sip requested 'port' from realtime, and because I did not have it defined, it pulled in the 'port' configuration option from "_general." We now filter those out explicitly. Change-Id: I1fc61560bf96b8ba623063cfb7e0a49c4690d778 2017-02-20 05:27 +0000 [d6d86f1c09] Sean Bright * res_config_ldap: Fix erroneous LDAP_MOD_REPLACE in LDAP modify We always treat the first change of our modification batch as a replacement when it sometimes is actually a delete. So we have to pass the correct arguments to the OpenLDAP library. ASTERISK-26580 #close Reported by: Nicholas John Koch Patches: res_config_ldap.c-11.24.1.patch (license #6833) patch uploaded by Nicholas John Koch Change-Id: I0741d25de07c9539f1edc6eff3696165dfb64fbe 2017-02-15 11:55 +0000 [44abe214d2] Sean Bright * res_config_sqlite3: Fix crash when loading with invalid config When ast_config_load() fails with CONFIG_STATUS_FILEINVALID, it has already destroyed the ast_config struct for us. Trying to do it again results in a crash. Change-Id: If6a5c0ca718ad428e01a1fb25beb209a9ac18bc6 2017-02-17 17:06 +0000 [51e3b11989] Sean Bright * pjproject-bundled: Fix checksum verification when using cURL ASTERISK-26802 #close Reported by: Michael L. Young Change-Id: Iad293080f55d4d69ab615717a15211d916eed613 2017-02-17 16:57 +0000 [0b427f9b59] Richard Mudgett * tcptls.c: Add some missing allocation failure checks. * Fix tcptls_session ref and fd leak in ast_tcptls_server_root(). Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb 2017-02-17 14:58 +0000 [dbc3598014] Mark Michelson * Remove extra ast_iostream_close() calls. When AMI encounters an error at the beginning of a session, it would explicitly call ast_iostream_close() on its tcptls session's iostream. It then would jump to a label where it would shut down the tcptls session instance. The tcptls session instance would again attempt to close the iostream. Under normal circumstances, this might go by unnoticed. However, when MALLOC_DEBUG is enabled, all fields on the iostream get set to 0xdeaddead when the iostream is freed. Thus a second call to ast_iostream_close() after the iostream has been freed would reslt in an attempt to call SSL_shutdown on 0xdeaddead, which would crash and burn horribly. The fix here is to not directly close the iostream from the dangerous scenarios. The specific scenarios are: * Exceeding the configured authlimit * Failing to build a mansession on a new connection Change-Id: I908f98d516afd5a263bd36b072221008a4731acd 2017-02-14 09:54 +0000 [5a130b2e17] Mark Michelson * Add SDP translator and PJMEDIA implementation. This creates the following: * Asterisk's internal representation of an SDP * An API for translating SDPs from one format to another * An implementation of a translator for PJMEDIA Change-Id: Ie2ecd3cbebe76756577be9b133e84d2ee356d46b 2017-02-07 09:50 +0000 [8af6342555] Mark Michelson * Add initial SDP options. This is step one of adding an SDP API: defining some configurable settings for SDPs. This is based on options that are currently supported in Asterisk. Change-Id: I1ede91aafed403b12a9ccdfb91a88389baa7e5d7 2017-02-16 10:30 +0000 [8851c3e088] Joshua Colp * build: Execute ldconfig to build cache. On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. This change does the minimally invasive thing and executes ldconfig so that the libraries in the lib directory are found and their location cached. By doing so Asterisk starts up fine. ASTERISK-26705 Change-Id: I6d30b6427e9d5e69470e11327c7ff203fa7da519 2017-02-16 08:38 +0000 [e93f2a5142] Sean Bright * realtime: Fix LIKE escaping in SQL backends The realtime framework allows for components to look up values using a LIKE clause with similar syntax to SQL's. pbx_realtime uses this functionality to search for pattern matching extensions that start with an underscore (_). When passing an underscore to SQL's LIKE clause, it will be interpreted as a wildcard matching a single character and therefore needs to be escaped. It is (for better or for worse) the responsibility of the component that is querying realtime to escape it with a backslash before passing it in. Some RDBMs support escape characters by default, but the SQL92 standard explicitly says that there are no escape characters unless they are specified with an ESCAPE clause, e.g. SELECT * FROM table WHERE column LIKE '\_%' ESCAPE '\' This patch instructs 3 backends - res_config_mysql, res_config_pgsql, and res_config_sqlite3 - to use the ESCAPE clause where appropriate. Looking through documentation and source tarballs, I was able to determine that the ESCAPE clause is supported in: MySQL 5.0.15 (released 2005-10-22 - earliest version available from archives) PostgreSQL 7.1 (released 2001-04-13) SQLite 3.1.0 (released 2005-01-21) The versions of the relevant libraries that we depend on to access MySQL and PostgreSQL will not work on versions that old, and I've added an explicit check in res_config_sqlite3 to only use the ESCAPE clause when we have a sufficiently new version of SQLite3. res_config_odbc already handles the escape characters appropriately, so no changes were required there. ASTERISK-15858 #close Reported by: Humberto Figuera ASTERISK-26057 #close Reported by: Stepan Change-Id: I93117fbb874189ae819f4a31222df7c82cd20efa 2017-02-16 08:28 +0000 [f8f513d363] George Joseph * stream: Rename creates/destroys to allocs/frees To be consistent with sdp implementation. Change-Id: I714e300939b4188f58ca66ce9d1e84b287009500 2017-02-16 05:46 +0000 [30aaeec5a1] Sean Bright * res_config_sqlite3: Properly create missing columns when necessary There were two specific issues resolved here: 1) The code that iterated over the required fields (via ast_realtime_require) was broken for the RQ_INTEGER1 field type. Iteration would stop when the first RQ_INTEGER1 (0) field was encountered. 2) sqlite3_changes() was used to try and count the number of rows returned by a SELECT statement. sqlite3_changes() only counts affected rows, so this was always returning the value from the most recent data modification statement. We now separate read-only queries from data modification queries and count rows appropriately in both cases. ASTERISK-23457 #close Reported by: Scott Griepentrog Change-Id: I91ed20494efc3fcfbc2a96ac7646999a49814884 2017-02-15 14:44 +0000 [ac7a34c531] Joshua Elson * http: Ensure capath is defined on all http creations ASTERISK-26794 #close Change-Id: I9cbc3b6b6a8aab590f5ccde9c262a98e4d5253a1 2017-02-15 23:09 +0000 [135bea931c] Igor Goncharovsky * chan_unistim: fix char type to have consistent behavior on ARM There is difference exists in behaviour of char type on x86 and ARM. On x86 by default char variable type means signed char, but in ARM unsigned char used. This make binary calculations and negative values works wrong on ARM. This patch change type of char variables used for store negative values and binary calculations to signed char. ASTERISK-26714 Change-Id: Id78716dee9568a58419d4ef63c038affc3dfc7ab 2017-02-07 13:17 +0000 [4bdf5d329f] George Joseph * res_pjsip_pubsub: Correctly implement persisted subscriptions This patch fixes 2 original issues and more that those 2 exposed. * When we send a NOTIFY, and the client either doesn't respond or responds with a non OK, pjproject only calls our pubsub_on_evsub_state callback, no others. Since pubsub_on_evsub_state (which does the sub_tree cleanup) does not expect to be called back without the other callbacks being called first, it just returns leaving the sub_tree orphaned. Now pubsub_on_evsub_state checks the event for PJSIP_EVENT_TSX_STATE which is what pjproject will set to tell us that it was the transaction that timed out or failed and not the subscription itself timing our or being terminated by the client. If is TSX_STATE, pubsub_on_evsub_state now does the proper cleanup regardless of the state of the subscription. * When a client renews a subscription, we don't update the persisted subscription with the new expires timestamp. This causes subscription_persistence_recreate to prune the subscription if/when asterisk restarts. Now, pubsub_on_rx_refresh calls subscription_persistence_update to apply the new expires timestamp. This exposed other issues however... * When creating a dialog from rdata (which sub_persistence_recreate does from the packet buffer) there must NOT be a tag on the To header (which there will be when a client refreshes a subscription). If there is one, pjsip_dlg_create_uas will fail. To address this, subscription_persistence_update now accepts a flag that indicates that the original packet buffer must not be updated. New subscribes don't set the flag and renews do. This makes sure that when the rdata is recreated on asterisk startup, it's done from the original subscribe packet which won't have the tag on To. * When creating a dialog from rdata, we were setting the dialog's remote (SUBSCRIBE) cseq to be the same as the local (NOTIFY) cseq. When the client tried to resubscribe after a restart with the correct cseq, we'd reject the request with an Invalid CSeq error. * The acts of creating a dialog and evsub by themselves when recreating a subscription does NOT restart pjproject's subscription timer. The result was that even if we did correctly recreate the subscription, we never removed it if the client happened to go away or send a non-OK response to a NOTIFY. However, there is no pjproject function exposed to just set the timer on an evsub that wasn't created by an incoming subscribe request. To address this, we create our own timer using ast_sip_schedule_task. This timer is used only for re-establishing subscriptions after a restart. An earlier approach was to add support for setting pjproject's timer (via a pjproject patch) and while that patch is still included here, we don't use that call at the moment. While addressing these issues, additional debugging was added and some existing messages made more useful. A few formatting changes were also made to 'pjsip show scheduled tasks' to make displaying the subscription timers a little more friendly. ASTERISK-26696 ASTERISK-26756 Change-Id: I8c605fc1e3923f466a74db087d5ab6f90abce68e 2017-02-15 11:03 +0000 [11886dea82] Sean Bright * res_rtp_asterisk: Use PJ_ICE_MAX_CAND instead of hard-coding 16 pjsip limits the total number of ICE candidates to PJ_ICE_MAX_CAND, which is a compile-time constant. Instead of hard-coding 16 when we enumerate local interfaces, use PJ_ICE_MAX_CAND so that we can potentially collect more interfaces if the compile time options are changed. Tangentially related to ASTERISK~24464 Change-Id: I1b85509e39e33b1fed63c86261fc229ba14bbabd 2016-12-22 09:42 +0000 [b58de2fab7] Dennis Guse * Binaural synthesis (confbridge): Adds utils/conf_bridge_binaural_hrir_importer Adds the import tool for converting a HRIR database to hrirs.h ASTERISK-26292 Change-Id: I51eb31b54c23ffd9b544bdc6a09d20c112c8a547 2017-02-14 12:33 +0000 [a9c15a0e4c] Joshua Colp * stream: Add unit tests for channel stream usage. This change adds unit tests cover the following: 1. That retrieving the first media stream of a specific media type from a stream topology retrieves the expected media stream. 2. That setting the native formats of a channel which does not support streams results in the creation of streams on its behalf according to the formats of the channel. 3. That setting a stream topology on a channel which supports streams sets the topology to the provided one. ASTERISK-26790 Change-Id: Ic53176dd3e4532e8c3e97d9e22f8a4b66a2bb755 2017-02-13 16:50 +0000 [275f469a4d] Sean Bright * app_voicemail: Allow 'Comedian Mail' branding to be overriden Original patch by John Covert, slight modifications by me. ASTERISK-17428 #close Reported by: John Covert Patches: app_voicemail.c.patch (license #5512) patch uploaded by John Covert Change-Id: Ic3361b0782e5a5397a19ab18eb8550923a9bd6a6 2017-02-13 11:50 +0000 [bf2f091bbb] George Joseph * stream: Add stream topology to channel Adds topology set and get to channel. ASTERISK-26790 Change-Id: Ic379ea82a9486fc79dbd8c4d95c29fa3b46424f4 2017-01-25 16:25 +0000 [2b245b12d9] Ryan Rittgarn * app_voicemail: VoiceMailPlayMsg did not play database stored messages When attempting to use VoiceMailPlayMsg with a realtime data backend the message is located, but never retrieved. This patch adds the required RETRIEVE and DISPOSE calls that will fetch the message from the database (and IMAP storage as well for that matter). Also, removed extraneous make_file call. ASTERISK-26723 #close Change-Id: I1e122dd53c0f3d7faa10f3c2b7e7e76a47d51b8c 2017-02-14 08:12 +0000 [662c9e69fa] var * app_record: Add option to prevent silence from being truncated When using Record() with the silence detection feature, the stream is written out to the given file. However, if only 'silence' is detected, this file is then truncated to the first second of the recording. This patch adds the 'u' option to Record() to override that behavior. ASTERISK-18286 #close Reported by: var Patches: app_record-1.8.7.1.diff (license #6184) patch uploaded by var Change-Id: Ia1cd163483235efe2db05e52f39054288553b957 2017-02-07 11:13 +0000 [9f394d074a] Sebastian Gutierrez * app_queue: reset abandoned in sl for sl2 calculations ASTERISK-26775 #close Change-Id: I86de4b1a699d6edc77fea9b70d839440e4088284 2017-02-13 11:00 +0000 [6c4657e28e] Joshua Colp * stream: Add stream topology unit tests and fix uncovered bugs. This change adds unit tests for the various API calls relating to stream topologies. This includes creation, destruction, inspection, and manipulation. Through this a few bugs were uncovered in the implementation: 1. Creating a topology using a format capabilities would fail as the code considered a return value of 0 from the append stream function to indicate an error which is incorrect. 2. Not all functions which placed a stream into a topology set the position on the stream itself. 3. Appending a stream would cause a frack if the position provided was the last one. This occurred because the existing stream was queried but the index was outside of what the vector was currently at for size. ASTERISK-26786 Change-Id: Id5590e87c8a605deea1a89e53169a9c011d66fa0 2017-02-11 09:57 +0000 [3f94373778] Sean Bright * cli: Fix various CLI documentation and completion issues * app_minivm: Use built-in completion facilities to complete optional arguments. * app_voicemail: Use built-in completion facilities to complete optional arguments. * app_confbridge: Add missing colons after 'Usage' text. * chan_alsa: Use built-in completion facilities to complete optional arguments. * chan_sip: Use built-in completion facilities to complete optional arguments. Add completions for 'load' for 'sip show user', 'sip show peer', and 'sip qualify peer.' * chan_skinny: Correct and extend completions for 'skinny reset' and 'skinny show line.' * func_odbc: Correct completions for 'odbc read' and 'odbc write' * main/astmm: Use built-in completion facilities to complete arguments for 'memory' commands. * main/bridge: Correct completions for 'bridge kick.' * main/ccss: Use built-in completion facilities to complete arguments for 'cc cancel' command. * main/cli: Add 'all' completion for 'channel request hangup.' Correct completions for 'core set debug channel.' Correct completions for 'core show calls.' * main/pbx_app: Remove redundant completions for 'core show applications.' * main/pbx_hangup_handler: Remove unused completions for 'core show hanguphandlers all.' * res_sorcery_memory_cache: Add completion for 'reload' argument of 'sorcery memory cache stale' and properly implement. Change-Id: Iee58c7392f6fec34ad9d596109117af87697bbca 2017-02-10 15:45 +0000 [8b72ec312b] George Joseph * stream: Add media stream topology definition and API This change adds the media stream topology definition and API for accessing and using it. Some refactoring of the stream was also done. ASTERISK-26786 Change-Id: Ic930232d24d5ad66dcabc14e9b359e0ff8e7f568 2017-01-13 11:21 +0000 [75f8167e66] Norbert Varga * chan_pjsip: Multidomain endpoint finding on call When PJSIP tries to call an endpoint with a domain (e.g. 1000@test.com), the user part is stripped down as it would be a trunk with a specified user, and only the host part is called as a PJSIP endpoint and can't be found. This is not correct in the case of a multidomain SIP account, so the stripping after the @ sign is done only if the whole endpoint (in multidomain case 1000@test.com) can't be found. ASTERISK-26248 Change-Id: I3a2dd6f57f3bd042df46b961eccd81d31ab202e6 2017-02-13 05:05 +0000 [89871576b9] Joshua Colp * channel: Protect flags in ast_waitfor_nandfds operation. The ast_waitfor_nandfds operation will manipulate the flags of channels passed in. This was previously done without the channel lock being held. This could result in incorrect values existing for the flags if another thread manipulated the flags at the same time. This change locks the channel during flag manipulation. ASTERISK-26788 Change-Id: I2c5c8edec17c9bdad4a93291576838cb552ca5ed 2017-02-11 11:25 +0000 [07abb39d6a] Richard Mudgett * res_pjsip.c: Fix inconsistency between warning and action. The original return value corresponded to AST_SIP_AUTHENTICATION_CHALLENGE but we have no authenticator registered to create the challenge. Change-Id: I62368180d774b497411b80fbaabd0c80841f8512 2017-02-11 11:26 +0000 [ce810a892b] Richard Mudgett * pjsip_distributor.c: Fix off-nominal tdata ref leak. Change-Id: I571f371d0956a8039b197b4dbd8af6b18843598d 2017-02-09 10:01 +0000 [0910773077] Sean Bright * manager: Restore Originate failure behavior from Asterisk 11 In Asterisk 11, if the 'Originate' AMI command failed to connect the provided Channel while in extension mode, a 'failed' extension would be looked up and run. This was, I believe, unintentionally removed in 51b6c49. This patch restores that behavior. This also adds an enum for the various 'synchronous' modes in an attempt to make them meaningful. ASTERISK-26115 #close Reported by: Nasir Iqbal Change-Id: I8afbd06725e99610e02adb529137d4800c05345d 2017-02-08 14:27 +0000 [16fdb11bc3] Richard Mudgett * core: Cleanup some channel snapshot staging anomalies. We shouldn't unlock the channel after starting a snapshot staging because another thread may interfere and do its own snapshot staging. * app_dial.c:dial_exec_full() made hold the channel lock while setting up the outgoing channel staging. Made hold the channel lock after the called party answers while updating the caller channel staging. * chan_sip.c:sip_new() completed the channel staging on off-nominal exit. Also we need to use ast_hangup() instead of ast_channel_unref() at that location. * channel.c:__ast_channel_alloc_ap() added a comment about not needing to complete the channel snapshot staging on off-nominal exit paths. * rtp_engine.c:ast_rtp_instance_set_stats_vars() made hold the channel locks while staging the channels for the stats channel variables. Change-Id: Iefb6336893163f6447bad65568722ad5d5d8212a 2017-02-07 06:56 +0000 [bab4885f1e] Joshua Colp * stream: Add media stream definition and API with unit tests. This change adds the media stream definition and API for accessing and using it. Unit tests have also been written which exercise aspects of the API. ASTERISK-26773 Change-Id: I3dbe54065b55aaa51f467e1a3bafd67fb48cac87 2017-02-10 09:35 +0000 [648d181d2f] George Joseph * configs/samples: Fix placement of 'identify' entry in sorcery.conf The entry for 'identify' was incorrectly placed in the res_pjsip section when it should be in res_pjsip_endpoint_identifier_ip. ASTERISK-26785 #close Change-Id: Ia1372b12a952bfe2df6b1b1e0e725ca306a5d41a 2017-02-08 11:50 +0000 [46147a8f30] Mark Michelson * Revert "Update qualifies when AOR configuration changes." This reverts commit 6492e91392b8fd394193e411c6eb64b45486093f. The change in question was intended to prevent the need to reload in order to update qualifies on contacts when an AOR changes. However, this ended up causing a deadlock instead. Change-Id: I1a835c90a5bb65b6dc3a1e94cddc12a4afc3d71e 2017-02-07 12:01 +0000 [5422ec140c] nappsoft (license 6822) * srv: Fix crash when ast_srv_lookup is used and 0 records are returned. When performing an SRV lookup using the ast_srv_lookup function it did not properly handle the situation where 0 records are returned. If this happened it would wrongly assume that at least one record was present. This change fixes the code so it will exit early if an error occurs or if 0 records are returned. ASTERISK-26772 patches: srv_lookup.patch submitted by nappsoft (license 6822) Change-Id: I09b19081c74e0ad11c12bf54a257243b1bcb2351 2017-02-06 11:40 +0000 [b79cc62057] Joshua Colp * res_stasis_device_state: Protect the adding/removing of subscriptions. The adding and removing of device state subscriptions did not protect fully against simultaneous manipulation. In particular the subscribe case allowed a small window where two subscriptions could be added for the same device state instead of just one. This change makes the code hold the subscriptions lock for the entirety of each operation to ensure that two are not occurring at the same time. ASTERISK-26770 Change-Id: I3e7f8eb9d09de440c9024d2dd52029f6f20e725b 2017-02-01 17:56 +0000 [b47cf1a7d6] Richard Mudgett * res_pjsip: Fix some off nominal tdata leaks. Change-Id: I243a4be5e7fbfe604923764969c4ee04eee89b9d 2017-02-03 15:26 +0000 [7b280e7ccf] Sebastien Duthil * res_ari: fix memory leak for channelvars In ari.conf, when setting the option channelvars, every Stasis channel snapshot would create a list of variable/value that would not be freed when the snapshot is freed, resulting in a often-recurring memory leak. ASTERISK-26767 #close Change-Id: Ia37dd9d68063d7f879193df02ede293e5ded716d 2017-02-03 02:25 +0000 [c6c7f17206] Tzafrir Cohen * libasteriskssl: do nothing with OpenSSL >= 1.1 OpenSSL 1.1 requires no explicit initialization. The hacks in the library are not needed. They also happen to fail running Asterisk. Change-Id: I3b3efd5d80234a4c45a8ee58dcfe25b15d9ad100 2017-01-20 23:59 +0000 [bc041ca14a] Tzafrir Cohen * tcptls: use TLS_client_method with OpenSSL 1.1 OpenSSL 1.1 introduced TLS_client_method() and deprecated the previous version-specific methods (such as TLSv1_client_method(). Other than being simpler to use and more correct (gain support for TLS newer that TLS1, in our case), the older ones produce a deprecation warning that fails the build in dev-mode. Change-Id: I257b1c8afd09dcb0d96cda3a41cb9f7a15d0ba07 2017-01-20 23:57 +0000 [2c8d0764de] Tzafrir Cohen * openssl 1.1 support: use OPENSSL_VERSION_NUMBER Use OPENSSL_VERSION_NUMBER instead of OPENSSL_API_COMPAT to detect the openssl 1.1 API. Change-Id: I4e448f55ef516aedf6ad154037c35577a421a458 2017-01-31 18:28 +0000 [50029f585e] Richard Mudgett * channel.c: Fix unbalanced read queue deadlocking local channels. Using the timerfd timing module can cause channel freezing, lingering, or deadlock issues. The problem is because this is the only timing module that uses an associated alert-pipe. When the alert-pipe becomes unbalanced with respect to the number of frames in the read queue bad things can happen. If the alert-pipe has fewer alerts queued than the read queue then nothing might wake up the thread to handle received frames from the channel driver. For local channels this is the only way to wake up the thread to handle received frames. Being unbalanced in the other direction is less of an issue as it will cause unnecessary reads into the channel driver. ASTERISK-26716 is an example of this deadlock which was indirectly fixed by the change that found the need for this patch. * In channel.c:__ast_queue_frame(): Adding frame lists to the read queue did not add the same number of alerts to the alert-pipe. Correspondingly, when there is an exceptionally long queue event, any removed frames did not also remove the corresponding number of alerts from the alert-pipe. ASTERISK-26632 #close Change-Id: Ia98137c5bf6e9d6d202ce0eb36441851875863f6 2017-01-31 16:38 +0000 [97c308471d] Richard Mudgett * res_agi: Prevent an AGI from eating frames it should not. (Re-do) A dialplan intercept routine is equivalent to an interrupt routine. As such, the routine must be done quickly and you do not have access to the media stream. These restrictions are necessary because the media stream is the responsibility of some other code and interfering with or delaying that processing is bad. A possible future dialplan processing architecture change may allow the interception routine to run in a different thread from the main thread handling the media and remove the execution time restriction. * Made res_agi.c:run_agi() running an AGI in an interception routine run in DeadAGI mode. No touchy channel frames. ASTERISK-25951 ASTERISK-26343 ASTERISK-26716 Change-Id: I638f147ca7a7f2590d7194a8ef4090eb191e4e43 2017-01-31 16:32 +0000 [72e3fc5845] Richard Mudgett * Frame deferral: Revert API refactoring. There are several issues with deferring frames that are caused by the refactoring. 1) The code deferring frames mishandles adding a deferred frame to the deferred queue. As a result the deferred queue can only be one frame long. 2) Deferrable frames can come directly from the channel driver as well as the read queue. These frames need to be added to the deferred queue. 3) Whoever is deferring frames is really only doing the __ast_read() to collect deferred frames and doesn't care about the returned frames except to detect a hangup event. When frame deferral is completed we must make the normal frame processing see the hangup as a frame anyway. As such, there is no need to have varying hangup frame deferral methods. We also need to be aware of the AST_SOFTHANGUP_ASYNCGOTO hangup that isn't real. That fake hangup is to cause the PBX thread to break out of loops to go execute a new dialplan location. 4) To properly deal with deferrable frames from the channel driver as pointed out by (2) above, means that it is possible to process a dialplan interception routine while frames are deferred because of the AST_CONTROL_READ_ACTION control frame. Deferring frames is not implemented as a re-entrant operation so you could have the unsupported case of two sections of code thinking they have control of the media stream. A worse problem is because of the bad implementation of the AMI PlayDTMF action. It can cause two threads to be deferring frames on the same channel at the same time. (ASTERISK_25940) * Rather than fix all these problems simply revert the API refactoring as there is going to be only autoservice and safe_sleep deferring frames anyway. ASTERISK-26343 ASTERISK-26716 #close Change-Id: I45069c779aa3a35b6c863f65245a6df2c7865496 2017-02-02 11:26 +0000 [4c51ad158d] Sean Bright * res_odbc: Remove deprecated settings from sample configuration file ASTERISK-26704 #close Reported by: Anthony Messina Change-Id: I976a1f94cf79c5f31e76174c61f5c6a65fd6354f 2017-02-01 17:14 +0000 [7d9b50a7b2] Richard Mudgett * res_resolver_unbound.c: Fix frequent ref leak caught by excessive ref trap. ASTERISK-26765 Change-Id: I27eb97df7f8d7e624b0b9a61c0fcee4718c86d8d 2017-02-01 15:56 +0000 [2849b726b6] Sean Bright * audiohooks: Muting a hook can mute underlying frames If an audiohook is placed on a channel that does not require transcoding, muting that hook will cause the underlying frames to be muted as well. The original patch is from David Woolley but I have modified slightly. ASTERISK-21094 #close Reported by: David Woolley Patches: ASTERISK-21094-Patch-1.8-1.txt (license #5737) patch uploaded by David Woolley Change-Id: Ib2b68c6283e227cbeb5fa478b2d0f625dae338ed 2017-02-01 13:54 +0000 [bbed75c3ba] Mark Michelson * Update qualifies when AOR configuration changes. Prior to this change, qualifies would only update in the following cases: * A reload of res_pjsip.so was issued. * A dynamic contact was re-registered after its AOR's qualify_frequency had been changed This does not work well if you are using realtime for your AORs. You can update your database to have a new qualify_frequency, but the permanent contacts on that AOR will not have their qualifies updated. And the dynamic contacts on that AOR will not have their qualifies updated until the next registration, which could be a long time. This change seeks to fix this problem by making it so that whenever AOR configuration is applied, the contacts pertaining to that AOR have their qualifies updated. Additions from this patch: * AOR sorcery objects now have an apply handler that calls into a newly added function in the OPTIONS code. This causes all contacts associated with that AOR to re-schedule qualifies. * When it is time to qualify a contact, the OPTIONS code checks to see if the AOR can still be retrieved. If not, then qualification is canceled on the contact. Alterations from this patch: * The registrar code no longer updates contact's qualify_frequence and qualify_timeout. There is no point to this since those values already get updated when the AOR changes. * Reloading res_pjsip.so no longer calls the OPTIONS initialization function. Reloading res_pjsip.so results in re-loading AORs, which results in re-scheduling qualifies. Change-Id: I2e7c3316da28f389c45954f24c4e9389abac1121 2017-01-31 11:17 +0000 [aeea634bc0] Joshua Colp * res_pjsip: Handle invocation of callback on outgoing request when error occurs. There are some error cases in PJSIP when sending a request that will result in the callback for the request being invoked. The code did not handle this case and assumed on every error case that the callback was not invoked. The code has been changed to check whether the callback has been invoked and if so to absorb the error and treat it as a success. ASTERISK-26679 ASTERISK-26699 Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91 2017-01-30 09:02 +0000 [7a16524a83] Sean Bright * res_rtp_asterisk: Swap byte-order when sending signed linear Before Asterisk 13, signed linear was converted into network byte order by a smoother before being sent over the network. We restore this behavior by forcing the creation of a smoother when slinear is in use and setting the appropriate flags so that the byte order conversion is always done. ASTERISK-24858 #close Reported-by: Frankie Chin Change-Id: I868449617d1a7819578f218c8c6b2111ad84f5a9 2017-01-31 12:46 +0000 [e252aff9ad] George Joseph * debug_utilities: Install ast_logescalator to /var/lib/asterisk/scripts Forgot to install it with the original patch Change-Id: I8bdb540a6694971ae5fe21f48d532332c6482e4c 2017-01-25 06:50 +0000 [ef4deb8ecd] George Joseph * debug_utilities: Add ast_logescalator The escalator works by creating a set of startup commands in cli.conf that set up logger channels and issue the debug commands for the subsystems specified. If asterisk is running when it is executed, the same commands will be issued to the running instance. The original cli.conf is saved before any changes are made and can be restored by executing '$prog --reset'. The log output will be stored in... $astlogdir/message.$uniqueid $astlogdir/debug.$uniqueid $astlogdir/dtmf.$uniqueid $astlogdir/fax.$uniqueid $astlogdir/security.$uniqueid $astlogdir/pjsip_history.$uniqueid $astlogdir/sip_history.$uniqueid Some minor tweaks were made to chan_sip, and res_pjsip_history so their history output could be send to a log channel as packets are captured. A minor tweak was also made to manager so events are output to verbose when "manager set debug on" is issued. Change-Id: I799f8e5013b86dc5282961b27383d134bf09e543 2017-01-23 09:35 +0000 [178b90af02] Torrey Searle * libastssl/pj: libastssl/pj should have an so_version Issue introduced in b59956a87. In the non-darwin case libastssl/pj should be versioned. This causes the symbol file for this lib to not be generated. Change-Id: Ib07ae8c40252813c488e2c1ac6204fd42816dd4c (cherry picked from commit 54b027916a71f2b83b2050cef5ef704ea5de39b2) 2017-01-24 19:51 +0000 [138cd8d019] Kirill Katsnelson * make_build_h: handle backslashes in external strings LikewiseOpen creates user names with a backslash in them. A gentle massage with sed(1) allows such strings to be inserted into build.h properly quoted. I am also adding the same for host name and other strings used in the script that are more or less user-controlled. ASTERISK-26754 Change-Id: Iac5ef2b67a68ee58f35ddbf86bb818ba6eabecae 2017-01-24 22:31 +0000 [8270d2436d] Kirill Katsnelson * app_queue: Fix queues randomly disappearing on reload With 500+ queues and a reload every minute, a random queue disappears upon reload. The cause is mususe of the 'dead' flag. Namely, all queues were marked dead up front, and then "resurrected" by dropping this flag for those found in the configuration. But a queue marked dead can be removed also when control leaves the app entry point on a PBX thread. With this change, the queue is marked only not found, and at the end of reload only the queues that are still not found are actually marked as dead, so the dead flag is never reset, and set only on positively dead queues. ASTERISK-26755 Change-Id: I3a4537aec9eb8d8aeeaa0193407e3523feb004bf 2017-01-26 07:57 +0000 [7fa3de7ae9] Joshua Colp * res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving. This change adds a missing unreference of the hostname when resolving and also cleans up the iterator. ASTERISK-26735 Change-Id: Ic012ebaf3d89e714eec340b7b0c5e63c66af857a 2017-01-25 15:26 +0000 [d32bd63860] Mark Michelson * Add reload options to CLI/AMI stale object commands. Marking an object as stale in a memory cache is supposed to prime the cache so that the next time the item is retrieved, the stale item is deleted from the cache and a background task is run to re-populate the cache with a fresh version of the object. The problem is, there are some object types out there for which there is no natural reason that they would be retrieved from the backend with any regularity. Outbound PJSIP registrations are a good example of this. At startup, they are read, and an object-specific state is created that refers to the initially-retrieved object for all time. Adding the "reload" option to the CLI/AMI commands gives the cache the opportunity to manually re-retrieve the object from the backend, both storing the new object in the cache and applying the new object's configuration to the module that uses that object. Change-Id: Ieb1fe7270ceed491f057ec5cbf0e097bde96c5c8 2017-01-10 17:39 +0000 [20aed30d9a] Richard Mudgett * T.140: Fix format ref and memory leaks. * channel.c:ast_sendtext(): Fix T.140 SendText memory leak. * format_compatibility.c: T.140 RED and T.140 were swapped. * res_rtp_asterisk.c:rtp_red_init(): Fix ast_format_t140_red ref leak. * res_rtp_asterisk.c:rtp_red_init(): Fix data race after starting periodic scheduled red_write(). * res_rtp_asterisk.c: Some other minor misc tweaks. Change-Id: Ifa27a2e0f8a966b1cf628607c86fc4374b0b88cb 2017-01-24 15:39 +0000 [ee2b0f2eef] Joshua Colp * res_pjsip_endpoint_identifier_ip: Ensure error defaults to 0. When configuring a match using a netmask the error variable was not defaulting to 0. For some people this would cause the code to think an error occurred when adding the match when in reality it added perfectly fine. ASTERISK-26693 Change-Id: I850c250813742bddde65c84e739093c9e01dfe56 2017-01-10 17:37 +0000 [930a24a730] Richard Mudgett * astobj2.c: Add excessive ref count trap. Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a 2017-01-10 13:11 +0000 [de28c1b9f1] Richard Mudgett * main/app.c: Memory corruption from early format destruction. * make_silence() created a malloced silence slin frame without adding a slin format ref. When the frame is destroyed it will unref the slin format that never had a ref added. Memory corruption is expected to follow. * Simplified and fixed counting the number of samples in a frame list for make_silence(). * Eliminated an unnecessary RAII_VAR associated with the make_silence() frame. Change-Id: I47de3f9b92635b7f8b4d72309444d6c0aee6f747 2017-01-11 14:59 +0000 [2039eb8edf] Richard Mudgett * frame.c: Fix off-nominal format ref leaks. * ast_frisolate() could leak frame format refs on allocation failures. * Similified code in ast_frisolate() and code used by ast_frisolate(). Change-Id: I79566d4d36b3d7801bf0c8294fcd3e9a86a2ed6d 2017-01-13 19:08 +0000 [e922979d49] Richard Mudgett * stasis_bridge.c: Fix off-nominal stasis control ref leak. Change-Id: Ib17218343a6596832060180e19386da9df150ac8 2017-01-10 12:30 +0000 [56854f22d2] Richard Mudgett * res_musiconhold.c: Fix format ref leak when parsing MOH config class. Change-Id: Ica8e8e2ce7604c2c61ec55bef07dc675361d2ea5 2017-01-10 14:03 +0000 [d87f81ddb1] Richard Mudgett * chan_oss.c: Fix format ref leak in oss_read(). Change-Id: I0a5d56c7dcf327d60f86a4c25a23571733709fd0 2017-01-10 17:48 +0000 [36bdd7c1a0] Richard Mudgett * Add notes about embedded ast_frame structs holding a format ref. mod_format.h: Note ast_filestream.fr holds a format ref. translate.h: Note ast_trans_pvt.f holds a format ref. Change-Id: I86bda354d725207b41e08920355d7c31b2d7f749 2017-01-20 21:13 +0000 [6f3e8c8e01] Richard Mudgett * PJPROJECT logging: Fix detection of max supported log level. The mechanism used for detecting the maximum log level compiled into the linked pjproject did not work. The API call simply stores the requested level into an integer and does no range checking. Asterisk was assuming that there was range checking and limited the new value to the allowable range. To get the actual maximum log level compiled into the linked pjproject we need to get and save off the initial set log level from pjproject. This is the maximum log level supported. * Get and save off the initial log level setting before altering it to the desired level on startup. This has to be done by a macro rather than calling a core function to avoid incorrectly linking pjproject. * Split the initial log level warning messages to warn if the linked pjproject cannot support the requested startup level and if it is too low to get the pjproject buildopts for "pjproject show buildopts". * Adjust the CLI "pjproject set log level" to check the saved max log level and to generate normal output messages instead of a warning message. ASTERISK-26743 #close Change-Id: I40aa76653e2a1dece66c3f8734594b4f0471cfb4 2017-01-05 13:21 +0000 [0ea3c371c5] Richard Mudgett * res_pjsip_pubsub.c: Implement "pjsip show subscriptions" commands. ASTERISK-23828 #close Change-Id: Ifb8a3b61f447aedc58a8e6b36a810f7566018567 2017-01-23 16:18 +0000 [4bfeda6ee4] Mark Michelson * Free endpoint ACLs when destroying PJSIP endpoints. If endpoint ACLs were specified, they were not being freed when endpoints were destroyed. On systems with realtime endpoints, this could add up quickly since each DB lookup would allocate the ACL without freeing it. ASTERISK-26731 #close Reported by Ustinov Artem Change-Id: Ie1f8bf5b7a0de628c975beba01e69c56893331ad 2017-01-19 09:05 +0000 [6691606723] George Joseph * ari: Implement 'debug all' and request/response logging The 'ari set debug' command has been enhanced to accept 'all' as an application name. This allows dumping of all apps even if an app hasn't registered yet. To accomplish this, a new global_debug global variable was added to res/stasis/app.c and new APIs were added to set and query the value. 'ari set debug' now displays requests and responses as well as events. This required refactoring the existing debug code. * The implementation for 'ari set debug' was moved from stasis/cli.{c,h} to ari/cli.{c,h}, and stasis/cli.{c,h} were deleted. * In order to print the body of incoming requests even if a request failed, the consumption of the body was moved from the ari stubs to ast_ari_callback in res_ari.c and the moustache templates were then regenerated. The body is now passed to ast_ari_invoke and then on to the handlers. This results in code savings since that template was inserted multiple times into all the stubs. An additional change was made to the ao2_str_container implementation to add partial key searching and a sort function. The existing cli code assumed it was already there when it wasn't so the tab completion was never working. Change-Id: Ief936f747ce47f1fb14035fbe61152cf766406bf (cherry picked from commit 1d890874f39a5a81b20da44358143ed9b54ab0fe) 2017-01-20 23:41 +0000 [f3f9175df0] Tzafrir Cohen * test_voicemail_api: order of params to VERIFY macros Fix order of parameters in calls to VM_API_INT_VERIFY and VM_API_STRING_VERIFY ASTERISK-26739 #close Change-Id: I30dc6b36893aadad6012be3f16f93aa5720870d6 Note: status: builds. Not tested any further. 2017-01-23 09:10 +0000 [96e7291cbd] George Joseph * pjproject_bundled: Fix setting max log level An earlier attempt to prevent pjsua from spitting out an extra 6795 lines of debug output every time the testsuite called it was also turning off the ability for asterisk to output debug info when it needed to. This patch reverts the earlier fix and instead adds a pjproject patch that sets the startup log level to 1 for pjsua pjsystest and the pjsua python binding. This is an asterisk-only patch that does not affect pjproject functionality and will not be submitted upstream. Change-Id: I347a8b58b2626f2906ccfc1d339e907627a0c9e8 2017-01-23 10:08 +0000 [23690c1b35] Joshua Colp * res_pjsip_endpoint_identifier_ip: Read settings before resolving. An option has been added, srv_lookups, which controls whether SRV lookups are performed on the provided match hosts or not. It was possible for this option to be applied after resolution had already happened. This change makes it so hosts are stored away, settings are read and applied, and then resolution is done. This ensures that no matter the ordering the srv_lookups option is in effect. ASTERISK-26735 Change-Id: I750378cb277be0140f8c5539450270afbfc43388 2016-11-29 09:31 +0000 [1061539b75] Lorenzo Miniero * media: Add experimental support for RTCP feedback. This change adds experimental support for providing RTCP feedback information to codec modules so they can dynamically change themselves based on conditions. ASTERISK-26584 Change-Id: Ifd6aa77fb4a7ff546c6025900fc2baf332c31857 2017-01-22 17:25 +0000 [cfe72c39cf] Richard Mudgett * LISTFILTER: Remove outdated ERROR message. Feeding LISTFILTER an empty variable results in an invalid ERROR message. Earlier changes made the message useless because we can no longer tell if the variable is empty or does not exist. It is valid to try to remove a value from an empty list just as it is valid to try to remove a value that is not in a non-empty list. * Removed the outdated ERROR message. * Added more test cases to the LISTFILTER unit test. Change-Id: Ided9040e6359c44a335ef54e02ef5950a1863134 2017-01-21 14:43 +0000 [dbb9c8141d] Tzafrir Cohen * tests: use datadir for sound files Some (voicemail-related) tests API symlinks beep.gsm and other files from ast_config_AST_VAR_DIR. It should use ast_config_AST_DATA_DIR. ASTERISK-26740 #close Change-Id: Id49c56fb9e16df64b1a2b829693ca7601252df89 2017-01-05 15:11 +0000 [ef9164b9ca] Richard Mudgett * res_pjsip_pubsub.c: Fix AMI event list counts. Fix the AMI PJSIPShowSubscriptionsInbound, PJSIPShowSubscriptionsOutbound, and PJSIPShowResourceLists actions event counts. The reported counts may not necessarily be accurate depending on what happens. The subscriptions count would be wrong if Asterisk ever has outbound subscriptions. The resource list count could be wrong if a list were added or removed during the AMI action being processed. Change-Id: I4344301827523fa174960a42c413fd19abe4aed5 2017-01-05 13:02 +0000 [ab858295a2] Richard Mudgett * res_pjsip_pubsub.c: Fix incorrect message string wrapping. Change-Id: Id771e6fe56d89ce365ddcbb423f820af97211120 2017-01-05 13:01 +0000 [6d648185bc] Richard Mudgett * res_pjsip_pubsub.c: Eliminate trivial SCOPED_LOCK usage. Change-Id: Ie0b69a830385452042fa19e7d267c6790ec6b6be 2017-01-05 12:58 +0000 [90f3b1270c] Richard Mudgett * res_pjsip: alloca can never fail. Change-Id: Ia2a6158e5fdf311bc2a1c0c43417978de504b1f1 2017-01-13 11:03 +0000 [d16b3a9917] George Joseph * debug_utilities: Create ast_loggrabber ast_loggrabber gathers log files from customizable search patterns, optionally converts POSIX timestamps to a readable format and tarballs the results. Also a few tweaks were made to ast_coredumper. Change-Id: I8bfe1468ada24c1344ce4abab7b002a59a659495 (cherry picked from commit c70915287837704090d75f181525765de7a17221) 2017-01-01 03:47 +0000 [48730ae65e] Richard Mudgett * res_pjsip_outbound_authenticator_digest.c: Fix spacing in warning messages. Change-Id: I573f0343c0c63a785cd4da60d57cc9f8b9ce7f49 2016-12-22 04:07 +0000 [40b9766a31] Martin Tomec * app_queue: add RINGCANCELED log event on caller hang up QueueLog did not log ringnoanswer when the caller abandoned call before first timeout. It was impossible to get agent membername and ringing duration for this short calls. After some discusions it seems that the best way is to add new event RINGCANCELED, which is generated after caller hangup during ringing. ASTERISK-26665 Change-Id: Ic70f7b0f32fc95c9378e5bcf63865519014805d3 2017-01-12 15:58 +0000 [283c16c6b6] Kevin Harwell * abstract/fixed/adpative jitter buffer: disallow frame re-inserts It was possible for a frame to be re-inserted into a jitter buffer after it had been removed from it. A case when this happened was if a frame was read out of the jitterbuffer, passed to the translation core, and then multiple frames were returned from said translation core. Upon multiple frames being returned the first is passed on, but sebsequently "chained" frames are put back into the read queue. Thus it was possible for a frame to go back into the jitter buffer where this would cause problems. This patch adds a flag to frames that are inserted into the channel's read queue after translation. The abstract jitter buffer code then checks for this flag and ignores any frames marked as such. Change-Id: I276c44edc9dcff61e606242f71274265c7779587 2016-11-06 06:30 +0000 [8cc1cd5df7] Sebastian Gutierrez * app_queue: Add QueueUpdate application. Add an application that allows tracking outbound calls using app_queue. ASTERISK-19862 Change-Id: Ia0ab64aed934c25b2a25022adcc7c0624224346e 2017-01-13 21:23 +0000 [f4e77a5678] Richard Mudgett * taskprocessor.c: Change when high water warning logged. The task processor queue reached X scheduled tasks message was originally intended to get logged only once per task processor to prevent spamming the log. This is no longer necessary since high and low water thresholds can better control when the message is logged. It is beneficial to generate the warning each time a task processor reaches the high water level because PJSIP stops processing new requests while any high water alert is active. Without this change you would have to enable at least debug level 3 logging to know about a repeated alert trigger. * Made generate the warning message whenever a task is pushed into the task processor that triggers the high water alert. * Appended 'again' to the warning for a repeated high water alert trigger. Change-Id: Iabf75a004f7edaf1e5e8c323099418e667cac999 2017-01-10 05:54 +0000 [e0e502d9d2] Aaron An * res_rtp_asterisk: Fix bug in function CHANNEL(rtcp, all_rtt) Function CHANNEL(rtcp,all_rtt) CHANNEL(rtcp,all_loss) CHANNEL(rtcp,all_jitter) always return 0.0 due to wrong define of macro "AST_RTP_SATA_SET" and "AST_RTP_STAT_STRCPY". It should compare "combined" with "stat" not "current_stat". ASTERISK-26710 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: Id4140fafbf92e2db689dac5b17d9caa009028a15 2017-01-10 18:10 +0000 [0d53c91fba] George Joseph * debug_utilities: Create the ast_coredumper utility This utility allows easy manipulation of asterisk coredumps. * Configurable search paths and patterns for existing coredumps * Can generate a consistent coredump from the running instance * Can dump the lock_infos table from a coredump * Dumps backtraces to separate files... - thread apply 1 bt full -> .thread1.txt - thread apply all bt -> .brief.txt - thread apply all bt full -> .full.txt - lock_infos table -> .locks.txt * Can tarball corefiles and optionally delete them after processing * Can tarball results files and optionally delete them after processing * Converts ':' in coredump and results file names '-' to facilitate uploading. Jira for instance, won't accept file names with colons in them. Tested on Fedora24+, Ubuntu14+, Debian6+, CentOS6+ and FreeBSD9+[1]. [1] For *BSDs, the "devel/gdb" package might have to be installed to get a recent gdb. The utility will check all instances of gdb it finds in $PATH and if one isn't found that can run python, it prints a friendly error. Change-Id: I935d37ab9db85ef923f32b05579897f0893d33cd (cherry picked from commit cb47b4556053cd50d9102eef913671ad0306062d) 2017-01-08 10:29 +0000 [e54c8aec34] George Joseph * pjproject_bundled: Fix compilation with MALLOC_DEBUG When MALLOC_DEBUG was specified, make was failing. Immediately remaking would work. The issues was in the ordering of the make dependencies. Change-Id: If6030b54fc693f3179f32bfd20c6b5d5f1b3f7cd 2017-01-05 06:11 +0000 [a7d856cd96] Joshua Colp * res_pjsip_endpoint_identifier_ip: Add support for SRV lookups. This change implements SRV support for the IP based endpoint identifier module. All possible addresses through SRV are looked up and added as matches. If no SRV records are available a fallback to normal host resolution is done. If an IP address is provided then no SRV lookup occurs. This is configured using the "srv_lookups" option on the identify section and defaults to "yes". ASTERISK-26693 Change-Id: I6b641e275bf96629320efa8b479737062aed82ac 2016-11-06 06:37 +0000 [740ca862e4] Sebastian Gutierrez * app_queue: add new Service Level calculation Adds a new formula for SL2 and documentation ASTERISK-26559 Change-Id: I0970c620460507cd9d45b0d43600779c8915e770 2016-12-19 15:03 +0000 [d96e350256] Jonathan R. Rose * core/pbx: dialplan show - display filename/line# Adds the ability for extensions to be registered to include filename and line number so that dialplan show output can show the filename and line number of a config file responsible for generating a given extension. This only affects config modules that are written to use the new extension registering functions. In this patch, that only includes pbx_config, so extensions registered in extensions.conf and any included extension will be shown in this manner. Extensions registered in this manner will show the filename and line number *instead* of the registrar. ASTERISK-26658 #close Reported by: Jonathan R. Rose Change-Id: Ieccc6abccdff34ed5c7da3511fd24972b8f2dd30 2016-12-22 09:13 +0000 [aea2285865] Alexander Traud * res_pjsip_session: Access SIPDOMAIN via Dialplan. This feature was available in the SIP channel driver chan_sip. For example, Asterisk is the outbound proxy and has to handle all SIP-URIs, even domains not local to Asterisk. In that case, SIPDOMAIN is used in the Dialplan, to detect and dial remote SIP-URIs. This change here sets the SIP destination domain of an inbound call (SIPDOMAIN) in the SIP channel driver res_pjsip as well. ASTERISK-26670 #close Change-Id: I27c880dc404a3c1c6792e1ba3545475339577243 2017-01-04 05:50 +0000 [e220c11bec] Alexander Traud * chan_sip: Remember SDP negotiation on SIP_CODEC_INBOUND. After a SIP_CODEC_INBOUND in the dialplan, do not continue with cached formats but remember the joint format. Cached formats contain default parameters, often create an empty fmtp line. However, a joint format might have passed format_get_joint(.) in a res_format_attr_* module (like Opus Codec) and contain the resulting format parameters from a SDP negotiation. ASTERISK-26691 #close Change-Id: I35712d98a793d4c3efdd156cec57deab9014b1dc 2017-01-03 15:14 +0000 [ceb9dae566] George Joseph * pjproject_bundled: Compile pjsua with max log level = 2 A while back, we changed config_site.h to set PJ_LOG_MAX_LEVEL = 6. This allowed us to control the log level better from inside Asterisk. An unfortunate side effect of this was that the pjsua binary and python bindings were also compiled with log level set to 6 so whenever a testsuite test that uses pjsua runs, it spits out 6795 lines of debug in an instant even before the test starts. I believe this overruns the Jenkins capture buffer and prevents the test from properly terminating. In turn, this results in the testsuite just hanging until the job is killed. It's more frequent on the higher end agents because they can spit out the messages faster. Unfortunately, the messages are all spit out before we have control of the python pj.Lib instance where we can set logging levels so the only alternative was to actually compile pjsua and _pjsua.so with an overridden PJ_LOG_MAX_LEVEL. Although defining a lower max level was done in the Makefile, the define in config_site.h had to be wrapped with "#ifndef" so the change would take effect. Change-Id: I2af9e7d48dde1927279c586c9c725d868fe6f3ff 2016-12-22 16:00 +0000 [ae57652983] Joshua Colp * chan_pjsip: Use session for retrieving CHANNEL() information. The CHANNEL() dialplan function implementation for PJSIP allows querying of PJSIP specific information. This used the channel passed in to get the PJSIP session and associated information. It is possible for this channel to be masqueraded and end up as a different channel type by the time the information request is actually acted upon. This change retrieves the PJSIP session safely and accesses data from it (including channel). This provides a guarantee that the session and channel will not be altered when the request is being acted upon. ASTERISK-26673 Change-Id: I335e12b89e1820cafdd92b3e7526b8ba649eb7e6 2016-12-31 19:56 +0000 [386e3a01b3] Joshua Elson * res_pjsip: Fix known compact header issues ASTERISK-26684 #close Change-Id: Ifd7e401c45015119dd5e8421dbfe3afa6381744a 2016-12-30 06:59 +0000 [aad29b9bca] Martin Tomec * res_calendar: delete old calendars after reload When "fetch_again_at_reload" is set in config, we create now new object and thread for each reloaded calendar (with new configuration). Old calendar should be then unlinked, so the old thread can exit and free memory. ASTERISK-26683 Change-Id: Ic17fba9371c5a8b26a6bc54ea4957c13a32a343e 2016-12-30 09:10 +0000 [5a5953f98c] JoshE (license 6075) * res_pjsip_refer: Handle compact Refer-To header. refer_incoming_refer_request needed to look for the "r" header as well as the "Refer-To" header. ASTERISK-26655 #close patches: refer_compact_fix.diff submitted by JoshE (license 6075) Change-Id: I610410a99b02427ea5db887aeb454d5f12c2259f 2016-12-23 12:11 +0000 [ac04e63ac2] Richard Mudgett * bridge_native_rtp.c: Minor code cleanups. In native_rtp_bridge_compatible_check() * Made one variable declaration per line. * Extracted if test assignment to make the test easier to see. * Made long if tests easier to see the combinatorial logic. * Added bridge id to a couple debug messages. Change-Id: I65bc5732aa7c9a2537f062f106fbea711cf2daad 2016-12-23 12:10 +0000 [da6f40c9ff] Richard Mudgett * bridge_native_rtp.c: Fix native rtp bridge data race. native_rtp_bridge_compatible() didn't lock the bridge channels before checking the channels for native bridging ability. As a result, one of the channel's native format capabilities structure got replaced out from under the native bridge check. Use of a stale pointer to freed memory causes bad things to happen. MALLOC_DEBUG, DO_CRASH, and the tests/channels/pjsip/transfers/blind_transfer/caller_direct_media testsuite test caught this. * Add missing channel locking in native_rtp_bridge_compatible(). Change-Id: If25fdb3ac8e85563c4857fb8216b3d9dc3d0fa53 2016-12-21 16:28 +0000 [b576b58d74] Richard Mudgett * res_rtp_asterisk.c: Fix uninitialized memory crash. ast_rtp_remote_address_set() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor(). * Optimized out the 'us' struct variable. ASTERISK-26672 #close Change-Id: I4acea5dcdf0813da2c7d3e11c2d6067d160d17dc 2016-12-21 16:25 +0000 [67cc8499a2] Richard Mudgett * acl.c: Improve ast_ouraddrfor() diagnostic messages. * Made not generate strings unless they will actually be used. ASTERISK-26672 Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3 2016-12-21 17:54 +0000 [67b47191e9] Richard Mudgett * chan_rtp.c: Fix uninitialized memory crash. unicast_rtp_request() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor() and abort the UnicastRTP channel request if it fails. ASTERISK-26672 Change-Id: I1ef7a7c09f4da4f15dcb6de660d2bcac5f2a95c0 2016-12-21 17:55 +0000 [2fc65173e5] Richard Mudgett * res_rtp_asterisk.c: Initialize ourip passed to ast_find_ourip(). We access uninitialized memory when the 'ourip' parameter does not have an initial guess to our IP address. ASTERISK-26672 Change-Id: I35507ea1ad7455d2be188f6ccdd4add7bd150e15 2016-12-07 15:23 +0000 [8b7d252987] Richard Mudgett * res_rtp_asterisk.c: Fix off nominal memory leak. Change-Id: I95b1088d11244a2edae6607c12fbf33b38658a75 2016-12-14 02:21 +0000 [bab253ac9f] Tzafrir Cohen * Fixes to various issues reported by pyflakes Pyflake is a python (2) source checker. This patch fixes various (mostly trivial) errors and warnings it reports. Change-Id: Ia35c5ac61751b927814cf693994c632c412386ea 2016-12-09 12:23 +0000 [f461f65dea] Martin Tomec * app_queue: Ensure member is removed from pending when hanging up. In some cases member is added to pending_members, and the channel is hung up before any extension state change. So the member would stay in pending_members forever. So when we call do_hang, we should also remove member from pending. ASTERISK-26621 #close Change-Id: Iae476b5c06481db18ebe0fa594b3e80fdc9a7d54 2016-12-18 15:23 +0000 [d29eb3b99d] George Joseph * pjproject_bundled: Make build single threaded There were just too many issues in various environments with multi threaded building of pjproject. It doesn't really speed things up anyway since asterisk is already being compiled in parallel. Change-Id: Ie5648fb91bb89b4224b6bf43a0daa1af793c4ce1 2016-12-08 20:00 +0000 [8fbb384ea2] Corey Farrell * chan_sip: Reorder unload_module to deal with stuck TCP threads. In some situations TCP threads may become frozen. This creates the possibility that Asterisk could segfault if they become unfrozen after chan_sip has been dlclose'd. This reorders the unload_module process to allow abort if threads do not exit within 5 seconds. High level order as follows: 1) Unregister from the core to stop new requests. 2) Signal threads to stop 3) Clear config based tables (but do not free the table itself). 4) Verify that threads have shutdown, cancel unload if not. 5) Clean all remaining resources. ASTERISK-26586 Change-Id: Ie23692041d838fbd35ece61868f4c640960ff882 2016-12-16 01:32 +0000 [147b8e636e] David M. Lee * configure: fix with-pjproject-bundled The AC_ARG_WITH macro's shell variable is withval; not enableval. Purely coincidentally, the option would work when --enable-dev-mode is given. Also fixed a portability problem with bootstrap.sh, since -printf is not a portable option for find. Change-Id: I0f0e5b1a934b5af5737713834361e9c95b96b376 2016-12-15 13:25 +0000 [d27dee3cca] Richard Mudgett * autosupport: Add 'pjproject show buildopts' Change-Id: I8aa55a7c3fb175235ddc7f85e9457d5102d06fa7 2016-12-14 14:21 +0000 [9404efa6f4] Richard Mudgett * chan_dahdi.c: Fix bounds check regression. Caused by ASTERISK-25494 Change-Id: I1fc408c1a083745ff59da5c4113041bbfce54bcb 2016-12-13 14:34 +0000 [45a5e2abc6] Richard Mudgett * res_pjsip: Add/update ERROR msg if invalid URI. ASTERISK-24499 Change-Id: Ie305153e47e922233b2ff24715e0e326e5fa3a6c 2016-12-12 18:38 +0000 [44e72c9d44] Richard Mudgett * MESSAGE: Flush Message/ast_msg_queue channel alert pipe. ASTERISK-25083 Change-Id: Id54baa57a8dbca84e29f28bcd2ffc0a5ac12d8b2 2016-12-13 14:06 +0000 [19328de2ab] George Joseph * res_sorcery_memory_cache: Change an error to a debug message When a sorcery user calls ast_sorcery_delete on an object that may have already expired from the cache, res_sorcery_memory_cache spits out an ERROR. Since this can happen frequently and validly when an inbound registration expires after the cache entry expired, the errors are unnecessary and misleading. Changed to a debug/1. Change-Id: Idf3a67038c16e3da814cf612ff4d6d18ad29ecd7 2016-12-09 08:14 +0000 [31268e0a28] George Joseph * pjproject_bundled: Retry download if previously saved tarball is bad If a tarball is corrupted during download, the makefile will attempt to download it again. If the tarball somehow gets corrupted after it's downloaded however, the makefile was just failing. We now retry the download. ASTERISK-26653 #close Change-Id: I1b24d454852d80186f60c5a65dc4624ea8a1c359 2016-12-08 12:43 +0000 [4c6ba1dbba] Badalyan Vyacheslav * Fix typo in chan_sip The conditional expressions of the 'if' operators situated alongside each other are identical. Change-Id: I652b6dcddb3be007e669a6aa8107edb31a1ddafb 2016-12-08 12:30 +0000 [934aa2c768] Badalyan Vyacheslav * res_pjsip: Fix 'A = B != C' kind. Consider reviewing the expression of the 'A = B != C' kind. The expression is calculated as following: 'A = (B != C)' Change-Id: Ibaa637dfda47d51a20e26069d3103e05ce80003d 2016-12-08 12:54 +0000 [51118e7d70] Badalyan Vyacheslav * chan_sip: Delete unneeded check P is always true. We check it before Change-Id: Iee61cda002a9f61aee26b9f66c5f9b59e3389efb 2016-12-08 12:58 +0000 [fe5be81821] Badalyan Vyacheslav * Small code cleanup in chan_sip The conditional expressions of the 'if' operators situated alongside each other are identical. Change-Id: I2cf7c317b106ec14440c7f1b5dcfbf03639f748a 2016-12-08 12:34 +0000 [149d8db96c] Badalyan Vyacheslav * Fix IO conversion bug Expression 'rlen < 0' is always false. Unsigned type value is never < 0. Change-Id: Id9f393ff25b009a6c4a6e40b95f561a9369e4585 2016-11-30 09:31 +0000 [c796f00c35] Walter Doekes * chan_sip: Do not allow non-SP/HTAB between header key and colon. RFC says SIP headers look like: HCOLON = *( SP / HTAB ) ":" SWS SWS = [LWS] ; sep whitespace LWS = [*WSP CRLF] 1*WSP ; linear whitespace WSP = SP / HTAB ; from rfc2234 chan_sip implemented this: HCOLON = *( LOWCTL / SP ) ":" SWS LOWCTL = %x00-1F ; CTL without DEL This discrepancy meant that SIP proxies in front of Asterisk with chan_sip could pass on unknown headers with \x00-\x1F in them, which would be treated by Asterisk as a different (known) header. For example, the "To\x01:" header would gladly be forwarded by some proxies as irrelevant, but chan_sip would treat it as the relevant "To:" header. Those relying on a SIP proxy to scrub certain headers could mistakenly get unexpected and unvalidated data fed to Asterisk. This change fixes so chan_sip only considers SP/HTAB as valid tokens before the colon, making it agree on the headers with other speakers of SIP. ASTERISK-26433 #close AST-2016-009 Change-Id: I78086fbc524ac733b8f7f78cb423c91075fd489b 2016-11-14 18:18 +0000 [5c89604a32] Joshua Colp * res_format_attr_opus: Fix crash when fmtp contains spaces. When an opus offer or answer was received that contained an fmtp line with spaces between the attributes the module would fail to properly parse it and crash due to recursion. This change makes the module handle the space properly and also removes the recursion requirement. ASTERISK-26579 Change-Id: I01f53e5d9fa9f1925a7365f8d25071b5b3ac2dc3 2016-12-06 14:54 +0000 [79b09b5f18] George Joseph * res_pjsip_registrar: AMI Add RegistrationInboundContactStatuses command The PJSIPShowRegistrationsInbound AMI command was just dumping out all AORs which was pretty useless and resource heavy since it had to get all endpoints, then all aors for each endpoint, then all contacts for each aor. PJSIPShowRegistrationInboundContactStatuses sends ContactStatusDetail events which meets the intended purpose of the other command and has significantly less overhead. Also, some additional fields that were added to Contact since the original creation of the ContactStatusDetail event have been added to the end of the event. For compatibility purposes, PJSIPShowRegistrationsInbound is left intact. ASTERISK-26644 #close Change-Id: I326f12c9ecb52bf37ba03f0748749de4da01490a 2016-12-07 14:22 +0000 [3b6e6cd01c] snuffy * tests_dns: Make DNS tests older nameser.h compatible Fix the tests for DNS to use older style nameser.h as in ASTERISK-26608. Tested on: OpenBSD 6.0, Debian 8 ASTERISK-26647 #close Change-Id: I285913c44202537c04b3ed09c015efa6e5f9052d 2016-12-06 16:45 +0000 [76d52dc228] Richard Mudgett * Bundled pjproject: Fix finding SIP transactions. Occasionally SIP message transactions are not found when they should be. In the particular case an incoming INVITE transaction is CANCELed but the INVITE transaction cannot be found so a 481 response is returned for the CANCEL. The problematic calls have a '_' character in the Via branch parameter. The problem is in the pjproject PJ_HASH_USE_OWN_TOLOWER feature's code. The problem with the "own tolower" code is that it does not calculate the same hash value as when the pj_tolower() function is used. The "own tolower" code will erroneously modify the ASCII characters '@', '[', '\\', ']', '^', and '_'. Calls to pj_hash_calc_tolower() can use the PJ_HASH_USE_OWN_TOLOWER substitute algorithm when enabled. Calls to pj_hash_get_lower(), pj_hash_set_lower(), and pj_hash_set_np_lower() call find_entry() which never uses the PJ_HASH_USE_OWN_TOLOWER algorithm. As a result you may not be able to find a hash tabled entry because the calculated hash values would differ. * Simply disable PJ_HASH_USE_OWN_TOLOWER. ASTERISK-26490 #close Change-Id: If89bfdb5f301b8b685881a9a2a6e0c3c5af32253 2016-12-01 16:49 +0000 [503006123a] Mark Michelson * http: Send headers and body in one write. This is a semi-regression caused by the iostreams change. Prior to iostreams, HTTP headers were written to a FILE handle using fprintf. Then the body was written using a call to fwrite(). Because of internal buffering, the result was that the HTTP headers and body would be sent out in a single write to the socket. With the change to iostreams, the HTTP headers are written using ast_iostream_printf(), which under the hood calls write(). The HTTP body calls ast_iostream_write(), which also calls write() under the hood. This results in two separate writes to the socket. Most HTTP client libraries out there will handle this change just fine. However, a few of our testsuite tests started failing because of the change. As a result, in order to reduce frustration for users, this change alters the HTTP code to write the headers and body in a single write operation. ASTERISK-26629 #close Reported by Joshua Colp Change-Id: Idc2d2fb3d9b3db14b8631a1e302244fa18b0e518 2016-12-06 10:56 +0000 [bf6423a336] Mark Michelson * Iostreams: Correct off-by-one error. ast_iostream_printf() attempts first to use a fixed-size buffer to perform its printf-like operation. If the fixed-size buffer is too small, then a heap allocation is used instead. The heap allocation in this case was exactly the length of the string to print. The issue here is that the ensuing call to vsnprintf() will print a NULL byte in the final space of the string. This meant that the final character was being chopped off the string and replaced with a NULL byte. For HTTP in particular, this caused problems because HTTP publishes the expected Contact-Length. This meant HTTP was publishing a length one character larger than what was actually present in the message. This patch corrects the issue by adding one to the allocation length. ASTERISK-26629 Reported by Joshua Colp Change-Id: Ib3c5f41e96833d0415cf000656ac368168add639 2016-12-06 12:06 +0000 [fe9f070885] George Joseph * pjproject_bundled: Fix missing inclusion of symbols Added back in a -g3, and an -O3 when DONT_OPTIMIZE is not set, to the CFLAGS. Not sure how they went missing. Also fixed an uninstall problem where we weren't removing the symlink from libasteriskpj.so.2 to libasteriskpj.so. While I was there, I fixed it for libasteriskssl as well. Change-Id: I9e00873b1e9082d05b5549d974534b48a2142556 2016-11-30 18:25 +0000 [4b3d3fc741] Richard Mudgett * res_pjsip_outbound_registration.c: Filter redundant statsd reporting. Increasing the testsuite shutdown timeout before forcibly killing Asterisk allowed more events to be sent out. Some tests failed as a result. The tests/channels/pjsip/statsd/registrations failed because we now get the statsd events that a comment in the test configuration stated couldn't be intercepted. Unfortunately, we get a variable number of events because of internal status state transition races generating redundant statsd events. We were reporting redundant statsd PJSIP.registrations.state changes for internal state changes that equated to the same thing publicly. * Made update_client_state_status() filter out redundant statsd updates. ASTERISK-26527 Change-Id: If851c7d514bb530d9226e4941ba97dcf52000646 2016-06-28 16:26 +0000 [26c8552fff] Tzafrir Cohen * OpenSSL 1.1.0 support OpenSSL 1.1.0 includes some major changes in the interface. See https://wiki.openssl.org/index.php/1.1_API_Changes . Status: Right now there are still a few deprecation notes with OpenSSL 1.1.0. But it's a start. Changes: * CRYPTO_LOCK is no longer available. Replace it with its value for now. I don't completely understand what it is used for there. * Remove several functions from libasteriskssl that seem to no longer be needed. * Structures have become opaque and are accesses with accessors. * ERR_remove_thread_state() no longer needed. * SSLv2 code now could no longer be used in 1.1. ASTERISK-26109 #close Change-Id: I5e29d477d486ca29b6aae0dc2f5dff960c1cb82b 2016-11-22 11:20 +0000 [75230f4c01] Guido Falsi * res_rtp: Fix regression when IPv6 is not available. The latest Release candidate fails to create RTP streams when IPv6 is not available. Due to the changes made in September the ast_sockaddr structure passed around to create these streams is always of AF_INET6 type, causing failure when used for IPv4. This patch adds a utility function to check for availability of IPv6 and applies such check at startup to determine how to create the ast_sockaddr structures. ASTERISK-26617 #close Change-Id: I627a4e91795e821111e1cda523f083a40d0e0c3e 2016-11-23 18:27 +0000 [1dfa11b65c] Richard Mudgett * PJPROJECT logging: Made easier to get available logging levels. Use of the new logging is as simple as issuing the new CLI command or setting the new pjproject.conf option. Other options that can affect the logging are how you have the pjproject log levels mapped to Asterisk log types in pjproject.conf and if you have configured Asterisk to log the DEBUG type messages. Altering the pjproject.conf level mapping shouldn't be necessary for most installations as the default mapping is sensible. Configuring Asterisk to log the DEBUG message type is standard practice for collecting debug information. * Added CLI "pjproject set log level" command to dynamically adjust the maximum pjproject log message level. * Added CLI "pjproject show log level" command to see the currently set maximum pjproject log message level. * Added pjproject.conf startup section "log_level" option to set the initial maximum pjproject log message level so all messages could be captured from initialization. * Set PJ_LOG_MAX_LEVEL to 6 to compile in all defined logging levels into bundled pjproject. Pjproject will use the currently set run time log level to determine if a log message is generated just like Asterisk verbose and debug logging levels. * In log_forwarder(), made always log enabled and mapped pjproject log messages. DEBUG mapped log messages are no longer gated by the current Asterisk debug logging level. * Removed RAII_VAR() from res_pjproject.c:get_log_level(). ASTERISK-26630 #close Change-Id: I6dca12979f482ffb0450aaf58db0fe0f6d2e5389 2016-11-30 10:48 +0000 [621d886ca7] Mark Michelson * Frame deferral: Re-queue deferred frames one-at-a-time. The recent change that made frame deferral into an API had a behavior change to it. When frame deferral was completed, we would take all of the deferred frames and queue them all onto the channel in one call to ast_queue_frame_head(). Before frame deferral was API-ized, places that performed manual frame deferral would actually take each deferred frame and queue them onto the channel. This change in behavior caused the confbridge_recording test to start failing consistently. Without going too crazily deep into the details, a channel was getting "stuck" in an ast_safe_sleep(). An AMI redirect was attempting to break it out of the sleep, but because there were more frames in the channel read queue than expected, the channel ended up being unable to break from its sleep loop. By restoring the behavior of individual frame queuing after deferral, the test starts passing again. Note, this points to a potential underlying issue pointing to an "unbalance" that can occur when queuing multiple frames at once, and so a follow-up issue is being created to investigate that possibility. Change-Id: Ied5dacacda06d343dea751ed5814a03364fe5a7d 2016-11-15 15:01 +0000 [e5e887be53] Alexei Gradinari * chan_pjsip: fix switching sending codec when asymmetric_rtp_codec=no The sending codec is switched to the receiving codec and then is switched back to the best native codec on EVERY receiving RTP packets. This is because after call of ast_channel_set_rawwriteformat there is call of ast_set_write_format which calls set_format which sets rawwriteformat to the best native format. This patch adds a new function ast_set_write_format_path which set specific write path on channel and uses this function to switch the sending codec. ASTERISK-26603 #close Change-Id: I5b7d098f8b254ce8f45546e6c36e5d324737f71d 2016-11-21 15:43 +0000 [ddc951060a] David Kerr * app_originate: Add option to execute gosub prior to dial Issue/patch ASTERISK-26587 was inspired by issue ASTERISK-22992 that requested ability to add callerid into app_originate. Comments in that issue suggested that it was better solved by adding an option to gosub prior to originating the call. The attached patch implements this much like app_dial with two options one to gosub on the originating channel and one to gosub on the newly created channel and behaves just like app_dial. I have tested this patch by adding callerid info to the new channel and also SIPAddHeader (to e.g. add header to force auto answer) and confirmed it works. Have also tested both 'exten' and 'app' versions of app_originate. Opened by: dkerr Patch by: dkerr Change-Id: I36abc39b58567ffcab4a636ea196ef48be234c57 2016-11-28 19:43 +0000 [0e214c4932] Eduardo S. Libardi * res_calendar_caldav: Add support reading gmail calendar The response from gmail calendar includes the string name "caldav:calendar-data". res_calendar_caldav implements the example included in RFC 4791: string "C:calendar-data". When reading the calendar, res_calendar_caldav compare the string and if does not match just discards the event. This commit compares the response to both strings, successfully loading gmail calendar events. Writing to gmail calendar is working prior to this fix. ASTERISK-26624 Reported by: Eduardo S. Libardi Change-Id: Ia1eef10552ae616efb645d390f5ffe81260d7d4a 2016-11-28 15:12 +0000 [a3f48be0da] Matt Jordan * res/res_pjsip: Fix documentation whitespace issues Tabs > Spaces. Change-Id: If1e43a71822615a898e958e0f8b2e882606f0bd0 2016-11-22 10:27 +0000 [0e15760795] Matt Jordan * res_pjsip/chan_sip: Advertise 'ws' in the SIP URI transport parameter Per RFC 7118 5.2, the SIP URI 'transport' parameter should advertise 'ws' when WebSockets are to be used as the transport. This applies to both secure and insecure WebSockets. There were two bugs in Asterisk with respect to this: (1) The most egregious occurs in res_pjsip. There, we advertise 'ws' for insecure websockets and 'wss' for secure websockets. While this would seem to make sense - since 'WS' and 'WSS' are used for the Via Transport parameter - this is not the case for the SIP URI. This patch corrects that by registering the secure websockets with pjproject using the shorthand 'WS', and by returning 'ws' when asked for the transport parameter. Note that in pjproject, it is perfectly valid to have multiple transports use the same shorthand. (2) In chan_sip, we return an upper-case version of the transport 'WS' instead of 'ws'. Since we should be strict in what we send and liberal in what we accept (within reason), this patch lower-cases the transport before appending it to the parameter. ASTERISK-24330 #close Reported by: cervajs, Inaki Baz Castillo Change-Id: Iff77b645f8cc3b7cd35168a6676c26b147f22f42 2016-11-28 11:03 +0000 [8a68289766] George Joseph * build_tools: Fix download_externals to handle certified branches download_externals wasn't handling the "certified/13.x" version correctly. Change-Id: I124d195bb117ca36fd7bf1150c630f3b474a9d9a 2016-11-28 07:36 +0000 [e3dae763ee] Joshua Colp * iostream: Move include of asterisk.h The asterisk.h header file needs to be included first or else some things go awry, such as: implicit declaration of function 'vasprintf' Change-Id: I981dc2a77a1ba791888e4f1726644d4656c0407c 2016-11-26 10:57 +0000 [0b588778c0] Michael Kuron * chan_sip: Fix segfault during module unload If a TCP/TLS connection was pending (not accepted and not timed out) during unload of chan_sip, Asterisk would segfault when trying to send a signal to a thread whose thread ID hadn't been recorded yet. This commit fixes that by recording the thread ID before calling the blocking connect() syscall. This was a regression introduced by 776a14386a55b5425c7e9617eff8af8b45427144. The above wasn't enough to fix the segfault, which was now delayed to the point where connect() timed out. Therefore, it was necessary to also remove the SA_RESTART flag from the SIGURG sigaction so that pthread_kill() could be used to interruput the connect() syscall. This was a regression introduced by 5d313f51b982a18f7321adcf7c7a4e822d8b2714. ASTERISK-26586 #close Change-Id: I76fd9d47d56e4264e2629bce8ec15fecba673e7b 2016-11-23 14:52 +0000 [ead773f801] Dennis Guse * pbx_lua: On configuration errors report module load failure instead of decline. Switched from AST_MODULE_LOAD_DECLINE to AST_MODULE_LOAD_FAILURE. Therefore, if pbx_lua fails to load and pbx_lua is marked as required, Asterisk exits as expected. If extensions.lua cannot be opened, AST_MODULE_LOAD_DECLINE is reported. Change-Id: I8e5a0037e69b41743db60c568541ebb2f52a7a8f 2016-11-11 08:16 +0000 [d9b24cce0a] gestoip2 * res_rtp_asterisk: RTT miscalculation in RTCP When retrieving RTCP stats for PJSIP channels, RTT values are unreliable. RTT calculation is correct, but the data representation isn't. RTT is represented by a 32-bit fixed-point number with the integer part in the first 16 bits and the fractional part in the last 16 bits. In order to get the RTT value, the fractional part is miscalculated, there is an unnecessary 16 bit shift that causes overflow. Besides this there is another mistake, when transforming the integer value to the fixed point fractional part via bitwise operation, that loses precision. * RTT fractional part is no longer shifted, avoiding overflow. * RTT fractional part is transformed to its fixed-point value more precisely. * Fixed timeval2ntp() and ntp2timeval() second fraction conversions. * Fixed NTP timestamp report logging. The usec was inexplicably multiplied by 4096. ASTERISK-26566 #close Reported by Hector Royo Concepcion Change-Id: Ie09bdabfee75afb3f1b8ddfd963e5219ada3b96f 2016-11-15 13:44 +0000 [635b0a0a55] Michael Kuron * tcptls: Use new certificate upon sip reload Previously, a TLS server socket would only be restarted upon sip reload if the bind address had changed. This commit adds checking for changes to TLS parameters like certificate, ciphers, etc. so they get picked up without requiring a reload of the entire chan_sip module. This does not affect open connections in any way, but new connections will use the new TLS parameters. The changes also apply to HTTP and Manager. ASTERISK-26604 #close Change-Id: I169e86cefc6dcd627c915134015a6a1ab1aadbe6 2016-11-21 09:49 +0000 [abae3dc36e] George Joseph * pjproject_bundled: Use $(LIB_RT) for link of libasteriskpj libasteriskpj was hard coded to use -lrt but librt is linux specific so we now use the LIB_RT variable which gets set by configure. Change-Id: I41148884517e3031f7675a413d524c86e8614694 2016-11-19 16:19 +0000 [b546497fe0] snuffy * Add support for older name resolving version libraries like openBSD Fix support of OS's like openBSD that use an older nameser.h, this change reverts the defines to the older style which on other systems is found in nameser_compat.h Tested on openBSD 6.0, Debian 8 ASTERISK-26608 #close Change-Id: Iffb36caab8c5aa9dece0ce2d009041f7b56cc86a 2016-11-18 09:46 +0000 [7a8d6bc81b] Mark Michelson * Bump ARI version to 2.0.0 In order to not have version number overlap between different versions of Asterisk, each new major version of Asterisk will mean we also bump the ARI major version number. This particular change does NOT introduce any known breaking changes to ARI. For discussion relating to this topice, see: http://lists.digium.com/pipermail/asterisk-dev/2016-November/075964.html Change-Id: I712ee0df177a8fe1252da2bc029705268b97b665 2016-11-16 12:05 +0000 [d3f070c7a2] George Joseph * pjproject_bundled: Improve reliability of pjproject download The download process now has a timeout which will cause wget to retry if it stops retrieving data for 5 seconds and fetch and curl to timeout if the whole retrieval take smore than 30 seconds. If the tarball retrieval works, the MD5SUM file is retrieved from the downloads site and the md5 checksum is verified. If either the tarball retrieval or MD5SUM retrieval fails, or the checksums don't match, the entire process is retried once. If it fails again, any incomplete tarball is deleted. .DELETE_ON_ERROR: was also added to the Makefile. Not only does this delete the tarball on failure, it till also delete corrupted library files from the pjproject source directory should they fail to build correctly. Tested all the way back to FreeBSD 9, CentOS 6, Debian 6 and Ubuntu 14. Change-Id: Iea7d33b96a31622ab1b6e54baebaf271959514e1 2016-11-11 07:13 +0000 [e822a50f86] Mikheili Dautashvili * main/app.c: Transmit Silence on ControlPlayback pause ASTERISK-26562 #close Change-Id: Ie6cb0ffc2b8c775639ce7784fe96f4ea00cfa2f8 2016-11-17 10:52 +0000 [d670ea6297] Mark Michelson * manager: update minor version Based on bridge video AMI event changes, bump the minor version of AMI. Change-Id: Idf84507354170400813cda780906c94c9f1b60b4 2016-11-17 08:25 +0000 [349e08cb48] Timo Teräs * codec_dahdi: Fix poll.h include. POSIX defines poll.h. sys/poll.h should not be used as it is c-library internal header which may or may not exist. Notably in musl including sys/poll.h generates warning of being incorrect. Change-Id: Ib318c1c7142a737bcf3caa4d8d72560bebe39252 2016-11-16 20:24 +0000 [935f5d003b] George Joseph * build: Various OpenBSD issues OpenBSD's 'find' doesn't take the -delete argument so you have to pipe through 'xargs rm -rf'. 'echo -e' doesn't like \t starting a line. It just prints 't' which causes the libasteriskpj.exports file to be garbage. They were just cosmetic so they were removed. librt doesn't exist so the link of libasteriskpj.so fails. It's not actually needed for linux anyway so -lrt was removed from the link. res_rtp_asterisk was failing to load because of an undefined DTLS_method. '|| defined(LIBRESSL_VERSION_NUMBER)' was added to the #if so DTLSv1_method is used instead. ASTERISK-26608 Change-Id: I926ec95b0b69633231e3ad1d6e803b977272c49c 2016-11-16 15:42 +0000 [dc8f99ee27] Mark Michelson * res_format_attr_opus: Fix fmtp generation. res_format_attr_opus assumed that the string being passed into it was empty. It tried to determine if the only thing it had written was a=fmtp: And if it had, it would reset the string. Its calculation was off when working with chan_sip, though. chan_sip passes the entire built SDP rather than an empty string. This resulted in always putting an empty fmtp line in the SDP. ASTERISK-26520 #close Reported by scgm11 Change-Id: Ib2e8712d26a47067e5f36d5973577added01dbb5 2016-11-15 16:23 +0000 [ed9ced0531] Richard Mudgett * codec_opus: Fix warning when Opus negotiated but codec_opus not loaded. When Opus is negotiated but not loaded, the log is spammed with messages because the system does not know how to calculate the number of samples in a frame. * Suppress the warning by supplying a function that assumes 20ms of samples in the frame. For pass through support it doesn't really seem to matter what number of samples is returned anyway. ASTERISK-26605 #close Change-Id: Icf2273692f040dc2c45b01e72a790d11092f9e0f 2016-11-14 14:36 +0000 [0cd0e70c16] Richard Mudgett * res_pjsip_outbound_authenticator_digest.c: Fix memory pool leak. Responding to authentication challenges leaks PJSIP memory pools. The leak was introduced with a pjproject 2.5.5 API change. https://trac.pjsip.org/repos/ticket/1929 changed the API usage of pjsip_auth_clt_init() to require the new API pjsip_auth_clt_deinit() to clean up cached authentication allocations that get allocated with pjsip_auth_clt_reinit_req(). ASTERISK-26516 #close Change-Id: I4473141b8c3961d0dc91c382beb3876b3efb45c8 2016-11-15 12:01 +0000 [3017f09f22] George Joseph * file.c/__ast_file_read_dirs: Fix issues on filesystems without d_type One of the code paths in __ast_file_read_dirs will only get executed if the OS doesn't support dirent->d_type OR if the filesystem the particular file is on doesn't support it. So, while standard Linux systems support the field, some filesystems like XFS do not. In this case, we need to call stat() to determine whether the directory entry is a file or directory so we append the filename to the supplied directory path and call stat. We forgot to truncate path back to just the directory afterwards though so we were passing a complete file name to the callback in the dir_name parameter instead of just the directory name. The logic has been re-written to only create a full_path if we need to call stat() or if we need to descend into another directory. Change-Id: I54e4228bd8355fad65200c6df3ec4c9c8a98dfba 2016-06-02 14:10 +0000 [070a51bf7c] Timo Teräs * Implement internal abstraction for iostreams fopencookie/funclose is a non-standard API and should not be used in portable software. Additionally, the way FILE's fd is used in non-blocking mode is undefined behaviour and cannot be relied on. This introduces internal abstraction for io streams, that allows implementing the desired virtualization of read/write operations with necessary timeout handling. ASTERISK-24515 #close ASTERISK-24517 #close Change-Id: Id916aef418b665ced6a7489aef74908b6e376e85 2016-11-15 08:07 +0000 [d3b61a98f4] Joshua Colp * manager: Bump AMI version number. During the development of Asterisk 14 the behavior of the Command AMI action was altered such that the result was returned on lines with a prefix of "Output: ". While this was documented in the UPGRADE.txt file it is also reasonable that this should bump the AMI version number. ASTERISK-26556 Change-Id: Idf1bf01608e53f7bfdf43ddb4d0683e53f74ee42 2016-11-14 15:57 +0000 [edd7ae85e8] Matt Jordan * pjproject: Use a much higher limit for PJ_ICE_MAX_CHECKS The PJ_ICE_MAX_CHECKS constant is used by pjproject to determine how many pairs of local/remote candidates will be made. If for some reason we reach this upper bound, ICE will generally fail and no media will flow between the browser and Asterisk. This patch makes PJ_ICE_MAX_CHECKS set to the total possible number of pairs of candidates we'd theoretically allow, which is PJ_ICE_MAX_CAND^2. Prior to this patch, we simply multiplied PJ_ICE_MAX_CAND by two; on systems with multiple interfaces (I blame Docker), this is far too low to allow WebRTC calls to succeed. Setting this to be PJ_ICE_MAX_CAND^2 allowed WebRTC calls to succeed even when the system Asterisk was running on had quite a few virtual interfaces. Change-Id: Icd4f17de0ac9d3a83dddfc8bf1cb7616bc107d55 2016-11-14 15:32 +0000 [cc86329228] Matt Jordan * apps/app_echo: Only relay a single video source change frame In 9785e8d0, app_echo was updated to relay video source updates to the channel for the purposes of displaying video in WebRTC tests. Unfortunately, this can cause a Kafkaesque nightmare if two or more Local channels are in a bridge together where their ends are in app_echo. When this situation occurs, a video update sent into app_echo will cause the video update to be relayed to the other Local channels, causing another round of video updates, etc. In not much time at all, the channel length queues will be overwhelmed, channel alert pipes will fail, and all hell will break loose as Asterisk merrily continues to throw more video update requests onto the channels. This patch updates app_echo to *only* relay a single video update. Once a video update has been made, all further video updates are dropped. This meets the intended purpose of the original patch: if we get a video update and we're in app_echo, go ahead and ask the sender to update themselves. However, once we've got that video stream sync'd up, don't keep spamming the world. Change-Id: I9210780b08d4c17ddb38599d1c64453adfc34f74 2016-11-08 10:11 +0000 [a72ef38113] Matt Jordan * res/ari/resource_bridges: Add the ability to manipulate the video source In multi-party bridges, Asterisk currently supports two video modes: * Follow the talker, in which the speaker with the most energy is shown to all participants but the speaker, and the speaker sees the previous video source * Explicitly set video sources, in which all participants see a locked video source Prior to this patch, ARI had no ability to manipulate the video source. This isn't important for two-party bridges, in which Asterisk merely relays the video between the participants. However, in a multi-party bridge, it can be advantageous to allow an external application to manipulate the video source. This patch provides two new routes to accomplish this: (1) setVideoSource: POST /bridges/{bridgeId}/videoSource/{channelId} Sets a video source to an explicit channel (2) clearVideoSource: DELETE /bridges/{bridgeId}/videoSource Removes any explicit video source, and sets the video mode to talk detection ASTERISK-26595 #close Change-Id: I98e455d5bffc08ea5e8d6b84ccaf063c714e6621 2016-11-14 14:03 +0000 [7263a17ca0] George Joseph * channel: Fix issues in hangup scenarios caused by frame deferral ASTERISK-26343 Change-Id: I06dbf7366e26028251964143454a77d017bb61c8 (cherry picked from commit 0be46aaf6b8b9eb5b0160ec591cdc2c6e1802a6d) 2016-11-14 13:55 +0000 [0dc4567133] George Joseph * Revert "Revert "channel: Use frame deferral API for safe sleep."" This reverts commit e5365dada5052b87275c048f6e29ac7d5e2b2415. Change-Id: Icc40cf0c7687454760762912dd29e4ae79e8e9ee 2016-11-14 13:55 +0000 [6d61f7bfd1] George Joseph * Revert "Revert "autoservice: Use frame deferral API"" This reverts commit edca6911f392f47c1a5a25d1d3a357c72b04a78a. Change-Id: I76030b87333a2c390cd05392b74b75678d78ddfa 2016-11-14 13:55 +0000 [f62c9c42fa] George Joseph * Revert "Revert "AGI: Only defer frames when in an interception routine."" This reverts commit 6bce938c2fcb60b7a77a0e997a6518860c0bfa39. Change-Id: Iadbf462bf2a52e8b2fa9ebc75b37b1f688ba51d9 2016-11-14 13:54 +0000 [2966fa5ad7] George Joseph * Revert "Revert "Add API for channel frame deferral."" This reverts commit fa749866c17f91860d3e9f89742eab3e6f03ecbc. Change-Id: Idcd1b88fa0766b1326dcc87d8905dbc314c71bd7 2016-11-11 10:45 +0000 [c6d755de11] Mark Michelson * res_ari: Add support for channel variables in ARI events. This works the same as for AMI manager variables. Set "channelvars=foo,bar" in your ari.conf general section, and then the channel variables "foo" and "bar" (along with their values), will appear in every Stasis websocket channel event. ASTERISK-26492 #close patches: ari_vars.diff submitted by Mark Michelson Change-Id: I5609ba239259577c0948645df776d7f3bc864229 2016-11-14 12:16 +0000 [72da2ef9ff] George Joseph * cli: Fix ast_el_read_char to work with libedit >= 3.1 Libedit 3.1 is not build with unicode on as a default and so the prototype for the el_gets callback changed from expecting a char buffer to accepting a wchar buffer. If ast_el_read_char isn't changed, the cli reads garbage from teh terminal. Added a configure test for (*el_rfunc_t)(EditLine *, wchar_t *) and updated ast_el_read_char to use the HAVE_ define to detemrine whether to use char or wchar. ASTERISK-26592 #close Change-Id: I9099b46f68e06d0202ff80e53022a2b68b08871a 2016-11-12 12:15 +0000 [97a75e3829] Tzafrir Cohen * Add support for building RADIUS with radcli Radcli is yet another RADIUS client library, generally compatible with freeradius and radiusclient-ng. This commit adds autoconf option for detecting it as well and changes cdr_radius and cel_radius to use its header file in that case. ASTERISK-26540 #close Change-Id: I271f0715406334874865ffbce0b354b3a2ca148f 2016-11-10 10:57 +0000 [1bd49040c4] Joshua Colp * res_pjsip_sdp_rtp: Reject offer of required SRTP without res_srtp. When optimistic SRTP was on it was possible for us to still set up a call without an audio stream if an offer was received with required SRTP. This change makes it so this scenario will now fail with a 488 response. ASTERISK-26575 Change-Id: I7d14187037681f48879bd20319ac79d0877318f3 2016-11-11 02:41 +0000 [dfb951817f] Igor Goncharovskiy * Fix closing rtp ports after call finished in chan_unistim. Fix ASTERISK-26565 by adding ast_rtp_instance_stop before rtp instance destroy for chan_unistim. Also several fixes for displayed text translation. Change-Id: If42a03eea09bd1633471406bdc829cf98bf6affc 2016-11-11 00:29 +0000 [939dcf66b0] Timo Teräs * addons/chan_mobile: do not use strerror_r The two reasons why it might be used are that some systems do not implement strerror in thread safe manner, and that strerror_r returns the error code in the string in case there's no error message. However, all of asterisk elsewhere uses strerror() and assumes it to be thread safe. And in chan_mobile the errno is also explicitly printed so neither of the above reasons are valid. The reasoning to remove usage is that there are actually two versions of strerror_r: XSI and GNU. They are incompatible in their return value, and there's no easy way to figure out which one is being used. glibc gives you the GNU version if _GNU_SOURCE is defined, but the same feature test macro is needed for other symbols. On all other systems you assumedly get XSI symbol, and compilation warnings as well as non-working error printing. Thus the easiest solution is to just remove strerror_r and use strerror as rest of the code. Alternative is to introduce ast_strerror in separate translation unit so it can request the XSI symbol in glibc case, and replace all usage of strerror. Change-Id: I84d35225b5642d85d48bc35fdf399afbae28a91d 2016-09-23 17:54 +0000 [338f35edcc] Richard Mudgett * res_pjsip.c: Rework endpt_send_request() req_wrapper code. * Don't hold the req_wrapper lock too long in endpt_send_request(). We could block the PJSIP monitor thread if the timeout timer expires. sip_get_tpselector_from_endpoint() does a sorcery access that could take awhile accessing a database. pjsip_endpt_send_request() might take awhile if selecting a transport. * Shorten the time that the req_wrapper lock is held in the callback functions. * Simplify endpt_send_request() req_wrapper->timeout code. * Removed some redundant req_wrapper->timeout_timer->id assignments. Change-Id: I3195e3a8e0207bb8e7f49060ad2742cf21a6e4c9 2016-09-21 15:10 +0000 [bb196323f9] Richard Mudgett * res_pjsip: Fix tdata leaks in off nominal paths. Change-Id: Ie83e06e88c2d60157775263b07e40b61718ac97b 2016-10-24 12:41 +0000 [9df59d9ff4] Richard Mudgett * res_pjsip_registrar_expire.c: Remove extra linefeed in debug message. Change-Id: I1f9adb911f23376503396ec8867e8005b755eb94 2016-11-10 13:38 +0000 [73524bde9c] C.J. Collier * chan_sip: Fix typo and re-wrap surrounding docs Correct typo of end-pints to end-points Re-wrap session timer parameter docs to max 80 chars wide; this eases reading on terminals with lower resolution, commonly the case for those with visual impairments. ASTERISK-26573 Change-Id: I22c94459f4bb6b8a2f6713cfd22e87c32f204e6b Signed-off-by: C.J. Collier 2016-11-09 15:14 +0000 [bdb6d928c5] Joshua Colp * res_pjsip: Perform resolution when explicit IPv6 transport is used. This change fixes the SIP resolver such that if an IPv6 transport is explicitly used it will resolve NAPTR, SRV, and AAAA records. You can explicitly use one by specifying it on an endpoint. ASTERISK-26571 Change-Id: I2ed3ce81b43a6a8a937c0ebc1b8ed2da5ac2ef36 2016-11-10 08:33 +0000 [93a0de1f0e] Joshua Colp * app_queue: Add mention of 'ABANDON' variable to CHANGES. ASTERISK-26558 Change-Id: I1127010181e79c8ac291f72f036cb8e430dc7f7e 2016-11-10 07:34 +0000 [fa749866c1] George Joseph * Revert "Add API for channel frame deferral." This reverts commit f073f648b87d45e4729969fd2d83695c300757d1. Multiple testsuite failures were detected after the fact. Change-Id: I968c380418bf65c7166f6ecff30fe8e247ea6682 2016-11-10 07:33 +0000 [6bce938c2f] George Joseph * Revert "AGI: Only defer frames when in an interception routine." This reverts commit 28926d1c81540bbeb16802814d3f2e63c2347bd2. Multiple testsuite failures were detected after the fact. Change-Id: I8d4f5ccbb421a351d616254844ae7e5a31053edb 2016-11-10 07:32 +0000 [edca6911f3] George Joseph * Revert "autoservice: Use frame deferral API" This reverts commit afef1b8e4a311d33b3e485b9bab3c6e7fd13fbc9. Multiple testsuite failures were detected after the fact. Change-Id: Ib4cb0c0a6475681ce817f71b4050be25640ab67f 2016-11-10 07:31 +0000 [e5365dada5] George Joseph * Revert "channel: Use frame deferral API for safe sleep." This reverts commit 392202304d248147378f1e16f1f012285dc1221f. Multiple testsuite issues were discovered after the fact. Change-Id: I848c4196dca2994b1a368087004326ea354cff95 2016-11-09 18:18 +0000 [edea41126b] George Joseph * build: Fix default values for some SANITIZER options 2 of the sanitizers didn't have default values so in systems that don't support sanitizers menuselect would spit out warnings. They were harmless but confusing. They've now been set to "0". Change-Id: I08dc495e3b83f1feac3160b421f538c375fc5d58 2016-11-06 06:04 +0000 [4e8ab6cda9] Sebastian Gutierrez * app_queue: new variable set when abandoned sets the variable ABANDONED to TRUE if the call was not answered. ASTERISK-26558 Change-Id: I4729af9bff4eba436d8a776afd3374065d0036d3 2016-11-08 10:48 +0000 [e5860ce07d] Mark Michelson * res_pjsip_session: Do not call session supplements when it's too late. res_pjsip_sesssion was hooking into transaction and invite state changes. One of the reasons for doing so was due to the PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the message sending process, and so we should call session supplements to alter the outgoing message. In reality, this event was meant to indicate that the message either a) had already been sent, or b) required a DNS lookup and would be sent when the DNS query completed. In case (a), this meant we were altering an already-sent request/response for no reason. In case (b), this potentially meant we could be trying to alter a request/response at the same time that the DNS resolution completed. In this case, it meant we might be stomping on memory being used by the thread actually sending the message. This caused potential crashes and memory corruption. This patch removes the calls to session supplements from the case where the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to alter the message at this point is too late, and it can cause nothing but harm to try to do it. Because there were no longer any calls to the handle_outgoing() function, it has been removed. Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92 2016-11-03 16:46 +0000 [392202304d] Mark Michelson * channel: Use frame deferral API for safe sleep. This is another case where manual frame deferral can be replaced with centralized routines instead. Change-Id: I42cdf205f8f29a7977e599751a57efbaac07c30e (cherry picked from commit d149c4b9e07eeb880d8428ad52c6fdb315cc15f5) 2016-11-03 16:46 +0000 [afef1b8e4a] Mark Michelson * autoservice: Use frame deferral API Rather than use manual frame deferral, just let the channel API do it for us. ASTERISK-26343 Change-Id: I688386f36e765dbc07be863943a43f26bd5eac49 (cherry picked from commit 8ba3e2fc27f9966b8c7ce75c1eca6208613a9315) 2016-11-03 16:42 +0000 [28926d1c81] Mark Michelson * AGI: Only defer frames when in an interception routine. AGI recently was modified to defer important frames. This was because when AGI was used in a connected line interception routine, the resulting connected line frame would end up getting discarded by the AGI. However, this caused bad behavior in other cases. Specifically, during a transfer, if someone attempted to manually set the Caller ID on a channel in an AGI, the deferred connected line frame would end up overwriting what had been manually set in the AGI. Since the initial issue was specific to interception routines, this change removes the manual frame deferral from AGI and instead uses the new frame deferral API in interception routines. ASTERISK-26343 #close Reported by Morton Tryfoss Change-Id: Iab7d39436d0ee99bfe32ad55ef91e9bd88db4208 2016-11-03 16:36 +0000 [f073f648b8] Mark Michelson * Add API for channel frame deferral. There are several places in Asterisk that have duplicated logic for deferring important frames until later. This commit adds a couple of API calls to facilitate this automatically. ast_channel_start_defer_frames(): Future reads of deferrable frames on this channel will be deferred until later. ast_channel_stop_defer_frames(): Any frames that have been deferred get requeued onto the channel. ASTERISK-26343 Change-Id: I3e1b87bc6796f222442fa6f7d1b6a4706fb33641 2016-11-02 10:52 +0000 [d30415bfa1] Joshua Colp * res_stasis: Don't unsubscribe from a NULL bridge. A NULL bridge has special meaning in res_stasis for unsubscribing. It means that a subscription to ALL bridges should be removed. This should not be done as part of the normal subscription management in the res_stasis channel loop. ASTERISK-26468 Change-Id: I6d5bea8246dd13a22ef86b736aefbf2a39c15af0 2016-11-03 07:42 +0000 [0a698cd932] Alexander Anikin * chan_ooh323: Fixes to work right with Cisco devices Changed output packets queue processing algo to one read-one write instead of all read-all send Remove h.245 tunneling parameter from ReleaseComplete packet ASTERISK-24400 #close Reported by: Dmitry Melekhov Tested by: Dmitry Melekhov Change-Id: I0b31933b062a21011dbac9a82b8bcfe345f406f6 2016-11-03 13:10 +0000 [a1cdc3891a] Alexander Anikin * chan_ooh323: reset rrq count on gk registration reset registration attempts count on success registration on gatekeeper Change-Id: I5f47351852e0ca76c9ac78421659600e0f106336 2016-11-06 05:40 +0000 [b2b5f9d897] frahaase * ast_format: Adds an identifier for interleaved audio formats to the ast_format Adds an identifier (with a getter and setter) to detect channels with interleaved audio. This is needed by the binaural bridge_softmix patch (ASTERISK-26292) and was already discussed here: http://lists.digium.com/pipermail/asterisk-dev/2016-October/075900.html The identifier can be set during fmtp parsing (to be seen in the res_format_attr_opus.c change). ASTERISK-26292 Change-Id: I359801cc5f98c35671c48dabc81a7f4ee1183d63 2016-11-06 03:46 +0000 [fbbbd0add9] Michael Kuron * automon: restore mixing of the both channels after recording stops This is a regression over Asterisk 11, introduced by 2dc8a060064f359a17f5ebcd515d85fe5203c019. Previously, recordings started via the automon DTMF code would automatically be mixed together using sox because app_monitor would be called with the m option. This commit restores this behavior. Change-Id: Ibaf58684285c3f1b6ca3714524e6d638ae3b3759 2016-11-04 15:42 +0000 [367d4903cc] Matt Jordan * res_http_websocket: Increase the buffer size for non-LOW_MEMORY systems Not surprisingly, using Respoke (and possibly other systems) it is possible to blow past the 16k limit for a WebSocket packet size. This patch bumps it up to 32k, which, at least for Respoke, is sufficient. For now. Because 32k is laughable on a LOW_MEMORY system (as is 16k, for that matter), this patch adds a LOW_MEMORY directive that sets the buffer to 8k for systems who have asked for their reduced memory availability to be considered. Change-Id: Id235902537091b58608196844dc4b045e383cd2e 2016-11-04 15:40 +0000 [7a449b6819] Matt Jordan * res_stasis: Set a video source mode on Stasis created bridges When a bridge is created via ARI (through res_stasis), no video source mode is set by default. As a result, any endpoint sending video media won't ever see any video reflected back to it. This patch defaults a bridge to a 'follow the talker' video mode. Further work can be done to add routes that allow for the video mode to be controlled through the /bridges resource. Change-Id: I7e9d530a5d7a97a4524a9ee4e468e1a6b3443866 2016-11-04 15:37 +0000 [bbe943729a] Matt Jordan * main/bridge_channel: Fix channel reference leak on video source When a channel is made the video source, the bridge holds a reference to it. Whenever the video source changes, that reference is released. However, a ref leak does occur if the channel leaves the bridge (such as being hung up) while it is the video source, as the bridge never releases the ref in such a case. This patch adds a line to the bridge_channel_internal_join routine such that, when a channel finishes its time in the bridge, it notifies the bridge via ast_bridge_remove_video_src that if it is a video source its reference should be released. ASTERISK-26555 #close Change-Id: I3a2f5238a9d2fc49c591f0e65199d782ab0be76a 2016-11-04 15:36 +0000 [a70d6dba8c] Matt Jordan * main/bridge: Add some verbose logging for video source changes It's actually quite useful to see the source of a video stream change. This doesn't happen terribly often, even with talk detection - but when it does, it's nice to know which channel is now providing your video stream. As a verbose 5 level message, it shouldn't be terribly spammy or costly to have, and is 'lower level' then most other verbose messages that the bridge system emits. ASTERISK-26555 Change-Id: Ia1c20ecafa9670171fd38bddcf3beccae47fb15c 2016-11-04 15:33 +0000 [fb17b630a5] Matt Jordan * bridges/bridge_softmix: Remove SSRC changes on join/leave; update video source WebRTC clients really, really want to know the SSRC of the media they're getting. Changing the SSRC is generally not a good thing. bridge_softmix, starting in Asterisk 12, started changing the SSRC of parties as they joined or left the bridge. With most phones, this isn't a problem: phones just play back the stream they're getting. With WebRTC clients, however, the SSRC is tied to a media stream that may be negotiated. When a new SSRC just shows up, the media can be dropped. As it turns out, the SSRC change shouldn't even be necessary. From the perspective of the client, it's still talking to Asterisk with the same media stream: why indicate that the far party has suddenly changed to a different source of media? This patch opts to just remove the SSRC changes. With this patch, video clients that join/leave a softmix bridge actually get the video stream instead of freaking out. ASTERISK-26555 Change-Id: I27fec098b32e7c8718b4b65f3fd5fa73527968bf 2016-10-28 15:11 +0000 [70d5f90e3d] Kevin Harwell * stasis_recording/stored: remove calls to deprecated readdir_r function. The readdir_r function has been deprecated and should no longer be used. This patch removes the readdir_r dependency (replaced it with readdir) and also moves the directory search code to a more centralized spot (file.c) Also removed a strict dependency on the dirent structure's d_type field as it is not portable. The code now checks to see if the value is available. If so, it tries to use it, but defaults back to using the stats function if necessary. Lastly, for most implementations of readdir it *should* be thread-safe to make concurrent calls to it as long as different directory streams are specified. glibc falls into this category. However, since it is possible that there exist some implementations that are not safe, locking has been added for those other than glibc. ASTERISK-26412 ASTERISK-26509 #close Change-Id: Id8f54689b1e2873e82a09d0d0d2faf41964e80ba 2016-11-04 10:57 +0000 [bf01ff53f8] Kevin Harwell * Revert "chan_sip: Fix lastrtprx always updated" This reverts commit 93332cb1d0eea18021ea6538237297e627d6e2fc. Unfortunately, the aforementioned commit caused a regression (incoming calls would eventually disconnect). Thus it is being removed. ASTERISK-26523 #close ASTERISK-25270 Change-Id: Ibf5586adc303073a8eac667a4cbfdb6be184a64d 2016-11-03 13:45 +0000 [1504194215] Alexander Anikin * chan_ooh323: Fix infinite loop on read second part of H.225 packet Fix logic on read second part of H.225 packet. There was infinite loop on wrong connections due to read before poll. Change-Id: I42b4bf75c46e4a5c5df5c5ca1f0bd74b8944e7ff 2016-11-03 11:55 +0000 [78dc6ceaf6] George Joseph * pjproject_bundled: Fix issue with libasteriskpj needing libresample libresample is only needed by pjproject if we're building pjsua, which we only do if TEST_FRAMEWORK is selected. It's required by pjsua to process audio which is needed by some testsuite tests. Unfortunately, pjproject relies on a newer version of libresample than the version that ships by most distros so we need to compile the version that's bundled with pjproject. Since we only need it for pjsua, we DON'T want it's symbols exposed when we actually build asterisk. There was a problem however... TEST_FRAMEWORK is only known AFTER we've already run ./configure on both asterisk and pjproject but pjproject's ./configure needs to test it to know whether to set up to build libresample or not. The previous way of figuring this out was to always tell ./configure "yes" but not actually build the library. This caused an issue where building libasteriskpj was being told to include libresample but it wasn't actually there. The solution is to still do a default pjproject configure during an asterisk ./configure but if makeopts or menuselect.makeopts changes subsequently, we now reconfigure pjproject, taking into account the current state of TEST_FRAMEWORK. Previously, if makeopts or menuselect.makeopts changed, only a recompile of pjproject was done. Change-Id: I9b5d84c61384a3ae07fe30e85c49698378cc4685 2016-11-01 19:48 +0000 [0904c1f4cc] Sebastian Gutierrez * chan_sip: add missing account code Added missing account to AMI event of sip show peers ASTERISK-26176 #close Change-Id: Ieb6c2c80a838a1b59c82103eba4c63ba238dc482 2016-11-02 09:15 +0000 [4de5454ef1] Joshua Colp * app_dial: Fix incorrect device state when channel is picked up. Given the scenario where multiple channels are dialed using Dial() but the caller is picked up using PickupChan() all outgoing channels except the channel specified to PickupChan() would be marked as ringing until the call had been hung up. When using the PickupChan application the channel executing the application is swapped into place of another channel. As part of this process the channel is answered. The Dial application has explicit logic which checks if the channel is answered, cancels all other outgoing channels, and bridges. This logic is different than the normal logic that is executed when an outgoing channel is answered. This different logic failed to publish dial events stating that the other outgoing channels had been canceled. As a result references to the outgoing channels were held onto by the dial masquerade process until the call had been ended and the channels had gone away. This would result in the channels appearing in the "core show channels" list despite not being present anymore and would also result in incorrect device state. This change makes it so that this logic also publishes dial events stating that the other outgoing channels have been canceled. ASTERISK-26549 Change-Id: Iea7168e6e82f7d4609ec0366153804e4f55ea64f 2016-09-13 04:08 +0000 [9ac53877f6] Alexander Traud * rtp_engine: Allow more than 32 dynamic payload types. Since adding all remaining rates of Signed Linear (ASTERISK-24274), SILK (Gerrit 3136) and Codec 2 (ASTERISK-26217), no RTP Payload Type is left in the dynamic range (96-127). RFC 3551 section 3 allows to reassign other ranges. Consequently, when the dynamic range is exhausted, this change utilizes payload types in the range between 35 and 63 giving room for another 29 payload types. ASTERISK-26311 #close Change-Id: I7bc96ab764bc30098a178b841cbf7146f9d64964 2016-11-02 05:05 +0000 [6a99f007d6] Tzafrir Cohen * autoconf: more variants for OSARCH linux-gnu There are quite a few odd GNU/Linux platforms. Just call all of them linux-gnu. Specifically this fixes building the Debian platforms mips64el and x32. And maybe also others. ASTERISK-26546 #close Change-Id: I06ec4bd7f0ee1c84b6b24d81538223b07c4174b1 2016-11-01 13:13 +0000 [f29b8d62bb] Richard Mudgett * bundled pjproject: Fix DNS write to freed memory. PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS patch. The patch below fixes a write to freed memory under cartain DNS lookup conditions. 0006-r5477-svn-backport-Fix-DNS-write-on-freed-memory.patch ASTERISK-26516 Reported by: Richard Mudgett Change-Id: Ifdfae9ecf1e41b53080f33aab44ce1a220f349c5 2016-11-01 06:56 +0000 [6233e146c6] Joshua Colp * res_pjsip_sdp_rtp: Limit number of formats to defined maximum. The res_pjsip_sdp_rtp module did not restrict the number of formats added to a media stream in the SDP to the defined limit. If allow=all was used with additional loaded codecs this could result in the next media stream being overwritten some. This change restricts the module to limit it to the defined maximum and also increases the maximum in our bundled pjproject. ASTERISK-26541 #close Change-Id: I0dc5f59d3891246cafa2f3df5ec406f088559ee8 2016-10-31 17:35 +0000 [8060cd1ec1] Kevin Harwell * codecs.conf.sample: Add sample and option descriptions for codec_opus codecs.conf.sample was missing codec opus's configuration options, descriptions, and examples. This patch adds the configuration options and examples to codecs.conf.sample that can be used with codec_opus. ASTERISK-26538 #close Change-Id: I1d89bb5e01d3e3b5bd78951b8dd0ff077a83dc8b 2016-10-20 07:27 +0000 [c30d677333] Matt Jordan * res/stasis: Add CLI commands for displaying/debugging ARI apps This patch adds three new CLI commands: - ari show apps: list the registered ARI applications - ari show app: show detailed information about an ARI application - ari set debug: dump events being sent to an ARI application Note that while these CLI commands live in the res_stasis module, we use the 'ari' family for these commands. This was done as most users of Asterisk aren't aware of the semantic differences between ARI and res_stasis, and some 'ari' CLI commands already exist. ASTERISK-26488 #close Change-Id: I51ad6ff0cabee0d69db06858c13f18b1c513c9f5 2016-11-01 08:32 +0000 [2526dff94d] Grachev Sergey * chan_sip: Incorrect display option Outbound reg. retry 403 If in sip.conf (general section) set option register_retry_403=no, the command "sip show settings" return value: Outbound reg. retry 403:0 If in sip.conf (general section) set option register_retry_403=yes, the command "sip show settings" return value: Outbound reg. retry 403:-1 * In static char "sip show settings" for "Outbound.reg. retry 403" option use AST_CLI_YESNO ASTERISK-26476 #close Change-Id: I3c14272f05f1067bd2aeaa8b3ef9cf8fcb12dcf9 2016-11-01 04:18 +0000 [ed08811e64] Tzafrir Cohen * netsock.c: fix includes for HURD ASTERISK-25070 Change-Id: I43bf94d2d36d3d8a8d0df40cd6c027d65a462814 2016-11-01 04:00 +0000 [69fed26deb] Tzafrir Cohen * define PATH_MAX for HURD PATH_MAX is not guaranteed to be defined. In parctice, all but the HURD define it to a constant. It is indeed not safe to assume there won't be longer paths and Asterisk generally does err safely on such cases. So even for HURD we'll just pretend PATH_MAX is 4096. ASTERISK-25070 #close Change-Id: I53d10ba18c34c132bcb640a5fd8e0da1d9b22db3 2016-10-31 16:12 +0000 [f27f837a9f] George Joseph * pjproject_bundled: Fix compile of pjsua so it handles audio In order for pjsua and its python binding to actually negotiate audio for the testsuite tests, it needs g711 and resample. The pj* libraries themselves do not. Unfortunately, pjproject relies on a brand new libresample that most distros don't ship so we need to use the libresample already bundled with pjproject. Only the pjsua executable and the _pjsua.so python library are linked with it so it shouldn't interfere with asterisk itself. Also it was pointed out that apply_patches couldn't handle multiple patches that depended on each other during the dry-run, so the dry-run was removed. Change-Id: I24f397462b486dcdde0dcafe40e6c55a6593f098 2016-10-31 13:46 +0000 [1648ca06c3] Etienne Lessard * manager: Add documentation for NewConnectedLine event. The NewConnectedLine event has been added by commit fe7671f, but the documentation was missing. ASTERISK-26537 #close Change-Id: I7fc331f18caa28492da9303e576f70884ca8c9e6 2016-10-30 13:33 +0000 [273debd261] Corey Farrell * vector: Prevent NULL argument to memcpy. Headers declare that memcpy does not accept NULL argument for the first two parameters. Add a conditional block to prevent memcpy and ast_free from running on vectors with NULL element array. ASTERISK-26526 #close Change-Id: I988a476bb5fcfcbd3f6d6c6b3e7769e4f9629b71 2016-10-29 10:19 +0000 [ad60927a40] Corey Farrell * astobj2: Declare private variable data_size for AO2_DEBUG only. Every ao2 object contains storage for a private variable data_size, though the value is never read if AO2_DEBUG is disabled. This change makes the variable conditional, reducing memory usage. ASTERISK-26524 #close Change-Id: If859929e507676ebc58b0f84247a4231e11da07f 2016-10-28 14:55 +0000 [6feee22e09] Richard Mudgett * bundled pjproject: Crashes while resolving DNS names. PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS patch. The patches below fix the DNS lookup race condition crash caused by attempting to send the same message twice for the single DNS lookup. 0006-r5471-svn-backport-Various-fixes-for-DNS-IPv6.patch 0006-r5473-svn-backport-Fix-pending-query.patch The patch below removes a cached DNS response from the hash table when another thread is referencing the old entry. The table still contained the entry when it was destroyed which can result in inexplicable crashes. 0006-r5475-svn-backport-Remove-DNS-cache-entry.patch ASTERISK-26344 #close Reported by: Ian Gilmour ASTERISK-26387 #close Reported by: Harley Peters Change-Id: I17fde80359e66f65a91341ceca58d914d0f61cc4 2016-10-28 16:59 +0000 [12bdde6a6c] George Joseph * pjproject_bundled: Fix issue where "/version.mak" wasn't found main/Makefile includes third-party/pjproject/build.mak but doesn't set PJDIR beforehand so "include $(PJDIR)/version.mak" evaluates to "/version.mak". Fix is to set PJDIR in main/Makefile before the include. Change-Id: I0f7c67d60209049056fe9c4b041bf0463aa95604 2016-10-28 13:30 +0000 [9d8b9b6ca5] Matt Krokosz * res_pjsip_outbound_publish: Fix crash when publishing device state. While publishing device state between multiple instances of Asterisk, a crash will sporadically occur under high CPS which looks to be a race condition operating on the publisher queue. ASTERISK-26506 Change-Id: I28da25d346deb358eff1d563485cabc433ce1ed6 2016-10-27 21:49 +0000 [d6ad867897] Corey Farrell * Fix shutdown crash caused by modules being left open. It is only safe to run ast_register_cleanup callbacks when all modules have been unloaded. Previously these callbacks were run during graceful shutdown, making it possible to crash during shutdown. ASTERISK-26513 #close Change-Id: Ibfa635bb688d1227ec54aa211d90d6bd45052e21 2016-10-28 09:50 +0000 [badd38f031] Rusty Newton * SAC documentation: don't specify transports for endpoints and registrations Removing explicit transport definition for endpoints and registrations. It isn't necessary and isn't generally advised. ASTERISK-26514 #close Change-Id: Ifdec5e631962438a4683600968dfa4bfd15909fb 2016-10-18 09:06 +0000 [0646b48ece] Tzafrir Cohen * chan_dahdi: remove by_name support Support for referring to DAHDI channels by logical names was added in (FIXME: when? Asterisk 11? 1.8?) and was intended to be part of support of refering to channels by name. While technically usable, it has never been properly supported in dahdi-tools, as using it would require many changes at the Asterisk level. Instead logical mapping was added at the kernel level. Thus it seems that refering to DAHDI channels by name is not really used by anyone, and therefore should probably be removed. Change-Id: I7d50bbfd9d957586f5cd06570244ef87bd54b485 2016-10-26 18:48 +0000 [4f45d62653] George Joseph * pjproject_bundled: Remove usage of tar's --strip-components option Older versions of tar don't support the --strip-components option so instead of doing 'tar --strip-components=1 -C source', we now just untar to the tarball's root directory (pjproject-) and rename that directory to 'source'. Also fixed an issue where the pjproject source directory is a hard coded absolute pathname. ASTERISK-26510 #close ASTERISK-22480 #close Change-Id: I9ec92952507a91ff4e4d01e0149e09fd8e8f32b0 2016-10-26 21:40 +0000 [a6e5bae3ef] Corey Farrell * Remove ASTERISK_REGISTER_FILE. ASTERISK_REGISTER_FILE no longer has any purpose so this commit removes all traces of it. Previously exported symbols removed: * __ast_register_file * __ast_unregister_file * ast_complete_source_filename This also removes the mtx_prof static variable that was declared when MTX_PROFILE was enabled. This variable was only used in lock.c so it is now initialized in that file only. ASTERISK-26480 #close Change-Id: I1074af07d71f9e159c48ef36631aa432c86f9966 2016-10-27 08:07 +0000 [6993f3c9c3] Joshua Colp * res_pjsip_caller_id: Fix crash on session timers UPDATE on inbound calls. The res_pjsip_caller_id module wrongly assumed that a saved From header would always exist on sessions. This is true until an inbound call is received and a session timer causes an UPDATE to be sent. In this case there will be no saved From header and a crash will occur. This change makes it fall back to the From header of the outgoing request if no saved From header is present. ASTERISK-26307 #close Change-Id: Iccc3bc8d243b5ede9b81abf960292930c908d4fa 2016-10-26 07:51 +0000 [95062fe220] Joshua Colp * app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS. When executing the MailboxExists dialplan application and MAILBOX_EXISTS dialplan function the passed in temporary voice mailbox was not cleared, causing it to try to free garbage. ASTERISK-26503 #close Change-Id: Ie21ccfa1b80b9c59318e596f6b8e17da2b5a7cb3 2016-10-23 07:38 +0000 [aed6c219a3] Joshua Colp * pjsip: Fix a few media bugs with reinvites and asymmetric payloads. When channel format changes occurred as a result of an RTP re-negotiation the bridge was not informed this had happened. As a result the bridge technology was not re-evaluated and the channel may have been in a bridge technology that was incompatible with its formats. The bridge is now unbridged and the technology re-evaluated when this occurs. The chan_pjsip module also allowed asymmetric codecs for sending and receiving. This did not work with all devices and caused one way audio problems. The default has been changed to NOT do this but to match the sending codec to the receiving codec. For users who want asymmetric codecs an option has been added, asymmetric_rtp_codec, which will return chan_pjsip to the previous behavior. The codecs returned by the chan_pjsip module when queried by the bridge_native_rtp module were also not reflective of the actual negotiated codecs. The nativeformats are now returned as they reflect the actual negotiated codecs. ASTERISK-26423 #close Change-Id: I6ec88c6e3912f52c334f1a26983ccb8f267020dc 2016-10-26 06:32 +0000 [7925f60cd9] Joshua Colp * res_pjsip_sdp_rtp: Fix address family of explicit media_address. When an explicit media_address is provided the address family in the SDP needs to be set to reflect it. ASTERISK-26309 Change-Id: Ib9350cc91c120eb2f96f0623d3907d12af67eb79 2016-10-25 11:20 +0000 [802bbf8752] George Joseph * test_astobj2_thrash: Fix multithreaded issues The test uses 4 threads to grow, count, lookup and shrink 15K objects in a container. If there's only 1 execution engine available, the test will complete in <50ms. If each threads gets its own execution engine, the test may timeout after 60 seconds because the count thread does a locked ao2_callback on the whole container in a tight loop with only a sched_yield to give up time. The lock contention makes the test execution times wildly variable and mostly timeout. 2 execution engines are OK, 3 results in about 33% failure rate and >=4 causes a 80% failure rate. To fix, the sched_yield was changed to a usleep(500). Also, the number of buckets specified for the container was an even number so that was changed to the next prime number greater than (MAX_HASH_ENTRIES / 100). That's 151 currently. Change-Id: I50cd2344161ea61bfe4b96d2a29a6ccf88385c77 2016-10-18 09:04 +0000 [2b9ad3a5f7] Alexei Gradinari * chan_pjsip: segfault on already disconnected session On heavy loaded system the TCP/TLS incoming calls could be disconnected by pjproject while these calls are being processed by asterisk. This patch uses functions pjsip_inv_add_ref/pjsip_inv_dec_ref to inform pjproject that an INVITE session is in use. ASTERISK-26482 #close Change-Id: Ia2e3e2f75358cdb530252a9ce158af3d5d9fdf33 2016-10-10 11:49 +0000 [01d1d3763f] Badalyan Vyacheslav * cdr_radius,cel_radius: Fix old memleak in unload - Call "rc_openlog" optional. If you do not call, you will simply NULL instead of a name. - On the one PID can be only one syslog channel. And it can already be run in logger.c - Calling rc_openlog we assigns a new name for the channel syslog. This unexpected behavior for logger.c. Most lesser evil, is to agree on a NULL name syslog if the channel was not launched in logger.c. It also solves the problem of memory leaks. ASTERISK-26455 #close Change-Id: Ic17c38de67583e971d78fe18807d1a9faf8f0afd 2016-10-24 10:55 +0000 [16c23b57c7] George Joseph * pjproject_bundled: Fixed various build issues * CFLAGS is now properly set when using older gcc. * All third-party pjproject targets have been removed. This fixes an issue with older libsrtp in some distros. * Manually removing the source directory now causes a rebuild. * EXTERNALS_CACHE_DIR is now properly checked. * Whitespace fixes. Change-Id: I98fec6847efc5602a9f41cb95096fd660a49fa60 2016-10-24 14:13 +0000 [1d277e7cb6] Pascal Cadotte Michaud * typo: s/paranthesis/parenthesis/ in a comment Change-Id: I7c1f4eb051177ee22cbe97e063d4a3effe29be30 2016-09-19 06:13 +0000 [403c4f5833] Joshua Colp * pjsip: Support dual stack automatically. This change adds support for dual stack automatically. No configuration is required and the IP address and version in the SIP messages and SDP will be automatically changed based on the transport over which the message is being sent. RTP usage has also been changed to listen on both IPv4 and IPv6 simultaneously to allow media to flow, and to allow ICE support on both simultaneously. This also allows failover between IPv6 and IPv4 to work as expected. ASTERISK-26309 #close Change-Id: I235a421d8f9a326606d861b449fa6fe3a030572d 2016-10-19 12:05 +0000 [3bd76dd679] Mark Michelson * ARI: Add duplicate channel ID checking for channel creation. This is similar to what is done for origination, but for the 14 and up channel creation method. When attempting to create a channel, if a channel ID is specified and a channel already exists with that ID, then a 409 is returned. Change-Id: I77f9253278c6947939c418073b6b31065489187c 2016-10-17 14:18 +0000 [e459b8dadf] Mark Michelson * ARI: Detect duplicate channel IDs ARI and AMI allow for an explicit channel ID to be specified when originating channels. Unfortunately, there is nothing in place to prevent someone from using the same ID for multiple channels. Further complicating things, adding ID validation to channel allocation makes it impossible for ARI to discern why channel allocation failed, resulting in a vague error code being returned. The fix for this is to institute a new method for channel errors to be discerned. The method mirrors errno, in that when an error occurs, the caller can consult the channel errno value to determine what the error was. This initial iteration of the feature only introduces "unknown" and "channel ID exists" errors. However, it's possible to add more errors as needed. ARI uses this feature to determine why channel allocation failed and can return a 409 error during origination to show that a channel with the given ID already exists. ASTERISK-26421 Change-Id: Ibba7ae68842dab6df0c2e9c45559208bc89d3d06 2016-10-19 17:53 +0000 [e03364c40a] snuffy * Fix issue with CLI not returning to prompt after running "features show" ASTERISK-26444 #close Change-Id: I91d645b7e6e5dba35f8c410df2be77a8c0e3acb8 2016-10-04 18:24 +0000 [3e96d491d0] Michael Walton * res_rtp_asterisk: Add ice_blacklist option Introduces ice_blacklist configuration in rtp.conf. Subnets listed in the form ice_blacklist = , e.g. ice_blacklist = 192.168.1.0/255.255.255.0, are excluded from ICE host, srflx and relay discovery. This is useful for optimizing the ICE process where a system has multiple host address ranges and/or physical interfaces and certain of them are not expected to be used for RTP. Multiple ice_blacklist configuration lines may be used. If left unconfigured, all discovered host addresses are used, as per previous behavior. Documention in rtp.conf.sample. ASTERISK-26418 #close Change-Id: Ibee88f80d7693874fda1cceaef94a03bd86012c9 2016-10-18 16:30 +0000 [f14ef51ead] Mark Michelson * CDR: Alter destruction pattern for CDR chains. CDRs form chains. When the root of the chain is destroyed, it then unreferences the next CDR in the chain. That CDR is destroyed, and it then unreferences the next CDR in the chain. This repeats until the end of the chain is reached. While this typically does not cause any sort of problems, it is possible in strange scenarios for the CDR chain to grow way longer than expected. In such a scenario, the destruction pattern can result in a stack overflow. This patch fixes the problem by switching from a recursive pattern to an iterative pattern for destruction. When the root CDR is destroyed, it is responsible for iterating over the rest of the CDRs and unreferencing each one. Other CDRs in the chain, since they are not the root, will simply destroy themselves and be done. This causes the stack depth not to increase. ASTERISK-26421 #close Reported by Andrew Nagy Change-Id: I3ca90c2b8051f3b7ead2e0e43f60d2c18fb204b8 2016-10-18 11:51 +0000 [f31772ec20] Joshua Colp * ari: Update model validator based on addition of asterisk_id. ASTERISK-26470 Change-Id: I9c386f7a1c7d969161b28f189eb6298bbc5b7541 2016-09-11 10:13 +0000 [18a6f250e2] Tzafrir Cohen * menuselect: invalid test for GTK2 configuire.ac was only checking for the existence of pkg-config and not the gtk2 package itself. Now it calls AST_PKG_CONFIG_CHECK for gtk+-2.0. ASTERISK-26356 #close Change-Id: I93e9d0166341f0e7f84b52955bb6f81da42f2ef6 2016-10-18 03:01 +0000 [a43ee21211] Alexander Traud * cli: Auto-complete File not Module for core set debug. Since Asterisk 1.8, the command "core set debug" on the command-line interface asks not for a file (.c) but a module name. This change shows modules (.so) on the auto-completion via a tabulator or the question mark. Now, when you partially type a module name, TAB or ?, you get the correct candidiates. ASTERISK-26480 Change-Id: I1213f1dd409bd4ff8de08ad80cb0c73cafb1bae0 2016-08-12 11:22 +0000 [dce31f90ba] frahaase * Binaural synthesis (confbridge): On/off setting for binaural synthesis. Adds setting to confbridge.conf (binaural_active) that determines if binaural synthesis can be available in bridge_softmix. ASTERISK-26292 Change-Id: I59dfcb8e55fe1df4ef32045882fea5bb58fc71db 2016-10-17 11:39 +0000 [2a808b2fa6] George Joseph * pjproject_bundled: Add patch to address SSL crash Addresses crashes when an attempt is made to operate on an SSL socket after the socket has been closed. ASTERISK-26477 #close Change-Id: I421305b357558b4f9e690210dc0f4831ef4b3002 2016-10-13 14:09 +0000 [973e57d5ce] Leandro Dardini * app_queue: Added initialization for "context" parameter When using Asterisk Realtime Architecture, empty fields are skipped and the default values are used. If the "context" parameter in queue was set and then cleared from the database, the old value remains in memory and it continues to be used. This change initialize the "context" parameter with an empty value, allowing clearing the parameter. ASTERISK-26462 #close Change-Id: I64be73d5044ce38dd02408bd0e53de965ef65905 2016-10-15 20:05 +0000 [dd5129d84a] Matt Jordan * res/ari: Add the Asterisk EID field to outgoing events This patch adds the Asterisk EID field to all outgoing ARI events. Because this field should be added to all events as they are transmitted, it is appended to the JSON message just prior to it being handed off to the application message handler. This makes it somewhat resilient to both new events being added to ARI, as well as other potential event transport mechanisms. ASTERISK-26470 #close Change-Id: Ieff0ecc24464e83f3f44e9c3e7bd9a5d70b87a1d 2016-10-13 02:06 +0000 [2b03017022] Moises Silva * chan_rtp: Set a sane default rtp engine for unicast. ASTERISK-26439 Change-Id: I7f5ee2eeba8906e9ecb3293dbe3a747770bb5011 2016-10-16 17:25 +0000 [6651c66e68] George Joseph * utils.c: Fix ast_set_default_eid for multiple platforms ast_set_default_eid was searching for ethX, emX, enoX, ensX and even pciD#U interface names. While this was a good attempt, it wasn't inclusive enough to capture interfaces like enp6s0 or ens6d1, etc. Rather than relying on interface names, we now simply find the first interface returned by the OS that has a hardware address and that address isn't all 0x00 or all 0xff. The code IS different for BSD, Solaris and Linux based on what method is available for enumerating interfaces. Tested on: FreeBSD9 CentOS6 Ubuntu14 Fedora24 I was unable to test on Solaris at this time but the code for Solaris is used elsewhere at Digium. Change-Id: Iaa6db87ca78a9a375e47d70e043ae08c1448cb72 2016-10-15 04:58 +0000 [e9315791b3] Michael Kuron * chan_sip: Only send video on outgoing channel if incoming channel supports it Previously, the settings videosupport=always and videosupport=yes behaved identically and unconditionally caused a video offer to be sent in the SDP on an outgoing call. This was a regression introduced with commit 5a1d90e1fbfc4b48927aad55311f3b38efbf1f54 in Asterisk 1.6.1. This commit restores correct behavior: videosupport=always causes a video offer to be sent unconditionally, while videosupport=yes will only offer video on an outbound channel if the incoming channel it is bridged to also supports video. That way, the device receiving the outgoing call can display the correct user interface elements for audio or video and will not unnecessarily show a blank video window on an audio-only call. ASTERISK-17470 #close Change-Id: I782f4409d436114dbc97061c3570c0cd24f7c3ae 2016-10-14 00:18 +0000 [aa39a87697] Corey Farrell * Fix issues with bundled pjproject cached download. Previously when testing I had a preexisting makeopts in ASTTOPDIR. The ordering of configure.ac causes --with-externals-cache to be processed after third-party configure. In cases where the Asterisk clone is cleaned it would cause pjproject to be downloaded to /tmp. This moves processing of the externals cache and sounds cache to happen before third-party configure. This also addresses a possible issue with the third-party Makefile. If TMPDIR is set by the environment it would override the path given to --with-externals-cache. ASTERISK-26416 Change-Id: Ifab7f35bfcd5a31a31a3a4353cc26a68c8c6592d 2016-10-12 16:24 +0000 [9c49b96374] Richard Mudgett * Audit ast_json_pack() calls for needed UTF-8 checks. Added needed UTF-8 checks before constructing json objects in various files for strings obtained outside the system. In this case string values from a channel driver's peer and not from the user setting channel variables. * aoc.c: Fixed type mismatch in s_to_json() for time and granularity json object construction. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: Iac2d867fa598daba5c5dbc619b5464625a7f2096 2016-10-12 16:20 +0000 [774d5f7ef7] Richard Mudgett * json: Check party id name, number, subaddresses for UTF-8. * Updated unit test as ast_json_name_number() is now NULL tolerant. ASTERISK-26466 #close Reported by: Richard Mudgett Change-Id: I7d4e14194f8f81f24a1dc34d1b8602c0950265a6 2016-10-11 18:14 +0000 [1c4c6c082d] Richard Mudgett * json: Add UTF-8 check call. Since the json library does not make the check function public we recreate/copy the function in our interface module. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: I36d3d750b6f5f1a110bc69ea92b435ecdeeb2a99 2016-10-12 17:42 +0000 [6fe5202c2c] Richard Mudgett * aoc.c: Whitespace cleanup * In s_to_json() removed unnecessary ast_json_ref() to ast_json_null() when creating the type json object. The ref is a noop. Change-Id: I2be8b836876fc2e34a27c161f8b1c53b58a3889a 2016-10-12 16:22 +0000 [c3bf1632cd] Richard Mudgett * app_minivm.c: Fix malformed ast_json_pack() call. Change-Id: I082b239022fac462666e52a14a44304748908dc0 2016-10-12 17:27 +0000 [9c54964dc5] Richard Mudgett * app_queue.c: Fix clearing of pause reason string. The pause reason is not always cleared when it should be cleared. * Made set_queue_member_pause() always clear pause reason if not pausing with a reason string. Change-Id: I993dad19626ec017478a230e980989438b778c53 2016-10-12 16:30 +0000 [3b3d06884c] George Joseph * res_config_mysql: Fix several issues related to recent table changes Unlike any of the other database drivers, res_config_mysql checks that the table definition matches the requirements for every insert and update statement. Since all requirements are forced to 'char', any column that isn't a char, like ps_contacts' expiration_time, qualify_timeout, etc., will throw a warning. It's kinda harmless but very misleading. Since no other driver does those checks on insert or update, they've been removed from res_config_mysql. Also, all the logic that actually attempted to ALTER the table to fix the issue has been removed. With the move to alembic, the auto-alter functionality is not only unnecessary, it's also dangerous. The other issue is that res_config_mysql calls the mysql_insert_id function inside store_mysql. Presumably the intention was to return the number of rows inserted DESPITE A NOTE IN THE CODE THAT THE VALUE IS NON_PORTABLE AND MAY CHANGE. That value is then returned to config realtime as the number of rows inserted. Guess what? The value changed. It now only returns the number of rows inserted if there's an auto increment column on the table, which ps_contacts doesn't have. Otherwise it returns 0. So now, the insert worked but we tell config realtime and sorcery that no rows were inserted. That call to mysql_insert_id was removed and we now always return 1 if the insert succeeded. We're only inserting 1 row at a time anyway. If the insert fails, we still return -1. ASTERISK-26362 #close Reported-by: Carlos Chavez Change-Id: I83ce633efdb477b03c8399946994ee16fefceaf4 2016-08-12 11:22 +0000 [dd6fc1bb7d] frahaase * Binaural synthesis (confbridge): Adds libfftw3 as dependency. Adds libfftw3 to the build chain that is is going to be used for binaural synthesis by bridge_softmix. ASTERISK-26292 Change-Id: Iedc2f174e4ccb39ae5d9e698e339c6a17155867b 2016-09-29 13:08 +0000 [20c3dba39e] Torrey Searle * res_fax: Fix a tight race condition causing fax to crash in audio fallback When T.38 gets rejected and G711 failback occurs there is a period of time where neither AST_FAX_TECH_T38 nor AST_FAX_TECH_AUDIO is set, leading to a crash. Change-Id: Icc3f457b2292d48a9d7843dac0028347420cc982 2016-10-06 09:58 +0000 [86e8716952] George Joseph * app_dial: Add the "Q" option to set the cause on unanswered channels The "Q" option will set the cause on the unanswered channels when another channel answers. It overrides the default of ANSWERED_ELSEWHERE. NOTE: chan_sip does not support setting the cause on a CANCEL to anything other than ANSWERED_ELSEWHERE. ASTERISK-26446 #close Change-Id: I71742e0919aaa16784c30a2b2e73fbeed7672e47 2016-10-11 06:55 +0000 [4f7f8a7e95] Alexander Traud * chan_sip: Support nat=auto_comedia or nat=force_rport,auto_comedia. In the SIP channel driver chan_sip, auto_comedia was expected to be used in tandem with auto_force_rport. Or stated differently: Only when auto_force_rport was chosen (the default), auto_comedia worked. This change allows auto_comedia to be set independently of the state of (auto_)force_rport. For example, nat=force_rport,auto_comedia is useful for IPv4/IPv6 Dual Stack deployments when IPv6 clients are behind a Firewall. ASTERISK-26457 #close Change-Id: Ib29d66c6dbb61648e371e01fc36c6978ddae5bc2 2016-10-10 16:59 +0000 [17031f12fe] Badalyan Vyacheslav * vector: After remove element recheck index Small fix. It is necessary to double-check the index that we just removed because there is a new element. ASTERISK-26453 #close Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7 2016-09-29 12:52 +0000 [cc269766b8] Torrey Searle * res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge If a bridge switched to P2P when a DTMF was in progress it was possible for the DTMF to continue being sent indefinitely. Change-Id: I7e2a3efe0d59d4b214ed50cd0b5d0317e2d92e29 2016-10-09 21:28 +0000 [fafdde322c] Corey Farrell * logger: Prevent output of verbose messages initiated from rasterisk. Remote asterisk consoles should only display verbose log messages created by the daemon. The first patch for ASTERISK-26410 caused a couple verbose messages to be printed when the rasterisk process ended. ASTERISK-26410 Change-Id: Ie2a1bb3753ad2724c0349ec1a336f52f7117b52a 2016-10-04 20:46 +0000 [7af7490e42] Michael Walton * audiohooks: Remove redundant codec translations when using audiohooks The main frame read and write handlers in main/channel.c don't use the optimum placement in the processing flow for calling audiohooks callbacks, as far as codec translation is concerned. This change places the audiohooks callback code: * After the channel read translation if the frame is not linear before the translation, thereby increasing the chance that the frame is linear as required by audiohooks * Before the channel write translation if the frame is linear at this point This prevents the audiohooks code from instantiating additional translation paths to/from linear where a linear frame format is already available, saving valuable CPU cycles ASTERISK-26419 Change-Id: I6edd5771f0740e758e7eb42558b953f046c01f8f 2016-10-10 10:59 +0000 [3ab7fae96b] Badalyan Vyacheslav * res_pjsip_config_wizard: Memory leak in module_unload Fixed a memory leak. It removes only the first element. Added a useful feature in vector.h to remove all items under the CMP through a callback function / macro. ASTERISK-26453 #close Change-Id: I84508353463456d2495678f125738e20052da950 2016-09-29 12:45 +0000 [9f62feca60] Ludovic Gasc (GMLudo) * res_calendar: Add support for fetching calendars when reloading We use a lot res_calendar, we are very happy with that, especially because you use libical, the almost alone opensource library that supports really ical format with all types of recurrency. Nevertheless, some features are missed for our business use cases. This first patch adds a new option in calendar.conf: fetch_again_at_reload. Be my guest for a better name. If it's true, when you'll launch "module reload res_calendar.so", Asterisk will download again the calendar. The business use case is that we have a WebUI with a scheduler planner, we know when the calendars are modified. For now, we need to define 1 minute of timeout to have a chance that our user doesn't wait too long between the modification and the real test. But it generates a lot of useless HTTP traffic. ASTERISK-26422 #close Change-Id: I384b02ebfa42b142bbbd5b7221458c7f4dee7077 2016-10-09 21:53 +0000 [ca2f3e5b99] Badalyan Vyacheslav * cel_odbc: Fix memory leak on module unload Change-Id: Ic7a1236eba2408090fdabb5f717b5fa455ead715 2016-10-03 11:30 +0000 [5fb848eebd] George Joseph * bundled_pjproject: Add tests for programs used by the Makefile, et al. Added tests for bzip2, tar, patch, sed and nm to configure.ac. Set DOWNLOAD_TO_STDOUT to a working command line regardless of whether the download program is wget, curl or fetch. Added a 'configure.m4' file to the third-party directory which takes care of calling any third-party project setup. Had to move some pjproject_bundled stuff up in configure.ac so it was called before the third-party configure macro. The pjproject tarball is now downloaded to the externals_cache_dir if it was specified on the ./configure command line Removed regeneration of the pjproject aconfigure file. It was only needed for an old patch that no longer applies. Converted the tests for symbols to explicit tests since we know that they're now available in the bundled version. Saves a little time during configure. ASTERISK-26416 #close Reported-by: Corey Farrell Change-Id: Id1d94251c0155f8dd41b7de7067f35cfbaafbb9b (cherry picked from commit e6b0053d7561032b7adbf6f3afaecf30f5046605) (cherry picked from commit a0d02f38322c2c4d7743504003fd376d32a133db) 2016-10-09 18:54 +0000 [73f75c246b] Joshua Colp * Revert "Packet-Loss Concealment (PLC) for supporting codecs." This change introduced some fax test failures that have not yet been addressed. So this is not forgotten I'm submitting a change which reverts it. This reverts: d56fc3b36b7bb59b5506129b9895b6c3341350c9. ASTERISK-25629 Change-Id: Ibc2f23c38643f5a2c89cf8915ae2d805b81bc3d5 2016-10-05 14:53 +0000 [c5e8f50169] George Joseph * pjproject_bundled: Add MALLOC_DEBUG capability pjproject_bundled will now use the asterisk memory debugging APIs if MALLOC_DEBUG is turned on in menuselect. Because this required stubs for the executable programs and the python bindings, some Makefile reorganization was needed to properly handle the dependencies. As a result, the makefile now individually makes each of the pjproject libraries separately instead of making them all in 1 shot. The only visible change is that there are separate status lines printed for each library instead oif 1 for all libs. Also, the making of the pjproject dependency files was eliminated. They're not needed for building unless you're actively modifying pjproject source files and it makes the build process faster. Finally, any issues with parallel builds should be resolved again making the build faster. Change-Id: Icc5e3d658fbfb00e0a46b44c66dcc2522d5171b0 2016-10-04 16:59 +0000 [442b597929] George Joseph * alembic: Allow cdr, config and voicemail to exist in the same schema cdr, config and voicemail are all separate alembic trees. Because alembic's default is to use a table named 'alembic_version' to store the current tree revision, the 3 trees can't exist in the same schema without stepping on each other. Now each tree uses 'alembic_version_' as the version table. Each tree's env.py script now first checks for 'alembic_version'. If it finds it AND its revision is in the tree's history, the script renames it to 'alembic_version_'. Regardless, the script then continues with the migration using 'alembic_version_' and creates that table if it's not found. The result is that if an existing 'alembic_version' table was found but it didn't belong to this tree, it's left alone and 'alembic_version_' is used or created. WARNING: If multiple trees are using the same schema, they MUST NOT CRU or D any objects with names that might exist in the other trees. An example would be 'yesno_values' type. If two trees perform operations on it, one tree could pull it out from under the other. Thankfully we currently don't share any names among cdr, config and voicemail. NOTE: Since the env.py scripts in each tree were identical, a common env.py has been placed in the ast-db-manage directory and a symlink to it has been placed in each tree directory. ASTERISK-24311 #close Reported-by: Dafi Ni Change-Id: I4d593f000350deb5d21a14fa1e9bc3896844d898 2016-10-05 04:25 +0000 [c4268ec734] Alexander Traud * chan_sip: Honor support of Symmetric Response (rport) for SIP requests. In the SIP channel driver chan_sip, the default is "auto_force_rport". When no NAT was detected, for example in case of IPv6, Asterisk uses the IP address from the headers within the SIP-REGISTER for subsequent SIP signaling. When the remote party specifies support for Symmetric Response (RFC 3581) via the parameter "rport", Asterisk should not extract the port from the SIP headers but reuse the port of the transport. This did not happen because of a typo. ASTERISK-26438 #close Change-Id: If6e7891848aaf96666dee5305695f7c6667cd5a6 2016-08-12 11:22 +0000 [c455823657] frahaase * Binaural synthesis (confbridge): interleaved two-channel audio. Asterisk only supports mono audio at the moment. This patch adds interleaved two-channel audio to Asterisk's channels. ASTERISK-26292 Change-Id: I7a547cea0fd3c6d1e502709d9e7e39605035757a 2016-09-16 18:54 +0000 [2a03575c30] Corey Farrell * astobj2: Add backtrace to log_bad_ao2. * Compile __ast_assert_failed unconditionally. * Use __ast_assert_failed to log messages from log_bad_ao2 * Remove calls to ast_assert(0) that happen after log_bad_ao2 was run. Change-Id: I48f1af44b2718ad74a421ff75cb6397b924a9751 2016-09-30 16:29 +0000 [79532bca75] Rodrigo Ramírez Norambuena * Add text of cdr directory into README.md for ast-db-manage Change-Id: I68321c4bea50730c39fdb486e5f23aeadd1ad636 2016-09-09 12:38 +0000 [806d08b675] Etienne Lessard * app_queue: Update dynamic members ringinuse on reload. Previously, when reloading the members of a queue, the members added statically (i.e. defined in queues.conf) would see their "ringinuse" value updated but not the members added dynamically. This change makes dynamic members ringuse value to be updated on reload. Note that it's impossible to add a dynamic member with a specific ringinuse value. For both static and dynamic members, the ringinuse value can always be changed later on with command like "queue set ringinuse" or with the AMI action "QueueMemberRingInUse". So it's possible this commit could break a user workflow if he was changing the ringinuse value of dynamic members via such commands and was also relying on the fact that a queue reload would not update the dynamic members ringinuse value. ASTERISK-26330 Change-Id: I3745cc9a06ba7e02c399636f1ee9e58c04081f3f 2016-09-29 14:02 +0000 [d31ffb421c] Kevin Harwell * Remove "format_ogg_opus: New format" This reverts commit 40aa28131bc30b4516da2b20eb1a1e043920169c. ASTERISK-26426 #close Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5 2016-09-19 04:46 +0000 [8c5c95ad89] Corey Farrell * core: Remove ABI effects of LOW_MEMORY. This allows asterisk to compiled with LOW_MEMORY to load modules built without LOW_MEMORY. ASTERISK-26398 #close Change-Id: I24b78ac9493ab933b11087a8b6794f3c96d4872d 2016-09-27 16:10 +0000 [a77ebb2017] George Joseph * download_externals: Fix issue with re-install Needed to ignore an xmlstarlet return code for optional element. Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873 Reported-by: Dan Jenkins 2016-09-27 15:35 +0000 [2d2a8944be] Corey Farrell * logger: Output early verbose messages to console. Verbose messages should be printed to the console if the sublevel is less than option_verbose. This fix ensures the welcome message with copyright and license are printed at daemon and interactive rasterisk startup. ASTERISK-26410 #close Change-Id: Ia44235e30ec328aba92ea2c8a837b094e65c9a03 2016-09-22 09:49 +0000 [c7ef1e0af3] George Joseph * codec_opus: Add download ability to menuselect Updated codecs/codecs.xml to add codec_opus to the external download list. ASTERISK-26409 Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4 (cherry picked from commit 2cdab0e36eec4997ca3bd85aa09efc477038e31c) (cherry picked from commit e9684f3acd0e8def0df582c1505dd39dd3fd1610) 2016-07-23 14:50 +0000 [5cc3c6679f] George Joseph * codec_opus: Replace res_format_attr_opus with the one from codec_opus Preparation ASTERISK-26409 Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3 (cherry picked from commit 59f7662a93bf9c07204fb50e1020a0f5bfbbd5c9) 2016-07-23 15:56 +0000 [40aa28131b] George Joseph * format_ogg_opus: New format Add Ogg/Opus playback support. This uses libopusfile in order to be able to read .opus files and play them back. Writing/recording support is not present at this time. ASTERISK-26409 Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955 (cherry picked from commit daee8bbd5209b4158bc1785eede845a26e6cbeaa) 2016-09-24 19:05 +0000 [43901e9418] George Joseph * build_tools: Add ability to download variants to download_externals Some external packages have multiple variants that apply to different builds of asterisk. The DPMA for instance has a "bundled" variant that needs to be downloaded if asterisk was configured with --with-pjproject-bundled. There are 2 ways to specify variants: If you need the user to make the decision about which variant to download, simply create multiple menuselect "member" entries like so... external xmlstarlet bash no external xmlstarlet bash no Note that the second entry has "-" appended to the name. You can then use the existing menuselect facilities to restrict which members to enable or disable. Youy probably don't want the user to enable multiple at the same time. If you want to hide the details of the variants, the better way to do it is to create 1 member with "variant" elements. external xmlstarlet bash no The condition must be a bash expression suitable for use with an "if" statement. Any environment variable can be used plus those available in makeopts. In this case, if asterisk was configured with --with-pjproject-bundled the bundled variant will be automatically downloaded. Otherwise the normal version will be downloaded. Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e 2016-09-23 09:54 +0000 [5dd99465d3] Alessandro Crespi * chan_sip: Resolve externhost not to IPv6; instead go for IPv4. For the channel driver chan_sip, you specify externhost=example.com in sip.conf when your Asterisk is behind a NAT and your IP address is assigned dynamically. Or stated differently: You do not have a static IP address to use "externaddr" directly. This NAT support is quite handy but just about IPv4. Previously, Asterisk resolved "externhost" to any IP version. When the first DNS answer resolved to an IPv6, Asterisk sent an IPv6 in SIP/SDP for origin (o=) and connection (c=). This happened in outgoing SIP-REGISTER and while answering SIP-INVITE. If the remote peer is IPv4-only, it might not handle o=/c= with an IPv6. This change makes sure, no IPv6 is resolved anymore for "externhost". ASTERISK-18232 #close Reported by: Jacek Kowalski Tested by: Alexander Traud patches: changes.patch submitted by Alessandro Crespi Change-Id: If68eedbeff65bd1c1d8a9ed921c02ba464b32dac 2016-09-20 09:42 +0000 [d425971009] George Joseph * chan_sip: Address runaway when realtime peers subscribe to mailboxes Users upgrading from asterisk 13.5 to a later version and who use realtime with peers that have mailboxes were experiencing runaway situations that manifested as a continuous stream of taskprocessor congestion errors, memory leaks and an unresponsive chan_sip. A related issue was that setting rtcachefriends=no NEVER worked in asterisk 13 (since the move to stasis). In 13.5 and earlier, when a peer tried to register, all of the stasis threads would block and chan_sip would again become unresponsive. After 13.5, the runaway would happen. There were a number of causes... * mwi_event_cb was (indirectly) calling build_peer even though calls to mwi_event_cb are often caused by build_peer. * In an effort to prevent chan_sip from being unloaded while messages were still in flight, destroy_mailboxes was calling stasis_unsubscribe_and_join but in some cases waited forever for the final message. * add_peer_mailboxes wasn't properly marking the existing mailboxes on a peer as "keep" so build_peer would always delete them all. * add_peer_mwi_subs was unsubscribing existing mailbox subscriptions then just creating them again. All of this was causing a flood of subscribes and unsubscribes on multiple threads all for the same peer and mailbox. Fixes... * add_peer_mailboxes now marks mailboxes correctly and build_peer only deletes the ones that really are no longer needed by the peer. * add_peer_mwi_subs now only adds subscriptions marked as "new" instead of unsubscribing and resubscribing everything. It also adds the peer object's address to the mailbox instead of its name to the subscription userdata so mwi_event_cb doesn't have to call build_peer. With these changes, with rtcachefriends=yes (the most common setting), there are no leaks, locks, loops or crashes at shutdown. rtcachefriends=no still causes leaks but at least it doesn't lock, loop or crash. Since making rtcachefriends=no work wasnt in scope for this issue, further work will have to be deferred to a separate patch. Side fixes... * The ast_lock_track structure had a member named "thread" which gdb doesn't like since it conflicts with it's "thread" command. That member was renamed to "thread_id". ASTERISK-25468 #close Change-Id: I07519ef7f092629e1e844f855abd279d6475cdd0 2016-09-22 01:40 +0000 [18a8ca06eb] Aaron An * channels/chan_pjsip: fix HANGUPCAUSE function bug. HANGUPCAUSE not return 'SIP 200 Ok' when dialed channel answered. This patch change the call order of ast_queue_control_data and ast_queue_control in chan_pjsip_incoming_response. ASTERISK-26396 #close Reported by: AaronAn Tested by: AaronAn Change-Id: Ide2d31723d8d425961e985de7de625694580be61 2016-09-21 14:24 +0000 [a805d779e8] Joshua Colp * core: Ensure presencestate subtype and message are NULL. When retrieving presence state information there is no guarantee that the subtype and message passed in are set to NULL. This change ensures they are. ASTERISK-26397 #close Change-Id: If38cd730e409e9a9b6eb9adef6591d15a9e61f86 2016-09-21 10:48 +0000 [077caf566e] Joshua Colp * res_odbc: Make pooling option deprecation notice more useful. This changes the notice for the deprecation of the old pooling options to point to the new option for doing pooling. This gives a clearer direction as to what to look into. ASTERISK-26389 #close Change-Id: I2ca9cdfdcd75aec170a7db9d5ff69a4cd25b7c10 2016-09-21 08:46 +0000 [78b6190a11] Joshua Colp * odbc: Remove options that are no longer applicable. The pooling, shared_connection, limit, and idlecheck options are no longer used in res_odbc. ASTERISK-26389 Change-Id: I2fde7b467d01f9d1c82cc0a339bb4f7e1dd6bbe6 2016-08-16 15:21 +0000 [923edf2596] Corey Farrell * logger: Simplify ast_callid handling code. Routines responsible for managing ast_callid's are overly complicated. This is left-over code from when ast_callid was an AO2 object. Now that it is an integer the code can be reduced. ast_callid handler code no longer prints it's own error message upon failure to allocate threadstorage as ast_calloc would have already printed a message. Debug messages that were printed when TEST_FRAMEWORK was enabled have been also been removed. Change-Id: I65a768a78dc6cf3cfa071e97f33ce3dce280258e 2016-09-20 15:17 +0000 [5cb905a227] Corey Farrell * core: Fix LOW_MEMORY missing symbol ast_pbx_uuid_get. Move the function outside the conditional block that excludes LOW_MEMORY. ASTERISK-26273 #close Change-Id: Ic290fa128222c410c3531107e30efacabc8493b4 2016-09-20 09:22 +0000 [00f1d05d34] Corey Farrell * logger: Always enable verbose for console channel. Previous versions of Asterisk did not require verbose to be specified in logger.conf for the console channel, if it was requested by command line or asterisk.conf it just worked. This change causes Asterisk to always enable verbose in the console channel level mask. Verbose is displayed on consoles if requested by command line, option_verbose or 'core set verbose'. This also delays initialization of the logger until after threadstorage is initialized. Initializing too early can cause messages to be printed multiple times to the console (stdout). ASTERISK-26391 #close Change-Id: I52187d67c2fcb3efd5561bf04b3e5e23e5ee8a04 2016-09-20 10:16 +0000 [74f562a8e2] Corey Farrell * logger: Fix default console settings. When logger.conf is missing or invalid we should be printing notices, warnings and errors to the console. The logmask was incorrectly calculated. Change-Id: Ibaa9465a8682854bc1a5e9ba07079bea1bfb6bb3 2016-09-19 14:21 +0000 [0bc9912739] Walter Doekes * asterisk.c: Non-root users also get the astcanary after core restart. Without this change, a 'core restart' would kill the astcanary forever if you're not running as root. Both with and without this patch, the scheduling priority was still SCHED_RR after restart. Additionally, the astcanary is now spawned if you start with high priority and Asterisk doesn't get a chance to lower it. For example through: `chrt -r 10 sudo -u asterisk asterisk -c` Also reap killed astcanary processes on core restart. ASTERISK-26352 #close Change-Id: Iacb49f26491a0717084ad46ed96b0bea5f627a55 2016-09-19 09:40 +0000 [bffaf46690] Walter Doekes * asterisk.c: When astcanary dies on linux, reset priority on all threads. Previously only the canary checking thread itself had its priority set to SCHED_OTHER. Now all threads are traversed and adjusted. ASTERISK-19867 #close Reported by: Xavier Hienne Change-Id: Ie0dd02a3ec42f66a78303e9c1aac28f7ed9aae39 2016-09-12 18:00 +0000 [2820b13393] Richard Mudgett * res_config_odbc.c: Fix buffer size limitation creating invalid SQL. Creating ODBC SQL queries resulted in queries too large to fit into the supplied buffer. The resulting truncated buffer contained an invalid SQL query. * Made SQL query generation code use a thread storage buffer that can increase in size as needed. * Fixed bad multi-line warning messages. ASTERISK-26263 #close Reported by: Jeppe Ryskov Larsen Change-Id: I23f3cdd43c2dac80bed3ded4dd77d18cb17f21ae 2016-09-14 06:53 +0000 [0376af9519] Joshua Colp * rtp: Only accept the first payload for a format in SDP. When receiving an SDP offer with multiple payloads for the same format we would generate an answer with the first payload, but during the payload crossover operation (to set the payloads for receiving) we would remove all payloads but the last. This would result in incoming traffic being matched against the wrong format and outgoing traffic being sent using the wrong payload. This change makes it so that once a format has a payload number put into the mapping all subsequent ones are ignored. This ensures there is only ever one payload in the mapping and that it is the payload placed into the answer SDP. ASTERISK-26365 #close Change-Id: I1e8150860a3518cab36d00b1fab50f9352b64e60 2016-09-14 08:42 +0000 [9d894ee0a1] Joshua Colp * res_pjsip_multihomed: Change Contact port to listening port. The res_pjsip_multihomed module determines what interface and transport a request is going out on and updates the SIP message accordingly with the address information. This currently incorrectly updates the Contact header for connectionful protocols to the ephemeral connection port, instead of the bound address for the listening socket which can actually accept the connection back. If the remote side attempts to connect back on the epehemeral port it will fail. This change makes it so the port is updated to the bound port on connectionful protocols and is maintained on UDP (as there can be multiple of those). ASTERISK-26374 #close Change-Id: I50f8dab65b9f75117d73ba5f6bbcf6c9871854ab 2016-09-07 14:48 +0000 [47c527df0a] George Joseph * pjproject_bundled: Prevent SERVFAIL from marking name server bad A name server that returns "Server Failure" is indicating only that the server couldn't process that particular request. We should NOT assume that the name server is incapable of serving other requests. Here's the scenario we've been encountering... * 2 local name servers configured in resolv.conf. * An OPTIONS request causes a request for A and AAAA records to go out to both nameservers. * The A responses both come back successfully resolved. * Because of an issue at some upstream nameserver, the AAAA responses for that particular query come back as "SERVFAIL" from both local name servers. * Both local servers are marked as bad and no further queries can be sent until the 60 second ttl expires. Only previously cached results can be used. * In this case, 60 seconds is just enough time for another OPTIONS request to go out to the same host so the cycle repeats. We could set the bad ttl really low but that also affects REFUSED and NOTAUTH which probably DO signal a real server issue. Besides, even a really low bad ttl would be an issue on a pbx. Although we use our own resolver in 14 and master and don't have this issue there, Teluu has merged this patch upstream so it's appropriate to cherry-pick to 14 and master to keep pjproject consistent. Change-Id: Ie03ba902288e274aff23f9b9bb2786e1e8be09e0 2016-09-12 07:37 +0000 [d3ddf4b0fd] Tzafrir Cohen * cdr_mysql: fix UTC support * Make 'cdrzone=UTC' work properly. * Fix the documentation of cdr_mysql.conf: it's cdrzone and not timezone ASTERISK-26359 #close Change-Id: I2a6f67b71bbbe77cac31a34d0bbfb1d67c933778 2016-06-27 14:26 +0000 [07b95f7c65] Tzafrir Cohen * sd_notify (systemd status notifications) support sd_notify() is used to notify systemd of changes to the status of the process. This allows the systemd daemon to know when the process finished loading (and thus only start another program after Asterisk has finished loading). To use this, use a systemd unit with 'Type=notify' for Asterisk. This commit also adds the function ast_sd_notify(), a wrapper around sd_notify that does nothing if not built with systemd support. Also adds support for libsystemd detection in the configure script. Change-Id: Ied6a59dafd5ef331c5c7ae8f3ccd2dfc94be7811 2016-09-09 06:35 +0000 [bc81765bb4] Timo Teräs * Fix showing of swap details when sysinfo() is available If sysinfo() is available, but not sysctl() or swapctl() the printing code for swap buffer sizes is incorrectly omitted. The above condition happens with musl c-library. Fix #if rule to consider defined(HAVE_SYSINFO). And also remove the redundant || defined(HAVE_SYSCTL) which was incorrectly there to start with. Now swap information is displayed only if an actual libc function to get it is available. This also fixes warnings previously seen with musl libc: [CC] asterisk.c -> asterisk.o asterisk.c: In function 'handle_show_sysinfo': asterisk.c:773:6: warning: variable 'totalswap' set but not used [-Wunused-but-set-variable] int totalswap = 0; ^~~~~~~~~ asterisk.c:770:11: warning: variable 'freeswap' set but not used [-Wunused-but-set-variable] uint64_t freeswap = 0; ^~~~~~~~ Change-Id: I1fb21dad8f27e416c60f138c6f2bff03fb626eca 2016-09-14 07:59 +0000 [89764f7ae9] Joshua Colp * rtp: Preserve timestamps on video frames. Currently when receiving video over RTP we store only a calculated samples on the frame. When starting the video it can take some time for this calculation to actually yield a value as it requires constant changing timestamps. As well if a video frame passes over multiple RTP packets this calculation will fail as the timestamp is the same as the previous RTP packet and the number of samples calculated will be 0. This change preserves the timestamp on the frame and allows it to pass through the core. When sending the video this timestamp is used instead of a new one being calculated. ASTERISK-26367 #close Change-Id: Iba8179fb5c14c9443aee4baf670d2185da3ecfbd 2016-09-14 09:51 +0000 [5f54ac3a80] Joshua Colp * res_pjsip_transport_management: Convert time in log message to seconds. ASTERISK-26375 #close Change-Id: I46496af5cae41413e76d44d2068a7431279f09dc 2016-09-13 05:34 +0000 [6ba68b486e] Steve Davies * chan_sip: Fix session timeout on retransmit of non-UDP packets Change-Id I1cd33453c77c56c8e1394cd60a6f17bb61c1d957 Enable Session-Timers for SIP over TCP (and TLS) also disables SIP retransmits in chan_sip for non-UDP connections, allowing the TCP layer to handle the retransmits. Unfortunately, this caused sessions to be terminated with a retransmit timeout becasue it stopped at the point of the first retrans call. This patch waits for the 64*T1 timer to expire instead. ASTERISK-19968 Change-Id: I844f26801aada10bc94e9bebe6e151f0a8443204 2016-09-13 06:08 +0000 [e3487b9360] Joshua Colp * res_pjsip: Don't assume a request will have any addresses. When performing DNS resolution the failover code present in res_pjsip currently assumes that a request will always have at least one viable address. In practice this is not true. A domain may be used that has no records. The code now checks that at least one address exists on the request which prevents looping. ASTERISK-26364 #close Change-Id: Ic0761b0264864acd85915c94d878a81624940f4c 2016-09-12 12:25 +0000 [7d7b23f04f] Richard Mudgett * app_queue: Fix CLI "queue show" and AMI Queues action output truncation. The output of CLI "queue show" and AMI Queues action is truncated and "failed to extend from 240 to 327" messages are generated if the queue member and interface names are lengthy. * Increase the string buffer size from 240 to 512 in order to accommodate for more information fields added to the output since v1.8. ASTERISK-26360 #close Reported by: Richard Mudgett Change-Id: Id99c03cf5362453b80491a4b3b0434cb67aa966d 2016-09-12 03:28 +0000 [740292e6ae] Walter Doekes * chan_sip: Allow target refresh (Contact update) on re-INVITE. Previously, the Contact was stored only on initial INVITE and on any 18X and 200. That meant that after re-INVITEs from *us* the Contact could get updated, but after re-INVITEs from the *peer*, it did not. This changeset fixes this inconsistency, properly allowing target refreshes through re-INVITES (RFC3261, 12.2). If your strictrtp setting allows it, this change allows you to switch the source IP of a connected/calling device mid-call with a simple re-INVITE from the new IP. ASTERISK-26358 #close Change-Id: Ibb8512054ab27c8c3d2514022568fde943bf2435 2016-08-31 15:22 +0000 [82ec58aa91] Richard Mudgett * sip_to_pjsip.py: Map legacy_useroption_parsing. Map the sip.conf general section legacy_useroption_parsing to the new pjsip.conf global ignore_uri_user_options. ASTERISK-26316 Reported by: Kevin Harwell Change-Id: I78108a31995db19d41f4e1a07b3324692c5363fc 2016-08-29 18:08 +0000 [ba362822f3] Richard Mudgett * res_pjsip: Add ignore_uri_user_options option. This implements the chan_sip legacy_useroption_parsing option but with a better name. * Made the caller-id number and redirecting number strings obtained from incoming SIP URI user fields always truncated at the first semicolon. People don't care about anything after the semicolon showing up on their displays even though the RFC allows the semicolon. ASTERISK-26316 #close Reported by: Kevin Harwell Change-Id: Ib42b0e940dd34d84c7b14bc2e90d1ba392624f62 2016-09-09 06:26 +0000 [56caf5402c] Walter Doekes * contrib: Let safe_asterisk script continue without /dev/tty9. If you use the safe_asterisk script, it uses hardcoded defaults before running configurable values from /etc/asterisk/startup.d. The hardcoded default has TTY=9. Some containerized environments don't have such a TTY, and safe_asterisk would stop. The custom configuration from /etc/asterisk/startup.d/* isn't read until after it stopped, so changing TTY in a custom config did not help. This changeset changes safe_asterisk to continue if the TTY setting was untouched and /dev/tty9 and /dev/vc/9 aren't found. Change-Id: I2c7cdba549b77f418a0af4cb1227e8e6fe4148fc 2016-09-09 05:39 +0000 [901e612739] Joshua Colp * res_pjsip: Only invoke unidentified endpoint logic when unidentified. The code was incorrectly invoking the unidentified logic when an endpoint had actually been identified, causing log messages to be output. ASTERISK-26349 #close Change-Id: Id8104fc9e3d138d5e8b6f6977ecc08765fd17d4f 2016-08-29 22:26 +0000 [2a50c29101] Aaron An * res/res_pjsip: Add preferred_codec_only config to pjsip endpoint. This patch add config to pjsip by endpoint. ;preferred_codec_only=yes ; Respond to a SIP invite with the single most preferred codec ; rather than advertising all joint codec capabilities. This ; limits the other side's codec choice to exactly what we prefer. ASTERISK-26317 #close Reported by: AaronAn Tested by: AaronAn Change-Id: Iad04dc55055403bbf5ec050997aee2dadc4f0762 2016-08-16 15:34 +0000 [28b2aeba0b] 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-08-23 06:35 +0000 [82a3d659dc] 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-09-06 11:46 +0000 [f369dbb705] Richard Mudgett * res_pjsip_messaging.c: Misc cleanups and fixes. * Eliminated RAII_VAR in get_outbound_endpoint(). * Simplify update_to() coding. However, this function can only be a NoOp because the To string can only be a URI and not a name-address formatted string. * Simplify update_from() coding. Also fixed a code path modifying the from string when the caller could still want to use the original string. * Fixed msg_data_create() incompletely removing the "pjsip:" to then add back the "sip:" string if needed. The code didn't handle the "pjsip:sip:" case because it left the colon after pjsip in the string. Change-Id: I68a09a665f6d4daa9eaa59069045ab69122e28db 2016-09-07 16:00 +0000 [2e5da0c715] Joshua Colp * res_pjsip: Allow global headers to be overridden. Currently when you add global headers from the dialplan both the header in the dialplan and the globally configured header are added to the resulting SIP INVITE. This change makes it so the headers in the dialplan take precedence and are the only ones added. Change-Id: I36f864298f38db3632ad503edc11267cb8ffb3ad 2016-08-10 15:14 +0000 [ac02bbd9a0] Mark Michelson * ConfBridge: Make some announcements asynchronous. Confbridge announcements tend to block a channel while they are being played. In some circumstances, this is warranted since you want that particular channel not to hear the announcement (Example: "John Doe has entered the conference"). For others it makes less sense. This change first introduces methods for playing sounds asynchronously into the conference. This is very similar to how synchronous sounds are played, except the channel initiating the playback does not wait for the sound to complete before moving on. Asynchronous announcements are used for two circumstances: * Sounds played for a user after they have left the bridge * Sounds that play first to a single user and then the rest of the conference (if the channel and conference use the same language) ASTERISK-26289 #close Reported by Mark Michelson Change-Id: Ie486bb3de1646d50894489030326a423e594ab0a 2016-07-19 09:41 +0000 [7a12355dbd] Matt Jordan * chan_sip: Allow Preferred sRTP. Following the Encrypt-all-the-things paradigm: The user enters his SIP-URI and password. Thanks to DNS-NAPTR, the phone determines SIP-over-TLS as preferred transport. In SIP/SDP, the phone starts the call with a crypto attribute, but not as RTP/sAVP but the RTP/AVP profile (sRTP is preferred aka optional; not mandatory). If the VoIP server does not support sRTP and TLS, the phone shows an open padlock icon. This paradigm is supported by several VoIP/SIP clients on default. Some implementations even cannot be changed to RTP/sAVP. Therefore here, this change allows Preferred sRTP for ingress. For egress, please, create a dial plan which starts with RTP/SAVP, and when rejected tries again with RTP/AVP. ASTERISK-20234 #close Reported by: tootai Tested by: tootai, Alexander Traud patches: srtp_patches.diff submitted by Matt Jordan Change-Id: I42cb779df3a9c7b3dd03a629fb3a296aa4ceb0fd 2016-09-07 05:59 +0000 [baa7dba180] Joshua Colp * res_resolver_unbound: Fix config documentation. The code was referencing the config section as 'globals' instead of 'general'. This change swaps it over to 'general'. Change-Id: I9dfe7788f41c4a6754c77e103880dc1a747de7fe 2016-09-06 15:25 +0000 [e769c19a31] Matt Jordan * res/res_stasis_playback: Cancel the entire playlist when a stop occurs Prior to this patch, a stop issued by a delete of a Playback resource (indicated by the control frame AST_CONTROL_STREAM_STOP) would only stop the current media URI playing. Subsequent URIs specified by a playback operation would then proceed on, even though we had just indicated to the User that the Playback was finished *and* after they had just 'deleted' the resource. Whoops. This patch corrects it by bailing out of the sequence of URIs to play if one of them is terminated with an AST_CONTROL_STREAM_STOP indication. ASTERISK-26341 #close Change-Id: I2da9ec43545ba46cdfffe287c7e4907eae7fca42 2016-08-01 20:55 +0000 [6caf6bcdad] George Joseph * build: Add download capability for external packages The DPMA and g729a, silk, siren7 and siren14 codecs hosted at http://downloads.digium.com/pub/telephony/ are now listed in the "External" sections of the "Resource Modules" and "Codec Translators" pages in menuselect. Any that are selected will automatically be downloaded and installed when "make install" is run. Their LICENSE and README (if avaialble) files will be installed to ASTVARLIBDIR/documentation/thirdparty/. Example use with codecs: The codecs/codecs.xml file is a menuselect style xml file that lists the codecs to be included. Their support levels are 'external', which triggers the download and install, and defaultenabled is no. Also because codec_g729a is actually in a directory named codec_g729 on the download server, the newly added 'member_data' element is used to override the default of the directory name being the package name. You can use the 'directory_name' attribute to keep default base URL (http://downloads.digium.com/pub/telephony/) but use the new directory, or you use the 'remote_url' attribute to specify a full URL to the download directory. In this case, you must still follow the same subdirectory naming conventions as that used for the packages located at 'http://downloads.digium.com/pub/telephony'. A new configure option '--with-externals-cache' was added and like '--with-sounds-cache' it allows the installer to cache tarballs so they're not downloaded every time. To assist with the download and install process, each external package now has a manifest.xml file that, among other things, contains a package version and checksums for each file in the tarball. The manifest is saved to both the cache directory and ASTMODDIR and together with the manifest.xml on the downloads site, tells the install scripts whether a download and/or update is needed. bash and xmlstarlet are required for downloader operation. If they're not installed, the external items in menuselect will be unavailable. Change-Id: Id3dcf1289ffd3cb0bbd7dfab3cafbb87be60323a 2016-08-18 14:45 +0000 [7bb7f7b9d5] Alexei Gradinari * res_pjsip_session: segfault on already disconnected session On heavy loaded system the TCP/TLS incoming calls could be disconnected by pjproject while these calls are being processed by asterisk which could use the session's memory pools. If the session in the disconnected state then the session memory pools were already freed, so we get segfault. This patch adds a lifetime control on an INVITE session to pjproject. The lifetime of the session is manipulated by calling pjsip_inv_add_ref/pjsip_inv_dec_ref. This patch uses these functions to inform pjproject that the session is in use. This patch adds check if the session state is not disconnected and also checks if the memory pool is not NULL. This patch also places tasks 'session_end' and 'session_end_completion' into session's serializer to avoid race condition. ASTERISK-26291 #close Change-Id: I4d28b1fb3b91f0492a911d110049d670fdc3c8d7 2016-09-06 02:41 +0000 [d80b28560c] Walter Doekes * chan_sip: Don't refuse calls with "optional crypto"; fall back to RTP. Certain SNOM phones send so-called "optional crypto" in their SDP body. Regular SRTP setup looks like this: m=audio 64620 RTP/SAVP 8 0 9 99 3 18 4 101 a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:... SNOM-style "optional crypto" looks like this: m=audio 61438 RTP/AVP 8 0 9 99 3 18 4 101 a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:... A crypto line is supplied, but the m-line does not have SAVP. When res_srtp.so is *not* loaded, then chan_sip.so treats the optional crypto as regular RTP, but when res_srtp.so *is* loaded, it refuses the incoming call with the following message: WARNING: process_sdp: Failed to receive SDP offer/answer with required SRTP crypto attributes for audio For platforms that want to start providing SRTP this presents a compatibility problem. This changeset lets chan_sip handle the SDP as if no crypto-line was supplied: i.e. accept the call as regular RTP, just like it did before res_srtp was loaded. Now you'll get this informative warning instead: WARNING: Ignoring crypto attribute in SDP because RTP transport is insecure ASTERISK-23989 #close Reported by: Olle Johansson Change-Id: I91a15ae05a0296e398d6b65f53bb11afde1d80e2 2016-09-03 16:04 +0000 [730cb3b0b7] Matt Jordan * apps/app_dial: Fix crash on non-connect call paths for Privacy/Screening option In any scenario in which the callee is not connected to the caller, the current code in app_dial will crash due to raising a Dial End Stasis Message after the callee channel has been hung up. This patch corrects the error by simply moving the explicit hangup of the callee (peer) channel until after the dial end message. ASTERISK-25691 #close Change-Id: I816a414014424d0d8c80e2a3cbef13ef8c63798d 2016-09-03 16:02 +0000 [6e1a3b924e] Matt Jordan * apps/app_dial: Set the DIALSTATUS to NOANSWER on privacy option 5 If the callee selects option '5' using the Dial application's privacy (P) option, the DIALSTATUS is erroneously set to ANSWER. This option reflects the callee sending the caller to VoiceMail one time; the call is definitely *not* ANSWERed in such a scenario. With this patch, the DIALSTATUS is instead set to NOANSWER, which is the same DIALSTATUS that is set when the 'send to VoiceMail every time' option is set. ASTERISK-25691 Change-Id: Iaf0c9f0fa00545e7366443875e2bb7d9a89a1358 2016-08-30 16:40 +0000 [68c7694abb] Richard Mudgett * res_pjsip_registrar.c: Reduce stack usage in find_aor_name(). Change-Id: I8aebad1fdcf303bd115b59a4b57fbbd5b2267f09 2016-08-29 18:06 +0000 [35ce4d25c7] Richard Mudgett * pjsip_configuration.c: Ignore repeated identify by methods. Change-Id: Ied0c06043d1dfef8fdc9c9a808cf89b118119838 2016-08-30 17:26 +0000 [c1e438fdf7] Richard Mudgett * config_global.c: Comments and a default expression adjustment. Change-Id: Ia6a58f8c73a30da6874b3f94364dce162d6f1ad3 2016-08-31 15:14 +0000 [edcf09e47c] Richard Mudgett * sip_to_pjsip.py: Map canreinvite as directmedia alias. Change-Id: I48b8e150f96a3d2a24d8fc25fbe4f5aff9f4a6b2 2016-08-31 15:37 +0000 [47336a0bdd] Richard Mudgett * sip_to_pjsip.py: Fix typo converting outboundproxy registration. Change-Id: I6f30e5f9fcf8469ba0079fbf884047d54c2c0b15 2016-08-31 15:13 +0000 [dba02575fc] Richard Mudgett * sip_to_pjsip.py: Fix comment typo and tabs. Change-Id: If35174614545727817d329c60ba4456c028941b5 2016-08-31 15:56 +0000 [4aaa27e532] Richard Mudgett * Sample configs: Eliminate false multiline comment block starts. Change-Id: Ie627def9604ae30abd80754f9e6f09874825aec6 2016-09-02 11:36 +0000 [c3b965a2c0] Richard Mudgett * format_cap.c: Fix CLI "core show channeltype Surrogate" crash. * Make ast_format_cap_get_names() NULL tolerant. ASTERISK-26331 #close Reported by: CGI.NET Change-Id: Id67e93936dc8ec2a33a9d33655843d43b59285a3 2016-08-26 17:22 +0000 [e875e1c12a] Corey Farrell * sorcery: Create function ast_sorcery_lockable_alloc. Create an alternative to ast_sorcery_generic_alloc which uses astobj2 shared locking. Use this new method for the 'struct ast_sip_aor' allocator. Change-Id: I3f62f2ada64b622571950278fbb6ad57395b5d6f 2016-08-18 13:28 +0000 [131baf70d6] Corey Farrell * named_locks: Use ao2_weakproxy to deal with cleanup from container. This allows standard ao2 functions to be used to release references to an ast_named_lock. This change can cause less frequent locking of the global named_locks container. The container is no longer locked when a named_lock reference is being release except when this causes the named_lock to be destroyed. Change-Id: I644e39c6d83a153d71b3fae77ec05599d725e7e6 2016-08-26 13:18 +0000 [0c5b6e9ff5] Corey Farrell * astobj2: Support using a separate object for locking. Create ao2_alloc_with_lockobj function to support shared locking. Change-Id: Iba687eb9843922be7e481e23a32c0700ecf88a80 2016-08-31 12:23 +0000 [48fd4c815c] Michael Kuron * app_mp3: Use correct buffer size and the same sample rate as the channel Previously, the buffer used for MP3 streamed from HTTP servers had a size of 1 MB. For 8 kHz mono audio at 16 bit resolution, such a buffer covers about 1 minute. Only when the buffer is full does audio start to play. For MP3 files streamed from a server, that is usually not a big deal as long as the connection to the server is fast enough to supply that much data within a second or two. For MP3 live streams however, it takes 1 minute to download 1 minute of audio, so without this change, app_mp3 wasn't really usable for MP3 live streams. This commit changes the buffer size so that it covers 6 seconds of an MP3 file streamed from a server and 0.5 seconds of an MP3 live stream. The latter is identified by the use of a .m3u file extension. app_mp3 so far only supported 8 kHz audio. Now it always runs at the sample rate of the channel. ASTERISK-26085 #close Change-Id: Id1ee274733cd804a0edecf7450329b72f1235af0 2016-08-31 05:33 +0000 [91993ebaa5] Jean Aunis * resource_channels.c: add hangup reason "answered_elsewhere". In ARI, the channels API allows to hangup a channel with a hangup reason. This commit adds a new reason "answered_elsewhere". When using a SIP channel, this will eventually allow Asterisk to add a proper "Reason" header to a CANCEL message. ASTERISK-26321 Change-Id: Ia97675bd4acd6a7f58eb467953dfb94559f6583d 2016-08-26 10:39 +0000 [faf9bdebb7] Alexei Gradinari * res_pjsip: qualify/unqualify added/deleted realtime endpoints If the PJSIP endpoint's AOR with the permanent contact was deleted from the realtime storage the res_pjsip module continues trying to qualify this contact. The error 'Unable to find an endpoint to qualify contact' appeares every 'qualify_frequency' seconds. This patch deletes this contact in this case. The PJSIP endpoint's AOR with the permanent contact is never qualified if it is added to realtime storage after asterisk started. This patch adds qualifying for the AOR's permanent contacts on the first handling of this AOR. ASTERISK-26319 #close Change-Id: Ib93dded9121edb113076903d1aa95402f799f8fe 2016-08-22 17:08 +0000 [c98a047ee6] 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 2016-08-29 07:07 +0000 [5e0758575c] Etienne Lessard * pbx.c: Prevent infinite recursion in manager_show_dialplan_helper. Previously, if context A was including context B and context B was including context A, i.e. if there was a circular dependency between contexts, then calling manager_show_dialplan_helper could lead to an infinite recursion, resulting in a crash. This commit applies the same solution as the one implemented in the show_dialplan_helper function. The manager_show_dialplan_helper and show_dialplan_helper functions contain lots of code in common, but the former was missing the "infinite recursion avoidance" code. ASTERISK-26226 #close Change-Id: I1aea85133c21787226f4f8442253a93000aa0897 2016-08-25 07:06 +0000 [c21e6764f1] 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-08-26 14:34 +0000 [a7487e9261] George Joseph * pjproject_bundled: Disable srtp use by pjmedia The reason for the disable is that while Asterisk works fine with older libsrtp versions, newer versions of pjproject won't compile with them. Debian 6 for instance, has libsrtp 1.4.4 which is older than what pjproject is expecting. We don't use most of pjmedia but we DO use it for SDP negotiation. Luckily disabling srtp in pjmedia doesn't interfere with it's ability to negitiate a secure channel. The proper crypto attributes are negotiated in both directions. ASTERISK-26279 #close Change-Id: Id25a92cdf3df97a26c53cffae65b6b82de33c8e2 2016-08-26 08:41 +0000 [858fa5eb2c] Alexander Traud * channel: No hung-up on failing security requirements. In your Diaplan, if you specify same => n,Set(CHANNEL(secure_bridge_media)=1) same => n,Set(CHANNEL(secure_bridge_signaling)=1) only the SIP channel driver chan_sip supports this. All other channels drivers like res_pjsip fail. In case of failure, the original sRTP source code released the whole channel, even if not hung-up, yet. This change does not release the channel but instead hangs-up the channel. ASTERISK-26306 Change-Id: I0489f0cb660fab6673b0db8af027d116e70a66db 2016-08-20 09:04 +0000 [f35501b8c9] Alexander Traud * sip_to_pjsip: Migrate IPv4/IPv6 (Dual Stack) configurations. When using the migration script sip_to_pjsip.py, and your sip.conf is configured with bindaddr=::, two transports are written to pjsip.conf, one for 0.0.0.0 (IPv4) and one for [::] (IPv6). That way, PJProject listens on the IPv4 and IPv6 wildcards; a IPv4/IPv6 Dual Stack configuration on a single interface like in chan_sip. Furthermore, the script internal functions "build_host" and "split_hostport" did not parse Literal IPv6 addresses as expected (like [::1]:5060). This change makes sure, even such addresses are parsed correctly. ASTERISK-26309 Change-Id: Ia4799a0f80fc30c0550fc373efc207c3330aeb48 2016-08-04 20:11 +0000 [ea929d766d] Richard Mudgett * res_pjsip: Cache global config options. We may check a global config option hundreds of times a second or more. Asking sorcery for the global configuration from the config files backend involves several allocations and container traversals. Using realtime without a memory cache is a lot worse because you have to lookup in the realtime database each time to reconstitute the sorcery object. With a memory cache for realtime, there is about the same amount of overhead as for config files. Either way, it is still fairly expensive to access the sorcery object that much. * Cache the global config options so we can access them faster. You must now always perform a res_pjsip reload to change the global options. Change-Id: Ice16c7a4cbca4614da344aaea21a072b86263ef7 2016-08-23 11:02 +0000 [5eb6cb969f] Richard Mudgett * res_fax: Fix deadlock in ast_channel_get_t38_state(). ast_channel_get_t38_state() calls ast_channel_queryoption() with AST_OPTION_T38_STATE. If the passed in channel is a local channel then a deadlock can happen if a channel lock is held when called. * Made ast_channel_get_t38_state() callers not hold a channel lock before calling. * Update ast_channel_get_t38_state() doxygen to note that no channel locks can be held when calling the function. ASTERISK-26203 #close Reported by: Etienne Lessard ASTERISK-24822 #close Reported by: David Brillert ASTERISK-22732 #close Reported by: Richard Mudgett Change-Id: I49fd76fa9af628b4198009b5c0b82c8b03681214 2016-08-23 10:39 +0000 [277a2d667a] Richard Mudgett * res_fax: Fix deadlock setting FAXMODE channel variable. ASTERISK-25980 added the FAXMODE channel variable to res_fax.c. Unfortunately, it also introduced a deadlock potential because set_channel_variables() which sets FAXMODE can be called during a masquerade. The ast_channel_get_t38_state() which gets the value used to set FAXMODE cannot be called with the channel locked. As a result, local channels can deadlock because of how they must acquire the locks necessary to operate. The intent of FAXMODE is for dialplan to know how a fax was transferred after the fax completes. However, the previous patch sets FAXMODE to the channel's current T.38 state AFTER the fax has completed and where T.38 may have already disconnected. * Set FAXMODE based upon T.38 negotiations exchanged either with the fax applications or the fax framehooks. ASTERISK-26203 Reported by: Etienne Lessard ASTERISK-24822 Reported by: David Brillert ASTERISK-22732 Reported by: Richard Mudgett Change-Id: Id525747254b64c1efe8b1b5973d52ff9719c2ae1 2016-08-22 12:31 +0000 [edca14c8a5] Richard Mudgett * res_fax.c: Fix deadlock in fax_gateway_indicate_t38(). fax_gateway_indicate_t38() calls ast_indicate_data() which cannot be called with any channel locks already held. A deadlock can happen if the function is operating on a local channel. * Made fax_gateway_indicate_t38() unlock the channel before calling ast_indicate_data() since fax_gateway_indicate_t38() is always called with the channel locked. * Made fax_gateway_indicate_t38() return void since nothing cared about its return value. ASTERISK-26203 Reported by: Etienne Lessard ASTERISK-24822 Reported by: David Brillert ASTERISK-22732 Reported by: Richard Mudgett Change-Id: I701ff2d26c5fc23e0d5a48a3fd98759a9fd09407 2016-08-23 11:16 +0000 [141cd42880] Richard Mudgett * res_fax.c: Add chan locked precondition comments. Change-Id: Ic10ae434536bbf7fb7055d6ab36cc50b8748a4e7 2016-08-23 10:42 +0000 [b86771d1bf] Richard Mudgett * ast_framehook_detach() must be called with the channel locked. The framehook container could become corrupted if the channel lock is not held before calling. Change-Id: If0a1c7ba0484ed3a191106a7516526b905952584 2016-08-22 15:01 +0000 [5744f434f0] Richard Mudgett * ast_framehook_attach() must be called with the channel locked. The framehook container could become corrupted if the channel lock is not held before calling. Change-Id: I1a6b957a1f7b899eb29a186915f8cccab886a438 2016-08-17 02:51 +0000 [93b7533d74] chris de rock * app_macro: Consider '~~s~~' as a macro start extension. As described in issue ASTERISK-26282 the AEL parser creates macros with extension '~~s~~'. app_macro searches only for extension 's' so the created extension cannot be found. with this patch app_macro searches for both extensions and performs the right extension. ASTERISK-26282 #close Change-Id: I939aa2a694148cc1054dd75ec0c47c47f47c90fb 2016-08-24 04:44 +0000 [d2e03c252d] Eugene * chan_iax2: Set plaintext auth to deprecated as per ASTERISK-22820 Starting from draft 2 of RFC 5456 (October 23, 2006) plaintext auth is not supported in IAX2 protocol. Please refer to section 8.6.13 of RFC 5456. But plaintext auth is still supported by Asterisk implementation of IAX2. This support should be dropped. Patch, based on asterisk-dev discussion, adds deprecation warning on startup if 'auth' is set to 'plaintext', changes default values of 'auth' from 'md5, plaintext' to 'md5'. Patch is safe in terms of backwards compatibility, will work even if remote peers have auth=plaintext and we have defaults. auth=plaintext setting will remain deprecated in Asterisk 14 and 15, and IAX2 plaintext support will be removed in Asterisk 16. ASTERISK-22820 #close Change-Id: I5d2f3830cb57645604818f87518916e8a5c317bf 2016-08-24 14:42 +0000 [e40aa40aca] George Joseph * 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 2016-07-19 13:14 +0000 [2e79f52d71] Alexander Traud * codecs: Add Codec 2 mode 2400. ASTERISK-26217 #close Change-Id: I1e45d8084683fab5f2b272bf35f4a149cea8b8d6 2016-08-10 15:14 +0000 [ded22c712a] Mark Michelson * ConfBridge: Rework announcer channel methodology NOTE: This patch was submitted earlier and reverted because of a failing test. The test has been patched so that it adjusts for the changes here, so this is being resubmitted for review. One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ica9fa4907c2f3728cdd1cf0bc564ef4eb40754a0 2016-08-23 05:54 +0000 [065d810d3f] Joshua Colp * Revert "ConfBridge: Rework announcer channel methodology" This reverts commit 5aa877305223faab5a1119276a934893ab9dc138. Change-Id: I9ab45776e54a54ecf1bac9ae62d976dec30ef491 2016-08-19 10:21 +0000 [41ee14bfae] Alexei Gradinari * compilation failed with -Werror=maybe-uninitialized The compilation failed for devmode --enable DONT_OPTIMIZE --enable BETTER_BACKTRACES --enable DO_CRASH --enable TEST_FRAMEWORK res_pjsip/pjsip_configuration.c: In function dtls_handler: res_pjsip/pjsip_configuration.c:974:20: error: back may be used uninitialized in this function [-Werror=maybe-uninitialized] int size = strlen(front); ^ cc1: all warnings being treated as errors Change-Id: I7f082ead0312792a577ec7c73015ba64dabca580 2016-08-20 14:51 +0000 [eb0c9c476f] David M. Lee * res_odbc_transaction: add dep on generic_odbc When res_odbc_transaction depended on res_odbc, it got the generic_odbc headers and libs implicitly. Now that it no longer depends on res_odbc, its dependency on generic_odbc must be explicit. Change-Id: I9db88f7af7388437f49903d3008ba8d4890d5911 2016-08-20 11:18 +0000 [12752c64cc] Alexander Traud * pjproject_bundled: Allow IPv4/IPv6 (Dual Stack) configurations. PJProject supports a lot of platforms even Windows, some with different defaults when it comes to IPv6. In many Linux platforms like Ubuntu 16.04 LTS, "/proc/sys/net/ipv6/bindv6only" is set to 0 (false). Different than in Windows. Because of this, if configured with just an IPv6 address/transport, PJProject listens to both IPv4 and IPv6. However, this is not supported by the PJProject team. As consequence, you end-up with IPv4-mapped IPv6 addresses in SDP, incompatible with IPv4-only clients. Technically, you end-up with an IPv6-only server which accepts incoming connections on IPv4. If you try to configure two transports, one with IPv4 and one with IPv6 on the same interface, as expected by the PJProject team, the IPv4 transport is not able to bind because the IPv6 transport listens to both already. One solution would be to change "/proc/sys/net/ipv6/bindv6only" system-wide. Then, you are able to configure two transports, one for each IP version on the same interface. That way, you get a server which works with IPv4 clients and IPv6 clients at the same time over the same interface. Here, this change sets this parameter directly within PJProject to match the expectations of the PJProject team in any case. This allows IPv4/IPv6 Dual Stack servers out of the box like in chan_sip. This change was accepted by the PJProject team as and is expected to arrive in the next version, PJProject 2.6.0. Until then, this change is incorporated in the bundled PJProject of Asterisk. ASTERISK-26309 Change-Id: I3335d8718f79f4b2feae91b5b005a3ce684a63ae 2016-08-19 18:19 +0000 [55ccdf93c3] Corey Farrell * Fix checks for allocation debugging. MALLOC_DEBUG should not be used to check if debugging is actually enabled, __AST_DEBUG_MALLOC should be used instead. MALLOC_DEBUG only indicates that debugging is requested, __AST_DEBUG_MALLOC indicates it is active. Change-Id: I3ce9cdb6ec91b74ee1302941328462231be1ea53 2016-08-19 14:09 +0000 [8061d9f66f] Corey Farrell * Fix naming mismatch of allocator functions. Allocator functions that take file/line/func parameters are prefixed with single-underscore when MALLOC_DEBUG is not defined, double-underscore when it is defined. This change updates all allocators that accept file/line/func to have the same prototype in either ABI mode. The parameter order of __ast_vasprintf and __ast_asprintf in utils.h have been changed to match that of astmm.h. End-use allocator macro's have been removed from astmm.h and moved to an unconditional part of utils.h. Change-Id: I823bb6ce2b5675b3a4735948f10a3b420e9a023a 2016-08-17 08:10 +0000 [c1b6a79686] Torrey Searle * res_ari: Add http prefix to generated docs updated the uri handler to include the url prefix of the http server this enables res_ari to add it to the uris when generating docs Change-Id: I279335a2625261a8492206c37219698f42591c2e (cherry picked from commit 6f448f32fe9b7379e2630fab7b06205f901f2ded) 2016-08-19 03:59 +0000 [02a82f758e] Alexander Traud * sip_to_pjsip: Add cert_file. When using the migration script sip_to_pjsip.py, cert_file was not migrated to pjsip.conf. A previous change regarding this contained a copy/paste error. ASTERISK-22374 Change-Id: I0fa72e9412117d53b4284fc6b83fa5b2b95ba03b 2016-08-18 09:21 +0000 [1a9555f036] Alexander Traud * sip.conf: tlsclientmethod is using sslv23 as default. When 'tlsclientmethod' is not specified in sip.conf, chan_sip uses the OpenSSL SSLv23_method. This was documented incorrectly in the file sip.conf.sample. SSLv23_method got its name in the 90s. Today, with OpenSSL 1.0.2, this method enables (just) the secure TLSv1.0 and TLSv1.2. Or stated differently, that function should have been called 'secure_method' or 'automatic_method' back in the 90s. Consequently please, specify 'tlsclientmethod=tlsv1' in your sip.conf only if you face a server which has problems like not falling back to TLSv1.0 automatically. ASTERISK-24425 Change-Id: I502ce6146b4504cadfd3973af8d6ec3994f54fa3 2016-08-16 15:57 +0000 [53a2f7dc88] Jason Parker (license 4993) * res_format_attr_g729: Add annexb=no format parameter to SDPs Historically, Asterisk has always specified annexb=no for the g729 format. However, when using res_pjsip no format attribute was specified. This patch makes it so the SDP now contains a format attribute line with annexb=no. Note, that this means only g729a is negotiated. Even for pass through support. According to rfc7261 the type of annex used (a or b) is dependent upon the answerer. However, Asterisk being a back to back user agent makes this tricky to support at this time, thus we only allow annex 'a' for now. ASTERISK-26228 #close patches: res_format_attr_g729.c submitted by Jason Parker (license 4993) Change-Id: I76bc20cc0a01af01536e9915afef319c269c22d0 2016-08-18 17:02 +0000 [7ea133f2ab] Kevin Harwell * rest-api: Swagger scripts were not replacing format variable in file brief Given resource paths did not have 'json' substituted in for the '{format}'. For some auto generated documentation/comment strings it resulted in something like the following: "... REST handler for /api-docs/sounds.{format}" This patch makes sure the resource api's path is properly substituted. ASTERISK-25472 #close Change-Id: Ie3e950a35db4043e284019d6c9061f3b03922e23 2016-08-18 15:15 +0000 [c7ffd6111d] George Joseph * res_odbc: Correct the dependency relationship with res_odbc_transaction The MODULEINFO dependencies between these 2 modules was reversed. res_odbc should depend on res_odbc_transaction, not the other way around. ASTERISK-25984 #close Change-Id: Ifcfbb49c0b51cf6640a5446d47cd6c48caf1331f 2016-08-18 12:04 +0000 [966527249e] Kevin Harwell * sip_to_pjsip: Set correct tls transport method A recent update had a copy/paste error where the unused variable 'val' was being passed to the set_value function instead of the 'method' value itself. This patch passes in the right variable. ASTERISK-22374 Change-Id: I895b7b3779ce4442bc58b8ec40d59dd29bb43f06 2016-08-10 15:14 +0000 [5aa8773052] Mark Michelson * ConfBridge: Rework announcer channel methodology One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ic5cd2c4b98a1eaa1715eb7a5b35d62f1a76d78a5 2016-08-18 08:19 +0000 [e55d1e47aa] Alexander Traud * sip_to_pjsip: Map the TLS method correctly. When using the migration script sip_to_pjsip.py and tlsclientmethod is not set in sip.conf, the default value of chan_sip (sslv23) is copied to pjsip.conf, to overwrite the default of the PJProject (tlsv1). This makes sure, res_pjsip is offering/using not just TLSv1.0 but TLSv1.2 as well. ASTERISK-22374 Change-Id: Ie530a3dae9926ae14f3920a21be1e2edb15bda4f 2016-08-18 08:17 +0000 [da14c439a3] Alexander Traud * sip_to_pjsip: Add compactheaders, timerb, timert1, and useragent. When using the migration script sip_to_pjsip.py, no section of type=system or type=general were created. Therefore the keys compactheaders, timerb, timert1, and useragent were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I318a453843227ea36bf130d392d4abd7bd26b5a1 2016-08-18 08:16 +0000 [675721a7ab] Alexander Traud * sip_to_pjsip: Map (session-)timers correctly. When using the migration script sip_to_pjsip.py, session-timers=accept and session-timers=refuse were mapped to wrong values. ASTERISK-22374 Change-Id: Ie4e90d5f6a29aff07837b7fe5bc8aea5fb6fc092 2016-08-18 08:15 +0000 [acc5237e91] Alexander Traud * sip_to_pjsip: Write username even without authname. When using the migration script sip_to_pjsip.py, now the (mandatory) username is written to pjsip.conf, even if there was no (optional) authname in the register string in sip.conf. ASTERISK-22374 Change-Id: Ie53e1997104cd2674821688b8a8247249f5e156f 2016-08-18 08:14 +0000 [3eb02235f5] Alexander Traud * sip_to_pjsip: Parse register even with transport. When using the migration script sip_to_pjsip.py and the register string started with a transport in sip.conf - like tls://... - register was not parsed correctly and therefore not migrated correctly to pjsip.conf. ASTERISK-22374 Change-Id: I44c12104eea2bd8558ada6d25d77edfecd92edd2 2016-08-18 08:13 +0000 [9907e2b1c1] Alexander Traud * sip_to_pjsip: Write local_net, contact_acl, contact_deny, and contact_permit. When using the migration script sip_to_pjsip.py, those keys got missing. These keys might appear several times and the function "merge_value" tried to collect those. However, because these keys have different names in sip.conf and pjsip.conf, "merge_value" was not able to find the new key name in sip.conf. This change lets "merge_value" search with the old key name in sip.conf and write with the new key name in pjsip.conf. ASTERISK-22374 Change-Id: Ie53c5278ae6f1cb8fa7e96c5289877d46981d9d2 2016-08-18 08:11 +0000 [c0e0075718] Alexander Traud * sip_to_pjsip: Map externhost/ip to Transports. When using the migration script sip_to_pjsip.py, the externhost or externip of sip.conf were erroneously written to Endpoints instead to Transports. ASTERISK-22374 Change-Id: I2c5873386cfc388899fa9cf2368639dd12f1b8e4 2016-08-18 08:04 +0000 [a937c2ccb1] Alexander Traud * sip_to_pjsip: Add defaultexpiry, maxexpiry, and minexpiry. When using the migration script sip_to_pjsip.py, defaultexpiry, maxexpiry, and minexpiry were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I007fbf543dcadc96fc3ed71c54da502bcb209b7b 2016-08-18 08:03 +0000 [163cc2d68f] Alexander Traud * sip_to_pjsip: Write media_encryption. When using the migration script sip_to_pjsip.py, encryption=yes got missing and media_encryption=sdes was not written to pjsip.conf, because of a typo. ASTERISK-22374 Change-Id: I0fc3e55dc512a57603ae0fef41baacccf2a35c05 2016-08-18 08:02 +0000 [d8b5970749] Alexander Traud * sip_to_pjsip: Write cos and tos. When using the migration script sip_to_pjsip.py, both tos_sip and cos_sip got missed, because of a typo. Therefore, cos and tos were not written to pjsip.conf. Furthermore, that revealed a misuse of an internal function, caused by a copy-and-paste error. ASTERISK-22374 Change-Id: Id245ebadf70ab9776eb280c026288540af3af5c2 2016-08-18 07:55 +0000 [38491401b5] Alexander Traud * sip_to_pjsip: Add cert_file and ca_list_path. When using the migration script sip_to_pjsip.py, cert_file and ca_list_path were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I4612877d190b7f86a48698cefbf5c4db6c265825 2016-08-16 15:36 +0000 [534063fd67] George Joseph * res_pjsip: Add contact_user to endpoint contact_user, when specified on an endpoint, will override the user portion of the Contact header on outgoing requests. Change-Id: Icd4ebfda2f2e44d3ac749d0b4066630e988407d4 2016-08-17 14:13 +0000 [0b4fa65532] Richard Mudgett * res_pjsip_session.c: Fix unbound srv failover tests. Commit 1b666549f33d69dc080b212bf92126f3bc3a18b2 broke the srv failover functionality if a TCP connection gets disconnected. Under these conditions, session_inv_on_state_changed() gets a PJSIP_EVENT_TRANSPORT_ERROR and restarts the INVITE transaction on a new transport. Unfortunately, session_inv_on_tsx_state_changed() also gets the same PJSIP_EVENT_TRANSPORT_ERROR event and unconditionally terminates the session. * Made session_inv_on_tsx_state_changed() complete terminating the session on PJSIP_EVENT_TRANSPORT_ERROR only if the session state is still PJSIP_INV_STATE_DISCONNECTED. ASTERISK-26305 #close Reported by: Richard Mudgett Change-Id: If736e766b5c55b970fa38ca6c8a885caf27b897d 2016-08-11 12:10 +0000 [046069011b] Tzafrir Cohen * followme: initialize all config items on reload Some configuration directives were not initialized on reload, and hence were not reset to default if they were removed from followme.conf. ASTERISK-26288 #close Change-Id: Ief829e16374ad1e0ecfd63e6ee4923b5a1d1c150 2016-08-17 06:12 +0000 [57f4e4428a] Alexander Traud * BuildSystem: Detect ca_list_path capabilities in external PJProject. Since Asterisk 13.8, pj_ssl_cert_load_from_files2 got detected only in the bundled PJProject but not in an external PJProject. Therefore, ca_list_path could not be used in pjsip.conf. With this change, pj_ssl_cert_load_from_files2 is detected again to enable ca_list_path again. ASTERISK-26303 #close Change-Id: I4a4a0cdc5cdff33730911fb4cfc0498c069043d0 2016-08-16 12:24 +0000 [a5c0cf4922] George Joseph * ari: Add documentation that path parameters are case-sensitive Added to api.wiki.mustache so that the generated object pages have the notation in the table header as well as under each method that has path parameters. ASTERISK-25492 #close Change-Id: I36c46c6dc0c9ac350470394a999a1b19ef3fcdaf 2016-08-15 15:29 +0000 [824a4e84d1] Corey Farrell * Refactor usage pattern of xmldoc info tag. This updates func_channel.c and main/message.c to use a generic xpointer include instead of including info from each channel driver. Now the name attribute of info is CHANNEL or CHANNEL_EXAMPLES to be included in documentation for func_channel. Setting the name attribute of info to MessageToInfo or MessageFromInfo causes it to be included in the MessageSend application and AMI action. Change-Id: I89fd8276a3250824241a618009714267d3a8d1ea 2016-06-15 17:10 +0000 [957df73301] Evgeniy Tsybra * chan_sip: Fix lastrtprx always updated Packets are read regulary, when there is no data in buffer fr->frametype is AST_FRAME_NULL. There was no check of frametype and lastrtprx always updated and, therefore, rtptimeout did not work at all. ASTERISK-25270 #close Change-Id: If3b5ca0dbb822582a86eb7d01dcae4e83448c41d 2016-08-10 14:41 +0000 [e85adbd947] Alexei Gradinari * core: Entity ID is not set or invalid The Exchanging Device and Mailbox States could not working if the Entity ID (EID) is not set manually and can't be obtained from ethernet interface. This patch replaces debug message to warning and addes missing description about option 'entityid' to asterisk.conf.sample. With this patch the asterisk also: (1) decline loading the modules which won't work without EID: res_corosync and res_pjsip_publish_asterisk. (2) warn if EID is empty on loading next modules: pbx_dundi, res_xmpp Starting with v197 systemd/udev will automatically assign "predictable" names for all local Ethernet interfaces. This patch also addes some new ethernet prefixes "eno" and "ens". ASTERISK-26164 #close Change-Id: I72d712f1ad5b6f64571bb179c5cb12461e7c58c6 2016-08-04 20:00 +0000 [13450c80ce] Richard Mudgett * res_sorcery_config.c: Cleanup ao2 container usage idioms. Change-Id: Iad24b335fb121a2bc7f1d048ab7420569edcba5a 2016-08-04 15:57 +0000 [d526aa5cbe] Richard Mudgett * sorcery.c: Minor optimizations. * Remove some unused parameters from internal functions: sorcery_wizard_create() sorcery_wizard_update() sorcery_wizard_delete() * Created the struct sorcery_observer_invocation ao2 object without a lock since it is not needed in sorcery_observer_invocation_alloc(). * Cleanup generic ao2 container sorcery object id hash, sort, and cmp functions. Change-Id: Iff71d75f52bc1b8cee955456838c149faaa4f92e 2016-08-01 11:04 +0000 [45e143576f] Richard Mudgett * sorcery.c: Tweak some container declaration formatting. * Tweak sorcery_object_type_alloc() formatting. * Tweak ast_sorcery_init() formatting. Change-Id: Ib02430023f15268cd7a2ea53f2c331213e4d3944 2016-08-11 23:30 +0000 [eca3d2698a] Corey Farrell * pbx.c: Additional fixes to ast_context_remove_extension_callerid2. Do not check registrar of the first extension head. We should only check the registrar when we match the priority. Additionally fix a couple calls to strcmp which used the input callerid instead of the clean version ex.cidmatch. ASTERISK-26233 Change-Id: I17ea6881a18f40840ae9c1f5394aab1fbb3769f1 2016-08-13 22:02 +0000 [9202ca34a8] Matt Jordan * app_dial: Improve documentation * Add some helpful and other embedded paragraph tags * Document some of the lesser known channel variables set by Dial * Add examples for some common Dial uses, along with some more challenging but useful options Change-Id: Ib2fb9301e8e044d14fbb2815ec64161f19bbfbc1 2016-08-13 20:16 +0000 [e9fe08ea37] Matt Jordan * manager: Add tags to relate interrelated events/actions together Change-Id: Idbac539205aa732bf786c4f765577d8e9ff28ba4 2016-08-13 20:15 +0000 [a93cd39ac1] Matt Jordan * manager: Add tags to relate Bridge related events,actions, and apps Change-Id: I67e6b79fa3102e494b5fe6cc7510472249080e85 2016-08-13 20:14 +0000 [d8a7594ffd] Matt Jordan * manager: Add tags to relate AoC events and actions Change-Id: Iea89a36222712148c1775c05ed0ad1049d67a70e 2016-08-13 20:13 +0000 [243f0cf99a] Matt Jordan * manager: Add tags to relate UserEvent actions/apps/events Change-Id: I80f8a981f62f50e74609c69c49edcaca6c95efa4 2016-08-12 15:53 +0000 [3269cf4c17] Matt Jordan * res_agi: Improve documentation * Groups of AGI commands that have similar functionality now reference each other, and all reference the AGI application for ease of wiki reference. * The documentation for the AGI application has been improved, in particular noting the various AGI types and how they are invoked. * A warning message has been added to DeadAGI, noting that it is deprecated. Change-Id: I479ccdee8a7393f01b18692c3d4ab7e6bdd1875d 2016-08-12 13:53 +0000 [a19f4affe8] Matt Jordan * manager: Add links between related events This patch adds some see-also references between related AMI events. It focuses primarily on those events that are guaranteed to come in pairs, such as DTMFBegin/DTMFEnd, as well as those that occur during the life cycle of an Asterisk channel, such as Newchannel/Hangup. Change-Id: Iaab600477052018d0f8c03d0c624c0856e9ff1f3 2016-08-12 11:15 +0000 [ddab42e296] Matt Jordan * func_channel: Reorganize documentation * Following the example of the PJSIP channel driver, the channel technology specific documentation has been moved to the respective channel drivers that provide that functionality. This has the benefit of locating the documentation of items with those modules that provide it. * Examples of using the CHANNEL function for both standard items as well as for PJSIP have been added. * The 'max_forwards' standard item has been documented. Change-Id: Ifaa79a232c8ac99cf8da6ef6cc7815d398b1b79b 2016-08-15 07:17 +0000 [922b74169f] Joshua Colp * manager: Clarify that dialplan manipulation actions are under system class. ASTERISK-26246 #close Change-Id: Id673b9786389f9d2a87f638ce1a25161f5f31657 2016-08-11 22:12 +0000 [9debe1ca26] Corey Farrell * Run mandatory cleanup when startup fails. Errors during startup result in an exit. These error branches should be calling ast_run_atexit(0) to ensure mandatory cleanup is run. ASTERISK-26267 #close Change-Id: If226f2326ae2df7add20040696132214cf2bb680 2016-08-11 11:24 +0000 [d7534e016b] George Joseph * res_pjsip_caller_id: Copy header name to short header name When compact_headers was set, we were sending a zero-length header name for PAI and RPID because we always forced the short header name length to 0. We did this because we cloned the header from "From" and wanted to clear "f" from the sname. By cloning however, we bypass pjproject's automatic logic that sets sname to name if there's no compact form of the header, which there isn't for PAI and RPID. So now we force sname to be the same as name right after we set name. res_pjsip_diversion needed the same treatment for the Diversion header. ASTERISK-26241 #close Change-Id: I633ec139630cd83809aae00336cee4a10077e467 2016-08-11 11:13 +0000 [225fd1003f] Matt Jordan * app_queue: Prevent crash when a call is forwarded to an invalid location When a call forward attempt is made from a Queue member, the current code will hang up the forwarding channel in an off-nominal condition prior to raising the Stasis events informing the rest of Asterisk that the call was forwarded. This will result in a slew of dreaded FRACKs, most likely leading to a crash. This patch modifies the code such that we don't hang up the forwarding channel even in an off-nominal condition until we've safely raised the Stasis messages. ASTERISK-25797 #close Change-Id: Ife5abed351691fd79105321636eaa8ea8dcdba38 2016-08-11 12:18 +0000 [aeb859dba9] George Joseph * res_pjsip: Fail global load if debug or default_from_user are empty If debug was specified in the global configuration but left blank, the logger would treat it as a wildcard and log all hosts. If default_from_user was empty, a crash would result. The global apply handler now checks for empty strings. ASTERISK-26239 #close ASTERISK-26238 #close Change-Id: Ie75727f5cd5808845d92cc81f5713842fb203336 2016-08-01 15:07 +0000 [2275494e80] Richard Mudgett * res_pjsip res_pjsip_mwi: Misc fixes and cleanups. * Eliminated RAII_VAR() usage in ast_sip_persistent_endpoint_update_state(). * Added a missing allocation failure check to persistent_endpoint_find_or_create(). * Made persistent_endpoint_find_or_create() create the new object without a lock as it isn't needed. * Cleaned up some ao2 container allocation idioms. * Reordered res_pjsip_mwi.c load_module() and unload_module() Change-Id: If8ce88fbd82a0c72a37a2388f74f77237a6a36a8 2016-08-04 18:03 +0000 [d4ffbccef6] Richard Mudgett * location.c: Misc fixes and cleanups. * Eliminated most RAII_VAR() usage. * Added several missing allocation failure checks. * Made ast_sip_for_each_contact() allocate the wrapper ao2 object without a lock as it is not needed. Change-Id: Ie20913365156c95dd79e5d471cfd25e99ae880bc 2016-08-11 12:01 +0000 [36b2a40533] George Joseph * autohints: Update CHANGES and extensions.conf.sample Make it clear that we're talking about device state hints and add an entry to the sample config. Change-Id: Iaef58ffb960191a21b713e8e0b51ce1fcd47e433 2016-08-02 13:53 +0000 [4a5da6c9b4] Richard Mudgett * taskprocessor.c: Tweak high water checks. * The high water check in ast_taskprocessor_alert_set_levels() would trigger immediately if the new high water level is zero and the queue was empty. * The high water check in taskprocessor_push() was off by one. Change-Id: I687729fb4efa6a0ba38ec9c1c133c4d407bc3d5d 2016-08-03 16:24 +0000 [5ba6357be2] Richard Mudgett * res_pjsip: Make aor named lock a mutex. The named aor lock was always being locked for writes so a rwlock adds no benefit and may be slower because rwlocks are biased toward read locking. Change-Id: I8c5c2c780eb30ce5441832257beeb3506fd12b28 2016-07-29 17:41 +0000 [b6e03a5ff3] Richard Mudgett * pjsip_distributor.c: Add missing allocation failure check. Change-Id: I932ab2cea845e534d9ff318035b6de39972d3b28 2016-08-11 10:50 +0000 [ac0454f9fa] David M. Lee * Fixed compile flags for non-module libs The non-module libs libasteriskssl.dylib and libasteriskpj.dylib have long been missing the AST_NOT_MODULE compile flag. This was mostly okay, until a recent fix to improve compiler warnings when the AST_MODULE_SELF_SYM is missing broke the build on OS X/macOS/whatever they are calling it these days. Change-Id: I2cb51c890824f001280a5114f2e775f97c163516 2016-08-11 10:50 +0000 [b3c2f1164b] Kevin Harwell * alembic: add auth_username to endpoint's identify_by enum A new identify_by option was added recently, auth_username. However, this setting was not added as an allowable choice in the database enumeration value. This patch updates the current enumeration, adding in the new setting. ASTERISK-26268 #close Change-Id: Ib4788e8485e4cd40172ec0abbf5810a147ab8bf8 2016-08-08 14:50 +0000 [41aba83ff6] Richard Mudgett * res_srtp: Move SDP SRTP code from the core to res_srtp. A patch made to the master branch (Now the 14 branch) inadvertently made libsrtp a required dependency in order to compile Asterisk. Rather than create dummy defines to substitute for the defines supplied by libsrtp when libsrtp is not available, most of the code in sdp_srtp.c is moved into res_srtp.c. This gets more code out of Asterisk's core that isn't used when SRTP is not available. This also makes another inadvertent required dependency on libsrtp by Asterisk's core unlikely. ASTERISK-26253 #close Reported by: Ben Merrills Change-Id: I0a46cde81501c0405399c2588633ae32706d1ee7 2016-08-06 10:57 +0000 [820879415f] Alexei Gradinari * pjsip: Fix deadlock with suspend taskprocessor on masquerade If both channels which should be masqueraded are in the same serializer: 1st channel will be locked waiting condition 'complete' 2nd channel will be locked waiting condition 'suspended' On heavy load system a chance that both channels will be in the same serializer 'pjsip/distibutor' is very high. To reproduce compile res_pjsip/pjsip_distributor.c with DISTRIBUTOR_POOL_SIZE=1 Steps to reproduce: 1. Party A calls Party B (bridged call 'AB') 2. Party B places Party A on hold 3. Party B calls Voicemail app (non-bridged call 'BV') 4. Party B attended transfers Party A to voicemail using REFER. 5. When asterisk masquerades calls 'AB' and 'BV', a deadlock is happened. This patch adds a suspension indicator to the taskprocessor. When a session suspends/unsuspends the serializer it sets the indicator to the appropriate state. The session checks the suspension indicator before suspend the serializer. ASTERISK-26145 #close Change-Id: Iaaebee60013a58c942ba47b1b4930a63e686663b 2016-08-09 12:07 +0000 [d4170df40a] Kevin Harwell * alembic/sqlalchemy: auto increment only allowed on a single column The extensions table defined two columns (id and priority) as primary key autoincrement columns. However only one is allowed when defining the primary key. This patch removes the autoincrement attribute from the priority column since it does not need to be as such and really should not have been on there in the first place. This patch also removes 'context', 'exten', and 'priority' from the primary key index and creates a new combined unique contraint index on them. ASTERISK-26183 #close Change-Id: Ib9c712c612a4d7ec1edb0dcb77f1bae0905a470b 2016-08-10 11:47 +0000 [8d42ff784d] George Joseph * res_resolver_unbound: Allow compilation with libunbound version < 1.5 libunbound at version 1.4.20 (which CentOS still uses) declared all of their string function parameters as as 'char *'. 1.4.21 changed them all to 'const char *'. Thankfully 1.4.21 also introduced the UNBOUND_VERSION_MAJOR define so configure now checks for that and sets HAVE_UNBOUND_CONST_PARAMS. res_resolver_unbound then checks that and casts away the 'const' if it's not set. Tested compile and testsuite on CentOS6 (1.4.20), Ubuntu14 (1.4.22) and Fedora24 (1.5.4). There are a few failing tests to be addressed though. ASTERISK-26283 #close Change-Id: Ib708b19b706c5d0ba7b7d5473e6df339d9ae4148 2016-08-07 09:58 +0000 [c315460abb] Matt Jordan * channels/chan_pjsip: Add PJSIP_SEND_SESSION_REFRESH This patch adds a new PJSIP specific dialplan function, PJSIP_SEND_SESSION_REFRESH. When invoked on a PJSIP channel, the media session will be refreshed via either an UPDATE or re-INVITE request. When used in conjunction with the PJSIP_MEDIA_OFFER dialplan function, the formats in use on a PJSIP channel can be re-negotiated and changed dynamically after call setup. ASTERISK-26277 #close Change-Id: Ib98fe09ba889aafe26d58d32f0fd1323f8fd9b1b (cherry picked from commit eec60dd77394f0519895fc6abce3a6f90f6470f1) 2016-08-09 16:19 +0000 [8fe9f1f7f1] Mark Michelson * res_rtp_asterisk: Cache local RTCP address. When an RTCP packet is sent or received, res_rtp_asterisk generates a Stasis event that contains the RTCP report as well as the local and remote addresses that the report pertains to. The addresses are determined using ast_find_ourip(). For the local address, this will typically result in a lookup of the hostname of the server, and then a DNS lookup of that hostname. If you do not have the host in /etc/hosts, then this results in a full DNS lookup, which can potentially block for some time. This is especially problematic when performing RTCP reads, since those are done on the same thread responsible for reading and writing media. This patch addresses the issue by performing a lookup of the local address when RTCP is allocated. We then use this cached local address for the Stasis events when necessary. ASTERISK-26280 #close Reported by Mark Michelson Change-Id: I3dd61882c2e57036f09f0c390cf38f7c87e9b556 2016-08-08 19:14 +0000 [827457dca0] Corey Farrell * Produce friendly error when AST_MODULE_SELF_SYM is not defined. Modules must define AST_MODULE_SELF_SYM to be used as the name of a generated function. This produces a friendly error when it's not defined. ASTERISK-26278 #close Change-Id: Ib9d35a08104529c516d636771365e02c6e77a45b 2016-08-08 12:53 +0000 [403b63571c] Alexei Gradinari * res_pjsip_mwi: fix unsolicited mwi blocks PJSIP stack The PJSIP taskprocessors could be overflowed on startup if there are many (thousands) realtime endpoints configured with unsolicited mwi. The PJSIP stack could be totally unresponsive for a few minutes after boot completed. This patch creates a separate PJSIP serializers pool for mwi and makes unsolicited mwi use serializers from this pool. This patch also adds 2 new global options to tune taskprocessor alert levels: 'mwi_tps_queue_high' and 'mwi_tps_queue_low'. This patch also adds new global option 'mwi_disable_initial_unsolicited' to disable sending unsolicited mwi to all endpoints on startup. If disabled then unsolicited mwi will start processing on next endpoint's contact update. ASTERISK-26230 #close Change-Id: I4c8ecb82c249eb887930980a800c9f87f28f861a 2016-08-06 01:37 +0000 [0749f6e6f3] Rodrigo Ramírez Norambuena * res_odbc: Show only when there a fail attempt of connection in CLI When is executed CLI command "odbc show all" every time is show information about variable last_negative_connect. If not there a fail attempt of connection will show date like "1969-12-31 21:00:00". This patch fix there situation for to show only this information when exists a fail attempt before. Change-Id: I7c058b0be6f7642e922de75ee6b82c7276c9f113 2016-08-05 22:06 +0000 [b156a291af] Rodrigo Ramírez Norambuena * cdr_adaptive_odbc: Fix DNSs mixed config quote quoted_identifiers When haved more than once DNSs config and one of their dont set quoted_identifiers and before this is with configurated with quoted_identifiers resulting a truncate statement for a reference null for quote character identifier. This patch initializes quoted flag before build SQL Query Example config for this bugfix case in cdr_adaptive_odbc.conf file [first] connection=asterisk-server1 table=cdr quoted_identifiers=" [second] connection=asterisk-server2 table=cdr [third] connection=asterisk-server3 table=cdr quoted_identifiers=` Change-Id: Ibd95667b468e10d4a19a2b9d88b9934ec7207e1d 2016-08-05 15:34 +0000 [9042ad40f2] Alexei Gradinari * app_voicemail: Add taskprocessor alert level options. On heavy loaded system with IMAP or DB storage, 'app_voicemail' taskprocessor queue could reach 500 scheduled tasks. It could happen when the IMAP or DB server dies or is unreachable. It could happen on startup when there are many (thousands) realtime endpoints configured with unsolicited mwi. If the taskprocessor queue reaches the high water level then the alert is triggered and pjsip stops processing new requests until the queue reaches the low water level to clear the alert. This patch adds 2 new 'general' configuration options to tune taskprocessor alert levels: 'tps_queue_high' - Taskprocessor high water alert trigger level. 'tps_queue_low' - Taskprocessor low water clear alert level ASTERISK-26229 #close Change-Id: I766294fbffedf64053c0d9ac0bedd3109f043ee8 2016-08-04 10:16 +0000 [54869e4823] Joshua Colp * res_pjsip_outbound_publish: Use a serializer shutdown group for unload. This change replaces the custom unload process for the outbound publish module with the common serializer shutdown group. ASTERISK-25217 #close Change-Id: I280a0384d860c486202d87d2d674394cca77ffb6 2016-08-04 10:27 +0000 [e711e57106] Kevin Harwell * resource_channels: Sync with ARI stubs This file was out of sync with the current ARI definitions. Change-Id: Ie7cb7d6d3c2eeb9cc9d683ca87b43b117e713d0a 2016-08-03 15:41 +0000 [29b0f733a0] Corey Farrell * Add missing checks during startup. This ensures startup is canceled due to allocation failures from the following initializations. * channel.c: ast_channels_init * config_options.c: aco_init ASTERISK-26265 #close Change-Id: I911ed08fa2a3be35de55903e0225957bcdbe9611 2016-08-03 09:47 +0000 [90b30b21ac] Joshua Colp * astconfigparser: Really handle case where line is simply a comment. The regular expression would match causing the code that handled the line if it was merely a comment to never get executed. Change-Id: I3e4022481037ebcba9905587fe8c764b4ce21819 2016-08-01 11:08 +0000 [73bce50ef8] Joshua Colp * sorcery: Use more compatible regex for local expressions. This changes the use of an empty regex for both res_sorcery_config and res_sorcery_memory to "." instead. This is a more compatible regular expression which also works on FreeBSD. ASTERISK-26206 #close Change-Id: Ia9166dd176f1597555ba22b6931180d0626c1388 2016-08-02 03:08 +0000 [3ff964c6b6] Alexander Traud * res_pjsip: SIP/SDP origin (o=) contained square brackets on IP6 transports. ASTERISK-26256 #close Change-Id: I3fd68df561f81fdb8c6c497d465b50c12422f058 2016-08-01 16:13 +0000 [f6276441b1] George Joseph * menuselect: Add an opaque "member_data" string to the acceptable xml Change-Id: Id5ac43b95c8d7395f3be37f983632169db3d1afe 2016-07-29 13:13 +0000 [1cd79d6ee5] 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 2016-07-29 04:48 +0000 [a7ae48441f] Joshua Colp * astconfigparser: Handle case where line is simply a comment. Change-Id: I2dea5815363f4d787d709228a04f33baee383ef5 2016-07-28 14:10 +0000 [89a0a1eb45] Corey Farrell * pbx.c: Fix handling of '-' in extension name and callerid This adds a two strings to ast_exten. name to go with exten and cidmatch_display to go with cidmatch. The new fields contain input used to add the extension in the first place. The existing fields now contain stripped input that excludes insignificant spaces and dashes. These stripped fields should always be used for comparisons. The unstripped fields should normally be used for display, but displaying stripped values will not cause runtime errors. Note the actual string is only stored twice if it contains dashes. If no dashes are found then both 'char *' fields point to the same memory. So this change has a minimum effect on memory usage. The existing functions ast_get_extension_name and ast_get_extension_cidmatch return unstripped values as they did before this change. Other similar bugs likely still exist where unstripped extensions are saved outside pbx.c then passed back in. ASTERISK-26233 #close Change-Id: I6cd61ce57acc1570ca6cc14960c4c3b0a9eb837f 2016-07-27 17:17 +0000 [68ebf86e2f] Richard Mudgett * pbx.c: Allow dangerous functions when adding a hint to dialplan. We can allow dangerous functions when adding a hint since altering dialplan is itself a privileged activity. Otherwise, we could never execute dangerous functions. ASTERISK-25996 #close Reported by: Andrew Nagy Change-Id: I4929ff100ad1200a0198262d069a34f2296e77ba 2016-07-21 10:36 +0000 [b5bc2fdda8] Alexei Gradinari * pjproject: fixed a few bugs This patch fixes the issue in pjsip_tx_data_dec_ref() when tx_data_destroy can be called more than once, and checks if invalid value (e.g. NULL) is passed to. This patch updates array limit checks and docs in pjsip_evsub_register_pkg() and pjsip_endpt_add_capability(). Change-Id: I4c7a132b9664afaecbd6bf5ea4c951e43e273e40 2016-07-17 18:28 +0000 [b4f1c6380e] George Joseph * 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 2016-07-27 10:33 +0000 [feb1a43412] David M. Lee * Portably sscanf tv_usec In a timeval, tv_usec is defined as a suseconds_t, which could be different underlying types on different platforms. Instead of trying to scanf directly into the timeval, scanf into a long int, then copy that into the timeval. Change-Id: I29f22d049d3f7746b6c0cc23fbf4293bdaa5eb95 2016-07-27 12:36 +0000 [1d364ac54f] Kevin Harwell * rtp_engine: Failed assertion and wrong name given for codec Fixed an assert check that would trigger when the passed in value was negative. The negative value was being cast to an unsigned value. This resulted in the check failing. Also fixed another problem when loading formats in the engine. When setting the mime type the format's name was being passed in instead of the codec's name. Change-Id: I1a201cd419ba4d8e9a40d337e36b6fbe1737192c 2016-07-27 09:56 +0000 [8802e55c26] David M. Lee * Replace strdupa with more portable ast_strdupa The strdupa function is a GNU extension, and not widely portable. We have an ast_strdupa function used within Asterisk which is preferred. I pulled the definition up from menuselect.c into the menuselect.h header file so it can be shared across menuselect. Change-Id: I9593c97f78386b47dc1e83201e80cb2f62b36c2e 2016-07-21 22:44 +0000 [737471f131] Richard Mudgett * dsp.c: Add fax and DTMF detection unit tests. * Add fax amplitude and frequency sweep tests. * Add DTMF amplitude and twist unit tests. Change-Id: I8d77c9a1eec89e440d715f998c928687e870c3f7 2016-07-21 11:56 +0000 [a8cd5d255a] Richard Mudgett * dsp.c: Added descriptive comments to Goertzel calculations. * Added doxygen to describe some struct members and what is going on in the code. Change-Id: I2ec706a33b52aee42b16dcc356c2bd916a45190d 2016-07-13 13:48 +0000 [6dfb34cf13] Richard Mudgett * dsp.c: Fix incorrect format reference typo. Change-Id: Ia131da3ec29acf385cb43a586a29ecc975eb3896 2016-07-25 21:18 +0000 [327136088e] Richard Mudgett * dsp.c: Correct DTMF twist dsp.conf documentation. Change-Id: Idf97e3a72f1edc5fca58f2fa7b20785922be0cae 2016-07-22 04:43 +0000 [1e7168aee0] Joshua Colp * astconfigparser.py: Update with realtime fixes. When configuring SIP URIs in the pjsip.conf file it is necessary to escape the semicolon so the parser does not treat it as a comment. This change allows this to work in the astconfigparser implementation. A secondary bug where some data was lost if a configuration option included a "=" in its value was also fixed. A bug where sections would be considered equal despite being different has also been fixed. Change-Id: If229f656ef22050b50e7b34e90c4bffe796431f8 2016-07-21 22:28 +0000 [49461f37b7] 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-24 18:27 +0000 [b4c5dcad01] George Joseph * menuselect: Various menuselect enhancements * Add 'external' as a support level. * Add ability for module directories to add entries to the menu by adding members to the /.xml file. * Expand the description field to 3 lines in the ncurses implementation. * Allow the description field to wrap in the newt implementation. * Add description field to the gtk implementation. Change-Id: I7f9600a1984a42ce0696db574c1051bc9ad7c808 2016-07-24 16:51 +0000 [9db420c69d] Joshua Colp * ari: Update version. New functionality has been added so the version has been bumped to one over the 13 version. Change-Id: I5d30077f62640c0ac83599b4e9a9b657bf184f69 2016-07-23 08:51 +0000 [8852a4c3db] George Joseph * asterisk.c: Add auto generation and persistence of UUID Upcoming features will require the generation and persistence of a UUID. Change-Id: I3ec0062427e133217db6ef496a4216f427c3b92d 2016-07-22 14:44 +0000 [76781a0964] 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-19 06:16 +0000 [9be69c1636] 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-19 13:39 +0000 [8fb807009f] Alexander Traud * codecs: Add iLBC 20. Asterisk already supported iLBC 30. This change adds iLBC 20. Now, Asterisk defaults to iLBC 20 but falls back to iLBC 30, when the remote party requests this. ASTERISK-26218 #close ASTERISK-26221 #close Reported by: Aaron Meriwether Change-Id: I07f523a3aa1338bb5217a1bf69c1eeb92adedffa 2016-07-15 16:16 +0000 [4286a369a1] Richard Mudgett * res_pjsip: Whitespace and comment cleanup. Change-Id: I11139a4a95df34e223ba622aa6227e33ab8f6c38 2016-07-21 22:34 +0000 [68de3a9e51] Corey Farrell * pbx.c: Remove duplicate code. Merge code found in both branches of a conditional in ast_add_extension2_lockopt. The updated code initializes peer_table and peer_label_table of the extension before linking it to the context. Change-Id: Ic759e27cdc9906c6877df41d28ee9c5be8f41c20 2016-07-21 16:35 +0000 [15bf6a87dc] George Joseph * Create Asterisk-14: Update CHANGES and UPGRADE files Change-Id: I35b5f6657670cfa8985796fa1e1fe86ad299efdc 2016-07-21 09:05 +0000 [1b4922466b] George Joseph * 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-15 19:28 +0000 [a36a174c4b] Corey Farrell * pbx: Create pbx_sw.c for management of 'struct ast_sw'. This changes context switches from a linked list to a vector, makes 'struct ast_sw' opaque to pbx.c. Although ast_walk_context_switches is maintained the procedure is no longer efficient except for the first call (inc==NULL). This functionality is replaced by two new functions implemented by vector macros. * ast_context_switches_count (AST_VECTOR_SIZE) * ast_context_switches_get (AST_VECTOR_GET) As with ast_walk_context_switches callers of these functions are expected to have locked contexts. Only a few places in Asterisk walked the switches, they have been converted to use the new functions. Change-Id: I08deb016df22eee8288eb03de62593e45a1f0998 2016-07-21 10:28 +0000 [81ea024d93] 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-13 05:24 +0000 [1d2173c7ae] Alexander Traud * res_srtp: Enable AES-256 and AES-GCM. ASTERISK-26190 #close Change-Id: I11326d80edd656524a51a19450e586c583aa0a0b 2016-07-18 22:46 +0000 [8f6e9ffcc6] 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 [3d62f317dd] 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 [db4979fa79] 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 [3db468ea9e] 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 [9abbea162c] 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 [804fbd9c2b] 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 [0d1744e132] 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 [e739888d99] 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 [6fca2b3bf0] 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:40 +0000 [cf1188a1be] 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 09:22 +0000 [e9daa34261] 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-07-18 05:13 +0000 [cb5e3445be] 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 [6428580e7f] Alexander Traud * Makefile: Suppress echoing of target 'config' again. ASTERISK-26038 #close Change-Id: I5746cf639f3fdc6332e8a97cf01f979e30bf403f 2016-07-15 02:59 +0000 [e2e8713b84] Corey Farrell * pbx: Create pbx_ignorepat.c for management of 'struct ast_ignorepat'. This changes context ignore patterns from a linked list to a vector, makes 'struct ast_ignorepat' opaque to pbx.c. Although ast_walk_context_ignorepats is maintained the procedure is no longer efficient except for the first call (inc==NULL). This functionality is replaced by two new functions implemented by vector macros. * ast_context_ignorepats_count (AST_VECTOR_SIZE) * ast_context_ignorepats_get (AST_VECTOR_GET) As with ast_walk_context_ignorepats callers of these functions are expected to have locked contexts. Only a few places in Asterisk walked the ignorepats, they have been converted to use the new functions. Change-Id: I78f2157d275ef1b7d624b4ff7d770d38e5d7f20a 2016-07-17 07:43 +0000 [d56fc3b36b] Alexander Traud * translate: Enables native Packet-Loss Concealment (PLC) for supporting codecs. ASTERISK-25629 #close Change-Id: I66c0086e6c17764b8141ec60a3e2aaefe088eb78 2016-07-14 13:51 +0000 [be36bd7ca5] Corey Farrell * pbx: Create pbx_include.c for management of 'struct ast_include'. This changes context includes from a linked list to a vector, makes 'struct ast_include' opaque to pbx.c. Although ast_walk_context_includes is maintained the procedure is no longer efficient except for the first call (inc==NULL). This functionality is replaced by two new functions implemented by vector macros. * ast_context_includes_count (AST_VECTOR_SIZE) * ast_context_includes_get (AST_VECTOR_GET) As with ast_walk_context_includes callers of these functions are expected to have locked contexts. Only a few places in Asterisk walked the includes, they have been converted to use the new functions. const have been applied where possible to parameters for ast_include functions. Change-Id: Ib5c882e27cf96fb2aec67a39c18b4c71c9c83b60 2016-07-14 03:25 +0000 [d3348c51b5] 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-06-30 15:58 +0000 [273052f404] 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 [31967dacdf] 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 [f3608b50d7] 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 [63ac4c9487] 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 [2f26512fd8] 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-11 10:22 +0000 [bc1ff41be7] 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 [eabcfeeaa3] 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 13:45 +0000 [f73ddde7d4] 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-07-13 11:30 +0000 [fd54d69feb] 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-06-22 07:13 +0000 [85212f2799] 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-06-24 19:55 +0000 [0d487b53b1] 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 [c49833653b] 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 [f12311ee69] 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-13 08:57 +0000 [a3f4141f6f] 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 20:07 +0000 [886f2cab23] George Joseph * rest_api/channels: Fix multiple issues with create and dial * We weren't properly subscribing to the channel and it's originator on create. * We weren't doing a publish_dial after calling ast_call on dial. * We weren't calling depart_bridge when a channel left the dial bridge. The first 2 issues were causing events to not be generated and the third was actually causing channels to not get properly destroyed when hung up. Together these 3 issues were causing the new rest_apichannels/create_dial_bridge tests to fail. As a result of the fixes, the cdr state machine had to be slightly tweaked to allow bridge leave events without asserting and the tests themselves had to be updated to account for the channels now cleaning themselves up. Change-Id: Ibf23abf5a62de76e82afb4461af5099c961b97d8 2016-07-11 10:25 +0000 [b85446d039] 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-10 19:08 +0000 [4ad333bb0e] 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-12 03:50 +0000 [110b01a0bc] 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 [44f16af7cc] 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 [8476a9332f] 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-09 13:32 +0000 [ad30d60c69] 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:44 +0000 [7408c51a48] 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-04 16:38 +0000 [c832f100d9] 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-07-07 10:38 +0000 [302be4809a] 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-07 10:55 +0000 [fb96492ec4] 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-06 09:29 +0000 [1c949eea6c] 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 [32cb981d04] 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-22 17:26 +0000 [9f2c007254] 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 [08d3b9a89e] 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 [e6e12c752c] 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 [5d2fc6bab7] Richard Mudgett * res_pjsip_session.c: Remove unused parameter from handle_incoming(). Change-Id: Iedd182d189ec947c42edc2c66c4bda3c22060daa 2016-06-22 18:02 +0000 [656ed73ac6] 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 15:17 +0000 [4f7b859726] 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-30 08:25 +0000 [5ad7e1c09a] George Joseph * 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 [dab2a6b689] 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 [9129ac8e73] 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 [4045e6d8ba] George Joseph * 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 [651290a809] George Joseph * 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 [83f2c2573b] 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 [75818b4084] 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 [6e87bf746a] 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-22 15:04 +0000 [8c7017f76e] 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 14:25 +0000 [6fa3ed0679] 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-22 13:41 +0000 [d293ead077] George Joseph * 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 [c7309a5254] George Joseph * 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:21 +0000 [b6bd97eea2] 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. In addition, the head of the alembic branch referred to a non-existent revision. This has been fixed by referring to the proper revision. 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 introduces a new boolean type that translates to "yes" or "no" instead. ASTERISK-26128 #close Change-Id: I51574736a881189de695a824883a18d66a52dcef 2016-06-22 10:51 +0000 [3b4f5d1345] George Joseph * 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-22 10:55 +0000 [5f23aacda4] 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-21 06:52 +0000 [804005d251] 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 [f572b26495] Richard Mudgett * res_pjproject.c: Replace inlined DEBUG_ATLEAST() with macro. Change-Id: I8799fb0a347ad76e747dafd0eacf1ea1086b9a8c 2016-06-12 11:19 +0000 [b57cd01404] George Joseph * 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 [6eb0354f2d] 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 [596d0b0bc3] 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 [9e222efbf2] 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 [e94aae00a7] 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 [0a30008224] Richard Mudgett * app_voicemail.c: Fix IMAP compile error. Fix compile error introduced by the patch for ASTERISK-26045 Change-Id: I5b02876266f2824f4cec2b54d6ff4db5de5778d3 2016-06-17 13:51 +0000 [820ed3d4b3] Alexei Gradinari * fix: memory leaks, resource leaks, out of bounds and bugs ASTERISK-26119 #close Change-Id: Iecbf7d0f360a021147344c4e83ab242fd1e7512c 2016-06-13 17:40 +0000 [11caa10cf5] 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 [f72ffc1ff9] 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-18 17:37 +0000 [3c80f84cd0] 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 [7c59f2126f] Richard Mudgett * res_pjsip.c: Add check that timer actually got scheduled. Change-Id: Iabaa2e5dccf0762c258101ea0eb1487cf6959ad1 2016-06-13 13:33 +0000 [51cc5c31c4] Richard Mudgett * res_rtp_multicast.c: Fix warning message typo. Change-Id: Ic9928208b9957e09866abe3d9649030942ec52b3 2016-02-11 18:15 +0000 [3d0632a9c2] Richard Mudgett * res_pjsip_session.c: Reorganize ast_sip_session_terminate(). Change-Id: I68a2128bcba4830985d2d441e70dfd1ac5bd712b 2016-06-08 06:15 +0000 [ac683f13c9] 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-10 10:39 +0000 [4eb8cf2684] Joshua Colp * translate: Enables native Packet-Loss Concealment (PLC) for supporting codecs. This reverts commit 5bfef2a8b4674382f959b21a3b8e14cf1d942bab as it caused fax test failures. ASTERISK-25629 Change-Id: I79de974dc4f63a1cafe0d2509169fd9a6b3cbaf4 2016-06-08 06:05 +0000 [0bf1a53db3] Alexander Traud * astfd: With RLIMIT_NOFILE only the current value is sensible. With menuselect "DEBUG_FD_LEAKS" and CLI "core show fd", both the maximum max and current max of possible file descriptors were shown. Both show the same value always. Not to confuse users, just the current maximum is shown now. ASTERISK-26097 Change-Id: I49cf7952d73aec9e3f6a88942842c39be18380fa 2016-06-07 18:45 +0000 [d338343dac] 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-01 13:48 +0000 [1fd3a7849e] Mark Michelson * ARI: Ensure proper channel state on operations. ARI was recently outfitted with operations to create and dial channels. This leads to the ability to try funny stuff. You could create a channel and then immediately try to play back media on it. You could create a channel, dial it, and while it is ringing attempt to make it continue in the dialplan. This commit attempts to fix this by adding a channel state check to operations that should not be able to operate on outbound channels that have not yet answered. If a channel is in an invalid state, we will send a 412 response. ASTERISK-26047 #close Reported by Mark Michelson Change-Id: I2ca51bf9ef2b44a1dc5a73f2d2de35c62c37dfd8 2016-06-08 11:27 +0000 [10019dc70c] Mark Michelson * test_http_media_cache: Fix failing test. The retrieve_cache_control_directives test has been failing occasionally in Jenkins. The apparent failure occurs when attempting to validate the expiration of the retrieved file. After reproducing, the problem was pretty clear. At the beginning of the test, the current time is retrieved. The seconds value of this timestamp is X. When the file is retrieved, res_http_media_cache calculates the expiration and in doing so retrieves the current time. In most cases, since the test executes quickly, it will also retrieve a timestamp with X seconds. However, if the test starts very near to when the timestamp seconds are set to increment, res_http_media_cache may retrieve a timestamp with X+1 seconds instead. The test attempted to account for this by allowing a tolerance of 1 second when validating the expiration. However, the problem was that the comparisons being used in the validation used > and < operations. This meant that values that fell within the tolerance (because they equaled the upper bound of the tolerance) would fail. The solution is to use >= and <= operators in the expiration validation. However, I estimated that while the one second tolerance should be fine on most machines, it would still be possible on a very slow machine to end up falling outside the one second tolerance. So I have also relaxed the tolerance of expiration validation to be three seconds instead. The final change here is to add a debug message when validating expiration so that we can see what values are being compared. ASTERISK-25959 #close Reported by Joshua Colp Change-Id: Ic1a0e10722c1c5d276d5a4d6a67136d6ec26c247 2016-06-03 01:20 +0000 [56bdf048d2] Timo Teräs * Add support for OGG/Speex file format ASTERISK-18995 #close Change-Id: I98518bd28fc8f95668b3fe27d2cab45045ff3f7a 2016-06-09 10:33 +0000 [f0855358a6] George Joseph * cdr.c: Remove assert in base_process_dial_end Scenario: Caller blonde transfer Bob calls Charlie who answers. Bob puts Charlie on hold and calls Alice. Before Alice answers, Bob transfers Charlie to Alice. Charlie's channel triggers an assert because he gets an "ANSWERED" event even though he never dialed anything. With recent changes to dial events, this is now a valid scenario so the assert needed to be removed. ASTERISK-26103 #close Change-Id: I2679b517b696e7952ab7fb29403df9140e7d1de2 2016-06-09 10:37 +0000 [cdb7edbe7b] 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-03 22:44 +0000 [04ec9c745e] 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 [dcfef53ee2] 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 [4879cd875c] 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 [2cd67d5b07] 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 [c966a035e0] 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 [5b7b16a87f] 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 [c2ae49249c] 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 [2ff26e9746] 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 [df2791da8f] 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-09 09:20 +0000 [d21a77b325] George Joseph * 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-03 00:59 +0000 [72d190eb69] Timo Teräs * Detect and use proper libraries for musl toolchains Change-Id: I8d9b212f70813404b82918a3f99439e500d4bfcb 2016-06-03 00:57 +0000 [39b69ab537] Timo Teräs * Fixes to include signal.h POSIX defines signal.h. sys/signal.h should not be used as it is c-library internal header which may or may not exist. Notably with musl it generates warning of being incorrect. Change-Id: Ia56b0aa1d84b5c590114867b1b384a624f39a6fc 2016-06-08 12:26 +0000 [7f5ca67e5f] 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 02:11 +0000 [784c18128b] Alexander Traud * chan_sip: No rtpmap for static RTP payload IDs in SDP. This saves around 100 bytes when G.711, G.722, G.729, and GSM are advertised in SDP. This reduces the chance to hit the MTU bearer of 1300 bytes for SIP over UDP, if many codecs are allowed in Asterisk. This new feature is enabled together with the optional feature compactheaders=yes via the file sip.conf. ASTERISK-25578 #close Change-Id: I16491b1937862de26f84fa0ffe679a6bab925044 2016-06-02 12:04 +0000 [31a5c28339] 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-05-31 09:10 +0000 [80ff7912a1] 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-06-06 11:13 +0000 [60caebc738] Örn Arnarson * apps/app_voicemail.c and main/say.c: Add support for Icelandic language Icelandic has some weird grammar rules when dealing with dates and numbers. There are different genders used depending on which number you're dealing with, and only a handful of numbers do change depending on the gender. There is also an implied gender in several cases. This patch was originally written for asterisk 1.6, and has been in use for several years without crashes. I cleaned it up a bit and rewrote what was necessary for Asterisk 13. The functions were copied from other similar languages and modified where appropriate. If i recall correctly, the German and Danish functions were used as a base. ASTERISK-26087 Reported by: Örn Arnarson Tested by: Örn Arnarson Change-Id: Ib7d8bd7b0fede5767921ed821315b5b508c0e665 2016-06-07 05:45 +0000 [52120204c9] 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 [da943ec5c0] 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-06-01 16:57 +0000 [dca052e531] Richard Mudgett * chan_rtp.c: Simplify options to UnicastRTP channel creation. Change the awkward and not as flexible UnicastRTP options format From: Dial(UnicastRTP/127.0.0.1[/[][/[]]]) To: Dial(UnicastRTP/127.0.0.1[/[]]) Where can be standard Asterisk flag options: c() - Specify which codec/format to use such as 'ulaw'. e() - Specify which RTP engine to use such as 'asterisk'. More option flags can be easily added later such as the codec's RTP payload type to use when the codec does not have a static payload type defined. Change-Id: I0c297aaf09e2ee515536cb7437bb8042ff8ff3c9 2016-05-02 05:57 +0000 [5bfef2a8b4] Jaco Kroon * translate: Enables native Packet-Loss Concealment (PLC) for supporting codecs. ASTERISK-25629 #close Change-Id: Ibfcf0670e094e9718d82fd9920f1fb2dae122006 2016-05-25 10:34 +0000 [3e8d523d88] 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-27 14:49 +0000 [a2f820e8dc] George Joseph * 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-03 01:33 +0000 [538c6415c6] Timo Teräs * chan_sip: Support auth username for callbackextension feature ASTERISK-20527 #close Change-Id: I659cf7f00836a09d09d146ad226a40477d731239 2016-06-03 00:39 +0000 [797695c5cc] Timo Teräs * Make use of GLOB_BRACE and GLOB_NOMAGIC optional These flags are non-portable GNU extensions. Make their use optional. This fixes complication error on e.g. musl c-library based systems. Change-Id: I0aa06efc62aa8995f091445c8b762a75a91042f3 2016-06-02 14:57 +0000 [3c1fec8099] Timo Teräs * Fix res_search usage Resolver state is not part of res_search API. This fixes compilation error: dns.c:261:8: error: too many arguments to function 'res_search' ret = res_search(&dns_state, Change-Id: Ia600a58557040df83f744da3dde23225293845a5 2016-06-02 14:53 +0000 [9c1d95e873] 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-05-25 08:45 +0000 [8a5c2e736c] Niklas Larsson * core/manager: Add uptime field to FullyBooted Add Uptime and LastReload to event FullyBooted. ASTERISK-26058 #close Reported by: Niklas Larsson Change-Id: I909b330801c0990d78df9b272ab0adc95aecb15e 2016-06-02 04:59 +0000 [4505a59dc9] 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 [40d19f2e55] 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-31 13:02 +0000 [aec7916595] 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-09 15:00 +0000 [205a31f86c] Mark Michelson * Expand the scope of Dial Events Dial events up to this point have come in two flavors * A Dial event with no status to indicate that dialing has begun * A Dial event with a status to indicate that dialing has ended With this change, Dial events have been expanded to also give intermediate events, such as "RINGING", "PROCEEDING", and "PROGRESS". This is especially useful for ARI dialing, as it gives the application writer the opportunity to place a channel into an early bridge when early media is detected. AMI handles these in-progress dial events by sending a new event called "DialState" that simply indicates that dial state has changed but has not ended. ARI never distinguished between DialBegin and DialEnd, so no change was made to the event itself. Another change here relates to dial forwards. A forward-related event was previously only sent when a channel was successfully able to forward a call to a new channel. With this set of changes, if forwarding is blocked, we send a Dial event with a forwarding destination but no forwarding channel, since we were prevented from creating one. This is again useful for ARI since application writers can now handle call forward attempts from within their own application. ASTERISK-25925 #close Reported by Mark Michelson Change-Id: I42cbec7730d84640a434d143a0d172a740995543 2016-05-30 19:27 +0000 [8a6a14590d] George Joseph * 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 [7fa5766752] George Joseph * 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 [b56f611856] 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-26 15:14 +0000 [bb0f4a6310] Mark Michelson * multicast RTP: Add dialing options This adds a new parameter to the end of a multicast RTP dialing string. This parameter defines the following options: * i: Set the interface from which multicast RTP is sent * l: Set whether multicast packets are looped back to the sender * t: Set the TTL for multicast packets * c: Set the codec to use for RTP ASTERISK-26068 #close Reported by Mark Michelson Change-Id: I033b706b533f0aa635c342eb738e0bcefa07e219 2016-05-09 14:48 +0000 [88d997913f] Mark Michelson * ARI: Re-implement the ARI dial command, allowing for early bridging. ARI dial had been implemented using the Dial API. This made great sense when dialing was 100% separate from bridging. However, if a channel were to be added to a bridge during the dial attempt, there would be a conflict between the dialing thread and the bridging thread. Each would be attempting to read frames from the dialed channel and act on them. The initial attempt to make the two play nice was to have the Dial API suspend the channel in the bridge and stay in charge of the channel until the dial was complete. The problem with this was that it was riddled with potential race conditions. It also was not well-suited for the case where the channel changed which bridge it was in during the dial. This new approach removes the use of the Dial API altogether. Instead, the channel we are dialing is placed into an invisible ARI dialing bridge. The bridge channel thread handles incoming frames from the channel. If the channel is added to a real bridge, it is departed from the invisible bridge and then added to the real bridge. Similarly, if the channel is removed from the real bridge, it is automatically added back to the invisible bridge if the dial attempt is still active. This approach keeps the threading simple by always having the channel being handled by bridge channel threads. ASTERISK-25925 Change-Id: I7750359ddf45fcd45eaec749c5b3822de4a8ddbb 2016-05-19 14:56 +0000 [31f17abe44] 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 [574c9e77eb] 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-05-20 13:56 +0000 [b3142e99e4] 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-25 18:30 +0000 [7d44d12816] 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-03 11:11 +0000 [1d60bfcdf1] Tzafrir Cohen * followme: allow disabling callee prompt Add the option 'enable_callee_prompt' to followme.conf. Enabled by default. If disabled, a callee is not prompted to accept or reject the forwarded call. ASTERISK-26064 #close Change-Id: I0a8b19d4cf95c86a07c992813babb9e4a4acfff5 Signed-off-by: Tzafrir Cohen 2016-02-12 09:59 +0000 [80ff2c2540] 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-24 05:28 +0000 [070eab6ed2] Joshua Colp * res_pjsip_outbound_publish: Ensure publish is valid when explicitly destroying. Recent changes to res_pjsip_outbound_publish have introduced a race condition at shutdown where an outbound publish may be shutdown twice. In this case the first succeeds as a result of the unpublish. In the second invocation since it's been unpublished a task is queued to just destroy the client. This task holds no ref to the publish and as a result the publish may be destroyed before the task is run, causing a crash. This explicit destruction task now holds a reference to the publish to ensure it remains valid. ASTERISK-26053 #close Change-Id: I10789b98add3e50292ee3b33a55a1d9061cec94b 2016-05-09 14:27 +0000 [f6c33771f6] Mark Michelson * Bridging: introduce "invisible" bridges. Invisible bridges function the same as normal bridges, but they have the following restrictions: * They never show up in CLI, AMI, or ARI queries. * They do not have Stasis messages published about them. Invisible bridges' main use is for when use of the bridging system is desired, but the bridge should not be known to users of the Asterisk system. ASTERISK-25925 Change-Id: I804a209d3181d7c54e3d61a60eb462e7ce0e3670 2016-05-22 11:03 +0000 [85d0272e76] Joshua Colp * res_pjsip: Only check transaction on transaction state events. The send request callback function currently assumes that it will only ever be called on transaction state changes. This is not always true. If our own timer callback occurs we will call the callback with a timer event instead of a transaction state change event. In this case the transaction on the event is invalid and accessing it will result in a crash. ASTERISK-26049 #close Change-Id: I623211c8533eb73056b0250b4580b49ad4174dfc 2016-05-21 05:42 +0000 [31897d2d99] 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 19:03 +0000 [2a77af9ed0] Richard Mudgett * chan_rtp.c: Cleanup ast_request() parameter parsing. * Fixed NULL crash potential if parameters are missing. * Reordered some operations so further diagnostic messages can be more helpful. Change-Id: Ibbdc67a2496508cbfbfef0cf19c35177ae2fbd70 2016-05-20 16:59 +0000 [ade5275a3e] Richard Mudgett * parking.h: Update ast_parking_park_call() doxygen to reality. ASTERISK-26029 Change-Id: I2db14d102a48d3224010e6d1c69e856373cc1260 2016-05-12 15:18 +0000 [c378b00a83] 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: I7091783a7150252de8eeb455115bd00514dfe843 2016-05-20 09:39 +0000 [1c02b19b79] 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-18 06:19 +0000 [e773e3a9bb] Matt Jordan * ARI: Add the ability to download the media associated with a stored recording This patch adds a new feature to ARI that allows a client to download the media associated with a stored recording. The new route is /recordings/stored/{name}/file, and transmits the underlying binary file using Asterisk's HTTP server's underlying file transfer facilities. Because this REST route returns non-JSON, a few small enhancements had to be made to the Python Swagger generation code, as well as the mustache templates that generate the ARI bindings. ASTERISK-26042 #close Change-Id: I49ec5c4afdec30bb665d9c977ab423b5387e0181 2016-05-19 11:41 +0000 [40cb032009] 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 [9766a12b4c] 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 10:58 +0000 [111c4b0324] 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-10 11:28 +0000 [d4b77dad1b] Joshua Colp * res_pjsip_exten_state: Use the extension for publishing to. This change uses the newly added multi-user support for outbound publish to publish to the specific user that an extension state change is for. This also extends the res_pjsip_outbound_publish support to include the user specific From and To URI information in the outbound publishing of extension state. Since the URI is used when constructing the body it is important to ensure that the correct local and remote URIs are used. Finally the max string growths for the dialog-info+xml body generator has been increased as through testing it has proven to be too conservative. ASTERISK-25965 Change-Id: I668fdf697b1e171d4c7e6f282b2e1590f8356ca1 2016-05-03 16:07 +0000 [3905997bae] Kevin Harwell * res_pjsip_outbound_publish: Add multi-user support per configuration Added a new multi_user option that when specified allows a particular configuration to be used for multiple users. It does this by replacing the user portion of the server uri with a dynamically created one. Two new API calls have been added in order to make use of the new functionality: ast_sip_publish_user_send - Sends an outgoing publish message based on the given user. If state for the user already exists it uses that, otherwise it dynamically creates new outbound publishing state for the user at that time. ast_sip_publish_user_remove - Removes all outbound publish state objects associated with the user. This essentially stops outbound publishing for the user. ASTERISK-25965 #close Change-Id: Ib88dde024cc83c916424645d4f5bb84a0fa936cc 2016-05-18 07:54 +0000 [6e5e84458f] George Joseph * 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-15 12:22 +0000 [52148d93f4] Matt Jordan * CHANGES: Update formatting of items * Provide consistent indenting of lines in bulleted paragraphs * Respect the 80 character column width * Group all like items together, e.g., all dialplan applications under "Applications", etc. * Use a single blank line to break up functionality changes within a larger section * Use two blanks lines to delineate larger sections Change-Id: I0488554f5cb7c51da70003d69288a21c9aab9647 2016-04-18 18:17 +0000 [03d88b5656] Matt Jordan * ARI: Add the ability to play multiple media URIs in a single operation Many ARI applications will want to play multiple media files in a row to a resource. The most common use case is when building long-ish IVR prompts made up of multiple, smaller sound files. Today, that requires building a small state machine, listening for each PlaybackFinished event, and triggering the next sound file to play. While not especially challenging, it is tedious work. Since requiring developers to write tedious code to do normal activities stinks, this patch adds the ability to play back a list of media files to a resource. Each of the 'play' operations on supported resources (channels and bridges) now accepts a comma delineated list of media URIs to play. A single Playback resource is created as a handle to the entire list. The operation of playing a list is identical to playing a single media URI, save that a new event, PlaybackContinuing, is raised instead of a PlaybackFinished for each non-final media URI. When the entire list is finished being played, a PlaybackFinished event is raised. In order to help inform applications where they are in the list playback, the Playback resource now includes a new, optional attribute, 'next_media_uri', that contains the next URI in the list to be played. It's important to note the following: - If an offset is provided to the 'play' operations, it only applies to the first media URI, as it would be weird to skip n seconds forward in every media resource. - Operations that control the position of the media only affect the current media being played. For example, once a media resource in the list completes, a 'reverse' operation on a subsequent media resource will not start a previously completed media resource at the appropiate offset. - This patch does not add any new operations to control the list. Hopefully, user feedback and/or future patches would add that if people want it. ASTERISK-26022 #close Change-Id: Ie1ea5356573447b8f51f2e7964915ea01792f16f 2016-05-17 11:14 +0000 [5bd1bf2816] George Joseph * 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 [ae81b55361] George Joseph * 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 [8b5cee4a4f] George Joseph * 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 07:24 +0000 [3522376512] Matt Jordan * logger: Support JSON logging with Verbose messages When 2d7a4a3357 was merged, it missed the fact that Verbose log messages are formatted and handled by 'verbosers'. Verbosers are registered functions that handle verbose messages only; they exist as a separate class of callbacks. This was done to handle the 'magic' that must be inserted into Verbose messages sent to remote consoles, so that the consoles can format the messages correctly, i.e., the leading tabs/characters. In reality, verbosers are a weird appendage: they're a separate class of formatters/message handlers outside of what handles all other log messages in Asterisk. After some code inspection, it became clear that simply passing a Verbose message along with its 'sublevel' importance through the normal logging mechanisms removes the need for verbosers altogether. This patch removes the verbosers, and makes the default log formatter aware that, if the log channel is a console log, it should simply insert the 'verbose magic' into the log messages itself. This allows the console handlers to interpret and format the verbose message themselves. This simplifies the code quite a lot, and should improve the performance of printing verbose messages by a reasonable factor: (1) It removes a number of memory allocations that were done on each verobse message (2) It removes the need to strip the verbose magic out of the verbose log messages before passing them to non-console log channels (3) It now performs fewer iterations over lists when handling verbose messages Since verbose messages are now handled like other log messages (for the most part), the JSON formatting of the messages works as well. ASTERISK-25425 Change-Id: I21bf23f0a1e489b5102f8a035fe8871552ce4f96 2016-05-14 21:48 +0000 [a1803cb5f4] 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 [d29c17834c] 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 [14938184a3] 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-11 20:17 +0000 [e06a23681c] 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-13 11:46 +0000 [69a85a519f] 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-12 14:36 +0000 [fd3f70598d] 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 [4f8cfa0220] George Joseph * 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 [d14d1ba826] 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 [9f996624b0] 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 [5236ffed97] 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-10 08:17 +0000 [b5c471b339] 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-10 03:10 +0000 [ec85ea3c21] 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 03:08 +0000 [1b0a9bb2c4] 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:06 +0000 [d0ba3e8196] 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 02:56 +0000 [f943a1fd84] 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-05 11:37 +0000 [1e876d6915] 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 [dfefbf8731] George Joseph * 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-05 09:14 +0000 [d03e170ae7] Joshua Colp * res_pjsip_pubsub: Use common datastores container API. This migrates res_pjsip_pubsub over to using the newly introduce common datastores management API instead of using its own implementations for both subscriptions and publications. As well the extension state data now provides a generic datastores container instead of a subscription. This allows the dialog-info+xml body generator to work for both subscriptions and publications. ASTERISK-25999 #close Change-Id: I773f9e4f35092da0f653566736a8647e8cfebef1 2016-05-05 09:12 +0000 [94cd351ec4] Joshua Colp * datastore: Add common container based datastores API. This change introduces a common container based datastores management API. This has been done in a few places across the tree but this consolidates all of the logic into one place in a generic fashion. ASTERISK-25999 Change-Id: I72eb15941dcdbc2a37bb00a33ce00f8755bd336a 2016-05-04 02:40 +0000 [8923c9ac96] 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 [facce6f632] George Joseph * 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-06 11:54 +0000 [322c3b4262] 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-05 15:16 +0000 [516f49f316] 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-03 15:43 +0000 [64e058f75a] 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:35 +0000 [adc82a2260] 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 15:39 +0000 [3b0ce5169d] 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-03 14:59 +0000 [41fccbfeb1] 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:31 +0000 [dfbb03cc8e] 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-05 05:07 +0000 [17b6ba49ef] 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 [cc4c5f5693] 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-02 16:52 +0000 [92f85fe766] 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-04 16:11 +0000 [4df48581f1] Alexei Gradinari * pjsip: Added "reg_server" to contacts (fixed alembic) ASTERISK-25931 Change-Id: Icc4321a88f5c93ff809da3f372eebbf69c6a8549 2016-05-04 03:17 +0000 [02f4ca1079] Chris Trobridge * config_options.c: Expand #ifdef to contain whole if statement. ASTERISK-25956 #close Change-Id: If6961ec54be276d5ab4f012ee7e7b420cb45de38 2016-05-02 16:08 +0000 [380ac201ac] 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 05:56 +0000 [0c9faaee47] Jean Aunis * app_chanspy: fix audiohook options in non read-only mode When option 'o' was not set, ChanSpy created its audiohook with the flag AST_AUDIOHOOK_MUTE_WRITE, which caused ChanSpy to listen audio from one direction only. ASTERISK-25866 #close Change-Id: I5c745855eea29a3fbc4e4aed0b0c0f53580535e0 2016-04-07 16:33 +0000 [a4cfcda036] 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-04-30 17:52 +0000 [e61716b774] George Joseph * 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 [080c6216b6] 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 [2b1edee772] 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-05-01 02:21 +0000 [bf13b59062] 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-27 17:19 +0000 [2c46063d54] Richard Mudgett * res_pjsip_exten_state: Create PUBLISH messages. Create PUBLISH messages to update a third party when an extension state changes because of either a device or presence state change. A configuration example: [exten-state-publisher] type=outbound-publish server_uri=sip:instance1@172.16.10.2 event=presence ; Optional regex for context filtering, if specified only extension state ; for contexts matching the regex will cause a PUBLISH to be sent. @context=^users ; Optional regex for extension filtering, if specified only extension ; state for extensions matching the regex will cause a PUBLISH to be sent. @exten=^[0-9]* ; Required body type for the PUBLISH message. ; ; Supported values are: ; application/pidf+xml ; application/xpidf+xml ; application/cpim-pidf+xml ; application/dialog-info+xml (Planned support but not yet) @body=application/pidf+xml The '@' extended variables are used because the implementation can't extend the outbound publish type as it is provided by the outbound publish module. That means you either have to use extended variables, or implement some sort of custom extended variable thing in the outbound publish module. Another option would be to refactor that stuff to have an option which specifies the use of an alternate implementation's configuration and then have that passed to the implementation. JColp opted for the extended variables method originally. ASTERISK-25972 #close Change-Id: Ic0dab4022f5cf59302129483ed38398764ee3cca 2016-04-26 16:10 +0000 [0b5292525c] Richard Mudgett * res_pjsip_exten_state: Check if body generator is available. When starting the extension state publishers, check if the requested message body generator is available. If not available give error message and skip starting that publisher. * res_pjsip_pubsub.c: Create new API if type/subtype generator registered. * res_pjsip_exten_state.c: Use new body generator API for validation. ASTERISK-25922 Change-Id: I4ad69200666e3cc909d4619e3c81042d7f9db25c 2016-04-28 11:35 +0000 [369182d084] Richard Mudgett * res_pjsip: Start body generator users after suppliers. Change-Id: I8f0b57841feaab56c8a4e821b5ccb4e05e5fbadb 2016-04-28 16:06 +0000 [3af83ea2fb] Richard Mudgett * res_pjsip_pubsub.c: Add useful information to some messages. Change-Id: Ia0b2e15773894c599e5c5748bbc70e99f434192a 2016-04-26 15:58 +0000 [8e1b663b87] Richard Mudgett * res_pjsip_pubsub.c: Fix body generator registration race. Change-Id: Id8752073ef06472a2fd96080f4009fac42843e67 2016-04-28 16:54 +0000 [30415944a8] George Joseph * 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-04-26 15:13 +0000 [906ea2c43f] Richard Mudgett * res_pjsip_pubsub.h: Fix doxygen association. Change-Id: I110d3e3572598289fcd4215d966cf0c858f98632 2016-04-25 16:00 +0000 [76ea4cfaae] Richard Mudgett * res_pjsip_outbound_publish.c: Remove redundant flag check. Change-Id: I0da80a3c3e0eae0c52ff27e7412ba027d6f52353 2016-03-07 18:34 +0000 [4ebf9a938d] George Joseph * 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 [2b150f0b80] 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 [860b135c88] 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-01 07:50 +0000 [7281770710] Jean Aunis * app_chanspy: reduce audio loss on the spying channel. ChanSpy was creating its audiohook with the flags AST_AUDIOHOOK_TRIGGER_SYNC and AST_AUDIOHOOK_SMALL_QUEUE, which caused audio frames to be lost when queues grow too large or when read and write queues go out of sync. Now these flags are set conditionally: - AST_AUDIOHOOK_TRIGGER_SYNC is not set if the option "o" is set - a new option "l" is created: if set, AST_AUDIOHOOK_SMALL_QUEUE will not be set on the audiohook ASTERISK-25866 Change-Id: I9c7652f41d9fa72c8691e4e70ec4fd16b047a4dd 2016-04-14 07:03 +0000 [81ea80b74c] Joshua Colp * res_pjsip_exten_state: Add config support for exten state publishers. This change adds the ability to configure outbound publishing of extension state. Right now stuff is merely set up to store the configuration and to register a global extension state callback. The act of constructing the body and sending is not yet complete. Configurable elements right now are a regex for filtering the context, a regex for filtering the extension, and the body type to publish. ASTERISK-25922 #close Change-Id: Ia7e630136dfc355073c1cadff8ad394a08523d78 2016-04-26 11:13 +0000 [c480159045] 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 [8ae69cffef] 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 [284bb814ac] George Joseph * 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-25 08:11 +0000 [f99ec857c8] Javier Acosta * Fix case sensitive actions in AMI QueueSummary and QueueStatus ASTERISK-25954 #close Reported by: Javier Acosta Change-Id: I00be83d45cc7e8385de2523012bd196aafeeb256 (cherry picked from commit c0688a6398f27296ff849848a2e416e036d794e3) 2016-04-21 14:23 +0000 [30ab21d5fa] 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-22 17:53 +0000 [99fcf2a791] George Joseph * 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 15:25 +0000 [757ec6172b] 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-21 23:53 +0000 [41ecf22587] 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-13 17:09 +0000 [b3cc74fda9] 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 [a63656b419] 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 [71dfa35540] 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-04-12 15:29 +0000 [06632a0d11] 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 [6ddd856b86] 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-22 13:49 +0000 [924738e950] 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 [6ede210c98] 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 [c991e5472e] 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 [6b1a632290] 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 [1c5248c383] 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 [70e860ec49] George Joseph * 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 [d95512a7dd] 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 [0235a66532] 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 [b8b60135ec] 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 [6cfa02394f] 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 [6365f0018f] 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 [f06ce7f90a] 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 [dbb47e0a47] ibercom * app_queue: Frequent segfaults in function can_ring_entry() ASTERISK-25888 #close Change-Id: I007a2f2dd99823e04fb5be3ff01f02b0a2956117 2016-04-15 16:51 +0000 [af114edb8b] Richard Mudgett * stasis_bridge.c: Update stasis bridge push diagnostic messages. Change-Id: I195b14994c9dcccb9452491ca20a885d2a54605a 2016-04-12 14:55 +0000 [5e64d7e7a3] Mark Michelson * Dial: Combine frame handling functions. There is a good amount of repetition in the two frame handling routines in the Dial API. This commit combines the two functions into one. This is in preparation for an upcoming commit that adds the ability to handle frames for a channel in a bridge. ASTERISK-25925 Reported by Mark Michelson Change-Id: Iaae2f174e3058e774cb44e10659fcdfb85345c58 2016-04-11 16:20 +0000 [a6e2ba187a] 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-14 13:49 +0000 [be4333ddad] 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-17 12:28 +0000 [e83499df56] George Joseph * 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-03-08 12:12 +0000 [216f22fd0f] 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 [d9fba46016] 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:23 +0000 [7b8b6e2e4f] 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: I3ea7cee16f29c8088794de3085ca7523c1c4833d 2016-04-12 13:10 +0000 [ff3af764de] 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-13 13:38 +0000 [caa416d5f3] George Joseph * stringfields: Update extended string fields for master only. In 13, the new ast_string_field_header structure had to be dynamically allocated and assigned to a pointer in ast_string_field_mgr to preserve ABI compatability. In master, it can be converted to being a structure-in-place in ast_string_field_mgr to eliminate the extra alloc and free calls. Change-Id: Ia97c5345eec68717a15dc16fe2e6746ff2a926f4 2016-04-12 15:41 +0000 [bd3671b397] George Joseph * 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 [5a0534dc62] 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 [c00c298a0e] 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 [49813bc9e5] 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-05 16:56 +0000 [4e00e31ef1] 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-11 14:26 +0000 [2cc56573de] Jaco Kroon * core_unreal: Fix hangupcauses not getting set on Local channels ASTERISK-25912 #close Change-Id: I8e72e6894feaf36c9450f2788d205d07baec23aa 2016-04-01 13:30 +0000 [a621dd5e96] George Joseph * 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 [8637f29d24] George Joseph * 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 [216abb0ae7] George Joseph * 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-07 11:37 +0000 [f9dab80816] 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 16:39 +0000 [b3be945415] 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-06 17:57 +0000 [6138a75e8e] Richard Mudgett * pbx.h: Make ast_state_cb_type take more const. This eliminates some casts that I made a note saying v10 and above would no longer need them. Better late than never :) Change-Id: I346cdb3032b6478ceb40eb6fe732978b54035572 2016-04-07 10:59 +0000 [72c19f7dc5] 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 12:26 +0000 [28cefc3e88] Richard Mudgett * pbx: Update doxygen for extension state watchers. Change-Id: Id1403b12136de62a272c01bb355aef65fd2c2d1e 2016-04-07 11:49 +0000 [751d7a5a49] George Joseph * 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 [2eaeea690d] 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 [3e5672d843] 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 [8ed5f61152] 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-03-30 17:18 +0000 [abbb2edd4c] Mark Michelson * ARI: Add method to Dial a created channel. This adds a new ARI method that allows for you to dial a channel that you previously created in ARI. By combining this with the create method for channels, it allows for a workflow where a channel can be created, manipulated, and then dialed. The channel is under control of the ARI application during all stages of the Dial and can even be manipulated based on channel state changes observed within an ARI application. The overarching goal for this is to eventually be able to add a dialed channel to a Stasis bridge earlier than the "Up" state. However, at the moment more work is needed in the Dial and Bridge APIs in order to facilitate that. ASTERISK-25889 #close Change-Id: Ic6c399c791e66c4aa52454222fe4f8b02483a205 2016-03-30 17:01 +0000 [dd48d60c5b] Mark Michelson * ARI: Add method to create a new channel. This adds a new ARI method to the channels resource that allows for the creation of a new channel. The channel is created and then placed into the specified Stasis application. This is different from the existing originate method that creates a channel, dials it, and then places the answered channel into the dialplan or a Stasis application. This method does not attempt to call the channel at all. Dialing is left as a later step after channel creation. This allows for pre-dialing channel manipulation if desired. ASTERISK-25889 Change-Id: I3c96a0aba914b08e39f6256371a5bd4c92cbded8 2016-03-28 11:31 +0000 [1dc5e28624] Joshua Colp * pbx: Add support for autohints. This change introduces the concept of autohints. These are hints which are created as a result of device state changes occurring within the core. When this happens a hint will be created (if it does not exist already) using the device name as the extension. For example if a device state change is received for "PJSIP/bob" and autohints are enabled on a context then a hint will exist in that context for "bob" with a device of "PJSIP/bob". For virtual or custom device states the name after the type will be used. For example if the device state of "Custom:bob" changes then a hint will exist in that context for "bob" with a device of "Custom:bob". This functionality can be enabled in extensions.conf by placing "autohints=yes" in a context. ASTERISK-25881 #close Change-Id: I7e444c7da41b7b7d33374420fec658beeb18584e 2016-04-05 14:23 +0000 [a098251e7e] 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-30 16:47 +0000 [ef4d3f1328] Mark Michelson * Dial: Add function to append already-created channel. The Dial API takes responsiblity for creating an outbound channel when calling ast_dial_append(). This commit adds a new function, ast_dial_append_channel(), which allows us to create the channel outside the Dial API and then to append the channel to the ast_dial structure. This is useful for situations where the channel's creation and dialing are distinct operations. Upcoming ARI early bridge work will illustrate its usage. ASTERISK-25889 Change-Id: Id8179f64f8f99132f80dead8d5db2030fd2c0509 2016-03-27 23:33 +0000 [984d6fd95c] George Joseph * 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 [784fb43f43] 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 [4d40b161c3] George Joseph * 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 [c07e1190ec] George Joseph * 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 [060b7b83bc] George Joseph * 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 [433d2c4bbf] George Joseph * 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 [304f81780d] George Joseph * 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-29 13:47 +0000 [0ea742d33a] 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 [53f63ad770] 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 13:31 +0000 [2fab4d7da8] Richard Mudgett * res_stasis.c: Protect channel datastore list from stasis end. Change-Id: Ifadc469590bd4d5368e19d3763db3bd1f80fdb95 2016-03-29 18:06 +0000 [ece2edaa04] 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 [2f36cba4b5] Richard Mudgett * res_stasis_recording.c: Cleanup stasis_app_recording_find_by_name(). Change-Id: Ic7d93c402c498677a122505558859c853d4e5ac7 2016-03-28 14:23 +0000 [34457dd9db] Richard Mudgett * core_unreal.c: Add clarification comment about channel ref. Change-Id: I0be0627260cd8d6b6c3cc345949dcfdf32eff1f3 2016-03-30 12:38 +0000 [2b3261cd36] George Joseph * 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 [e2524fcee3] George Joseph * 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 [724b9ab28f] George Joseph * 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 [c4064727d2] George Joseph * 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-25 10:59 +0000 [970803efcb] 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 [9785e8d090] 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 [44ffb5105a] George Joseph * 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-10 19:52 +0000 [c971a64366] George Joseph * 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-08 15:55 +0000 [c948ce9651] George Joseph * 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-25 23:19 +0000 [8e8cf80cea] 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-23 14:24 +0000 [3cf714031c] Richard Mudgett * res_parking: Cleanup find_channel_parking_lot_name() usage. Change-Id: I8f7a8890aef27824301c642d4d15407ac83e6f02 2016-03-18 14:01 +0000 [13e75ee04f] 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 [e2853ae337] 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-25 06:02 +0000 [72a897c534] Joshua Colp * media_cache: Demote warning to debug as it may occur often. The file playback system will now query the media cache and then the old file functionality. Under normal conditions this will result in the cache failing to retrieve a file causing a warning message to get output each time a file is played back. This change demotes this warning to a debug message. Change-Id: Ib72246ba300b5cce32774bfb3c26634bfb708624 2016-03-10 16:58 +0000 [89e94e886c] 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 14:08 +0000 [3f720155b7] 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 [894071ea2c] 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-24 07:51 +0000 [13cdf3e8a1] 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:48 +0000 [87c9ab97ea] 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-24 06:18 +0000 [a72f3b5bb4] Joshua Colp * tests/test_http_media_cache: Fix file descriptor leak in test. Change-Id: Ie8a9ae3d13bdeaacafc8d28271adc6707f633a5f 2016-02-28 19:05 +0000 [13efea24f7] Matt Jordan * main/app: Only look to end of file if ':end' is specified, and not just ':' There is a little known feature in app_controlplayback that will cause the specified offset to be used relative to the end of a file if a ':end' is detected within the filename. This feature is pretty bad, but okay. However, a bug exists in this code where a ':' detected in the filename will cause the end pointer to be non-NULL, even if the full ':end' isn't specified. This causes us to treat an unspecified offset (0) as being "start playing from the end of the file", resulting in no file playback occurring. This patch fixes this bug by resetting the end pointer if ':end' is not found in the filename. Change-Id: Ib4c7b1b45283e4effd622a970055c51146892f35 2015-12-26 15:29 +0000 [ca14b99e6e] Matt Jordan * main/file: Add the ability to play media in the media cache This patch allows applications/APIs that access media through the core file APIs to play media in the media cache. Prior to determining if a 'filename' exists, the filename is passed to the media cache's retrieve API call. If that call succeeds, the local file specified passed back by the API is opened for streaming. When used in this fashion, the 'filename' is actually a URI that the media cache process and understand. ASTERISK-25654 #close Change-Id: I73b6e2e90c3e91b8500581c45cdf9c0dc785f5f0 2015-12-30 10:52 +0000 [01962a3932] Matt Jordan * tests/test_http_media_cache: Add unit tests for res_http_media_cache This patch adds unit tests for res_http_media cache, that covers nominal creation and retrieval - and through them as well, staleness and deletion checks. In addition, this patch adds tests that covers the interaction of various HTTP headers, including Expires, Etag, and Cache-Control. ASTERISK-25654 Change-Id: I2db101e307c863857fe416d6f5bf4cace9ac7cf5 2015-01-29 08:38 +0000 [22e2340813] Matt Jordan * res/res_http_media_cache: Add an HTTP(S) backend for the core media cache This patch adds a bucket backend for the core media cache that interfaces to a remote HTTP server. When a media item is requested in the cache, the cache will query its bucket backends to see if they can provide the media item. If that media item has a scheme of HTTP or HTTPS, this backend will be invoked. The backend provides callbacks for the following: * create - this will always retrieve the URI specified by the provided bucket_file, and store it in the file specified by the object. * retrieve - this will pull the URI specified and store it in a temporary file. It is then up to the media cache to move/rename this file if desired. * delete - destroys the file associated with the bucket_file. * stale - if the bucket_file has expired, based on received HTTP headers from the remote server, or if the ETag on the server no longer matches the ETag stored on the bucket_file, the resource is determined to be stale. Note that the backend respects the ETag, Expires, and Cache-Control headers provided by the HTTP server it is querying. ASTERISK-25654 Change-Id: Ie201c2b34cafc0c90a7ee18d7c8359afaccc5250 2015-12-26 15:31 +0000 [791b4c9f81] Matt Jordan * main/media_cache: Provide an extension on the local file associated with a URI This patch does the following: First, it addresses file extension handling in the media cache. The media core in Asterisk is a bit interesting in that it wants: * A file to have an extension on it. That extension is used to associate the file with a defined format module. * The filename passed to the core to not have an extension on it. This allows the core to match the available file formats with the format a channel is capable of handling. Unfortunately, this makes the current implementation a bit lacking in the media cache. By default, we do not store the extension of a retrieved URI on the local file that is created. As a result, the media core does not know what format the file is, and the file is ignored. Modifying the file outside of the media core is bad, as we would not be able to update the internal ast_bucket_file's path. At the same time, we do not want to pass the extension out in the file_path parameter in ast_media_cache_retrieve. This parameter is intended to be fed into the media core; if we passed the extension, all callers would have to strip it off. Thus, this patch does the following: * If there is an extension specified in the URL, we append it to the local file name (if a preferred file name isn't specified), and we store that in the local file path. * The extension, however, is stripped off of the file_path parameter passed back out of ast_media_cache_retrieve. Second, this patch causes stale items to be completely removed from the system. Prior to this patch, sound files could be orphaned due to the bucket referencing the file being deleted, but the file itself not being removed. This is now addressed by explicitly calling ast_bucket_file_delete on the bucket_file when it is deemed to be stale. Note that this only happen when we know we will attempt to retrieve the resource again. Finally, this patch changes the AO2 container holding media items to just use a regular mutex. The usage for this container already assumed it was a plain mutex, and - given that retrieval of an item can cause it to be replaced in the container - a mutex makes more sense than a read/write lock. Change-Id: I51667fff86ae8d2e4a663555dfa85b11e935fe0f 2014-10-25 20:21 +0000 [6bbcfb34bd] Matt Jordan * funcs/func_curl: Add the ability for CURL to download and store files This patch adds a write option to the CURL dialplan function, allowing it to CURL files and store them locally. The value 'written' to the CURL URL specifies the location on disk to store the file. As an example: same => n,Set(CURL(http://1.1.1.1/foo.wav)=/tmp/foo.wav) Would retrieve the file foo.wav from the remote server and store it in the /tmp directory. Due to the potentially dangerous nature of this function call, APIs are forbidden from using the write functionality unless live_dangerously is set to True in asterisk.conf. ASTERISK-25652 #close Change-Id: I44f4ad823d7d20f04ceaad3698c5c7f653c41b0d 2016-03-23 08:59 +0000 [392341ba37] George Joseph * 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 [ac66999971] 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 [1d3191b118] George Joseph * 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 [8f94f947f5] 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-03-18 14:31 +0000 [a3c9a74a02] Kevin Harwell * chan_pjsip: ref leak when checking direct_media_glare Fix the reference leak introduced in the following commit: c534bd58075e2e1a1e4f3b23c435186c71b155fd ASTERISK-25849 Change-Id: I5cfefd5ee6c1c3a1715c050330aaa10e4d2a5e85 2016-03-16 12:37 +0000 [c534bd5807] 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 2016-03-03 04:43 +0000 [bdccb81157] 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-02-25 10:29 +0000 [0da36fca6b] 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-03-11 12:22 +0000 [810f92c9dc] 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 [72c444ba37] 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-09 16:26 +0000 [7ea1e181dc] 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-10 12:17 +0000 [fbf8e04aed] 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-08 15:08 +0000 [02458cc6fd] 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-09 16:34 +0000 [c7fdff2e37] 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-07 13:21 +0000 [69810b306d] 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-09 16:32 +0000 [f484ddbdfe] 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-07 18:28 +0000 [67c79c326d] 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 [76be7093cd] 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 [52f0932e4c] 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 [0987a11cce] 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-07 15:50 +0000 [9a7cfa2b61] 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-15 13:31 +0000 [7964e260d3] 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 18:56 +0000 [cb97198ca6] 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-04 18:25 +0000 [8be01398d9] Richard Mudgett * chan_sip.c: Made sip_reinvite_retry() call sip_pvt_lock_full(). Change-Id: I90f04208a089f95488a2460185a8dbc3f6acca12 2016-03-14 08:59 +0000 [4df7b3ae80] 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 [0af6b5de62] George Joseph * 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 [fb28049de2] George Joseph * 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 [d2eb65f71e] George Joseph * 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-07 02:02 +0000 [f690c105f3] Rodrigo Ramírez Norambuena * res_odbc_transaction: fix some format tab Change-Id: I265e4ac47c629c9a63dd86b59df82a7ab3c64384 2016-02-17 22:58 +0000 [0ec9fe5421] Rodrigo Ramírez Norambuena * main/cli.c: Refactor function to print seconds formatted Refactor and created function ast_cli_print_timestr_fromseconds to print seconds formatted: year(s) week(s) day(s) hour(s) second(s) This function now is used in addons/cdr_mysql.c,cdr_pgsql.c, main/cli.c, res_config_ldap.c, res_config_pgsql.c. Change-Id: Ibeb8634102cd11d3f8623398b279cb731bcde36c 2016-03-04 20:37 +0000 [471ff375fd] George Joseph * 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 [2b9849625c] George Joseph * 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 [37472f7398] George Joseph * 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 [195100e770] George Joseph * 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 [15c5743ac1] 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 [0d2ccbca62] 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 [6af7fc4c37] 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 [b8b7c2e428] George Joseph * 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 [7b71bca8a4] George Joseph * 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 [0a3f0e85ac] 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 [60aa871be3] 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 [0bdbf0d882] Richard Mudgett * func_callerid.c: Update REDIRECTING reason documentation. Change-Id: I6e8d39b0711110a4bceafa652e58b30465e28386 2016-02-26 18:57 +0000 [25de01f301] 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 [8c8ef4efb0] 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 [75ec137e91] 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 [3173e91bab] George Joseph * 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 [2dae4a1ccf] 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 [bf29a4e2e6] 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 [c7d45b84f9] 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 [0e296563d7] Richard Mudgett * channel api: Create is_t38_active accessor functions. ASTERISK-25582 Change-Id: I69451920b122de7ee18d15bb231c80ea7067a22b 2016-02-19 19:06 +0000 [86f7336c91] 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 [128c96456c] 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 [4422905218] George Joseph * 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 [acf329a3c7] George Joseph * 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 [7e3e1ddf7e] George Joseph * 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-22 19:31 +0000 [803a2fc2d5] Richard Mudgett * rtp_engine.h: Remove extraneous semicolons. Change-Id: Ib462633d396fa941379dfef648dcd2245e350084 2016-02-23 14:57 +0000 [886ee09471] 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 [b7970cabfa] 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 [ba8adb4ce3] George Joseph * 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-19 04:30 +0000 [c00082329e] Walter Doekes * chan_sip: Optionally supply fromuser/fromdomain in SIP dial string. Previously you could add [!dnid] to the SIP dial string to alter the To: header. This change allows you to alter the From header as well. SIP dial string extra options now look like this: [![touser[@todomain]][![fromuser][@fromdomain]]] INCOMPATIBLE CHANGE: If you were using an exclamation mark in your To: header, that is no longer possible. ASTERISK-25803 #close Change-Id: I2457e9ba7a89eb1da22084bab5a4d4328e189db7 2016-02-07 17:34 +0000 [f8767a8804] George Joseph * 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 [14886643c6] 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 [8055d080cd] 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-17 13:30 +0000 [30a49b8a6a] 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 23:37 +0000 [15aeb78c66] 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-16 16:37 +0000 [62282bb8ce] George Joseph * 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 [49203628f9] George Joseph * 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 [4f08e9fb64] George Joseph * 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 [be811c4be1] George Joseph * 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 [13b6c02945] 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 [5c400a0fed] 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 2016-02-09 17:34 +0000 [b37555cc94] George Joseph * 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 [c4d9f46878] 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 [e5fd972d24] 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 [168c18737f] George Joseph * 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 20:13 +0000 [fd668670b5] Rodrigo Ramírez Norambuena * res_config_pgsql: Show error message in reload if not connected. Change-Id: I9290115a1aaadb589eb1d02eaeb502eec01b31fa 2016-02-09 23:40 +0000 [a23d01e943] 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 [c7186c7f0a] 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 [68643f83cd] 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 [e40fddbeb5] 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 [bbf3ace682] George Joseph * 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-02-07 13:00 +0000 [72bf53eea5] Rodrigo Ramírez Norambuena * res_config_pgsql: Add message on cli failed command status In case failed of command "realtime show pgsql status" show a message the data of connection to more clear information in error. Change-Id: Ia8e9e2400466606e7118f52a46e05df0719b6a29 2016-02-05 10:29 +0000 [b69729dde5] George Joseph * chan_misdn: Fix a few issues causing compile errors Change-Id: I54b48c24d7ca88ed80496fdfd142d08772a7ab98 2016-01-25 17:36 +0000 [1bc54aee80] 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-04 16:17 +0000 [3b426a8b09] 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 [9b13ab6a63] George Joseph * 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 [82e2938fa8] 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 [d83dba7099] 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 2016-02-03 12:05 +0000 [0de74fad55] 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-12-07 12:46 +0000 [e67b445e8d] 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 2015-09-28 17:07 +0000 [a877e0d94b] 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 [dcbedf9ab1] George Joseph * 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 [6522361871] 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 [2a6f18cd55] 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 [40da6434c1] George Joseph * build_system: Fix some warnings highlighted by clang Fix some warnings found with clang. Change-Id: I5195b6189b148c2ee3ed4a19d015a6d4ef3e77bd 2016-01-31 20:13 +0000 [52b29f9b4c] George Joseph * 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 [55a7367ad4] 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 2016-01-28 12:44 +0000 [d2397f028f] Richard Mudgett * config_options.c: Fix warning message wording. Change-Id: I915ea437936320393afde0e7552cf0a980a6b2e4 2016-01-25 17:34 +0000 [af6b15976d] Richard Mudgett * app_confbridge.c: Replace inlined code with existing function. Change-Id: Ida5594e9f8d7c1fc18eeb733a11f8fb96326da51 2016-01-25 16:05 +0000 [7932336a3d] 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 [894045e7cf] Richard Mudgett * app_confbridge.c: Update CONFBRIDGE and CONFBRIDGE_INFO documentation. Change-Id: Ic1f9e22ba1f2ff3b3f5cb017c5ddcd9bd48eccc7 2016-01-25 15:48 +0000 [12c93e8f81] 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:08 +0000 [f19bf7a321] George Joseph * res_pjsip: Add res_pjproject dependency to samples Since res_pjsip now depends on res_pjproject, this has been added to basic-pbx modules.conf. Change-Id: I42826597d5e10f08e518208860c44c96e52f1b2d 2016-01-27 10:29 +0000 [c53903d447] George Joseph * 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 [1dfd104a27] 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 [a706ad44e6] 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 [289daca9e8] 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 [b073244c51] 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 [830f8933c2] 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-23 16:45 +0000 [f299dc0d76] Rodrigo Ramírez Norambuena * app_queue: Add Lastpause field of queue member Add time when started a the last pause for a queue member for QueueMemberStatus ami event. Also show accumulate time in seconds when started a pause for a queue member to CLI command 'queue show'. ASTERISK-16394 #close Change-Id: I4b12aa3b2efa8d02939db3e13712510b4879865c 2016-01-23 12:34 +0000 [8c664da0ff] Rodrigo Ramírez Norambuena * app_queue: fix some tab format Change-Id: I2734392b131f1fb0949515d538f83f30fbc15d8c 2016-01-23 11:41 +0000 [2fb45c7801] Rodrigo Ramírez Norambuena * cdr_pgsql.cl: REFACTOR Macro LENGTHEN_BUF Remove repeated code on macro of assigned buffer to SQL vars. Add table and connection name to log error message when is not possible allocate memory. Change-Id: I1fbf37d286a032d38fdda72a9f736356956c9ffe 2016-01-22 15:08 +0000 [959f7436cc] 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 [a45eacebf3] 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 [7866806fc3] 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 2015-12-23 15:07 +0000 [9714da7aa4] 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-22 11:18 +0000 [d3969d09ae] Rodrigo Ramírez Norambuena * app_queue.c: remove include for core_unreal.h not used in code. Change-Id: Idc2ae8a6bd869a66544916906744a5678622262d 2016-01-21 16:40 +0000 [5dde111719] 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 [04078f43b5] 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-13 16:49 +0000 [5615db3714] 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 03:49 +0000 [b259ac95ac] 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-18 19:27 +0000 [dd5c063934] George Joseph * 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-18 17:16 +0000 [3b9cba4294] 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-20 07:52 +0000 [479cc99acd] Rodrigo Ramírez Norambuena * README: Update year in copyright Change-Id: I56240f537fb3205672cdb2a74f0591ae7bb73dbc 2016-01-19 17:15 +0000 [9fa76ba215] 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 [c9f7269b2e] Richard Mudgett * taskprocessor.c: Increase CLI "core ping taskprocessor" timeout. Change-Id: I4892d6acbb580d6c207d006341eaf5e0f8f2a029 2016-01-18 19:43 +0000 [6e2a867716] 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 14:16 +0000 [a4dcbdf50f] Richard Mudgett * Fix alembic branches on master. Change-Id: I64ed21fec50eb833641ca49d92184f6aaabd86e8 2016-01-05 17:12 +0000 [35a3e8cc7f] Corey Farrell * Refactor init_logger_chain locking. This removes logchannels locking from init_logger_chain, puts the responsibility on the caller. Adds locking around the one call that was missing it. ASTERISK-24833 Change-Id: I6cc42117338bf9575650a67bcb78ab1a33d7bad8 2016-01-18 22:10 +0000 [378fed4900] Rodrigo Ramírez Norambuena * app_queue: Fix preserved reason of pause when Asterisk is restared When the Asterisk is restared is not preseved reason paused of members. This patch fixed this cases, retain data on astdb and set when Asterisk is started. ASTERISK-25732 #close Report by: Rodrigo Ramírez Norambuena Change-Id: Id3fb744c579e006d27cda4a02334ac0e4bed9eb5 2016-01-18 19:01 +0000 [130aa1427e] George Joseph * pjsip_loging_refactor: Rename res_pjsip_log_forwarder to res_pjproject Change-Id: I5387821f29e5caa0cba0b7d62b0fc0d341e7e20b 2016-01-16 13:18 +0000 [eaf2b5052e] 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-13 15:58 +0000 [c60d6c0162] 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-15 19:52 +0000 [480ccfcc97] Corey Farrell * main/config: Clean config maps on shutdown. ASTERISK-25700 #close Change-Id: I096da84f9c62c6095f68bcf98eac4b7c7868e808 2016-01-14 14:42 +0000 [a5b38b604c] 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 [d36c4d0b01] Richard Mudgett * taskprocessor.c: Simplify ast_taskprocessor_get() return code. Change-Id: Id5bd18ef1f60ef8be453e677e98478298358a9d1 2016-01-13 18:20 +0000 [0a878020dc] 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 [84b30c5e18] 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 14:36 +0000 [c7caee6c4b] Corey Farrell * Remove *.gcna / *.gcno files from added module sources. Asterisk uses a Makefile macro to associate additional sources with a module. This macro is responsible for creating clean targets but previously left behind *.gcna and *.gcno files. ASTERISK-25683 #close Reported by yaron nahum Change-Id: Idc0823fe80a25c42cefae901fde875e9fc38d8ea 2016-01-14 09:26 +0000 [68cad96ffd] 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-10 16:22 +0000 [8182146e85] 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-12 11:14 +0000 [022423b98b] 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 [79a7321a47] 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 [1fffe71f77] 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 [01c5e2a07e] 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 [a41aab477a] George Joseph * 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-08 16:59 +0000 [7760029f19] 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 [e9c2c1dc67] Corey Farrell * devicestate: Cleanup engine thread during graceful shutdown. ASTERISK-25681 #close Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1 2016-01-10 13:51 +0000 [90c0dcaee4] Corey Farrell * manager: Cleanup manager_channelvars during shutdown. ASTERISK-25680 #close Change-Id: I3251d781cbc3f48a6a7e1b969ac4983f552b2446 2016-01-10 13:27 +0000 [a868a381f0] Corey Farrell * res_calendar: Cleanup scheduler context at unload. ASTERISK-25679 #close Change-Id: I839159bf6882cccc1b23494c7aa2bc2a2624613f 2016-01-08 11:49 +0000 [a1c43022d2] 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 [220ba979cf] George Joseph * 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 [26e0e113dc] 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 [dc2c000fd5] 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 [0bca2a5c26] 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 [f0f5fbbc01] 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 [b1c7ae9afc] 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 [3e857bb347] 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 [84c245d38c] 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 [7d86979ea0] Richard Mudgett * taskprocessor.c: Fix CLI "core show taskprocessors" unref. Change-Id: I1d9f4e532caa6dfabe034745dd16d06134efdce5 2016-01-06 19:00 +0000 [1fb39aa8a0] 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-07 20:44 +0000 [71bb7b9c40] Richard Mudgett * taskprocessor.c: Sort CLI "core show taskprocessors" output. Change-Id: I71e7bf57c7b908c8b8c71f1816348ed7c5a5d51e 2016-01-05 16:54 +0000 [b025e1982f] Richard Mudgett * taskprocessor.c: Add CLI "core ping taskprocessor" missing unlock. Change-Id: I78247e0faf978bf850b5ba4e9f4933ab3c59d17b 2015-12-16 11:25 +0000 [c5e16fe33a] 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 2016-01-07 03:21 +0000 [6745cd6529] 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 [1afc8432dc] 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 [5d8c42c6d3] 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-07 03:33 +0000 [7856762f2f] 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-06 07:12 +0000 [64b2046f3d] Walter Doekes * Add sipp-sendfax.xml and spandspflow2pcap.py to contrib/scripts. The spandspflow2pcap.py creates pcap files from fax.log files, generated through 'fax set debug on' when receiving a fax. An example fax.log is included as spandspflow2pcap.log. The sipp-sendfax.xml SIPp scenario can be used to replay that fax with a recent version of SIPp. ASTERISK-25660 #close Change-Id: I4de8f28b084055b482ab8a5b28d28b605b0ed526 2016-01-04 04:26 +0000 [084563e136] 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-04 20:23 +0000 [36f1eaf0b5] 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 2015-12-21 11:07 +0000 [90b06d1a3c] 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 2016-01-04 19:46 +0000 [3507494b8a] 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 [54a8f1a396] 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 [c3c8b8e41d] 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-30 10:49 +0000 [6d18fe151c] George Joseph * 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:15 +0000 [5ee5c3739e] 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 [f88b952093] 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 [e9dd16364e] 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 [153547a9b1] 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 [f9bfc2450e] 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 2016-01-01 05:25 +0000 [3fd528dddf] Rodrigo Ramírez Norambuena * Happy new year 2016. Change-Id: I22d3c90f6f27df82e915bbf81c1d91221f7a945e 2015-12-13 13:09 +0000 [9cdf3ec19d] 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-28 19:18 +0000 [5e67e51c6a] George Joseph * 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-28 14:02 +0000 [a05bb258b1] 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-12-24 20:26 +0000 [96b32e0321] 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-24 22:19 +0000 [3bddcc0219] 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-05-27 13:22 +0000 [22db16fa81] George Joseph * 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-27 22:38 +0000 [6b08f01c60] Corey Farrell * Remove res_jabber file that was left behind. Change-Id: I9d88fac0394d5bbaff0900a2ee911c4e4478846b 2015-12-26 09:24 +0000 [d4b10cfb3e] Ward van Wanrooij * chan_sip: option 'notifyringing' change and doc fix In the sample sip.conf this is written with regard to notifyringing: ;notifyringing = no ; Control whether subscriptions already INUSE get sent RINGING when another call is sent (default: yes) However, this setting changes whether or not any RINGING indications are sent to subscriptions. There is no separate configurable setting that allows to control whether INUSE subscriptions also get sent RINGING. This is however a useful option, to see (using BLF) if somebody else is able to handle an incoming call or if everybody is busy. This patch corrects the documentation for notifyringing (so the documentation matches the functionality) and make notifyringing a tri-state option, by adding the value 'notinuse' (in addition to 'yes' and 'no'). When notifyringing = notinuse, only subscriptions that are not INUSE are sent the RINGING signal. The default setting for notifyringing remains set to yes, so the default behaviour is not affected. ASTERISK-25558 Change-Id: I88f7036ee084bb3f43b74f15612695c6708f74aa 2015-12-25 09:56 +0000 [6dc21bbf00] 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 [8eb5da0679] 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 [2df4ad647c] 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 [b8876711f3] Kevin Harwell * res_rtp_asterisk: rtp->ice check not wrapped in HAVE_PJPROJECT ifdef Change-Id: I19b49112e1b630bd04e859f14ccf96f8ebd6b151 2015-12-20 21:33 +0000 [ca394161cf] Dade Brandon * app_amd: Correct maximum_number_of_words functionality & documentation - The maximum_number_of_words was previously documented as being the number of words that when exceeded, would result in the AMD application returning that the audio represents a machine. This was inconsistent with its actual functionality - it was a number of words that when REACHED, would result in determination as a machine. This update corrects the functionality to match the previously documented functionality. This is a backwards incompatible change in configuration file, and has been added to UPGRADE.txt as a result. The sample configuration file and application defaults have been updated so that the default value is now 2, which reflects the same default functionality as previous versions. - 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 [648ca2b1b8] 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-05 10:01 +0000 [902309fd04] 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 [a2431f83ef] 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 [d2c8614122] 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 [d17d9a9288] 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 [cfb34adb83] 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-14 13:53 +0000 [32ec83f37f] 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-08 13:04 +0000 [52ca6fb94a] 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-14 15:25 +0000 [eccdf2250b] Richard Mudgett * Fix sscanf() format string type mismatch. ASTERISK-25615 Reported by: George Joseph Change-Id: Ieff35307254ca193f3d473cff2e396ca57c7ce0b 2015-12-14 06:26 +0000 [3e7522533c] 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-13 13:13 +0000 [9a96a86e2d] 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 [3e6637feb5] George Joseph * 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 [ceebdfce40] 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-07 13:07 +0000 [fcaebb0e43] 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-09 09:48 +0000 [5790700497] 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-08 17:49 +0000 [a987434564] George Joseph * 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 [be693539c3] 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 01:57 +0000 [59a91c350a] 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 11:03 +0000 [28ab03fbf7] George Joseph * 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 [55dd7125b3] Alexander Traud * codec_resample: Increase buffer for Opus Codec with FEC. ASTERISK-25599 #close Change-Id: Idbd187f711b2ec63dda949ca0f79aa0c1a0a0b6e 2015-12-08 03:46 +0000 [64f899e5f3] 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 [65c8147952] 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-11-13 07:58 +0000 [48c065e46d] Christof Lauber * chan_sip: Support parsing of Q.850 reason header in SIP BYE and CANCEL requests. Current support for reason header did work only in SIP responses. According to RFC3336 the reason header might appear in any SIP request. But it seems to make most sence in BYE and CANCEL so parasing is done there too (if use_q850_reason=yes). Change-Id: Ib6be7b34c23a76d0e98dfd0816c89931000ac790 2015-12-06 16:35 +0000 [75c800eb28] Matt Jordan * Revert "bridges/bridge_t38: Add a bridging module for managing T.38 state" This reverts commit f42d22d3a1ca5c8ea73df99a50c6a28caa8f8749. 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: I932107387c13aad2c75a7a4c1e94197a9d6d8a51 2015-12-04 16:23 +0000 [4be231e82f] George Joseph * 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:08 +0000 [63c6d39a3e] 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-28 08:46 +0000 [f42d22d3a1] 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-21 05:35 +0000 [dcc01bc0a7] 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 [69457b8d61] 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 [5959186017] George Joseph * 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 [bd265a90be] George Joseph * 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 [b5281b74e0] 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 [59ba84e5cd] Richard Mudgett * res_sorcery_memory_cache.c: Fix off nominal ref leak. Change-Id: If83d63cf11cbc6df9b15251848b01feb570ade49 2015-11-30 16:42 +0000 [ef77439e39] 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 [145d10a5d0] 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 [fa20729032] 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 [b24f2f4c2e] Alexander Traud * codec_resample: Increase buffer for Opus Codec. ASTERISK-25599 #close Change-Id: I1f88a88c59fb4e1e62bbdbb100c7152d48e73f10 2015-11-30 11:13 +0000 [e5723d2776] George Joseph * dns: Change lookup failures from LOG_ERROR to debug 1. dns.c and dns_system_resolver.c were spitting out errors for lookup failures for things like not finding a SRV record even though there was an A record. Those have been changed to debug messages. Logging not finding ANY record is left to the higher level caller. Also, dns_system_resolver was using Windows line endings so I converted them to Unix style. The actual log changes are on lines 156 and 159. Change-Id: I65be16ea15304b96f9dcb4d289dbd3e2286fc094 2015-11-25 10:42 +0000 [270f7be54f] Alexander Traud * Build System: Support include-what-you-use. ASTERISK-25591 #close Change-Id: I8d3efa0826142ece9cbed2fd0d46f3b607fee6ae 2015-11-08 23:49 +0000 [f2a84b500d] Rodrigo Ramírez Norambuena * app_queue: Show reason of pause on CLI Add value of pause reason when is paused on CLI command "queue show" ASTERISK-25581 #close Report by: Rodrigo Ramírez Norambuena Change-Id: I887028a40cd97b350da9a3bb2719616b7fec9864 2015-11-27 07:39 +0000 [7cb8f2f33e] Niklas Larsson * CHANGES: Fix a typo Change-Id: Iceb3d9bb78140c376174a7bee197dfcf8ef9cda7 2015-11-25 15:26 +0000 [9014f1f4a5] 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 [03759c5587] 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. - Remove unused term_prep() and term_prompt() functions. ASTERISK-25585 #close Change-Id: Ib641a0964c59ef9fe6f59efa8ccb481a9580c52f 2015-11-24 13:54 +0000 [91346b9fb7] 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 [fb45130476] 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-18 09:43 +0000 [ee9c114747] 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 GAUGE statistic for endpoint states, tracking how many endpoints are in a particular state. * A GAUGE statistic for each endpoint, counting the number of channels currently associated with an endpoint. ASTERISK-25572 Change-Id: If7e1333c5aeda8d136850b30c2101c0ee1c97305 2015-11-23 14:27 +0000 [9ca652f1b9] 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-18 10:07 +0000 [75d90a9951] 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 [482f2fc5ff] 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-18 10:05 +0000 [97d7b344de] 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-20 21:08 +0000 [726ee873a6] 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-10-22 09:44 +0000 [9315a93757] 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-20 21:07 +0000 [d2b141c79f] 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-11-19 09:40 +0000 [1bca90fcbe] 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 06:29 +0000 [8ccb1d2bed] 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:03 +0000 [92ea46ba94] 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 02:25 +0000 [8c14b91651] Alec Davis * app_bridgeaddchan: ability to barge into existing call To be able to barge into a call by dialling a prefix+extension that maps to the extensions device. Senario is that DECT headset users may be away from their desks and need to transfer the call, the goal is that from any phone they dial a prefix then their extension and are added to the bridge that they are in, from there they can drop the headset call, as it's also on the handset, and transfer the caller. The dialplan would look like, where prefix=73, extension = 8512; exten => _738512,1,BridgeAdd(SIP/cisco0001) ASTERISK-25551 #close Reported By: Alec Davis Change-Id: I8eb5096a02168dcc8d7aeea416ef36ba4ed10540 2015-11-05 15:37 +0000 [05addf3d8f] Tyler Cambron * StatsD: Add sample rate compatibility Implemented support for the StatsD sample rate parameter, which is a parameter for determining when to send computed statistics to a client. Valid sample rate values are: Less than or equal to 0.0 will never be sent. Between 0.0 and 1.0 will randomly be sent. Greater than or equal to 1.0 will always be sent. ASTERISK-25419 Reported By: Ashley Sanders Change-Id: I11d315d0a5034fffeae1178e650aa8264485ed52 2015-11-17 14:53 +0000 [3dbaf696e9] Richard Mudgett * res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts. Change-Id: Ie16f5053ebde0dc6507845393709b4d6a3ea526d 2015-11-17 14:53 +0000 [eaf898ac88] 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-18 00:20 +0000 [4013f9d577] 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-16 16:10 +0000 [6919daab61] George Joseph * dns: Fix pointer increment in dns_parse_answer_ex When dns_parse_answer_ex was iterating over the answers it wasn't incrementing the answer pointer correctly after the first answer. The result was that no answers after the first were being returned. For results where multiple records should have been sorted by priority, weight, etc., there was nothing to sort so the only the first record was returned even if it wouldn't have been the correct record based on the sort. ASTERISK-25565 #close Reported-by: Daniel Tryba Tested-by George Joseph Change-Id: I8622604fefdcd3c11e2c5609a6382e53b1467b0b 2015-11-13 14:03 +0000 [ed13732188] 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 13:56 +0000 [a83e426e91] 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-14 07:02 +0000 [a1fcf6f7b2] 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 [436023a322] 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 [e8881e1770] 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 07:00 +0000 [fd23d423d8] 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 [40b58a5d2b] 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 [264c74aa22] 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 [a159747660] 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 [d982b99e71] 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 [2954354404] 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:24 +0000 [525c7ab780] 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 18:19 +0000 [be93036a4e] Corey Farrell * Remove ABI compatibility stub functions. ABI compatibility stubs existed for ast_app_separate_args and ast_verbose, this is not needed in master. Change-Id: I07b4d2c16079da3c2c6efa55df4a74368e0bd453 2015-11-10 07:51 +0000 [02a124eda5] Corey Farrell * Remove execute permission from dns_system_resolver.c Change-Id: I3185735db42064bab00d3e073aed703385a00bf4 2015-11-09 03:01 +0000 [cf79b62778] 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 [e85f0c81af] 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 [7dd8f89a50] 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 [39daf9f066] Walter Doekes * docs: Fix a few typo's in app docs (more then, resourse). Change-Id: Iba57efadf6c0b822e762c7a001bc89611d98afd7 2015-11-06 14:19 +0000 [d82a4b098f] George Joseph * dns: Use ntohl for ans->ttl in dns_parse_answer_ex dns_parse_answer_ex was not converting ans->ttl from network by order to host byte order which was causing certain ttls it to go negative. In turn this was causing answer edit checks to fail. ASTERISK-25528 #close Reported-by: Daniel Tryba Tested-by: George Joseph Change-Id: I31505132d6321c46d2f39fd06c20ee808a864037 2015-11-06 07:36 +0000 [74e7333317] 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 [9d6e917349] 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 [a2c2a8e1bb] 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-02 20:11 +0000 [cd5ae02812] Corey Farrell * Increase account code maximum length to 80. This increases the maximum length of account code's to match extensions. This ensures it is always possible to set an accountcode to ${EXTEN} without truncation. ASTERISK-23904 Reported by: Ben Merrills Change-Id: If122602304ce03362722eb213a3111b32da5eeb9 2015-11-03 14:36 +0000 [379c041038] 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-04 14:31 +0000 [9c293b5104] 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 [b0bf189908] 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 10:58 +0000 [63e02b45c6] 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 11:15 +0000 [d33a1682e3] 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 08:15 +0000 [e26a06c1da] 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 [40574a2ea3] 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 [f80a0ae49b] 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-10-29 15:25 +0000 [c5093b21ad] Tyler Cambron * StatsD: Send stuff to the StatsD server and test Added code to allow the StatsD dialplan application to send data to the server specified in statsd.conf. ASTERISK-25419 Change-Id: I400db2f37c6ddf61515ff5a019646e36dcd0f922 2015-11-02 06:57 +0000 [014e3d426b] 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 [80cf4960ff] 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 [b522a5e30f] 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-08 11:50 +0000 [fdfd0fb488] Tyler Cambron * StatsD: Add user input validation to the application Added code to accept user input and validate it before allowing it to be sent to the StatsD server. ASTERISK-25419 Reported By: Ashley Sanders Change-Id: I55c7ce44326a68ad6c5c1514b9575ac50f25bbc3 2015-10-26 11:42 +0000 [d343a25173] 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-19 07:11 +0000 [88f3dbaec9] 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 2015-10-24 13:08 +0000 [4328d320c2] George Joseph * 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 [a8aee0bbdb] George Joseph * 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 12:22 +0000 [691c0e0b31] 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 [5dd9e1938a] 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 [7f9823ff57] 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 [e9e4bc9ece] 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 [b96267f7a3] 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 [386cd7b2b0] 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 [0b63d011c9] 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 [ac0194dad6] 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 [1ce62b2545] 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 [a04d946eaa] Richard Mudgett * Add missing failure checks to ast_str_set_va() callers. Change-Id: I0c2cdcd53727bdc6634095c61294807255bd278f 2015-10-21 11:44 +0000 [64c172deba] 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 [f9cbac7321] 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 [f3b2b3d1b3] 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 [b425850f8b] 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 [7be6194d6f] 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 14:14 +0000 [77780790e0] Jonh Wendell * main/cdr: Allow modules to modify CDR fields before dispatching them This patch adds the functions ast_cdr_modifier_register() ast_cdr_modifier_unregister() That work much like ast_cdr_register() and ast_cdr_unregister(). Modules registered will be given a chance to modify (or to do whatever they want) CDR fields just before they are passed to registered engines. Thus, for instance, if a module change the "userfield" field of a CDR, the modified value will be passed to every registered CDR backend for logging. ASTERISK-25479 #close Change-Id: If11d8fd19ef89b1a66ecacf1201e10fcf86ccd56 2015-10-19 19:59 +0000 [b9bd249a85] 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 (cherry picked from commit 9fc9777fa34753fb38991d42d8dbed516e907ca2) 2015-10-18 18:22 +0000 [92fa8d1e0e] 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-10-16 22:01 +0000 [b19860c03a] Corey Farrell * res_ari_events: Fix memory leak in mustache template. ASTERISK-25308 fixed a memory leak in res_ari_events.c, but this file is regenerated by a template and the template was not fixed. Change-Id: Ied4c6deae89d21f87f9cf99676b1d055aa83b38b 2015-10-14 14:15 +0000 [d799bcf361] 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 [13229037d1] 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-12 11:21 +0000 [984f100dab] Richard Mudgett * config.c: Fix off-nominal memory leak. Change-Id: I06e346e9a5c63cc5071e7eda537310c4b43bffe0 2015-10-12 11:20 +0000 [9951255775] 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 [c1ed11ee31] 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-10 15:20 +0000 [a12eb89ea4] 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-08 16:43 +0000 [ca030845ff] Richard Mudgett * configure: Fix check for libunbound to require v1.5.0 as minimum. Versions of libunbound before v1.4.21 do not compile with Asterisk. However, since v1.4.21 has a configure script bug that fails to detect the ldns library (which is fixed in v1.4.22) and v1.4.22 is not an easily detectable version we will require v1.5.0 as a minimum version of the library to work with Asterisk. ASTERISK-25108 #close Reported by: Richard Mudgett Change-Id: Ieb228bfb01467573fc121c7356a9dde27128894d 2015-10-08 11:50 +0000 [2fe9f09705] Tyler Cambron * StatsD: Write skeleton Asterisk application Wrote the skeleton framework for the Asterisk StatsD dialplan application. This includes a load function, unload function, a callback for execution, and XML documentation. ASTERISK-25419 Reported By: Ashley Sanders Change-Id: I9597730e134c6e82c8a55ef4d5334b62dd473363 2015-10-06 18:01 +0000 [34d7fa6c4a] 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 [cc131832aa] 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 [c944263e36] 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 [4bf395e81e] 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 [3ec9cf7d6a] 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 [8fe9350b68] 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 [8cb614fe20] 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 [c6b0d60264] 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 [89dec7675d] 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 [1b80dbeb60] 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 [9c1ca287a4] 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 [6554a3b25e] 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 [359394cc29] Richard Mudgett * res_sorcery_memory_cache.c: Misc tweaks. Change-Id: I8cd32dffbb4f33bb0c39518d6e4c991e73573160 2015-09-30 17:27 +0000 [7942d1c2ff] Richard Mudgett * res_sorcery_memory_cache.c: Made use OBJ_SEARCH_MASK. Change-Id: Ibca6574dc3c213b29cc93486e01ccd51f5caa46c 2015-09-30 13:42 +0000 [9f229d6a49] 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 [9bc7386b7c] Richard Mudgett * sched.c: Add warning about negative time interval request. Change-Id: Ib91435fb45b7f5f7c0fc83d0eec20b88098707bc 2015-09-25 18:37 +0000 [12feec0bf7] 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 [3f4fa245e5] 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 [aa00df62ee] 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-21 07:26 +0000 [2d7a4a3357] Matt Jordan * main/logger: Add log formatters and JSON structured logs When Asterisk is part of a larger distributed system, log files are often gathered using tools (such as logstash) that prefer to consume information and have it rendered using other tools (such as Kibana) that prefer a structured format, e.g., JSON. This patch adds support for JSON formatted logs by adding support for an optional log format specifier in Asterisk's logging subsystem. By adding a format specifier of '[json]': full => [json]debug,verbose,notice,warning,error Log messages will be output to the 'full' channel in the following format: { "hostname": Hostname or name specified in asterisk.conf "timestamp": Date/Time "identifiers": { "lwp": Thread ID, "callid": Call Identifier } "logmsg": { "location": { "filename": Name of the file that generated the log statement "function": Function that generated the log statement "line": Line number that called the logging function } "level": Log level, e.g., DEBUG, VERBOSE, etc. "message": Actual text of the log message } } ASTERISK-25425 #close Change-Id: I8649bfedf3fb7bf3138008cc11565553209cc238 2015-09-27 20:45 +0000 [9402f80726] 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 [d6472d96b3] 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 [7c7a7ddd27] 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 [145608bd81] 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 [1d394774b2] 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 [680b76eb25] 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 [fdf0bcb04a] 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 [c285879845] Richard Mudgett * app_dial.c: Remove some no-op code. Change-Id: Ice1884a94315d3cb7e3bbd47a9fba76a27276c54 2015-09-23 14:02 +0000 [3eefa07a39] 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 [f42084be09] 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 [06f4f80a63] 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-04 12:25 +0000 [b99a705262] 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 18:06 +0000 [c74101509d] 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-21 08:16 +0000 [a29cf45c76] 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-04 12:24 +0000 [47813cc51c] 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-03 21:19 +0000 [5206aa9d30] 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-19 12:49 +0000 [9200ad03a3] Alexander Traud * astfd: Adds a timestamp for each entry. Now with menuselect "DEBUG_FD_LEAKS" and CLI "core show fd", a timestamp is shown with each file descriptor. This helps to debug leaked UDP/TCP ports on long-lived servers, for example. ASTERISK-25405 #close Change-Id: I968339e5155a512eba1032a5263f1ec8b5e1f80b 2015-09-16 08:22 +0000 [42a897c4c3] 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 [d9723d242a] Scott Griepentrog * CHAOS: avoid crash if string create fails Validate string buffer allocation before using them. ASTERISK-25323 Change-Id: Ib9c338bdc1e53fb8b81366f0b39482b83ef56ce0 2015-09-11 01:52 +0000 [99aa7cb26e] Rodrigo Ramírez Norambuena * dr_adaptive_odbc.c, cel_odbc.c, cel_pgsql.c: REFACTOR Macro LENGTHEN_BUF Remove repeated code on macro of assigned buffer to SQL vars Change-Id: Icb19ad013124498e172ea1d0b29ccd0ed17deef0 2015-09-17 04:52 +0000 [e4df271a3e] 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 [e1927915bc] 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 [729a4325da] 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 [87f04d5acf] 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 [63ede41227] 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 [e47396721f] 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 [077adf48b8] 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 [0a74c80300] 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-09-03 21:15 +0000 [45cf79665c] 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-08-21 21:50 +0000 [34aa96bef4] 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 [69824fdfbf] Richard Mudgett * res_pjsip_pubsub.c: Mark ast_sip_create_subscription() as not used. Change-Id: I2b8db18eac36c01a5c7eb9467699124e203fd093 2015-09-09 12:24 +0000 [2526659432] Richard Mudgett * res_pjsip_pubsub.c: Add some notification comments. Change-Id: Ie62ff1f4b7adc1a12fa0303f53926af249b25e20 2015-08-21 18:01 +0000 [9b290dfe2f] 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 [73eb132012] 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 [2b30fc2b2d] 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 [08a182c8e6] Richard Mudgett * res_pjsip_pubsub.c: Use ast_alloca() instead of alloca(). Change-Id: Ia396096b4fedc2874649ca11137612c3f55e83e3 2015-08-21 11:04 +0000 [61f30db877] Richard Mudgett * res_pjsip_pubsub.c: Add missing error return in load_module(). Change-Id: I15debd0f717f16ee2f78e7f56151c3b3b97b72fc 2015-08-21 11:03 +0000 [b8f07527b2] Richard Mudgett * res_pjsip/location.c: Use the builtin ao2_callback() match function instead. Change-Id: I364906d6d2bad3472929986704a0286b9a2cbe3f 2015-09-10 09:49 +0000 [f1a2e82d49] 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 [bd71dcd1da] 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-09 16:46 +0000 [5bd363010e] 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 [fcea6910f6] 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-04 16:33 +0000 [8e5ed27a16] 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-08 07:21 +0000 [3628e380b8] 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 [d2106c0b21] 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 [ef3358d0c0] 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 [86b02228f5] 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 [27c89053b0] 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 [993ae9a669] 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-03 14:07 +0000 [7d981b787c] 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 09:26 +0000 [7691035312] 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 [be31747db8] 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-01 10:16 +0000 [fbdb42c9fc] 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-02 17:26 +0000 [c15d8cc0ed] 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 [b51cf1e712] 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 [beb568e51c] 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-29 10:36 +0000 [fc4d4f5379] 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 [bb38010c67] 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 [c036e50fbe] 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 [229b95d253] 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 [6bfa14bdad] 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 [490db8ba94] 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 [d03d09aad3] 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 [d013ecf748] 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 06:21 +0000 [98d089fb9a] 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-24 11:04 +0000 [a408369bac] 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-23 18:26 +0000 [3af34441eb] 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-21 23:37 +0000 [89003ea320] Rodrigo Ramírez Norambuena * README*: Remove trailing whitespace Change-Id: I18b7d75187548a9ed55b4f258d21aaaf29d08874 2015-07-28 13:47 +0000 [857923d9c7] Richard Mudgett * chan_sip.c: Set preferred rx payload type mapping on incoming offers. ASTERISK-25166 Reported by: Kevin Harwell ASTERISK-17410 Reported by: Boris Fox Change-Id: I7f04d5c8bee1126fee5fe6afbc39e45104469f4e 2015-07-24 18:46 +0000 [d643b206c6] Richard Mudgett * res_pjsip_sdp_rtp.c: Set preferred rx payload type mapping on incoming offers. ASTERISK-25166 Reported by: Kevin Harwell ASTERISK-17410 Reported by: Boris Fox Change-Id: I97ecebc1ab9b5654fb918bf1f4c98c956b852369 2015-07-27 19:19 +0000 [f7df3e1a01] Richard Mudgett * rtp_engine.c: Get current or create a needed rx payload type mapping. * Make ast_rtp_codecs_payload_code() get the current mapping or create a rx payload type mapping. ASTERISK-25166 Reported by: Kevin Harwell ASTERISK-17410 Reported by: Boris Fox Change-Id: Ia4b2d45877a8f004f6ce3840e3d8afe533384e56 2015-07-27 19:15 +0000 [38854a9f7b] Richard Mudgett * rtp_engine.c: Extract rtp_codecs_payload_replace_rx(). ASTERISK-25166 Reported by: Kevin Harwell ASTERISK-17410 Reported by: Boris Fox Change-Id: I34e23bf5b084c8570f9c3e6ccd19b95fe85af239 2015-07-23 19:24 +0000 [1a549ed134] Richard Mudgett * rtp_engine.c: Initial split of payload types into rx and tx mappings. There are numerous problems with the current implementation of the RTP payload type mapping in Asterisk. It uses only one mapping structure to associate payload types to codecs. The single mapping is overkill if all of the payload type values are well known values. Dynamic payload type mappings do not work as well with the single mapping because RFC3264 allows each side of the link to negotiate different dynamic mappings for what they want to receive. Not only could you have the same codec mapped for sending and receiving on different payload types you could wind up with the same payload type mapped to different codecs for each direction. 1) An independent payload type mapping is needed for sending and receiving. 2) The receive mapping needs to keep track of previous mappings because of the slack to when negotiation happens and current packets in flight using the old mapping arrive. 3) The transmit mapping only needs to keep track of the current negotiated values since we are sending the packets and know when the switchover takes place. * Needed to create ast_rtp_codecs_payload_code_tx() and make some callers use the new function because ast_rtp_codecs_payload_code() was used for mappings in both directions. * Needed to create ast_rtp_codecs_payloads_xover() for cases where we need to pass preferred codec mappings to the peer channel for early media bridging or when we need to prefer the offered mapping that RFC3264 says we SHOULD use. * ast_rtp_codecs_payloads_xover() and ast_rtp_codecs_payload_code_tx() are the only new public functions created. All the others were only used for the tx or rx mapping direction so the function doxygen now reflects which direction the function operates. * chan_mgcp.c: Removed call to ast_rtp_codecs_payloads_clear() as doing that makes no sense when processing an incoming SDP. We would be wiping out any mappings that we set for the possible outgoing SDP we sent earlier. ASTERISK-25166 Reported by: Kevin Harwell ASTERISK-17410 Reported by: Boris Fox Change-Id: Iaf6c227bca68cb7c414cf2fd4108a8ac98bd45ac 2015-08-19 12:10 +0000 [21d419e4fc] 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 [53e2a6a829] 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 15:07 +0000 [03eb6cbc10] Richard Mudgett * res_ari_events: Fix shutdown ref leak. ASTERISK-25308 #close Reported by: Joshua Colp Change-Id: I592785bf70ff4b63d00e535b482f40da8e82a082 2015-08-18 14:24 +0000 [e1e7e205bc] Richard Mudgett * res_http_websocket.c: Add missing unref on an off nominal path. Change-Id: I228df6adecd4cb450d03e09e9a38c86bb566e811 2015-08-18 16:06 +0000 [59253a2262] 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 [1f0a9f8a76] Richard Mudgett * res_ari.c: Add missing off nominal unlock and remove a RAII_VAR(). Change-Id: I0c5e7b34057f26dadb39489c4dac3015c52f5dbf 2015-08-14 12:55 +0000 [9fb4a96e15] 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 16:41 +0000 [87b22969a4] 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-17 13:34 +0000 [5cf98e2459] Richard Mudgett * app_queue.c: Fix error checking in QUEUE_MEMBER() read. Change-Id: I7294e13d27875851c2f4ef6818adba507509d224 2015-08-17 11:00 +0000 [178e1adffb] 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 [5a85711568] 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 [7c4cb8618d] Richard Mudgett * audiohook.c: Simplify variable usage in audiohook_read_frame_both(). Change-Id: I58bed58631a94295b267991c5b61a3a93c167f0c 2015-08-13 12:22 +0000 [bb37473234] 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 [43bdddfc26] 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 [495dfb24b7] 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 [7e65be4ecd] 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-09 18:42 +0000 [a87e2dd254] 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-10 13:43 +0000 [87c92d2aee] 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 [b9b957d4e9] 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 [f3f5b45d57] 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 [991d4da1eb] 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 17:56 +0000 [e188192ad1] 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 [d5f0c27122] 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-07-24 17:04 +0000 [40caf0ad9b] David M. Lee * Replaces clock_gettime() with ast_tsnow() clock_gettime() is, unfortunately, not portable. But I did like that over our usual `ts.tv_nsec = tv.tv_usec * 1000` copy/paste code we usually do when we want a timespec and all we have is ast_tvnow(). This patch adds ast_tsnow(), which mimics ast_tvnow(), but returns a timespec. If clock_gettime() is available, it will use that. Otherwise ast_tsnow() falls back to using ast_tvnow(). Change-Id: Ibb1ee67ccf4826b9b76d5a5eb62e90b29b6c456e 2015-08-07 14:20 +0000 [12e6f5ac01] 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 [b91ca7ba49] 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 [f19c4930c2] 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 [382334cc06] 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 [4b6c657a82] 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 [7351d33a1f] 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 [c63316eec1] 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 [35a98161df] 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-29 14:17 +0000 [1f02d20da4] 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-31 11:27 +0000 [fe804b09b3] Ashley Sanders * ARI: Channels added to Stasis application during WebSocket creation ... Prior to ASTERISK-24988, the WebSocket handshake was resolved before Stasis applications were registered. This was done such that the WebSocket would be ready when an application is registered. However, by creating the WebSocket first, the client had the ability to make requests for the Stasis application it thought had been created with the initial handshake request. The inevitable conclusion of this scenario was the cart being put before the horse. ASTERISK-24988 resolved half of the problem by ensuring that the applications were created and registered with Stasis prior to completing the handshake with the client. While this meant that Stasis was ready when the client received the green-light from Asterisk, it also meant that the WebSocket was not yet ready for Stasis to dispatch messages. This patch introduces a message queuing mechanism for delaying messages from Stasis applications while the WebSocket is being constructed. When the ARI event processor receives the message from the WebSocket that it is being created, the event processor instantiates an event session which contains a message queue. It then tries to create and register the requested applications with Stasis. Messages that are dispatched from Stasis between this point and the point at which the event processor is notified the WebSocket is ready, are stashed in the queue. Once the WebSocket has been built, the queue's messages are dispatched in the order in which they were originally received and the queue is concurrently cleared. ASTERISK-25181 #close Reported By: Matt Jordan Change-Id: Iafef7b85a2e0bf78c114db4c87ffc3d16d671a17 2015-07-29 12:58 +0000 [86034227ca] Mark Michelson * dns_core: Allow zero-length DNS responses. A testsuite test recently failed due to a crash that occurred in the DNS core. The problem was that the test could not resolve an address, did not set a result on the DNS query, and then indicated the query was completed. The DNS core does not handle the case of a query with no result gracefully, and so there is a crash. This changeset makes the DNS system resolver set a result with a zero-length answer in the case that a DNS resolution failure occurs early. The DNS core now also will accept such a response without treating it as invalid input. A unit test was updated to no longer treat setting a zero-length response as off-nominal. Change-Id: Ie56641e22debdaa61459e1c9a042e23b78affbf6 2015-07-29 13:49 +0000 [f49bef08a2] 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 [33a465249b] 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 [5f925d48b7] Richard Mudgett * rtp_engine.c: Must protect mime_types_len with mime_types_lock. Change-Id: I44220dd369cc151ebf5281d5119d84bb9e54d54e 2015-07-24 18:38 +0000 [ba7dd38470] Richard Mudgett * res_pjsip_sdp_rtp.c: Fixup some whitespace. Change-Id: Ib4eb7ef7dcaf93ddc26538f0a498aaf110d7a973 2015-07-24 18:42 +0000 [3751bf0971] Richard Mudgett * res_pjsip_sdp_rtp.c: Fix processing wrong SDP media list. Change-Id: I7c076826c2d3c6ae8c923ca73b7a71980cca11f2 2015-07-27 19:10 +0000 [e2d5d4db35] 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 [bc1eae55cb] 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-17 16:23 +0000 [d122c1e50b] 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-23 12:41 +0000 [d12dc97fc9] Richard Mudgett * rtp_engine.h: Misc comment fixes. Change-Id: If98139264d5d97427b4685ecbdc54518f725bc43 2015-07-30 17:05 +0000 [077c58cd5c] 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 [5fcd1bc556] 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 [8fb8988fd4] 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-28 05:33 +0000 [1d081ec970] 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-16 12:16 +0000 [687597ca8c] 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 (cherry picked from commit 8458b8d441c2f4143ff135163ff3da4f88fe14c8) 2015-07-18 11:16 +0000 [309dd2a409] 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 [a0c31c7a05] Mark Michelson * res_pjsip: Add rtp_keepalive to sample config file. Change-Id: I5f62d0c5684f8b2335f9f8ac2d79ee04fbdafb19 2015-07-23 13:11 +0000 [d97bed46b7] 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 [1cc99ba8b6] 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 [0b7148e262] 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 [e5fe8d40c8] 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 15:59 +0000 [293c9f6894] Elazar Broad * cdr/cdr_adaptive_odbc.c: Fix quoted identifier usage when inserting CDR records Commit a24ce38 added support for the use of quoted indentifiers when inserting CDR records into the database. However, the if statement logic responsible for determining whether to use those identifiers is reversed, resulting in a reference to the quoted identifier character buffer which will be null, hence null terminating the SQL query, resulting in a truncated statement which fails to execute. ASTERISK-25263 #close Reported by: Elazar Broad Tested by: Elazar Broad Change-Id: I40da47309b67cc1572207b1515dcc08ec9b1f644 2015-07-20 12:39 +0000 [d02196448b] 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 [2b42264e66] 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: I3b9903d99e35fe5d0b53ecc46df82c750776bc8d 2015-07-16 09:13 +0000 [8b503f2a10] Michael Cargile * res/res_musiconhold: Add a warning when MOH does not exist Change-Id: Ifdfbd0b97cf31478d29923ec30aabce28d01740b 2015-07-19 09:11 +0000 [9475dc9492] 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 [649460aa44] 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-14 16:55 +0000 [4a875e8082] 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-17 04:59 +0000 [7908ae4934] 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-08 16:39 +0000 [254d07b15b] 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 [b34c4528ab] 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 [097c15ac51] Richard Mudgett * parking_applications.c: Fix ast_verb() line terminator. Change-Id: I8797238c71563e243c48c6145b4f1ae58f91f775 2015-07-14 14:36 +0000 [8b620c555b] 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 [4af24ec74b] Richard Mudgett * res_pjsip_session.c: Extract sip_session_defer_termination_stop_timer(). Change-Id: I9e115dee74bd72e06081d0ee73ecdeb886caa5fb 2015-07-10 10:42 +0000 [71b3bcf5e0] Richard Mudgett * res_pjsip_session.c: Add some helpful comments and minor tweaks. Change-Id: I742aeeaf5f760593f323a00fb691affe22e35743 2015-07-10 10:43 +0000 [53c91737a5] Richard Mudgett * res_pjsip_session.c: Fix off nominal crash potential in debug message. Change-Id: I09928297927ee85f7655289acee3a586816466bc 2015-07-15 10:31 +0000 [eff6a88a88] 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 [e01d93e092] 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-10 18:17 +0000 [1b666549f3] 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 [9d458b8311] 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 [f64f1c2772] 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 [aa5707b889] 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 [6a764db370] 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 [c855523519] 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-05-13 16:22 +0000 [ef82190804] Matt Jordan * media cache: Add CLI commands This patch adds five CLI commands for the media cache: * 'media cache show all' - display a summary of all items in the media cache. * 'media cache show ' - display detailed information about a single item in the media cache. * 'media cache delete ' - remove an item from the media cache, and inform the bucket backend for the URI scheme to remove the item as well. * 'media cache refresh ' - refresh a URI. If the item does not exist in the media cache, the bucket backend will pull down the media associated with the URI and create the item in the cache. * 'media cache create ' - create an item in the media cache from some local media storage. Note that the bucket backend for the URI scheme must still permit the item creation. Change-Id: Id1c5707a3b8e2d96b56e4691a46a936cd171f4ae 2015-01-29 08:38 +0000 [3ea0d38396] Matt Jordan * media cache: Add a core API and facade for a backend agnostic media cache This patch adds a new API to the Asterisk core that acts as a media cache. The core API itself is mostly a thin wrapper around some bucket API provided implementation that itself acts as the mechanism of retrieval for media. The media cache API in the core provides the following: * A very thin in-memory cache of the active bucket_file items. Unlike a more traditional cache, it provides no expiration mechanisms. Most queries that hit the in-memory cache will also call into the bucket implementations as well. The bucket implementations are responsible for determining whether or not the active record is active and valid. This makes sense for the most likely implementation of a media cache backend, i.e., HTTP. The HTTP layer itself is the actual arbiter of whether or not a record is truly active; as such, the in-memory cache in the core has to defer to it. * The ability to create new items in the media cache from local resources. This allows for re-creation of items in the cache on restart. * Synchronization of items in the media cache to the AstDB. This also includes various pieces of important metadata. The API provides sufficient access that higher level APIs, such as the file or app APIs, do not have to worry about the semantics of the bucket APIs when needing to playback a resource. In addition, this patch provides unit tests for the media cache API. The unit tests use a fake bucket backend to verify correctness. Change-Id: I11227abbf14d8929eeb140ddd101dd5c3820391e 2015-07-11 20:25 +0000 [887945d410] Matt Jordan * main/bucket: Add a callback function for ast_bucket_file objects This patch adds a new function to the bucket API for ast_bucket_file objects, ast_bucket_file_metadata_callback. It will call ao2_callback on the ast_bucket_file's ao2_container of metadata, calling the provided ao2_callback_fn callback on each piece of metadata associated with the file. This is particularly useful when a bucket backend has added metadata, and a higher level API wants to be aware of/access said metadata, without knowing for sure what the key is. Change-Id: I96f6757717f47b650df91a437f7df16406227466 2015-07-08 16:28 +0000 [458715d088] 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 [6ed58014f5] 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-07-08 16:38 +0000 [e64e586900] 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 [7c14dfdc61] Matt Jordan * res/res_pjsip_outbound_registration: Fix WARNING message Newlines are nice. Change-Id: Icf0d915db02882e47cd9077ed9009f5d44140d42 2015-07-08 16:35 +0000 [3e286e6b51] 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 [ffadb5f1de] 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-06-27 17:53 +0000 [5266796432] 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 [f77e688f20] 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-06-26 10:57 +0000 [1b7760a8aa] 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 [4a25d55416] 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-07-08 04:21 +0000 [9276415f65] 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-07 15:03 +0000 [3cdfd39af7] Ashley Sanders * DNS: Create a system-level DNS resolver Prior to this patch, the DNS core present in master had no default system-level resolver implementation. Therefore, it was not possible for the DNS core to perform resolutions unless the libunbound library was installed and the res_resolver_unbound module was loaded. This patch introduces a system-level DNS resolver implementation that will register itself with the lowest consideration priority available (to ensure that it is to be used only as a last resort). The resolver relies on low-level DNS search functions to perform a rudimentary DNS search based on a provided query and then supplies the search results to the DNS core. ASTERISK-25146 #close Reported By: Joshua Colp Change-Id: I3b36ea17b889a98df4f8d80d50bb7ee175afa077 2015-07-01 07:55 +0000 [5717340ab3] 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 18:48 +0000 [189841ddb7] 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 [7cd99be534] 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 [792ed7ce93] 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-30 11:17 +0000 [030e8339dd] Richard Mudgett * res_pjsip_mwi.c: Use safer loop coding in mwi_subscription_mailboxes_str(). Change-Id: I6f39d809a6d1b47b35bb32b298f5a12f35d6f907 2015-06-30 11:14 +0000 [453d7b8d69] Richard Mudgett * res_pjsip_mwi.c: Eliminate a simple RAII_VAR. Change-Id: Ib1843f81e826a6c760c424c88eb70c350d9d61da 2015-06-30 11:11 +0000 [786c6d42ef] 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 16:10 +0000 [1b91094edd] 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 15:19 +0000 [74135c8efa] Kevin Harwell * res_pjsip: Failover when server is not available Previously Asterisk did not properly failover to the next resolved DNS address when a endpoint could not be reached. With this patch, and while using res_pjsip, SIP requests (both in/out of dialog) now attempt to use the next address in the list of resolved addresses until a proper response is received or no more addresses are left. ASTERISK-25076 #close Reported by: Joshua Colp Change-Id: Ief14f4ebd82474881f72f4538f4577f30af2a764 2015-07-06 09:24 +0000 [38a3c27a09] Joshua Colp * res_sorcery_memory_cache: Execute stale unit test last. In Jenkins there is currently a sporadic test failure of a variable number of sorcery memory cache unit tests. I have not been able to reproduce this on the build agents themselves or on my development machine. My working theory is that the stale unit test is causing a sorcery instance to persist longer than expected, causing subsequent tests to fail when setting up and initializing the next sorcery instance. To see if this is the case this change moves the stale unit test to execute last so no subsequent unit tests can have issues initializing their sorcery instance. Change-Id: Ifd6550a949613be774b75fa5db12c02110f82c4a 2015-06-20 13:54 +0000 [ef8d3f6506] Matt Jordan * bucket: Add clone/staleness operations for ast_bucket/ast_bucket_file This patch enhances the bucket API in two ways. First, since ast_bucket and ast_bucket_file instances are immutable, a 'clone' operation has been added that provides a 'clone' of an existing ast_bucket/ast_bucket_file object. Note that this makes use of the ast_sorcery_copy operation, along with the copy callback handler on the "bucket" and "file" object types for the bucket sorcery instance. Second, there is a need for the bucket API to ask a wizard if an object is stale. This is particularly useful with the upcoming media cache enhancements, where we want to ask the backing data storage if the object we are currently operating on has known updates. This patch adds API calls for ast_bucket and ast_bucket_file objects, which callback into their respective sorcery wizards via the sorcery API. Unit tests have also been added to cover the respective ast_bucket/ast_bucket_file clone and staleness operations. Change-Id: Ib0240ba915ece313f1678a085a716021d75d6b4a 2015-07-04 10:03 +0000 [b178f8701b] Matt Jordan * sorcery: Add support for object staleness This patch enhances the sorcery API to allow for sorcery wizards to determine if an object is stale. This includes the following: * Sorcery objects now have a timestamp that is set on creation. Since sorcery objects are immutable, this can be used by sorcery wizards to determine if an object is stale. * A new API call has been added, ast_sorcery_is_stale. This API call queries the wizards associated with the object, calling a new callback function 'is_stale'. Note that if a wizard does not support the new callback, objects are always assumed to not be stale. * Unit tests have been added that cover the new API call. Change-Id: Ica93c6a4e8a06c0376ea43e00cf702920b806064 2015-07-04 18:22 +0000 [f35a4b8525] 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 [2c17515f3c] 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 [34323f9f95] 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-01 16:04 +0000 [ef74ccb18d] 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-07-02 06:54 +0000 [f18436642b] Joshua Colp * dns: Fix crash when invoking cancel in DNS recurring unit test. The recurring unit test expects the user data on a DNS query created as a result of a recurring DNS query to be the recurring structure itself. This is true, mostly. When invoking the user provided callback this user data is changed to the user provided data. This presents a race condition where the data may or may not point to the recurring data. This change simplifies the callback of the user provided callback by creating a new query and populating it with the expected values. This leaves the recurring DNS query alone and fixes the race condition. This is more in line with how the API should be used overall. ASTERISK-25222 #close Change-Id: I10fb6deec025dff097157e7ec17e6e4921778478 2015-07-02 06:19 +0000 [6fbb58c7f7] Walter Doekes * chan_mgcp: Don't call close on fd -1. ASTERISK-25220 #close Change-Id: Ic48f3a82f51ada87f2fb0e016c9efe0ad56f1ee3 2015-07-02 06:10 +0000 [13a318bbb1] 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 [40274e3652] 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 [3fab8212e3] 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 master 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 [41610df8d5] Richard Mudgett * chan_vpb.cc: Fix compiler warning Jenkins found. Change-Id: I0ec7fd10d56d90d5a60b12b5a7d6807f265ac5e0 2015-07-01 13:34 +0000 [537df26f9c] 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-06-29 12:45 +0000 [58d18324f0] 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 [80d97290bb] 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 [892cc5625f] 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 [e18b22a806] 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 [99b1aa6d26] 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 [f536e9b59c] 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 14:34 +0000 [c2d48a2a28] Richard Mudgett * AMI: Add Linkedid to the standard channel snapshot AMI event headers. ASTERISK-25189 #close Reported by: John Hardin Change-Id: I2b1778c3fdc1dca0ed55db4e3a639eddfb16c2ac 2015-06-23 17:43 +0000 [700606a659] 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 [af4ae3095e] 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 [4c133d81cd] 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 [dc63377c60] 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-15 15:28 +0000 [9ec8a0f3cc] 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 [77ff7325a2] 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-25 06:42 +0000 [8d6cf667dc] 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-24 14:30 +0000 [daaa551c92] 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 16:39 +0000 [71a4d1a033] Richard Mudgett * Unit tests: Fix more 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: I2f4f37988ec363c8d1c5077a2fc8ca841c5cd30c 2015-06-24 14:39 +0000 [9c6d72e30d] 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-24 16:37 +0000 [a0c2d2089d] Richard Mudgett * DNS unit tests: Fix extraneous description string commas. Change-Id: Icf5f13c8e1c2c92a4473bb573ed2dd856ce1b64e 2015-06-23 11:21 +0000 [3b2b004d69] 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 16:23 +0000 [af66b0f3f7] Richard Mudgett * res_pjsip_outbound_registration.c: Add missing line endings to CLI commands Change-Id: I39ae612746d892d2dbe86f3ff2d7027fa1da57f7 2015-06-12 14:29 +0000 [3f0708e5fe] Richard Mudgett * res_pjsip_outbound_registration.c: Eliminate simple RAII_VAR() usage. Change-Id: I399cb9d61bbba706b48c98e0bf75e98984cd9a9e 2015-06-12 13:33 +0000 [9ceb848242] Richard Mudgett * res_pjsip_outbound_registration.c: Misc code cleanups. * Break some long lines. * Fix doxygen comment. Change-Id: I8f12ba6822f84d5e7bb575280270cd7e2fefb305 2015-06-22 15:11 +0000 [44c3c392e3] 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 05:04 +0000 [7846f73432] 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 13:57 +0000 [096b27d9d2] Richard Mudgett * res_pjsip_outbound_registration.c: Fix whitespace conflict potential. Change-Id: I82e6e388e3688aebe0783f16c9e0800a747584b5 2015-06-22 09:26 +0000 [1ad9a6b6b6] 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 [5caefc98a1] 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 [d7a1e84a1e] 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-17 07:00 +0000 [9668a1acb5] Joshua Colp * res_sorcery_memory_cache: Remove 'prefetch' option. To prevent confusion I am removing the prefetch option until such time as it is implemented. All other functionality, however, has been implemented. ASTERISK-25067 Change-Id: I9ce6aa3e5c6c5bc3c5baa8ff90fa036d73939895 2015-06-16 11:13 +0000 [59552c2d08] 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 [ea9d5f155e] Corey Farrell * func_pjsip_aor: Fix leaked contact from iterator. ASTERISK-25162 #close Change-Id: Id79aa3c6fe490016ee98efc97ac4c1d3f461f97e 2015-06-12 16:58 +0000 [93ac45d3bd] 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 [15c2208701] 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 [b8bc15286f] 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 [19f60d9412] 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 [bb00b26f35] 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 [7230ee2efe] 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 [a657ab12f9] 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-05 15:37 +0000 [30cd559345] Richard Mudgett * DNS: 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 when using an external DNS resolver to process messages for the transaction. * 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_resolver.c use the requesting thread's serializer to execute the async callback. * 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. ASTERISK-25115 #close Reported by: John Bigelow Change-Id: Iea71c16ce1132017b5791635e198b8c27973f40a 2015-06-05 12:16 +0000 [b23f33e7e5] Richard Mudgett * DNS: Fix some corner cases. * Fix query_set destruction before we are done kicking the queries off. * Fixed no queries requested handling. * Add empty queries request unit test. * Added missing allocation check in ast_dns_query_set_add(). * Made initial pjsip resolving query vector slightly larger. ASTERISK-25115 Reported by: John Bigelow Change-Id: Ie8be8347d0992e93946d72b6e7b1299727b038f2 2015-06-10 17:51 +0000 [ae589da466] Richard Mudgett * DNS: Remove trailing newline from summary and descriptions. Those trailing newlines mess up test formatting. Change-Id: I5e3f3a55b82c9d7acb9661201d4993d1958f1185 2015-06-05 11:43 +0000 [83bc9d366d] Richard Mudgett * pjsip_resolver.c: Fix debug code to only execute at acceptable debug level. Change-Id: I1716c93d6e097ad28128ecb9e806aac7a4180c8a 2015-06-05 11:41 +0000 [6d49dccd85] Richard Mudgett * DNS: Fix doxygen comments. Change-Id: Icafea3fb4ea64ac027561b23cbfe2b17997dc549 2015-06-09 15:31 +0000 [b705c09dbb] Richard Mudgett * res_pjsip.h: Fix some doxygen comments. Change-Id: I4615771077c3c6a0a7273da6d7b5f77af7e8d976 2015-06-05 13:46 +0000 [aa8479778e] Richard Mudgett * taskprocessor.c: Remove extra unref from off-nominal path. Change-Id: Iee3bd8c8a528776056972066698fe735f0f6cf60 2015-05-31 12:37 +0000 [07f5f45e5a] 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 [f897f36721] 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 [80621ce3c5] 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-08 09:44 +0000 [53c1126090] 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-02 15:07 +0000 [9fca378b36] 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-06-04 07:14 +0000 [d463bac574] 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-04 13:11 +0000 [128fe4cee8] Joshua Colp * res_sorcery_memory_cache: Implement expire_on_reload option. This change implements the expire_on_reload option for memory caches. If enabled and a reload is performed all objects within the cache will be expired and the cache emptied. ASTERISK-25067 Reported by: Matt Jordan Change-Id: Id46aa1957d660556700e689e195eed57c989b85e 2015-06-02 10:20 +0000 [028edae82e] Joshua Colp * test_sorcery_memory_cache_thrash: Add unit tests for thrashing the memory cache. This change adds a CLI command which can perform memory cache thrashing as well as unit tests which perform thrashing under the following configurations: 1. Low number of unique objects that go stale after 1 second 2. Low number of unique objects that expire after 1 second 3. Low number of unique objects which are constantly updated 4. Large number of unique objects which exceed a defined cache size 5. Large number of unique objects which exceed a defined cache size that also expire and go stale rapidly 6. Large number of unique objects which expire and go stale rapidly 7. Large number of unique objects For all of the above there are a large number of threads constantly attempting to retrieve random objects and each test runs for a few seconds. ASTERISK-25067 Reported by: Matt Jordan Change-Id: I8c8ceff977332c80ed4a31f10d694d48552b2f78 2015-06-04 05:33 +0000 [19de2bbc5f] Joshua Colp * res_sorcery_memory_cache: Add test event when a refresh occurs. This change adds a testsuite event for when a refresh occurs. This is useful as it provides a guaranteed mechanism of knowing when it has occurred instead of waiting an arbitrary amount of time. ASTERISK-25067 Reported by: Matt Jordan Change-Id: Iaa6b8d2d6bab7f99ee08e1c8908b8272a8987e65 2015-06-03 20:12 +0000 [6737ded058] 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 2015-06-03 17:41 +0000 [92ccffd9e6] 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-03 13:17 +0000 [d355ee7ff3] George Joseph * 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 13:02 +0000 [6d8dc9bb5c] Richard Mudgett * res_pjsip: Remove outgoing authentication code no longer needed. Associated with ASTERISK-25131 Change-Id: Iefa3b2066cfd8b108a90d2dd4a64d92c3a195d33 2015-06-02 12:55 +0000 [00a47ffc7e] Richard Mudgett * res_pjsip_session: Fix cherry pick to master compile error. ASTERISK-25131 Reported by: Richard Mudgett Change-Id: I87c9c96ae4a8fe2bc8a0ddea6958a2ad9cefd8e3 2015-06-02 12:27 +0000 [9472bbaa95] Joerg Sonnenberger * Remove const cast from leaf functions. app_control_register_rule and app_control_unregister_rule lock/unlock the queue, which is a mutating operation according to the ao2_lock/_unlock prototype. Depending on the specific (implicit) casts in SCOPED_LOCK and RAII_VAR, the compiler may warn or not. As the only callers of those functions do not have the const, get consistent results by just dropping it. Change-Id: Ib9e6296155a39bc5d627142a3828180c3cfe8fbb 2015-06-02 11:35 +0000 [5f712e82ac] Joerg Sonnenberger * tcptls.c: Don't use OpenSSL functions when no SSL support is present. Change-Id: I68a85a7fcbdb282140ff333c6274b6763d5f82a3 2015-06-01 12:08 +0000 [2cd40c2bd7] Rodrigo Ramírez Norambuena * cdr/cdr_csv.c: Set file name for csv master to the module when (re)loaded. Compute the location for the csv master file when the module is loaded or reload. Before it was calculated every time a log entry was written. Change-Id: I3ed9f6a8f965308099db70b71128f43d4d3f5585 2015-05-26 13:56 +0000 [5cdcae5240] 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-30 20:22 +0000 [9f1939ee27] 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 [0a5f8c0d73] 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 [bef000dd7c] George Joseph * 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 [82716410a4] George Joseph * Revert "endpoint/stasis: Eliminate duplicate events on endpoint status change" This reverts commit 6fca75bb628dfff2ab112e80b0228cf3ac0b8a05. Change-Id: Ifee026cc63e22c5ac5717c37867a9f036373ae5a 2015-05-26 07:34 +0000 [dfc45254d1] Joshua Colp * res_sorcery_memory_cache: Add CLI commands and AMI actions. This change adds the following CLI commands and AMI actions: sorcery memory cache show sorcery memory cache dump sorcery memory cache expire sorcery memory cache stale SorceryMemoryCacheExpire SorceryMemoryCacheExpireObject SorceryMemoryCacheStale SorceryMemoryCacheStaleObject These allow both examination and manipulation of sorcery memory caches from external sources. Cached objects can be explicitly expired from a cache or marked as stale. If expired they are immediately removed. If marked as stale they will be background refreshed when next retrieved. ASTERISK-25067 Reported by Matt Jordan Change-Id: I68e03cfd8c34b5e07f4b6ee4fd93a3f4a00a3d9e 2015-05-27 13:22 +0000 [6fca75bb62] George Joseph * 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:01 +0000 [2e54e7227c] Mark Michelson * res_sorcery_memory_cache: Add support for refreshing stale objects. This change introduces a check of object_lifetime_stale when retrieving cached objects. If the amount of time the object has been in the cache exceeds the lifetime, then a task is scheduled to update the cached object based on an object retrieved from other sorcery wizards instead. To prevent the cached object from being retrieved during a refresh, thread-local storage is used to mark the thread as being a stale object update. This results in the cache returning no object, leading to sorcery querying other wizards for the object instead. A test has been added for stale objects as well. This test ensures that stale objects are retrieved the same as freshly-cached objects. The test also ensures that after an object is stale, changes in the backend are reflected in the cache, to include if the object has been deleted from the backend. ASTERISK-25067 Reported by Matt Jordan Change-Id: I9bd7c049adf6939bfe2899f393c2bfbbf412d217 2015-05-21 17:21 +0000 [b8ac683822] George Joseph * 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-07 11:18 +0000 [95b186a174] Rodrigo Ramírez Norambuena * res/res_config_pgsql.c: Use PQescapeStringConn for escaping names. Use function PQescapeStringConn for escaping the name of the table and schema instead of doing it manually. ASTERISK-25132 #close Reported By: Rodrigo Ramírez Norambuena Change-Id: I302a263f7210d20925f14716b508b081998b7608 2015-05-26 07:44 +0000 [a7af6bca3c] 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 [23a798fecc] 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 [70d54ab6c4] 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 [50044fdc15] 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 16:52 +0000 [5a1f2a5884] Corey Farrell * Astobj2: Run weakproxy subscription callbacks in reverse order. Modify ao2_weakproxy_subscribe so each new subscription is added to the head of the list. This ensures that when other objects are allocated and use a subscription to the weakproxy for cleanup, cleanup will occur in the correct order. ASTERISK-25120 #close Change-Id: Ie0476f08ec21330de1b3f5a2dd3d9eb683df3d3d 2015-05-22 12:22 +0000 [f66c41e668] 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 [ad7192a8fd] 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 [9cffcca5f9] 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 [29ef6571cb] George Joseph * 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 17:35 +0000 [81d375baad] Joshua Colp * res_sorcery_memory_cache: Add support for object_lifetime_maximum. This makes the "object_lifetime_maximum" option operational. On the addition of an object to an empty memory cache a scheduled task is created which, when invoked, expires objects from the cache which have exceeded their lifetime. If more objects have been added the remaining life of the oldest object is used to schedule the next invocation of the scheduled task. If the oldest object is removed from the cache before it can be expired automatically the scheduled task is cancelled, if possible, and the lifetime of the next oldest is used to schedule the task. If during these two operations no additional objects exist in the cache then no task is scheduled. An additional unit test has been added which verifies this functionality. ASTERISK-25067 Reported by: Matt Jordan Change-Id: I87409674674a508e7717ee20739ca15cec6ba7b6 2015-05-20 00:45 +0000 [9e2a582d2d] 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-20 15:19 +0000 [071b3d43cb] Mark Michelson * res_sorcery_memory_cache: Add support for maximum_objects. This makes the "maximum_objects" option operational. A heap has been added alongside the hash table in the cache. When objects are added to the cache, they are also added to the heap. Similarly, when objects are removed from the cache, they are removed from the heap. The heap's use comes into play when an item is to be added to a "full" cache. When the cache is full, the oldest item is removed from the cache, using the heap to determine the oldest item. A unit test has been added that verifies that the maximum_objects option works as expected and that the oldest object is removed from the cache when an object beyond the maximum is added. ASTERISK-25067 #close Reported by Matt Jordan Change-Id: I490658830e9c4cbf0b3051e4cdc4913cf9f1b73a 2015-05-16 17:02 +0000 [f2cc766d81] Joshua Colp * res_sorcery_memory_cache: Add basic module implementation. This change adds a basic res_sorcery_memory_cache module which implements configuration option parsing, configuration file parsing for threading, sorcery interface implementation, and unit tests. Objects can be added, updated, deleted, and retrieved from the memory cache. Automatic expiration and stale handling will be added in the future. Note that unit tests exist within the module itself in case the threading done as a result of expiration results in asynchronous actions (which it likely will). Providing access and a notification mechanism for an external test module would be complicated and not worth it. ASTERISK-25067 #close Reported by: Matt Jordan Change-Id: Id8a6a357ef5a83d466f81eee56a67d13eeb118b9 2015-05-21 17:51 +0000 [36e5402885] 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 13:05 +0000 [3e2a994c71] 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 (cherry picked from commit 9d8a462356a938eea82e8424242d89a682495b57) 2015-05-20 20:53 +0000 [d067847695] 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 [31f0d78d7b] 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-04-20 16:00 +0000 [83ff268b9e] 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-14 15:21 +0000 [7bf88eb60d] 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-13 09:55 +0000 [5ce54ed74a] 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-20 12:55 +0000 [ddb7cbef8e] John Bigelow * res/res_resolver_unbound.c: Add missing include of signal.h ASTERISK-25110 #close Reported by: John Bigelow Change-Id: I99a9d93f066f265357b647b8e99a75e45da5a39f 2015-05-06 21:18 +0000 [9c3c7797e5] Rodrigo Ramírez Norambuena * cel, cdr: Assigned separator for column name and values. Use a separator string between column names and values for SQL sentences instead of evaluating the separator to use each time. This change adds a space after the comma in constructing SQL sentences. Before the SQL was created like "INSERT INTO cdr(calldate,clid,dst" without spaces between column name and values. The files applied this change are cdr/cdr_adaptive_odbc.c, cdr/cdr_pgsql.c, cel/cel_odbc.c ASTERISK-25109 #close Reported By: Rodrigo Ramírez Norambuena Change-Id: Ia5a1a161f5e26e1643703b30f8cc9cf0860cc7ea 2015-05-17 07:15 +0000 [d8698b7f3f] Matt Jordan * doxygen: Fix doxygen errors This patch fixes a number of errors and warning messages in the doxygen log. Specifically, it addresses: * A number of files incorrectly places a '\brief' tag immediately after a '\file' tag. Doing so emits a warning, as '\file' takes an optional argument specifying which file the doxygen comment is for. As '\brief' is not a file, doxygen was unamused. * A grouping of Stasis Topics and Messages in rtp_engine.h was incorrectly terminated. We now correctly terminate the grouping, which prevents members of rtp_engine.h from showing up in the wrong group. * Group indicators which are not part of the Stasis Topics and Messages group were removed. Group indicators without an \addtogroup or \ingroup have no meaning. Change-Id: Ia1415ffec6767e27233ae1cae5ed5970de5656d4 2015-05-19 13:01 +0000 [d2e998cd68] 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-14 22:05 +0000 [17129d2c29] 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 [5d93928175] 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 [e48d29054f] 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-10 09:55 +0000 [8f3f414d8c] Alexander Traud (License 6520) * tcptls: Enable multiple TLS certificate chains (RSA+ECC+DSA) for server socket. When a client connects to a server via SSL/TLS, the server commonly utilizes an RSA key-pair. However, other such algorithms exist (i.e. DSA and ECDSA), and if the server socket is configured with a certificate for either one of those, it would lose its compatibility with RSA-only clients. Now, the server socket can be configured with up to one RSA, ECDSA and DSA key each. For example, if a client is not compatible with SHA-2 hashed certificates like Nokia mobile phones, the server socket still can use RSA/SHA-1 for legacy clients and ECDSA/SHA-2 for everyone else. ASTERISK-24815 #close Reported by: Alexander Traud patches: tls_rsa_ecc_dsa.patch uploaded by Alexander Traud (License 6520) Change-Id: Iada5e00d326db5ef86e0af7069b4dfa1b979da9a 2015-05-14 17:12 +0000 [2415a14ce9] Maciej Szmigiero * Add X.509 subject alternative name support to TLS certificate verification. This way one X.509 certificate can be used for hosts that can be reached under multiple DNS names or for multiple hosts. Signed-off-by: Maciej Szmigiero ASTERISK-25063 #close Change-Id: I13302c80490a0b44c43f1b45376c9bd7b15a538f 2015-05-13 15:41 +0000 [3e89f01b55] 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-14 00:06 +0000 [0a46d43b9c] 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-12 08:58 +0000 [478fb4a388] Corey Farrell * MALLOC_DEBUG: Replace WRAP_LIBC_MALLOC with ASTMM_LIBC. There are 3 ways that calls directly to standard allocator functions can be dealt with: 1. Block their use, cause them to generate an error. This is the default. 2. Replace them with the Asterisk equivalent function calls. 3. Leave them alone. This change allows one of these 3 options to be selected by any source. The source just needs to define ASTMM_LIBC to ASTMM_BLOCK, ASTMM_REDIRECT, or ASTMM_IGNORE to use option 1, 2 or 3 respectively. Normally ASTMM_BLOCK is the correct option, so it is default when ASTMM_LIBC is not defined. In some cases when building 3rd party code it is desirable to have it use Asterisk functions, without changing the whole source - ASTMM_REDIRECT accomplishes this. When using 3rd party libraries sometimes a static inline function will make use of malloc or free. In these cases it may be unsafe to replace the allocator in the header, as it's possible the memory could be freed by the library using standard allocators. For those cases ASTMM_IGNORE is needed. Change-Id: I8afef4bc7f3b93914263ae27d3a5858b69663fc7 2015-05-05 19:49 +0000 [eec010829a] Rodrigo Ramírez Norambuena * AST_MODULE_INFO: Format corrections to the usages of AST_MODULE_INFO macro. Change-Id: Icf88f9f861c6b2a16e5f626ff25795218a6f2723 2015-05-06 05:28 +0000 [46bb8449e8] Rodrigo Ramírez Norambuena * cel/cel_pgsql.c: Use the 'SEP' macro when appending a column name When appending a column name to the sql buffer, the predicate, "if first is non-null, use empty string; else, use comma", is identical to the 'SEP' macro definition. Since they are the same, this patch replaces the redundant predicate statement with the 'SEP' macro. Change-Id: Ib8b6138b06a48381723108a05ab8752cb8700509 2015-05-12 17:45 +0000 [0d97d7cb94] 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-12 17:34 +0000 [0bb0d4a603] 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-06 08:31 +0000 [57386dcb67] Corey Farrell * Allow command-line options to override asterisk.conf. Previous versions of Asterisk processed command-line options before processing asterisk.conf. This meant that if an option was set in asterisk.conf, it could not be overridden with the equivelent command line option. This change causes Asterisk to process the command-line twice. First it processes options that are needed to load asterisk.conf, then it processes the remaining options after the config is read. This changes the function of -X slightly. Previously using -X without disabling execincludes in asterisk.conf caused #exec to be usable in any config. Now -X only enables #exec for the load of asterisk.conf, if it is wanted in the rest of the system it must be enabled with execincludes in asterisk.conf. Updated 'asterisk -h' and 'man asterisk' to reflect the limited function of -X. ASTERISK-25042 #close Reported by: Corey Farrell Change-Id: I1450d45c15b4467274b871914d893ed4f6564cd7 2015-05-05 15:32 +0000 [52407088f8] 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 [cc853dcf90] 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-10 02:26 +0000 [c624e4bae1] 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-01 12:22 +0000 [e6daafb8a6] Rodrigo Ramírez Norambuena * cdr_pgsql, cel_pgsql: Store maximum buffer size to prevent reallocation The code previously used a fixed size of 512 for the SQL queries. Depending on the size this may require it to grow. This change makes it so if the buffer size does grow the size is stored and next time the buffer will be large enough. Change-Id: I55385899f1c06dee47e4274c2d21538037b2d895 2015-05-09 16:58 +0000 [87d8b36755] 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 [e6ebddd9ae] 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-01 23:43 +0000 [c61b146238] 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-10 07:37 +0000 [2ab5d22c0d] 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-10 08:36 +0000 [f82bd76e3c] Joshua Colp * dns_srv: Fix SRV sorting when records with priority zero exist with non-zero. The DNS SRV sorting code currently has an issue when records with a priority of zero exist with records of a non-zero priority. This occurs because the sorting code considers zero to mean unset when in reality is a valid value. If the current priority is zero it will get replaced with any remaining record that has a priority of non-zero, until no records of those exist after which the records of priority zero are handled. This change makes it so that the priority of the first remaining record is the current starting priority. There is also a small optimization to prevent iterating records when the starting priority is already zero. Change-Id: I103511f35b50428f770bd4db3ffef70fb6f82d35 2015-05-08 18:01 +0000 [1503d0c14c] 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-08 14:47 +0000 [5e361e1476] 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 12:30 +0000 [2d4dc0c963] Corey Farrell * Fix error's produced by astmm.h when standard allocators are used. astmm.h includes defines that are meant to cause error's when standard allocators (malloc, calloc, free, etc) are used. It actually only causes a warning, which is not always caught on certain sources. In modules this unknown symbol is not detected until runtime, where the module fails to load. This modifies the define's so that using one of the blocked functions will cause a compile error regardless of CFLAGS. Moved spandsp header includes to before asterisk.h so the static inline functions can continue using malloc and free. Although these functions are never called and optimized away, the updated replacement macro's would still cause a failure. Change-Id: I532640aca0913ba9da3b18c04a0f010ca1715af5 2015-05-08 10:39 +0000 [63c71c9f4a] 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 [60bf9ed91a] 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 10:30 +0000 [f93b3a22d6] Corey Farrell * Fix crash in codec_lpc10 when MALLOC_DEBUG is enabled. This switches codecs/lpc10/lpcini.c back to including "asterisk.h" instead of . lpcini.c allocates memory that is freed by codec_lpc10.c, so it is important to use MALLOC_DEBUG allocator. Added #define WRAP_LIBC_MALLOC to the start of the source to prevent runtime symbol link error's. Change-Id: I74f63fd09fdeb673ee7753122c3bb4722ab6e1ac 2015-05-07 14:54 +0000 [cf637f2510] 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-04 14:43 +0000 [b885f719bf] 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-06 13:24 +0000 [e33682cae2] 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-05 20:22 +0000 [c886be5df2] 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-06 17:37 +0000 [1f5db1c7e3] 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 [7103b374ef] Richard Mudgett * chan_dahdi: Improve force_restart_unavailable_chans option description. ASTERISK-25034 Reported by: Richard Mudgett Change-Id: I1ff8f02124d2f4abd632a050da52c64285bb7f30 2015-05-06 04:32 +0000 [d2e2271874] Joshua Colp * manager: Fix build due to missing variable usage. Change-Id: I26d4d2cb9cee924632ff59ef0b30a7e6a1e2b00d 2015-05-04 20:11 +0000 [6b40bbf5bb] 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-05 18:17 +0000 [6c4d1c3223] 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 14:48 +0000 [90bfc02e84] 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:34 +0000 [bebf0b9b27] Joshua Colp * chan_unistim: Fix build failure due to ACL changes. Change-Id: I57081045c72b9fcf12d5c84493278f9272c31b32 2015-05-05 11:35 +0000 [247fef6653] 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 2015-05-05 09:47 +0000 [c541923ac3] 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 [8a3e93a349] 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-01 22:14 +0000 [cb79b8ab80] Rodrigo Ramírez Norambuena * cel_pgsql: Add support for setting schema Add feature to set optional schema parameter on configuration file via 'schema' setting. Fix query to get columns from table while considering schema. If in the database there exists two tables with same name in distinct schemas it will return an error when inserting record. ASTERISK-24967 #close Change-Id: I691fd2cbc277fcba10e615f5884f8de5d8152f2c 2015-05-04 12:16 +0000 [11f650c6ac] 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-04-21 17:27 +0000 [a24ce38e5e] Rodrigo Ramírez Norambuena * cdr_adaptive_odbc: Add ability to set character for quoted identifiers. Added the ability to set the character to quote identifiers. This allows adding the character at the start and end of table and column names. This setting is configurable for cdr_adaptive_odbc via the quoted_identifiers in configuration file cdr_adaptive_odbc.conf. ASTERISK-25006 Change-Id: I0b9a56b79ca13a727a803d88ed3b8643e37632b8 2015-05-04 22:57 +0000 [39cf642d40] Rodrigo Ramírez Norambuena * cdr: standardizes tab for options of AST_MODULE_INFO Change-Id: I3c6de30b4859717873100092a7c06e206713a301 2015-05-04 16:41 +0000 [df6c1d755f] Corey Farrell * CLI: Enable automatic references to modules. * Pass module to ast_cli_register and ast_cli_register_multiple. * Add a module reference before executing any CLI callback, remove the reference when complete. ASTERISK-25049 #close Reported by: Corey Farrell Change-Id: I7aafc7c9f2b912918f28fe51d51e9e8a755750e3 2015-05-04 14:26 +0000 [a8bfa9e104] Corey Farrell * Modules: Make ast_module_info->self available to auxiliary sources. ast_module_info->self is often needed to register items with the core. Many modules have ad-hoc code to make this pointer available to auxiliary sources. This change updates the module build process to make the needed information available to all sources in a module. ASTERISK-25056 #close Reported by: Corey Farrell Change-Id: I18c8cd58fbcb1b708425f6757becaeca9fa91815 2015-05-01 19:25 +0000 [6d5941297b] 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 [4f4aaa0c30] 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-04-21 11:52 +0000 [ebe371357e] 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-03 21:03 +0000 [981084f08c] 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 [75c0aa6979] 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-03 13:36 +0000 [1368dae773] Corey Farrell * main/presencestate.c: Add trailing slash to test category. ASTERISK-25053 Reported by: Corey Farrell Change-Id: I8c0375dd0818747b2d2e1ceaea87bfbeb2daf8d4 2015-04-20 13:03 +0000 [305ce3defd] 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-28 04:49 +0000 [8886b724ae] 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-05-03 04:39 +0000 [94532b2c22] Rodrigo Ramírez Norambuena * main/asterisk.c: Update Asterisk copyright year Change-Id: I5e75d7f7e2c096d74edd9e8735268a894f4b93ab 2015-05-03 04:09 +0000 [2ed5e6a9ba] Rodrigo Ramírez Norambuena * utils: Remove trailing whitespace Change-Id: I4644f43a6a1ca9b5130cd2a6746772b888eb4f7a 2015-05-02 18:58 +0000 [c3ec5da156] 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 02:15 +0000 [44bbdbe3a4] 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-05-01 19:50 +0000 [e4f0a55f7f] 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-01 13:22 +0000 [8f3cee1258] 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 [7ac28be04b] 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-04-30 15:54 +0000 [6b208d8c3b] 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 [dc23204aca] 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:40 +0000 [47fa2ad10b] Corey Farrell * Build System: Fix issue with addons moduleinfo. The build system now scans additional sources when generating moduleinfo for menuselect. Unfortunately the extra sources for format_mp3 only exist if downloaded. Use the Makefile macro 'wildcard' to allow moduleinfo generator to ignore sources that do not exist. Change-Id: I596604713b7345ce994f32197f8f6bfd9bcf4170 2015-04-30 13:42 +0000 [bb6ddb3dc8] 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-28 17:00 +0000 [11ffcf662f] Mark Michelson * Restrict functionality when ACLs are misconfigured. This patch has two main purposes: 1) Improve warning messages when ACLs are configured improperly. 2) Prevent misconfigured ACLs from allowing potentially unwanted traffic. To acomplish point (2) in most cases, whatever configuration object that the ACL belonged to was not allowed to load. The one exception is res_pjsip_acl. In that case, ACLs are their own configuration object. Furthermore, the module loading code has no indication that a ACL configuration had a failure. So the tactic taken here is to create an ACL that just blocks everything. ASTERISK-24969 Reported by Corey Farrell Change-Id: I2ebcb6959cefad03cea4d81401be946203fcacae 2015-04-29 14:29 +0000 [03c51cf525] 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-29 21:54 +0000 [556653d937] Rodrigo Ramírez Norambuena * cdr/cdr_csv.c: Refactor, function to write content of csv file. Create a function for write content of CDR on csv files. Before used same code for write two distinct files (account and master cdr) instead use a function for thats. Reduced to one lock when files are written. Change-Id: Idce707f4c108083252e0aeb948f421d924953e65 2015-04-30 06:04 +0000 [80aa9aee5d] 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-30 02:07 +0000 [7ff3b2d479] Rodrigo Ramírez Norambuena * include/asterisk/channel.h: Fix typo Change-Id: Ie584b85e16a94c255e60d0b1732ef9686464fef3 2015-04-29 16:15 +0000 [39d3e1ef6e] 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 [5d0c182885] 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-28 23:35 +0000 [c9c03998cc] Corey Farrell * Astobj2: Add ao2_weakproxy_ref_object function. This function allows code to run ao2_ref against the real object associated with a weakproxy. It is useful when all of the following conditions are true: * You have a pointer to weakproxy. * You do not have or need a pointer to the real object. * You need to ensure the real object exists and is not destroyed during a process. In this case it's wasteful to store a pointer to the real object just for the sake of releasing it later. Change-Id: I38a319b83314de75be74207a8771aab269bcca46 2015-04-27 16:13 +0000 [4f1db2070d] Mark Michelson * res_pjsip_outbound_registration: Don't fail on delayed processing. 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 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: I756c19ab05ada5d0503175db9676acf87c686d0a 2015-04-29 10:46 +0000 [ed5715eb39] Joshua Colp * res_sorcery_config: Fix build issue due to syntax error. Change-Id: Ic8322f04e37842848ad72cf2871bd0378f67c4ac 2015-04-29 06:46 +0000 [f226bd6f60] 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 [881844297a] 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 [c232ff3af0] 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 03:03 +0000 [5d997ecc83] Corey Farrell * Build System: Prevent unneeded changes to asterisk/buildopts.h. * Add AST_DEVMODE to 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 #close Reported by: Corey Farrell Change-Id: I2c516d93df9f6aaa09ae079a8168c887a6ff93a2 2015-04-29 00:02 +0000 [55a780d211] Corey Farrell * Git Conversion: Switch Non-C files to ASTERISK_REGISTER_FILE. This switches files used to generate other sources to use the new ASTERISK_REGISTER_FILE macro. ASTERISK-25026 #close Reported by: Corey Farrell Change-Id: Ieb2537b83421cad07c8955e5f90c405ccf079740 2015-04-28 13:28 +0000 [5ebfed8ef3] Yousf Ateya * chan_iax2: Ensure that IAX flags are 64 bits. Flags are 64 bits. Without LLU suffix the value of 1<<31 is negative. Although it doesn't have an effect on the current implementation, it will be problem if more flags are added. Change-Id: Ic290c81cfbbbf062872392d99d3322932cc49487 2015-04-28 00:29 +0000 [46cf643c75] 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 2015-04-28 11:50 +0000 [0bbe2c35cf] Richard Mudgett * chan_vpb: Fix compile error due to use of ASTERISK_FILE_VERSION. Change-Id: I51179e2a83937423676da522b766f1126de4059e 2015-04-27 14:44 +0000 [f47fed2e12] 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 05:38 +0000 [5e96584829] 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 04:28 +0000 [d6a2d92353] Rodrigo Ramírez Norambuena * cdr/cdr_csv.c: Add missing space after comma. Change-Id: I3866a20019b1a3a2f10fe36640053929330b0fcb 2015-04-27 22:01 +0000 [542bfee881] Rodrigo Ramírez Norambuena * CHANGES: Add missing spaces. Change-Id: I534ea0f22759e3633585dfa9b145b4a284efe67f 2015-04-17 02:16 +0000 [5c1d07baf0] Corey Farrell * Astobj2: Allow reference debugging to be enabled/disabled by config. * The REF_DEBUG compiler flag no longer has any effect on code that uses Astobj2. It is used to determine if reference debugging is enabled by default. Reference debugging can be enabled or disabled in asterisk.conf. * Caller information is provided in logger errors for ao2 bad magic numbers. * Optimizes AO2 by merging internal functions with the public counterpart. This was possible now that we no longer require a dual ABI. ASTERISK-24974 #close Reported by: Corey Farrell Change-Id: Icf3552721fe999365ba8a8cf00a965aa6b897cc1 2015-04-27 12:11 +0000 [356568dc7f] 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 [358080e86e] 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 [d7f4788341] 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-23 17:29 +0000 [9f65ea482e] 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-23 07:31 +0000 [cafdb7a049] Olle E. Johansson * CREDITS: Update credits for Olle Johansson Change-Id: I8f3d0a6c3f1075a1f7d8308593394611a96749de 2015-04-24 09:17 +0000 [bd61c9300c] 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-22 04:17 +0000 [f8e21a1adf] 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-20 13:06 +0000 [1e74793061] 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 12:54 +0000 [89a3fc0572] 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 [75666ad7c6] 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 [ca7193167e] 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-22 16:22 +0000 [cc77440deb] 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 [c231c85ea4] 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 [0722e11f26] George Joseph * .gitignore: Add .gcno and .gcda Products of --enable-coverage Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3 2015-04-22 11:28 +0000 [7216e3c608] Joshua Colp * dns: Make query sets hold on to queries for their lifetime. The query set documentation states that upon completion queries can be retrieved for the lifetime of the query set. This is a reasonable expectation but does not currently occur. This was originally done to resolve a circular reference between queries and query sets, but in practice the query can be kept. This change makes it so a query does not have a reference to the query set until it begins resolving. It also makes it so that the reference is given up upon the query being completed. This allows the queries to remain for the lifetime of the query set. As the query set on the query is only useful to the query set functionality and only for the lifetime that the query is resolving this is safe to do. ASTERISK-24994 #close Reported by: Joshua Colp Change-Id: I54e09c0cb45475896654e7835394524e816d1aa0 2015-04-20 13:01 +0000 [09c7c678a3] 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-14 14:04 +0000 [190fa4f333] 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-21 17:45 +0000 [2a36bb5d9a] Rodrigo Ramírez Norambuena * CHANGES remove tab space Change-Id: I6b43e43474bf6fb77b8227eadb036036f8e90521 2015-04-21 15:17 +0000 [5757d2d30d] 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 [6331be0638] 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-16 22:34 +0000 [2f418c052e] Gareth Palmer * New AMI Command Output Format This change modifies how the the output from a CLI command is sent to a client over AMI. Output from the CLI command is now sent as a series of zero-or-more Output: headers. Additionally, commands that fail to execute (eg: no such command, invalid syntax etc.) now cause an Error response instead of Success. If the command executed successfully, but the manager unable to provide the output the reason will be included in the Message: header. Otherwise it will contain 'Command output follows'. Depends on a new version of starpy (> 1.0.2) that supports the new output format. See pull-request https://github.com/asterisk/starpy/pull/34 ASTERISK-24730 Change-Id: I6718d95490f0a6b3f171c1a5cdad9207f9a44888 2015-04-20 18:00 +0000 [614f506690] 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 13:40 +0000 [bff3064578] Rodrigo Ramírez Norambuena * cdr/cdr_adaptive_odbc.c: Refactor concatenate columns name. The concatenate for columns name to INSERT INTO is always the same. It is possible to do it on one line. ASTERISK-24980 Change-Id: Ib8bb53c42535378581d4ef729cc5ebbb22b067ac 2015-04-20 09:53 +0000 [06ba1e59cb] 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-18 13:36 +0000 [298faf7c50] 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 [8e903b17ea] 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 [1269dd06bc] 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 [c1d44ff043] 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-15 10:38 +0000 [aae45acbda] 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-16 10:51 +0000 [56a2baa21d] 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: https://gerrit.asterisk.org/#/c/133/ Change-Id: I5134b84c4524906d8148817719d76ffb306488ac 2015-04-11 17:04 +0000 [c6ed681638] 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-16 13:20 +0000 [664d3263e4] 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:56 +0000 [51886c68dc] 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-11 16:39 +0000 [ab6382cafd] 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-15 16:08 +0000 [043c38f6de] George Joseph * More .gitignore updates Added .pyc and .sha1 to the top-level .gitignore. Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a Tested-by: George Joseph 2015-04-14 02:36 +0000 [abf10a1d4c] Corey Farrell * Build System: Enable use of ~/.asterisk.makeopts and /etc/asterisk.makeopts. The Makefile claims that you can set default menuselect options by creating ~/.asterisk.makeopts or /etc/asterisk.makeopts, but they are never read. The rule for menuselect.makeopts is only allowed to run if the active target is 'menuselect', but the menuselect target doesn't depend on menuselect.makeopts. A dot (wildcard character) was added so the rule will be active for the targets that cause it to run: nmenuselect, cmenuselect, and gmenuselect. ASTERISK-13271 #close Reported by: John Nemeth Change-Id: Ibde804ff196283def49ccb9432fbf224a22586e2 2015-04-13 08:47 +0000 [a3cec44a0a] Joshua Colp * res_pjsip: Add external PJSIP resolver implementation using core DNS API. This change adds the following: 1. A query set implementation. This is an API that allows queries to be executed in parallel and once all have completed a callback is invoked. 2. Unit tests for the query set implementation. 3. An external PJSIP resolver which uses the DNS core API to do NAPTR, SRV, AAAA, and A lookups. For the resolver it will do NAPTR, SRV, and AAAA/A lookups in parallel. If NAPTR or SRV are available it will then do more queries. And so on. Preference is NAPTR > SRV > AAAA/A, with IPv6 preferred over IPv4. For transport it will prefer TLS > TCP > UDP if no explicit transport has been provided. Configured transports on the system are taken into account to eliminate resolved addresses which have no hope of completing. ASTERISK-24947 #close Reported by: Joshua Colp Change-Id: I56cb03ce4f9d3d600776f36928e0b3e379b5d71e 2015-04-14 13:16 +0000 [33a319ae73] 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 15:59 +0000 [f89481e39c] Corey Farrell * test_astobj2_weaken: Fix source file registration. Update test_astobj2_weaken to use the new AST_REGISTER_FILE macro. Change-Id: Ieedadf16610f2e042f393e0501a36447cd07f83d 2015-04-13 05:28 +0000 [62508d6891] Corey Farrell * Build System: Create Makefile macro MOD_ADD_SOURCE. This new macro allows a single line to add all additional sources to a module. This helps prevent modules from missing steps, and makes future changes easier since they can be made in a single place. ASTERISK-24960 #close Reported by: Corey Farrell Change-Id: I38f12d8b72c5e7bb37a879b2fb51761a2855eb4b 2015-04-12 09:08 +0000 [23a180cade] 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 2015-04-13 19:06 +0000 [bf46ef35ca] George Joseph * .gitignore updates for master/13 Added products of ./bootstrap Added nmenuselect and gmenuselect to menuselect/ Change-Id: Ied658463958bafc04a9aff9ebc28e40c116a6e35 2015-04-13 06:52 +0000 [62e95065d6] Corey Farrell * AMI: Fix improper handling of lines that are exactly 1025 bytes long. When AMI receives a line that is 1025 bytes long, it sends two error messages. Copy the last byte in the buffer to the first postiion, set the length to 1. ASTERISK-20524 #close Reported by: David M. Lee Change-Id: Ifda403e2713b59582c715229814fd64a0733c5ea 2015-04-12 03:22 +0000 [cb6bf3094e] Corey Farrell * astobj2: Add support for weakproxy objects. This implements "weak" references. The weakproxy object is a real ao2 with normal reference counting of its own. When a weakproxy is pointed to a normal object they hold references to each other. The normal object is automatically freed when a single reference remains (the weakproxy). The weakproxy also supports subscriptions that will notify callbacks when it does not point to any real object. ASTERISK-24936 #close Reported by: Corey Farrell Change-Id: Ib9f73c02262488d314d9d9d62f58165b9ec43c67 2015-04-13 14:41 +0000 [a573b77f78] 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 09:54 +0000 [3f9aa29945] 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-13 05:57 +0000 [fbc8ddfe63] Corey Farrell * Optional API: Fix handling of sources that are both provider and user. 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. This changes optional_api.h so that AST_OPTIONAL_API and AST_OPTIONAL_API_ATTR is redefined every time the header is included. ASTERISK-17608 #close Reported by: Warren Selby Change-Id: I8fcf2a5e7b481893e17484ecde4f172c9ffb5679 2015-04-11 21:38 +0000 [4a58261694] Matt Jordan * git migration: Refactor the ASTERISK_FILE_VERSION macro 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: * Rename ASTERISK_FILE_VERSION macro to ASTERISK_REGISTER_FILE, and remove passing the version in with the macro. Other facilities than 'core show file version' make use of the file names, such as setting a debug level only on a specific file. As such, the act of registering source files with the Asterisk core still has use. The macro rename now reflects the new macro purpose. * main/asterisk: - Refactor the file_version structure to reflect that it no longer tracks a version field. - Remove the "core show file version" CLI command. Without the file version, it is no longer useful. - Remove the ast_file_version_find function. The file version is no longer tracked. - Rename ast_register_file_version/ast_unregister_file_version to ast_register_file/ast_unregister_file, respectively. * main/manager: Remove value from the Version key of the ModuleCheck Action. The actual key itself has not been removed, as doing so would absolutely constitute a backwards incompatible change. However, since the file version is no longer tracked, there is no need to attempt to include it in the Version key. * UPGRADE: Add notes for: - Modification to the ModuleCheck AMI Action - Removal of the "core show file version" CLI command Change-Id: I6cf0ff280e1668bf4957dc21f32a5ff43444a40e 2015-04-12 06:12 +0000 [5d34bce635] 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 [d6605b3c10] 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: Ie84f085cc0fa51262209e7bfc1b1ba8c04a1ef59 2015-04-11 13:20 +0000 [b35e184d41] 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: I842a1588ff27d8a0189f12d597f0a7af033d6c69 Tested-by: George Joseph 2015-04-11 10:27 +0000 [356b770632] Diederik de Groot (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 ........ Merged revisions 434706 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434707 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-11 10:11 +0000 [5f181bcccd] 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) ........ Merged revisions 434688 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434689 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 18:37 +0000 [c499cabf53] 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/ ........ Merged revisions 434671 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434672 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 16:06 +0000 [66f3fd0028] 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/ ........ Merged revisions 434654 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434655 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 12:56 +0000 [8bae18ab93] 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) ........ Merged revisions 434637 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434638 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 12:00 +0000 [f69e46de25] 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/ ........ Merged revisions 434619 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434620 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 11:38 +0000 [6f1a7fe05f] 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/ ........ Merged revisions 434617 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434618 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 11:32 +0000 [0b805cb875] 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 ........ Merged revisions 434615 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434616 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 09:56 +0000 [894153b8b1] Matt 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. ........ Merged revisions 434597 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434598 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 08:32 +0000 [02a0a4d65f] Joshua Colp * dns: Fix build when TEST_FRAMEWORK is not defined. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434583 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 07:40 +0000 [80c443bea4] 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 ........ Merged revisions 434565 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434566 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-10 07:23 +0000 [b3d01f1fbf] Y Ateya (License 6693) * channels/chan_iax2: Add a configuration parameter for call token expiration This patch adds a new configuration parameter, 'calltokenexpiration', that controls how long before an authentication call token is expired. The default maintains the RFC specified 10 seconds. Setting it to a higher value may be useful in lossy networks. Review: https://reviewboard.asterisk.org/r/4588 ASTERISK-24939 #close Reported by: Y Ateya patches: ctoken_configuration.diff submitted by Y Ateya (License 6693) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434563 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 18:12 +0000 [ed6b6e3c03] 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 ........ Merged revisions 434545 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434547 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 18:08 +0000 [9a63ada03a] 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/ ........ Merged revisions 434544 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434546 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 17:07 +0000 [520b9f2174] 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/ ........ Merged revisions 434527 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434528 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 11:09 +0000 [b2b1f24af6] 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/ ........ Merged revisions 434510 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434511 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 11:05 +0000 [459171be12] 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/ ........ Merged revisions 434508 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434509 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 10:43 +0000 [3ef0a17b1f] 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) ........ Merged revisions 434506 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434507 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 09:58 +0000 [c08ebc6eeb] Mark Michelson * Reduce duplication of common DNS code. The NAPTR and SRV branches were worked on independently and resulted in some code being duplicated in each. Since both have been merged into trunk now, this patch reduces the duplication by factoring out common code into its own source files. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434490 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-09 07:57 +0000 [ea0098724e] Diederik de Groot (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 ........ Merged revisions 434470 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434471 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 21:05 +0000 [2201e27340] 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 ........ Merged revisions 434449 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434450 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 13:32 +0000 [a759714101] 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/ ........ Merged revisions 434425 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434431 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 13:20 +0000 [09df34d880] 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/ ........ Merged revisions 434424 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434430 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 11:49 +0000 [8ec9a82b9a] Maciej Szmigiero (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 ........ Merged revisions 434384 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434385 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 11:31 +0000 [2bd9e008a7] Richard Mudgett * format_cache.c: Add missing slin12 format to ast_format_cache_is_slinear(). ........ Merged revisions 434357 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434383 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 07:02 +0000 [3f54af689f] Matt 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/trunk@434294 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 07:00 +0000 [a9b6a62461] 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 ........ Merged revisions 434292 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434293 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 06:54 +0000 [477536ef25] 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 ........ Merged revisions 434289 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434290 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 06:45 +0000 [b8fa8aa775] Diederik de Groot (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 ........ Merged revisions 434286 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434287 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 06:35 +0000 [016fba12e2] Rodrigo Ramirez Norambuena (License 6577) * cel_pgsl: Add support for GMT timestamps This patch adds a new option to cel_pgsl, "usegmtime", which causes timestamps to be logged in GMT. Review: https://reviewboard.asterisk.org/r/4571/ ASTERISK-23186 #close Reported by: Rodrigo Ramirez Norambuena patches: cel_pgsql.c_add_usegmtime2.patch submitted by Rodrigo Ramirez Norambuena (License 6577) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434284 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 14:40 +0000 [d923ec80b9] 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 ........ Merged revisions 434261 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434263 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 11:42 +0000 [153c4044e4] 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/ ........ Merged revisions 434240 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434241 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 10:34 +0000 [1eba6abae5] 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. ........ Merged revisions 434218 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434219 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 10:22 +0000 [c2f50ba6f4] Matt 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 ........ Merged revisions 434216 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434217 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 21:10 +0000 [af4d802773] Diederik de Groot (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 ........ Merged revisions 434191 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434192 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 21:03 +0000 [c1cfe3fae2] Diederik de Groot (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 ........ Merged revisions 434188 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434189 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 16:54 +0000 [79fb8c32a6] Mark Michelson * Uncomment test case. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434170 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 16:13 +0000 [fc314cb43f] Mark Michelson * Add missing DNS NAPTR test file. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434154 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 14:23 +0000 [87d7c90e4e] 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/ ........ Merged revisions 434131 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434132 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 14:04 +0000 [e48f2e7897] 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 ........ Merged revisions 434114 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434115 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 13:18 +0000 [0543879228] Diederik de Groot (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 ........ Merged revisions 434097 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434099 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 13:03 +0000 [e309a91e2d] Diederik de Groot (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 ........ Merged revisions 434091 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434092 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 12:52 +0000 [ed3cf8761b] Diederik de Groot (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 ........ Merged revisions 434088 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434089 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 12:05 +0000 [0a26602b8c] Mark Michelson * Merge NAPTR support into trunk. This adds NAPTR record allocation and sorting, as well as unit tests that verify that NAPTR records are parsed and sorted correctly. Review: https://reviewboard.asterisk.org/r/4542 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434068 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 11:02 +0000 [edf9da4365] 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 ........ Merged revisions 434046 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434047 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 10:17 +0000 [ffd7319df3] 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/ ........ Merged revisions 434025 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434026 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-06 09:51 +0000 [53af579d4c] 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) ........ Merged revisions 434022 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434023 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-05 07:55 +0000 [e6f0410028] 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/ ........ Merged revisions 433996 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433997 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-03 16:54 +0000 [3439487a81] 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 ........ Merged revisions 433968 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433969 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-02 09:56 +0000 [6e5efe04bd] 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/trunk@433945 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-02 05:38 +0000 [154ba47766] 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/ ........ Merged revisions 433923 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433924 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 11:30 +0000 [a217d2d1db] 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. ........ Merged revisions 433888 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433891 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 11:27 +0000 [39824e3d01] Joshua Colp * dns: Add support for SRV record parsing and sorting. This change adds support for parsing SRV records and consuming their values in an easy fashion. It also adds automatic sorting of SRV records according to RFC 2782. Tests have also been included which cover parsing, sorting, and off-nominal cases where the record is corrupted. ASTERISK-24931 #close Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/4528/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433889 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 08:35 +0000 [da13d15425] Mark Michelson * stasis: set a channel variable on websocket disconnect error Resolve compile errors caused by r433839 by included the missing header file, pbx.h. ........ Merged revisions 433863 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433868 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 17:49 +0000 [06578ef407] 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/ ........ Merged revisions 433839 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433845 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 12:04 +0000 [2d28fa678e] 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 ........ Merged revisions 433817 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433818 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 06:55 +0000 [076fc12afb] Corey Farrell * Blocked revisions 433795 ........ 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/trunk@433796 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-30 06:43 +0000 [8d12288d8a] 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 ........ Merged revisions 433773 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433774 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:45 +0000 [7bc2345fb1] Diederik de Groot (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 ........ Merged revisions 433750 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433751 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:39 +0000 [ce59fabd5c] Diederik de Groot (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 ........ Merged revisions 433747 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433748 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 21:29 +0000 [61577cbee6] Matt 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 ........ Merged revisions 433744 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433745 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 20:57 +0000 [072734692e] Diederik de Groot (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 ........ Merged revisions 433721 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433722 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-29 20:53 +0000 [1cf949c489] Diederik de Groot (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 ........ Merged revisions 433718 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433719 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:56 +0000 [d2776d4d45] Diederik de Groot (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 ........ Merged revisions 433694 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433695 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:48 +0000 [cb7b6bc4be] Diederik de Groot (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 ........ Merged revisions 433691 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433692 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:41 +0000 [e9520dbe0d] Diederik de Groot (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 ........ Merged revisions 433688 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433689 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:33 +0000 [fd50e5bfb5] Diederik de Groot (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 ........ Merged revisions 433684 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433686 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:32 +0000 [c747b3b12a] Diederik de Groot (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) ........ Merged revisions 433682 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433685 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-28 07:20 +0000 [d6173cd1d0] Diederik de Groot (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 ........ Merged revisions 433680 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433681 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 17:26 +0000 [b56592e3ae] Jonathan Rose * SAC: Add conferencing extensions and configuration Review: https://reviewboard.asterisk.org/r/4504/ ........ Merged revisions 433656 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433657 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 16:21 +0000 [c21e2e45a8] 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/ ........ Merged revisions 433624 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433637 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 16:06 +0000 [2659e48d9d] 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/ ........ Merged revisions 433622 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433623 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 15:46 +0000 [0b62e41654] 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/ ........ Merged revisions 433619 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433620 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 15:23 +0000 [a18da4eaf2] 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/ ........ Merged revisions 433596 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433617 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 12:58 +0000 [cb1c639817] Richard Mudgett * Add missing file. ASTERISK-24781 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433597 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 09:41 +0000 [a024af1156] Justin T. Gibbs (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) ........ Merged revisions 433574 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433575 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 07:27 +0000 [10458d2878] 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 ........ Merged revisions 433550 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433551 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 02:12 +0000 [28e3bd0af7] 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 ........ Merged revisions 433523 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433524 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 18:09 +0000 [554eb74516] 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 ........ Merged revisions 433500 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433501 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 17:24 +0000 [3ddd92902a] 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 ........ Merged revisions 433497 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433498 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 12:47 +0000 [d7fc85e69d] 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/ ........ Merged revisions 433469 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433470 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-26 12:13 +0000 [ab674f67b5] 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 ........ Merged revisions 433446 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433447 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-25 13:37 +0000 [e953d15223] 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(). ........ Merged revisions 433420 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433421 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-25 10:31 +0000 [47156aab92] 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 ........ Merged revisions 433396 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433397 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-25 07:32 +0000 [abf3e40902] Joshua Colp * dns: Add core DNS API + unit tests and res_resolver_unbound module + unit tests. This change adds an abstracted core DNS API which resembles the API described here[1]. The API provides a pluggable mechanism for resolvers and also a consistent view for records. Both synchronous and asynchronous queries are supported. This change also adds a res_resolver_unbound module which uses the libunbound library to provide resolution. Unit tests have also been written for all of the above to confirm the API and functionality. ASTERISK-24834 #close Reported by: Matt Jordan ASTERISK-24836 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4474/ Review: https://reviewboard.asterisk.org/r/4512/ [1] https://wiki.asterisk.org/wiki/display/AST/Asterisk+DNS+API git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433370 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-24 14:41 +0000 [4c2fc5b811] 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/ ........ Merged revisions 433338 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433339 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-22 19:05 +0000 [60f01520e7] snuffy (License 5024) * 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 ........ Merged revisions 433269 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433270 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-22 18:11 +0000 [66670f02e6] snuffy (License 5024) * 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 ........ Merged revisions 433247 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433248 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 14:54 +0000 [7e097bce86] Richard Mudgett * 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/ ........ Merged revisions 433222 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433223 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 13:27 +0000 [148e8799fe] Richard Mudgett * 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/ ........ Merged revisions 433199 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433200 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 14:20 +0000 [627cc16a8d] Matt Jordan * 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 ........ Merged revisions 433174 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433175 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 10:27 +0000 [79a81fed59] Kevin Harwell * alemebic scripts: endpoint identifier order option The script was added in 13, but when committed to trunk it caused a branch to occur due to some trunk only alemebic changes. This fixes it so that the new 'add_pjsip_endpoint_identifier_order script points to the correct down revision. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433152 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 05:21 +0000 [3aa0a869c2] Corey Farrell * 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 ........ Merged revisions 433126 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433130 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 04:57 +0000 [d486659502] Corey Farrell * 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/ ........ Merged revisions 433115 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433116 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 04:46 +0000 [2c83ac4364] Corey Farrell * 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 ........ Merged revisions 433113 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433114 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 21:42 +0000 [e0ea490a11] Richard Mudgett * res_pjsip_session: Fix off-nominal extra unref of session. ........ Merged revisions 433088 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433089 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 17:15 +0000 [8c65c9167e] Scott Griepentrog * 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/ ........ Merged revisions 433064 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433065 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 17:03 +0000 [f25b265329] Scott Griepentrog * 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/ ........ Merged revisions 433060 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433063 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 17:03 +0000 [62cf2a2c02] Scott Griepentrog * Reverting accidental ci of wrong change in r433061 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433062 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 17:00 +0000 [cb6c7eecfd] Scott Griepentrog * 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/ ........ Merged revisions 431583 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433061 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 16:52 +0000 [c41dd32b94] Richard Mudgett * 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 ........ Merged revisions 433057 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433058 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:35 +0000 [803a916334] Kevin Harwell * 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 ........ Merged revisions 433031 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433032 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:22 +0000 [aef7278af6] Kevin Harwell * 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/ ........ Merged revisions 433028 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433029 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 11:11 +0000 [259e833e88] Richard Mudgett * res_pjsip: Add reason comment. ........ Merged revisions 433005 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433006 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 21:29 +0000 [e89f83b3ad] Matt Jordan * 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 ........ Merged revisions 432971 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432972 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 21:01 +0000 [0d52907d2b] Joshua Colp * 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 ........ Merged revisions 432949 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 20:53 +0000 [ac1214d9d4] Jan Juergens (License 6538) * apps/app_sms: Add an option to prevent SMS content from being logged In some countries, privacy laws specify that SMS content cannot be saved by a provider. This patch adds a new option to the SMS application, 'n', which prevents the SMS content from being written to the SMS log. ASTERISK-22591 #close Reported by: Jan Juergens patches: DisableSmsContentLoggingByParam.patch uploaded by Jan Juergens (License 6538) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432947 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 20:37 +0000 [b3fa35786f] Joshua Colp * 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 ........ Merged revisions 432945 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432946 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 20:22 +0000 [b4cc056067] Di-Shi Sun (License 5076) * 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 ........ Merged revisions 432938 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432940 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 19:24 +0000 [dc752f515b] Matt Jordan * 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 ........ Merged revisions 432920 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432921 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 12:06 +0000 [c52adca396] Richard Mudgett * 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/ ........ Merged revisions 432894 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432895 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 11:37 +0000 [636d82f4d8] Richard Mudgett * 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/ ........ Merged revisions 432892 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432893 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 09:55 +0000 [d42c6adb1a] Kevin Harwell * 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 ........ Merged revisions 432868 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432869 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 21:10 +0000 [f2c21ead1f] Corey Farrell * Logger: Fix MALLOC_DEBUG build error. Revision 432834 introduced a build error when MALLOC_DEBUG is used. Switch callid threadstorage to simple AST_THREADSTORAGE since we no longer need custom cleanup. Reported by: Corey Farrell git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432851 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 20:12 +0000 [c08fd275bf] Corey Farrell * Logger: Convert 'struct ast_callid' to unsigned int. Switch logger callid's from AO2 objects to simple integers. This helps in two ways. Copying integers is faster than referencing AO2 objects, so this will result in a small reduction in logger overhead. This also erases the possibility of an infinate loop caused by an invalid callid in threadstorage. ASTERISK-24833 #comment Committed callid conversion to trunk. Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4466/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432834 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 07:58 +0000 [38ee441ea7] Matt Jordan * 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 ........ Merged revisions 432811 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432812 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 07:40 +0000 [29304d10a0] Diederik de Groot (License 6600) * 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 ........ Merged revisions 432808 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432809 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 11:39 +0000 [4115e327ac] Richard Mudgett * 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/ ........ Merged revisions 432787 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432788 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 10:26 +0000 [89b65f5dda] Richard Mudgett * 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/ ........ Merged revisions 432766 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432767 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 10:22 +0000 [185d2e082a] Richard Mudgett * 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/ ........ Merged revisions 432764 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432765 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 18:09 +0000 [2889f074a0] Joshua Colp * 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/ ........ Merged revisions 432742 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432743 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 16:33 +0000 [15d266bf85] Javier Acosta (License 6690) * 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 ........ Merged revisions 432721 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432722 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 13:13 +0000 [ab6e2c93f3] Graham Barnett (License 6685) * 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 ........ Merged revisions 432696 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432697 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 13:05 +0000 [79e9b37ad0] Ed Hynan (Licnese 6680) * 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 ........ Merged revisions 432693 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432694 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 11:08 +0000 [e7ee83ea90] Richard Mudgett * 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/ ........ Merged revisions 432668 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432669 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-09 11:13 +0000 [1ce529d30e] Kevin Harwell * 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/ ........ Merged revisions 432638 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432639 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-07 19:47 +0000 [a5f80f1781] Joshua Colp * 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 ........ Merged revisions 432614 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432615 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 16:59 +0000 [affcf1d766] Richard Mudgett * 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. ........ Merged revisions 432594 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432595 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 16:18 +0000 [090ab1735b] Richard Mudgett * res_pjsip_refer: Made refer_attended_alloc() not create the ao2 object with a lock. The lock is unused. ........ Merged revisions 432574 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432579 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 15:38 +0000 [b85cb7ea1b] Jonathan Rose * app: Add functions to swap voicemail function table for testing purposes ........ Merged revisions 432556 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432573 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 14:24 +0000 [c7cc1b3059] Richard Mudgett * 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 ........ Merged revisions 432534 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432551 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 13:34 +0000 [f1ab2c5e8b] Richard Mudgett * 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 ........ Merged revisions 432528 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432529 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-05 10:40 +0000 [5c3e33b3ca] George Joseph * 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 ........ Merged revisions 432485 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432486 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-04 12:55 +0000 [41ba8fd7c0] Matt Jordan * 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/ ........ Merged revisions 432453 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432455 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-02 13:15 +0000 [278ea2f468] Matt Jordan * 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 ........ Merged revisions 432423 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432425 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-27 12:31 +0000 [9e841e4fb6] Richard Mudgett * 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/ ........ Merged revisions 432404 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432405 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-26 12:53 +0000 [d79670b269] Scott Griepentrog * 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/ ........ Merged revisions 432385 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432386 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-26 11:12 +0000 [d04fbb0f9d] Kevin Harwell * 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 ........ Merged revisions 432363 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432364 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 22:58 +0000 [8a16c2f0c2] Matt Jordan * 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 ........ Merged revisions 432342 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432343 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 21:03 +0000 [3725173b9e] Makoto Dei (License 5027) * 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 ........ Merged revisions 432321 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432322 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:49 +0000 [e484140aed] Rusty Newton * 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/ ........ Merged revisions 432301 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432302 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:09 +0000 [ced84d7e62] Matt Jordan * 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 ........ Merged revisions 432281 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432282 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:05 +0000 [4b63da7f7d] Matt Jordan * 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 ........ Merged revisions 432278 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432279 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 15:42 +0000 [d68012d1a3] Olle Johansson (License 5267) * 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 ........ Merged revisions 432258 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432259 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 14:47 +0000 [ff642289f4] David M. Lee * 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 ........ Merged revisions 432237 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432238 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 17:00 +0000 [57525c3cf2] Richard Mudgett * config.h: Use real parameter names for ast_variable_new() define. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432220 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 16:14 +0000 [8574c4d197] Matt Jordan * 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 ........ Merged revisions 432199 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432200 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 16:00 +0000 [a528dfc9a7] Matt Jordan * 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 ........ Merged revisions 432195 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432196 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 12:38 +0000 [91733b5d15] Kevin Harwell * 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 ........ Merged revisions 432175 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432176 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 14:48 +0000 [bedf51b2ce] Joshua Colp * 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 ........ Merged revisions 432154 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432155 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 13:28 +0000 [87b7060f36] Joshua Colp * 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 ........ Merged revisions 432136 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432137 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 12:53 +0000 [283bb15c16] Joshua Colp * 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 ........ Merged revisions 432118 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432119 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 11:36 +0000 [b3c1ad5d73] Graham Barnett (License 6685) * 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 ........ Merged revisions 432099 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432100 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 08:06 +0000 [2ea7ccbf70] Joshua Colp * 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 ........ Merged revisions 432079 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432080 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 20:58 +0000 [e66b874f5d] Corey Farrell * 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 ........ Merged revisions 432059 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432060 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 20:51 +0000 [bb71672a47] 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 Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4435/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432057 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 20:47 +0000 [ce50fa314a] Corey Farrell * 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 ........ Merged revisions 432055 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432056 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 11:55 +0000 [bb06603d5f] Richard Mudgett * 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 ........ Merged revisions 432034 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432036 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 11:53 +0000 [340818ad12] Matt Hoskins (license 6688) * 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/ ........ Merged revisions 432033 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432035 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 09:47 +0000 [4dab71831f] Graham Barnett (License 6685) * 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 ........ Merged revisions 432013 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432014 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 15:26 +0000 [05cc6d6d55] Richard Mudgett * chan_dahdi: Remove some dead code. ........ Merged revisions 431992 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 431993 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431994 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 12:26 +0000 [252aee4228] Richard Mudgett * 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/ ........ Merged revisions 431974 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431975 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 11:37 +0000 [6992b2e8fa] Richard Mudgett * 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/ ........ Merged revisions 431956 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431957 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 09:28 +0000 [e3fd826cdb] Alexander Traud (License 6520) * 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 ........ Merged revisions 431937 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431938 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-18 20:03 +0000 [a4774ceaa5] Corey Farrell * 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 ........ Merged revisions 431917 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431918 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-17 09:34 +0000 [09bfe4b208] Richard Mudgett * 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/ ........ Merged revisions 431898 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431899 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-16 15:29 +0000 [d808eace5c] Matt Jordan * 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 ........ Merged revisions 431879 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431880 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 13:01 +0000 [55eb8fc068] Joshua Colp * 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 ........ Merged revisions 431860 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431861 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 12:00 +0000 [55709bc1f7] Joshua Colp * 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 ........ Merged revisions 431843 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431844 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 11:43 +0000 [e78dd39885] Joshua Colp * 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/ ........ Merged revisions 431841 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431842 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 10:01 +0000 [e6fe69b76c] Joshua Colp * 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/ ........ Merged revisions 431824 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431825 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 06:41 +0000 [17f9e0cacc] Matthias Urlichs (license 5508) * 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) ........ Merged revisions 431807 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431808 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 18:33 +0000 [d1bd8b091b] Matt Jordan * 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 ........ Merged revisions 431789 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431790 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 13:46 +0000 [455a98a2f8] Joshua Colp * 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 ........ Merged revisions 431771 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431772 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 12:31 +0000 [fae6bf8ace] Joshua Colp * res_pjsip_exten_state: Improve log message when a subscription is attempted to a non-existent extension. ASTERISK-24716 #close Reported by: Rusty Newton ........ Merged revisions 431754 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431755 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 12:21 +0000 [cc96e4a7ef] Joshua Colp * Multiple revisions 431751-431752 ........ r431751 | file | 2015-02-14 14:19:07 -0400 (Sat, 14 Feb 2015) | 5 lines chan_pjsip: Fix crash when CHANNEL dialplan function is invoked with pjsip argument and no type. ASTERISK-24771 #close Reported by: Niklas Larsson ........ r431752 | file | 2015-02-14 14:20:27 -0400 (Sat, 14 Feb 2015) | 2 lines 'information' ends with an 'n'. ........ Merged revisions 431751-431752 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431753 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-13 11:24 +0000 [f00ebf0a2d] Richard Mudgett * 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/ ........ Merged revisions 431734 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431735 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-12 14:34 +0000 [29f66b0429] Matt Jordan * 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 ........ Merged revisions 431717 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431718 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 12:03 +0000 [9d081ed06c] Kevin Harwell * 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/ ........ Merged revisions 431698 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431699 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:45 +0000 [cc85e55d88] Kevin Harwell * 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/ ........ Merged revisions 431693 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431695 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:39 +0000 [e2d3215b83] Richard Mudgett * 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/ ........ Merged revisions 431692 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431694 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:13 +0000 [5a17ed7a38] Richard Miller (License 5685) * 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 ........ Merged revisions 431674 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431675 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:03 +0000 [8cc50b1ebc] Corey Farrell * 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 ........ Merged revisions 431663 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431672 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 10:52 +0000 [137c4b0778] Kevin Harwell * 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 ........ Merged revisions 431670 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431671 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-10 17:17 +0000 [49161d8df8] George Joseph * 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/ ........ Merged revisions 431643 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431644 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 21:12 +0000 [858e825568] Ben Merrills (License 6678) * 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) ........ Merged revisions 431622 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431623 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 20:35 +0000 [17247daae6] ibercom (License 6599) * 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 ........ Merged revisions 431618 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431619 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 11:24 +0000 [2ebe811d80] Matt Jordan * 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 ........ Merged revisions 431600 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431601 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-06 15:26 +0000 [7ca1a0da04] Scott Griepentrog * 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/ ........ Merged revisions 431583 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431584 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-03 19:27 +0000 [a79c920aa1] Joshua Colp * res_pjsip_keepalive: Don't crash if PJSIP module is not loaded. ........ Merged revisions 431555 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431556 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-03 18:59 +0000 [03ce56d6c5] Joshua Colp * 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 ........ Merged revisions 431538 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431539 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-31 10:28 +0000 [14a57782a6] Joshua Colp * 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/ ........ Merged revisions 431521 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431522 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 11:49 +0000 [23bb5f6a73] Richard Mudgett * 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/ ........ Merged revisions 431492 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431493 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 11:41 +0000 [5c9f1b3f51] Kevin Harwell * 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/ ........ Merged revisions 431490 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431491 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 11:21 +0000 [6a76740b83] Ashley Sanders * 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. In this version, [servername] is uncommented by default. ASTERISK-24316 #close Reported By: Andrew Nagy Review: https://reviewboard.asterisk.org/r/4374/ ........ Merged revisions 431471 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431484 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 10:49 +0000 [bd0bdf1e41] Mark Michelson * 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 ........ Merged revisions 431468 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431469 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 17:03 +0000 [388d691f34] Scott Griepentrog * 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/ ........ Merged revisions 431450 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431451 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 15:20 +0000 [f61c80a8f7] Mark Michelson * 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. ........ Merged revisions 431420 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431436 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 15:02 +0000 [034798e37e] Mark Michelson * 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 ........ Merged revisions 431426 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431427 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 14:54 +0000 [fe76d4829f] Mark Michelson * 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 ........ Merged revisions 431424 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431425 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 10:47 +0000 [8357ffab9c] George Joseph * 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/ ........ Merged revisions 431403 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431404 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 06:09 +0000 [9893ba7ffb] Joshua Colp * 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 ........ Merged revisions 431385 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431386 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 11:42 +0000 [b3ff43a4e8] Mark Michelson * 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 ........ Merged revisions 431303 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431304 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 11:34 +0000 [3cccfac399] Mark Michelson * 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 ........ Merged revisions 431301 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431302 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 06:19 +0000 [f080ca6536] Sean Bright * 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/ ........ Merged revisions 431267 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431268 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 22:29 +0000 [69e107b24e] Richard Mudgett * 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/ ........ Merged revisions 431243 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431251 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 16:58 +0000 [c7591ef6bc] Kevin Harwell * 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 ........ Merged revisions 431219 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431220 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 13:31 +0000 [e826cb8a26] Jonathan Rose * 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 ........ Merged revisions 431153 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431201 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 13:22 +0000 [3b0f03ef7b] Kevin Harwell * 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 ........ Merged revisions 431194 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431197 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 13:12 +0000 [e62bd46511] Corey Farrell (license 5909) * 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) ........ Merged revisions 431179 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431180 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:48 +0000 [94eebd5ba5] Richard Mudgett * 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 ........ Merged revisions 431160 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431161 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:34 +0000 [a43d24a9d3] Joshua Colp * 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/ ........ Merged revisions 431157 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431158 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:21 +0000 [fb8a2e0399] Matt Jordan * 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 ........ Merged revisions 431145 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431148 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:16 +0000 [aa8fd7d1b9] Matt Jordan * 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 ........ Merged revisions 431134 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431136 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 05:47 +0000 [2504f97b01] Joshua Colp * 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/ ........ Merged revisions 431114 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431115 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-26 08:50 +0000 [965777ccfc] David M. Lee * 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/ ........ Merged revisions 431092 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431093 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-25 07:43 +0000 [a8ae5a7bcb] Matt Jordan * 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 ........ Merged revisions 431072 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431073 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 14:17 +0000 [b69b0d12ee] Richard Mudgett * app_confbridge: Shorten CBRec channel names to CBRec/- git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431055 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 14:14 +0000 [c780223507] Richard Mudgett * 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. ........ Merged revisions 431052 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431053 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 13:51 +0000 [b38be992b1] Richard Mudgett * app_confbridge: Whitespace Because there is sometimes no sence to any whitespace. ........ Merged revisions 431049 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 431050 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431051 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 12:46 +0000 [89610adda5] David M. Lee * Add depend on pjproject to res_pjsip_config_wizard.c ........ Merged revisions 431030 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 09:21 +0000 [ca02121ef7] Kevin Harwell * 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/ ........ Merged revisions 430999 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431010 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 09:13 +0000 [49cbfa7de6] Walter Doekes * Fix typo's (retrieve, specified, address). ........ Merged revisions 430996 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 430998 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431000 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 08:39 +0000 [874cb5615d] HZMI8gkCvPpom0tM (License 6658) * 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 ........ Merged revisions 430994 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430995 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 13:30 +0000 [9bff4eeca3] Richard Mudgett * 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/ ........ Merged revisions 430975 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430976 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 13:14 +0000 [e67ca431ee] Richard Mudgett * 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/ ........ Merged revisions 430957 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430958 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 12:10 +0000 [49f405fe4c] Scott Griepentrog * 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/ ........ Merged revisions 430939 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430940 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 08:23 +0000 [7fcc9ce8bc] Gareth Palmer (License 5169) * 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 ........ Merged revisions 430921 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430922 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 15:57 +0000 [38738a7316] Richard Mudgett * 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. ........ Merged revisions 430902 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430903 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:36 +0000 [5835bf7a7f] Matt Jordan * 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 ........ Merged revisions 430864 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430866 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:27 +0000 [958a41a884] Matt Jordan * 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 ........ Merged revisions 430862 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430863 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:12 +0000 [4740ef50f4] Matt Jordan * 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 ........ Merged revisions 430842 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430844 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:06 +0000 [228fdb3f4e] Matt Jordan * 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. ........ Merged revisions 430840 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430841 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-20 11:15 +0000 [804ab70f9d] Ashley Sanders * 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/ ........ Merged revisions 430818 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430820 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-20 10:59 +0000 [e4738a59eb] Richard Mudgett * 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/ ........ Merged revisions 430817 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430819 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 20:41 +0000 [14b8e03dad] Ben Klang (License 5876) * 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 ........ Merged revisions 430799 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430800 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 20:33 +0000 [112bf1597e] LEI FU (License 6640) * 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 ........ Merged revisions 430796 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430797 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 12:15 +0000 [7dc784ffa9] Mark Michelson * 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) ........ Merged revisions 430776 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430777 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 07:19 +0000 [e43912f3f3] Joshua Colp * 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/ ........ Merged revisions 430755 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430756 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 18:35 +0000 [07e2a48ab1] Kevin Harwell * 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. ........ Merged revisions 430734 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430735 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 16:14 +0000 [1111944afb] Mark Michelson * Change PJProject version requirement for ca_list_path transport option in CHANGES file. ........ Merged revisions 430716 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430717 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 16:13 +0000 [831acba826] Mark Michelson * 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 ........ Merged revisions 430714 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430715 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 15:46 +0000 [023fa0f9e8] cloos (License #5956) * 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 ........ Merged revisions 430709 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430713 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 11:36 +0000 [a8ea2f9287] Richard Mudgett * 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/ ........ Merged revisions 430687 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430688 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 11:28 +0000 [9b1c36d3fa] Richard Mudgett * res_fax.c, res_fax_spandsp.c: Fix some curlies on the end of function definitions. ........ Merged revisions 430685 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430686 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 06:10 +0000 [1e605d950b] Joshua Colp * 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/ ........ Merged revisions 430664 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430665 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 20:19 +0000 [f11fb76205] abelbeck (License 5903) * 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) ........ Merged revisions 430646 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430647 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 17:15 +0000 [49542a794b] Corey Farrell (license 5909) * 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) ........ Merged revisions 430628 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430629 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 14:39 +0000 [67234b3ee2] Mark Michelson * 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 ........ Merged revisions 430608 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430609 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 09:40 +0000 [3eec8e4c44] Diederik de Groot (License 6600) * 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 ........ Merged revisions 430590 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430591 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-13 12:17 +0000 [1780de95e4] Richard Mudgett * 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 ........ Merged revisions 430565 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430567 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-13 06:09 +0000 [0e631a541d] Joshua Colp * 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/ ........ Merged revisions 430546 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430547 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 13:13 +0000 [4dd6b6ff59] Richard Mudgett * 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 ........ Merged revisions 430528 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430529 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:28 +0000 [aa7e06f797] Niklas Larsson (License 5068) * 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) ........ Merged revisions 430526 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430527 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:09 +0000 [c7ea108e02] Richard Mudgett * Revert -r430452 It needs to be redone for the next major AMI version change instead. ASTERISK-24049 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430509 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:01 +0000 [9065488ddd] Michael L. Young (license 5026) * 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 ........ Merged revisions 430507 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430508 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 09:18 +0000 [b38acbce6e] Kristian Hogh (License 6639) * 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 ........ Merged revisions 430488 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430489 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 16:09 +0000 [fba836cc02] Scott Griepentrog * 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 ........ Merged revisions 430469 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430470 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 15:45 +0000 [5b30938394] Scott Griepentrog * 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 ........ Merged revisions 430467 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430468 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 12:53 +0000 [ef34a05f21] Richard Mudgett * AMI: Remove no longer used parameter from astman_send_listack(). Follow-up issue to -r430435 from reviewboard review. ASTERISK-24049 Review: https://reviewboard.asterisk.org/r/4315/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430452 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 12:16 +0000 [52a7cdb101] Richard Mudgett * 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/ ........ Merged revisions 430434 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430435 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 08:53 +0000 [77ee23210d] Kinsey Moore * 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 ........ Merged revisions 430416 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430417 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 15:41 +0000 [8786fe13a4] George Joseph * 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/ ........ Merged revisions 430397 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430398 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 15:38 +0000 [c55f86c69d] George Joseph * 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/ ........ Merged revisions 430395 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430396 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 11:51 +0000 [030facce94] George Joseph * 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/ ........ Merged revisions 430373 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430374 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 15:26 +0000 [f8c4909eb7] Kinsey Moore * 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/ ........ Merged revisions 430355 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430356 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:54 +0000 [7f836c1c15] Mark Michelson * 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 ........ Merged revisions 430337 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430338 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:17 +0000 [e83853eebc] George Joseph * 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/ ........ Merged revisions 430319 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430321 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:15 +0000 [8cde7443c2] George Joseph * 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/ ........ Merged revisions 430317 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430318 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 11:54 +0000 [685f7ef924] George Joseph * 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/ ........ Merged revisions 430315 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430316 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 11:45 +0000 [464647d8f8] Mark Michelson * 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 ........ Merged revisions 430313 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430314 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 10:56 +0000 [56de48107f] George Joseph * 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/ ........ Merged revisions 430295 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430296 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 21:01 +0000 [0c5234f12a] Kinsey Moore * Fix dev-mode build on recent gcc ........ Merged revisions 430274 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430275 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 16:46 +0000 [220df246d9] Matt Jordan * Blocked revisions 430252 ........ 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430254 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:53 +0000 [8b5bde3e5a] George Joseph * 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/ ........ Merged revisions 430227 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430228 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:49 +0000 [5f60ebc004] George Joseph * 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/ ........ Merged revisions 430225 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430226 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:43 +0000 [fb3c8e3424] George Joseph * 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/ ........ Merged revisions 430223 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430224 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:29 +0000 [7dc0c88fc6] George Joseph * 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/ ........ Merged revisions 430221 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430222 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 16:50 +0000 [0b8fbf9238] Scott Griepentrog * 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 ........ Merged revisions 430200 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430201 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 11:57 +0000 [e0bd2ca104] Joshua Colp * pjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file. ........ Merged revisions 430181 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430182 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 11:53 +0000 [f7cf988a82] Joshua Colp * 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/ ........ Merged revisions 430179 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430180 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-31 12:54 +0000 [8d059c3808] Scott Griepentrog * rtp_engine: keep payload types in correct range In r428708 additional codecs were added including a payload type of 128 which is outside of nominal range of 0-127. This change moves changes 128 to 96 to avoid causing a pjsip assertion when making a call to an endpoint configured with allow=all. ASTERISK-24367 #close Review: https://reviewboard.asterisk.org/r/4286/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430164 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-29 07:14 +0000 [cb6a737359] Kinsey Moore * 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/ ........ Merged revisions 430145 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430146 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 15:28 +0000 [91becf952a] Kevin Harwell * 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 ........ Merged revisions 430127 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430128 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 10:59 +0000 [3a73c6c90e] Matt Jordan * main/pbx.c: Fix double lock of contexts lock introduced by r429967 We only need to hold the context_merge_lock once. Locking it twice will make many other parts of Asterisk very sad. ASTERISK-24641 #close git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430111 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-23 17:19 +0000 [7ea4156a5e] George Joseph * 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/ ........ Merged revisions 430064 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430067 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-23 17:16 +0000 [62d1dba271] George Joseph * 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/ ........ Merged revisions 430059 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430060 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 15:20 +0000 [1c0604e905] Richard Mudgett * 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/ ........ Merged revisions 430034 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430041 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 14:25 +0000 [7d954f4cb1] Richard Mudgett * Fix compilation since the patch for ASTERISK-24363 went in. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430028 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 14:08 +0000 [bbd9ff122e] Richard Mudgett * 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 ........ Merged revisions 430010 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430011 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 09:40 +0000 [264a50c52a] Karsten Wemheuer (License 5930) * 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 ........ Merged revisions 429983 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429984 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 08:33 +0000 [0c38276d6e] Gareth Palmer (License 5169) * presencestate: Allow channel drivers to provide presence state information This patch adds the ability for channel drivers to supply presence information in a similar manner to device state. The patch does not provide any channel driver implementations, but it does provide the core infrastructure necessary for channel drivers to provide such information. The core handles multiple providers of presence state information. Ordering of presence state is as follows: INVALID < NOT_SET < AVAILABLE < UNAVAILABLE < CHAT < AWAY < XA < DND Each provider can trump the previous if it provides a presence state that supercedes a previous one. Review: https://reviewboard.asterisk.org/r/4050 ASTERISK-24363 #close Reported by: Gareth Palmer patches: chan_presencestate-428146.patch uploaded by Gareth Palmer (License 5169) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429967 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 06:16 +0000 [2afeadcc84] Matt Jordan * app_confbridge: Fix build error caused by XML validation errors Summaries can't contain XML nodes, as they are defined to contain only text data. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429952 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-21 20:35 +0000 [b79a4a464f] Gareth Palmer (License 5169) * app_confbridge: Add the ability to pass options/command to MixMonitor This patch adds the ability to pass options and a command to MixMontor when recording a conference using ConfBridge. New options are - * record_options: Options to MixMontor, eg: m(), W() etc. * record_command: The command to execute when recording is over. * record_file_timestamp: Append the start time to the file name. These options can also be used with the CONFBRIDGE function, e.g., Set(CONFBRIDGE(bridge,record_command)=/path/to/command ^{MIXMONITOR_FILENAME})) Review: https://reviewboard.asterisk.org/r/4023 ASTERISK-24351 #close Reported by: Gareth Palmer patches: record_command-428838.patch uploaded by Gareth Palmer (License 5169) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429934 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-21 18:17 +0000 [b137a92aef] George Joseph * 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/ ........ Merged revisions 429914 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429915 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-20 14:57 +0000 [ba403e83bd] Joshua Colp * 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 ........ Merged revisions 429894 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429895 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 14:56 +0000 [54bd1c9683] Richard Mudgett * 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 ........ Merged revisions 429868 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429870 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 11:34 +0000 [b508b3474e] Richard Mudgett * 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 ........ Merged revisions 429829 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429830 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 11:27 +0000 [07d1012383] Scott Griepentrog * 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 ........ Merged revisions 429827 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429828 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 16:40 +0000 [2cbfafa8c1] Richard Mudgett * 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 ........ Merged revisions 429805 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429806 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 14:09 +0000 [eacbb4ceb5] Richard Mudgett * 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 ........ Merged revisions 429784 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429785 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:55 +0000 [546a54574f] Kevin Harwell * 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/ ........ Merged revisions 429763 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429764 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:40 +0000 [2f3e5b494a] Mark Michelson * 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 ........ Merged revisions 429761 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429762 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:18 +0000 [2b1f2b5c1f] Mark Michelson * 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 ........ Merged revisions 429741 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429745 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 08:50 +0000 [cc1405bd38] Mark Michelson * 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 ........ Merged revisions 429739 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429740 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 18:11 +0000 [18b5a336ef] George Joseph * 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 ........ Merged revisions 429719 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429720 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 17:06 +0000 [c4360796f7] George Joseph * 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/ ........ Merged revisions 429699 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429700 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 04:23 +0000 [8b6ecc449c] Walter Doekes * 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 ........ Merged revisions 429675 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429683 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 11:53 +0000 [c4cc668ba9] George Joseph * 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/ ........ Merged revisions 429653 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429654 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 10:39 +0000 [58095d2486] Andreas Steinmetz (license 6523) * 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 ........ Merged revisions 429633 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429634 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 09:44 +0000 [b5182a6795] Joshua Colp * 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. ........ Merged revisions 429612 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429613 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-15 11:08 +0000 [39b54a21dc] George Joseph * 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/ ........ Merged revisions 429592 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429593 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-15 09:48 +0000 [53e5b377a0] Mark Michelson * 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 ........ Merged revisions 429571 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429573 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 17:57 +0000 [6472568bc6] George Joseph * 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/ ........ Merged revisions 429542 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429543 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 17:49 +0000 [308c1b41dd] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429541 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 16:54 +0000 [901221ffae] Matt Jordan * 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. ........ Merged revisions 429519 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429520 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 11:01 +0000 [8d325be503] Joshua Colp * 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/ ........ Merged revisions 429497 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429498 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 09:31 +0000 [72499dc697] Kevin Harwell * 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/ ........ Merged revisions 429477 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429478 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 09:03 +0000 [2e6d2b1484] David M. Lee * 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/ ........ Merged revisions 429457 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429458 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 08:12 +0000 [a6cf13f2e9] Kinsey Moore * 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 ........ Merged revisions 429433 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429434 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 08:04 +0000 [b99770d4fe] Kinsey Moore * 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 ........ Merged revisions 429430 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429431 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 07:06 +0000 [74d43977cf] Joshua Colp * 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/ ........ Merged revisions 429409 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429410 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 06:32 +0000 [8d384f3825] Joshua Colp * 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/ ........ Merged revisions 429407 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429408 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 14:32 +0000 [63d3f0af95] Kevin Harwell * 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 ........ Merged revisions 429387 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429388 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 07:53 +0000 [d64b9904fd] Kinsey Moore * Stasis: Update unittest for channel snapshots This adjusts the unit test for channel snapshots to take the new language key into account. ........ Merged revisions 429352 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429353 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 09:43 +0000 [e890f9f653] Kevin Harwell * 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 ........ Merged revisions 429326 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429327 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 07:35 +0000 [03c94ef761] Joshua Colp * 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 ........ Merged revisions 429273 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429274 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 07:16 +0000 [0cba439c4d] Kinsey Moore * 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 ........ Merged revisions 429246 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429247 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:47 +0000 [8fe45f0f0a] Scott Griepentrog * 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/ ........ Merged revisions 429223 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429224 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:20 +0000 [d673209abc] Kevin Harwell * 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 ........ Merged revisions 429206 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429209 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:03 +0000 [c17cef1c38] Kevin Harwell * 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 ........ Merged revisions 429196 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429197 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 12:36 +0000 [7844266e21] Kevin Harwell * 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/ ........ Merged revisions 429175 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429176 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 09:45 +0000 [60ab564ad2] Joshua Colp * 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/ ........ Merged revisions 429153 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429154 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 08:01 +0000 [b6e18cae5c] Kinsey Moore * 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 ........ Merged revisions 429128 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429129 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-08 10:54 +0000 [fe6cbf455a] Matt Jordan * 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. ........ Merged revisions 429091 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429092 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-08 10:43 +0000 [bba1763f47] Mark Michelson * 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 ........ Merged revisions 429089 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429090 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-08 10:24 +0000 [fe7671fee6] Mark Michelson * 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 ........ Merged revisions 429064 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429084 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-08 09:45 +0000 [4bb556a847] Kinsey Moore * 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 ........ Merged revisions 429062 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429063 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-06 12:16 +0000 [49aa87e17c] Nuno Borges (License 6116) * 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 ........ Merged revisions 429033 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-06 11:36 +0000 [0cdb71aae9] Nuno Borges (License 6116) * 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 ........ Merged revisions 429029 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429030 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-05 11:08 +0000 [d04445c24a] George Joseph * 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 ........ Merged revisions 429000 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429001 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-04 11:13 +0000 [19992844be] Matt Jordan * 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 ........ Merged revisions 428973 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428974 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-04 09:48 +0000 [343a83d7d8] Matt Jordan * 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 ........ Merged revisions 428946 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428947 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-03 14:59 +0000 [7cb2c446b4] Matt Jordan * 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 ........ Merged revisions 428919 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428920 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-03 13:49 +0000 [7475e1c948] Matt Jordan * 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 ........ Merged revisions 428892 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428893 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-03 10:45 +0000 [6d4ef7ddf4] David Duncan Ross Palmer (License 6660) * 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 ........ Merged revisions 428865 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428866 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-02 15:54 +0000 [63cbd28999] George Joseph * 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 ........ Merged revisions 428837 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428838 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-02 13:04 +0000 [dd00e80cbe] Matt Jordan * 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. ........ Merged revisions 428815 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428816 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-02 11:10 +0000 [08636aadec] Birger Harzenetter (License 5870) * 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 ........ Merged revisions 428789 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428790 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-02 06:21 +0000 [0c1aaa7da5] Joshua Colp * 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 ........ Merged revisions 428761 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428762 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 18:38 +0000 [f128ff61ab] George Joseph * 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 ........ Merged revisions 428734 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428735 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 18:31 +0000 [f418f25c44] George Joseph * 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 ........ Merged revisions 428731 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428732 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 12:51 +0000 [4ff6bd831f] Joshua Colp * rtp_engine: Add support for transporting signed linear at 12kHz, 24kHz, 32kHz, 44kHz, 48kHz, 96kHz, and 192kHz over RTP. This change adds mappings in the RTP engine layer for the remaining signed linear formats. ASTERISK-24274 #close Reported by: Frankie Chin Review: https://reviewboard.asterisk.org/r/4093/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428708 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 11:59 +0000 [1106e8fd0f] Matt Jordan * 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 ........ Merged revisions 428687 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428688 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 07:41 +0000 [ef9ca8bc32] Ben Smithurst (license 6529) * 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 ........ Merged revisions 428655 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428656 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-01 07:08 +0000 [7db3d1642b] snuffy (license 5024) * 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/ ........ Merged revisions 428632 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428633 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-24 14:39 +0000 [3e08619faf] Richard Mudgett * 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/ ........ Merged revisions 428604 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428605 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-24 14:32 +0000 [c38ffca9a1] Richard Mudgett * 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 ........ Merged revisions 428602 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428603 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-21 13:16 +0000 [3576ae47f4] Richard Mudgett * 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 ........ Merged revisions 428572 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428573 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-21 11:49 +0000 [4394e0431c] George Joseph * 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 ........ Merged revisions 428544 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428545 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-21 07:59 +0000 [d663e045f5] Olle Johansson * sip.conf.sample - note that media_address does not change listen address, just the SDP git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428526 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 20:17 +0000 [2be984fb11] Matt Jordan * 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/ ........ Merged revisions 428505 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428506 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 10:37 +0000 [2f78fde10f] Matt Jordan (License #6283) * 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 ........ Merged revisions 428425 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428426 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 10:35 +0000 [2486b48cec] Gareth Palmer (license 5169) * 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 ........ Merged revisions 428413 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428418 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 10:25 +0000 [2f97486d43] Jonathan Rose * 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 ........ Merged revisions 428343 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428376 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 09:57 +0000 [a389f2d7a0] Kevin Harwell * 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. The AMI “ConfbridgeStopRecord” has also been updated to only run under a system authorization. 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 ........ Merged revisions 428339 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428342 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 08:56 +0000 [1c88ca9d31] Joshua Colp * 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 ........ Merged revisions 428305 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428306 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-20 08:49 +0000 [d25eda5fb2] Joshua Colp * 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 ........ Merged revisions 428302 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428303 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-19 13:32 +0000 [57c6f89bf0] Corey Farrell * 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 ........ Merged revisions 428273 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428274 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-19 11:22 +0000 [a7c9f4c668] Richard Mudgett * 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 ........ Merged revisions 428246 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428255 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-19 06:50 +0000 [7f8b7ace72] Joshua Colp * 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/ ........ Merged revisions 428222 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428224 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-19 06:45 +0000 [b2e766a6b7] Joshua Colp * alembic: Fix alembic migration for 'moh_passthrough' option in res_pjsip. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428223 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-19 05:51 +0000 [3119c3737f] Joshua Colp * 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 ........ Merged revisions 428196 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428197 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-18 13:12 +0000 [a94efa239c] Richard Mudgett * parking_tests.c: Add missing newline on a unit test message. ........ Merged revisions 428168 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 428169 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428170 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-17 10:58 +0000 [2e750db120] Mark Michelson * 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 ........ Merged revisions 428145 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428146 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-17 10:02 +0000 [4cea5fd4ba] Corey Farrell * 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 ........ Merged revisions 428119 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428120 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-17 09:27 +0000 [948af7fd79] Matt Jordan * 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 ........ Merged revisions 428115 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428116 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-16 21:08 +0000 [fc2279afea] Matt Jordan * 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 ........ Merged revisions 428079 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428080 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-16 15:13 +0000 [656601d8c4] Joshua Colp * 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 ........ Merged revisions 428052 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428053 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-16 06:12 +0000 [bc02cbabd9] Joshua Colp * chan_sip: Fix bug where DTLS configuration from general would copy dtlsenable. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-15 15:52 +0000 [6993743b1f] Etienne Lessard (License 6394) * 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 ........ Merged revisions 427954 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428010 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-15 15:36 +0000 [ece61f5ed1] Joshua Colp * 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 ........ Merged revisions 428008 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428009 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-15 13:01 +0000 [49e63a191d] Joshua Colp * 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 ........ Merged revisions 427982 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427983 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-15 12:29 +0000 [9d2882d274] Joshua Colp * 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 ........ Merged revisions 427979 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427980 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-15 10:31 +0000 [d0523b4b3c] Michael K. (license 6621) * chan_sip: Add support for setting DTLS configuration in the general section. Configuration of DTLS in the general section will be applied to any users or peers. If configuration exists at their level it overrides the general section values. ASTERISK-24128 #close Reported by: Michael K. patches: dtls_default_settings.patch submitted by Michael K. (license 6621) Review: https://reviewboard.asterisk.org/r/3867/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 15:51 +0000 [3268544907] Matt Jordan * 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. ........ Merged revisions 427927 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427932 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 12:12 +0000 [df2090b931] Jonathan Rose * 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 ........ Merged revisions 427902 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427903 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 09:52 +0000 [ba811ae1c3] Scott Griepentrog * 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 ........ Merged revisions 427876 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427877 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 09:28 +0000 [2d9471ab1f] Mark Michelson * 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 ........ Merged revisions 427870 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427873 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 08:56 +0000 [737b811749] Joshua Colp * 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 ........ Merged revisions 427846 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427847 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-14 08:40 +0000 [2454505d5a] Mark Michelson * 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 ........ Merged revisions 427841 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427842 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-13 16:26 +0000 [49b7a1cbaf] Kevin Harwell * 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 ........ Merged revisions 427815 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427823 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-13 09:46 +0000 [74e706878b] Kinsey Moore * 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 ........ Merged revisions 427789 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427790 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-12 18:23 +0000 [cc4c396647] Matt Jordan * 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 ........ Merged revisions 427763 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427771 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-12 14:40 +0000 [ec1a7654f3] Corey Farrell * 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 ........ Merged revisions 427737 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427738 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-12 10:13 +0000 [dbb8f0a935] Joshua Colp * 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 ........ Merged revisions 427711 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427712 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-12 07:47 +0000 [9f89b83269] Corey Farrell * 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 ........ Merged revisions 427684 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427685 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-09 02:01 +0000 [21c41e4542] Corey Farrell * 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 ........ Merged revisions 427643 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427644 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-08 18:38 +0000 [f4392c4b6d] Xavier Hienne (License 6657) * 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 ........ Merged revisions 427615 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427616 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-08 18:26 +0000 [d773f9d03e] Dmitriy Bubnov (License 6651),Dmitry Bubnov (License 6651) * 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 ........ Merged revisions 427611 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427612 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-08 18:14 +0000 [08d773532b] abelbeck (License 5903) * 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) ........ Merged revisions 427585 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427586 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-08 18:04 +0000 [9a1ab5d548] Matt Jordan * 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 ........ Merged revisions 427583 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427584 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-08 12:20 +0000 [d4fd0774f4] Corey Farrell * 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 ........ Merged revisions 427557 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427566 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 13:26 +0000 [7571bae5ab] Richard Mudgett * 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 ........ Merged revisions 427512 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427519 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 13:12 +0000 [a68baad74f] Richard Mudgett * 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 ........ Merged revisions 427494 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427495 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 12:21 +0000 [47074f4bfd] Joshua Colp * 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 ........ Merged revisions 427491 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427492 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 06:15 +0000 [4d80f223af] Corey Farrell * 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 ........ Merged revisions 427466 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427467 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 03:24 +0000 [c46664305a] Corey Farrell * 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 ........ Merged revisions 427405 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427408 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-06 03:18 +0000 [7e2369310c] Corey Farrell * 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 ........ Merged revisions 427384 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427388 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-05 20:41 +0000 [362dde2229] George Joseph * 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 ........ Merged revisions 427356 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427357 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-05 13:53 +0000 [69f29e627f] Mark Michelson * 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. ........ Merged revisions 427334 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427335 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-05 06:19 +0000 [b06078880b] Joshua Colp * 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 ........ Merged revisions 427303 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427306 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 18:17 +0000 [d5de94201e] George Joseph * 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 ........ Merged revisions 427276 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427277 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 16:51 +0000 [c77a71ad2f] Joshua Colp * res_pjsip: Apply the 'user_eq_phone' setting to the To header as well. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427259 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 16:31 +0000 [5e43d68717] Joshua Colp * res_pjsip: Allow + at the beginning of a phone number when user_eq_phone is enabled. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427257 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 14:49 +0000 [bd42a09d7f] George Joseph * 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 ........ Merged revisions 427228 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427229 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 13:46 +0000 [97e1c7f3a9] Corey Farrell * 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 ........ Merged revisions 427204 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427205 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 13:33 +0000 [9f2874639d] Corey Farrell * 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 ........ Merged revisions 427201 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427202 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 08:11 +0000 [bdc35c77b9] Corey Farrell * 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]). ........ Merged revisions 427181 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427182 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-04 06:03 +0000 [d159885e50] 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. Review: https://reviewboard.asterisk.org/r/2964/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427165 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-03 12:22 +0000 [33f0251b6c] Richard Mudgett * 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 ........ Merged revisions 427130 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427137 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-03 09:03 +0000 [b9aeff9580] Joshua Colp * chan_pjsip: Update CHANGES file to include 'moh_passthrough' setting git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427113 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-03 08:45 +0000 [ac091d4184] Joshua Colp * chan_pjsip: Add support for passing hold and unhold requests through. This change adds an option, moh_passthrough, that when enabled will pass hold and unhold requests through using a SIP re-invite. When placing on hold a re-invite with sendonly will be sent and when taking off hold a re-invite with sendrecv will be sent. This allows remote servers to handle the musiconhold instead of the local Asterisk instance being responsible. Review: https://reviewboard.asterisk.org/r/4103/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427112 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-02 20:36 +0000 [285be15aaf] Corey Farrell * 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 ........ Merged revisions 427089 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427090 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-02 02:13 +0000 [509c04ef38] Corey Farrell * 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 ........ Merged revisions 427026 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427027 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-02 01:40 +0000 [85c1822a9d] Corey Farrell * 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 ........ Merged revisions 427021 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427022 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-11-01 20:01 +0000 [5db1c978e3] Matt Jordan * 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 ........ Merged revisions 426996 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426997 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-31 11:52 +0000 [4219c40775] Tzafrir Cohen * 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 ........ Merged revisions 426934 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426935 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-31 11:41 +0000 [28173ddf05] Scott Griepentrog * 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 ........ Merged revisions 426930 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426932 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-31 11:24 +0000 [f59db388a7] John Bigelow (License 5091) * 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 ........ Merged revisions 426924 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426925 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 22:26 +0000 [d88282af40] Matt Jordan * 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 ........ Merged revisions 426865 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426868 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 22:09 +0000 [bf684b63a3] Corey Farrell * 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 ........ Merged revisions 426833 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426834 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 18:56 +0000 [e4374a3abe] Corey Farrell * 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 ........ Merged revisions 426807 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426808 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 18:45 +0000 [ced81afff2] Corey Farrell * 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/ ........ Merged revisions 426803 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426804 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 16:14 +0000 [a537e314d1] Kevin Harwell * 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 ........ Merged revisions 426780 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426781 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 12:18 +0000 [cd52456ea1] Kevin Harwell * 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 ........ Merged revisions 426757 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426761 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 04:21 +0000 [5d8d90c402] Walter Doekes * 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 ........ Merged revisions 426702 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426706 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-30 01:15 +0000 [c866ced76b] Igor Goncharovskiy * 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 ........ Merged revisions 426668 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426669 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-29 20:59 +0000 [0ddc3bde24] Olle Johansson (License 5267) * 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 ........ Merged revisions 426602 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426603 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-29 20:48 +0000 [ff83ff564c] Olle Johansson (License 5267) * 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 ........ Merged revisions 426597 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426598 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-29 08:02 +0000 [8a69aedd17] Tzafrir Cohen * 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/ ........ Merged revisions 426570 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426573 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 16:35 +0000 [0ed8aebda9] Richard Mudgett * 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 ........ Merged revisions 426552 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426553 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 16:10 +0000 [7205d76d7d] Corey Farrell * 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 ........ Merged revisions 426529 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426530 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 15:44 +0000 [67e496c275] Corey Farrell * 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 ........ Merged revisions 426525 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426526 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 13:09 +0000 [1fe22c411d] Malcolm Davenport * ASTERISK-23512, correct inaccurate comment in manager.conf.sample git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426462 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 11:41 +0000 [8e9f593e3a] Matt Jordan * 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 ........ Merged revisions 426432 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426433 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 09:59 +0000 [f4b4d42630] Matt Jordan * 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 ........ Merged revisions 426368 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426369 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 09:57 +0000 [68d9872f58] Malcolm Davenport * ASTERISK-24323, fix bug in documentation of AGI STREAM FILE CONTROL git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426365 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 08:13 +0000 [684b8762a9] Malcolm Davenport * ASTERISK-24419, fix incorrect syntax for setting language in extensions.conf.sample git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426297 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 06:22 +0000 [2290393273] Corey Farrell * 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 ........ Merged revisions 426266 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426272 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-28 06:12 +0000 [ab16f46139] Corey Farrell * 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/ ........ Merged revisions 426252 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426253 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-27 12:55 +0000 [ef8cdd40e5] Sean Bright * 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/ ........ Merged revisions 426234 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426235 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-26 21:47 +0000 [5a17878085] Matt Jordan * 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 ........ Merged revisions 426211 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426212 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-26 21:27 +0000 [62bee9b327] Matt Jordan * 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 ........ Merged revisions 426176 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426179 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-26 20:47 +0000 [130a3fcd7f] Matt Jordan * 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 ........ Merged revisions 426143 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426144 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-24 10:32 +0000 [c084728690] Jonathan Rose * Documentation: Improve documentation for ExtensionStatus AMI events Review: https://reviewboard.asterisk.org/r/4085/ ........ Merged revisions 426120 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426121 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-22 16:41 +0000 [c4d7e7e270] Shaun Ruffell * 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/ ........ Merged revisions 426097 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426099 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-21 13:04 +0000 [2165868be7] Richard Mudgett * 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. ........ Merged revisions 426079 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426080 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-20 09:20 +0000 [dad0334cf1] abelbeck (License 5903),Matt Jordan (License 6283) * 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 ecnryption 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 ........ Merged revisions 425991 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@426003 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-19 12:09 +0000 [5e10e369b1] George Joseph * 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 ........ Merged revisions 425965 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425966 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-18 23:03 +0000 [404b6ab3ab] Matt Jordan * res/res_pjsip_sdp_rtp: Revert 425924 This patch for r425924 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425945 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-18 19:56 +0000 [b263c8bdae] Matt Jordan * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425924 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-17 17:45 +0000 [b8f687f27c] Jonathan Rose * Sample Configurations: make 'pjsip reload' reload all reloadable pjsip modules AST-1432 #close Reported by: John Bigelow ........ Merged revisions 425905 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425906 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-17 08:35 +0000 [8f58592252] Matt Jordan * 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 ........ Merged revisions 425879 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425881 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-17 08:17 +0000 [0d0e38a0e1] Joshua Colp * res_pjsip_keepalive: Add runtime configurable keepalive module for connection-oriented transports. 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425825 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-17 08:11 +0000 [86eea19c8f] Damian Ivereigh (License 6632) * 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 ........ Merged revisions 425821 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425822 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-17 06:30 +0000 [7144c739e9] Joshua Colp * res_pjsip: Add 'user_eq_phone' option to add a 'user=phone' parameter when applicable. 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425804 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 21:49 +0000 [f91cb1207c] Richard Mudgett * 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 ........ Merged revisions 425783 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425784 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 21:01 +0000 [df59a71b83] Matt Jordan * 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 ........ Merged revisions 425761 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425762 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 20:46 +0000 [2ccbdd2624] Matt Jordan * 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 ........ Merged revisions 425758 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425759 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 16:21 +0000 [873d956144] Matt Jordan * 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 ........ Merged revisions 425736 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425744 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 12:32 +0000 [c2ec5f0f6f] George Joseph * 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 ........ Merged revisions 425714 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425715 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 11:32 +0000 [86a4ce4957] Kinsey Moore * 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 ........ Merged revisions 425691 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425700 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-16 01:22 +0000 [a770ca168d] Igor Goncharovskiy * 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 ........ Merged revisions 425669 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425677 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-15 20:26 +0000 [bfee1b4bc5] Joshua Colp * 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 ........ Merged revisions 425646 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425647 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-15 14:39 +0000 [28c11fff78] Richard Mudgett * chan_motif: Cleanup jingle_tech.capabilities only once. ........ Merged revisions 425627 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425628 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-15 14:17 +0000 [3d58066de9] Jonathan Rose * 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/ ........ Merged revisions 425611 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425613 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-15 05:03 +0000 [90c98d384b] Alexandr Anikin * 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 ........ Merged revisions 425590 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425591 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 15:48 +0000 [104fca5001] George Joseph * 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 ........ Merged revisions 425526 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425527 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 14:12 +0000 [87b5006ff0] Jonathan Rose * 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 ........ Merged revisions 425504 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425505 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 13:13 +0000 [527b58aeb7] George Joseph * 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 ........ Merged revisions 425481 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425482 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 11:47 +0000 [fbb19db0c8] Corey Farrell * 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 ........ Merged revisions 425459 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425460 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 11:43 +0000 [c61b66e107] Richard Mudgett * 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 ........ Merged revisions 425455 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425456 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-14 11:20 +0000 [01bdc80475] Corey Farrell * 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 ........ Merged revisions 425415 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425419 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-13 11:12 +0000 [c7e6b6ba3d] George Joseph * 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 ........ Merged revisions 425384 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425385 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-12 16:09 +0000 [8d6f1d763c] Joshua Colp * 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 ........ Merged revisions 425362 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425363 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-12 03:17 +0000 [9e72c74db5] Walter Doekes * 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 ........ Merged revisions 425299 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425300 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-12 02:57 +0000 [c0ac874106] Walter Doekes * 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 ........ Merged revisions 425294 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425295 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-12 02:47 +0000 [2a03efdbae] Walter Doekes * 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 ........ Merged revisions 425289 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425290 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-11 16:09 +0000 [6a3c11c75b] George Joseph * 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 ........ Merged revisions 425265 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425266 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 15:48 +0000 [98d5b7090d] Joshua Colp * 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 ........ Merged revisions 425243 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425244 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 09:31 +0000 [c3ff212cae] Matt Jordan * 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 ........ Merged revisions 425221 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425222 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 09:24 +0000 [c46100ad5f] Joshua Colp * res_pjsip_phoneprov_provider: Add missing dependency on pjproject. ........ Merged revisions 425216 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 425217 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425218 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 08:03 +0000 [37b5f52da7] Kinsey Moore * 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 ........ Merged revisions 425155 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425156 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 07:10 +0000 [0ef680cff0] Joshua Colp * 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 ........ Merged revisions 425132 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425133 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-10 02:34 +0000 [d3f525fd8f] Torrey Searle (License #5334),Nitesh Bansal (License #6418) * 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 ........ Merged revisions 425071 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425072 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 18:37 +0000 [aef63118da] George Joseph * 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 ........ Merged revisions 425052 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425053 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 16:39 +0000 [6fc4df7279] Kevin Harwell * 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 425031 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425032 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 15:55 +0000 [c6837c236f] George Joseph * 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 ........ Merged revisions 425008 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425009 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 13:44 +0000 [3a187aa14a] Matt Jordan * res/res_phoneprov: Don't cancel Asterisk load on module load failure ........ Merged revisions 424985 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424986 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424987 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 12:46 +0000 [cc595f7353] George Joseph * 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 ........ Merged revisions 424964 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424965 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 11:38 +0000 [0f50e8856b] Richard Mudgett * 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 ........ Merged revisions 424942 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424943 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-09 03:10 +0000 [d0255c4a46] Michael Myles (License #6626) * 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 ........ Merged revisions 424880 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424881 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-08 13:47 +0000 [8b0089ea1d] Joshua Colp * 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 ........ Merged revisions 424854 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424855 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-08 13:24 +0000 [5e50638539] Kinsey Moore * 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. ........ Merged revisions 424850 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424851 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-08 09:54 +0000 [3dfc485e35] Kinsey Moore * 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. ........ Merged revisions 424833 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424834 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-07 15:33 +0000 [d8bbf1ec1d] Kinsey Moore * 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 ........ Merged revisions 424769 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424770 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-07 13:34 +0000 [f7225da08a] Joshua Colp * 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 ........ Merged revisions 424752 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424753 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-07 12:44 +0000 [a9011106b6] Matt Jordan * 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 ........ Merged revisions 424731 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424732 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-07 09:09 +0000 [523da7d1b3] Matt Jordan * res/res_pjsip_pubsub: Fix typo in WARNING message ........ Merged revisions 424713 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424714 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-06 13:39 +0000 [39bd5b7a70] Peter Katzmann (License 5968) * 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 ........ Merged revisions 424692 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424693 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-06 10:41 +0000 [c384532aa4] Richard Mudgett * 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 ........ Merged revisions 424669 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424670 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-06 07:39 +0000 [3a87f32dc0] Matt Jordan * sdp_srtp: Add new lines to some WARNING messages ........ Merged revisions 424646 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424647 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424648 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-05 20:01 +0000 [cce3d99ec8] Matt Jordan * 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 ........ Merged revisions 424625 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424626 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-05 19:53 +0000 [c013916869] Matt Jordan * 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 ........ Merged revisions 424622 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424623 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-05 19:31 +0000 [45b7b474ac] Matt Jordan * 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 ........ Merged revisions 424619 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424620 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-05 19:13 +0000 [f27f41a288] Matt Jordan * 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 ........ Merged revisions 424601 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424602 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-04 19:49 +0000 [9611ef4f1e] Corey Farrell * 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 ........ Merged revisions 424580 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424581 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-04 19:15 +0000 [1b0902caa4] Corey Farrell * 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/ ........ Merged revisions 424554 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424555 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-04 19:02 +0000 [0cea12b9e8] Corey Farrell * 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 ........ Merged revisions 424552 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424553 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 16:58 +0000 [24ded9d9eb] Richard Mudgett * res_pjsip: Fix XML typo and update CHANGES. ASTERISK-24199 ........ Merged revisions 424528 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424529 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424530 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 14:42 +0000 [70301b0438] Richard Mudgett * 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 ........ Merged revisions 424507 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424508 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 13:54 +0000 [cc11a78869] Kristian Hogh * app_queue: Add dialplan function to get the channel name at the specified position in a queue. The QUEUE_GET_CHANNEL function returns the caller's channel name at the specified position in a queue. QUEUE_GET_CHANNEL([,]) The queue position parameter defaults to 1 if not specified. Noop(${QUEUE_GET_CHANNEL(queuename, 2)}) "SIP/peer-00000002", if queue exist and have at least 2 callers Noop(${QUEUE_GET_CHANNEL(queuename, 1)}) Noop(${QUEUE_GET_CHANNEL(queuename)}) "SIP/peer-00000000", if queue exist and have at least 1 caller ASTERISK-24365 #close Reported by: Kristian Hogh Patches: queue_get_firstchannel.patch (license #6639) patch uploaded by Kristian Hogh rb4035.patch (license #6639) patch uploaded by Kristian Hogh Patch morphed from QUEUE_GET_FIRSTCHANEL to the more general QUEUE_GET_CHANNEL on reviewbord. Review: https://reviewboard.asterisk.org/r/4035/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424493 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 12:47 +0000 [0165c5f95a] Richard Mudgett * 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 ........ Merged revisions 424472 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424473 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 10:55 +0000 [4967478d18] George Joseph * 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 ........ Merged revisions 424448 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424449 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 08:59 +0000 [b1f8eba178] Kinsey Moore * 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 ........ Merged revisions 424427 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424428 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-03 08:33 +0000 [4246652603] Kinsey Moore * 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 ........ Merged revisions 424424 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424425 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-02 16:55 +0000 [2b0777c017] Richard Mudgett * 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 ........ Merged revisions 424394 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424395 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-02 15:23 +0000 [b15cd42b5b] Jonathan Rose * 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 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424373 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424380 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-02 10:33 +0000 [2f570094b7] Jonathan Rose * chan_pjsip: Fix an assertion for channels that lack formats on creation ASTERISK-24222 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4017/ ........ Merged revisions 424333 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424358 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-02 08:36 +0000 [aa5458d6ab] Scott Griepentrog * res_pjsip: document use of rewrite_contact in sample conf Without setting rewrite_contact, an invite to an endpoint behind NAT will not reach it - unless the endpoint itself uses STUN or TURN to discover it's public URI. Thus, the use of this should be in the sample documentation. Review: https://reviewboard.asterisk.org/r/4036/ ........ Merged revisions 424337 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424338 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424339 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 15:37 +0000 [a752ca00bd] Corey Farrell * res_hep: Release allocation reference to configuration. ASTERISK-24362 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4026/ ........ Merged revisions 424312 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424313 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424314 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 11:39 +0000 [adba2a8d7f] Joshua Colp * res_pjsip: Add 'dtls_fingerprint' option to configure DTLS fingerprint hash. During the latest update to DTLS-SRTP support the ability to configure the hash used for fingerprints was added. This gave us two supported ones: SHA-1 and SHA-256. The default was accordingly updated to SHA-256. Unfortunately this configuration ability was not exposed within res_pjsip. This change adds a dtls_fingerprint option that controls it. #SIPit31 ........ Merged revisions 424290 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424291 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424292 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 11:20 +0000 [9233b1cf44] Joshua Colp * res_pjsip_sdp_rtp: Accept DTLS attributes in top level, not just media session. #SIPit31 ........ Merged revisions 424287 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424288 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424289 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 07:28 +0000 [4d2c7c23f8] Kinsey Moore * PJSIP: Handle defaults properly This updates the code behind PJSIP configuration options with custom handlers to deal with the assigned default values properly where it makes sense and adjusting the default value where it doesn't. Before applying this patch, there were several cases where the default value for an option would prevent that config section from loading properly. Reported by: Thomas Thompson Review: https://reviewboard.asterisk.org/r/4019/ ........ Merged revisions 424263 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424266 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424267 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 07:15 +0000 [122cc050d0] Kinsey Moore * PJSIP: Force transport on contact rewrite If contact rewriting is enabled but the contact differs in transport from what is actually being used, messages after the initial INVITE transaction can be sent to an incorrect transport/port combination. In the case where this bug occurred the remote party never received a BYE since it was sent to the remote party's TCP port over UDP. Review: https://reviewboard.asterisk.org/r/4032/ ........ Merged revisions 424244 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424245 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424246 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 05:10 +0000 [c3a7524457] ibercom (License #6599) * chan_sip: Simplify some unref code by removing unlink_peer_from_tables. ASTERISK-22945 #related Reported by: ibercom Patches: asterisk11-chan_sip-simplifies.patch uploaded by ibercom (License #6599) ........ Merged revisions 424181 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 424182 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424183 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424184 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424185 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-10-01 04:55 +0000 [841d978a30] ibercom (License #6599) * chan_sip: Remove excess ref of realtime peer before sip_poke_peer. The peer is referenced at the end of sip_poke_peer, it should not get an extra ref before the call to sip_poke_peer. This fixes a memory leak. ASTERISK-22945 #close Reported by: ibercom Tested by: Yuriy Gorlichenko Patches: asterisk11.patch uploaded by ibercom (License #6599) Review: https://reviewboard.asterisk.org/r/4031/ ........ Merged revisions 424176 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 424177 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424178 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424179 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424180 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-30 06:42 +0000 [d7c29885ad] Joshua Colp * res_pjsip_sdp_rtp: Don't place an extra whitespace before 'rport' and don't put IPv6 addresses in brackets. #SIPit31 ........ Merged revisions 424155 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424156 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424157 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-30 06:36 +0000 [3641ebcf96] Joshua Colp * res_rtp_asterisk: Ensure that the base and mapped address for candidates is present in SDP. This change fixes an issue where ICE candidates put into the SDP did not contain the 'raddr' and 'rport' information for server reflexive and relay candidates. #SIPit31 ........ Merged revisions 424151 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424152 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424153 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424154 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-29 17:00 +0000 [27396a6b59] George Joseph * pjsip_cli: Suppress header print on error or no objects If there's an error on the pjsip command line or there are no objects, don't print the column headers. ASTERISK-24350 #close Reported-by: Brad Latus Tested-by: George Joseph Tested-by: Brad Latus Review: https://reviewboard.asterisk.org/r/4025/ ........ Merged revisions 424128 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424129 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424130 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-29 16:32 +0000 [b56dfb78c5] Walter Doekes * autosupport: Fix bashism. '==' is bashism (bashspecific, fails when dash is /bin/sh). Anyway, a 'case' works better there. Originally committed in r375059 and r375060 on 2012-10-16 21:13:08. ASTERISK-20567 #close Reported by: Tzafrir Cohen ........ Merged revisions 424117 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424125 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424126 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424127 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-29 16:18 +0000 [270932635d] Richard Mudgett * Simplify UUID generation in several places. Replace code using ast_uuid_generate() with simpler and faster code using ast_uuid_generate_str(). The new code avoids a malloc(), free(), and copy. ........ Merged revisions 424103 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424105 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424109 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-29 15:28 +0000 [9d2bc0675a] Richard Mudgett * threadpool.c: Minor cleanup fixes. * Fix threadpool_alloc() prototype. * Add missing off-nominal NULL check of pool in threadpool_alloc(). * searializer_create() does not need to create the object with a lock as the lock is not used. ........ Merged revisions 424096 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424097 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424098 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-27 12:29 +0000 [2eef53c465] Joshua Colp * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424077 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-27 07:44 +0000 [76744543b4] Joshua Colp * res_pjsip_session: Add additional checks for delaying session refreshes. There are certain situations which no checks existed for which need to prevent session refreshes. This includes sending a session refresh with SDP before SDP negotiation has completed and sending a session refresh before the dialog itself has been established. Checks for these have been added. Additionally COLP related UPDATEs were including SDP when it is not needed. Review: https://reviewboard.asterisk.org/r/4008/ ........ Merged revisions 424056 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 424057 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424058 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-26 10:51 +0000 [3c1804eb0d] Richard Mudgett * format_mp3: Made the get script conditionally apply patch if not already there. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424039 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-26 10:43 +0000 [e0abb82ab8] Walter Doekes * core: Ouch, forgot to undo a test free() in r423978. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424038 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-26 10:28 +0000 [d07b9af24b] Jeremy Laine * res_fax: Fix out of bounds error in update_modem_bits(). ASTERISK-24357 #close Reported by: Jeremy Laine Patches: res_fax_bounds.patch (license #6561) patch uploaded by Jeremy Laine Modified patch to not use magic numbers. ........ Merged revisions 423979 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423983 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423987 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423992 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@424016 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-26 09:41 +0000 [37179a2b1f] Walter Doekes * core: Don't allow free to mean ast_free (and malloc, etc..). This gets rid of most old libc free/malloc/realloc and replaces them with ast_free and friends. When compiling with MALLOC_DEBUG you'll notice it when you're mistakenly using one of the libc variants. For the legacy cases you can define WRAP_LIBC_MALLOC before including asterisk.h. Even better would be if the errors were also enabled when compiling without MALLOC_DEBUG, but that's a slightly more invasive header file change. Those compiling addons/format_mp3 will need to rerun ./contrib/scripts/get_mp3_source.sh. ASTERISK-24348 #related Review: https://reviewboard.asterisk.org/r/4015/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423978 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-26 03:26 +0000 [b8c1130ed1] Jeremy Lainé (License #6561) * docs: Escape unescaped minus sign in asterisk.8 manpage. ASTERISK-23768 #close Reported by: Jeremy Lainé Patches: escape_manpage_hyphen.patch uploaded by Jeremy Lainé (License #6561) ........ Merged revisions 423915 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423916 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423917 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423918 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423919 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-25 16:03 +0000 [fa0c33ebc1] Richard Mudgett * res_pjsip.c: Add missing off nominal cleanup in ast_sip_push_task_synchronous(). * Made memset the std struct in ast_sip_push_task_synchronous() because if DEBUG_THREADS is enabled then uninitialized lock tracking data is used. ........ Merged revisions 423894 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423895 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423896 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-25 15:49 +0000 [d172d84fe1] Kristian Høgh (License #6639) * musiconhold: Add preferchannelclass=no option to prefer app class. The new option 'preferchannelclass' is added to musiconhold.conf. If yes (the default) the CHANNEL(musicclass) is preferred when choosing the hold music. If it is no, the class suggested by the application that calls the MoH (e.g. the Queue() app) gets preferred (new behaviour). This way you set a different hold-music from the Queue-music by setting both the CHANNEL(musicclass) and the queue-context musicclass. ASTERISK-24276 #close Reported by: Kristian Høgh Patches: app_override_channel_moh.patch uploaded by Kristian Høgh (License #6639) Review: https://reviewboard.asterisk.org/r/4010/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423893 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-24 13:35 +0000 [68077634fe] Richard Mudgett * pjsip_options.c: Fix race condition stopping periodic out of dialog OPTIONS request. The crash on the issues is a result of an invalid transport configuration change when asterisk is restarted. The attempt to send the qualify request fails and we cleaned up. However, the callback is also called which results in a double unref of the objects involved. * Put a wrapper around pjsip_endpt_send_request() to detect when the passed in callback is called because of an error so callers can know to not cleanup. * Made send_request_cb() able to handle repeated challenges (Up to 10). * Fix periodic endpoint qualify OPTIONS sched deletion race by avoiding it. The sched entry will no longer self stop and must be externally stopped. * Added REF_DEBUG description tags to struct sched_data in pjsip_options.c. * Fix some off-nominal ref leaks in schedule_qualify(), qualify_and_schedule(). * Reordered pjsip_options.c module start/stop code to cleanup better on error. ASTERISK-24295 #close Reported by: Rogger Padilla Review: https://reviewboard.asterisk.org/r/3954/ ........ Merged revisions 423866 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423867 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423868 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-24 03:55 +0000 [39fada4dc9] Walter Doekes * chan_sip: Unref outbound proxy structure on dialog/pvt destruction. Make sure outbound proxy refs are always unreffed on dialog destruction. Review: https://reviewboard.asterisk.org/r/4016/ ........ Merged revisions 423800 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423801 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423802 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423803 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423804 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-23 09:36 +0000 [a89964a510] Mark Michelson * Make CDR and CEL unit tests less FRACKy. Prior to this commit, CDR and CEL tests were expected to trigger FRACKs (i.e. assertions) due to the fact that the channels they create have no formats on them. Some code was independently added recently that attempts to prevent FRACKs from occurring by failing early when attempting to set up translation paths if one or both channels support no formats. Unfortunately, this attempt to be helpful made the CDR and CEL tests go from simply FRACKing to outright failing and in some cases, failing so badly as to crash Asterisk. This commit seeks to correct past mistakes by adding the ulaw format to channels created by the CDR and CEL unit tests. This makes setting up translation paths succeed, eliminates previously-seen FRACKs, and ultimately causes the unit tests to succeed again. Review: https://reviewboard.asterisk.org/r/4014 ........ Merged revisions 423783 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423784 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-22 14:49 +0000 [593455621b] Torrey Searle (License #5334) * chan_sip: On INVITE retransmission, don't add an extra 503 response. INVITE arrives to asterisk, asterisk responds Busy(). If the INVITE is retransmitted, asterisk would generate a 503 in addition to the 486. Thanks Torrey Searle for providing a working regression test. ASTERISK-24335 #close Review: https://reviewboard.asterisk.org/r/4003/ Patches: retrans_486_invite.patch uploaded by Torrey Searle (License #5334) ........ Merged revisions 423720 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423721 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423722 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423723 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423724 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-22 12:42 +0000 [63a4da4a0d] Walter Doekes * cli.c: Fix tab completion "module load" when MALLOC_DEBUG is enabled. r421600 conflicted with r155763. ASTERISK-24348 #close ........ Merged revisions 423657 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423658 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423659 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423660 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423661 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-20 20:16 +0000 [64a9e5f001] Matt Jordan * main/channel: Unlock channel in off-nominal path In r423414 (13) / r423415 (trunk), an API call that determines if a format capability structure is empty was added. This returns true if the format capability structure is completely empty or "none". A check for this was added in channel.c's set_format call. Unfortunately, when this check was true, it returned from the function while still holding the channel lock. This caused the CDR unit tests - which have a tendency to create channels with no formats - to deadlock. Whoops. This patch unlocks the channel on the off-nominal path. ........ Merged revisions 423641 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423642 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-20 18:55 +0000 [9bf039346a] Matt Jordan * rest-api/api-docs/events.json: Remove non-compliant 'extends' attribute Prior to the release of Swagger 1.2, the attribute 'extends' was being promoted as a possible way to show that a particular object extends an existing object. Instead, the Swagger specification went with the 'subTypes' attribute in the base object. This patch removes the unsupported attribute; the object that the offending objects proposed to extend already lists them in its 'subTypes' attribute. ASTERISK-24300 #close Reported by: Bradley Watkins ........ Merged revisions 423620 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423621 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423622 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-20 18:41 +0000 [de6e467db7] Matt Jordan * rest-api/api-docs: Correct basePath in resources to match top resources file The resources.json file that defines the resource JSON files used with ARI references a basePath of 'http://localhost:8088/ari'. This does not match what is defined in the resource files themselves, 'http://localhost:8088/stasis'. The correct base path is the one that includes 'ari' in the URL; this patch updates the various resource JSON files to have the correct basePath. ASTERISK-24339 #close Reported by: Bradley Watkins ........ Merged revisions 423617 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423618 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423619 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-19 14:51 +0000 [354fff327d] Joshua Colp * res_pjsip_notify: Fix crash on unload/load and don't say the module doesn't exist on reload. When unloading the module did not unregister the CLI commands causing a crash upon load when they were registered again. When reloading the module the return value from the config options framework was not checked to determine if an error occurred or not. This caused a message to be output saying the module did not exist when reloading if no changes were present. AST-1433 #close AST-1434 #close ........ Merged revisions 423579 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423580 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423581 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-19 12:16 +0000 [ec0313c411] Richard Mudgett * res_pjsip_sdp_rtp.c: Fix native formats containing formats that were not negotiated. Outgoing PJSIP calls can result in non-negotiated formats listed in the channel's native formats if video formats are listed in the endpoint's configuration. The resulting call could then use a non-negotiated format resulting in one way audio. * Simplified the update of session->req_caps in set_caps(). Why do something in five steps when only one is needed? AFS-162 #close Review: https://reviewboard.asterisk.org/r/4000/ ........ Merged revisions 423561 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423563 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-19 10:54 +0000 [6dae345674] Jonathan Rose * Stasis_channels: Resolve unfinished Dials when doing masquerades Masquerades into channels that are in the dialing state don't end their dial and this goes against the model for things like CDRs and generating Dial end manager actions and such. ASTERISK-24237 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3990/ ........ Merged revisions 423525 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423530 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423546 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-19 10:11 +0000 [7e602175ff] Jonathan Rose * chan_iax2: Fix a crash when using chan_iax2 jitterbuffer settings Caused by format changes in Asterisk 13 ASTERISK-24265 #close Reported by: Dafi Ni Review: https://reviewboard.asterisk.org/r/3999/ ........ Merged revisions 423524 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423526 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-19 07:50 +0000 [7f2623a26f] Kinsey Moore * PJSIP: Prevent T38 framehook being put on wrong channel This change gives framehooks a reverse-direction masquerade callback in addition to chan_fixup_cb similar to the callback added to datastores to handle the same situation. The new callback provides the same parameters as the fixup callback, but is called on the new channel's framehooks before moving framehooks from the old channel to the new channel. This gives the framehooks an oppurtunity to decide whether they should remain on the new channel or be removed. This new callback is used to prevent the PJSIP T.38 framehook from remaining on a masqueraded channel if the new channel is not also a PJSIP channel. This was causing a crash when a local channel was masqueraded into a PJSIP channel and the framehook was executed on the local channel since the channel's tech private data was not structured as expected. Review: https://reviewboard.asterisk.org/r/4001/ ........ Merged revisions 423503 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423504 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423505 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 14:31 +0000 [40e033a6b6] Sean Bright * res_pjsip: Don't require a password when doing userpass authentication. An empty password is valid for username/password authentication so we should allow password to be empty/not supplied. Review: https://reviewboard.asterisk.org/r/3988 ........ Merged revisions 423481 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423482 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423483 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 14:23 +0000 [ad8ef9175a] George Joseph * utils: Create ast_strsep function that ignores separators inside quotes This function acts like strsep with three exceptions... * The separator is a single character instead of a string. * Separators inside quotes are treated literally instead of like separators. * You can elect to have leading and trailing whitespace and quotes stripped from the result and have '\' sequences unescaped. Like strsep, ast_strsep maintains no internal state and you can call it recursively using different separators on the same storage. Also like strsep, for consistent results, consecutive separators are not collapsed so you may get an empty string as a valid result. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3989/ ........ Merged revisions 423476 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423478 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423480 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 13:56 +0000 [de72f3edbc] Mark Michelson * Add subscription state test events. These are needed for a set of batched notification RLS tests that are about to be committed to the testsuite. Review: https://reviewboard.asterisk.org/r/3967 ........ Merged revisions 423462 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423463 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 12:22 +0000 [ac46240b62] Jonathan Rose * res_pjsip_endpoint_identifier_ip: Fix parsing of match value with CIDR Also fixes comma separates match lists ASTERISK-24290 #close Reported by: Ray Crumrine Review: https://reviewboard.asterisk.org/r/3995/ ........ Merged revisions 423417 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423425 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423442 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 12:10 +0000 [02cf1835e3] Richard Mudgett * bridge_softmix.c: Made use ao2_replace() instead of the inline equivalent. * Clarified some read/write format comments. * Fixed a doxygen tag typo. ........ Merged revisions 423423 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 11:56 +0000 [a7add3a257] Richard Mudgett * astobj2.c/refcounter.py: Fix to deal with invalid object refs. * Make astob2 REF_DEBUG output an invalid object line when an invalid ao2 object ref/unref is attempted. This is similar to the constructor/destructor lines. * Fixed refcounter.py to handle skewed objects that have constructor/destructor states. * Made refcounter.py highlight the invalid ao2 object refs by putting them in their own section of the processed output file. * Made refcounter.py highlight unreffing an object by more than one that results in a negative ref count and the object being destroyed. The abnormally destroyed object is reported in the invalid and finalized object sections of the output. Review: https://reviewboard.asterisk.org/r/3971/ ........ Merged revisions 423349 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423400 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423416 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423418 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423422 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 11:38 +0000 [fa6313ad29] Mark Michelson * Add API call to determine if format capability structure is "empty". Empty here means that there are no formats in the format_cap structure or the only format in it is the "none" format. I've added calls to check the emptiness of a format_cap in a few places in order to short-circuit operations that would otherwise be pointless as well as to prevent some assertions from being triggered in cases where channels with no formats are used. ........ Merged revisions 423414 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423415 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 11:24 +0000 [389db2b720] Mark Michelson (License #5049) * res_fax_spandsp: Properly handle cleanup before starting FAXes. If faxing fails at a very early stage, then it is possible for us to pass a NULL t30 state pointer to spandsp, which spandsp is none too pleased with. This patch ensures that we pass the correct pointer to spandsp in the situation where we have not yet set our local t30 state pointer. ASTERISK-24301 #close Reported by Matt Jordan Patches: ASTERISK-24301-fax.diff Uploaded by Mark Michelson (License #5049) ........ Merged revisions 423360 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423365 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423372 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423380 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 11:09 +0000 [79eac1ffca] Mark Michelson * res_pjsip_pubsub: Add some type safety when generating NOTIFY bodies. res_pjsip_pubsub has two separate checks that it makes when a SUBSCRIBE arrives. * It checks that there is a subscription handler for the Event * It checks that there are body generators for the types in the Accept header The problem is, there's nothing that ensures that these two things will actually mesh with each other. For instance, Asterisk will accept a subscription to MWI that accepts pidf+xml bodies. That doesn't make sense. With this commit, we add some type information to the mix. Subscription handlers state they generate data of type X, and body generators state that they consume data of type X. This way, Asterisk doesn't end up in some hilariously mismatched situation like the one in the previous paragraph. ASTERISK-24136 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3877 Review: https://reviewboard.asterisk.org/r/3878 ........ Merged revisions 423344 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423348 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423350 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 10:14 +0000 [126334a7aa] George Joseph * res_pjsip: ami: Fix error in AMI output when an endpoint has no transport When no transport is associated to an endpoint, the AMI output for PJSIPShowEndpoint indicates an error instead of silently ignoring the missing transport. This patch causes the error to appear only if a transport was specified on the endpoint and the transport doesn't exist. It also fixes an issue with counting the objects that were actually found. ASTERISK-24161 #close ASTERISK-24331 #close Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3998/ ........ Merged revisions 423282 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423284 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423285 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 10:07 +0000 [b89491e39c] David M. Lee * Only install dahdi_span_config_hook if DAHDI is enabled This patch changes the install to only install the hook script if DAHDI is enabled. It also adds the script to the uninstall task, and moves the DAHDI_UDEV_HOOK_DIR variable so that it's not between the _MAKEOPTS variables and their comment. This allows installs which specify a --prefix to work normally, as long as they don't enable DAHDI. Review: https://reviewboard.asterisk.org/r/3972/ ........ Merged revisions 423281 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423283 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-18 09:46 +0000 [d120e40309] George Joseph * config: bug: Fix SEGV in ast_category_insert when matching category isn't found If you call ast_category_insert with a match category that doesn't exist, the list traverse runs out of 'next' categories and you get a SEGV. This patch adds check for the end-of-list condition and changes the signature to return an int for success/failure indication instead of a void. The only consumer of this function is manager and it was also changed to use the return value. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3993/ ........ Merged revisions 423276 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423277 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423278 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423279 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423280 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-17 13:06 +0000 [8839ba3727] Joshua Colp * res_rtp_asterisk: Ensure that the thread terminating pj stuff is registered. ........ Merged revisions 423253 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423254 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423255 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423256 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 17:46 +0000 [fcc09fd0de] Matt Jordan * pbx/Makefile: Revert r423237 This patch was supposed to go into a team branch, but I was a bit fast on the gun before 'svn switch' had apparently moved the target branch over. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423238 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 17:42 +0000 [712b4195ef] Matt Jordan * Add some pbx python stuff git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423237 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 16:06 +0000 [618b46d8f0] Joshua Colp * Multiple revisions 423209,423212 ........ r423209 | file | 2014-09-16 17:35:34 -0300 (Tue, 16 Sep 2014) | 8 lines res_rtp_asterisk: Fix building when pjproject is not used. ........ Merged revisions 423207 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423208 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ r423212 | file | 2014-09-16 18:03:59 -0300 (Tue, 16 Sep 2014) | 10 lines res_rtp_asterisk: Fix 100% CPU usage due to timer heap thread spinning. Side note: I need a vacation. ........ Merged revisions 423210 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423211 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423209,423212 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423213 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 11:33 +0000 [662b687dbe] Scott Griepentrog * Voicemail: get correct duration when copying file to vm Changes made during format improvements resulted in the recording to voicemail option 'm' of the MixMonitor app writing a zero length duration in the msgXXXX.txt file. This change introduces a new function ast_ratestream(), which provides the sample rate of the format associated with the stream, and updates the app_voicemail function for ast_app_copy_recording_to_vm to calculate the right duration. Review: https://reviewboard.asterisk.org/r/3996/ ASTERISK-24328 #close ........ Merged revisions 423192 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423193 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 07:12 +0000 [ceedf44edd] Joshua Colp * res_pjsip_session: Fix usage of wrong memory pool when creating local SDP. ........ Merged revisions 423172 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423173 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423174 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-16 06:12 +0000 [e977425bc8] Joshua Colp * res_rtp_asterisk: Fix a myriad of TURN client issues. 1. The number of file descriptors an ioqueue instance can handle is fixed, so we now spawn the required number to handle the load. 2. Our transport identifiers were exceeding the range supported by pjnath. 3. The TURN client did not set up client binding causing needless bandwidth usage. 4. The code no longer updates address information on each packet. 5. STUN traffic was getting looped back to Asterisk instead of going through the TURN server. 6. Synchronization now ensures things are completely setup or destroyed. 7. Logging now reflects the target the TURN server is sending to/receiving from on our behalf. ASTERISK-23577 #close Reported by: Jay Jideliov ASTERISK-23634 #close Reported by: Roman Skvirsky Review: https://reviewboard.asterisk.org/r/3982/ ........ Merged revisions 423150 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423151 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423152 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423153 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-15 05:50 +0000 [77834b72d3] Zogot, cleaned up by me. * contrib: Fix verifyi typo in alembic DB script ps_transport table. Reported by: Zogot (on IRC) Patches: tmp.diff uploaded by Zogot, cleaned up by me. ........ Merged revisions 423128 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423129 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423130 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-14 10:54 +0000 [a62fedf0cb] Walter Doekes * chan_sip: Clarify that sipdebug=yes cannot be undone by the CLI. Document it in sip.conf. ASTERISK-24249 #close Reported by: Avinash Mohod Review: https://reviewboard.asterisk.org/r/3926/ ........ Merged revisions 423066 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423067 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423068 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 423069 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423070 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-14 10:41 +0000 [9c1f34c7e9] Walter Doekes * musiconhold: Add sort=randstart, and deprecate old stuff. - adds sort=randstart (next to sort=, sort=random, sort=alpha) - combines duplicate moh option parsing code into a single function - adds deprecationwarnings for application=r to sort randomly - adds deprecationwarnings for random=yes to sort randomly - removes invisible code that was supposed to stay until 1.8 The sort=randstart works like sort=alpha, except we start at a random position. Review: https://reviewboard.asterisk.org/r/3991/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423065 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-12 12:42 +0000 [02295456ef] Joshua Colp * chan_rtp: Add unicast RTP support. This module supports sending both unicast and multicast RTP to a specified target. Multicast functionality is the same as chan_multicast_rtp was. In the case of unicast a specific IP address and port can be specified, along with optional RTP engine and format in the form of: UnicastRTP/:// This can be useful for sending a copy of a media stream to another application for processing. Review: https://reviewboard.asterisk.org/r/3981/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423004 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-12 11:19 +0000 [dd6bdede7d] Jonathan Rose * Realtime: Fix a bug that caused realtime destroy command to crash Also has could affect with anything that goes through ast_destroy_realtime. If a CLI user used the command 'realtime destroy ' with only a single column/value pair, Asterisk would crash when trying to create a variable list from a NULL value. ASTERISK-24231 #close Reported by: Niklas Larsson Review: https://reviewboard.asterisk.org/r/3985/ ........ Merged revisions 422984 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422985 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422991 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-11 17:17 +0000 [c212a71f0b] Mark Michelson * Remove undocumented default behavior of ast_play_and_record_full acceptdtmf. ast_play_and_record_full() has a parameter called "acceptdtmf" that is a string of acceptable DTMF digits that may be pressed by a caller to end and accept the recording. ARI uses this function in order to perform recording, and it provides options for what is passed as acceptdtmf to ast_play_and_record_full(). By default, ARI passes an empty string, with the intention that no DTMF can be used to end the recording. The problem is that ast_play_and_record_full() attempts to be "helpful" by setting "#" as the acceptdtmf if an empty string or NULL pointer has been passed in. With ARI, this results in unexpected behavior occurring if you have attempted to intercept "#" yourself in order to perform some other manipulation of the live recording. This change removes the "helpful" behavior by no longer accepting "#" as a default acceptdtmf if none is specified by the caller of ast_play_and_record_full(). This makes the ARI scenario work as expected. The other callers of ast_play_and_record_full() are app_voicemail and app_minivm, and in both cases, they pass an explicit "#" to ast_play_and_record_full() as acceptdtmf, so they are unaffected by this change. ........ Merged revisions 422964 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422965 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422967 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-10 11:07 +0000 [93894d53c4] George Joseph * config: bug: fix truncation of included config files on permissions error ast_config_text_file_save() currently truncates include files as they are processed. If a subsequent include file or the main config file has a permissions error that prevents writing, earlier include files are left truncated resulting in a frantic search for backups. This patch causes ast_config_text_file_save to check for write access on all files before it truncates any of them. Will be applied 1.8 > trunk. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3986/ ........ Merged revisions 422900 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422903 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422904 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422905 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422906 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-10 11:00 +0000 [7bd3287a11] Sean Bright * pjsip/config_auth.c: Add missing whitespace to log messages. The errors generated when validating 'auth' settings are missing a space which makes the messages a little confusing. ........ Merged revisions 422899 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422901 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422902 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-09 15:15 +0000 [a47873168a] Richard Mudgett * Update CHANGES for CHANNEL(onhold). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422885 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-09 15:11 +0000 [51f082af34] Rusty Newton * Sounds/BuildSystem: Modifications to include new releases and Japanese language. Modifying Makefile and sounds.xml to include new core 1.4.26 and extra 1.4.15 sound prompt releases, plus the new Japanese core sound prompts contributed by QLOOG. ASTERISK-23324 Reported by: Kevin McCoy Tested by: Rusty Newton ........ Merged revisions 422789 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422790 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422791 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422883 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422884 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-09 11:14 +0000 [9183416fe2] Richard Mudgett * func_channel: Add CHANNEL(onhold) item to get the current hold status of the channel. It would be useful to get the current hold status of a channel. Added CHANNEL(onhold) item that returns 1 (onhold) and 0 (not-onhold) for the hold status of a channel. ASTERISK-24038 Reported by: Matt Jordan AFS-113 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3983/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422870 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-08 13:04 +0000 [baf99dffac] Mark Michelson * Add note about configuring list_items on a single line. ........ Merged revisions 422855 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422856 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-08 12:53 +0000 [5ad0edacb6] Mark Michelson * Add sample configuration for resource lists. On review /r/3977, it was recommended to note in the sample configuration about the size limitation for resource lists. However, since there was no section in the sample configuration at all for resource list subscriptions, I decided to make a separate commit where I have added the necessary sample configuration as well as the size limitation warning. ........ Merged revisions 422853 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422854 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-08 12:35 +0000 [c6bc44f700] Mark Michelson * Pre-allocate transmission data buffer for RLS NOTIFY requests. PJSIP, unless a constant is modified at compilation time, limits SIP requests to 4000 bytes. Full-state RLS notifications can easily exceed this limit with moderately small lists. This changeset allows for Asterisk to work around this size limit by performing its own allocation of the transmission data buffer. This way, Asterisk can allocate a buffer that exceeds the built-in maximum. We still impose our own limit of 64000 bytes, mainly because making allocations larger than that is a bit absurd. ASTERISK-24181 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3977 ........ Merged revisions 422851 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422852 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-08 10:58 +0000 [ef5f7a0e32] Jonathan Rose * res_pjsip_pubsub: Check supported headers for eventlist when subscribing to resource list https://wiki.asterisk.org/wiki/display/AST/Resource+List+Subscription+Test+Plan According to the off-nominal plan, if evenlist support is not specified in a SUBSCRIBE's supported header(s), that subscription should be rejected with an error. ASTERISK-23871 Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3960/diff/#index_header ........ Merged revisions 422836 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422837 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-06 17:50 +0000 [71acca4de2] Matt Jordan * main/cdr: Copy over location information during a fork When a CDR is forked, a new CDR is created and appended to the CDR chain for the Party A. The forked CDR starts life off as a clone of the last non-finalized for the particular Party A. In the past, merely copying over the snapshots for Party A/Party B would be sufficient. However, as the CDRs now contain cached information from Party A - specifically application/data, context, and extension - we need to copy that over during a fork as well. Huzzah for unit tests catching this when the context/extension were derived from a cached value on the CDR instead of on Party A. ........ Merged revisions 422769 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422770 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422771 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-06 17:22 +0000 [e4591f98b1] Matt Jordan * main/rtp_engine: Format NTP timestamps as unsigned ints On some systems, a timeval's tv_sec/tv_usec will be unsigned lont ints, as opposed to long ints. When the RTP engine formats these as strings, it was previously formatting them as signed integers, which can result in some odd negative timestamp values (particularly on 32-bit systems). This patch formats the values as unsigned long integers. ........ Merged revisions 422766 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422767 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422768 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-06 14:13 +0000 [fd8010de2b] Joshua Colp * res_pjsip_sdp_rtp: Fix retrieval of "ice-pwd" attribute if in session and not media stream. ........ Merged revisions 422746 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422747 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422748 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 17:04 +0000 [d42b116925] Matt Jordan * main/cdrs: Preserve context/extension when executing a Macro or GoSub The context/extension in a CDR is generally considered the destination of a call. When looking at a 2-party call CDR, users will typically be presented with the following: context exten channel dest_channel app data default 1000 SIP/8675309 SIP/1000 Dial SIP/1000,,20 However, if the Dial actually takes place in a Macro, the current behaviour in 12 will result in the following CDR: context exten channel dest_channel app data macro-dial s SIP/8675309 SIP/1000 Dial SIP/1000,,20 The same is true of a GoSub: context exten channel dest_channel app data subs dial_stuff SIP/8675309 SIP/1000 Dial SIP/1000,,20 This generally makes the context/exten fields less than useful. It isn't hard to preserve these values in the CDR state machine; however, we need to have something that informs us when a channel is executing a subroutine. Prior to this patch, there isn't anything that does this. This patch solves this problem by adding a new channel flag, AST_FLAG_SUBROUTINE_EXEC. This flag is set on a channel when it executes a Macro or a GoSub. The CDR engine looks for this value when updating a Party A snapshot; if the flag is present, we don't override the context/exten on the main CDR object. In a funny quirk, executing a hangup handler must *not* abide by this logic, as the endbeforehexten logic assumes that the user wants to see data that occurs in hangup logic, which includes those subroutines. Since those execute outside of a typical Dial operation (and will typically have their own dedicated CDR anyway), this is unlikely to cause any heartburn. Review: https://reviewboard.asterisk.org/r/3962/ ASTERISK-24254 #close Reported by: tm1000, Tony Lewis Tested by: Tony Lewis ........ Merged revisions 422718 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422719 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422720 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 16:56 +0000 [4499eb05d8] Matt Jordan * main/cdr: Fix crash/memory consumption in CDRs in multi-party bridge scenarios This patch fixes an issue where CDRs would get stuck generating an infinite number of CDRs, eventually crashing Asterisk (and consuming a lot of memory along the way). When a channel enters into a multi-party bridge, the CDR engine creates mappings of each participant to each other participant, picking the 'A' party as it goes. So, if we have four channels in a multi-party bridge (Alice, Bob, Charlie, Denise), we would have something like: Alice => Bob Alice => Charlie Alice => Denise Bob => Charlie Bob => Denise Charlie => Denise This works fine when participants enter the bridge a single time. When a participant leaves a bridge, the CDRs for that channel are transitioned to a finalized state. The bug occurs if Bob rejoins. When the CDR engine creates mappings between the channels, it walks through all the participants currently in the bridge, and realizes that no one in the bridge can create a CDR with the channel (Bob). As such it creates a new CDR for the candidate and appends it to that candidate's chain. Unfortunately, on this particular code path, it doesn't stop traversing the candidate's chain. Since we just added ourselves to the chain, this causes the loop to keep going, constantly adding new CDRs. This patch makes it so the engine bails when it creates a CDR match in this case. Review: https://reviewboard.asterisk.org/r/3964/ ASTERISK-24241 #close Reported by: Deepak Singh Rawat Tested by: Deepak Singh Rawat ASTERISK-24208 Reported by: Frankie Chin ........ Merged revisions 422715 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422716 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422717 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 15:38 +0000 [025bd1bf3f] Richard Mudgett * func_channel.c: Add missing locking to some CHANNEL() requests. * The CHANNEL() audionativeformat, videonativeformat, audioreadformat, and audiowriteformat now need locking since the media format rework when accessing the channel's format pointers. * Increased the buffer size for CHANNEL() audionativeformat and videonativeformat output strings since the allow=all can be a lengthy list. * Tweaked the CHANNEL() XML documentation for secure_bridge_signaling, secure_bridge_media, and state. * Ensured the output buffer is initialized for secure_bridge_signaling and secure_bridge_media. * Made use the locked_copy_string() macro instead of inlining it for trace and checkhangup. ........ Merged revisions 422700 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422701 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 15:22 +0000 [85878c4dd8] Jonathan Rose * Dial API: Add a dial option to indicate the dialed channel will replace dialer Adds an option to the dial API that marks an outgoing dial as replacing the dialing channel for the purpose of propagating accountcode. When it is used, AST_CHANNEL_REQUESTOR_REPLACEMENT is used instead of AST_CHANNEL_REQUESTOR_BRIDGE_PEER when setting accountcodes on the involved channels with ast_channel_req_accountcodes. Review: https://reviewboard.asterisk.org/r/3968/ ........ Merged revisions 422684 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422697 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 14:39 +0000 [e19017fc00] Jonathan Rose * Call IDs: Fix appearance of call ID in core show channels when NULL NULL call IDs were meant to appear as '(none)' but instead were showing the contents of an uninitialized character buffer. ASTERISK-24223 Review: https://reviewboard.asterisk.org/r/3979/ ........ Merged revisions 422664 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422665 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422683 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 12:45 +0000 [5a1de68b9a] Richard Mudgett * devicestate.c: Minor tweaks * In ast_state_chan2dev() use ARRAY_LEN() instead of a sentinel value in chan2dev[]. * Fix some comments in chan_iax2.c. ........ Merged revisions 422661 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422663 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-05 08:29 +0000 [2362d88a18] Kinsey Moore * Menuselect: Fix incorrect enabling on failed deps This corrects a situation where menuselect can incorrectly enable a module by default that has defaultenabled set to "no" and has failed/non-selected dependencies. The bug is due to an inverted test when checking for whether the given module should be set to enabled by default on load. Review: https://reviewboard.asterisk.org/r/3975/ Reported by: John Bigelow ........ Merged revisions 422646 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422647 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-04 17:05 +0000 [af75e45da1] Jonathan Rose * Manager: Require read permission for SYSTEM in order to send FullyBooted Review: https://reviewboard.asterisk.org/r/3969/ ........ Merged revisions 422584 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422625 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422626 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422631 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422632 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-03 09:05 +0000 [3cd36d0e10] Joshua Colp * res_pjsip_transport_websocket: Fix crash when the Contact header is not a URI. The code for changing the Contact header wrongly assumed that the Contact would always contain a URI. This is incorrect. ASTERISK-24271 Reported by: Dafi Ni ........ Merged revisions 422557 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422558 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422559 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-02 15:29 +0000 [1b64f353f1] Mark Michelson * Resolve race condition where channels enter dialplan application before media has been negotiated. Testsuite tests will occasionally fail because on reception of a 200 OK SIP response, an AST_CONTROL_ANSWER frame is queued prior to when media has finished being negotiated. This is because session supplements are called into before PJSIP's inv_session code has told us that media has been updated. Sometimes the queued answer frame is handled by the PBX thread before the ensuing media negotiations occur, causing a test failure. As it turns out, there is another place that session supplements could be called into, which is after media has finished getting negotiated. What this commit introduces is a means for session supplements to indicate when they wish to be called into when handling an incoming SIP response. By default, all session supplements will be run at the same point that they were prior to this commit. However, session supplements may indicate that they wish to be handled earlier than normal on redirects, or they may indicate they wish to be handled after media has been negotiated. In this changeset, two session supplements have been updated to indicate a preference for when they should be run: res_pjsip_diversion executes before handling redirection in order to get information from the Diversion header, and chan_pjsip now handles responses to INVITEs after media negotiation to fix the race condition mentioned previously. ASTERISK-24212 #close Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/3930 ........ Merged revisions 422536 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422542 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422543 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-01 10:25 +0000 [897cbf6a4f] Matt Jordan * main/cli: Do not attempt to show CDR data for internal channels Internal channels don't have CDRs. Querying the CDR engine for their variables will make it cranky. ........ Merged revisions 422506 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422507 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422524 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-09-01 09:15 +0000 [df5dbbd878] Matt Jordan * res_stasis: Don't play MoH to channels by default when added to holding bridges When ARI manipulates a bridge, it generally doesn't care what the mixing technology is. Operations on a bridge initiated through ARI should perform their action in generally the same way, regardless of the bridge's mixing technology. While the mixing technology may determine how media flows to channels, the actual operations on a bridge themselves should be the same. Currently, this isn't the case with holding bridges. When a channel joins without a role, MoH is started on that channel automatically. Subsequent bridge operations that would stop MoH would fail (as there is no Announcer channel playing MoH to the bridge). Starting MoH on the bridge will also create two MoH streams: one from the MoH being played on the participant channel, and one from the announcer channel. From the perspective of ARI users, this is counter-intuitive - I would not expect MoH to be started for me. The mixing technology determines how media is shared between participants, not the application experience. This patch does the following: * The Stasis bridge class now inspects channels as they are going into a bridge. If the bridge has a holding capability, and the channel has no roles, we give it a participant role and mark the default behaviour to have no entertainment. This allows addChannel operations to continue to set a participant role with an entertainment option if it felt like it (or could do it). * The music on hold channel is now Stasis approved (tm) Review: https://reviewboard.asterisk.org/r/3929/ ASTERISK-24264 #close Reported by: Samuel Galarneau Tested by: Samuel Galarneau ........ Merged revisions 422503 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422504 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422505 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-30 12:33 +0000 [5aefecd81e] George Joseph * confbridge: Add Duration to ConfbridgeList event The ConfbridgeList event doesn't include how long the user has been a member of the conference. This patch adds Duration (seconds) which is based on user->chan->answertime. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3955/ ........ Merged revisions 422444 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422445 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422446 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-30 12:24 +0000 [59d4dbd3d0] George Joseph * manager: Make WaitEvent action respect eventfilters A WaitEvent issued via an http session isn't respecting eventfilters defined for the user. I just added a match_filter to the predicate that controls astman_append. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3958/ ........ Merged revisions 422439 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422440 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422441 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422442 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422443 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-29 14:40 +0000 [664f83a03b] Jeremy Laine (License 6561) * doc: Add a manpage for the smsq utility This patch adds a manpage for the smsq utility. Note that this is one of the patches the Debian distro applies for the Asterisk project, as per ASTERISK-24191. Review: https://reviewboard.asterisk.org/r/3895/ ASTERISK-24171 #close Reported by: Jeremy Laine patches: smsq.8 uploaded by Jeremy Laine (License 6561) ........ Merged revisions 422376 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422377 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422378 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422379 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422380 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-29 14:35 +0000 [81598fa082] Jeremy Laine (License 6561) * doc: Add a manpage for the aelparse utility This patch adds a manpage for the aelparse utility. Note that this is one of the patches the Debian distro applies for the Asterisk project, as per ASTERISK-24191. Review: https://reviewboard.asterisk.org/r/3896/ ASTERISK-24171 #close Reported by: Jeremy Laine patches: aelparse.8 uploaded by Jeremy Laine (License 6561) ........ Merged revisions 422371 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422372 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422373 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422374 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422375 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-29 13:46 +0000 [2df2d785b7] Scott Griepentrog * The assertion that peer was not found on final event message was being triggered on configuration reload. This patch changes that case to just return instead. Review: https://reviewboard.asterisk.org/r/3953/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422358 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-28 16:54 +0000 [3194892ea2] Matt Jordan * LICENSE: Clarify language in Asterisk's LICENSE to allow for linking to UniMRCP The UniMRCP project distributes Asterisk modules that integrate Asterisk with UniMRCP, and other Asterisk users use the UniMRCP library as well. Unfortunately, the UniMRCP license is Apache 2.0, which per the Free Software Foundation, is not a compatible license with the GPLv2. "Please note that this license is not compatible with GPL version 2, because it has some requirements that are not in that GPL version. These include certain patent termination and indemnification provisions. The patent termination provision is a good thing, which is why we recommend the Apache 2.0 license for substantial programs over other lax permissive licenses." On the other hand, UniMRCP is a great project and we'd like to let people use it with Asterisk. This patch updates the LICENSE text to allow users to link Asterisk with UniMRCP and distribute the resulting binaries. ........ Merged revisions 422293 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422294 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422295 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422296 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422297 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-28 15:31 +0000 [c5916fb39f] Michael L. Young (license 5026) * chan_iax2: Fix Dynamic IAX2 Registrations After Temporary DNS Failure The reporter on the issue found some issues when upgrading from version 10 to 11 on 55 hosts. Two situations that can occur with dynamic registrations. 1. With dnsmgr disabled, if the host is not resolvable we are not trying to resolve the host again when it is time to attempt to register again. This results in never registering to the host. 2. With dnsmgr enabled, when the host is temporarily not resolvable the address is set to 0.0.0.0:0 and then when the host is resolvable the port is not being restored and stays set to 0. This patch resolves these two issues by: * Storing the hostname so that it can be used for resolving with DNS. * Resolve the hostname on the next scheduled attempt to register. * Storing the port used to reach the host so that when the hostname is resolvable again, we can set the port again if the port is still unset after looking up the host. ASTERISK-23767 #close Reported by: David Herselman Tested by: David Herselman, Michael L. Young Patches: asterisk-23767-dns_reg_retry_and_set_port_11_v3.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3856/ ........ Merged revisions 422274 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422275 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422276 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422277 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-28 12:29 +0000 [4e750a26fd] Richard Mudgett * Added ConfBridge AMI event note to UPGRADE.txt. ........ Merged revisions 422255 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422256 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422257 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-28 11:06 +0000 [ef28cc0d43] Paul Belanger * chan_sip.c: Add 'rtpbindaddr' setting Users now have the ability to bind the rtpengine instance to a specific IP address. For example, you want chan_sip (call control) on eth0 but rtp (media) on eth1. ASTERISK-24280 #close Reported by: Paul Belanger Tested by: Paul Belanger Review: https://reviewboard.asterisk.org/r/3952/ Patches: rtpengine.diff uploaded by Paul Belanger git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422241 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-28 10:50 +0000 [327d67270f] Mark Michelson * Fix bug that did not allow for multiple batched RLS notifications to be sent. A misunderstanding of how the scheduler worked caused further batched notifications beyond the first not to get scheduled. Now we reset our scheduler ID to -1 after the batched notification is sent. This way, further notifications can be scheduled when they arise. ........ Merged revisions 422239 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422240 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-27 19:44 +0000 [94e1b4a8a4] Richard Mudgett * res/res_pjsip/pjsip_options.c: Eliminate excessive RAII_VAR usage. * Fix off nominal ref leak in find_or_create_contact_status(). * Add missing NULL check of status in update_contact_status() and init_start_time(). ........ Merged revisions 422214 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422215 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422216 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-27 19:16 +0000 [4728c05957] Richard Mudgett * sched: Fix typo and whitespace change. ........ Merged revisions 422200 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422201 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-27 12:30 +0000 [7c1a22fba7] George Joseph * confbridge: Add 'Admin' param to join, leave, mute, unmute and talking events Currently there's no way to tell if a user is an admin or not when receiving the join, leave, mute, unmute and talking events. This patch adds that capability. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3950/ ........ Merged revisions 422176 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422177 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422178 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-27 10:39 +0000 [bf85018107] Kinsey Moore * CallerID: Fix parsing of malformed callerid This allows the callerid parsing function to handle malformed input strings and strings containing escaped and unescaped double quotes. This also adds a unittest to cover many of the cases where the parsing algorithm previously failed. Review: https://reviewboard.asterisk.org/r/3923/ Review: https://reviewboard.asterisk.org/r/3933/ ........ Merged revisions 422112 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422113 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422114 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422154 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422158 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-26 18:30 +0000 [d199536a04] George Joseph * confbridge: Make kick, mute and unmute handle channel targets consistently. Kick, mute and unmute were a little inconsistent in their handling of channel targets. This patch cleans that up by insuring they all handle the 'all' target consistently and adds the 'participants' target which acts on non-admins. Documentation for kick was also cleaned up as it never supported partial channel names. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3944/ ........ Merged revisions 422090 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422091 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422092 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-26 17:14 +0000 [c5ab4adf17] Mark Michelson * Fix race condition in the scheduler when deleting a running entry. When scheduled tasks run, they are removed from the heap (or hashtab). When a scheduled task is deleted, if the task can't be found in the heap (or hashtab), an assertion is triggered. If DO_CRASH is enabled, this assertion causes a crash. The problem is, sometimes it just so happens that someone attempts to delete a scheduled task at the time that it is running, leading to a crash. This change corrects the issue by tracking which task is currently running. If that task is attempted to be deleted, then we mark the task, and then wait for the task to complete. This way, we can be sure to coordinate task deletion and memory freeing. ASTERISK-24212 Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/3927 ........ Merged revisions 422070 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 422071 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422072 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-25 11:45 +0000 [fefa6fba82] Richard Mudgett * res_musiconhold.c: Release any format refs before memset(). * Clear the channel music_state pointer before destroying the music_state object for safety. ........ Merged revisions 422037 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422038 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-25 11:16 +0000 [2b19d94a71] Richard Mudgett * res_musiconhold: Fix MOH restarting where it left off from the last hold. Restore code removed by https://reviewboard.asterisk.org/r/3536/ that introduced a regression that prevents MOH from restarting were it left off the last time. ASTERISK-24019 #close Reported by: Jason Richards Patches: jira_asterisk_24019_v1.8.patch (license #5621) patch uploaded by rmudgett Review: https://reviewboard.asterisk.org/r/3928/ ........ Merged revisions 421976 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421977 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421978 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421979 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421980 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-24 14:37 +0000 [497a92d079] Joshua Colp * res_pjsip_transport_websocket: Attach the Websocket module on outgoing INVITEs. In order to alter the Contact header on in-dialog requests and responses the Websocket module must be attached on outgoing INVITEs. The Contact header is modified so that the PJSIP transport layer can find and use the existing Websocket connection based on the source IP address, port, and transport. ASTERISK-24143 #close Reported by: Aleksei Kulakov ........ Merged revisions 421955 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421956 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421957 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-24 14:21 +0000 [477e2e6edb] Joshua Colp * res_pjsip_transport_websocket: Fix a progressive memory growth. The packet structure used to receive messages was using the transport pool. This meant that for each parsing the pool would grow accordingly. Since memory can not be reclaimed without resetting it this would cause the memory pool to grow and grow. This change uses a specific memory pool for the packet structure and resets it to a fresh state after the message has been received and handled. ........ Merged revisions 421939 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421945 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-24 13:54 +0000 [2c0cbf8e64] Joshua Colp * res_pjsip_transport_websocket: Ensure secure Websocket clients can be called. This change enforces the transport in the Contact header for Websocket clients. Previously a client may provide a transport of 'ws' when it is actually using a transport of 'wss'. This would cause outgoing calls to fail as the existing connection could not be found. ........ Merged revisions 421931 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421932 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421933 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-24 12:22 +0000 [cee660dadf] Badalian Vyacheslav (license 5249) * chan_sip: Use the server reflexive ICE candidate RTCP port as provided. This code originally worked around an issue within res_rtp_asterisk itself. The wrong socket was being used for the STUN check for RTCP, causing the port to be the same as RTP. This was subsequently fixed and the RTCP port provided for the ICE candidate is correct and does not need to be incremented. ASTERISK-23997 #close Reported by: Badalian Vyacheslav Patches: plus1.diff submitted by Badalian Vyacheslav (license 5249) ........ Merged revisions 421909 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421910 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421911 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421912 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-22 11:56 +0000 [dcfffce66d] Mark Michelson * Fix a locking inversion in MixMonitor. We need to unlock the audiohook before trying to lock the channel, since the correct locking order is channel then audiohook. ........ Merged revisions 421882 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421883 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-22 11:52 +0000 [33835e17a0] Jonathan Rose * ARI: Fix a crash caused by hanging during playback to a channel in a bridge ASTERISK-24147 #close Reported by: Edvin Vidmar Review: https://reviewboard.asterisk.org/r/3908/ ........ Merged revisions 421879 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421880 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421881 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-22 09:09 +0000 [1498ae0830] Matt Jordan * main/message: Add a new-line to a DEBUG message ........ Merged revisions 421859 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421860 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421861 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 17:09 +0000 [f8c4fc1121] Richard Mudgett * res_musiconhold.c: Remove obsolete REF_DEBUG code. Remove unneeded code that writes to the wrong file location in an obsolete format. ........ Merged revisions 421799 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421800 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421801 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421802 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421803 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 16:43 +0000 [644e693645] Mark Michelson * Switch from hostname to an IP address in the SDP origin line. Using the hostname in the SDP origin line may not satisfy the requirement of RFC 4566 that we use a FQDN or IP address. This change has us use the same information from the SDP connection line if possible. If not possible, we'll use the configured media address. And if that's not possible, we use the result of a PJLIB call to get the IP address of ourself. ASTERISK-23994 #close Reported by Private Name Review: https://reviewboard.asterisk.org/r/3925 ........ Merged revisions 421796 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421797 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421798 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 16:37 +0000 [56a1d4930a] Mark Michelson * Ensure after-bridge behavior is correct when moving from Stasis to a non-Stasis bridge. Because of the departable state of channels that enter Stasis bridges, Stasis has to take responsibility for directing the channel to its intended after-bridge destination if the channel moves from a Stasis bridge to a non-Stasis bridge. This change ensures that when such a move occurs, when the channel leaves the bridging system, any after bridge gotos are honored. Review: https://reviewboard.asterisk.org/r/3920 ........ Merged revisions 421792 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421794 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421795 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 16:35 +0000 [4946981646] Jonathan Rose (license 6182) * res_musiconhold: Fix reference leaks caused when reloading with REF_DEBUG set Due to a faulty function for debugging reference decrementing, it was possible to reduce the refcount on the wrong object if two moh classes of the same name were in the moh class container. (closes issue ASTERISK-22252) Reported by: Walter Doekes Patches: 18_moh_debug_ref_patch.diff Uploaded by Jonathan Rose (license 6182) ........ Merged revisions 398937 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421777 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421779 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421788 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421793 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 16:28 +0000 [12d34bb12f] Mark Michelson * Let's try checking the name and number, instead of the name twice. ........ Merged revisions 421789 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421790 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421791 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 16:19 +0000 [2150daf748] Mark Michelson * Improve consistency of party ID privacy usage. Prior to this change, the Remote-Party-ID header took the position of "If caller name and number are not explicitly allowed, then they are private" and P-Asserted-Identity took the position of "Caller name and number are only private if marked explicitly so" Now both mechanisms of conveying party identification use the former approach. ........ Merged revisions 421778 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421783 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421785 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 12:35 +0000 [77ddc5b713] Elazar Broad (License 5835) * chan_sip: Don't use port derived from fromdomain if it isn't set If a user does not provide a port in the fromdomain setting, chan_sip will set the fromdomainport to STANDARD_SIP_PORT (5060). The fromdomainport value will then get used unilaterally in certain places. This causes issues with TLS, where the default port is expected to be 5061. This patch modifies chan_sip such that fromdomainport is only used if it is not the standard SIP port; otherwise, the port from the SIP pvt's recorded self IP address is used. Review: https://reviewboard.asterisk.org/r/3893/ ASTERISK-24178 #close Reported by: Elazar Broad patches: fromdomainport_fix.diff uploaded by Elazar Broad (License 5835) ........ Merged revisions 421717 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421718 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421719 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421720 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421721 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 10:25 +0000 [f3a525e9a6] Matt Jordan * ARI: Fix implicit answer when playback is initiated on unanswered channel When issuing a POST /channels/{channel_id}/play on a channel that is not yet answered, ARI is supposed to: * Queue up an AST_CONTROL_PROGRESS on the channel * Start up the playback of the media Instead, we sneak an answer on the channel right before starting playing media. This is due to ARI's usage of control_streamfile. This function implicitly answers the channel (and doesn't give ARI the option to stop it). The answering of the channel here is probably unnecessary: * app_voicemail, by far the biggest consumer of this function, always answers the channels anyway * control stream file (in res_agi) and ControlPlayback probably shouldn't be implicitly answering the channel. Answering should not be tied directly to playing back media. As it turns out, the answering of the channel here is pretty old: 356042 twilson if (ast_channel_state(chan) != AST_STATE_UP) { 3087 anthm res = ast_answer(chan); 180259 tilghman } (As in, ancient?) Note that others ran into this problem and commented about it on various mailing lists. Review: https://reviewboard.asterisk.org/r/3907/ ASTERISK-24229 #close Reported by: Matt Jordan ........ Merged revisions 421695 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421696 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421699 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 09:52 +0000 [085d5a2629] Shaun Ruffell (License 5417) * Clean up files that do not end with newlines Trivial patch to add new lines to several files missing them. This fixes warnings when compiling with gcc 4.1.2 on CentOS 5. ASTERISK-24245 #close Reported by: Shaun Ruffell patches: 0002-Trivial-addition-of-newlines-at-end-of-three-files.patch uploaded by Shaun Ruffell (License 5417) ........ Merged revisions 421677 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421678 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421679 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-21 09:42 +0000 [da91946df7] Shaun Ruffell (License 5417) * uri: Quiet warning about type qualifiers ignored on function return type This patch fixes gcc warnings that occur due to the type qualifier 'const' being ignored on a return type of int. ASTERISK-24246 #close Reported by: Shaun Ruffell patches: 0001-main-uri-Quiet-warning-about-ignored-attribute-on-re.patch uploaded by Shaun Ruffell (License 5417) ........ Merged revisions 421675 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421676 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 17:52 +0000 [b7f98c3da4] Richard Mudgett * chan_pjsip: Update media translation paths when new SDP negotiated. On a SIP reinvite that changes media strams, the PJSIP channel driver was flooding the log with "Asked to transmit frame type %s, while native formats is %s" warnings. * Fixes PJSIP not setting up translation paths when the formats change on a reinvite. AFS-63 was effectively reintroduced because of the media formats work. res_pjsip_sdp_rtp.c:set_caps() * Improved the unexpected frame format WARNING message to include more information. * Added protective locking while altering formats on a channel. Reworked set_format() to simplify and protect the formats under manipulation. * Restored some code that got lost in the media_formats work. (channel.c:set_format() and res_pjsip_sdp_rtp.c:set_caps()) AFS-137 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3906/ ........ Merged revisions 421645 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421646 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 17:23 +0000 [4672c139dd] Richard Mudgett * cli.c: Fix tab completion of "module load" when MALLOC_DEBUG is enabled. filename_completion_function() returns memory that was not allocated by the MALLOC_DEBUG allocation tracker so the memory must be freed by ast_std_free(). ........ Merged revisions 421600 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421602 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421608 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421616 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421623 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 15:41 +0000 [49f8bd4ad4] Mark Michelson * Set the role for inbound subscriptions correctly. This was causing the AMI show_subscriptions test in the testsuite to fail since all subscriptions were being seen as subscribers instead of notifiers. ........ Merged revisions 421585 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421586 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 15:04 +0000 [d0640ad7df] Mark Michelson * Move evaluation of set_var options in pjsip to the end of channel initialization. This allows for set_var to override certain defaults such as caller ID and codec values. This also fixes a test suite regression. The "set_var" test suite test attempted to use set_var to override caller ID, but a recent change caused that to no longer work. ........ Merged revisions 421565 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421566 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421567 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 08:06 +0000 [36f4bff943] Kinsey Moore * Stasis: Add information to blind transfer event When a blind transfer occurs that is forced to create a local channel pair to satisfy the transfer request, information about the local channel pair is not published. This adds a field to describe that channel to the blind transfer message struct so that this information is conveyed properly to consumers of the blind transfer message. This also fixes a bug in which Stasis() was unable to properly identify the channel that was replacing an existing Stasis-controlled channel due to a blind transfer. Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3921/ ........ Merged revisions 421537 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421538 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421539 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-20 07:39 +0000 [01f1ff1f77] Kinsey Moore * AMI: Add AllVariables parameter to Status This adds the AllVariables parameter to the Status AMI action such that if defined and set to "true", all channel variables will be reported in the subsequent Status event(s). This parameter does not negate the functionality of the "Variables" parameter so that global variables and dialplan functions can be requested. Review: https://reviewboard.asterisk.org/r/3915/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421534 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-19 15:28 +0000 [76290adf50] Mark Michelson * Alter documentation for callerid_privacy to use correct values. ........ Merged revisions 421485 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421488 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421490 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-19 14:55 +0000 [28a89e7685] Mark Michelson * Fix compilation error on certain versions of GCC. ........ Merged revisions 421447 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421448 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421449 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-19 14:43 +0000 [a85a483fcd] Kinsey Moore * AMI Docs: Fix Status channel parameter optionality ........ Merged revisions 421442 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421443 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421444 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421445 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421446 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-19 11:36 +0000 [222b5cd036] Krandon Bruse (license 6631) * ARI: Fix a bug where /channels/{channelID}/continue doesn't execute PBX If /channels/{channelID}/continue is called on a channel that was originated without a PBX (such as the ARI command POST channel with a stasis application argument), the channel will not start dialplan execution. This patch will now run the PBX out of the stasis execution if the channel doesn't currently have an active PBX upon continuing. ASTERISK-24043 #close Reported by: Krandon Bruse Review: https://reviewboard.asterisk.org/r/3917/ Patches: stasis-continue.diff submitted by Krandon Bruse (license 6631) ........ Merged revisions 421416 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421423 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-19 11:16 +0000 [83a9b91da9] Richard Mudgett * chan_pjsip: Fix attended transfer connected line name update. A calls B B answers B SIP attended transfers to C C answers, B and C can see each other's connected line information B completes the transfer A has number but no name connected line information about C while C has the full information about A I examined the incoming and outgoing party id information handling of chan_pjsip and found several issues: * Fixed ast_sip_session_create_outgoing() not setting up the configured endpoint id as the new channel's caller id. This is why party A got default connected line information. * Made update_initial_connected_line() use the channel's CALLERID(id) information. The core, app_dial, or predial routine may have filled in or changed the endpoint caller id information. * Fixed chan_pjsip_new() not setting the full party id information available on the caller id and ANI party id. This includes the configured callerid_tag string and other party id fields. * Fixed accessing channel party id information without the channel lock held. * Fixed using the effective connected line id without doing a deep copy outside of holding the channel lock. Shallow copy string pointers can become stale if the channel lock is not held. * Made queue_connected_line_update() also update the channel's CALLERID(id) information. Moving the channel to another bridge would need the information there for the new bridge peer. * Fixed off nominal memory leak in update_incoming_connected_line(). * Added pjsip.conf callerid_tag string to party id information from enabled trust_inbound endpoint in caller_id_incoming_request(). AFS-98 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3913/ ........ Merged revisions 421400 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421403 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421404 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-18 16:18 +0000 [c4c9d4ad6c] Damien Wedhorn * Skinny: Fixup compile warning for non dev-mode. ........ Merged revisions 421376 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421380 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-18 15:20 +0000 [1de8b8035e] George Joseph * func_config: Change 'Not Found' message from ERROR to DEBUG When you call the CONFIG dialplan function with the name of a variable that doesn't exist in the target context you get an ERROR. This does nothing but clutter up the logs with messages that may be perfectly acceptable. Just because a variable wasn't in the context doesn't mean it's an error. Maybei t's optional or just needs to be defaulted or ignored. This patch changes the log level from ERROR to DEBUG. If a dialplan developer wants to debug their dialplan they still canby setting the console debug level as needed. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3919/ ........ Merged revisions 421327 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421328 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421329 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421337 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421341 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 20:14 +0000 [bb494067a5] Matt Jordan * Multiple revisions 421311-421312 ........ r421311 | mjordan | 2014-08-17 20:11:28 -0500 (Sun, 17 Aug 2014) | 9 lines res/ari/resource_channels: Don't return allocation failure on failed function If a function fails to execute, it is most likely due to one of two reasons: (1) The function doesn't exist or can't be read from (2) The function is dangerous and is restricted based on the user's permissions Currently we return allocation failure, which is incorrect. This updates the reason code to more accurately reflect why the request failed. ASTERISK-24215 ........ r421312 | mjordan | 2014-08-17 20:13:41 -0500 (Sun, 17 Aug 2014) | 4 lines res/ari/resource_channels: Fix compilation issue Forgot a parameter. Whoops. ........ Merged revisions 421311-421312 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421313 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 19:57 +0000 [ba5d5da60b] Matt Jordan (License #6283) * Improve call forwarding reporting, especially with regards to ARI. This patch addresses a few issues: 1) The order of Dial events have been changed when performing a call forward. The order has now been altered to 1) Dial begins dialing channel A. 2) When A forwards the call to B, we issue the dial end event to channel A, indicating the dial is being canceled due to a forward to B. 3) When the call to channel B occurs, we then issue a new dial begin to channel B. 2) Call forwards are now reported on the calling channel, not the peer channel. 3) AMI DialEnd events have been altered to display the extension the call is being forwarded to when relevant. 4) You can now get the values of channel variables for channels that are not currently in the Stasis application. This brings the retrieval of channel variables more in line with the rest of channel read operations since they may be performed on channels not in Stasis. ASTERISK-24134 #close Reported by Matt Jordan ASTERISK-24138 #close Reported by Matt Jordan Patches: forward-shenanigans.diff uploaded by Matt Jordan (License #6283) Review: https://reviewboard.asterisk.org/r/3899 ........ Merged revisions 420794 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421310 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 18:29 +0000 [6525f374db] Matt Jordan * apps/app_meetme: Fix crash when publishing MeetMe messages with no channel The same function, meetme_stasis_generate_msg, handles creating and publishing Stasis message both when there are channels in the MeetMe conference and when there are no channels in the conference. When the performance improvement was made to use cached snapshots, this created a situation where Asterisk would crash: obtaining a cached snapshot is not NULL tolerant. This patch restores the previous implementation, which used a NULL safe set of routines to produce a blob containing the channel snapshot (if available) and information about the MeetMe conference. ASTERISK-24234 #close Reported by: Shaun Ruffell Tested by: Shaun Ruffell ........ Merged revisions 421270 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421273 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421276 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 18:10 +0000 [44fc6ea6ff] Richard Mudgett (License 5621) * apps/app_dial: Fix Dial 'z' option The 'z' option is supposed to disable the dial timeout in the case of a call forward. Unfortunately, the wrong timeout timer was passed to the do_forward function, resulting in the option not working. ASTERISK-24225 #close Reported by: dimitripietro Tested by: dimitripietro patches: jira_asterisk_24225_v1.8.patch uploaded by rmudgett (License 5621) jira_asterisk_24225_v11.patch uploaded by rmudgett (License 5621) ........ Merged revisions 421232 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421233 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421234 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421235 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421236 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 17:35 +0000 [98ca5c0b5f] cloos (License 5956) * configure: Undefine FORTIFY_SOURCE prior to defining it for patched gcc Some distributions of Linux patch gcc to define FORTIFY_SOURCE when gcc is executed with optimization. This "help" unfortunately results in re-definition warnings when FORTIFY_SOURCE is later defined in Asterisk's build system. This patch undefines FORTIFY_SOURCE prior to defining it to prevent this warning. Review: https://reviewboard.asterisk.org/r/3912/ ASTERISK-24032 #close Reported by: Kilburn Tested by: Kilburn, wdoekes patches: 1.8.diff uploaded by cloos (License 5956) 10.diff uploaded by cloos (License 5956) 11.diff uploaded by cloos (License 5956) 12.diff uploaded by cloos (License 5956) 13.diff uploaded by cloos (License 5956) ........ Merged revisions 421227 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421228 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421229 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421230 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421231 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-17 11:11 +0000 [952da298ce] Joshua Colp * res_http_websocket: Include query parameters in client connection requests. Review: https://reviewboard.asterisk.org/r/3914/ ........ Merged revisions 421210 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421211 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-15 12:26 +0000 [9b658b7c60] Jonathan Rose * Bridging: Fix a behavioral change when checking if a channel is leaving a bridge r420934 introduced some failures in the test suite. Upon investigating, it was discovered that differences in the way we were evaluating whether a channel was in the process of leaving a bridge were causing some reinvites not to occur (mostly reinvites back to Asterisk when ending a call). This patch fixes that behavioral change. ASTERISK-24027 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3910/ ........ Merged revisions 421186 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421187 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421195 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-15 10:50 +0000 [0d0a616e1a] Matt Jordan * app_voicemail/app: Remove test events that were duplicated by r421059 Moving the test event raised when a file is played back (which occurred in r421059) broke the ever loving snot out of the voicemail tests. This caused duplicate test events to get raised, as app_voicemail and main/app were raising events prior to call ast_streamfile. The voicemail tests did not enjoy getting multiple events. Since raising the playback event in ast_streamfile is far more useful to the vast majority of tests, this patch keeps the call there and simply removes the extraneous calls that duplicated the event. ........ Merged revisions 421125 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421164 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421165 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421166 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421167 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-14 16:16 +0000 [980e49614c] Matt Jordan * res/res_hep_rtcp: Remove dependency on PJSIP The res_hep_rtcp module was incorrectly including . This didn't need to be included, as the module does not using PJPROJECT any fashion. Unfortunately, because res_hep_rtcp did not include pjsip in its MODULEINFO as a dependency, this also meant that res_hep_rtcp will fail to compile on a system without PJPROJECT. This patch removes the include. Thanks to Damien Wedhorn for pointing this out in #asterisk-dev. ASTERISK-24236 #close Reported by: Damien Wedhorn, Matt Jordan Tested by: Damien Wedhorn ........ Merged revisions 421064 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421065 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421066 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-14 15:59 +0000 [513981c89d] Matt Jordan * main/file: Move test event to emit PLAYBACK event more consistently This is being done in advance of the test for ASTERISK-23953 ........ Merged revisions 421059 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421060 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421061 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421062 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421063 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-14 14:21 +0000 [0b11c48522] Matt Jordan * cel: Make sure channels in extra fields include their unique IDs as well CEL typically tracks a lot of information using the unique ID of the channel. This is typically needed due to tying events together using the linked ID of the various channels involved in a "call", which is derived from the channel ID of the oldest channel involved in a bridge (or in the case of a Dial, the parent channel). Previously, we had updated the extra fields to include the involved channel names, but forgot to put in the unique ID. This patch corrects that error. ........ Merged revisions 421037 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421042 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421043 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-14 11:33 +0000 [79c5c08db9] Richard Mudgett * ARI: Originate to app local channel subscription code optimization. Reduce the scope of local_peer and only get it if the ARI originate is subscribing to the channels. Review: https://reviewboard.asterisk.org/r/3905/ ........ Merged revisions 421009 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421010 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421012 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-14 11:01 +0000 [e4b32731b9] Richard Mudgett * channel_internal_api.c: Replace some code with ao2_replace(). Use ao2_replace() instead of ao2_cleanup(); ao2_bump(). ao2_replace() has the advantange of not altering the ref count if the replaced pointer is the same. Review: https://reviewboard.asterisk.org/r/3904/ ........ Merged revisions 420992 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420993 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-13 12:05 +0000 [dd41d0ff01] Richard Mudgett * res_pjsip_send_to_voicemail.c: Fix svn file properties. ........ Merged revisions 420956 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420957 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420958 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-13 11:56 +0000 [6aa510b41f] Kinsey Moore * PJSIP: Prevent crash no-URI contacts This prevents a crash from occurring when a contact with no URI is used for the creation of an outbound out-of-dialog request with no associated endpoint. ........ Merged revisions 420949 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420950 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420953 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-13 11:24 +0000 [d4695774e7] Jonathan Rose * Bridges: Fix feature interruption/unintended kick caused by external actions If a manager or CLI user attached a mixmonitor to a call running a dynamic bridge feature while in a bridge, the feature would be interrupted and the channel would be forcibly kicked out of the bridge (usually ending the call during a simple 1 to 1 call). This would also occur during any similar action that could set the unbridge soft hangup flag, so the fix for this was to remove unbridge from the soft hangup flags and make it a separate thing all together. ASTERISK-24027 #close Reported by: mjordan Review: https://reviewboard.asterisk.org/r/3900/ ........ Merged revisions 420934 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420940 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420947 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-13 09:31 +0000 [6a6702bb0f] Kinsey Moore * AMI: Improve documentation for Status action ........ Merged revisions 420919 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420921 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-13 02:54 +0000 [52c94d3af4] Walter Doekes * logger: Don't store verbose-magic in the log files. In r399267, the verbose2magic stuff was edited. This time it results in magic characters in the log files for multiline messages. In trunk (and 13) this was fixed by the "stripping" of those characters from multiline messages (in r414798). This fix is altered to actually strip the characters and not replace them with blanks. Review: https://reviewboard.asterisk.org/r/3901/ Review: https://reviewboard.asterisk.org/r/3902/ ........ Merged revisions 420897 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420898 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420899 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420900 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-12 18:45 +0000 [969982b878] Richard Mudgett * chan_sip: Fix type mismatch when the format is changed. Symptom is most likely an invalid ao2 object bad magic number message or a less likely crash. ........ Merged revisions 420881 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420882 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-12 18:36 +0000 [8526d967c9] Richard Mudgett * res_stasis_snoop.c: Fix off nominial exit path leaving Snoop channel locked and not hungup. * Made use ast_copy_string() instead of strcpy() for snoop uniqueid for safety. There is no guarantee that the max channel uniqueid length will remain the same as the snoop uniqueid space. ........ Merged revisions 420879 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420880 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-12 06:18 +0000 [ca61f8ac82] Joshua Colp * app_voicemail: Fix the "test_voicemail_vm_info" unit test. ........ Merged revisions 420856 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420858 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 16:04 +0000 [aba07a0f6e] Richard Mudgett * res/stasis/command.c: Fix recent commit using spaces instead of tabs. ........ Merged revisions 420836 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420837 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420838 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 13:51 +0000 [ffccae8269] Matt Jordan * AMI/ARI: Update version to 2.5.0/1.5.0 respectively This is to support the backwards compatible changes made in the next version of Asterisk. ........ Merged revisions 420805 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420808 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420811 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 13:46 +0000 [7a4691b425] Kinsey Moore * Stasis: Use the correct return value Return the correct value instead of always returning 0 when setting internal status on unreal channels. Reported by: Richard Mudgett ........ Merged revisions 420802 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420803 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420804 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 13:38 +0000 [6f735288b0] Kinsey Moore * Stasis: Allow internal channels directly into bridges The patch to catch channels being shoehorned into Stasis() via external mechanisms also happens to catch Announcer and Recorder channels because they aren't known to be stasis-controlled channels in the usual sense. This marks those channels as Stasis()-internal channels and allows them directly into bridges. Review: https://reviewboard.asterisk.org/r/3903/ ........ Merged revisions 420795 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420796 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420797 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 12:40 +0000 [db0a97f8ce] Mark Michelson * Fix crashing unit tests with regards to RLS. The unit tests require a sorcery.conf file that has been set up to store resource lists in memory rather than retrieving from configuration. With a setup that is not conducive to running the tests, a fault in sorcery currently causes Asterisk to crash when attempting to run any of the tests. To get around the crash, this adds a function that verifies the current environment and marks the tests as "not run" if the setup is not correct. ........ Merged revisions 420779 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420780 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 11:03 +0000 [b4e33c81e3] Mark Michelson * Fix crash encountered by the testsuite. Running testsuite tests locally produced no errors, but when run using the continuous integration framework, crashes occurred. The crashes occurred due to a refcounting error that had been fixed for a similar situation. ........ Merged revisions 420758 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420759 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 08:57 +0000 [becf7c7003] Matt Jordan * res_hep: Remove disabling of modules These modules were originally specified as being disabled, as they were introduced midstream in Asterisk 12. That makes it nicer for folks who are upgrading to a new release in the middle of Asterisk 12. That's not the case for Asterisk 13: it's a brand new release. There's no reason to have the modules disabled by default in that case. ........ Merged revisions 420742 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420743 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 05:41 +0000 [1e0846167b] Walter Doekes * general: Fix memory Corruption in __ast_string_field_ptr_build_va. If the space left in a stringfield is between 0 and (alignof(ast_string_field_allocation)-1) adding new data would cause memory corruption, because we would assume enough space (unsigned underrun). Thanks Arnd Schmitter for reporting and finding out the cause! ASTERISK-23508 #close Reported by: Arnd Schmitter Tested by: Arnd Schmitter, JoshE Review: https://reviewboard.asterisk.org/r/3898/ ........ Merged revisions 420680 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420715 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420716 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420717 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420718 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-11 04:55 +0000 [b2afbc48e4] Walter Doekes * tcptls: Avoid compiler warning on non-dev-mode. ........ Merged revisions 420654 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420655 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420656 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420657 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420658 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-10 20:31 +0000 [6650704414] Matt Jordan * funcs/func_jitterbuffer: Tweak documentation This patch merely reformats and cleans up a bit of the jitterbuffer documentation for the wiki. ........ Merged revisions 420639 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420640 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-10 19:14 +0000 [add46fd27c] Michael K (License 6621) * app_queue: Add RealTime support for queue rules This patch gives the optional ability to keep queue rules in RealTime. It is important to note that with this patch: (a) Queue rules in RealTime are only examined on module load/reload (b) Queue rules are loaded both from the queuerules.conf file as well as the RealTime backend To inform app_queue to examine RealTime for queue rules, a new setting has been added to queuerules.conf's general section "realtime_rules". RealTime queue rules will only be used when this setting is set to "yes". The schema for the database table supports a rule_name, time, min_penalty, and max_penalty columns. min_penalty and max_penalty can be relative, if a '-' or '+' literal is provided. Otherwise, the penalties are treated as constants. For example: rule_name, time, min_penalty, max_penalty 'default', '10', '20', '30' 'test2', '20', '30', '55' 'test2', '25', '-11', '+1111' 'test2', '400', '112', '333' 'test3', '0', '4564', '46546' 'test_rule', '40', '15', '50' which would result in : Rule: default - After 10 seconds, adjust QUEUE_MAX_PENALTY to 30 and adjust QUEUE_MIN_PENALTY to 20 Rule: test2 - After 20 seconds, adjust QUEUE_MAX_PENALTY to 55 and adjust QUEUE_MIN_PENALTY to 30 - After 25 seconds, adjust QUEUE_MAX_PENALTY by 1111 and adjust QUEUE_MIN_PENALTY by -11 - After 400 seconds, adjust QUEUE_MAX_PENALTY to 333 and adjust QUEUE_MIN_PENALTY to 112 Rule: test3 - After 0 seconds, adjust QUEUE_MAX_PENALTY to 46546 and adjust QUEUE_MIN_PENALTY to 4564 Rule: test_rule - After 40 seconds, adjust QUEUE_MAX_PENALTY to 50 and adjust QUEUE_MIN_PENALTY to 15 If you use RealTime, the queue rules will be always reloaded on a module reload, even if the underlying file did not change. With the option disabled, the rules will only be reloaded if the file was modified. Review: https://reviewboard.asterisk.org/r/3607/ ASTERISK-23823 #close Reported by: Michael K patches: app_queue.c_realtime_trunk.patch uploaded by Michael K (License 6621) ........ Merged revisions 420624 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420625 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-10 17:02 +0000 [f7bb772804] Matt Jordan * Update CHANGES file ........ Merged revisions 420609 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420610 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-10 16:35 +0000 [455243cdd4] Matt Jordan * Update UPGRADE-13.txt file git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420608 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 15:08 +0000 [3e452fa4d9] Jason Parker * Fix build in devmode. ........ Merged revisions 420592 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420593 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 14:16 +0000 [5ce4ad8031] Jason Parker * app_voicemail: Add the ability to specify multiple email addresses. ASTERISK-24045 Reported by: Jacob Barber Review: https://reviewboard.asterisk.org/r/3833/ ........ Merged revisions 420577 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420578 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 12:53 +0000 [91f7b66183] Matt Jordan * chan_sip: Mark chan_sip and its files as extended support ........ Merged revisions 420562 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420563 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 07:40 +0000 [86e927a714] Matt Jordan * make_ari_stubs: Update wiki prefix to '13' ........ Merged revisions 420538 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420539 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 07:38 +0000 [1f35fccda1] Matt Jordan * res_ari_resource.c.mustache: Update template to emit module support level ........ Merged revisions 420536 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420537 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-08 07:33 +0000 [008c1ad9bf] Matt Jordan * main/message: remove debug message ........ Merged revisions 420533 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420534 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420535 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-07 22:07 +0000 [c94fef6f36] Kinsey Moore * CEL: Update unit tests for additional information This updates the CEL unit tests for the new information contained in the attended transfer CEL extra field. ........ Merged revisions 420513 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 420514 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420515 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-07 20:37 +0000 [96be6b2228] Matt Jordan * Initialize svnmerge from branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420499 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-07 20:36 +0000 [38a0df95b1] Matt Jordan * Remove 12 merge properties git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420498 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-08-07 20:33 +0000 [5760526f69] Matt Jordan * Update UPGRADE.txt for 13 branch git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420497 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2019-12-23 16:55 +0000 Asterisk Development Team * asterisk certified/13.21-cert6 Released. 2019-11-22 10:39 +0000 [c59bc91f77] Thomas Arimont (license 5525) * channel.c: Resolve issue with receiving SIP INFO packets for DTMF The problem is essentially the same as in ASTERISK~28245. Besides the direct media scenario we have an additional scenario where a special client is involved. This device mutes audio by default in transmit direction (no rtp frames) and activates audio only by a foot switch. In this situation dtmf input (pin for conferences, transfer features codes , etc) using SIP INFO mode is not understood properly especially when SIP INFO messages are sent quickly. This patch ensures that SIP INFO frames are properly queued and processed in the above scenario. The patch also corrects situations where successive dtmf events are received quicker than the signalled event duration (plus minimum gap/pause) allows, i.e. DTMF events have to be buffered in the ast channel read queue and emulation has to be processed asynchronously at slower speed. Reported by: Thomas Arimont patches: trigger_dtmf_emulation.patch submitted by Thomas Arimont (license 5525) Change-Id: I309bf61dd065c9978c8e48f5b9a936ab47de64c2 2019-11-25 06:55 +0000 [8807f80ac9] Joshua Colp * parking: Fall back to parker channel name even if it matches parkee. ASTERISK-28631 Change-Id: Ia74d084799fbb9bee3403e30d2391aacd46243cc 2019-11-22 09:31 +0000 [395b224447] Ben Ford * Add directories and README files for staging changes. While doing a release, problems were encountered running the process-staging-changes script. These directories and the README.md files were missing from the certified branches. Adding them in to be in line with the other branches. Also fixing the .gitreview file to point to the correct branch. Change-Id: Ia9e2ecce31ef35838da5f3166aac321b577d16c2 2019-11-21 21:29 +0000 Asterisk Development Team * asterisk certified/13.21-cert5 Released. 2019-11-21 15:25 +0000 [171fa026d1] Asterisk Development Team * Update CHANGES and UPGRADE.txt for 13.21-cert5 2019-10-21 14:55 +0000 [5be4005fba] Ben Ford * chan_sip.c: Prevent address change on unauthenticated SIP request. If the name of a peer is known and a SIP request is sent using that peer's name, the address of the peer will change even if the request fails the authentication challenge. This means that an endpoint can be altered and even rendered unusuable, even if it was in a working state previously. This can only occur when the nat option is set to the default, or auto_force_rport. This change checks the result of authentication first to ensure it is successful before setting the address and the nat option. ASTERISK-28589 #close Change-Id: I581c5ed1da60ca89f590bd70872de2b660de02df 2019-10-24 12:41 +0000 [32e599f16a] George Joseph * manager.c: Prevent the Originate action from running the Originate app If an AMI user without the "system" authorization calls the Originate AMI command with the Originate application, the second Originate could run the "System" command. Action: Originate Channel: Local/1111 Application: Originate Data: Local/2222,app,System,touch /tmp/owned If the "system" authorization isn't set, we now block the Originate app as well as the System, Exec, etc. apps. ASTERISK-28580 Reported by: Eliel Sardañons Change-Id: Ic4c9dedc34c426f03c8c14fce334a71386d8a5fa 2019-11-08 13:21 +0000 [20535ecac0] Ben Ford * res_pjsip_session.c: Check for port of zero on incoming SDP. If a re-invite comes in initiating T.38, but there is no c line in the SDP and the port is also 0, a crash can occur. A check is now done on the port to see if the steam is already declined, preventing the crash. The logic was moved to res_pjsip_session.c because it is handled in a similar manner in later versions of Asterisk. ASTERISK-28612 Reported by: Salah Ahmed Change-Id: Ifc4a0d05b32c7f2156e77fc8435a6ecaa6abada0 2019-11-15 04:46 +0000 [144f7f4c7e] Joshua Colp * parking: Fix case where we can't get the parker. ASTERISK-28616 Change-Id: Iabe31ae38d01604284fcc5c2438d44e29a32ea4d 2019-11-12 05:00 +0000 [a88f1150e8] Joshua Colp * parking: Use channel snapshot instead of channel. There exists a scenario where a thread can hold a lock on the channels container while trying to lock a bridge. At the same time another thread can hold the lock for said bridge while attempting to retrieve a channel. This causes a deadlock. This change fixes this scenario by retrieving a channel snapshot instead of a channel, as information present in the snapshot is all that is needed. ASTERISK-28616 Change-Id: I68ceb1d62c7378addcd286e21be08a660a7cecf2 2019-09-24 11:21 +0000 [e604f532ec] Kevin Harwell * res_pjsip_pubsub: change warning to debug The following message: "Subscription request from endpoint rejected. Expiration of 0 is invalid" Would sometimes spam the log with warnings if Asterisk restarted and a bunch of clients sent unsubscribes. This patch changes it from a warning to a debug message. Change-Id: I841ec42f65559f3135e037df0e55f89b6447a467 2019-09-23 11:01 +0000 [e7c44355a6] Kevin Harwell * res_sorcery_memory_cache: stale item update leak When a stale item was being updated the object was being retrieved, but its reference was not being decremented after the update. This patch makes it so the object is now appropriately de-referenced. ASTERISK-28523 Change-Id: I9d8173d3a0416a242f4eba92fa0853279c500ec7 2019-09-15 14:35 +0000 [dfd7a3474b] Joshua Colp * chan_pjsip: Relock correct channel during "fax" redirect. When fax detection occurs on an outbound PJSIP channel the redirect operation will result in a masquerade occurring and the underlying channel on the session changing. The code incorrectly relocked the new channel instead of the old channel when returning. This resulted in the new channel being locked indefinitely. The code now always acts on the expected channel. ASTERISK-28538 Change-Id: I2b2e60d07e74383ae7e90d752c036c4b02d6b3a3 2019-08-08 12:10 +0000 [794c7030ae] George Joseph * CI: Escape backslashes in printenv/sort/tr Change-Id: I52be64c8f6af2bbe15148a856d1f10cb113e1e94 2019-08-08 07:12 +0000 [c177b3566b] George Joseph * CI: Add "throttle" label and "skip_gate" capability To make throttling by label fully active, the "throttle" option has to be specified with a specific label. You can now specify "skip_gate" in the Gerrit comments when you do a +2 code review to tell Jenkins not to actually run the gate. You'd do this if you plan to manually merge the change. Also updated the "printenv" debug output to better sort multi-line comments. Change-Id: I4c0b1085acec4805f2ca207eebac50aad81f27e2 2019-08-06 10:40 +0000 [f789016ff5] George Joseph * CI: Make node labels job-specific Originally, the eligible nodes for a job were labelled only by "swdev-docker". So basically any node could run any job. We had found that allowing a node to run more than 1 gate at a time was problematic so we limited the nodes to processing 1 job at a time. With the creation of the Asterisk 17 branches however, we now have so many active branches that getting checks and gates through in a timely manner is problematic when a node can run only 1 job at a time. Now the nodes are also labelled by the job type they can run. For instance: "asterisk-check", "asterisk-gate", etc. With the "Throttle Concurrent Builds" plugin, we can now allow a node to run more than 1 job BUT throttle by job type. For instance: Allow 2 jobs but only 1 asterisk-gate at a time. Now a node can run 2 checks or 1 check and 1 gate or 1 gate but not 2 gates at a time. Change-Id: I2032bf6afbcec5c341d9b852214c0c812d3d6db5 2019-07-26 08:38 +0000 [1e9a9e4dca] George Joseph * .gitreview: Update defaultbranch for certified Change-Id: Ied1a0488a777bec513cc351c3ed8e25741bfc11f 2019-07-24 15:15 +0000 [ea02f587a8] George Joseph * CI: Don't enable non-core modules in Certified branches We don't support non-core modules for Certified releases but we were enabling them for CI builds which was causing lots of test failures. Now we don't. NOTE: This change required that the rest of the CI shell scripts and jenkinsfiles be updates to the same level as certified/16.3. Change-Id: I0b3254c08a2479f3d39151690350cce5ce5ad766 2019-07-11 19:26 +0000 Asterisk Development Team * asterisk certified/13.21-cert4 Released. 2019-06-12 13:03 +0000 [521581b762] George Joseph * res_pjsip_messaging: Check for body in in-dialog message We now check that a body exists and it has a length > 0 before attempting to process it. ASTERISK-28447 Reported-by: Gil Richard Change-Id: Ic469544b22ab848734636588d4c93426cc6f4b1f 2019-06-28 11:15 +0000 [07048050b0] Francesco Castellano * chan_sip: Handle invalid SDP answer to T.38 re-invite The chan_sip module performs a T.38 re-invite using a single media stream of udptl, and expects the SDP answer to be the same. If an SDP answer is received instead that contains an additional media stream with no joint codec a crash will occur as the code assumes that at least one joint codec will exist in this scenario. This change removes this assumption. ASTERISK-28465 Change-Id: I8b02845b53344c6babe867a3f0a5231045c7ac87 2018-12-03 16:41 +0000 [e2e3def2d9] Sean Bright * core: Add some documentation to the malloc_trim code This adds documentation to handle_cli_malloc_trim() indicating how it can be useful when debugging OOM conditions. Change-Id: I1936185e78035bf123cd5e097b793a55eeebdc78 2018-12-03 14:01 +0000 [7a7e3dfa5c] Chris-Savinovich * core: Merge malloc_trim patch We've had multiple opportunities where Richard Mudgett's malloc_trim patch has been useful. Let's get it pushed up to gerrit and merged. Since malloc_trim is only available in libc, an entry is added to configure.ac to create a definition for HAVE_MALLOC_TRIM. Change-Id: Ia38308c550149d9d6eae4ca414a649957de9700c (cherry picked from commit 40ab571e0d07f7e1854c0f924b0fbda2da36c5a5) 2018-11-08 09:53 +0000 [79207ec9f1] George Joseph * backtrace: Refactor ast_bt_get_symbols so it doesn't crash We've been seeing crashes in libbfd when we attempt to generate a stack trace from multiple threads. It turns out that libbfd is NOT thread-safe. It can cache the bfd structure and give it to multiple threads without protecting itself. To get around this, we've added a global mutex around the bfd functions and also have refactored the use of those functions to be more efficient and to provide more information about inlined functions. Also added a few more tests to test_pbx.c. One just calls ast_assert() and the other calls ast_log_backtrace(). Neither are run by default. WARNING: This change necessitated changing the return value of ast_bt_get_symbols() from an array of strings to a VECTOR of strings. However, the use of this function outside Asterisk is not likely. ASTERISK-28140 Change-Id: I79d02862ddaa2423a0809caa4b3b85c128131621 2018-09-20 19:04 +0000 Asterisk Development Team * asterisk certified/13.21-cert3 Released. 2018-08-16 10:45 +0000 [34af3753ae] Sean Bright * AST-2018-009: Fix crash processing websocket HTTP Upgrade requests The HTTP request processing in res_http_websocket allocates additional space on the stack for various headers received during an Upgrade request. An attacker could send a specially crafted request that causes this code to overflow the stack, resulting in a crash. * No longer allocate memory from the stack in a loop to parse the header values. NOTE: There is a slight API change when using the passed in strings as is. We now require the passed in strings to no longer have leading or trailing whitespace. This isn't a problem as the only callers have already done this before passing the strings to the affected function. ASTERISK-28013 #close Change-Id: Ia564825a8a95e085fd17e658cb777fe1afa8091a 2018-07-20 06:54 +0000 [9635a64fd8] Joshua Colp * res_pjsip: Update default keepalive interval to 90 seconds. A change recently went in which disabled the built-in PJSIP keepalive. This defaulted to 90 seconds and kept TCP/TLS connections alive. Disabling this functionality has resulted in a behavior change of not doing keepalives by default resulting in TCP/TLS connections dropping for some people. This change makes our default keepalive interval 90 seconds to match the previous behavior and preserve it. ASTERISK-27978 Change-Id: Ibd9a45f3cbe5d9bb6d2161268696645ff781b1d6 2018-07-11 11:57 +0000 [8f56ba5479] Alexander Traud (License 6520) * Bundled PJPROJECT: Disable internal connection oriented keep-alive. Turn off the periodic sending of CRLNCRLN. Default is on (90 seconds), which conflicts with the global section's keep_alive_interval option in pjsip.conf. patches: pjsip_keep_not_alive.patch submitted by Alexander Traud (License 6520) ASTERISK-27347 Change-Id: I6a197f56e1830d3b7e5ec70f17025840a290b057 2018-07-03 12:10 +0000 [51616b277d] Richard Mudgett * res_pjsip/pjsip_transport_management.c: Fix deadlock with transport keep alive. Using the keep_alive_interval option can result in a deadlock between the pjproject transport manager group lock and the monitored transports ao2 container lock. The pjproject transport manager group lock has to be superior in the locking order to the monitored transports ao2 container lock because of pjproject callbacks called when already holding the group lock. The lock inversion happens when Asterisk attempts to send a keep alive packet over the reliable transports. * Made keepalive_transport_thread() iterate over the monitored transports container rather than use the ao2_callback() method. This avoids holding the container lock when sending the keep alive packet. ASTERISK-26686 Change-Id: I5d5392a52e698bbe41a93f7d8e92bf0e61fe3951 2018-07-13 18:26 +0000 [56a8a36c66] Richard Mudgett * Build: Fix modules getting their optimization setting overridden. Asterisk modules that use PJPROJECT services have their compiler optimization and possibly their symbolic debug options overridden by the PJPROJECT configure script selected settings. * We need to filter-out any -O and -g options in PJ_CFLAGS before echoing out the result so the PJPROJECT_INCLUDE variable does not override the Asterisk module settings when using bundled PJPROJECT. NOTE: This patch only has an effect when using bundled PJPROJECT. ASTERISK-27563 Change-Id: If124169735ecf572ad1535cd43bff94cb44d5b30 2018-07-17 11:09 +0000 [3e6272b0f6] George Joseph * CI: Fix merge strategy Change-Id: I5e3fb6adfa6cbf694c0deecf02e3879297b0c12e 2018-07-17 10:41 +0000 [a8744add75] George Joseph * CI: Fix regex in daily and ref_debug jobs Change-Id: Icf2e67818b2155a158d2390b138613e1f653ea92 2018-07-17 10:18 +0000 [89acb71caa] Richard Mudgett * res_config_ldap.c: Fix mem leak in CLI "realtime show ldap status" Change-Id: Ib2a3622b297b0363c62d23958f7a20039bcb9b4c 2018-07-17 10:15 +0000 [aa2ab27041] George Joseph * CI: Add pre-build merge back in as RECURSIVE Change-Id: I0ff1730ef4a4f0ac9f18ccc9bc0dfe7a782f57a8 2018-07-17 09:01 +0000 [4b69db4b66] George Joseph * CI: Remove pre-build merge from gates and checks Change-Id: Ibc151f63dcec4db847915c2f3cbe5b467dd59574 2018-07-17 07:13 +0000 [7bd8bbfd35] George Joseph * CI: Fix logic inversion in runTestsuite Change-Id: I56399aa384468f45494c2c3650420563a0b6efe1 2018-07-17 04:03 +0000 [4435cfdd4c] George Joseph * CI: Add teardownRealtime Change-Id: I2fe55c38607eaec2fbf69ef23a5019e0c443a64b 2018-05-07 10:49 +0000 [f4c13e8170] Corey Farrell * Fix GCC 8 build issues. This fixes build warnings found by GCC 8. In some cases format truncation is intentional so the warning is just suppressed. ASTERISK-27824 #close Change-Id: I724f146cbddba8b86619d4c4a9931ee877995c84 2018-05-08 04:59 +0000 [44e9bdec61] Jaco Kroon * manager: fix digest auth for ami/http mechanism. Due to a fixed size buffer the digest authentication could be incorrectly calculated if a large URI was provided, causing authentication failure. The buffer is now dynamically allocated to allow any size URI within the normal limits of the HTTP request size. ASTERISK-27841 Change-Id: I660609db13b8f9e5f9567f339dd804f4985d41b3 2018-07-16 13:30 +0000 [c98c6051c6] George Joseph * CI: Prevent Jenkins from triggering jobs back to itself Change-Id: I9cae8bb3d1a2cea335d3ccd88d471832549666fd 2018-07-16 11:08 +0000 [ee063a35eb] George Joseph * CI: runUnittests: loop a few times on waitfullybooted Change-Id: Icebc0d013896f3b2a7214945cac60647435c1651 2018-07-16 10:49 +0000 [5ec8f5b353] George Joseph * CI: Add realtime checks to dailies Change-Id: I6dc8ab1679b3505c6dde1d47e1b9276df47814f8 2018-07-16 09:13 +0000 [282312eb96] George Joseph * CI: Add weekly REF_DEBUG testsuite run Change-Id: I5b581d0a0d1d1bb9b38961d40b112fb448355037 2018-07-16 08:44 +0000 [62345d444f] George Joseph * CI: Fix bad reporting of status by the verification pub Change-Id: I6f31a130b3ba0187149aaaa2ce94195a79e0f6a6 2018-07-16 07:16 +0000 [ecc1c14a22] George Joseph * CI: Make build tag an acceptable docker name Change-Id: I3a4b8a4a9c488ddabf9daf651dc1334222056f38 2018-07-13 06:56 +0000 [9246fc9dd7] George Joseph * CI: Add daily periodics to CI Change-Id: I26933e73928e091ae72e838c02f4f2ec7c3983d6 2018-07-12 16:34 +0000 [dae51bddbd] George Joseph * CI: Add Asterisk Gates Change-Id: I7e2467f9120812551238d8005deb97f965279205 2018-07-11 15:55 +0000 [ac2a1db043] George Joseph * CI: Remove duplicate checkout Change-Id: If5f925b4c4ed7000b153f3ed8386ce2140c886f8 2018-07-11 15:09 +0000 [602ded78d4] George Joseph * CI: Update cleanup steps and permissions Change-Id: I7ca92935979d94845af8e1caf4468cbd6209b7de 2018-07-11 14:54 +0000 [ca168ba901] George Joseph * CI: Fix log artifact paths Change-Id: I55136de8f4d9c3b56bd4d054306a187bb04a4b7d 2018-07-11 14:45 +0000 [19c481a184] George Joseph * CI: Remove CleanBeforeCheckout option for testsuite Change-Id: I510231c9087f7be5272b8ef3f3223eadaaffb754 2018-07-11 14:00 +0000 [a05056c759] George Joseph * CI: Move gates into source repo Change-Id: If028ede5f3b127fa274c63ce166bc04ad7c1e5db 2018-07-11 06:14 +0000 [5dffbe11ab] George Joseph * CI: Initial commit for moving CI into source repo Create tests/CI directory and add files used by Jenkins to build and test Asterisk. With this commit, Jenkins will run the Asterisk Unit Tests using the Jenkinsfile at tests/CI/unittests.jenkinsfile. Bash scripts to do the actual building and testing are also in the same directory. Output is placed in tests/CI/output so that directory has been added to .gitignore. Change-Id: I9448065465e6de2b878634510ace8fd1ef378608 2018-07-06 09:04 +0000 [8273b8cbf3] George Joseph * test.c: Make output jUnit compatible Separate "name" into "classname" and "name". Use '.' for classname separator instead of '/'. Prefix reserved words with '_'. Wrap output with a top-level "testsuites" element. Change-Id: Iec1a985eba1c478e5c1d65d5dfd95cb708442099 2018-06-11 21:09 +0000 Asterisk Development Team * asterisk certified/13.21-cert2 Released. 2018-04-30 17:38 +0000 [3cccb60321] Richard Mudgett * AST-2018-008: Fix enumeration of endpoints from ACL rejected addresses. When endpoint specific ACL rules block a SIP request they respond with a 403 forbidden. However, if an endpoint is not identified then a 401 unauthorized response is sent. This vulnerability just discloses which requests hit a defined endpoint. The ACL rules cannot be bypassed to gain access to the disclosed endpoints. * Made endpoint specific ACL rules now respond with a 401 unauthorized which is the same as if an endpoint were not identified. The fix is accomplished by replacing the found endpoint with the artificial endpoint which always fails authentication. ASTERISK-27818 Change-Id: Icb275a54ff8e2df6c671a6d9bda37b5d732b3b32 2018-06-05 12:47 +0000 Asterisk Development Team * asterisk certified/13.21-cert1 Released. 2018-06-04 09:50 +0000 [f5bc8aeb9a] George Joseph * app_sendtext: Allow content types other than text/plain There was no real reason to limit the conteny type to text/plain other than that's what it was limited to before. Now any text/* content type will be allowed for channel drivers that don't support enhanced messaging and any type will be allowed for channel drivers that do support enhanced messaging. Change-Id: I94a90cfee98b4bc8e22aa5c0b6afb7b862f979d9 2018-04-10 16:09 +0000 [8f5fc3870d] George Joseph * app_sendtext: Enhance SendText to support Enhanced Messaging SendText now accepts new channel variables that can be used to override the To and From display names and set the Content-Type of a message. Since you can now set Content-Type, other text/* content types are now valid. Change-Id: I648b4574478119f95de09d9f08e9595831b02830 2017-09-27 11:44 +0000 [c1deeb28c2] George Joseph * bridge_softmix: Forward TEXT frames Core bridging and, more specifically, bridge_softmix have been enhanced to relay received frames of type TEXT or TEXT_DATA to all participants in a softmix bridge. res_pjsip_messaging and chan_pjsip have been enhanced to take advantage of this so when res_pjsip_messaging receives an in-dialog MESSAGE message from a user in a conference call, it's relayed to all other participants in the call. res_pjsip_messaging already queues TEXT frames to the channel when it receives an in-dialog MESSAGE from an endpoint and chan_pjsip will send an MESSAGE when it gets a TEXT frame. On a normal point-to-point call, the frames are forwarded between the two correctly. bridge_softmix was not though so messages weren't getting forwarded to conference bridge participants. Even if they were, the bridging code had no way to tell the participants who sent the message so it would look like it came from the bridge itself. * The TEXT frame type doesn't allow storage of any meta data, such as sender, on the frame so a new TEXT_DATA frame type was added that uses the new ast_msg_data structure as its payload. A channel driver can queue a frame of that type when it receives a message from outside. A channel driver can use it for sending messages by implementing the new send_text_data channel tech callback and setting the new AST_CHAN_TP_SEND_TEXT_DATA flag in its tech properties. If set, the bridging/channel core will use it instead of the original send_text callback and it will get the ast_msg_data structure. Channel drivers aren't required to implement this. Even if a TEXT_DATA enabled driver uses it for incoming messages, an outgoing channel driver that doesn't will still have it's send_text callback called with only the message text just as before. * res_pjsip_messaging now creates a TEXT_DATA frame for incoming in-dialog messages and sets the "from" to the display name in the "From" header, or if that's empty, the caller id name from the channel. This allows the chat client user to set a friendly name for the chat. * bridge_softmix now forwards TEXT and TEXT_DATA frames to all participants (except the sender). * A new function "ast_sendtext_data" was added to channel which takes an ast_msg_data structure and calls a channel's send_text_data callback, or if that's not defined, the original send_text callback. * bridge_channel now calls ast_sendtext_data for TEXT_DATA frame types and ast_sendtext for TEXT frame types. * chan_pjsip now uses the "from" name in the ast_msg_data structure (if it exists) to set the "From" header display name on outgoing text messages. Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489 (cherry picked from commit be7d4faed5fb3684e9d68454ae2a97167e1ebb51) 2017-09-27 11:44 +0000 [72fb285d9b] George Joseph * bridge_softmix: Forward TEXT frames Core bridging and, more specifically, bridge_softmix have been enhanced to relay received frames of type TEXT or TEXT_DATA to all participants in a softmix bridge. res_pjsip_messaging and chan_pjsip have been enhanced to take advantage of this so when res_pjsip_messaging receives an in-dialog MESSAGE message from a user in a conference call, it's relayed to all other participants in the call. res_pjsip_messaging already queues TEXT frames to the channel when it receives an in-dialog MESSAGE from an endpoint and chan_pjsip will send an MESSAGE when it gets a TEXT frame. On a normal point-to-point call, the frames are forwarded between the two correctly. bridge_softmix was not though so messages weren't getting forwarded to conference bridge participants. Even if they were, the bridging code had no way to tell the participants who sent the message so it would look like it came from the bridge itself. * The TEXT frame type doesn't allow storage of any meta data, such as sender, on the frame so a new TEXT_DATA frame type was added that uses the new ast_msg_data structure as its payload. A channel driver can queue a frame of that type when it receives a message from outside. A channel driver can use it for sending messages by implementing the new send_text_data channel tech callback and setting the new AST_CHAN_TP_SEND_TEXT_DATA flag in its tech properties. If set, the bridging/channel core will use it instead of the original send_text callback and it will get the ast_msg_data structure. Channel drivers aren't required to implement this. Even if a TEXT_DATA enabled driver uses it for incoming messages, an outgoing channel driver that doesn't will still have it's send_text callback called with only the message text just as before. * res_pjsip_messaging now creates a TEXT_DATA frame for incoming in-dialog messages and sets the "from" to the display name in the "From" header, or if that's empty, the caller id name from the channel. This allows the chat client user to set a friendly name for the chat. * bridge_softmix now forwards TEXT and TEXT_DATA frames to all participants (except the sender). * A new function "ast_sendtext_data" was added to channel which takes an ast_msg_data structure and calls a channel's send_text_data callback, or if that's not defined, the original send_text callback. * bridge_channel now calls ast_sendtext_data for TEXT_DATA frame types and ast_sendtext for TEXT frame types. * chan_pjsip now uses the "from" name in the ast_msg_data structure (if it exists) to set the "From" header display name on outgoing text messages. Change-Id: Idacf5900bfd5f22ab8cd235aa56dfad090d18489 (cherry picked from commit be7d4faed5fb3684e9d68454ae2a97167e1ebb51) 2018-05-17 01:58 +0000 [5de8b00f2c] Alexander Traud * res_pjsip_endpoint_identifier_ip: Unregister the module for headers. Asterisk uses Reference Counting to track whether a module can be unloaded. Every consumer who requires a module, increases the reference count. When the consumer goes, is unloaded itself, it has to decrease the reference count on all its used/required modules. That way core stop gracefully works on the command-line interface (CLI): One module after the other is unloaded. A recent change broke this for the module res_pjsip. ASTERISK-27861 Change-Id: I261abcb411d026bbb0691cc78f28300bfd3103a3 2018-05-17 00:34 +0000 [5aaf6d1605] Alexander Traud * res_pjsip: Register pjsip_transport_management not externally but internally. The module (res_)pjsip_transport_management got moved into res_pjsip. It is no longer an independent/external module with (un)load_module and therefore has to register just internally with res_pjsip. ASTERISK-27860 Change-Id: Icd0413be7d2e98b92f51e6d6c353f2570bb4be95 2017-10-30 15:24 +0000 [13a85290fe] Kevin Harwell * Initialize 13.21-cert branch A new branch was created for what will be Asterisk certified 13.21. A couple of things needed to be done to the branch in order to complete initialization: Modified the version file to reflect the certified version. Updated all extended modules to be disabled by default. Change-Id: Ie1dd3cb146391dea92c9e3ef906dde8d7241fee2 2018-04-19 13:29 +0000 [32f362c896] Chris Savinovich * Update for 13.21.0-rc1 2018-04-17 07:09 +0000 [92f88f164a] Alexander Traud * utils/pval: Add -lBlocksRuntime for compiler clang conditionally. ASTERISK-27809 Change-Id: I930b364a33d54cc08dedfcd5bb45f7e83242f134 2018-04-13 15:17 +0000 [39c51394c8] George Joseph * utils: Add ast_assert_return Similar to pjproject's PJ_ASSERT_RETURN macro, this one will do the following... If the assert passes... NoOp If the assert fails and AST_DEVMODE is defined, execute ast_assert() then, if DO_CRASH isn't set, return from the calling function with the supplied value. If the assert fails and AST_DEVMODE is not defined, return from the calling function with the supplied value. The macro will execute a return without a value if one isn't suppled. Change-Id: I0003844affeab550d5ff5bca7aa7cf8a559b873e 2018-04-13 14:32 +0000 [f2e140e8a7] Ben Ford * res_musiconhold: Don't restart MOH from beginning after announcement. This reverts a problem introduced by the fix for ASTERISK_24329. Now, when an announcement is played while waiting in a queue, music on hold will not restart from the beginning of the sound file and will instead pick up where it left off. However, the incorrect behavior in ASTERISK_24329 is now present again; if an announcement X seconds long is played when music on hold starts, music on hold will start X seconds into the file. ASTERISK-27774 #close Reported by: lvl Change-Id: I86b2885ee7063268f9b9747eddb788336ade989b 2018-03-28 15:13 +0000 [b92ebdba5f] Richard Mudgett * pjsip_scheduler.c: Add ability to trace scheduled tasks. When a scheduled task is created you can pass in the AST_SIP_SCHED_TASK_TRACK flag. This new flag causes scheduling events to be logged. Change-Id: I91967eb3d5a220915ce86881a28af772f9a7f56b 2018-03-27 11:04 +0000 [12aa25b2e1] Richard Mudgett * res_pjsip.c: Split ast_sip_push_task_synchronous() to fit expectations. ast_sip_push_task_synchronous() did not necessarily execute the passed in task under the specified serializer. If the current thread is any registered pjsip thread then it would execute the task immediately instead of under the specified serializer. Reentrancy issues could result if the task does not execute with the right serializer. The original reason ast_sip_push_task_synchronous() checked to see if the current thread was a registered pjsip thread was because of a deadlock with masquerades and the channel technology's fixup callback (ASTERISK_22936). A subsequent masquerade deadlock fix (ASTERISK_24356) involving call pickups avoided the original deadlock situation entirely. The PJSIP channel technology's fixup callback no longer needed to call ast_sip_push_task_synchronous(). However, there are a few places where this unexpected behavior is still required to avoid deadlocks. The pjsip monitor thread executes callbacks that do calls to ast_sip_push_task_synchronous() that would deadlock if the task were actually pushed to the specified serializer. I ran into one dealing with the pubsub subscriptions where an ao2 destructor called ast_sip_push_task_synchronous(). * Split ast_sip_push_task_synchronous() into ast_sip_push_task_wait_servant() and ast_sip_push_task_wait_serializer(). ast_sip_push_task_wait_servant() has the old behavior of ast_sip_push_task_synchronous(). ast_sip_push_task_wait_serializer() has the new behavior where the task is always executed by the specified serializer or a picked serializer if one is not passed in. Both functions behave the same if the current thread is not a SIP servant. * Redirected ast_sip_push_task_synchronous() to ast_sip_push_task_wait_servant() to preserve API for released branches. ASTERISK_26806 Change-Id: Id040fa42c0e5972f4c8deef380921461d213b9f3 2018-03-21 19:43 +0000 [dfdc9a2575] Richard Mudgett * pjsip_scheduler.c: Fix some corner cases. * Fix the periodic interval wander because it may take significant time between the sched thread queueing the task in the serializer and the serializer actually executing the task. The time it takes to actually execute the task was already taken into account. * Pass a schtd ref to the serializer when we queue a scheduled task on the serializer. We don't want it going away on us while it is in the serializer queue. * Skip the scheduled task if the task was canceled between queueing the task to the serializer and the serializer actually executing the task. * Reorder struct ast_sip_sched_task to avoid unnecessary padding. Removed task_id and added next_periodic. * Hold a ref to the passed in serializer so the serializer cannot go away on the scheduled task. ASTERISK_26806 Change-Id: I6c8046b75f6953792c8c30e55b836a4291143f24 2018-03-22 19:09 +0000 [af36823907] Richard Mudgett * pjsip_scheduler.c: Sort "pjsip show scheduled_tasks" output. * A side benefit is that the scheduled tasks are not completely blocked while the CLI command executes. * Adjusted the "Task Name" column width to have more room for longer names. Change-Id: Iec64aa463ee8b10eef90120e00c38b1fb444087e 2018-04-02 15:59 +0000 [7886354343] Evandro Cesar Arruda * cdr_mysql: Compile error because MYSQL_PORT definition is missing If it is not defined, it will add MYSQL_PORT definition. After some research on MySQL/MariaDB development tree, I couldn't find any reference to MYSQL_PORT definition in include files. ASTERISK-27782 #close Change-Id: Ieee56c836fc2e8bd021c456145bba04c6068bb77 2018-04-09 20:00 +0000 [724d926d46] Chris-Savinovich * res_pjsip_session: Rewrite o= with external_media_address. It now appends the external IP address on the o= line of the SDP packet. The decision was made to write the numeric IP address as opposed to the RFC that states the FQDN should be used if and when available. We believe the usage of literal IP address will help avoid potential problems. ASTERISK-27614 #close Change-Id: I84f3360f3606b8c4e8d161edb228799ec0b8a302 2018-02-22 12:18 +0000 [6a4afe09ce] Nathan Bruning * res_pjsip_notify.c: enable in-dialog NOTIFY This patch adds support to send in-dialog SIP NOTIFY commands on chan_pjsip channels, similar to the functionality recently added for chan_sip (ASTERISK_27461). This extends res_pjsip_notify to allow for in-dialog messages. ASTERISK-27697 Change-Id: If7f3151a6d633e414d5dc319d5efc1443c43dd29 2018-03-22 13:35 +0000 [c4f02c975b] Richard Mudgett * pjsip_scheduler.c: Fix ao2 usage errors. * Removed several invalid uses of OBJ_NOLOCK. These uses resulted in the 'tasks' container being accessed without a lock in a multi-threaded environment. A recipe for crashes. * Removed needlessly obtaining schtd object references. If the caller providing you a pointer to an object doesn't have a valid reference then you cannot safely get one from it. * Getting a ref to 'tasks' when you aren't copying the pointer into another location is useless. The 'tasks' container pointer is global. * Removed many unnecessary uses of RAII_VAR. * Make ast_sip_schedule_task() name parameter const. ASTERISK_26806 Change-Id: I5c62488e651314e2a1dbc01f5b078a15512d73db 2018-03-23 06:49 +0000 [7593359787] Corey Farrell * Build System: Enable python3 compatibility. * Consistently use spaces in rest-api-templates/asterisk_processor.py. * Exclude third-party from docs/full-en_US.xml. * Add docs/full-en_US.xml to .gitignore. * Use list() to convert python3 view. * Use python3 print function. * Replace cmp() with equivalent equation. * Replace reference to out of scope subtype variable with name parameter. * Use unescaping triple bracket notation in mustache templates where needed. This causes behavior of Python2 to be maintained when using Python3. * Fix references to has_websocket / is_websocket in res_ari_resource.c.mustache. * Update calculation of has_websocket to use any(). * Use unicode mode for writing output file in transform.py. * Replace 'from swagger_model import *' with explicit import of required symbols. * Add missing 'import os' * Fix invalid reference to swagger_version from exception handler. I have not tested voicemailpwcheck.py, only the print syntax has been fixed. Change-Id: If5c5b556a2800d41a3e2cfef080ac2e151178c33 2018-04-05 18:33 +0000 [72b16ee400] Richard Mudgett * res_pjsip_refer/chan_sip: Fix INVITE with replaces transfer to ConfBridge There is a problem when an INVITE-with-Replaces transfer targets a channel in a ConfBridge. The transfer will unconditionally swap out the ConfBridge channel. Unfortunately, the ConfBridge state will not be aware of this change. Unexpected behavior will happen as a result since ConfBridge channels currently can only be replaced by a masquerade and not normal bridge channel moves. * We just need to pretend that the channel isn't in a bridge (like other transfer methods already do) so the transfer channel will masquerade into the ConfBridge channel. Change-Id: I209beb0e748fa4f4b92a576f36afa8f495ba4c82 2018-04-05 17:40 +0000 [ea055386e0] Richard Mudgett * chan_sip.c: Fix INVITE with replaces channel ref leak. Given the below call scenario: A -> Ast1 -> B C <- Ast2 <- B 1) A calls B through Ast1 2) B calls C through Ast2 3) B transfers A to C When party B transfers A to C, B sends a REFER to Ast1 causing Ast1 to send an INVITE with replaces to Ast2. Ast2 then leaks a channel ref of the channel between Ast1 and Ast2. Channel ref leaks are easily seen in the CLI "core show channels" output. The leaked channels appear in the output but you can do nothing with them and they never go away unless you restart Asterisk. * Properly account for the channel refs when imparting a channel into a bridge when handling an INVITE with replaces in handle_invite_replaces(). The ast_bridge_impart() function steals a channel ref but the code didn't account for how many refs were held by the code at the time and which ref was stolen. * Eliminated RAII_VAR in handle_invite_replaces(). ASTERISK-27740 Change-Id: I7edbed774314b55acf0067b2762bfe984ecaa9a4 2018-03-21 19:40 +0000 [e94f8e4a24] Richard Mudgett * res_pjsip: Update authenticate_qualify documentation. Change-Id: I3811de0014b1ffe96d4a3b49cddd5d4ca02ee5d4 2018-04-02 16:49 +0000 [906db6a3ff] Richard Mudgett * app_agent_pool.c: Fix off nominal ref leak. Change-Id: Ib427ffc2c802620eaafb08b1c2a17dddd8fb8eb6 2018-04-04 10:02 +0000 [07e408e588] Corey Farrell * Build System: Strip '-std=c99' from CFLAGS provided by libraries. Asterisk requires GNU C extensions. On some systems certain libraries may incorrectly push -std=c99 into CFLAGS, thus breaking the build. This change causes that flag to be stripped so the Asterisk build is not broken by those libraries. This change is made for both pkgconfig and tool based libraries. ASTERISK-27629 #close Change-Id: I13389613b194abbac77becf90cd950dc168704db 2018-04-03 14:39 +0000 [01b3c435d8] Corey Farrell * Build System: Fixes for configure script. * Replace all 'else if' statements with 'elif'. * Use loop to detect versioned lua headers and libraries. The loop for detecting lua fixes a bug where LUA_INCLUDE would be appended with the directory of every lua version after the first one is found. Change-Id: I3276f9aee955014108345be6092f51c932b43a0f 2018-01-02 07:54 +0000 [cea1a22ef3] George Joseph * res_pjsip: Correct usages of pjproject's timer heap Fix some timer heap initializations and cancels to try and prevent crashes and timer heap issues. Change-Id: I64885d190fa22097d1b55987091375541e57a7ee 2018-03-25 13:35 +0000 [158c0efd4f] George Joseph * pjroject_bundled: Add already-destroyed check to tsx_timer_callback There have been cases that when the transaction timer callback is called the tsx is already destroyed. This causes a crash. We now check the tsx state and return if the tsx is already destroyed. Change-Id: If93acd5e48d9ca5bb553f2405d5afc836842fe1c 2018-03-25 13:25 +0000 [69c61237cd] George Joseph * pjproject_bundled: timer: Clean up usage of timer heap Added a new pj_timer_entry_reset function that resets a timer_entry for re-use. Changed direct settings of timer_entry fields to use pj_timer_entry_init and pj_timer_entry_reset. Fixed issues where timers were being rescheduled incorrectly. Change-Id: I5b624bfbc5c1429117484b9b24567293002148e6 2018-03-22 08:54 +0000 [83353997f4] Alexander Traud * BuildSystem: Add support for building RADIUS with radcli. Radcli is yet another RADIUS client library, generally compatible with freeradius and radiusclient-ng. This commit adds autoconf option for detecting it as well and changes cdr_radius and cel_radius to use its header file in that case. ASTERISK-26540 Reported by: Tzafrir Cohen Change-Id: Icc056d476b7acf481309219e9abdca416866c6ec 2018-03-29 17:07 +0000 [e1363283d7] Richard Mudgett * res_pjsip: Fix deadlock on reliable transport shutdown. A deadlock can happen when the PJSIP monitor thread is shutting down a connection oriented transport (TCP/TLS) used by a subscription at the same time as another thread tries to send something for that subscription. The deadlock is between the pjsip monitor thread attempting to get the dialog lock and another thread sending something for that dialog when it tries to get the transport manager lock. * res_pjsip_pubsub.c: Avoid the deadlock by pushing the subscription removal to the subscription serializer. * res_pjsip_registrar.c: Pushed off incoming registration contact removals to a default serializer as a precaution. Removing the contacts involves sorcery access which in this case will involve database access. Depending upon the setup, the database may not be on the same machine and could take awhile. We don't want to hold up the pjsip monitor thread with potentially long access times. ASTERISK-27706 Change-Id: I56b647aea565f24dba33e9e5ebeed4cd3f31f8c4 2018-03-25 13:12 +0000 [c63a2e28f1] George Joseph * pjproject_bundled: Add patch for pj_atomic crashes There have been some crashes in the past where something attempts to use a pj_atomic after it's already been destroyed. This patch tries to prevent it by making sure that pj_atomic_destroy sets its mutex to NULL when it's done. The pj_mutex functions already check for a NULL mutex and just return PJ_EINVAL. Teluu also added some checks to the win32 implementation as well. Change-Id: Id25f70b79fdedf44ead6e6e1763a4417d3b3f825 2018-03-28 08:18 +0000 [5908c6753b] Corey Farrell * core: Create main/options.c. This creates a separate source to 'own' symbols related to options.h and paths.h. This significantly reduces the number of exports created by main/asterisk.o. This change is required to eventually be able to link unmodified Asterisk sources to utilities and/or stand-alone tests. ASTERISK~26245 Change-Id: I5cf184f4757f9363b80c9e678bdc35c477122380 2018-03-23 13:15 +0000 [e8e4fc6202] Alexander Traud * install_prereq: Add Slackware (somehow). ASTERISK-27770 Change-Id: Ib87e0483c785542238cfe34c1e884d5a31edfaab 2018-03-23 09:18 +0000 [96a668e60b] Alexander Traud * install_prereq: Add Gentoo Linux. ASTERISK-27769 Change-Id: Ieb13293cd67481f3a33f58f6f7c8c3ee1e338e7a 2018-03-17 01:02 +0000 [6615469a05] Corey Farrell * main/indications: Use ast_cli_completion_add for all completions. Change-Id: I371be01f178fb542a9fbe8d97e7ae21aa4d82c36 2018-03-22 07:27 +0000 [de4e2c1de8] Alexander Traud * BuildSystem: pjsip_evsub_set_uas_timeout was not used (part 2). The previous change was not complete. ASTERISK-27435 Change-Id: I11082c14c0ef9c6af8c995084a6851337ea2a90f 2018-03-22 05:52 +0000 [79bb956b69] Alexander Traud * BuildSystem: With external editline, do not require libs for internal editline. ASTERISK-27761 Change-Id: Ib17a7415297a210cfcdbf149e4df9b6edadbfab6 2018-03-21 19:25 +0000 [3a4a441817] George Joseph * Revert "BuildSystem: In NetBSD, the Python Programming Language is python-X.Y." Something is causing a python2/python3 mismatch on Fedora27. PYTHON='/usr/bin/python2' PYTHONDEV_CFLAGS='-I/usr/include/python3.6m ' PYTHONDEV_INCLUDE='-I/usr/include/python3.6m ' PYTHONDEV_LIB='-lpython3.6m ' PYTHONDEV_LIBS='-lpython3.6m ' This reverts commit c0c537c1d3aab05358df697d8d259aa73f55a43c. Change-Id: I670a82aa7c872fa5facea1e3bc718e2d3124cc28 2018-03-20 15:28 +0000 [17cd687679] Kevin Harwell * bridge_softmix: Clear "talking" when a channel is put on hold This patch clears the talking flag from the channel (if already set), and notifies listeners when that channel is put on hold. Note however, if the endpoint continues to send audio frames and these are received by the bridge then that channel will be put back into a "talking" state even though they are on hold. ASTERISK-27755 #close Change-Id: I930e16c4662810f9f02043d69062f88173c5e2ef 2018-03-07 06:15 +0000 [5955cdf5ae] Ross Beer * pjsip_transport_events.c: Fix crash using stale transport pointer. Apparently it is possible for the transport to be destroyed without triggering the transport callback logic. As a result the transport gets destroyed and we have a stale pointer in the active_transports container. * Invoke the transport monitor callback checks when the transport is destroyed in addition to when it is disconnected and shutdown. ASTERISK-27688 Change-Id: Ia9b5469fea8f2b3f2d8476fae6b748a4d23e7261 2018-03-20 09:58 +0000 [69de659224] Ivan Poddubny * func_channel: Delete dead CHANNEL_TRACE code The functions behind the flag and the flag itself were removed from Asterisk 12 as incompatible with the new architecture. Change-Id: I058493ef7a53ee290fd225bbcbb07bf46b623ccf 2018-03-20 11:55 +0000 [7580d1e0bb] Alexander Traud * BuildSystem: For consistency, avoid extra libs to be empty. AST_EXT_LIB_CHECK has several optional parameters. When an optional parameter is left empty, [] is used to indicate this. However, this is done in the script ./configure only then, when a further parameter is not empty. For example, when no extra libraries are needed to test the checked library, parameter 5 is not mentioned. Except parameter 6 and higher are used, then parameter 5 must be empty. However, this general rule was broken * three times for parameter 5 (extra libs) and * three times for parameter 4 (header) as found via the Regular Expression \[\]\). In case of parameter 5, all cases were changed, because that happened for no reason. In case of parameter 4, an [] improves readability actually. Therefore for parameter 4, the only case which did not do it was changed. All this aims to create more consistency: Only do something different if there is a reason to do so. Change-Id: I037ef170cf1ad94497151a9ea5071a31c656cafe 2018-03-17 20:03 +0000 [6f304697b0] Corey Farrell * core: Remove dead symbols from asterisk.exports.in. * dahdi_chan_name * dahdi_chan_name_len * dahdi_chan_mode * __manager_event * dialed_interface_info Added comment about __progname and environ being needed for FreeBSD to prevent accidental removal in the future. Change-Id: I3ae026bc541cd9cb572be2ffa95fc359547642b5 2018-03-17 01:39 +0000 [8df4811cfa] Corey Farrell * named_acl: Use ast_cli_completion_add. Change-Id: I317a82de976bbdbfe4352c243e32a7bb8f66c377 2018-03-17 01:58 +0000 [a89323236f] Corey Farrell * main/sounds: Use ast_cli_completion_add. Change-Id: I140e1137906bbfcdb61c0c6304159be459ad873e 2018-03-17 01:09 +0000 [dc520b6d8f] Corey Farrell * manager: Use ast_cli_completion_add for completion generators. Change-Id: I658141c6ec490a3e866b02d2afea757928ceaabf 2018-03-17 02:16 +0000 [534fda0a59] Corey Farrell * main/test: Use ast_cli_completion_add. Change-Id: I5133ff2ba4e030f9733fb3d050c863d72a22ae6b 2018-03-16 10:19 +0000 [373e7e3fb0] George Joseph * channel.c: Allow generic plc then channel formats are equal If the two formats on a channel are equal, we don't transcode and since the generic plc needs slin to work, it doesn't get invoked. * A new configuration option "genericplc_on_equal_codecs" was added to the "plc" section of codecs.conf to allow generic packet loss concealment even if no transcoding was originally needed. Transcoding via SLIN is forced in this case. ASTERISK-27743 Change-Id: I0577026a179dea34232e63123254b4e0508378f4 2018-03-17 02:25 +0000 [bd926539b0] Corey Farrell * main/translate: Use ast_cli_completion_add. Change-Id: I0e2402660e54d91f74ab0804c62a5b1925577413 2018-03-17 02:00 +0000 [d202b56a74] Corey Farrell * main/taskprocessor: Use ast_cli_completion_add. Change-Id: Ie5f812a988ed811fd11967151932de62bc131b48 2018-03-17 00:51 +0000 [18cbfcf4f0] Corey Farrell * aco: Use ast_cli_completion_add for 'config show help'. In addition this removes: * RAII_VAR usage * Duplicate check of pos * Unneeded arguments. Change-Id: I2da8eac2670d1d8d6474c04037129804f55ebf39 2018-03-15 15:06 +0000 [d57b58f5e9] Corey Farrell * main/config: Use ast_cli_completion_add for reload completion. Change-Id: Ia3fa4c03f2285a1ec8814bbe7f4624ead9111ad1 2018-03-17 04:31 +0000 [34e16cbf3a] Corey Farrell * main/bridge: Use ast_cli_completion_add. Change-Id: I3775a696d6a57139fdf09651ecb786bcf1774509 2018-03-17 16:41 +0000 [98a3baca70] Corey Farrell * core: Minor cleanup of ast_el_read_char. * Define CHAR_T_LIBEDIT and CHAR_TO_LIBEDIT based on HAVE_LIBEDIT_IS_UNICODE. This avoids needing to repeatedly use conditional blocks, eliminates having multiple function prototypes. * Remove parenthesis from return values. * Add missing code block brackets {}. * Reduce use of 'else' conditional statements where possible. Change-Id: I4315328ebea2f62641faf6881de2ac20a9f9d08e 2018-03-17 10:54 +0000 [7b40605d8e] Alexander Traud * BuildSystem: Check for header file of OGG. Asterisk uses various symbols of the shared library libogg within the module format_ogg_vorbis. However, the source code of that module did not include the header file of libogg explicitly but implicitly. Because that header was not included before Asterisk 14, the script ./configure was told not to check for it. Anyway, even Asterisk 13 LTS uses symbols of libogg. Therefore, that header should be included explicitly. Therefore, ./configure should check for that header. Change-Id: I98c50d56311b68880d1084fcc62c35ab2f8692db 2018-03-09 06:26 +0000 [06ba605988] Alexander Traud * BuildSystem: When no download utility is available, display the explanation. ./configure --with-pjproject-bundled did not display an explanation, when no download utility like wget, curl, or fetch was installed beforehand, although an explanation existed in code. This happened because the code expected the variable DOWNLOAD_TO_STDOUT to be empty. However, the script ./configure set that variable always. Change-Id: I64c99b76a03525c69471e5055bf124b36a51bbd4 2018-03-17 05:00 +0000 [0f634c1446] Alexander Traud * BuildSystem: Remove unused dependency on libltdl. Asterisk does not need the development package of libltdl, because it does not use any symbol of -lltdl directly. Instead, it uses the runtime package via the shared library -lodbc. On the supported platforms, that shared library declares its dependency on -lltdl correctly, otherwise AST_EXT_LIB_CHECK would have failed. ASTERISK-27745 Change-Id: Icd315809b8e7978203431f3afb66240dd3a040ba 2018-03-05 06:50 +0000 [c0c537c1d3] Alexander Traud * BuildSystem: In NetBSD, the Python Programming Language is python-X.Y. ASTERISK-27717 Change-Id: If90ddf9c396c32e7402a894f42dce215c30049d1 2018-03-16 09:53 +0000 [afcd1dd8e5] Alexander Traud * BuildSystem: Avoid an extra case for OpenBSD. Nine years ago with Mantis 13639 (now ASTERISK-12841) an extra case for OpenBSD was introduced: Vorbis required Ogg to be specified manually, because the shared library libvorbis.so did not specify its required dependency on -logg itself. Today with OpenBSD 6.2, all libvorbis*.so declare their dependencies correctly. Therefore, an extra case is not required anymore. Change-Id: Ifd04e0994ce9f1e4ad29c3948a0398b91d1e97bc 2018-03-05 10:17 +0000 [5b80e97fff] Alexander Traud * BuildSystem: Enable Advanced Linux Sound Architecture (ALSA) in NetBSD. In the script ./configure, AST_EXT_LIB_CHECK checks for external libraries. Some libraries do not specify all their dependencies and require additional shared libraries. In AST_EXT_LIB_CHECK, this is the fifth parameter. However, if a library is specified there, it must exist on the platform, because ./configure tries to compile/link/execute a small app using those statements. For example, the library libdl.so is Linux specific and does not exist on BSD-like platforms. Furthermore, no supported platform/version was found, which still (ever?) requires those additional libraries. Therefore, they were simply removed. Finally, this change adds the error code ESTRPIPE to the channel driver chan_alsa for those platforms which lack it, again for example NetBSD. ASTERISK-27720 Change-Id: I3b21f2135f6cbfac7590ccdc2df753257f426e0b 2018-03-16 09:02 +0000 [d5af24bb14] George Joseph * app_voicemail: Fix json blob errors When app_voicemail calls ast_test_suite_notify with the results of a user keypress, it formats the keypress as '%c'. If the user hung up or some other error occurrs, the result of the keypress is a non printable character. This ultimately causes json_vpack_ex to think it's being passed a non utf-8 string and return an error. * Keypress results passed to ast_test_suite_notify are now checked with isprint() and a '?' is substituted if the check fails. Change-Id: I78ee188916bbac840f3d03f40201b692347ea865 2018-02-27 03:01 +0000 [69463c612d] Florian Floimair * app_dial: Enable early-media video Certain applications (e.g. door-phone) require that also video is transmitted before a call is accepted. Change-Id: I9842e1dc2f6e1c2c49dc33fe615255007d2f821e 2018-03-15 09:32 +0000 [a7ebb9409d] Corey Farrell * main/cdr: Use ast_cli_completion_add for CDR channel completion. Change-Id: Ie81830647a23aad61c1162583b6d50adbe6e7822 2018-03-15 08:19 +0000 [5ac64a4464] Corey Farrell * main/ccss: Use ast_cli_completion_add for core id. Change-Id: I44b25d6d24c7d9bc1bb38a50774b38883162f98f 2018-03-12 10:24 +0000 [e04be32fc5] Alexander Traud * install_prereq: Add Arch Linux. ASTERISK-27738 Change-Id: I7ca620e3c4dfb4b064a19382c4915aeb42a2a09f 2018-03-15 04:49 +0000 [eb699f3631] Corey Farrell * core: Backport compatible MALLOC_DEBUG changes. * Add support for MALLOC_DEBUG and DEBUG_CHAOS to be used together. * Add utils/astmm.c to .gitignore. * Fix MALLOC_DEBUG variant of __ast_vasprintf. This function called va_end(ap) upon allocation failure. This is incorrect since ap is passed as an argument. Change-Id: I9f27ced4ce3cbe4b39547a67f994fdff491978c0 2018-03-15 07:29 +0000 [7e0c56f800] Corey Farrell * astobj2_container: Use ast_cli_completion_add for container names. Change-Id: I4f0fc09e820eb8d8da2354a177dbcf503c56ddd1 2017-12-09 04:52 +0000 [7e041d6233] Corey Farrell * main/channel: Use ast_cli_completion_add for channeltypes. Change-Id: Ia845fae6a84801cc7d9996767b99efb2753cbb48 2018-03-14 12:38 +0000 [6539b89254] Corey Farrell * cli: Enable ast_cli_completion_add on public completion generators. * ast_cli_complete * ast_complete_channels * ast_complete_applications These generators will now use ast_cli_completion_add if state == -1. Change-Id: I7ff311f0873099be0e43a3dc5415c0cd06d15756 2018-03-14 11:17 +0000 [96eaabd920] Ross Beer * res_pjsip_rfc3326.c: Account for more than one 'Reason' header ASTERISK-27741 Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf 2018-03-12 08:10 +0000 [b237ef7f27] Alexander Traud * install_prereq: Add SUSE. ASTERISK-27736 Change-Id: I4cafc8973349d50a7cb7919ddf0bb1aaef4bfc3e 2018-03-13 16:37 +0000 [dc738b145f] Corey Farrell * core: Remove incorrect usage of attribute_malloc. GCC documentation states that when __attribute__((malloc)) is used it should not return storage which contains any valid pointers. It specifically mentions that realloc functions should not have the malloc attribute, but this also means that complex initializers which could contain initialized pointers should not use this attribute. Change-Id: If507f33ffb3ca3b83b702196eb0e8215d27fc7d2 2018-03-12 05:19 +0000 [7533d25e8d] Alexander Traud * BuildSystem: Enable IMAP storage on openSUSE and Arch Linux. ASTERISK-27734 Change-Id: I8d6e6a1c08c031649764f5277fbbb85e57c3a9d4 2018-03-12 04:22 +0000 [09c43fdc1a] Alexander Traud * res_srtp: Add support for libsrtp2.x on openSUSE. Since ASTERISK-26976, libSRTP 2.x can be used for sRTP. However, that change added a private header which is not available on openSUSE for example. To remain compatibility with very old libSRTP versions, the affected/missing symbols AES_128_ICM and HMAC_SHA1 are defined manually. ASTERISK-27733 Change-Id: I25c5cb8fa966043d1506ebef449e5a724412b4b6 2018-03-10 03:33 +0000 [c09a10bb1b] Corey Farrell * core: Remove non-critical cleanup from startup aborts. When built-in components of Asterisk fail to start they cause the Asterisk startup to abort. In these cases only the most critical cleanup should be performed - closing databases and terminating proceses. These cleanups are registered using ast_register_atexit, all other cleanups should not be run during startup abort. The main reason for this change is that these cleanup procedures are untestable from the partially initialized states, if they fail it could prevent us from ever running the critical cleanup with ast_run_atexits. Change-Id: Iecc2df98008b21509925ff16740bd5fa29527db3 2018-03-08 09:14 +0000 [bd6e0b1a72] Alexander Traud * BuildSystem: Add NetBSD. Headers, libraries, and rpath. ASTERISK-27728 ASTERISK-11015 Reported by: Curt Sampson Change-Id: I50aa5fcd095937df32a2e33307caac7e79a8b5b7 2018-03-09 03:23 +0000 [ba88af8a25] Alexander Traud * BuildSystem: For consistency, avoid double-checking via if clauses. In the script ./configure, AST_EXT_LIB_CHECK and AST_PKG_CONFIG_CHECK first test whether parameter 1 was already found. Consequently, an if-test on PBX_ just a line below is redundant, if exactly the same parameter 1 is used again. No performance gain is expected by this change. However, because this strategy is used all over in ./configure except for two places, this change aims to create more consistency: Only do something different if there is a reason to do so. Change-Id: I4a6f48127b7af3a48168c917e888be1f70625027 2018-03-09 02:44 +0000 [c227462370] Alexander Traud * BuildSystem: Enable dladdr on non-Linux platforms like FreeBSD. ASTERISK-27641 Change-Id: I587e8ba0123c70fc10cfd8b0ac3299551f61d84b 2018-03-07 13:50 +0000 [9ae427c7fd] Richard Mudgett * res_pjproject.c: Upgrade bundled PJPROJECT to 2.7.2 Update patches included in bundled PJPROJECT for the new version. ASTERISK-27730 Change-Id: Id3c8c8ad82126846bcd9768bc3d0a18d89be8944 2018-03-08 12:05 +0000 [57e8754a3a] Alexander Traud * install_prereq: Add NetBSD. ASTERISK-27729 Change-Id: I7a706d51375d54cf5e36d32397bfe09a48670804 2018-03-08 09:04 +0000 [0d70a9a006] Alexander Traud * BuildSystem: Re-check for another UUID library only when previous check failed. As a side-effect, this avoids the ambiguous output: checking for uuid_generate_random... no which was printed always previously. ASTERISK-25586 Reported by: John Nemeth Change-Id: I6d541dfcf453932a9856c5e251aa22e0e6c233c9 2018-03-08 05:32 +0000 [7b6b6b0a7e] Alexander Traud * BuildSystem: Instead of $PJPROJECT_LIBS with s, use $PJPROJECT_LIB everywhere. In the script ./configure, xyz_LIB is set by AST_PKG_CONFIG_CHECK and xyz_LIBS is set by PKG_CHECK_MODULES within AST_PKG_CONFIG_CHECK. Both are the same. In Asterisk normally the former and only three times the latter was used. Let us use xyz_LIB without s, for consistency with AST_EXT_LIB_CHECK. That eases understanding because now readers do not have to know that xyz_LIB equals xyz_LIBS. Change-Id: I7359860a5d730cdc784c2c48e501a082196434d3 2018-03-06 06:28 +0000 [54874eb44d] Alexander Traud * BuildSystem: Enable PortAudio in NetBSD. In NetBSD, PortAudio 1 is still the default version. PortAudio 2 can be installed side by side but gets placed in a 'portaudio2' subdirectory. To find PortAudio 2 even in a subdirectory, the tool pkg-config is queried via AST_PKG_CONFIG_CHECK. For those platforms, which do not list PowerAudio 2 via pkg-config, the previous check remains and is executed thereafter. ASTERISK-27721 Change-Id: I4175500126909ad1b181fff8e11bb4a3a6ae4fa9 2018-03-07 00:29 +0000 [b81eadcefc] Corey Farrell * Replace direct checks of option_debug with DEBUG_ATLEAST macro. Checking option_debug directly is incorrect as it ignores file/module specific debug settings. This system-wide change replaces nearly all direct checks for option_debug with the DEBUG_ATLEAST macro. Change-Id: Ic342d4799a945dbc40ac085ac142681094a4ebf0 2018-03-07 13:13 +0000 [342aec5980] Richard Mudgett * BuildSystem regression: Fix errors reported by clean targets. Doing a 'make clean', 'make distclean', or 'make dist-clean' gets errors about an invalid shell option: "/bin/sh: 0: Illegal option -". The clean targets do not include the makeopts file which defines GREP and LDCONFIG because the file may not exist and the distclean/dist-clean targets will delete it anyway. ASTERISK-27715 Change-Id: I33d40acdb03862bc89aeb6fb1ff497894a8ea7f5 2018-03-06 19:08 +0000 [0597e72e1d] Sungtae Kim * voicemail: Fixed wrong voicemail message count Fixed wrong voicemail mailbox reference for Action: VoicemailUsersList. ASTERISK-27703 Change-Id: I99bfec14bd4ae475b0fa1fac5a7992f3e2e8d64a 2018-02-14 07:33 +0000 [a35a654a52] Jean Aunis * chan_sip: Fix improper RTP framing on outgoing calls The "ptime" SDP parameter received in a SIP response was not honoured. Moreover, in the abscence of this "ptime" parameter, locally configured framing was lost during response processing. This patch systematically stores the framing information in the ast_rtp_codecs structure, taking it from the response or from the configuration as appropriate. ASTERISK-27674 Change-Id: I828a6a98d27a45a8afd07236a2bd0aa3cbd3fb2c 2018-03-06 13:31 +0000 [ecff05d51c] Ross Beer * res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints ASTERISK-27554 Change-Id: If61c7faab7d2fa1031c056ed6268fe928e2391cf 2018-03-07 09:32 +0000 [725fd32428] Alexander Traud * utils: In Solaris, avoid a warning about an unused variable. When HAVE_GETHOSTBYNAME_R_5 was set by the script ./configure, GCC 7.3.0 found an unused variable. Actually, the variable was used (set to a dummy value) but the compiler optimization might have removed that. Instead, this change ensures that the variable 'res' is only used when it is really required. Change-Id: Ic3ea23ccf84ac4bc2d501b514985b989030abab5 2018-03-05 08:01 +0000 [93df498f4e] Alexander Traud * BuildSystem: Enable Lua in NetBSD. luaL_openlib got removed with Lua 5.2. luaL_newstate is available in all versions. ASTERISK-27718 Change-Id: I9c8c8880315ee36ab740d7c40153306c0bfd6f71 2018-03-06 07:33 +0000 [44dbb8251d] Alexander Traud * BuildSystem: Depend not implicitly but explicitly on external libraries. ASTERISK-27722 Change-Id: Ie7b8c30d86cb00a54d6ac4e09e6f28f42d2bd52c 2018-03-05 08:15 +0000 [2d63c185f0] Alexander Traud * res_http_post: Enable GMime in NetBSD. ASTERISK-27719 Change-Id: I230c5f9f316b2e9465c093c13580f72ebbaf67a7 2018-03-05 04:16 +0000 [0af1446d6e] Alexander Traud * BuildSystem: Enable autotools in NetBSD. ASTERISK-27716 Change-Id: I52525e35e1620341272219911d054a1e3d3ec01e 2018-03-05 03:42 +0000 [95ecbaa6b8] Alexander Traud * BuildSystem: AC_PATH_PROG sets to colon character when not found. ASTERISK-27715 Reported by: Corey Farrell Change-Id: I0d6d9572d1352dc7ad30c9917173f1e980d8c938 2018-03-03 09:06 +0000 [7b5e0960ef] Alexander Traud * chan_unistim: NetBSD has an incompatible struct in_pktinfo. ASTERISK-27714 Reported by: John Nemeth Change-Id: I1b84a89315a5f61222123d21bf35c59224da8990 2018-03-03 08:30 +0000 [6b899b2849] Alexander Traud * BuildSystem: Cast any intptr_t explicitly to its proposed type. ASTERISK-27713 Change-Id: I90c769e3c7f8c26de8a3af11335862cec15a1b22 2018-03-03 06:56 +0000 [98e8e849da] Alexander Traud * BuildSystem: Detect whether uselocale(.) is available. ASTERISK-27712 Reported by: Joerg Sonnenberger, D'Arcy Cain Change-Id: Idf1c9d43617a3e13028b95b313415903d80ef807 2018-03-03 03:53 +0000 [8348862103] Alexander Traud * BuildSystem: Avoid re-defining of pthread_* on NetBSD. ASTERISK-27711 Change-Id: Idc9194035b2958b99f6b01eb5b438d45a074565b 2018-03-02 07:05 +0000 [47d45ba025] Alexander Traud * BuildSystem: Install init scripts on openSUSE Tumbleweed. ASTERISK-27710 Change-Id: I4c777e41b31d4415bbe21cb435ad47b43ebb5467 2018-03-02 05:12 +0000 [4035582b64] Alexander Traud * BuildSystem: Avoid == for comparison in ./configure. ASTERISK-27709 Reported by: John Nemeth Change-Id: I11b1ae8fd404c04066f1458f5d71f9536359d58d 2018-02-27 15:40 +0000 [104468ad3a] Richard Mudgett * pjproject: Add cache_pools debugging option. The pool cache gets in the way of finding use after free errors of memory pool contents. Tools like valgrind and MALLOC_DEBUG don't know when a pool is released because it gets put into the cache instead of being freed. * Added the "cache_pools" option to pjproject.conf. Disabling the option helps track down pool content mismanagement when using valgrind or MALLOC_DEBUG. The cache gets in the way of determining if the pool contents are used after free and who freed it. To disable the pool caching simply disable the cache_pools option in pjproject.conf and restart Asterisk. Sample pjproject.conf setting: [startup] cache_pools=no * Made current users of the caching pool factory initialization and destruction calls call common routines to create and destroy cached pools. ASTERISK-27704 Change-Id: I64d5befbaeed2532f93aa027a51eb52347d2b828 2018-01-31 11:49 +0000 [41894965f2] Corey Farrell * gitreview: Reorder and add padding. Change-Id: I459dc320a8c9452a01eed6f403d786741587c890 2018-02-23 21:24 +0000 [bb973aeceb] Michael Cargile * apps/app_amd.c: Fixed total time and silence calculations Between Asterisk 11 and Asterisk 13 there was a significant increase in the number of AST_FRAME_NULL frames being processed by app_amd.c's main loop. Each AST_FRAME_NULL frame was being counted as 100ms towards the total time and silence. This may have been accurate when app_amd.c was orginally added, but it is not in Asterisk 13. As such the total analysis time and silence calculations were way off effectively breaking app_amd.c * Additional debug messages were added * AST_FRAME_NULL are now ignored ASTERISK-27610 Change-Id: I18aca01af98f87c1e168e6ae0d85c136d1df5ea9 2018-02-23 14:58 +0000 [68df9e609e] George Joseph * ast_coredumper: Minor fixes * Fix --tarball-config so the option doesn't cause an error. * Allow for missing /etc/os-release. * Add a sleep between tarballing the coredump and removing the output directory to allow the filesystem to settle. Change-Id: I73e03b13087978bcc7f6bc9f45753990f82d9d77 2018-02-23 10:09 +0000 [caad0c09cd] Corey Farrell * core: Fix handling of maximum length lines in config files. When a line is the maximum length "\n" is found at sizeof(buf) - 2 since the last character is actually the null terminator. In addition if a line was exactly 8190 plus a multiple of 8192 characters long the config parser would skip the following line. Additionally fix comment in voicemail.conf sample config. It previously stated that emailbody can only contain up to 512 characters which is always wrong. The buffer is normally 8192 characters unless LOW_MEMORY is enabled then it is 512 characters. The updated comment states that the line can be up to 8190 or 510 characters since the line feed and NULL terminator each use a character. ASTERISK-26688 #close Change-Id: I80864a0d40d2e2d8cd79d72af52a8f0a3a99c015 2018-02-22 13:53 +0000 [3e5864bcc8] Richard Mudgett * res_pjsip_refer.c: Fix attended transfer race condition crash. The transferrer's session channel was destroyed by the transferrer's serializer thread in a race condition with the transfer target's serializer thread during an attended transfer. The transfer target's serializer was attempting to clean up a deferred end status on behalf of the transferrer's channel when it should have passed the action to the transferrer's serializer. When the transfer target's serializer lost the race then both threads wind up trying to end the transferrer's session. * Push the ast_sip_session_end_if_deferred() call onto the transferrer's serializer to avoid a race condition that results in a crash. The session_end() function that could be called by ast_sip_session_end_if_deferred() really must be executed by the transferrer's serializer to avoid this kind of crash. ASTERISK-27568 Change-Id: Iacda724e7cb24d7520e49b2fd7e504aa398d7238 2018-02-22 11:11 +0000 [ffb15b2bc7] Kevin Harwell * AMI: Bumping AMI non-breaking number for Asterisk 13.20.0 release A few changes were made to AMI: * Fixed "(null):" header in AMI AsyncAGIEnd event * A mute header was added to the ConfbridgeJoin AMI event * ConfbridgeList action's ConfbridgeList events now output all the standard channel snapshot headers Change-Id: I94a82a44b02c91becae08d254e9a56abba5697cf 2018-02-17 03:28 +0000 [05fc37bbc2] Alexander Traud * install_prereq: Update FreeBSD libraries. deleted autoconf gcc libsamplerate sqlite changed binutils to libbfd freetds-devel to freetds gmime2 to gmime26 mysql55-client to mysql57-client added alsa-lib bison bzip2 cclient corosync doxygen libedit flex graphviz libhoard libical libilbc libltdl lua neon newt net-snmp openldap-client openssl patch pkgconf portaudio postgresql10-client python radcli speexdsp subversion uriparser xmlstarlet libzip ASTERISK-27686 Change-Id: Ibe88c9b26e59c30d26cdb313a3ef01c9f37ac80d 2018-02-22 10:46 +0000 [220accb461] Sean Bright * modules: Set deprecated modules to not build by default Change-Id: I09090f70224866aead6b3207fa784cfefea7d539 2018-01-31 13:37 +0000 [05af43b240] Kevin Harwell * AST-2018-003: Crash with an invalid SDP fmtp attribute pjproject's fmtp retrieval function failed to catch invalid fmtp attributes. Because of this Asterisk would crash if given an SDP with an invalid fmtp attribute. When retrieving the format this patch now makes sure the fmtp attribute is available. If not available it now returns an error status. ASTERISK-27583 #close Change-Id: I5cebe000ce2d846cae3af33b6d72c416e51caf2f 2018-01-31 13:33 +0000 [c5dc2fb4ab] Kevin Harwell * AST-2018-002: Crash with an invalid SDP media format description pjproject's media format parsing algorithm failed to catch invalid values. Because of this Asterisk would crash if given an SDP with a invalid media format description. When parsing the media format description this patch now properly parses the value and returns an error status if it can't successfully parse/convert the value. ASTERISK-27582 #close Change-Id: I883b3a4ef85b6972397f7b56bf46c5779c55fdd6 2018-02-06 12:07 +0000 [5947fd148b] George Joseph * AST-2018-005: res_pjsip_transport_management: Move to core Since res_pjsip_transport_management provides several attack mitigation features, its functionality moved to res_pjsip and this module has been removed. This way the features will always be available if res_pjsip is loaded. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: I21a2d33d9dda001452ea040d350d7a075f9acf0d 2018-02-06 11:28 +0000 [a780386dbb] George Joseph * AST-2018-005: Fix tdata leaks when calling pjsip_endpt_send_response(2) pjsip_distributor: authenticate() creates a tdata and uses it to send a challenge or failure response. When pjsip_endpt_send_response2() succeeds, it automatically decrements the tdata ref count but when it fails, it doesn't. Since we weren't checking for a return status, we weren't decrementing the count ourselves on error and were therefore leaking tdatas. res_pjsip_session: session_reinvite_on_rx_request wasn't decrementing the ref count if an error happened while sending a 491 response. pre_session_setup wasn't decrementing the ref count if while sending an error after a pjsip_inv_verify_request failure. res_pjsip: ast_sip_send_response wasn't decrementing the ref count on error. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: Iab33a6c7b6fba96148ed465b690ba8534ac961bf 2018-02-07 08:09 +0000 [de5df002a0] Joshua Colp * AST-2018-004: Restrict the number of Accept headers in a SUBSCRIBE. When receiving a SUBSCRIBE request the Accept headers from it are stored locally. This operation has a fixed limit of 32 Accept headers but this limit was not enforced. As a result it was possible for memory outside of the allocated space to get written to resulting in a crash. This change enforces the limit so only 32 Accept headers are processed. ASTERISK-27640 Reported By: Sandro Gauci Change-Id: I99a814b10b554b13a6021ccf41111e5bc95e7301 2018-02-20 10:33 +0000 [4da0e19b89] Joshua Colp * chan_sip: Emit a second ringing event to ensure channel is found. When constructing a dialog-info+xml NOTIFY message a ringing channel is found if the state is ringing and further information is placed into the message. Due to the migration to the Stasis message bus this did not always work as expected. This change raises a second ringing event in such a way to guarantee that the event is received by chan_sip and another lookup is done to find the ringing channel. ASTERISK-24488 Change-Id: I547a458fc59721c918cb48be060cbfc3c88bcf9c 2018-02-20 04:31 +0000 [cacb72f5ae] Corey Farrell * doc/lang/language-criteria.txt: Link to wiki. This document is out of date and is superseded by content on the Asterisk wiki. ASTERISK-24386 #close Change-Id: Idbf95b27b096c205251e1bbb560c79224ba81822 2018-02-18 10:27 +0000 [5ebc94da02] Sean Bright * res_http_websocket: Don't leak memory on read failure Change-Id: Ic449ea832bc81a1671c0e910c5fbe8c683e3da89 2018-02-19 04:21 +0000 [9325de11f8] Thomas Guebels * res_rtp_asterisk: Fix ICE candidate nomination If the ICE role is not set right away, we might have a role conflict that stays undetected and ICE finishing with successful tests and no candidate nominated. This was introduced by ASTERISK-27088. To avoid this, we set the role as soon as before but only if the ICE state permits it: still checking and not yet nominating candidates or completed. ASTERISK-27646 Change-Id: I5dbc69ad63cacbb067922850fbb113d479bd729c 2018-02-19 03:57 +0000 [e532b982b3] Corey Farrell * core: Rename sounds_index.c to sounds.c. This will make the source filename match the 'module reload sounds' command. This will allow conversion to a built-in module in Asterisk 16 without needing to redefine AST_MODULE. Change-Id: Ifb8e489575b27eb33d8c0b6a531f266670557f6e 2018-02-19 02:49 +0000 [9c8763e4d2] Corey Farrell * config: Fix locking for extconfig reload. Expand locking to include full reload process for extconfig to ensure nothing can read the config mappings between clearing and reloading. Change-Id: I378316bad04f1b599ea82d0fef62b8978a644b92 2018-02-15 14:09 +0000 [1a7ad4c9cf] Sean Bright * res_pjsip_header_funcs: Various cleanups * Prefer strcasecmp() over stricmp() * Use a list with no lock since we never actually lock * Minor cleanups to error messages Change-Id: I8446f44795ee8f3072e1c1f9193c6912dfc0c42b 2018-02-17 08:49 +0000 [6eb22964ba] Alexander Traud * rtp_engine: Load format name / mime type in uppercase again. This reverts a previous change partly. ASTERISK-27689 Change-Id: Ia3d2f282db6995be8c1c253b5d52f6038761e8af 2018-02-16 17:58 +0000 [27d28116d9] Corey Farrell * BuildSystem: Use single bootstrap.sh for Asterisk and menuselect. This causes the root bootstrap.sh script to generate configure scripts for both Asterisk and menuselect. This ensures that both configure scripts are generated with the same version of autotools and avoids situations where shared autoconf macros get modified without regenerating the menuselect script. Change-Id: I2bfd8537bbb63b3d46b11efabbb15eaaf9ef731a 2018-02-16 13:33 +0000 [9ad9433257] Sean Bright * res_pjsip: Endpoint destruction does not free DTLS configuration ASTERISK-27679 #close Reported by: Mak Dee Change-Id: I89a2783a11be0763bf123d1619ed176b6225cf42 2018-02-16 12:44 +0000 [c5e34f0794] Alexander Traud * install_prereq: Update OpenBSD libraries. deleted jack sqlite renamed freetds-0.63p1-msdblib to freetds mysql-client to mariadb-client added bison bzip2 c-client doxygen e2fsprogs graphviz gsm libical jansson libltdl lua neon net-snmp libsrtp portaudio-svn postgresql-client python speexdsp subversion uriparser xmlstarlet ASTERISK-27684 Change-Id: I26bdcb0a1d0e484a8dad1052da97f194aefd3370 2018-02-16 12:30 +0000 [88ec9be78a] Alexander Traud * BuildSystem: Allow newer autotools on OpenBSD. ASTERISK-27683 Change-Id: I5ec9dafbb0c16b6f2740c641980bc2eaaf995624 2018-02-16 07:52 +0000 [0ba6337d32] Alexander Traud * BuildSystem: Fix a typo related to ./configure --prefix= on OpenBSD. Reported by: Stuart Henderson Change-Id: Ieae8624f48b6ae78cf29930b9a45a3c842c7a764 2018-02-16 06:41 +0000 [58aa0d1014] Alexander Traud * BuildSystem: Enable IMAP storage on OpenBSD. ASTERISK-27681 Reported by: Stuart Henderson Change-Id: Ifb6b614acb251b695b9417d76510e73eb335b679 2018-02-16 05:58 +0000 [139dd38193] Alexander Traud * res_calendar: Specialized calendars depend on symbols of general calendar. ASTERISK-27680 Change-Id: Ifb77912e424fe3710a025c18526fada673ec0b79 2018-02-16 05:02 +0000 [94ff290361] Alexander Traud * BuildSystem: Enable system provided libedit on OpenBSD. ASTERISK-27677 Change-Id: I0854e3616d1361ae9b6907d3d3444a02784ac62b 2018-02-15 14:30 +0000 [48acd5cd26] Sean Bright * bridge_roles: Use a non-locking linked list where appropriate Also explicitly initialize with the AST_LIST_HEAD_NOLOCK_INIT macro for clarity. Change-Id: I4bc39ec33bc3ff77e1a971a01ace87deb965be3f 2018-02-15 13:29 +0000 [54efc0c637] Sean Bright * res_pjsip: Use pjsip_sip_uri.user_param instead of other_param There is a dedicated slot in the pjsip_sip_uri for the 'user' parameter, so use that instead of adding to the list of generic URI parameters. Change-Id: I0a0ce8a60ecee27489735bf56fd707719d8c2ed6 2018-02-12 07:48 +0000 [4a5221cd43] Alexander Traud * BuildSystem: Remove chan_h323 leftovers. ASTERISK-27670 Change-Id: I07a8ef8bbd6001e25711fa1bff152eb6c9efa729 2018-01-17 08:17 +0000 [eabe72a679] Alexander Traud * BuildSystem: Invoke ldconfig with previous path. On OpenBSD, gmake uninstall{-all} registered only libraries from /usr/lib and lost those from /usr/local/lib. Instead, invoke ldconfig on a path. ASTERISK-27595 Change-Id: I4aa2c0b5e07119d1a556f8ff6349eaf09e986888 2018-01-28 03:02 +0000 [c2283fca21] Alexander Traud * BuildSystem: Do not warn when bash is not installed. ASTERISK-27631 Change-Id: Iefdf268b0b98c3e7d8089ba87cf78136ac1d785b 2017-11-16 12:57 +0000 [4e5d5b2ce2] Corey Farrell * main/asterisk.c: Remove silly usage of RAII_VAR. Change-Id: I7e2996397fbd3c3a6a69dd805c38448ddfc34ae9 2018-02-11 15:27 +0000 [ba63dad12d] Richard Mudgett * chan_sip.c: Fix crash processing CANCEL. Check if initreq data string exists before using it when processing a CANCEL request. ASTERISK-27666 Change-Id: Id1d0f0fa4ec94e81b332b2973d93e5a14bb4cc97 2018-01-30 20:31 +0000 [6c72c22d51] Corey Farrell * json: Add conditionals to avoid locking if Jansson is thread safe. Jansson is thread safe for all read-only functions and reference counting starting v2.11. This allows simplification of our code and removal of locking around reference counting and dumping. Change-Id: Id985cb3ffa6681f9ac765642e20fcd187bd4aeee 2018-02-12 06:16 +0000 [0ab97e9774] Alexander Traud * pjproject_bundled: Disable G.729 from Belledonne Communications. When is installed, PJProject tries to link that. Support for this bcg729 was added with PJProject 2.7. The issue happens, because Teluu enabled that new feature on default. ASTERISK-27584 Reported by: Stuart Henderson Change-Id: I88b6b18ad777bcfe2d8201187b4b90eec0a172a6 2018-02-12 05:38 +0000 [81bec7c359] Alexander Traud * codecs: Add support for WebRTC iLBC 2.0. When the latest version of that library was installed, Asterisk did not build. ASTERISK-27669 Reported by: Николай Михо Change-Id: I27e09bb875fdd56423bd9fae1be85fddb428eb96 2018-01-30 09:58 +0000 [b1c6a644d3] Alexander Traud * backtrace: Avoid potential spurious output. clang 4.0 found this via -Wlogical-not-parentheses. ASTERISK-27642 Change-Id: I9ec3e144d425a976c02811bd23cd0c533d2eca4e 2018-02-10 05:39 +0000 [21bd7421ef] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Idc36e91db30c0163c560d04c5a82bca5d6ce92a8 2018-02-09 12:06 +0000 [dcfcf310a1] Richard Mudgett * cdr.c: Fix runtime leak of CDR records. Need to remove all CDR's listed by a CDR object from the active_cdrs_all container including the root/master record. ASTERISK-27656 Change-Id: I48b4970663fea98baa262593d2204ef304aaf80e 2017-12-19 02:52 +0000 [0fc3e831a7] Oron Peled * chan_console: don't read and write at the same time It seems that the ALSA backend of PortAudio doesn't know how to both read and write at the same time by adding a per-device mutex. FIXME: currently only a draft version. Need to either auto-detect we work with the ALSA backend or add an extra configuration option to use this mutex. ASTERISK-27426 #close Change-Id: I635eacee45f5413faa18f5a3b606af03b926dacb 2018-02-02 17:20 +0000 [da987df122] Richard Mudgett * res_pjsip/config_domain_aliases.c: Add check for missing domain. What is the point of defining an alias and not saying what is being aliased? Change-Id: I98a892016ed61dcf5efeb6619fd748925103f0be 2018-01-31 17:48 +0000 [1ff580bb25] Richard Mudgett * app_confbridge: ConfbridgeList event has standard channel shapshot headers. * Made the AMI ConfbridgeList action's ConfbridgeList events output all the standard channel snapshot headers instead of a few hand-coded channel snapshot headers. The benefit is that the CallerIDName gets disruptive characters like CR, LF, Tab, and a few others escaped. However, an empty CallerIDName is now output as "" instead of "". ASTERISK-27651 Change-Id: Iaf7d54a9d40194c2db060bc9b4979fab6720d977 2018-01-31 15:45 +0000 [0cf7a9e0ca] Richard Mudgett * app_confbridge: Add the Muted header to ConfbridgeJoin AMI event. ASTERISK-27651 Change-Id: Idef2ca54d242d1b894efd3fc7b360bc6fd5bdc34 2018-02-02 17:35 +0000 [1adf90320d] Richard Mudgett * endpoint identifiers: Some code cleanup. res_pjsip_endpoint_identifier_user.c: * Fix copy/paste error in find_endpoint(). We were using a constant "anonymous" string instead of the passed in endpoint_name when checking the transport domain for an endpoint match. * Eliminate RAII_VAR in find_endpoint(). * Remove always true check in find_transport_state_in_use(). * Remove useless CMD_STOP in find_transport_state_in_use(). res_pjsip_endpoint_identifier_anonymous.c: * Eliminate RAII_VAR in anonymous_identify(). * Remove always true check in find_transport_state_in_use(). * Remove useless CMD_STOP in find_transport_state_in_use(). Change-Id: I86924c31db5bd225ca0c1219c761b668c6f91189 2018-02-02 15:11 +0000 [93a1ffc834] Richard Mudgett * res_pjsip.c: Fix documentation typos. Change-Id: I82ae0b92bfa2ece84a5c684efd9eefdc83ebd068 2018-02-02 15:43 +0000 [5d16cefd63] Richard Mudgett * res_sorcery_realtime.c: Fix ref leak if object failed to apply. Change-Id: I3c7106ff77009754725cee790eadf5da44154ab6 2018-01-24 19:58 +0000 [dd9690f68c] Sungtae Kim * manager.c: Fixed "(null):" header in AMI AsyncAGIEnd event * Changed to create ami_event string only when the given blob is not json_null(). * Fixed bad expression. ASTERISK-27621 Change-Id: Ice58c16361f9d9e8648261c9ed5d6c8245fb0d8f 2018-02-01 13:01 +0000 [8125b825d3] Joshua Elson * res_pjsip_mwi.c: Fix null pointer crash ASTERISK-27652 #close Change-Id: I78a0d38bfd8d0d82830f3d53da04872d6b67284d 2018-02-01 15:03 +0000 [09edcd93aa] Sean Bright * appdocsxml.xslt: Add Language to channel snapshot transformation Change-Id: I8f494b0c895a69b8bc94656d0c6ceebecb0394d8 2018-01-31 15:40 +0000 [665444b772] Richard Mudgett * manager.c: Fix potential memory leak and corruption. ast_str_append_event_header() could potentially leak and corrupt memory if the ast_str needed to expand to add the AMI event header. * Fixed to return error if the ast_str_append() failed. Change-Id: I92f36b855540743b208d76e274152ee2d758176d 2018-01-31 17:27 +0000 [ef1aeb9437] Richard Mudgett * manager_channels.c: Reordered ast_manager_build_channel_state_string_prefix() * Made not allocate memory if the channel snapshot is an internal channel. * Free memory earlier when no longer needed. Change-Id: Ia06e0c065f1bd095781aa3f4a626d58fa4d28b38 2018-01-28 10:10 +0000 [7debdd285c] George Joseph * res_pjsip_pubsub: Prune subs with reliable transports at startup In an earlier release, inbound registrations on a reliable transport were pruned on Asterisk restart since the TCP connection would have been torn down and become unusable when Asterisk stopped. This same process is now also applied to inbound subscriptions. Also fixed issues in res_pjsip_registrar where it wasn't handling the monitoring correctly when multiple registrations came in over the same transport. To accomplish this, the pjsip_transport_event feature needed to be refactored to allow multiple monitors (multiple subcriptions or registrations from the same endpoint) to exist on the same transport. Since this changed the API, any external modules that may have used the transport monitor feature (highly unlikey) will need to be changed. ASTERISK-27612 Reported by: Ross Beer Change-Id: Iee87cf4eb9b7b2b93d5739a72af52d6ca8fbbe36 2018-01-31 15:15 +0000 [698b28e9c7] Corey Farrell * res_pjsip_registrar_expire: Mark module deprecated. The functionality of this module was already moved to res_pjsip_registrar, mark it deprecated and add message to CHANGES. Change-Id: I90c7d52c7e15e85fde3389d5eaccb05b97848813 2018-01-30 19:22 +0000 [6520489952] Richard Mudgett * bridge_softmix.c: Report not talking immediately when muted. Currently in app_confbridge if someone mutes a channel while that channel is talking, the talk detection code is suspended while the channel is muted. As far an an external observer is concerned, the muted channel's talk status is still "talking" even though the channel is not contributing audio to the conference bridge. When the channel is later unmuted, it takes the usual 'dsp_silence_threshold' option time to clear the talking status even though the channel may have stopped talking while the channel was muted. * In bridge_softmix.c, clear the talking status and report talking stopped if the channel was talking when the channel is muted. When the channel is unmuted and the channel is still talking then report the channel as talking since it is contributing audio to the bridge again. ASTERISK-27647 Change-Id: Ie4fdbc05a0bc7343c2972bab012e2567917b3d4e 2018-01-30 15:00 +0000 [4a337b1a76] Richard Mudgett * app_confbridge: Update dsp_silence_threshold and dsp_talking_threshold docs. The dsp_talking_threshold does not represent time in milliseconds. It represents the average magnitude per sample in the audio packets. This is what the DSP uses to determine if a packet is silence or talking/noise. Change-Id: If6f939c100eb92a5ac6c21236559018eeaf58443 2018-01-31 11:00 +0000 [2c4dde0ed0] Richard Mudgett * res_pjsip_registrar.c: Fix compiler error. Need to include signal.h to define pthread_kill() and SIGURG. Change-Id: I10ae3aa4bf8e7386ac29ade78c0f2caed8e674fa 2018-01-30 23:05 +0000 [4c8c0e4c22] Corey Farrell * res_pjsip_session: Prevent crash during shutdown. pjproject does not have a function to reverse pjsip_inv_usage_init. This means we need to ignore any calls to the functions once shutdown is final. ASTERISK-27571 #close Change-Id: Ia550fcba563e2328f03162d79fb185f16b7c9b9d 2018-01-29 13:46 +0000 [5b699c812e] George Joseph * res_pjsip_registrar_expire: Refactor into res_pjsip_register res_pjsip_registrar_expire remains as an empty module for now. Change-Id: Ib93698938bae548d2199cb542f3692d1a171239f 2018-01-29 10:20 +0000 [967c70acb5] Alexander Traud * BuildSystem: Enable autotools in FreeBSD. In the current versions of FreeBSD, the apps of GNU autotools do not need to be called with a version anymore. The latest version can be invoked directly. Additionally, the script ./bootstrap.sh asked for autoconf 2.62 and automake 1.9, versions which are not available as port anymore. ASTERISK-27637 Change-Id: Id7b94b80e78cc943a40ba79b697e3f70019820a7 2018-01-29 10:00 +0000 [dd6b8cd0b2] Alexander Traud * app_voicemail: Avoid always true when using pointer address. clang 4.0 warned about this. ASTERISK-27635 Change-Id: I213f230607d7fbe97c0f5f2d60da9cbf5a2d8231 2018-01-19 05:16 +0000 [8daed642c7] Alexander Traud * install_prereq: Update RHEL/CentOS/Fedora libraries. deleted automake git ncurses-devel pjproject-devel sqlite2-devel libsqlite3x-devel renamed radiusclient-ng-devel to radcli-devel gmime22-devel to gmime-dev added alsa-lib-devel bash binutils-devel bison doxygen flex hoard make pkgconfig speexdsp-devel uriparser-devel uw-imap-devel wget xmlstarlet zlib-devel ASTERISK-27599 Reported by: Said Masoud Change-Id: I05bb0af98ae532b2d5f37478e38b8f0762b1c035 2018-01-28 05:20 +0000 [f59fb7fec8] Alexander Traud * BuildSystem: Remove unused variables. Because of a copy-and-paste from the script build_tools/download_externals, the script build_tools/list_valid_installed_externals got its local variables. However in the latter, three variables were not used actually. Change-Id: I252de5a98c17ea54459174875357c22c2eebe8d5 2018-01-25 12:06 +0000 [154bccf147] Corey Farrell * loader: Use ast_cli_completion_add for 'module load' completion. This addresses all performance issues with 'module load' completion. In addition to using ast_cli_completion_add we stop using libedit's filename_completion_function, instead using ast_file_read_dir. This ensures all results are produced from a single call to opendir. Change-Id: I8bf51ffaa7ef1606f3bd1b5bb13f1905d72c6134 2018-01-27 09:44 +0000 [4bb38022ea] Alexander Traud * core: Fix unused variable error in handle_show_sysinfo. The previous fix broke the case HAVE_SYSINFO = no HAVE_SYSCTL = yes HAVE_SWAPCTL = no which occurs on FreeBSD 11.1 for example. ASTERISK-26563 Change-Id: If77c39bc75f0b83a6c8a24ecb2fa69be8846160a 2018-01-27 08:54 +0000 [021168f06f] Alexander Traud * editline: Avoid shifting a negative signed value. clang 4.0 warned about this. ASTERISK-27630 Change-Id: Ie2725048c661c1792d8b1d498575144350b6e9ba 2018-01-27 03:25 +0000 [e998c906a7] Alexander Traud * headers: Consistent use of typeof and/or __typeof__. Because of a copy-and-paste error, the Asterisk project was using __typeof instead of typeof. It works because typeof, __typeof, and __typeof__ are supported by GCC, but here the escaped variant was not intended. Therefore, for consistence, we change this to typeof. Change-Id: I2a962c3e596e882f691a19345445b14571a5f07c 2018-01-24 18:25 +0000 [87f8459410] Richard Mudgett * Update sounds release to fix siren7 and siren14 files. ASTERISK-16172 Change-Id: I2fb564258cd4db0f35952ad48b8687355c2dcad3 2018-01-15 11:08 +0000 [6b771e346b] Alexander Traud * BuildSystem: Raise autoconf version requirement to 2.60a. AC_COMPUTE_INT requires at least autoconf 2.60a. This affects only those who contribute to Asterisk, only those who had to use the script ./bootstrap.sh. Furthermore, this change just makes sure nobody is using a too old autoconf. ASTERISK-16951 Change-Id: Ibca850e2fe0e77d935207bd959bacf7197d7f637 2018-01-26 06:48 +0000 [7ad6792011] Alexander Traud * install_prereq: Download latest Jansson. ASTERISK-27603 Change-Id: I65c587534c0ae364f063d68da1bed40bb3d5e8aa 2018-01-18 20:19 +0000 [85b384728c] Richard Mudgett * pbx_variables.c: Misc fixes in variable substitution. * Copy more than one character at a time when there is nothing to substitute. * Fix off by one error if a '}' or ']' is missing. * Eliminated the requirement that the "used" parameter had to point to a variable. The current callers were always declaring a variable to meet the requirement and discarding the value put into that variable. Now it can be NULL. * In ast_str_substitute_variables_full() fixed using the bogus channel to evaluate a function. We were not using the bogus channel we just created to help evaluate a subexpression. Change-Id: Ia83d99f4f16abe47f329eb39b6ff2013ae7c9854 2018-01-22 09:18 +0000 [420586beab] Alexander Traud * res_config_mysql: Avoid the header mysql_version.h. ASTERISK-27607 Change-Id: I23d00ded955c4afd5f2c3c9dc96dcb48b3f74eec 2018-01-05 14:46 +0000 [d5a24cfdf7] Alexander Traud * install_prereq: For PJProject, point users to configure script. The installation script and the new configure option --with-pjproject-bundled aimed to accomplish the same. However, the installation script was out of date. Users should go for the maintained configure option, or the Wiki. ASTERISK-24598 Change-Id: Icbf4b562f81f7c05bd24a3805bd46c0beb4ebd44 2018-01-20 12:58 +0000 [31e5008b47] Alexander Traud * BuildSystem: Remove AC_CONFIG_AUX_DIR. ASTERISK-27602 Change-Id: I9f4d3d2bc1481748e39ad1e2b0a364d38e38978b 2018-01-19 12:21 +0000 [ffb7b62019] Alexander Traud * BuildSystem: Remove orphaned .PHONY targets. Change-Id: Ic44d75141b9bf99e7d72fcc82ee111b5cf6989d2 2018-01-19 12:14 +0000 [3b566fc8ec] Alexander Traud * BuildSystem: Allow make clean all again. ASTERISK-27600 Reported by: Hamid R. Hashmi Change-Id: I683d14d024650be04074b037b6300464519409f4 2018-01-19 06:19 +0000 [f20a522d43] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Ieb41b0cbf968af12882b39454b819ebb48b9ea46 2018-01-19 04:46 +0000 [1fbca9a40d] Alexander Traud * install_prereq: Support package manager DNF and yum option strict=1. This re-enables the script ./contrib/scripts/install_prereq on Fedora 22 and newer, and on RHEL/CentOS when the option strict=1 was set for yum install. ASTERISK-27598 Reported by: Hunter Stevens, Said Masoud Change-Id: I40f9517122aaa6906e8fc0962b4b8008dfddb368 2018-01-09 11:29 +0000 [d5bcbd460e] Benoît Dereck-Tricot * pbx: Reduce verbosity while loading extensions Each time the dial plan is reloaded, a lot of logs like these are generated: "Added extension 'XXXXX' priority 1 to YYYYYYYYYYY" This patch changes the log level for those logs. ASTERISK-27084 Change-Id: I5662902161c50890997ddc56835d4cafb456c529 2018-01-18 14:55 +0000 [b353c90627] Sean Bright * res_pjsip: Document tlsv1_1 and tlsv1_2 methods Change-Id: I67ed9039bf3f132fb20ee7a750e0aef0f704d7d3 2018-01-08 23:50 +0000 [1488efb3a8] Igor Goncharovsky * chan_unistim: Fix hold function ability to lock/crash asterisk This patch fix chan_unistim hold functions to correctly support hold function in different states possible in case of multiple lines established on the phone ASTERISK-26596 #close Change-Id: Ib1e04e482e7c8939607a42d7fddacc07e26e14d4 2017-12-27 17:44 +0000 [0b399013c6] Graham Mainwaring * app_followme: Add a prompt to be read when a call is connected This patch adds the ability to configure a prompt which will be read to the "winner" who pressed 1 (or the configured value) and received the call. ASTERISK-24372 #close Change-Id: I6ec1c6c883347f7d1e1f597189544993c8d65272 2018-01-17 00:28 +0000 [22edb10c44] Corey Farrell * loader: Miscellaneous fixes. * Remove comment about lazy load. * Improve message about module already being loaded and running. * Handle allocation error in add_to_load_order. * Dead code elimination from modules_shutdown. Change-Id: I22261599c46d0f416e568910ec9502f45143197f 2018-01-17 08:36 +0000 [9ffa1f4301] Alexander Traud * BuildSystem: Use the detected name for MD5 everywhere. Affacted the (automatic) download script for external modules: ./build_tools/download_externals ASTERISK-27596 Change-Id: If4c3176f7bf58df32fec6e02a659f1a78d57cf4b 2018-01-17 07:11 +0000 [de65fd11fe] Alexander Traud * BuildSystem: Invoke install not in GNU but POSIX style. ASTERISK-27594 Change-Id: Iaaa6a19d2fe031dffcba441d0502a7ea65c93cb3 2018-01-17 06:47 +0000 [72845d54f0] Alexander Traud * BuildSystem: In OpenBSD, xmlstarlet is xml. ASTERISK-27593 Change-Id: I1c7087f7f7582e40b3312c690d912c9a86466805 2018-01-17 02:51 +0000 [985834607b] Alexander Traud * BuildSystem: Detect external library Lua in version 5.3. On some platforms, you decide to go for one specific version of Lua, for example in OpenBSD. On other platforms, you are able to install several versions side-by-side, for example in Ubuntu and Fedora. Asterisk already works with Lua 5.3. Asterisk failed to detect Lua 5.3 on those platforms which allow several versions. ASTERISK-27592 Change-Id: If7a4b395d844a464e9a1f4f626c5bff4ee67eed8 2018-01-16 08:32 +0000 [1bbd9f4a47] Richard Mudgett * taskprocessor.c: Increase the number of tps_singletons container buckets. Since v12 the number of taskprocessors in the system has increased a lot. Small systems can easily have over a hundred and larger systems can have thousands. Most uses of the tps_singletons container deal with creating and destroying the taskprocessors. However, the pjsip distributor looks up taskprocessors/serializers by name frequently. It needs to find the serializer for incoming SIP responses to distribute them to the appropriate serializer. Change-Id: Ice0603606614ba49f7c0c316c524735c064e7e43 2018-01-16 08:20 +0000 [fbd0667c84] George Joseph * pjproject_bundled: Prevent crash on bad outgoing header We still need to figure out how a bad header is getting into the outgoing message but this patch to pjproject prevents attempting to print that header and causing a crash. For several users, this crash happens when sending 183 progress messages. ASTERISK-26832 Reported by: Ross Beer, Jan Rozhon Change-Id: Ie5c5a921c890c843587763e7f33f987dfe66bd16 2018-01-16 06:34 +0000 [637bd26575] Alexander Traud * BuildSystem: Avoid $EUID and use id -u instead. Makefile included a call to ${EUID} which requires the shell bash. To keep compatibility with other shells like dash or ksh, use id -u instead. ASTERISK-27589 Change-Id: Ia6e74f5bc9aab4e6dc62b7439f647b7964e6f657 2018-01-15 18:03 +0000 [b0a78bdc3e] Richard Mudgett * cel_odbc.c: Fix menuslect module description display. Asterisk's makefile for menuselect has a very simple source file parsing script that looks for AST_MODULE_INFO lines to extract the quoted string as a module description. If it does not find a quoted string it uses the whole line as the description. Change-Id: I80f13a63818e4e28d683639a94a4dfaea405c1d5 2018-01-15 01:41 +0000 [c0a4a939cc] Yasuhiko Kamata * chan_sip: 3PCC patch for AMI "SIPnotify" A patch for sending in-dialog SIP NOTIFY message with "SIPnotify" AMI action. ASTERISK-27461 (created patch for 13 branch manually due to merge conflict) Change-Id: I255067f02e2ce22c4b244f12134b9a48d210c22a 2018-01-13 13:49 +0000 [948b852f48] George Joseph * config_transport: Enable TCP_NODELAY on TLS transports We did this for TCP transports already but I'm not sure why we didn't do it for TLS transports. ASTERISK_27474 #not_final_fix Change-Id: I5b1ef4b882f7b859e718236686b7898751dbb262 2018-01-12 18:37 +0000 [f01bac230d] Corey Farrell * res_stasis_recording: Allow symbolic links in configured recordings dir. If any component of ast_config_AST_RECORDING_DIR is a symbolic link we would incorrectly assume the ARI user was trying to escape the recording path. Create additional check to check the recording directory's realpath, only deny access if both do not match. This is needed by the testsuite when run by 'run-local'. Change-Id: I9145e841865edadcb5f75cead3471ad06bbb56c0 2018-01-12 12:00 +0000 [97b574c927] Corey Farrell * menuselect: Remove unused dev-mode option TRACE_FRAMES. ASTERISK-27575 #close Change-Id: Ica3a522892afed7a96816a5ecf140e1671f46ad4 2018-01-12 03:50 +0000 [f07b0df627] Alexander Traud * res_config_pgsql: Avoid typecasting an int to unsigned char. clang 5.0 warned about this. ASTERISK-27576 Change-Id: If41f400a51973c06cdb9b75462e535b616bfe385 2018-01-12 03:17 +0000 [659c44f5fb] Alexander Traud * BuildSystem: Really do not pass unknown-warning options to the compiler. When an older GCC version is called with a too new warning option, GCC exited with an error and Asterisk was not built. Therefore, the configure script tests the installed compiler whether it supports that warning option. If not, Asterisk does not pass it to the installed compiler. However, some compilers (like clang) do not exit (error) but give just a warning in such a case. Because the compiler did not exit, Asterisk passed the unknown-warning option. ASTERISK-27560 Change-Id: Ia9d148e689c173df4e91699113605dab2de36038 2018-01-12 04:27 +0000 [45008c604d] Alexander Traud * app_osplookup.c: Avoid two format truncations. GCC 7 warned about this. ASTERISK-27578 Change-Id: I4a00458dbe9b575ef04338b6a7852272745e1552 2018-01-12 04:03 +0000 [d53a312a03] Alexander Traud * chan_ooh323: Avoid typecasting an int to unsigned short. clang 5.0 warned about this. ASTERISK-27577 Change-Id: I898fe4255023138a9e8b579fe4482fcf582f2b78 2018-01-05 15:17 +0000 [1d625a7428] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: I0818b6e42631be1b69237e2b41d3415275693e53 2017-12-22 19:50 +0000 [f35960d55b] Richard Mudgett * res_pjsip: Split type=identify to IP address and SIP header matching priorities The type=identify endpoint identification method can match by IP address and by SIP header. However, the SIP header matching has limited usefulness because you cannot specify the SIP header matching priority relative to the IP address matching. All the matching happens at the same priority and the order of evaluating the identify sections is indeterminate. e.g., If you had two type=identify sections where one matches by IP address for endpoint alice and the other matches by SIP header for endpoint bob then you couldn't predict which endpoint is matched when a request comes in that matches both. * Extract the SIP header matching criteria into its own "header" endpoint identification method so the user can specify the relative priority of the SIP header and the IP address matching criteria in the global endpoint_identifier_order option. The "ip" endpoint identification method now only matches by IP address. ASTERISK-27491 Change-Id: I9df142a575b7e1e3471b7cda5d3ea156cef08095 2018-01-11 08:09 +0000 [90b2dc1450] Tzafrir Cohen * Ignore quilt .pc directory, used in deb packaging Debian packaging uses quilt to manage patches. Book-keeping for them is done using quilt (either directly, or in a compatible format), and tracked in the directory .pc . Change-Id: I22c90f3d7ab8918e6216e7b686de6fa0e1fdaa7b Signed-off-by: Tzafrir Cohen 2018-01-09 11:23 +0000 [608112ced3] Corey Farrell * stasis: Remove silly usage of RAII_VAR. Change-Id: Ib11193531e797bcb16bba560a408eab155f706d1 2018-01-09 11:16 +0000 [b7c25740fa] Corey Farrell * stasis_bridges: Remove silly usage of RAII_VAR. Change-Id: I0fa7ab05454f183dc4ff10e26d18776d2b0fcf1f 2018-01-03 17:26 +0000 [2e09ed3b18] Richard Mudgett * res_pjsip.c: Update the endpoint identification documentation. * Endpoint identify_by documentation. * IP/Header endpoint identifier documentation. Change-Id: Id92f00b495acca7be945daf749d2abd7f76a0b5a 2018-01-03 15:20 +0000 [dd6dee7e50] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Remove unnecessary requirement. The requirement that "ip" must be in the endpoint identify_by list to allow the type=identify method to identify the endpoint is not necessary. The "ip" identifier method can match one and only one endpoint. To even work, the "ip" identifier method configuration must explicitly specify the identified endpoint. Therefore, why bother configuring the type=identify identifier in the first place? The requirement only adds the potential for configuration errors for no benefit. Even worse, those configuration errors cannot be detected when the configuration loads. The requirement was introduced with the ASTERISK_27206 patch. * Remove the code change that enforces the requiremnt. Listing the "ip" method in the identify_by value is simply documentation. Change-Id: Ia057f92a33fb5d9f51dc5d5692e3d5ee1a6f2c11 2018-01-05 19:03 +0000 [96040fa6bb] Richard Mudgett * res_pjsip.c: Fix ident_to_str() and refactor ident_handler(). * Extracted sip_endpoint_identifier_type2str() and sip_endpoint_identifier_str2type() to simplify the calling functions. * Fixed pjsip_configuration.c:ident_to_str() building the endpoint's identify_by value string. Change-Id: Ide876768a8d5d828b12052e2a75008b0563fc509 2018-01-04 17:04 +0000 [a8a2f39f04] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Allow multiple IdentifyDetail AMI events. The AMI PJSIPShowEndpoint action could only list one IdentifyDetail AMI event per endpoint. However, there is no reason that multiple type=identify sections cannot identify the same endpoint. * Reworked format_ami_endpoint_identify() to generate as many IdentifyDetail AMI events as there are matching identifiers. Change-Id: Ie146792aef72d78e05416ab5b27bc552a30399db 2018-01-09 11:10 +0000 [dedf0ff2bf] Corey Farrell * stasis_cache: Remove silly usage of RAII_VAR. Change-Id: Ifa95e5801c949df296c7e4376347730fb0ed52ef 2018-01-09 11:09 +0000 [8a6b3537b1] Corey Farrell * stasis_cache_pattern: Remove silly usage of RAII_VAR. Change-Id: Ic98a51f555062cd863b6db3f8d76065943a9dea3 2018-01-09 10:57 +0000 [909e642918] Corey Farrell * stasis_endpoints: Remove silly usage of RAII_VAR. Change-Id: Ic099dc552f36c353c89783a4bcfd09f010432733 2018-01-09 10:55 +0000 [bd11159dbc] Corey Farrell * stasis_message_router: Remove silly usage of RAII_VAR. Change-Id: I50d6ae230920e0b878ed9cc8f79eef746e06701d 2018-01-09 10:53 +0000 [975a38e524] Corey Farrell * stasis_system: Remove silly usage of RAII_VAR. Change-Id: Iedbe5656cee68cd3a96a953558764aa02d4a0c3b 2018-01-05 05:51 +0000 [b45fb3a6ec] Alexander Traud * translate: Avoid absolute value on unsigned substraction. ast_format_get_sample_rate(.) returns an unsigned type. The difference of a substraction between two unsigned types does not get implicitly converted to a signed type. Therefore, using abs(.) did not make sense. ASTERISK-27549 Change-Id: Ib904d9ee0d46b6fdd1476fbc464fbbf813304017 2018-01-09 08:22 +0000 [1da8846ca7] Sean Bright * Revert "codec_opus: Make libcurl a dependency in menuselect" This reverts commit 028f4320de60a204e457ad606ab0a3318493b431. Change-Id: Ieb91f825cb55202a937f5361c01d356e7662b70c 2018-01-08 18:47 +0000 [c67eb7031b] Corey Farrell * app_confbridge: Fix NULL check in action_kick_last. The check for last_user == NULL needs to happen before we dereference the variable, previously it was possible for us to check flags of a NULL last_user. Change-Id: I274f737aa8af9d2d53e4a78cdd7ad57561003945 2018-01-06 02:17 +0000 [17480f6ea4] Corey Farrell * res_stasis: Reduce RAII_VAR usage. In addition to being a micro-optimization (RAII_VAR has overhead), this change improves output of REF_DEBUG. Unfortunately when RAII_VAR calls ao2_cleanup it does so from a generated _dtor_varname function. For example this caused _dtor_app to release a reference instead of __stasis_app_unregister. Change-Id: I4ce67120583a446babf9adeec678b71d37fcd9e5 2018-01-07 20:21 +0000 [c1acc4f364] Corey Farrell * res_stasis: Fix app_is_subscribed_bridge_id. Instead of searching for bridge_id provided in an argument this function always searched for BRIDGE_ALL first. Rewrite this function to work like the similar functions for channel and endpoint functions. Change-Id: Ib5caca69e11727c5c8a7284a1d00621f40f1e60a 2018-01-05 07:58 +0000 [da1a9f392a] Alexander Traud * General: Silence modules on (un)load. Some (normally optional) modules created notices, warnings, and even errors in normal situations like (un)load. This cluttered the command-line interface (CLI) on start and while stopping gracefully. However, when an user went for the script './contrib/scripts/install_prereq', those modules get compiled-in because their prerequisites were met at compile time. Furthermore, because of ASTERISK_27475, the former talkative module 'res_curl' is built as side-effect. ASTERISK-27553 Change-Id: I9f105f46d72553994e820679bfde3478a551b281 2018-01-06 15:40 +0000 [aa52c52b21] Alexander Traud * BuildSystem: Really do not pass unknown-warning options to the compiler. When an older GCC version is called with a too new warning option, GCC exited with an error and Asterisk was not built. Therefore, the configure script tests the installed compiler whether it supports that warning option. If not, Asterisk does not pass it to the installed compiler. However, some compilers (like clang) do not exit (error) but give just a warning in such a case. Because the compiler did not exit, Asterisk passed the unknown-warning option. ASTERISK-27560 Change-Id: Ia9b7747f649b27ff5e9f75c3db3fee4fe7a29621 2018-01-06 01:42 +0000 [9865e689d2] Alexander Traud * General: Avoid implicit conversion to char when changes value to negative. clang 5.0 warned about this. ASTERISK-27557 Change-Id: I7cceaa88e147cbdf81a3a7beec5c1c20210fa41e 2018-01-06 06:45 +0000 [a68da30069] Alexander Traud * editline: Avoid comparison between pointer and zero character constant. gcc 7.2 warned about this. ASTERISK-27559 Change-Id: I48960dda9cf0a11b6a9426f775e632363f8caa74 2018-01-06 05:01 +0000 [e60135efd4] Alexander Traud * codec_gsm: Avoid shifting a negative signed value. clang 5.0 warned about this. ASTERISK-27558 Change-Id: Icc452ecb0d86bbeba78dae768cc472ec540699df 2018-01-04 12:23 +0000 [ba57c03740] Richard Mudgett * res_pjsip_endpoint_identifier_ip.c: Fix apply identify validation. The ip_identify_apply() did not validate the configuration for simple static configuration errors or deal well with address resolution errors. * Added missing configuration validation checks. * Fixed address resolution error handling. * Demoted an error message to a warning since it does not fail applying the identify object configuration. Change-Id: I8b519607263fe88e8ce964f526a45359fd362b6e 2018-01-04 17:42 +0000 [0feca9bc18] Richard Mudgett * res_pjsip.c: Fix endpoint identifier registration name search. If an endpoint identifier name in the endpoint_identifier_order list is a prefix to the identifier we are registering, we could install it in the wrong position of the list. Assuming endpoint_identifier_order=username,ip,anonymous then registering the "ip_only" identifier would put the identifier in the wrong position of the priority list. * Fix incorrect strncmp() string prefix matching. Change-Id: Ib8819ec4b811da8a27419fd93528c54d34f01484 2018-01-05 03:33 +0000 [440fb4d02b] Alexander Traud * BuildSystem: Find ptlib-config on Debian/Ubuntu. The current configure script requires that tool when libpt-dev is installed. libpt-dev was installed by libopenh323-dev, bacause you wanted to go for H.323 based channel drivers. ASTERISK-25329 Change-Id: I9c6ab78b7246c21536e1d252dcbffe682f63f83d 2018-01-05 06:42 +0000 [dda0ab236d] Alexander Traud * chan_ooh323: Limit outgoinglimit to positive values as intended. ASTERISK-27552 Change-Id: Ifbf9d51e7374ca2e8b27ec568f6770050fc1a854 2018-01-05 06:19 +0000 [c11999f140] Alexander Traud * ooh323cDriver: Fix typo in header guard. ASTERISK-27551 Change-Id: I39ff66031e3373e895e2bc47b23a5e860ea4e012 2018-01-05 03:36 +0000 [cee6de4e63] Alexander Traud * BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf. ASTERISK-26046 Change-Id: I48f05698c235f709225b92bec5aa260fb57d69d1 2018-01-04 16:07 +0000 [0f141351f9] Corey Farrell * pbx: Prevent execution of NULL pointer. pbx_extension_helper has a check for q->swo.exec == NULL but it doesn't actually return so we would still run the function. Fix the return. Move the 'int res' variable into the only scope which uses it. Change-Id: I0693af921fdc7f56b6a72a21fb816ed08b960a69 2018-01-04 09:30 +0000 [d73a3a1764] Corey Farrell * res_pjsip_history: Add missing unlock to CLI command. Change-Id: I872060a30543776a176a316309602d924a23eb29 2018-01-04 09:27 +0000 [ec74570598] Corey Farrell * aco: Fix NULL dereference in error path. Change-Id: Id505167cf0f9414a3c144fa2c1e181a2cf288694 2018-01-03 19:07 +0000 [74b6fafbe6] Corey Farrell * func_odbc: Add missing unlock's to acf_odbc_read. Change-Id: I828329ecbd252ae8f27a369a046d2b03102b07c6 2018-01-03 10:41 +0000 [d25a9bc7d3] Kevin Harwell * res_pjsip_session: Check if sequence header is missing The pjsip_msg_find_hdr function can return NULL. This patch adds a check when searching for the sequence header to make sure a NULL pointer is never de-referenced. Change-Id: I19af23aeeded65be016be92360e8cb7ffe51fad2 2018-01-02 07:36 +0000 [00b0c67144] Tzafrir Cohen * cdr: submit: fix logic of test for batch mode ASTERISK-27539 #close Change-Id: I33cdf329d2bb4486dcae975c450f6aae94c515f7 2018-01-02 00:26 +0000 [dd528c53c0] Corey Farrell * aco: Add missing aco_option_type_string for OPT_TIMELEN_T. ASTERISK-27117 Change-Id: I8f6c34bb30830be9f7a40823723eb4dcaaa91c61 2017-12-29 22:59 +0000 [5b395a7b97] Corey Farrell * core: Use macros to generate ao2_container callbacks where possible. This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where possible in the Asterisk core. This removes CMP_STOP from the result of CMP_FN callbacks for the following structure types: * ast_bucket_metadata * ast_bucket_scheme * generic_monitor_instance_list (ccss.c) * named_acl Change-Id: Ide4c1449a894bce70dea1fef664dade9b57578f1 2017-12-31 10:26 +0000 [d2c836d24a] Sean Bright * ice: Increase foundation buffer size Per RFC 5245, the foundation specified with an ICE candidate can be up to 32 characters but we are only allowing for 31. ASTERISK-27498 #close Reported by: Michele Prà Change-Id: I05ce7a5952721a76a2b4c90366168022558dc7cf 2017-12-29 22:03 +0000 [b275b0a84f] Corey Farrell * astobj2: Create case-insensitive variants of container function macros. * AO2_STRING_FIELD_CASE_HASH_FN * AO2_STRING_FIELD_CASE_CMP_FN * AO2_STRING_FIELD_CASE_SORT_FN Change-Id: I11af8c6a0c43380a42732553f519c667abb842cf 2017-12-28 13:27 +0000 [751fd9b628] Richard Mudgett * stasis_channels.c: Misc cleanup. * Use current OBJ_SEARCH_xxx defines instead of the deprecated versions. * Fix hash_cb and cmp_cb container functions to correctly use the OBJ_SEARCH_xxx values. * Remove incorrect usage of CMP_STOP. Most uses in the system have no effect. This allows the collapse of channel_role_single_cmp_cb() and channel_role_multi_cmp_cb() into channel_role_cmp_cb(). * Remove unnecessary usage of RAII_VAR(). Change-Id: I02c405518cab22aa2a082b61e2353bf7cd629a70 2017-12-13 15:43 +0000 [bae301c18c] Sean Bright * cdr_mysql: Make sure connection charset is always set When the MYSQL_OPT_RECONNECT option is enabled, the MySQL client API will transparently reconnect when it needs to. Ideally this simplifies our code, but when this reconnection occurs all connection state is lost. Because we are not notified that this has happened, we don't know to set our character set again (with "SET NAMES 'xyz'"). Rather than calling SET NAMES, we instead set the MYSQL_SET_CHARSET_NAME option which will do it for us under the hood on each connect. This option has been present in the MySQL C API for at least 15 years, so it should be safe for most installations. I also snuck a few other changes into this patch: * Default the MySQL port to MYSQL_PORT (3306) instead of 0 if it's not defined. * Fix some erroneous and/or silly checks on the contents of the configuration ast_str values. ASTERISK-27366 #close Reported by: Halil İbrahim YILDIZ Change-Id: I36bf8dc5d5f83584e803b3b1a151dea9396ab8f5 2017-12-27 20:48 +0000 [5de8f49294] Richard Mudgett * manager.c: Update AMI Status event documentation The AMI Status event had linkedid listed twice and was missing the effective connected line name and number headers. NOTE: The linkedid and other standard channel snapshot fields in the XML documentation are part of the XML template defined in doc/appdocsxml.xslt. * Cached the effective connected line party id so it doesn't get calculated four times. Change-Id: I004c4c4f9e7b40ef55035c831702721bec82496c 2017-12-27 22:36 +0000 [9f1cfbafca] Richard Mudgett * bridge_native_rtp.c: Fix reentrancy framehook crash. If two channels enter different native rtp bridges at the same time it is possible that the framehook interface data pointer can be corrupted because the struct variable was declared static. * Fixed the reentrancy corruption by changing the framehook interface struct static variable to a stack local variable. * Moved the hook.data assignment outside of the channel lock. It did not need the lock's protection. It probably was giving a false sense of security. The testsuite channels/pjsip/basic_calls/two_parties/nominal/alice_initiated/bob_hangs_up test caught this with MALLOC_DEBUG and DO_CRASH enabled. Change-Id: If9e35b97d19209b0f984941c1d8eb5f7c55eea91 2017-12-27 20:22 +0000 [eead5d0c30] Richard Mudgett * func_channel.c: Update MASTER_CHANNEL documentation Be more explicit in what is meant by the master channel to eliminate misunderstanding. ASTERISK-23133 Change-Id: I453bcaf4b99404a5a3e345dbf093ac6c1afcfc72 2017-12-27 19:27 +0000 [0bdddbe526] Corey Farrell * menuselect: Fix check for running configure. menuselect/Makefile checks that autoconfig.h and makeopts were newer than the '.in' files. Unfortunately running ./configure does not touch autoconfig.h unless the contents will change. Instead of looking at autoconfig.h we just need to ensure that makeopts is newer than configure. Also make change to configure.ac so bootstrap.sh doesn't re-add the extra trailing line-feed. Change-Id: Ief1f831d6717007f9cebb668c14e92782cd2b794 2017-12-25 20:39 +0000 [d62c87bb8d] Corey Farrell * cdr: Missing NULL check and unlock. * handle_dial_message: Missing a check for NULL peer. * ast_cdr_register: Missing unlock on allocation failure. ast_cdr_register is fixed by reordering so the new structure is allocated and initialized before locking the list. Change-Id: I5799b99270d1a7a716a555c31ac85f4b00ce8686 2017-12-23 22:51 +0000 [92fb393cab] Corey Farrell * loader: Add volatile to resource_being_loaded. Some compiler optimizers seem to assume that dlopen will not use __attribute__((constructor)) functions to call back to the program. This was causing resource_being_loaded to be optimized away completely. ASTERISK-27531 #close Tested By: abelbeck Change-Id: If17a3b889e06811a0e7119f0539d052494d6ece9 2017-12-20 16:17 +0000 [53799318bc] Kevin Harwell * AST-2017-014: res_pjsip - Missing contact header can cause crash Those SIP messages that create dialogs require a contact header to be present. If the contact header was missing from the message it could cause Asterisk to crash. This patch checks to make sure SIP messages that create a dialog contain the contact header. If the message does not and it is required Asterisk now returns a "400 Missing Contact header" response. Also added NULL checks when retrieving the contact header that were missing as a "just in case". ASTERISK-27480 #close Change-Id: I1810db87683fc637a9e3e1384a746037fec20afe 2017-12-22 08:14 +0000 [ce3d56920b] Sean Bright * Remove as much trailing whitespace as possible. Change-Id: I873c1c6d00f447269bd841494459efccdd2c19c0 2017-12-21 09:51 +0000 [b4ae112e3a] Sean Bright * Fix some invalid Unicode characters configs/samples/minivm.conf.sample contains invalid UTF-8, but that appears to be intentional. Change-Id: I7b1e0d332f3380fd0425962a3c9c55f9b200c8cc 2017-12-20 21:11 +0000 [719e8eee03] Corey Farrell * app_voicemail: Fix file copy error handling. Fix error where input/output file descriptors would be closed multiple times. Change-Id: Iba5140b60cb7de79e3d5d92be3c256947aa99da9 2017-12-20 14:54 +0000 [6892c13a2c] Sean Bright * docs: Remove old API changes documentation Change-Id: I1bc7957121cc7ae27dca04acc3613f4e1858476a 2017-12-20 11:14 +0000 [82b6ba976f] Corey Farrell * Fix Common Typo's. Fix instances of: * Retreive * Recieve * other then * different then * Repeated words ("the the", "an an", "and and", etc). * othterwise, teh ASTERISK-24198 #close Change-Id: I3809a9c113b92fd9d0d9f9bac98e9c66dc8b2d31 2017-12-20 11:30 +0000 [4f45748f52] Richard Mudgett * manager.h: Bump AMI version Change-Id: I62e6ddeb261ef012687e1fb6734c554e2499b6bf 2017-12-20 00:53 +0000 [6b3188fb8c] Corey Farrell * app_festival: Fix fd leak on connection failure. Change-Id: If5efaddcf735ff7d17e55c36cc1388946cee9e0f 2017-12-20 10:23 +0000 [be3800c49d] Corey Farrell * bridge: Old channel video source not set to NULL after unref. The bridge holds onto the old channel video source after it's been released. This can lead to use after free errors. ASTERISK-27229 #close Change-Id: Ib2dab61677dd8a21f7ad53cdc9b8ca93297838b3 2017-12-20 10:13 +0000 [d05ec48145] Corey Farrell * core: Fix unused variable error in handle_show_sysinfo. Apparently in OSX it's possible for OSX to HAVE_SYSCTL but not HAVE_SYSINFO or HAVE_SWAPCTL. In this case freeswap caused an unused variable error. ASTERISK-26563 #close Change-Id: I8ec5b1897b786cc1abaf62264aa75039eea05510 2017-12-18 20:12 +0000 [9adffca9c7] Corey Farrell * CLI: Address multiple issues. * listen uses the variable `s` for the result from ast_poll() then overwrites it with the result of accept(). Create a separate variable poll_result to avoid confusion since ast_poll does not return a file descriptor. * Resolve fd leak that would occur if setsockopt failed in listen. * Reserve an extra byte while processing completion results from remote daemon. This fixes a bug where completion processing used strstr() on a string that was not '\0' terminated. This was no risk to the Asterisk daemon, the bug was only reachable the remote console process. * Resolve leak in handle_showchan when the channel is not found. * Multiple leaks and a deadlock in pbx_config CLI completion. * Fix leaks in "manager show command". Change-Id: I8f633ceb1714867ae30ef4e421858f77c14485a9 2017-12-19 14:15 +0000 [c38b750810] Aaron An * res_rtp_asterisk: Avoid close the rtp/rtcp fd twice. When RTCP-MUX enabled. rtp->s is the same as rtcp->s, check this before close the file descriptor. Close the FD twice will hangs the asterisk under heavy load. ASTERISK-27299 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: I870a072d73fd207463ac116ef97100addbc0820a 2017-12-16 07:51 +0000 [fef23297b7] Ivan Poddubny * bridge: Stop music on hold on adding an arbitrary channel to a bridge When a channel that is on hold gets added to a bridge by the Bridge AMI action or the dialplan application of the same name, music continues to play, causing "robotic sound". This commit adds a call to ast_moh_stop to stop the music. Also, it makes the AMI Park action use the right MOH class when the channel gets parked. Reported by: Zane Conkle ASTERISK-25079 #close Change-Id: I4b129c5a20c15e63968842460ac5a1a85903cf9f 2017-12-18 18:59 +0000 [0e5d8ad09b] Corey Farrell * chan_sip: Fix memory leaks. In change_redirecting_information variables we use ast_strlen_zero to see if a value should be saved. In the case where the value is not NULL but is a zero length string we leaked. handle_response_subscribe leaked a reference to the ccss monitor instance. Change-Id: Ib11444de69c3d5b2360a88ba2feb54d2c2e9f05f 2017-12-19 02:50 +0000 [fc86e58a5a] Oron Peled * chan_console: Use correct parameter for 'set active' chan_console supports multiple devices but the CLI only works on a single device. 'console set active' selects this device. Sadly that CLI picks the wrong command-line parameter and will only work for a device called 'active'. ASTERISK-27490 #close Change-Id: I2f0e5fe63db19845bee862575b739360797dc73d 2017-12-18 15:36 +0000 [d6b2f457d9] Corey Farrell * Remove constant conditionals (dead-code). Some variables are set and never changed, making them constant. This means that code in the 'false' block of the conditional is unreachable. In chan_skinny and res_config_ldap I used preprocessor directive `#if 0` as I'm unsure if the unreachable code could be enabled in the future. Change-Id: I62e2aac353d739fb3c983cf768933120f5fba059 2017-12-18 23:17 +0000 [381ed4f1cc] Corey Farrell * core: Fix multiple trivial issues in the core. * Fix small leaks in from error condition in translate.c. * Check new file descriptor is less than 0, not less than or equal. Change-Id: Id7782775486175c739e0c4bf3ea5e17e3f452a99 2017-12-18 19:47 +0000 [67b5a4e616] Corey Farrell * main/app: Fix leaks. * ast_linear_stream would leak a file descriptor if it failed to allocate lin. * ast_control_tone leaked zone and ts if ast_playtones_start failed. Additionally added whitespace to ast_linear_stream, pulled assignments out of conditionals for improved readability. Change-Id: I6d1a10cf9161b1529d939b9b2d63ea36d395b657 2017-12-18 19:19 +0000 [3782230e00] Corey Farrell * func_callerid: Initialize app argument structures. This module uses AST_DEFINE_APP_ARGS_TYPE to define struct's instead of directly using AST_DECLARE_APP_ARGS. Initialize the variables declared in this way. Change-Id: If97fbdd8d63a204e2efd498a192effc14e90fb31 2017-12-18 18:04 +0000 [1d636f4afa] Corey Farrell * app_voicemail: Fix memory management issues. * mwi_sub_event_cb: mwist leaked on separate_mailbox failure. * add_email_attachment: A reference to sox_gain_tmpdir was used after the storage was out of scope. Change-Id: I6282c542ff7b82fa091177a912d11234a8b00a30 2015-11-11 17:20 +0000 [5801917a75] Richard Mudgett * ast_json_pack(): Use safer json ref mechanism. Change-Id: I49204db2e57ae96eee43909c18ed007c09ac817e 2015-11-11 16:52 +0000 [46ed7afdd9] Richard Mudgett * rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage. Change-Id: I58a22c2ca82e91d7537409b7b3af2d735827a54d 2017-12-18 12:23 +0000 [5cdc65cf1e] Corey Farrell * CLI: Fix 'core set debug channel' completion bug. The completion generator is missing a return so typing "core set debug all off " causes the command to actually execute. Change-Id: Ibf6462088a74eee66967732b50445783ebefc20b 2017-12-18 08:25 +0000 [7f2df9e277] Joshua Colp * confbridge: Clarify mute sound documentation. The mute/unmute sounds are only played when the action is initiated using the DTMF menu. ASTERISK-24756 Change-Id: I55b3dd5bc166096bf5e2f547ddd0ce355f36e3dc 2017-12-18 06:36 +0000 [4cda942ebd] Joshua Colp * app_transfer: Remove LOCAL from documentation. The Local channel has never supported app_transfer from what I can see so remove it from the documentation. ASTERISK-25649 Change-Id: Icbcfe297f6f866285a26b3e9fd5c6d00fa22e0e9 2017-12-15 19:01 +0000 [a368ad9229] Richard Mudgett * chan_pjsip.c: Improve ast_request() diagnostic msgs. Attempting to dial PJSIP/endpoint when the endpoint doesn't exist and disable_multi_domain=no results in a misleading empty endpoint name message. The message should say the endpoint was not found. * Added missing endpoint not found message. * Added more information to the empty endpoint name msgs if available. * Eliminated RAII_VAR in request(). Change-Id: I21da85ebd62dcc32115b2ffcb5157416ebae51e4 2017-12-15 10:26 +0000 [b3b7367e6b] Corey Farrell * cdr: Minor optimizations. * bridge_candidate_process: remove SCOPED_AO2LOCK and return value. * handle_standard_bridge_enter_message: replace recursive call with goto statement. ASTERISK-24297 Change-Id: Id2eaa0822fb8dc799f63422bb3aa89de9d4ee2a2 2017-12-11 17:07 +0000 [8921b2581d] Corey Farrell * loader: Use vector to build apha sorted module lists. Change-Id: I9c519f4dec3cda98b2f34d314255a31d49a6a467 2017-11-21 00:28 +0000 [d5a7a98528] Corey Farrell * loader: Replace priority heap with vector. This is needed for future changes which will require being able to process the load priority out of order. Change-Id: Ia23421197f09789940510b03ebbbf3bf24d51bea 2017-11-20 23:10 +0000 [5e9d70ae5d] Corey Farrell * loader: Rework of load_dynamic_module. * Split off load_dlopen to perform actual dlopen, check results and log warnings when needed. * Use flags which minimize number of calls to dlopen required. First attempt always uses RTLD_GLOBAL when global_symbols_only is enabled, RTLD_LOCAL when it is not. This patch significantly reduces the number of dlopen's performed. With 299 modules my system ran dlopen 857 times before this patch, 655 times after this patch. Change-Id: Ib2c9903cfddcc01aed3e01c1e7fe4a3fb9af0f8b 2017-11-21 20:34 +0000 [4de95d4bf0] Corey Farrell * loader: Minor fix to module registration. This protects the module loader itself against crashing if dlopen is called on a module from outside loader.c. * Expand scope of lock inside ast_module_register to include reading of resource_being_loaded. * NULL check resource_being_loaded. * Set resource_being_loaded NULL as soon as dlopen returns. This fixes some error paths where it was not NULL'ed. * Create module_destroy function to deduplicate code from ast_module_unregister and modules_shutdown. * Resolve leak that occured if a module did not successfully register. * Simplify checking for successful registration. Change-Id: I40f07a315e55b92df4fc7faf525ed6d4f396e7d2 2016-10-06 01:29 +0000 [e3bd95f55c] Corey Farrell * chan_sip: Add security event for calls to invalid extension. Log a message to security events when an INVITE is received to an invalid extension. ASTERISK-25869 #close Change-Id: I0da40cd7c2206c825c2f0d4e172275df331fcc8f 2017-12-12 12:55 +0000 [501f4dcdd8] Corey Farrell * aco: Minimize use of regex. Remove nearly all use of regex from ACO users. Still remaining: * app_confbridge has a legitamate use of option name regex. * ast_sorcery_object_fields_register is implemented with regex, all callers use simple prefix based regex. I haven't decided the best way to fix this in both 13/15 and master. Change-Id: Ib5ed478218d8a661ace4d2eaaea98b59a897974b 2017-12-12 12:36 +0000 [7413bcbeb5] Corey Farrell * aco: Create ways to minimize use of regex. ACO uses regex in many situations where it is completely unneeded. In some cases this doubles the total processing performed by aco_process_config. * Create ACO_IGNORE category type for use in place of skip_category regex source string. * Create additional aco_category_op values to allow specifying category filter using either a single plain string or a NULL terminated array of plain strings. * Create ACO_PREFIX to allow matching option names to case insensitive prefixes. Change-Id: I66a920dcd8e2b0301f73f968016440a985e72821 2017-12-15 07:56 +0000 [8165115faa] Corey Farrell * res_smdi: Fix shutdown ref. When adding shutdown refs for OPTIONAL_API components I accidentally added it to the unload_module function in res_smdi. Move it to load_module. Change-Id: I2b9da38fbc11ef78ea23dbb2df92b684be7f647c 2017-12-14 18:55 +0000 [8338f3ec14] Sean Bright * res_hep: hepv3_is_loaded() should check if we are enabled res_hep_pjsip.so and res_hep_rtcp.so will still load and do a lot of unnecessary work even if 'enabled' is set to 'no' in hep.conf. Change-Id: I3eddfeea09c6b5bc7c641952ee0ae487fd09b64b 2017-12-14 15:27 +0000 [85dec2ae4f] Corey Farrell * res_clialiases: Fix completion pass-through. Never ignore contents of line when generating completion options. Change-Id: I74389efdfea154019d3b56a9f381610614c044c8 2017-12-11 18:20 +0000 [61e81338d9] Richard Mudgett * res_rtp_asterisk.c: Disable packet flood detection for video streams. We should not do flood detection on video RTP streams. Video RTP streams are very bursty by nature. They send out a burst of packets to update the video frame then wait for the next video frame update. Really only audio streams can be checked for flooding. The others are either bursty or don't have a set rate. * Added code to selectively disable packet flood detection for video RTP streams. ASTERISK-27440 Change-Id: I78031491a6e75c2d4b1e9c2462dc498fe9880a70 2017-12-14 12:14 +0000 [62e743e6a7] Sean Bright * res_musiconhold: Start playlist after initial announcement Reset the samples counter to zero when we are done playing an announcement so that we don't skip into the middle of the first file in the playlist. Also add the selected annoucement to the output of 'moh show classes.' ASTERISK-24329 #close Reported by: Thomas Frederiksen Change-Id: I2a5f986a31279c981592f49391409ebf38d6f6d0 2017-12-14 10:51 +0000 [74073c395b] Sean Bright * coverity: Fix warnings in res_smdi ASTERISK-19657 #close Reported by: Matt Jordan III, Esq. Change-Id: I59a5e6ef3e7d9e848bec1f4b40cb73321bc7956a 2017-12-14 10:22 +0000 [a1fcb7b5a6] Sean Bright * configs: Comment out and change IP of iax.conf [demo] This no longer appears to exist, so no sense in causing confusion. ASTERISK-27175 #close Reported by: Tzafrir Cohen Change-Id: Idde967924c69f6a741dc9a5ab7dacb44d22cf100 2017-12-13 14:26 +0000 [6d290f1880] George Joseph * README: Remove outdated references to tex docs Added links to the wiki to replace references to outdated tex docs. ASTERISK-27430 Reported by: Corey Farrell Change-Id: I5007e732b30bc7b63d124c530ae8857c89991209 2017-12-13 09:50 +0000 [dd72844e4d] Corey Farrell * CLI: Remove special handling of 'core set verbose' from rasterisk. rasterisk does not need to handle setting verbose levels locally, it should just tell the daemon what it wants and print what it is given. Just max out the verbose level on the local client so all filtering happens on the daemon. ASTERISK-20281 #close Change-Id: Ia305f75f1fc424a9169bfa30ef70d626ace2c8a8 2017-11-30 10:12 +0000 [5705e8ae0e] Joshua Colp * AST-2017-012: Place single RTCP report block at beginning of report. When the RTCP code was transitioned over to Stasis a code change was made to keep track of how many reports are present. This count controlled where report blocks were placed in the RTCP report. If a compound RTCP packet was received this logic would incorrectly place a report block in the wrong location resulting in a write to an invalid location. This change removes this counting logic and always places the report block at the first position. If in the future multiple reports are supported the logic can be extended but for now keeping a count serves no purpose. ASTERISK-27382 ASTERISK-27429 Change-Id: Iad6c8a9985c4b608ef493e19c421211615485116 2017-12-06 08:24 +0000 [7a68faeb1d] Joshua Colp * pjsip: Ignore state changes from old transactions. When we fail over to a new target we create a new transaction and it becomes the current INVITE transaction. This does not prevent the previous transaction from raising state changes and causing the session to be prematurely disconnected if a transport error occurs immediately. This change backports a fix from PJSIP that eliminates the incorrect state change and reduces when they would be raised in the first place. ASTERISK-27408 Change-Id: Id22d087591782eee31311753d11e7eca4b95ef34 2017-12-12 15:38 +0000 [7ffc41d19f] Ivan Poddubny * app_queue: Fix extension state subscriptions removed on dialplan reload The approach with having a single global subscription to all extension state changes has one issue: dynamically created hints don't have any watchers and are therefore garbage collected on the first dialplan reload. This change creates a state subscription for every queue member with a hint as state_interface, thus increasing the count of watches for hints, so they are not destroyed prematurely anymore. There are 2 side effects: 1. The state change callback in app_queue is not executed when there are no members referring to the extension. 2. The callback is called multiple times for the same hint if it's associated with more than one queue member. Reported by: Steven T. Wheeler ASTERISK-18411 #close Change-Id: I4956af2136ea2a7f110ac9272eae5f6e676d8f89 2017-12-12 15:28 +0000 [e1a358a6e4] Sean Bright * chan_sip: Don't send trailing \0 on keep alive packets This is a partial fix for ASTERISK~25817 but does not address the comments regarding RFC 5626. Change-Id: I227e2d10c0035bbfa1c6e46ae2318fd1122d8420 2017-12-12 15:19 +0000 [ce2c89ce68] Dwayne Hubbard * chan_sip: Don't crash in Dial on invalid destination Stripping the DNID in a SIP dial string can result in attempting to call the argument parsing macros on an empty string, causing a crash. ASTERISK-26131 #close Reported by: Dwayne Hubbard Patches: dw-asterisk-master-dnid-crash.patch (license #6257) patch uploaded by Dwayne Hubbard Change-Id: Ib84c1f740a9ec0539d582b09d847fc85ddca1c5e 2017-12-12 15:16 +0000 [6632f61153] Corey Farrell * menuselect: Tweak check for recently run configure. Recently menuselect has randomly produced an error stating that configure was just run and make had to be restarted. I believe this is due to an incorrect menuselect/Makefile rule. The original rule produced an error if makeopts or autoconfig.h were older than makeopts.in or autoconfig.h.in. I believe this can create an issue if makeopts is older than autoconfig.h.in or if autoconfig.h is older than makeopts.in. The new rules compare files independently. Change-Id: Ibca155035fa1392c95e33cbf25f257902abba17b 2017-12-07 17:51 +0000 [73b3390dbe] Richard Mudgett * chan_pjsip/res_pjsip: Add CHANNEL(pjsip,request_uri) This patch does three things associated with the initial incoming INVITE request URI. 1) Add access to the full initial incoming INVITE request URI. 2) We were not setting DNID on incoming PJSIP channels. The DNID is the user portion of the initial incoming INVITE Request-URI. The value is accessed by reading CALLERID(dnid). 3) Fix CHANNEL(pjsip,target_uri) documentation. * The initial incoming INVITE request URI is now available using CHANNEL(pjsip,request_uri). * Set the DNID on PJSIP channel creation so CALLERID(dnid) can return the initial incoming INVITE request URI user portion. * CHANNEL(pjsip,target_uri) now correctly documents that the target URI is the contact URI. * Refactored print_escaped_uri() out of channel_read_pjsip() to handle pjsip_uri_print() error condition when the buffer is too small. ASTERISK-27478 Change-Id: I512e60d1f162395c946451becb37af3333337b33 2017-12-12 09:28 +0000 [ca448bf150] Sean Bright * res_pjsip: Add TLSv1.1 and TLSv1.2 support Support for these protocols was added in the same commit as the 'proto' field, so we can safely use the same ./configure check. For reference: https://trac.pjsip.org/repos/changeset/4968 Change-Id: Icf4975d785d6bfb8f30ac7ffa695a0adf9382dac 2017-12-12 08:06 +0000 [d9b932a455] Sean Bright * res_pjsip: Assign support levels to a few modules Change-Id: I51f6945c4023cb93fc7b87be5ab4c50e9e6ee27d 2017-12-09 00:35 +0000 [4decf4e492] Corey Farrell * CLI: Fix 'core show sysinfo' function ordering. Handle CLI initialization before any processing occurs. Change-Id: I598b911d2e409214bbdfd0ba0882be1d602d221c 2017-12-08 12:04 +0000 [28eddc7ea6] Richard Mudgett * stasis_channels.c: Don't set channel snapshot caller_dnid twice. Change-Id: Ib8d45bbdfbda81e65045f6dff874d189b74e5471 2017-12-11 09:45 +0000 [028f4320de] Sean Bright * codec_opus: Make libcurl a dependency in menuselect ASTERISK-27475 #close Change-Id: If7384bc6ed002ef140dec69798d14c52b7cfd800 2017-12-08 12:48 +0000 [4838557132] Sean Bright * pjsip: Improve CLI completion performance Use the new ast_cli_completion_add() function to improve completion performance for commands like 'pjsip show endpoint.' Change-Id: I76d802294d2ac1766110dc75f7d117c8541ce348 2017-12-07 14:19 +0000 [a4b291029f] Sean Bright * astdb: Improve prefix searches in astdb Using the LIKE operator requires a full table scan of 'astdb', whereas a comparison operation is able to use the primary key index. This patch adds a new function to the AstDB API for quick prefix matches and updates res_sorcery_astdb to utilize it. This showed substantial performance improvement in my test environment. Related to ASTERISK~26806, but does not completely resolve it. Change-Id: I7d37f9ba2aea139dabf2ca72d31fbe34bd9b2fa1 2017-12-08 18:19 +0000 [9fc4f10e0e] Corey Farrell * loader: Refactor resource_name_match. Optimize resource_name_match. This change eliminates use of ast_strdupa, instead verifying that both basename's are the same length, then using strncasecmp. Change-Id: I477275c0e954c99d74be5abfc8bb6545b04e5a3d 2017-12-08 14:58 +0000 [c3bc44fa1b] Sean Bright * pjsip_configuration: Add correct file header Change-Id: I25348c386a222bb704aff07f54375108a6402906 2017-12-07 09:52 +0000 [f726f11974] Sean Bright * utils: Add convenience function for setting fd flags There are many places in the code base where we ignore the return value of fcntl() when getting/setting file descriptior flags. This patch introduces a convenience function that allows setting or clearing file descriptor flags and will also log an error on failure for later analysis. Change-Id: I8b81901e1b1bd537ca632567cdb408931c6eded7 2017-12-07 19:41 +0000 [3d79c34350] Corey Farrell * res_stasis and res_speech: Fix load order. res_stasis was missing AST_MODFLAG_LOAD_ORDER. Set res_stasis and res_speech to start at (AST_MODPRI_APP_DEPEND - 1) so they are ready for dependent modules. Change-Id: I27f4f3810a95b6be8a5bfbf62be2ace6bfab6ff3 2017-12-07 18:22 +0000 [ecdccb8071] Kevin Harwell * pjsip_options: contacts sometimes not being updated on reload For both dynamic and static contacts it was possible that potential AOR changes were not being applied to all contacts. This was because the qualify and schedule code was only retrieving AOR's, and contacts with frequencies greater than zero. For instance the following could happen: and AOR/contact has a frequency of 5, it then gets set to 0, and then a reload occurs. All scheduled OPTIONS are stopped, a list of AOR's is retrieved with frequency > 0, but none are selected since in this scenario all are 0. The contact for the one previously set to 5 though does not get updated, so it's status remains "AVAILABLE". This patch makes it so all contacts (static and dynamic) are selected, and appropriately updated if need be. ASTERISK-27467 #close Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb 2017-12-07 18:18 +0000 [f20ab2b65f] Kevin Harwell * pjsip_options: dynamic contact's fields not updated on reload Dynamic contacts were not being properly updated on reload. As a matter of fact any changes to the AOR that a dynamic contact was associated with were not being applied. On reload, this patch makes it so for each dynamic contact, the associated AOR is now retrieved and the AOR's fields are applied to the contact. ASTERISK-27467 Change-Id: I8e3165dc6a745218c1c9db837f77fafa0516985d 2017-12-07 10:35 +0000 [5a0dcd9275] Corey Farrell * CLI: Fix remote console completion. Duplicate checking was done incorrectly when parsing completion options from a remote console causing all options to be ignored as duplicates. Once fixed I had to separate processing of the best match to ensure it was not identified as a duplicate when it is the only match. ASTERISK-27465 Change-Id: Ibbdb29f88211742071836c9b3f4d2aa1221cd0f9 2017-12-06 23:35 +0000 [2691ee68ce] Corey Farrell * translate: Skip matrix_rebuild during shutdown. Change-Id: I1e5eef4029cba56e33d786c5a5ade8091e531a1e 2017-12-06 14:49 +0000 [db6602f6f7] Corey Farrell * sounds_index: Avoid repeatedly reindexing. The sounds index is rebuilt each time a format is registered or unregistered. This causes the index to be repeatedly rebuilt during startup and shutdown. This patch significantly reduces the work done by delaying sound index initialization until after modules are loaded. This way a reindex only occurs if a format module is loaded after startup. We also skip reindexing when format modules are unloaded during shutdown. Change-Id: I585fd6ee04200612ab1490dc804f76805f89cf0a 2017-12-06 12:42 +0000 [289549d659] Corey Farrell * media_index: Improve startup. This eliminates some wasteful operations in media_index startup. * Replace statically set string-fields with char[0]. * Eliminate pointless RAII_VAR's. * alloc_variant: Avoid pointless ao2_find on new info->variant. * Stop trying find_variant before alloc_variant. * process_media_file: replace ast_str with ast_asprintf. This avoids reallocation of file_id_str. Overall sounds_index.c is about 27% of Asterisk startup time when using sample configs. This patch reduces it to 20%. This is a half-fix. The real problem is that the media_index is regenerated repeatedly - 68 times in my test. Change-Id: Ia50b752f8efb356f852b05c4be495a6631af8652 2017-12-05 18:04 +0000 [f59a75c6fa] Richard Mudgett * CDR: Fix deadlock setting some CDR values. Setting channel variables with the AMI Originate action caused a deadlock when you set CDR(amaflags) or CDR(accountcode). This path has the channel locked when the CDR function is called. The CDR function then synchronously passes the job to a stasis thread. The stasis handling function then attempts to lock the channel. Deadlock results. * Avoid deadlock by making the CDR function handle setting amaflags and accountcode directly on the channel rather than passing it off to the CDR processing code under a stasis thread to do it. * Made the CHANNEL function and the CDR function process amaflags the same way. * Fixed referencing the wrong message type in cdr_prop_write(). ASTERISK-27460 Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f 2017-12-06 07:36 +0000 [93859f9aca] Richard Mudgett * bridge_basic.c: Update transfer diagnostic messages addendum. * Added start DTMF transfer verbose messages. * Made associated transfer messages use a similar message format. * Adjusted message verbose level as requested by initial reporter. ASTERISK-27449 Change-Id: I2045714586414b3c5ef1f3cc56c1c4af4b31f551 2017-11-29 06:21 +0000 [aacdbdcfd2] Niklas Larsson * bridge_basic.c: Update transfer diagnostic messages. * Add the channel name to diagnostic messages so you will know which channel failed to transfer. * Promoted some debug messages to verbose 4 messages. ASTERISK-27449 #close Change-Id: Idac66b7628c99379cc9269158377fd87dc97a880 2017-12-01 13:54 +0000 [594faa192d] Richard Mudgett * security-events: Fix SuccessfulAuth using_password declaration. The SuccessfulAuth using_password field was declared as a pointer to a uint32_t when the field was later read as a uint32_t value. This resulted in unnecessary casts and a non-portable field value reinterpret in main/security_events.c:add_json_object(). i.e., It would work on a 32 bit architecture but not on a 64 bit big endian architecture. Change-Id: Ia08bc797613a62f07e5473425f9ccd8d77c80935 2017-12-04 03:40 +0000 [e7201c93cc] Sungtae Kim * Add new object for VoicemailUserEntry Currently, when the app_voicemail sending VoicemailUserEntry AMI event, there's no OldMessageCount info for default. To check the OldMessageCount info, it required IMAP_STORAGE define, but this is not correct. Added OldMessageCount item as a default. ASTERISK-27456 Change-Id: I5c71521c2d1daf8b7b161e31c34d28cca6aea4c7 2017-11-30 12:50 +0000 [9330eacc50] Richard Mudgett * res_rtp_asterisk.c: Increase strictrtp learning timeout time. More complicated direct media reinvite negotiations can result in longer delays before direct media flows. The strictrtp learning timeout time was too short. One log showed that the first RTP packet came in just after three seconds. * Increase the strictrtp learning timeout time from 1.5 to 5 seconds. ASTERISK-27453 Change-Id: Ic5e711164cbb91b4d1c1e40c83697755640f138c 2017-12-04 08:33 +0000 [e819cf7826] Alexander Traud * res_rtp_asterisk: Correct default in sample configuration file. With Asterisk 12 (commit 866d968), the default of "icesupport" changed to - "yes" in the module "res_rtp_asterisk" and - "no" in the module "chan_sip". The latter was reflected in the sample configuration file for "sip.conf". The former did not make it into "rtp.conf.sample". ASTERISK-20643 Change-Id: I2a2e0a900455d0767a99ea576e30adc6d7608a36 2017-12-04 05:27 +0000 [64942276d1] Alexander Traud * chan_sip: Peers with distinct source ports don't match, regardless of transport. Previously, peers connected via TCP (or TLS) were matched by ignoring their source port. One cannot say anything when protocol:IP:port match, yes (see ). However, when the ports do not match, the peers do not match as well. This change allows two peers connected to an Asterisk server via TCP (or TLS) behind a NAT (= same source IP address) to be differentiated via their port as well. ASTERISK-27457 Reported by: Stephane Chazelas Change-Id: Id190428bf1d931f2dbfd4b293f53ff8f20d98efa 2017-12-03 18:49 +0000 [41c14fd807] Joshua Colp * pjproject: Clean up disabling of WebRTC support. The definition in config_site.h and the argument to the configure script are not necessary to disable WebRTC support. The correct argument, --disable-libwebrtc, is already passed. ASTERISK-26980 Change-Id: I27da2c894f87914956a72710222e17462d8a44bc 2017-12-02 15:55 +0000 [f5cfd87c4a] Corey Farrell * autoconf: Remove use of m4_ifblank. The m4_ifblank macro is not available on CentOS 6, reverse conditionals to allow use of m4_ifval instead. ./bootstrap.sh was run but this patch does not result in any difference to the generated configure script. Change-Id: I280785deb872ed8d3339d99cce63a2b54d5f1438 2017-12-01 16:18 +0000 [ef25628b10] Corey Farrell * README-SERIOUSLY.bestpractices.txt: Convert to markdown Follow-up to conversion of README.md. Change-Id: I17ee7cf25bc027ece844efa2c1dfe613aff1e35b 2017-11-30 14:38 +0000 [0cdd31ee10] George Joseph * AST-2017-013: chan_skinny: Call pthread_detach when sess threads end chan_skinny creates a new thread for each new session. In trying to be a good cleanup citizen, the threads are joinable and the unload_module function does a pthread_cancel() and a pthread_join() on any sessions that are active at that time. This has an unintended side effect though. Since you can call pthread_join on a thread that's already terminated, pthreads keeps the thread's storage around until you explicitly call pthread_join (or pthread_detach()). Since only the module_unload function was calling pthread_join, and even then only on the ones active at the tme, the storage for every thread/session ever created sticks around until asterisk exits. * A thread can detach itself so the session_destroy() function now calls pthread_detach() just before it frees the session memory allocation. The module_unload function still takes care of the ones that are still active should the module be unloaded. ASTERISK-27452 Reported by: Juan Sacco Change-Id: I9af7268eba14bf76960566f891320f97b974e6dd 2017-12-01 10:01 +0000 [6635ddc819] Sean Bright * config: Speed up config template lookup ast_category_get() has an (undocumented) implementation detail where it tries to match the category name first by an explicit pointer comparison and if that fails falls back to a normal match. When initially building an ast_config during ast_config_load, this pointer comparison can never succeed, but we will end up iterating all categories twice. As the number of categories using a template increases, this dual looping becomes quite expensive. So we pass a flag to category_get_sep() indicating if a pointer match is even possible before trying to do so, saving us a full pass over the list of current categories. In my tests, loading a file with 3 template categories and 12000 additional categories that use those 3 templates (this file configures 4000 PJSIP endpoints with AOR & Auth) takes 1.2 seconds. After this change, that drops to 22ms. Change-Id: I59b95f288e11eb6bb34f31ce4cc772136b275e4a 2017-12-01 08:29 +0000 [077ceacd48] Sean Bright * config: Speed up ACO & sorcery initialization When starting Asterisk in the foreground, there is a perceptible delay when loading modules that use the ACO and sorcery config frameworks. For example, a lightly configured res_pjsip took 853ms to load on my VM. I tracked down the slowness to the XPath queries used to associate the relevant documentation with the config options. One improvement was adding a call to xmlXPathOrderDocElems after loading an XML document. From the libxml2 docs: Call this routine to speed up XPath computation on static documents. The second change was to remove recursive descent and wildcard operators from the XPath queries. After these changes, res_pjsip takes 85ms to load on my VM and there is no longer a perceptible delay when starting Asterisk in the foreground. Change-Id: I45d457f1580e26bf5a2b0dab16e8e9ae46dcbd82 2017-12-01 06:07 +0000 [dac70daf1b] Joshua Colp * res_http_post: Not all versions of gmime have GMIME_MAJOR_VERSION. This change makes the presence of the GMIME_MAJOR_VERSION definition optional, as not all versions of gmime actually define it. ASTERISK-27454 Change-Id: I01d99590045971ed6787899147170a5954077238 2017-11-17 10:38 +0000 [6274e58a25] Corey Farrell * autoconf: Use m4 conditionals where possible. Change-Id: I530c0a72f965437acef6a9a4fbfe5c487f078b65 2017-11-17 09:15 +0000 [635fe8ec87] Corey Farrell * autoconf: Fix call to AC_CONFIG_AUX_DIR. The `pwd` parameter to AC_CONFIG_AUX_DIR is unnecessary, the default value is $srcdir. Additionally remove the AC_REVISION call. It only added a comment and is pointless without SVN tag replacements. Change-Id: I99299a3217f095bddcb2edefb3b9af0ab147bc29 2017-11-26 11:47 +0000 [c46cab49a3] Alexander Traud * translate: Transcode siren14, speex32, silk24, and silk12 via slin16. When a format has no pre-recorded sound files, Asterisk has to transcode between formats. For this, Asterisk has a fixed translation table. If the pre-recorded sound files are not available in the same sample rate, Asterisk has not only to transcode but also to resample. Asterisk has pre-recorded files for SLN (8000 kHz) and SLN16 (16000 kHz). However before this change, Asterisk did not take the sample rate into account, because the translation paths to SLN and SLN16 got the same score/weight in the table. Consequently, you might have got narrow-band audio with siren14, speex32, silk24, and silk12 although those are (ultra) wide-band audio codecs. With this change, the distance in sample-rates is taken into account. Now on the Command-Line interface (CLI) 'core show channels', you should see: (slin@16000)->(slin@32000)->(speex@32000). ASTERISK-23735 Reported by: Richard Kenner Change-Id: I9448295c1978be26f8633b6066395e7bbbe2e213 2017-11-26 09:44 +0000 [81e2d8aa9a] Richard Mudgett * res_ari: Fix inverted test giving wrong error message. The patch for ASTERISK_24560 inverted a test checking if the bridge name is being updated to a different name. * Fix the test to return "Changing bridge name is not implemented" when someone attempts to change the bridge name. ASTERISK-27445 Change-Id: I4b70bf08b0e02e016108b077ff75b345dec12fc9 2017-11-25 04:09 +0000 [0f719aa051] Alexander Traud * translate: Show sample rate for silk, speex, and slin in translation table. ASTERISK-24662 Change-Id: I3822956984292c99c48bca8e97807e498ccc0e88 2017-11-23 13:27 +0000 [8dd9a79e6e] Richard Mudgett * features.conf.sample: Clarify ActivatedBy documentation wording. Change-Id: Id2899331fe05d1909a862ea879742879d086bc64 2017-11-22 18:37 +0000 [a78d747ee8] Corey Farrell * Add defaultbranch to .gitreview. This will cause `git review` to post changes to the branch it is based on instead of always using master. The defaultbranch setting should be updated when new major branches are created. Change-Id: I3db009217c5ae399fb84bee95076f4dbb7fa52d2 2017-11-22 18:43 +0000 [d6568aa72a] Alexander Anikin * add cmd connection creation on creation ooh323 call data structure ASTERISK-27353 #close Reported by: Marco Giordani Change-Id: I455096bd7da016b871afe09af86067c2c7c9f33f 2017-11-22 10:42 +0000 [5abab0a34c] Kevin Harwell * pjsip: 183 without To tag does not negotiate media If a 183 with sdp response is receive without a To tag the sdp is not negotiated. According to RFC 3261 section 12.1.2 while a To tag is required, the client needs to still be able to handle the missing tag case for backwards compatibility. This patch, accepted by and applied to pjproject, makes it so if an incoming 180/183 with SDP comes in without a To tag it gets appropriately handled. ASTERISK-27442 #close Change-Id: Ic9d6b01e05e8f4874eebbd7adfe05d932025d203 2017-11-21 06:39 +0000 [6ebe03d4b3] Alexander Traud * res_rtp_asterisk: ICE server-reflexive candidates (srflx) with Dual-Stack. Previously, Asterisk sent srflx only when configured exclusively for IPv4. Now, srflx is gathered and sent via SDP, even when Asterisk is enabled for Dual Stack (IPv4+IPv6) and an IPv4 interface is available/used. ASTERISK-27437 Change-Id: Ie07d8e2bfa7b6fe06fcdc73d390a7a9a4d8c0bc1 2017-11-20 13:05 +0000 [2bff38b8a8] Corey Farrell * res_parking: Make load_pri explicit. res_parking has an implicit load_pri of 0 meaining it's one of the very first modules loaded after modules with global symbols. Set it explicitly in the AST_MODULE_INFO block. Change-Id: I297b6fb3ff6993ec004e667b22a74f5925906259 2017-11-21 09:16 +0000 [c6e1e6e968] Corey Farrell * README: Convert to README.md. Convert the README file to markdown format, remove the old README. This causes websites like github to display the README in a much nicer format with live links. The raw file is still very readable from plain text editors and terminals. Change-Id: I7d13131764a9a9026e5f8a6ddb245a01bbd788e7 2017-11-20 16:48 +0000 [e9ba6a6b88] Corey Farrell * CLI: Finish conversion of completion handling to vectors. Change-Id: Ib81318f4ee52a5e73b003316e13fe9be1dd897a1 2017-11-07 15:34 +0000 [26a400c67a] Corey Farrell * CLI: Refactor cli_complete. * Stop using "_COMMAND NUMMATCHES" on remote consoles. Using this command had doubled the amount of work needed from the Asterisk daemon for each completion request. * Fix code formatting. * Remove static buffer used to send the command, use the same buffer that will receive the results. * Move sort from ast_cli_display_match_list. Change-Id: Ie2211b519a3d4bec45bf46e0095bdd01d384cb69 2017-11-07 14:13 +0000 [e723331f4f] Corey Farrell * CLI: Rewrite ast_el_strtoarr to use vector's internally. This rewrites ast_el_strtoarr to use vector's internally, but still return the original NULL terminated array of strings. Change-Id: Ibfe776cbe14f750effa9ca360930acaccc02e957 2017-11-07 14:47 +0000 [e07d94111d] Corey Farrell * CLI: Refactor ast_cli_display_match_list. * Stop estimating line count, just print until we run out of matches. * Stop freeing entries, the caller does that anyways. * Stop calculating / returning numoutput, it was ignored. Change-Id: I7f92afa8bea92241a95227587367424c8c32a5cb 2017-11-08 23:42 +0000 [8a63f4e709] Corey Farrell * CLI: Create ast_cli_completion_add function. Some completion generators are very inefficent due to the way CLI requests matches one at a time. ast_cli_completion_add can be called multiple times during one invokation of a CLI generator to add all results without having to reinitialize the search state for each match. Change-Id: I73d26d270bbbe1e3e6390799cfc1b639e39cceec 2017-11-09 00:39 +0000 [115f53a0fb] Corey Farrell * CLI: Remove calls to ast_cli_generator. The ability to add to localized storage cannot be supported by ast_cli_generator. The only calls to ast_cli_generator should be by functions that need to proxy the CLI generator, for example 'cli check permissions' or 'core show help'. * ast_cli_generatornummatches now retrieves the vector of matches and reports the number of elements (not including 'best' match). * test_substitution retrieves and iterates the vector. Change-Id: I8cd6b93905363cf7a33a2d2b0e2a8f8446d9f248 2017-11-20 09:13 +0000 [41498dcb5d] Alexander Traud * chan_sip: ICE contained square brackets around IPv6 addresses. ASTERISK-27434 Change-Id: Iaeed89b4fa05d94c5f0ec2d3b7cd6e93d2d5a8f7 2017-11-19 21:23 +0000 [84fd41729e] Corey Farrell * loader: Fix comments in struct ast_module. Make the comments follow doxygen format, move comments to the line before each field they describe. Change-Id: Ic445468398b5e88f13910f7c2f70bd15aad33a27 2017-11-16 17:25 +0000 [df6161b70e] Corey Farrell * cli: Remove silly usage of RAII_VAR. Change-Id: I81aacfee7cd26e4fc5eef07bca582700c2975bd7 2017-11-16 13:19 +0000 [1e2b38adf5] Corey Farrell * ccss: Remove silly usage of RAII_VAR. Change-Id: I5ce40035e0a940e4e56f6322c1dcd47fbd509b98 2017-11-16 12:51 +0000 [ddc86ec664] Corey Farrell * app: Remove silly usage of RAII_VAR. Change-Id: Ideb594f7aae134974fb78d5477ba0853b97b8625 2017-11-16 12:19 +0000 [0e90d74604] Corey Farrell * aoc: Remove silly usage of RAII_VAR. Change-Id: I07907f833b81aeb0128bc9442a2abb52679c7511 2017-11-16 12:55 +0000 [746dd80eab] Corey Farrell * abstract_jb: Remove silly usage of RAII_VAR. Change-Id: I9d56175369363d1dc735504cf78a3a5577069f49 2017-11-20 12:54 +0000 [8971a7ff3c] Corey Farrell * Loader: Remove unneeded load_pri declarations. Instead of specifying AST_MODFLAG_LOAD_ORDER with load_pri AST_MODPRI_DEFAULT just use AST_MODFLAG_DEFAULT. Change-Id: I0123258eafce324249433a69df15a85cc16e509f 2017-11-20 13:08 +0000 [9d688cf12c] Corey Farrell * res_mwi_external_ami: Remove incorrect load priority. res_mwi_external_ami specified AST_MODFLAG_LOAD_ORDER but didn't set load_pri, resulting in an actual load priority of 0. This module only provides AMI actions so it has no reason to load early. Change-Id: I82987fcf10d3ea42716b2f9df915b16687fd5839 2017-11-20 09:49 +0000 [50cb5199c1] Alexander Traud * BuildSystem: pjsip_evsub_set_uas_timeout was not used. ASTERISK-27435 Change-Id: Id318a7ae6d7d69b53f911d30bf3eece64852f15c 2017-11-19 13:52 +0000 [6a5ab65c88] Corey Farrell * Build: Fix issues building without SSL. * Fix conditional in libasteriskssl. * Use variables produced by configure to link the SSL and uuid libraries into libasteriskpj.so instead of hard-coding them. ASTERISK-27431 Change-Id: I3977931fd3ef8c4e4376349ccddb354eb839b58d 2017-11-19 13:28 +0000 [366cc259bc] Corey Farrell * res_pjsip: Fix warning by deferring implicit type cast. Mac doesn't like the comparison of -1 to an enum, so store the result of ast_sip_str_to_dtmf to an int so we can check for the negative return value. ast_sip_str_to_dtmf returns an int so this is only delaying the implicit type cast. Change-Id: I0c262c1719ee951aae1f437d733a301cf5f8ad29 2017-11-19 09:57 +0000 [69113388e9] Corey Farrell * Build: Fix OSX build issues. OSX does not support 'readlink -f' or 'sed -r'. Replace readlink with the GNU make macro 'realpath'. Replace sed with grep in one place, cut in the other. ASTERISK-27332 Change-Id: I5d34ecca905384decb22ead45c913ae5e8aff748 2017-11-18 21:13 +0000 [5fe2e7bfdc] Corey Farrell * tests: Fix warnings found on Mac. test_pbx used raise without explicitly including signal.h. On Mac for some reason nothing else includes it. test_logger checked if an unsigned int was negative. Switch the variable to 'int' so that error check can be effective. Change-Id: Ie1db5dd1818ac25cc2ae41b644f848b5865b1362 2017-11-18 20:25 +0000 [d68e54b7ab] Corey Farrell * res_snmp: Declare RONLY if net-snmp headers do not. Some net-snmp builds do not provide the RONLY declare, only NETSNMP_OLDAPI_RONLY. Map RONLY to NETSNMP_OLDAPI_RONLY to get around this error. Change-Id: Ida5c7ad9406515825485c4d3b4a34fd6ad0da577 2017-11-18 20:02 +0000 [0f270cbe9e] Corey Farrell * res_fax: Remove checks for unsigned values being >= 0. It's impossible for gwtimeout or fdtimeout to be less than 0 because they are unsigned int's. Remove checks and unreachable branches. Change-Id: Ib2286960621e6ee245e40013c84986143302bc78 2017-11-18 19:29 +0000 [3dca4c7742] Corey Farrell * app_minivm: Fix possible uninitialized return value. Declare 'res' initialized to -1 to deal with earlier error paths that could cause 'res' to be returned uninitialized. Change-Id: I8ac2a5755bf4174d89ef893e924c940f702b104e 2017-11-17 19:36 +0000 [5f0b4a1645] Corey Farrell * README: Send people to secure websites where available. We should be sending people to secure web URL's where available. Update README's and docs. Change-Id: Id5b1e049b0b18b49a784f1254605aefa244ce19a 2017-11-17 19:54 +0000 [a369bfc4b2] Corey Farrell * doxygen: Remove obsolete contents. Remove doxygen contents that have nothing to do with the current state of Asterisk. Change-Id: Ic072cc8641f9533a202990ccf275ce87e3efd95c 2017-11-16 02:47 +0000 [6b0963c42a] Pirmin Walthert * res_rtp_asterisk.c: Fix rtp source address learning for broken clients Some clients do not send rtp packets every ptime ms. This can lead to situations in which the rtp source learning algorithm will never learn the address of the client. This has been discovered on a Mac mini with a pjsip based softphone after updating to Sierra: as soon as USB headsets are involved, the softphone will send the second packet 30ms after the first, the third 30ms after the second and the fourth 1ms after the third. So in the old implmentation the rtp source learning algorithm was repeatedly reset on the fourth packet. The patch changes the algorithm in a way that doesn't take the arrival time between two consecutive packets into account but the time between the first and the last packet of a learning sequence. The patch also fixes a second problem: when a user was using a wrong value for the probation setting there was a LOG_WARNING output stating that the value had been set to the default value instead. However the code for setting the value back to defaults was missing. ASTERISK-27421 #close Change-Id: If778fe07678a6fd2041eaca7cd78267d0ef4fc6c 2017-11-17 09:57 +0000 [3c72064d3f] Sean Bright * res_pjsip: Use reasonable buffer lengths for endpoint identification Domains themselves can be up to 255 characters long (per RFC 1035), so our current buffer sizes are wholly inadequate for many use cases. Change-Id: If3f30a68307f1365a1fe06bc4b854c62842c9292 2017-11-11 10:09 +0000 [455b1bdeb0] Corey Farrell * menuselect: Remove ineffective weak attribute detection. menuselect detects compiler support for multiple styles of weak functions. This is a remnant from 2013 when OPTIONAL_API required weak functions. It is no longer correct for menuselect to switch dependencies from optional to required based on lack of weak function support. Note an issue remains - dependencies should switch from optional to required based on OPTIONAL_API being enabled or disabled. I don't think this is possible. menuselect needs to know at startup if OPTIONAL_API is enabled or disabled, so the only way to fix this is to remove OPTIONAL_API from menuselect and create a configure option. I've left the code that switches in place but it's preprocessed out. Additionally removed: - WEAKREF variable from Asterisk makeopts.in. - Related disabled code from test_utils. - Pointless AC_REVISION call from menuselect/configure.ac. Change-Id: Ifa702e5f98eb45f338b2f131a93354632a8fb389 2017-11-16 09:48 +0000 [549542e50e] Corey Farrell * acl: Fix allocation related issues. Add checks for allocation errors, cleanup and report failure when they occur. * ast_duplicate_acl_list: Replace log warnings with errors, add missing line-feed. * ast_append_acl: Add missing line-feed to logger message. * ast_append_ha: Avoid ast_strdupa in loop by moving debug message to separate function. * ast_ha_join: Use two separate calls to ast_str_append to avoid using ast_strdupa in a loop. Change-Id: Ia19eaaeb0b139ff7ce7b971c7550e85c8b78ab76 2017-11-16 11:02 +0000 [2852dac480] Corey Farrell * acl: Update logger message to match 15+. This patch causes a logger message to be the same as it is in 15+. This will allow a follow-up patch to be cherry-picked to all 3 branches. Change-Id: Ic0665a3d49987e4eb6df28dcd9e90b1c3ca191e0 2017-11-07 17:07 +0000 [0b8b153d3c] Corey Farrell * CLI: Create ast_cli_completion_vector. This is a rewrite of ast_cli_completion_matches using a vector to build the list. The original function calls the vector version, NULL terminates the vector and extracts the elements array. One change in behavior the results are now sorted and deduplicated. This will solve bugs where some duplicate checking was done before the list was sorted. Change-Id: Iede20c5b4d965fa5ec71fda136ce9425eeb69519 2017-11-16 09:04 +0000 [0a7bbb068b] Joshua Colp * bridge_basic: Ignore answer from transfer target when they've timed out. This is a fun one. Given the following attended transfer scenario: 1. Transfer target is called 2. Transferer hangs up 3. Transfer target call attempt reaches timeout 4. Transfer target is told to hang up 5. Transfer target answers before channel is hung up 6. Transferer recall target is called A crash would occur. This is because the transfer target call attempt, despite being told to hang up, would raise a recall target answer before the recall target had been answered. As it had not answered there would be no recall target channel and it would implode. This change makes it so that if the transfer target has been hung up we don't tell the attended transfer code that it has answered. We also clear out the stimulus that the recall target has been answered after telling the transfer target to hang up, in case it was able to raise the information before we told it to hangup. ASTERISK-27361 Change-Id: Ifb8b255a9c4d2c5c1b8ad77bf54f659ed286df99 2017-11-16 19:39 +0000 [69055724ce] Corey Farrell * aoc: Fix memory management issues. aoc_publish_blob failed to check for msg allocation error and never released msg. Change-Id: Ib31a9ffb81056a0d496a49d7eec795005a44bcd5 2017-11-16 16:18 +0000 [60cfe00c4e] Sean Bright * res_pjsip_transport_websocket: Give transport a meaningful description We were not \0 terminating this string, so any attempt to print it would in the best case show an empty string and in the worst case potentially crash. Change-Id: I63d96ef8f7516ac02a0f91e22dfa8acdc615042c 2017-11-16 15:00 +0000 [db2677133c] Sean Bright * res_pjsip: Use sorcery prefix operation for contact lookup This improves performance for registrations assuming that res_config_astdb is not in use. Change-Id: I86f37aa9ef07a4fe63448cb881bbadd996834bb1 2017-11-09 19:58 +0000 [8a7dd5cc44] Richard Mudgett * chan_pjsip.c: Improve answer failure log messages. * Balanced the session->inv_session refs on answer failure. Change-Id: I33542d639d37e692cb46550b972a5fcfc3b804b8 2017-11-14 18:00 +0000 [7f916d621a] Richard Mudgett * audiohook.c: Fix freeing a frame and still using it. Memory corruption happened to the media frame caches when an audio hook freed a frame when it shouldn't. I think the freed frame was because a jitter buffer interpolated a missing frame and the audio hook unconditionally freed it. * Made audiohook.c:audio_audiohook_write_list() not free an interpolated frame if it is the same frame as what was passed into the routine. * Made plc.c:normalise_history() use memmove() instead of memcpy() on a memory block that could overlap. Found by valgrind investigating this issue. ASTERISK-27238 ASTERISK-27412 Change-Id: I548d86894281fc4529aefeb9f161f2131ecc6fde 2017-11-15 12:10 +0000 [7e874eae7a] George Joseph * app_record: Don't set RECORD_STATUS chan var until file is closed We've been calling pbx_builtin_setvar_helper to set the RECORD_STATUS variable before actually closing the recorded file. If a client is watching VarSet events and tries to do something with the file when a RECORD_STATUS event is seen, they might attempt to do so while the file it's still open. We now delay calling pbx_builtin_setvar_helper until after we close the file. ASTERISK-27423 Change-Id: I7fe9de99953e46b4bafa2b38cf151fe8f6488254 2017-11-07 08:25 +0000 [062a4390ac] George Joseph * ast_coredumper: Add ability to use directory other than /tmp The OUTPUTDIR environment variable can now be set either in the environment itself or in ast_debug_tools.conf. If set, it's used for all work products instead of /tmp. Also added the --tarball-config option that includes the contents of /etc/asterisk when either --tarball-coredumps or --tarball-results are used. Change-Id: I66b2553319df61caea5b313d084f51978f730b4c 2017-10-16 07:36 +0000 [e7f8302d30] Torrey Searle * contrib/script/sip_to_pjsip: add support for realtime Add a new script that can read from legacy realtime peers & generate an sql file for populating pjsip endpoints, identify, and aor records. ASTERISK-27348 #close Change-Id: Idd3d7968a3c9c3ee7936d21acbdaf001b429bf65 2017-11-13 07:14 +0000 [c2dddb001a] Joshua Colp * pjsip / hep: Provide correct local address for Websockets. Previously for PJSIP the local address of WebSocket connections was set to the remote address. For logging purposes this is not particularly useful. The WebSocket API has been extended to allow the local address to be queried and this is used in PJSIP to set the local address to the correct value. The PJSIP HEP support has also been tweaked so that reliable transports always use the local address on the transport and do not try to (wrongly) guess. As they are connection based it is impossible for the source to be anything else. ASTERISK-26758 ASTERISK-27363 Change-Id: Icd305fd038ad755e2682ab2786e381f6bf29e8ca 2017-11-13 17:47 +0000 [b8209a1273] Corey Farrell * alertpipe: Correct documented return of ast_alertpipe_write. Change-Id: I4ea49c441890a81384144479dc93ab5a3989486d 2017-11-13 16:20 +0000 [9c6d4ec022] Corey Farrell * core: Fix configuration of remote console socket path. The remote console socket path is the combination of asterisk.conf settings astrundir from [directories] and astctl from [files]. Unconditionally combine the two strings after processing all values to ensure we end up with the correct socket path. ASTERISK-27415 Change-Id: Ib1e2805d55d6b0955c6430a1a2a93acbf9b091e8 2017-11-10 10:37 +0000 [b5f2779a23] George Joseph * bundled_pjproject: sip_parser: Fix return code in pjsip_find_msg The default return code for pjsip_find_msg was PJ_SUCCESS so if a Content-Length header wasn't found at all, pjsip_find_msg was returning PJ_SUCCESS instead of PJSIP_EMISSINGHDR. Also added the volatile keyword to a few variables that are used both inside and outside the PJ_TRY/PJ_CATCH block. Partial fix for ASTERISK_27408 Change-Id: If82ba9de921e3d57df9c68cf96ee45ccc1491f7a 2017-11-13 14:35 +0000 [e6ada55430] Ben Ford * bundled_pjproject: Update to 2.7.1 Update from 2.7 to 2.7.1 for bundled pjproject. Changed version and removed patch files included in the update. Change-Id: I55cea8e734b318c2df9daf86aa0802c559ec8357 2017-11-09 08:21 +0000 [cf062303e3] Sean Bright * sorcery: Add ast_sorcery_retrieve_by_prefix() Some consumers of the sorcery API use ast_sorcery_retrieve_by_regex only so that they can anchor the potential match as a prefix and not because they truly need regular expressions. Rather than using regular expressions for simple prefix lookups, add a new operation - ast_sorcery_retrieve_by_prefix - that does them. Patches against 13 and 15 have a compatibility layer needed to maintain ABI that is not needed in master. Change-Id: I56f4e20ba1154bd52281f995c27a429a854f6a79 2017-11-07 14:00 +0000 [2ad6210dd7] Corey Farrell * vectors: Add new macro and a string vector definition. * AST_VECTOR_STEAL_ELEMENTS - steal the array of elements for use with non-vector code. * struct ast_vector_string - a vector of 'char *'. Change-Id: I104d1b204be03fccf67e02a195596adcb5ab1e42 2017-10-30 22:09 +0000 [76e640bd53] Corey Farrell * Build: Make function constructor/destructor attributes mandatory. This change causes the configure script to fail if the C compiler does not support both function attributes constructor and destructor. These were already required as modules cannot function without these attributes and Asterisk requires modules. This also has AST_GCC_ATTRIBUTE set a variable ax_cv_have_func_attribute_$1. This is the same variable name used by autoconf-archive's AX_GCC_FUNC_ATTRIBUTE, used for the same purpose. Change-Id: Id68e8a1447f2a6d707c54b56350e7bfdb33fb663 2017-11-10 22:04 +0000 [b03d389bec] Corey Farrell * menuselect: Delete and ignore aclocal.m4. This file is temporary output from the bootstrap.sh command, it does not need to be committed. Change-Id: Ie0fd113aff6eac44924c0bd0c900833c6c86a6d9 2017-11-11 13:01 +0000 [507d9b5f9e] Richard Mudgett * core: Add cache_media_frames debugging option. The media frame cache gets in the way of finding use after free errors of media frames. Tools like valgrind and MALLOC_DEBUG don't know when a frame is released because it gets put into the cache instead of being freed. * Added the "cache_media_frames" option to asterisk.conf. Disabling the option helps track down media frame mismanagement when using valgrind or MALLOC_DEBUG. The cache gets in the way of determining if the frame is used after free and who freed it. NOTE: This option has no effect when Asterisk is compiled with the LOW_MEMORY compile time option enabled because the cache code does not exist. To disable the media frame cache simply disable the cache_media_frames option in asterisk.conf and restart Asterisk. Sample asterisk.conf setting: [options] cache_media_frames=no ASTERISK-27413 Change-Id: I0ab2ce0f4547cccf2eb214901835c2d951b78c00 2017-11-11 09:42 +0000 [bb2173275a] Richard Mudgett * frame.c: Make ast_frame_free()/ast_frfree() NULL tolerant Change-Id: Ic49d821ef88ada38a31bdd835b9531443c55d793 2017-11-10 07:06 +0000 [360d50d74c] Joshua Colp * pjsip: Add patch to allow all transports to be destroyed. If a transport is created with the same transport type, source IP address, and source port as one that already exists the old transport is moved into a linked list called "tp_list". If this old transport is later shutdown it will not be destroyed as the process checks whether the transport is valid or not. This check does not look at the "tp_list" when making the determination causing the transport to not be destroyed. This change updates the logic to query not just the main storage method for transports but also the "tp_list". Upstream issue https://trac.pjsip.org/repos/ticket/2061 ASTERISK-27411 Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429 2017-11-09 20:34 +0000 [211f5d8dd4] Corey Farrell * core: Remove disabled code. handle_quit has been disabled since 2003, remove it. Change-Id: Idc3aaa6c81676160547078f9b71e8aa43de2db18 2017-11-09 13:24 +0000 [d12be40750] Corey Farrell * Build System: Disable parallel make in the root Makefile. This ensures that the root Makefile runs only a single target at a time. SUBMAKE will still honor requested parallelism, so 'make -j8' will build one directory at a time but allow 8 jobs at once when building a sub directory. This will fix some display glitches related to rebuild of XML documentation. It will also prevent some edge case errors where bundled pjproject needs to be rebuild before other parts of Asterisk. Change-Id: I4f2ec6fbbec1ada0ccb1109a28ea303524239b1e 2017-03-29 20:46 +0000 [32042c6c3c] Richard Mudgett * chan_pjsip.c: Fix uninitialized cause value on failure. Change-Id: I3f9dd3c31bd582e54a30381500077de2319d8cc3 2017-10-19 13:35 +0000 [4b3e03ae87] Kevin Harwell * AST-2017-011 - res_pjsip_session: session leak when a call is rejected A previous commit made it so when an invite session transitioned into a disconnected state destruction of the Asterisk pjsip session object was postponed until either a transport error occurred or the event timer expired. However, if a call was rejected (for instance a 488) before the session was fully established the event timer may not have been initiated, or it was canceled without triggering either of the session finalizing states mentioned above. Really the only time destruction of the session should be delayed is when a BYE is being transacted. This is because it's possible in some cases for the session to be disconnected, but the BYE is still transacting. This patch makes it so the session object always gets released (no more memory leak) when the pjsip session is in a disconnected state. Except when the method is a BYE. Then it waits until a transport error occurs or an event timeout. ASTERISK-27345 #close Reported by: Corey Farrell Change-Id: I1e724737b758c20ac76d19d3611e3d2876ae10ed 2017-10-03 16:19 +0000 [2b85799512] Richard Mudgett * AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun cdr_object_update_party_b_userfield_cb() could overrun the fixed buffer if the supplied string is too long. The long string could be supplied by external means using the CDR(userfield) function. This may seem reminiscent to AST-2017-001 (ASTERISK_26897) and it is. The earlier patch fixed the buffer overrun for Party A's userfield while this patch fixes the same thing for Party B's userfield. ASTERISK-27337 Change-Id: I0fa767f65ecec7e676ca465306ff9e0edbf3b652 2017-10-19 13:53 +0000 [2faa3e3bab] George Joseph * AST-2017-009: pjproject: Add validation of numeric header values Parsing the numeric header fields like cseq, ttl, port, etc. all had the potential to overflow, either causing unintended values to be captured or, if the values were subsequently converted back to strings, a buffer overrun. To address this, new "strto" functions have been created that do range checking and those functions are used wherever possible in the parser. * Created pjlib/include/limits.h and pjlib/include/compat/limits.h to either include the system limits.h or define common numeric limits if there is no system limits.h. * Created strto*_validate functions in sip_parser that take bounds and on failure call the on_str_parse_error function which prints an error message and calls PJ_THROW. * Updated sip_parser to validate the numeric fields. * Fixed an issue in sip_transport that prevented error messages from being properly displayed. * Added "volatile" to some variables referenced in PJ_CATCH blocks as the optimizer was sometimes optimizing them away. * Fixed length calculation in sip_transaction/create_tsx_key_2543 to account for signed ints being 11 characters, not 9. ASTERISK-27319 Reported by: Youngsung Kim at LINE Corporation Change-Id: I48de2e4ccf196990906304e8d7061f4ffdd772ff 2017-11-06 17:58 +0000 [16df0e9786] Corey Farrell * res_pjsip_pubsub: Fix multiple leaks on failure to append vectors. Change-Id: I68ece0073ea79667ca41eb10405f516f1d30d482 2017-11-06 18:12 +0000 [cf91dde509] Corey Farrell * res_pjsip_history: Fix multiple leaks on vector append failure. Change-Id: I41e8d5183ace284095cc721f3b1fb32ade3f940f 2017-11-06 16:37 +0000 [7ad4c19b20] Richard Mudgett * res_pjsip_registrar.c: Fix named AOR and pjproject group deadlock. One of the patches for ASTERISK_27147 introduced a deadlock regression. When the connection oriented transport shut down, the code attempted to remove the associated contact. However, that same transport had just requested a registration that we hadn't responded to yet. Depending upon timing we could deadlock. * Made send the REGISTER response after we completed processing the request contacts and released the named AOR lock to avoid the deadlock. ASTERISK-27391 Change-Id: I89a90f87cb7a02facbafb44c75d8845f93417364 2017-11-06 17:21 +0000 [c1a608f862] Corey Farrell * res_stasis: Fix multiple leaks. * res/stasis/app.c JSON passed to app_send needs to be released. * res/stasis_message.c: objects leak if vector append fails. Change-Id: I8dd5385b9f50a5cadf2b1d16efecffd6ddb4db4a 2017-11-05 22:06 +0000 [d95bfcd013] Aaron An * res_pjsip: Avoid crash when contact uri is empty string Asterisk will crash if contact uri is invalid, so contact_apply_handler should check if the uri is NULL or empty. ASTERISK-27393 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: Ia0309bdc6b697c73c9c736e1caec910b77ca69f5 2017-11-07 06:56 +0000 [ec58521a48] Richard Mudgett * res_pjproject.c: Fix ast_strdup() alloc failure. Change-Id: I74688038e7afe3a279359cce53aadb28ade51ead 2017-11-06 17:55 +0000 [69af7eb663] Corey Farrell * res_pjsip_outbound_registration: Fix leak on vector add failure. Change-Id: I774b88b3c9da41edd4dc8d78f095481f52f2bd46 2017-11-06 17:44 +0000 [4f75655cb6] Corey Farrell * res_pjsip_config_wizard: Fix leaks and add check for malloc failure. wizard_apply_handler(): - Free host if we fail to add it to the vector. wizard_mapped_observer(): - Check for otw allocation failure. - Free otw if we fail to add it to the vector. Change-Id: Ib5d3bcabbd9c24dd8a3c9cc692a794a5f60243ad 2017-11-06 17:33 +0000 [8cdc0ef385] Corey Farrell * test_sorcery_memory_cache_thrash: Handle error from vector append. Cleanup resources when we fail to append the vector and report test failure. Change-Id: I6eb41586fd11dee8c0dfe35e91cb465a4cab7298 2017-11-06 17:28 +0000 [e4fba95022] Corey Farrell * res_pjsip: Fix leak on error in ast_sip_auth_vector_init. Change-Id: Ib0fc7a18f3135ca8990c3984c9e15f6d26e556e8 2017-11-06 17:17 +0000 [b96dd55add] Corey Farrell * res_pjproject: Handle error from adding to the buildopts vector. Change-Id: I076c7bd207c7989a23005395ce1735392657be65 2017-11-06 15:33 +0000 [3dc600ef84] Corey Farrell * stasis: Release object if vector append fails. Change-Id: I3e5cc669169aab6175ddfaf7486edeaeb4fdcfb1 2017-11-06 15:30 +0000 [fc041554c3] Corey Farrell * RTP Engine: Deal with errors returned from AST_VECTOR_REPLACE. Check for errors from AST_VECTOR_REPLACE and clean memory if needed. Change-Id: I124d15cc1d645f85a72a1279f623c1993b304b0b 2017-11-06 15:10 +0000 [75539dbf2c] Corey Farrell * Messaging: Report error on failure to register tech or handler. Message tech and handler registrations use a vector which could fail to expand. If it does log and error and return error. Change-Id: I593a8de81a07fb0452e9b0efd5d4018b77bca6f4 2017-11-06 15:07 +0000 [b4240bea6c] Corey Farrell * format_cap: Fix leak on AST_VECTOR_APPEND error. format_cap_framed_init can fail on AST_VECTOR_APPEND. This should report failure to the caller and clean the newly allocated frame. Change-Id: Ica0661235bf09497bf23d844ceb01f21b41a55b0 2017-11-06 14:23 +0000 [803dc3dee5] Corey Farrell * stasis: Remove silly use of RAII_VAR in stasis_forward_all. Change-Id: I46de4c968d40144d5b049966304ff66c1469fb65 2017-11-06 12:51 +0000 [0a0e2c4253] Corey Farrell * CLI: Remove unused internal command. The internal CLI command "_command complete" was last used by Asterisk 0.2.0. Since then we've been using "_command nummatches" and "_command matchesarray". Change-Id: I682fe1e21a24a3bb5bd04146e639f1c5866bcfce 2017-11-03 18:08 +0000 [593f789563] Richard Mudgett * stasis_bridges.c: Fix off-nominal json memory leaks. Change-Id: Ib1181a36b317c86bff1ef2e44a17a0b1c73cfdc8 2017-11-06 10:29 +0000 [56e32ca355] Joshua Colp * res_pjsip_pubsub: Ensure remote URI contains URI only. This change makes it so that any user of the pubsub API that requests the remote URI receives only the URI. Previously the entire string was returned, which could contain a display name. ASTERISK-27290 Change-Id: If1d0cd6630f0a264856d31d2a67933109187a017 2017-11-03 17:43 +0000 [6bc8af2433] Richard Mudgett * stasis_channels.c: Remove a very silly RAII_VAR(). Change-Id: I28b458b3c1a442c4ef0be7b4986a95ea4149e14f 2017-11-03 16:14 +0000 [33d02f5090] Richard Mudgett * stasis/app.c: Optimize stasis_app_get_debug_by_name() * Eliminate RAII_VAR() * Short circuit application name lookup if global debug enabled. Change-Id: I5f78b7bd6ca7fd2c3b07cbbe036c6a93b4681123 2017-11-02 18:40 +0000 [9013415593] Richard Mudgett * Fix ast_(v)asprintf() malloc failure usage conditions. When (v)asprintf() fails, the state of the allocated buffer is undefined. The library had better not leave an allocated buffer as a result or no one will know to free it. The most likely way it can return failure is for an allocation failure. If the printf conversion fails then you actually have a threading problem which is much worse because another thread modified the parameter values. * Made __ast_asprintf()/__ast_vasprintf() set the returned buffer to NULL on failure. That is much more useful than either an uninitialized pointer or a pointer that has already been freed. Many uses won't have to check for failure to ensure that the buffer won't be double freed or prevent an attempt to free an uninitialized pointer. * stasis.c: Fixed memory leak in multi_object_blob_to_ami() allocated by ast_asprintf(). * ari/resource_bridges.c:ari_bridges_play_helper(): Remove assignment to the wrong thing which is now not needed even if assigning to the right thing. Change-Id: Ib5252fb8850ecf0f78ed0ee2ca0796bda7e91c23 2017-11-06 08:05 +0000 [250c173cfb] Sean Bright * res_pjsip: Ignore empty TLS configuration When using realtime, fields that are not explicitly set by an administrator are still presented to sorcery as empty strings. Handle this case explicitly. In this particular case, if any of these fields are required for TLS support, their existence should be validated in the 'apply' handler once we have a complete transport definition. ASTERISK-27032 #close Reported by: seanchann.zhou Change-Id: Ie3b5fb421977ccdb33e415d4ec52c3fd192601b7 2017-11-06 03:18 +0000 [7dd2b18e32] Alexander Traud * tcptls: Print notice when TLS is enabled but not configured. Asterisk can be compiled without a SSL/TLS library, without the Development Headers of OpenSSL. However, if TLS (SIP) or Secure-WebSockets (WebRTC) was enabled in a configuration file, Asterisk did not notice the user. Asterisk failed silently, only the corresponding TCP ports were not open. ASTERISK-27394 Reported-by: mossley74 Change-Id: Ib8b7539a5b2af8154c22e5f7a40fc68f95d95b93 2017-11-06 03:21 +0000 [b5331af53b] Corey Farrell * configure: Add autoconf check for libopusfile. This check is being added to make it easier for end-users of third party open source Opus modules. This was removed by ASTERISK-26426 but only the module needed to be removed. Change-Id: I62b9cd0c4fa8a77596ab0e042948a643a1152677 2017-11-04 06:05 +0000 [5f4197735d] Alexander Traud * install_prereq: Checkout of libSRTP 2.x. Since Asterisk 13.17, libSRTP 2.x is supported. Therefore, its latest version is installed again via the script install_prereq. ASTERISK-27356 Change-Id: I13125839a79052356469e41edacbebff0a937d39 2017-11-01 17:47 +0000 [3bce5a9dfa] Richard Mudgett * Stasis/ARI: Fix off-nominal path json memory leaks. Change-Id: Id569c624c426e3b22a99936473c730592d8b83fb 2017-11-02 11:38 +0000 [675e50b903] Richard Mudgett * AOC: Fix AOC-S json memory leak. Change-Id: I3a1d40a41a8a7d00fa4a187de6a343a79155d3ef 2017-11-01 18:04 +0000 [4ea61eef94] Richard Mudgett * res_stasis_device_state.c: Optimize stasis_app_device_states_to_json() * Eliminate RAII_VAR() * Replace looped alloca with a char[] since that is how it is used anyway. Change-Id: Ia27e64a884afa0f50b9ffdb1cf23da6bfa51ffdf 2017-11-01 18:58 +0000 [8ec2db7084] Richard Mudgett * res_stasis_mailbox.c: Fix leak of mailbox container. Change-Id: I7d33c1635713047e7d1597c9d882f7dc006d94b4 2017-11-03 10:35 +0000 [d3cfcc0da6] Corey Farrell * Build System: Fix build failure caused by recent CLI improvements. We use the editline library to help with filename completion in our CLI interface. Some systems failed to find the header when included from loader.c. This is fixed by setting the proper CFLAGS for the build of loader.o. ASTERISK-27378 Change-Id: Ib7fd496f1d7ed48141a2eadd5dd61cab2f2308be 2017-11-01 11:12 +0000 [ffcb7e2a25] Ben Ford * res_pjsip: Add to list of valid characters for from_user. Fixes a regression where some characters were unable to be used in the from_user field of an endpoint. Additionally, the backtick was removed from the list of valid characters, since it is not valid, and it was replaced with a single quote, which is a valid character. ASTERISK-27387 Change-Id: Id80c10a644508365c87b3182e99ea49da11b0281 2017-10-30 17:30 +0000 [bfb0f27c87] Corey Farrell * Modules: Additional improvements to CLI completion. Replace 'needsreload' argument with a 'type' argument to specify which type of modules you want completion. This provides more accurate CLI completion for load and unload commands. * 'module unload' now excludes modules that have active references or are not running. * 'module load' now excludes modules that are already running. * 'core set debug [atleast] [module]' shows running modules only. ASTERISK-27378 Change-Id: Iea3e00054461484196c46f688f02635cc886bad1 2017-11-02 02:11 +0000 [7c35740ba1] Corey Farrell * Add missing menuselect dependencies. This adds menuselect dependencies for modules that use symbols of other modules. ASTERISK-27390 Change-Id: Ia2d2849f5b87a72af7324a82edc3f283eafb5385 2017-11-01 19:46 +0000 [73a5e9f0e9] Corey Farrell * Prevent unload of modules which implement an Optional API. Once an Optional API module is loaded it should stay loaded. Unloading an optional API module runs the risk of a crash if something else is using it. This patch causes all optional API providers to tell the module loader not to unload except at shutdown. ASTERISK-27389 Change-Id: Ia07786fe655681aec49cc8d3d96e06483b11f5e6 2017-11-01 13:58 +0000 [d524ad523d] Sean Bright * pjsip_message_filter: Only do interface lookup for wildcard addresses. Change-Id: Ie083987e69dc43b6861671c218cacacc11b2072f 2017-10-31 15:08 +0000 [a7c00707a5] Kevin Harwell * features: Bridge application's BRIDGERESULT not appropriately set The dialplan application "Bridge" was not setting the BRIDGERESULT to failure when a failure did occur. Even worse if it did fail to join the bridge it would still report success. This patch now sets the BRIDGERESULT variable to an appropriate value for a given condition state. Also, removed the value INCOMPATIBLE as a valid result type since it is no longer used. ASTERISK-27369 #close Change-Id: I22588e7125a765edf35cff28c98ca143e9927554 2017-10-30 09:20 +0000 [1b535d8457] Tzafrir Cohen * ast_coredumper: allow setting asterisk binary explicitly Adds an extra option, --asterisk-bin= to ast_coredumper. If provided, the binary given to gdb will be the parameter, rather than asterisk from the PATH. ASTERISK-27380 #close Change-Id: I25f5b91eb75059b0fb2f142e468c26b283b0a9f3 2017-10-30 00:32 +0000 [cee81b3c8b] Corey Farrell * Modules: Fix issues with CLI completion. * Stop using ast_module_helper to check if a module is loaded, use ast_module_check instead (app_confbridge and app_meetme). * Stop ast_module_helper from listing reload classes when needsreload was not requested. ASTERISK-27378 Change-Id: Iaed8c1e4fcbeb242921dbac7929a0fe75ff4b239 2017-10-28 19:18 +0000 [8436f1d35a] Igor Goncharovskiy * app_agent_spool: Fix typo in dtmf features usage desctiption Fix typo, that specify usage wrong option 'dtmf-features' for CHANNEL() function instead of correct 'dtmf_features' ASTERISK-27377 #close Change-Id: I15ecc829c1035b359584673e12cdb5c9291ac930 2017-10-27 13:41 +0000 [987b16e8f9] Corey Farrell * res_pjsip_pubsub: Resolve potential crash in allocate_subscription. When allocate_subscription fails to initialize fields of the new sub it calls destroy_subscription. Change-Id: I5b79c915ec216dc00c13c1e4172137864a4bec85 2017-10-26 12:18 +0000 [2db97ee219] Richard Mudgett * app_voicemail.c: Fix compiler warning with IMAP build. ASTERISK-27181 Change-Id: Ic4468b49860bd7f67e922baf4c9e96828c184d17 2017-10-25 14:38 +0000 [ca7f3d297b] Richard Mudgett * codec.c: Defensively check the returned samples. Earlier versions of the codec_opus samples_count callback can return negative error values on undecodable frames. This resulted in a divide by zero exception. * Added a defensive check in ast_codec_samples_count() for a "negative" samples count return value. Log the event and set the count to zero. ASTERISK-27194 Change-Id: Icf69350307ecbbc80a3d74de46af9bd80ea17819 2017-10-24 10:33 +0000 [7385d1e017] Joshua Colp * res_pjsip: Add 'ip' as a valid option to 'identify_by' on endpoint. When the identify_by option on an endpoint is set to ip it will only be identified using the res_pjsip_endpoint_identifier_ip module. This ensures that it is not mistakenly matched using the username of the From header. To ensure behavior has not changed the default has been changed to "username,ip" for the identify_by option. ASTERISK-27206 Change-Id: I2170b86a7f7e221b4f00bf14aa1ef1ac5b050bbd 2017-10-25 12:26 +0000 [3f7ad66245] George Joseph * ast_coredumper: Add gzipping of binaries and display of signal info The --tarball-coredump option now creates a gzipped tarball of coredumps processed, their results txt files and copies of /etc/os-release, /usr/sbin/asterisk, /usr/lib(64)/libasterisk* and /usr/lib(64)/asterisk as those files are needed to properly examine the coredump. The file will be named /tmp/asterisk..coredumps.tar.gz or /tmp/asterisk-.coredumps.tar.gz if --tarball-uniqueid was specified. Added dumps of *_siginfo to the top of the txt files so you can tell what signal was invoked. Change-Id: Ib9ee6d83592d4b1bc90cb3419a05376a88d1ded9 2017-03-30 09:51 +0000 [4772849016] Corey Farrell * Build System: Fix --disable-xmldoc option. The configure option to disable XML documentation does not currently work. This patch makes it effective, but also causes an ABI change by removing the ast_xmldoc_* symbols. Disabling xmldoc also prevents docs from being automatically generated, but they can still be manually generated with 'make doc/core-en_US.xml'. ASTERISK-26639 Change-Id: Ifac562340c09f80c83e0203de098fcac93bf8c44 2017-10-23 13:42 +0000 [dfe00b80e7] Ben Ford * http.c: Fix http header send content. Currently ast_http_send barricades a portion of the content that needs to be sent in order to establish a connection for things like the ARI client. The conditional and contents have been changed to ensure that everything that needs to be sent, will be sent. ASTERISK-27372 Change-Id: I8816d2d8f80f4fefc6dcae4b5fdfc97f1e46496d 2017-10-07 12:14 +0000 [23d05ebc49] Corey Farrell * hashtab: Use ast_free. A few places in hashtab use free instead of ast_free. Change-Id: I2ff089bad71640c03c3ce97f1b00fc962ef79427 2017-10-24 09:43 +0000 [c95ab4c1ce] Corey Farrell * chan_sip: Fix SUBSCRIBE with missing "Expires" header. When chan_sip receives a SUBSCRIBE request with no "Expires" header it processes the request as an unsubscribe. This is incorrect, per RFC3264 when the "Expires" header is missing a default expiry should be used. ASTERISK-18140 Change-Id: Ibf6dcd4fdd07a32c2bc38be1dd557981f08188b5 2017-10-24 07:24 +0000 [5351e862ee] Alexander Traud * lpc10: Avoid compiler warning when DONT_OPTIMIZE/COMPILE_DOUBLE. ASTERISK-23556 Reported by: Marcello Ceschia Change-Id: Ic27e88e0336a0d83877dc857938659dc5560b93c 2017-10-23 13:44 +0000 [ec278955a3] Corey Farrell * main/Makefile: Remove rule for non-existant testexpr2. Change-Id: Ibb3e47f27a395d74d8c5263db015b05434f5969b 2017-10-23 12:42 +0000 [6cec3149be] Corey Farrell * test_config: Fix failure and segfault when config_hook is run twice. On second run the config_hook test was unexpectedly failing to load test_config.conf because it was still unmodified since the last load. This is fixed by not passing CONFIG_FLAG_FILEUNCHANGED for the initial loads, only using it when we are tested that a reload of unmodified files do not initiate the hook. ASTERISK-25960 Change-Id: Ifd679509a23ed163e5cc647490bf7df4ae3cd856 2017-10-23 12:23 +0000 [4a2575a107] George Joseph * res_pjsip_sdp_rtp: Fix setting of address type for rtp_ipv6 create_outgoing_sdp_stream was setting "addr_type = STR_IP6" only when an ipv6 media_address was specified on the endpoint. If rtp_ipv6 was set and ast_sip_get_host_ip_string returned an ipv6 address, we were leaving the addr_type set at the default of STR_IP4. This caused the address type to be set incorrectly on the "o" and "c" SDP attributes even though the address was set correctly. Some clients don't like the mismatch. * Removed the test for endpoint/media_address and now check all addresses for ipv6. ASTERISK-27198 Reported by: Martin Cisárik Change-Id: I5214fc31b728117842243807e7927a319cf77592 2017-10-23 07:53 +0000 [b4cb0050bd] Richard Mudgett * app_agent_pool.c: Fix online documentation typo. Change-Id: Ib0bc95fd0ec288c78c313823254d7a84ebfc4429 2017-10-22 17:32 +0000 [07e17fd04f] Joshua Colp * res_xmpp: Ensure the connection filter is available. Users of the API that res_xmpp provides expect that a filter be available on the client at all times. When OAuth authentication support was added this requirement was not maintained. This change merely moves the OAuth authentication to after the filter is created, ensuring users of res_xmpp can add things to the filter as needed. ASTERISK-27346 Change-Id: I4ac474afe220e833288ff574e32e2b9a23394886 2017-10-21 03:44 +0000 [c7a9a6ef0c] Alexander Traud * chan_sip: Crypto attribute not last but first on SDP media level. This matches the behavior of the other SIP channel driver, chan_pjsip. ASTERISK-27365 Change-Id: I8f23a51290a58b75816da2999ed1965441dfc5d6 2017-10-17 10:53 +0000 [b57dcc8d9c] Richard Mudgett * res_pjproject.c: Upgrade bundled PJPROJECT to 2.7 Update patches included in bundled PJPROJECT for the new version. ASTERISK-27355 Change-Id: I9ac5dbbffaadca25ad24fac8b9ab615e5ace6083 2017-10-18 13:41 +0000 [fb4ed70e62] Corey Farrell * res_pjsip_pubsub: Prevent unload except during shutdown. Prevent unload of the module as certain pjsip initialization functions cannot be reversed. This required a reorder of the module_load so that the non-reversable pjsip functions are not called until all potential errors have been ruled out. ASTERISK-24483 Change-Id: Iee900f20bdd6ee1bfe23efdec0d87765eadce8a7 2017-10-18 13:37 +0000 [216251abcb] Corey Farrell * res_pjsip_refer: Prevent unload except during shutdown. Prevent unload of the module as certain pjsip initialization functions cannot be reversed. ASTERISK-24483 Change-Id: I94597ec8b8491f5af9c57bf66dbc3b078fe2d49d 2017-10-18 12:04 +0000 [7dd7ca2858] Corey Farrell * chan_sip: Fix output of 'sip set debug off'. When sip.conf contains 'sipdebug=yes' it is impossible to disable it using CLI 'sip set debug off'. This corrects the output of that CLI command to instruct the user to turn sipdebug off in the configuration file. ASTERISK-23462 #close Change-Id: I1cceade9caa9578e1b060feb832e3495ef5ad318 2017-10-06 10:51 +0000 [0a11097a22] Matt Jordan * res_corosync: Fix linking issue with Corosync 2.x At some point in time in the history of Corosync (certainly within the 2.x branch), the corosync_cfg_state_track function was removed. Unfortunately, the cfg library is only linked if this function is present. Without the cfg library being linked to res_corosync, loading of res_corosync will fail. This patch makes it so that detecting corosync's core libraries, determined by the COROSYNC external library checks, links both the cpg and cfg libraries with res_corosync. Change-Id: I674e9e1c8fea11c3bf81154aaa7c1fd43f945465 2017-10-06 15:55 +0000 [7f8c212e75] Richard Mudgett * cdr.c: Rename the Party A CDR container. * Rename the Party A CDR container from active_cdrs_by_channel to active_cdrs_master. * Renamed the support functions associated with active_cdrs_master appropriately. ASTERISK-27335 Change-Id: I6104bb3edc3a0b7243ce502e45e8832b0cff14f7 2017-10-02 17:42 +0000 [85723a9e50] Richard Mudgett * cdr.c: Add container to key off of Party B channel names. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is because of a n*m loop used when processing Party B information. * Added a new CDR container that is keyed to Party B so we don't need such a large loop when processing Party B information. NOTE: To reduce the size of the patch I deferred to another patch the renaming of the Party A active_cdrs_by_channel container to active_cdrs_master and renaming the container's hash and cmp functions appropriately. ASTERISK-27335 Change-Id: I0bf66e8868f8adaa4b5dcf9e682e34951c350249 2017-10-10 07:42 +0000 [944e500e95] Tzafrir Cohen * declare optional openssl dependencies in moduleinfo Declare optional openssl dependencies in: * res_rtp_asterisk.c * tcptls.c ASTERISK-27328 #close Change-Id: I2636f1c05b8104b4fe6f36cce0ebd9a98b9c78ab 2017-10-13 09:43 +0000 [dcbf61a31e] Alexander Traud * res_pjsip_session: Rewrite o= with external_media_address. PJSIP allows a domain name as external_media_address. This allows chan_pjsip to be used behind a NAT with changing IP addresses. The IP address of that domain is resolved to the c= line already. This change sets also the o= line to that domain. ASTERISK-27341 #close Change-Id: I690163b6e762042ec38b3995aa5c9bea909d8ec4 2017-10-14 04:11 +0000 [85cada85d6] Guido Falsi * chan_dahdi: wrap include file which is not present on BSD systems in #ifdef The sys/sysmacros.h include file does not exist in BSD systems and is not required to build this module there. Since an "#if defined(__NetBSD__) || defined(__FreeBSD__)" section already exist I moved that include line inside it's #else branch. ASTERISK-27343 #close Change-Id: Ibfb64f4e9a0ce8b6eda7a7695cfe57916f175dc1 2017-10-13 08:51 +0000 [89f11364f6] Corey Farrell * ast_bt_get_symbols: Prevent double-free. It's possible for bfdobj to be created but syms not created. If syms was not allocated in the current loop iteration but was allocated in the previous iteration it would crash. ASTERISK-27340 Change-Id: I5b110c609f6dfe91339f782a99a431bca5837363 2017-10-13 08:12 +0000 [114ed320ea] Alexander Traud * tcptls: NULL-check the parameter of ast_ssl_teardown before accessing it. This avoids a crash on stopping a chan_sip which failed to start its TLS server. ASTERISK-27339 #close Change-Id: I327fc70db68eaaca5b50a15c7fd687fde79263d5 2017-09-29 14:26 +0000 [a8c6c3bd7d] Richard Mudgett * cdr.c: Eliminated many calls to ao2_global_obj_ref(). The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were getting the global config to determine if we needed to log a debugging message. * Many calls to ao2_global_obj_ref() were just so we could determine if debug mode is enabled. Made a global flag to check instead. * Eliminated many RAII_VAR() usages associated with the remaining ao2_global_obj_ref() calls. * Added missing NULL checks for the returned ao2_global_obj_ref() value. ASTERISK-27335 Change-Id: Iceaad93172862f610cad0188956634187bfcc7cd 2017-10-06 13:45 +0000 [b56fa63db8] Richard Mudgett * cdr.c: Defer getting ao2_global_obj_ref() until needed. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were getting the global config even if we didn't need it. * Most uses of the global config were only needed on off nominal code paths so it makes sense to not get it until absolutely needed. ASTERISK-27335 Change-Id: I00c63b7ec233e5bfffd5d976f05568613d3c2365 2017-10-05 18:08 +0000 [92c5cf3920] Richard Mudgett * cdr.c: Set stringfields only if they are different. The CDR performance gets worse the further it gets behind in processing stasis messages. One of the reasons is we were repeatedly setting string fields to potentially the same string in base_process_party_a(). Setting a string field involves allocating room for the new string out of a memory pool which may have to allocate even more memory. * Check to see if the string field is already set to the desired string. ASTERISK-27335 Change-Id: I3ccb7e23f1488417e08cafe477755033eed65a7c 2017-10-05 18:03 +0000 [6393c106ca] Richard Mudgett * cdr.c: Fix setting dnid, callingsubaddr, and calledsubaddr The string comparisons for setting these CDR variables was inverted. We were repeatedly setting these CDR variables only if the channel snapshots had the same value. ASTERISK-27335 Change-Id: I9482073524411e7ea6c03805b16de200cb1669ea 2017-10-11 06:04 +0000 [407b78504d] Torrey Searle * contrib/script/sip_to_pjsip: implement 'all' for allow/disallow when 'all' is specified in an allow or disallow section, it should erase all values from the inverse section in the default config. E.G. allow=all should erase any deny values from default config & vice-versa ASTERISK-27333 #close Change-Id: I99219478fb98f08751d769daaee0b7795118a5a6 2018-02-21 19:00 +0000 Asterisk Development Team * asterisk certified/13.18-cert3 Released. 2018-01-31 13:37 +0000 [b8f704a1c5] Kevin Harwell * AST-2018-003: Crash with an invalid SDP fmtp attribute pjproject's fmtp retrieval function failed to catch invalid fmtp attributes. Because of this Asterisk would crash if given an SDP with an invalid fmtp attribute. When retrieving the format this patch now makes sure the fmtp attribute is available. If not available it now returns an error status. ASTERISK-27583 #close Change-Id: I5cebe000ce2d846cae3af33b6d72c416e51caf2f 2018-01-31 13:33 +0000 [ad93b6a031] Kevin Harwell * AST-2018-002: Crash with an invalid SDP media format description pjproject's media format parsing algorithm failed to catch invalid values. Because of this Asterisk would crash if given an SDP with a invalid media format description. When parsing the media format description this patch now properly parses the value and returns an error status if it can't successfully parse/convert the value. ASTERISK-27582 #close Change-Id: I883b3a4ef85b6972397f7b56bf46c5779c55fdd6 2018-02-06 12:07 +0000 [06acb4405e] George Joseph * AST-2018-005: res_pjsip_transport_management: Move to core Since res_pjsip_transport_management provides several attack mitigation features, its functionality moved to res_pjsip and this module has been removed. This way the features will always be available if res_pjsip is loaded. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: I21a2d33d9dda001452ea040d350d7a075f9acf0d 2018-02-06 11:28 +0000 [bfa7b20040] George Joseph * AST-2018-005: Fix tdata leaks when calling pjsip_endpt_send_response(2) pjsip_distributor: authenticate() creates a tdata and uses it to send a challenge or failure response. When pjsip_endpt_send_response2() succeeds, it automatically decrements the tdata ref count but when it fails, it doesn't. Since we weren't checking for a return status, we weren't decrementing the count ourselves on error and were therefore leaking tdatas. res_pjsip_session: session_reinvite_on_rx_request wasn't decrementing the ref count if an error happened while sending a 491 response. pre_session_setup wasn't decrementing the ref count if while sending an error after a pjsip_inv_verify_request failure. res_pjsip: ast_sip_send_response wasn't decrementing the ref count on error. ASTERISK-27618 Reported By: Sandro Gauci Change-Id: Iab33a6c7b6fba96148ed465b690ba8534ac961bf 2018-02-07 08:09 +0000 [6267846fab] Joshua Colp * AST-2018-004: Restrict the number of Accept headers in a SUBSCRIBE. When receiving a SUBSCRIBE request the Accept headers from it are stored locally. This operation has a fixed limit of 32 Accept headers but this limit was not enforced. As a result it was possible for memory outside of the allocated space to get written to resulting in a crash. This change enforces the limit so only 32 Accept headers are processed. ASTERISK-27640 Reported By: Sandro Gauci Change-Id: I99a814b10b554b13a6021ccf41111e5bc95e7301 2018-01-31 17:48 +0000 [8e170f5f18] Richard Mudgett * app_confbridge: ConfbridgeList event has standard channel shapshot headers. * Made the AMI ConfbridgeList action's ConfbridgeList events output all the standard channel snapshot headers instead of a few hand-coded channel snapshot headers. The benefit is that the CallerIDName gets disruptive characters like CR, LF, Tab, and a few others escaped. However, an empty CallerIDName is now output as "" instead of "". ASTERISK-27651 Change-Id: Iaf7d54a9d40194c2db060bc9b4979fab6720d977 2018-01-31 15:45 +0000 [37445bc69e] Richard Mudgett * app_confbridge: Add the Muted header to ConfbridgeJoin AMI event. ASTERISK-27651 Change-Id: Idef2ca54d242d1b894efd3fc7b360bc6fd5bdc34 2018-01-30 19:22 +0000 [4560752184] Richard Mudgett * bridge_softmix.c: Report not talking immediately when muted. Currently in app_confbridge if someone mutes a channel while that channel is talking, the talk detection code is suspended while the channel is muted. As far an an external observer is concerned, the muted channel's talk status is still "talking" even though the channel is not contributing audio to the conference bridge. When the channel is later unmuted, it takes the usual 'dsp_silence_threshold' option time to clear the talking status even though the channel may have stopped talking while the channel was muted. * In bridge_softmix.c, clear the talking status and report talking stopped if the channel was talking when the channel is muted. When the channel is unmuted and the channel is still talking then report the channel as talking since it is contributing audio to the bridge again. ASTERISK-27647 Change-Id: Ie4fdbc05a0bc7343c2972bab012e2567917b3d4e 2017-12-22 08:14 +0000 [6f65ebe76c] Sean Bright * Remove as much trailing whitespace as possible. Change-Id: I873c1c6d00f447269bd841494459efccdd2c19c0 2017-12-22 22:30 +0000 Asterisk Development Team * asterisk certified/13.18-cert2 Released. 2017-12-20 16:17 +0000 [e99d0fe16b] Kevin Harwell * AST-2017-014: res_pjsip - Missing contact header can cause crash Those SIP messages that create dialogs require a contact header to be present. If the contact header was missing from the message it could cause Asterisk to crash. This patch checks to make sure SIP messages that create a dialog contain the contact header. If the message does not and it is required Asterisk now returns a "400 Missing Contact header" response. Also added NULL checks when retrieving the contact header that were missing as a "just in case". ASTERISK-27480 #close Change-Id: I1810db87683fc637a9e3e1384a746037fec20afe 2017-12-21 18:38 +0000 Asterisk Development Team * asterisk certified/13.18-cert1 Released. 2017-12-13 14:26 +0000 [9571a75842] George Joseph * README: Remove outdated references to tex docs Added links to the wiki to replace references to outdated tex docs. ASTERISK-27430 Reported by: Corey Farrell Change-Id: I5007e732b30bc7b63d124c530ae8857c89991209 2017-12-01 16:18 +0000 [ffc2b0eb91] Corey Farrell * README-SERIOUSLY.bestpractices.txt: Convert to markdown Follow-up to conversion of README.md. Change-Id: I17ee7cf25bc027ece844efa2c1dfe613aff1e35b 2017-11-21 09:16 +0000 [3948e9d616] Corey Farrell * README: Convert to README.md. Convert the README file to markdown format, remove the old README. This causes websites like github to display the README in a much nicer format with live links. The raw file is still very readable from plain text editors and terminals. Change-Id: I7d13131764a9a9026e5f8a6ddb245a01bbd788e7 2017-11-17 19:36 +0000 [5a204aac04] Corey Farrell * README: Send people to secure websites where available. We should be sending people to secure web URL's where available. Update README's and docs. Change-Id: Id5b1e049b0b18b49a784f1254605aefa244ce19a 2017-12-13 13:23 +0000 [673d7d081e] George Joseph * Update for certified/13.18-cert1-rc3 2017-11-30 10:12 +0000 [10b3d4cea8] Joshua Colp * AST-2017-012: Place single RTCP report block at beginning of report. When the RTCP code was transitioned over to Stasis a code change was made to keep track of how many reports are present. This count controlled where report blocks were placed in the RTCP report. If a compound RTCP packet was received this logic would incorrectly place a report block in the wrong location resulting in a write to an invalid location. This change removes this counting logic and always places the report block at the first position. If in the future multiple reports are supported the logic can be extended but for now keeping a count serves no purpose. ASTERISK-27382 ASTERISK-27429 Change-Id: Iad6c8a9985c4b608ef493e19c421211615485116 2017-12-07 17:51 +0000 [f493631fc6] Richard Mudgett * chan_pjsip/res_pjsip: Add CHANNEL(pjsip,request_uri) This patch does three things associated with the initial incoming INVITE request URI. 1) Add access to the full initial incoming INVITE request URI. 2) We were not setting DNID on incoming PJSIP channels. The DNID is the user portion of the initial incoming INVITE Request-URI. The value is accessed by reading CALLERID(dnid). 3) Fix CHANNEL(pjsip,target_uri) documentation. * The initial incoming INVITE request URI is now available using CHANNEL(pjsip,request_uri). * Set the DNID on PJSIP channel creation so CALLERID(dnid) can return the initial incoming INVITE request URI user portion. * CHANNEL(pjsip,target_uri) now correctly documents that the target URI is the contact URI. * Refactored print_escaped_uri() out of channel_read_pjsip() to handle pjsip_uri_print() error condition when the buffer is too small. ASTERISK-27478 Change-Id: I512e60d1f162395c946451becb37af3333337b33 2017-12-07 18:22 +0000 [733231905f] Kevin Harwell * pjsip_options: contacts sometimes not being updated on reload For both dynamic and static contacts it was possible that potential AOR changes were not being applied to all contacts. This was because the qualify and schedule code was only retrieving AOR's, and contacts with frequencies greater than zero. For instance the following could happen: and AOR/contact has a frequency of 5, it then gets set to 0, and then a reload occurs. All scheduled OPTIONS are stopped, a list of AOR's is retrieved with frequency > 0, but none are selected since in this scenario all are 0. The contact for the one previously set to 5 though does not get updated, so it's status remains "AVAILABLE". This patch makes it so all contacts (static and dynamic) are selected, and appropriately updated if need be. ASTERISK-27467 #close Change-Id: I7a920170f89c683af9505d4723a44fc6841decdb 2017-12-07 18:18 +0000 [3585b56792] Kevin Harwell * pjsip_options: dynamic contact's fields not updated on reload Dynamic contacts were not being properly updated on reload. As a matter of fact any changes to the AOR that a dynamic contact was associated with were not being applied. On reload, this patch makes it so for each dynamic contact, the associated AOR is now retrieved and the AOR's fields are applied to the contact. ASTERISK-27467 Change-Id: I8e3165dc6a745218c1c9db837f77fafa0516985d 2017-12-05 18:04 +0000 [8640e5d819] Richard Mudgett * CDR: Fix deadlock setting some CDR values. Setting channel variables with the AMI Originate action caused a deadlock when you set CDR(amaflags) or CDR(accountcode). This path has the channel locked when the CDR function is called. The CDR function then synchronously passes the job to a stasis thread. The stasis handling function then attempts to lock the channel. Deadlock results. * Avoid deadlock by making the CDR function handle setting amaflags and accountcode directly on the channel rather than passing it off to the CDR processing code under a stasis thread to do it. * Made the CHANNEL function and the CDR function process amaflags the same way. * Fixed referencing the wrong message type in cdr_prop_write(). ASTERISK-27460 Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f 2017-11-16 02:47 +0000 [aa967e1eda] Pirmin Walthert * res_rtp_asterisk.c: Fix rtp source address learning for broken clients Some clients do not send rtp packets every ptime ms. This can lead to situations in which the rtp source learning algorithm will never learn the address of the client. This has been discovered on a Mac mini with a pjsip based softphone after updating to Sierra: as soon as USB headsets are involved, the softphone will send the second packet 30ms after the first, the third 30ms after the second and the fourth 1ms after the third. So in the old implmentation the rtp source learning algorithm was repeatedly reset on the fourth packet. The patch changes the algorithm in a way that doesn't take the arrival time between two consecutive packets into account but the time between the first and the last packet of a learning sequence. The patch also fixes a second problem: when a user was using a wrong value for the probation setting there was a LOG_WARNING output stating that the value had been set to the default value instead. However the code for setting the value back to defaults was missing. ASTERISK-27421 #close Change-Id: If778fe07678a6fd2041eaca7cd78267d0ef4fc6c 2017-11-30 12:50 +0000 [23fae9b147] Richard Mudgett * res_rtp_asterisk.c: Increase strictrtp learning timeout time. More complicated direct media reinvite negotiations can result in longer delays before direct media flows. The strictrtp learning timeout time was too short. One log showed that the first RTP packet came in just after three seconds. * Increase the strictrtp learning timeout time from 1.5 to 5 seconds. ASTERISK-27453 Change-Id: Ic5e711164cbb91b4d1c1e40c83697755640f138c 2017-11-30 14:38 +0000 [b205f05585] George Joseph * AST-2017-013: chan_skinny: Call pthread_detach when sess threads end chan_skinny creates a new thread for each new session. In trying to be a good cleanup citizen, the threads are joinable and the unload_module function does a pthread_cancel() and a pthread_join() on any sessions that are active at that time. This has an unintended side effect though. Since you can call pthread_join on a thread that's already terminated, pthreads keeps the thread's storage around until you explicitly call pthread_join (or pthread_detach()). Since only the module_unload function was calling pthread_join, and even then only on the ones active at the tme, the storage for every thread/session ever created sticks around until asterisk exits. * A thread can detach itself so the session_destroy() function now calls pthread_detach() just before it frees the session memory allocation. The module_unload function still takes care of the ones that are still active should the module be unloaded. ASTERISK-27452 Reported by: Juan Sacco Change-Id: I9af7268eba14bf76960566f891320f97b974e6dd 2017-12-01 06:07 +0000 [4d4c76c189] Joshua Colp * res_http_post: Not all versions of gmime have GMIME_MAJOR_VERSION. This change makes the presence of the GMIME_MAJOR_VERSION definition optional, as not all versions of gmime actually define it. ASTERISK-27454 Change-Id: I01d99590045971ed6787899147170a5954077238 2017-11-18 21:13 +0000 [86e12d7f37] Corey Farrell * tests: Fix warnings found on Mac. test_pbx used raise without explicitly including signal.h. On Mac for some reason nothing else includes it. test_logger checked if an unsigned int was negative. Switch the variable to 'int' so that error check can be effective. Change-Id: Ie1db5dd1818ac25cc2ae41b644f848b5865b1362 (cherry picked from commit 5fe2e7bfdcd06935594823faba67c71ead7ebcf5) 2017-11-15 11:02 +0000 [b64d924e1c] George Joseph * Update for certified/13.18-cert1-rc2 2017-11-13 14:35 +0000 [705dbd0468] Ben Ford * bundled_pjproject: Update to 2.7.1 Update from 2.7 to 2.7.1 for bundled pjproject. Changed version and removed patch files included in the update. Change-Id: I55cea8e734b318c2df9daf86aa0802c559ec8357 (cherry picked from commit e6ada55430c3df603f12cb20a56149dac61ce450) 2017-11-10 10:37 +0000 [0a62d69937] George Joseph * bundled_pjproject: sip_parser: Fix return code in pjsip_find_msg The default return code for pjsip_find_msg was PJ_SUCCESS so if a Content-Length header wasn't found at all, pjsip_find_msg was returning PJ_SUCCESS instead of PJSIP_EMISSINGHDR. Also added the volatile keyword to a few variables that are used both inside and outside the PJ_TRY/PJ_CATCH block. Partial fix for ASTERISK_27408 Change-Id: If82ba9de921e3d57df9c68cf96ee45ccc1491f7a (cherry picked from commit b5f2779a23aa6042893c2bdf6bebfcc5150b5300) 2017-11-10 07:06 +0000 [7e535a294e] Joshua Colp * pjsip: Add patch to allow all transports to be destroyed. If a transport is created with the same transport type, source IP address, and source port as one that already exists the old transport is moved into a linked list called "tp_list". If this old transport is later shutdown it will not be destroyed as the process checks whether the transport is valid or not. This check does not look at the "tp_list" when making the determination causing the transport to not be destroyed. This change updates the logic to query not just the main storage method for transports but also the "tp_list". Upstream issue https://trac.pjsip.org/repos/ticket/2061 ASTERISK-27411 Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429 2017-11-08 15:18 +0000 [3984942b13] Kevin Harwell * Update for certified/13.18-cert1-rc1 2017-10-19 13:35 +0000 [13508b8a16] Kevin Harwell * AST-2017-011 - res_pjsip_session: session leak when a call is rejected A previous commit made it so when an invite session transitioned into a disconnected state destruction of the Asterisk pjsip session object was postponed until either a transport error occurred or the event timer expired. However, if a call was rejected (for instance a 488) before the session was fully established the event timer may not have been initiated, or it was canceled without triggering either of the session finalizing states mentioned above. Really the only time destruction of the session should be delayed is when a BYE is being transacted. This is because it's possible in some cases for the session to be disconnected, but the BYE is still transacting. This patch makes it so the session object always gets released (no more memory leak) when the pjsip session is in a disconnected state. Except when the method is a BYE. Then it waits until a transport error occurs or an event timeout. ASTERISK-27345 #close Reported by: Corey Farrell Change-Id: I1e724737b758c20ac76d19d3611e3d2876ae10ed 2017-10-03 16:19 +0000 [be9ec689cf] Richard Mudgett * AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun cdr_object_update_party_b_userfield_cb() could overrun the fixed buffer if the supplied string is too long. The long string could be supplied by external means using the CDR(userfield) function. This may seem reminiscent to AST-2017-001 (ASTERISK_26897) and it is. The earlier patch fixed the buffer overrun for Party A's userfield while this patch fixes the same thing for Party B's userfield. ASTERISK-27337 Change-Id: I0fa767f65ecec7e676ca465306ff9e0edbf3b652 2017-10-19 13:53 +0000 [0e1a4d8c84] George Joseph * AST-2017-009: pjproject: Add validation of numeric header values Parsing the numeric header fields like cseq, ttl, port, etc. all had the potential to overflow, either causing unintended values to be captured or, if the values were subsequently converted back to strings, a buffer overrun. To address this, new "strto" functions have been created that do range checking and those functions are used wherever possible in the parser. * Created pjlib/include/limits.h and pjlib/include/compat/limits.h to either include the system limits.h or define common numeric limits if there is no system limits.h. * Created strto*_validate functions in sip_parser that take bounds and on failure call the on_str_parse_error function which prints an error message and calls PJ_THROW. * Updated sip_parser to validate the numeric fields. * Fixed an issue in sip_transport that prevented error messages from being properly displayed. * Added "volatile" to some variables referenced in PJ_CATCH blocks as the optimizer was sometimes optimizing them away. * Fixed length calculation in sip_transaction/create_tsx_key_2543 to account for signed ints being 11 characters, not 9. ASTERISK-27319 Reported by: Youngsung Kim at LINE Corporation Change-Id: I48de2e4ccf196990906304e8d7061f4ffdd772ff 2017-11-06 16:37 +0000 [7b4b17c843] Richard Mudgett * res_pjsip_registrar.c: Fix named AOR and pjproject group deadlock. One of the patches for ASTERISK_27147 introduced a deadlock regression. When the connection oriented transport shut down, the code attempted to remove the associated contact. However, that same transport had just requested a registration that we hadn't responded to yet. Depending upon timing we could deadlock. * Made send the REGISTER response after we completed processing the request contacts and released the named AOR lock to avoid the deadlock. ASTERISK-27391 Change-Id: I89a90f87cb7a02facbafb44c75d8845f93417364 2017-11-01 11:12 +0000 [18b0be292d] Ben Ford * res_pjsip: Add to list of valid characters for from_user. Fixes a regression where some characters were unable to be used in the from_user field of an endpoint. Additionally, the backtick was removed from the list of valid characters, since it is not valid, and it was replaced with a single quote, which is a valid character. ASTERISK-27387 Change-Id: Id80c10a644508365c87b3182e99ea49da11b0281 (cherry picked from commit ffcb7e2a2540181ea41062ca0e1bc3e4fed9b3a5) 2017-10-17 10:53 +0000 [d4b80e35a9] Richard Mudgett * res_pjproject.c: Upgrade bundled PJPROJECT to 2.7 Update patches included in bundled PJPROJECT for the new version. ASTERISK-27355 Change-Id: I9ac5dbbffaadca25ad24fac8b9ab615e5ace6083 2017-10-30 15:24 +0000 [d797270f4e] Kevin Harwell * Initialize 13.18-cert branch A new branch was created for what will be Asterisk certified 13.18. A couple of things needed to be done to the branch in order to complete initialization: Modified the version file to reflect the certified version. Updated all extended modules to be disabled by default. Change-Id: Ie1dd3cb146391dea92c9e3ef906dde8d7241fee2 2017-10-30 10:33 +0000 [719ac573a6] Kevin Harwell * Update for 13.18.0 2017-10-25 15:01 +0000 [82cedfbcb3] Kevin Harwell * Update for 13.18.0-rc2 2017-10-22 17:32 +0000 [db233704f4] Joshua Colp * res_xmpp: Ensure the connection filter is available. Users of the API that res_xmpp provides expect that a filter be available on the client at all times. When OAuth authentication support was added this requirement was not maintained. This change merely moves the OAuth authentication to after the filter is created, ensuring users of res_xmpp can add things to the filter as needed. ASTERISK-27346 Change-Id: I4ac474afe220e833288ff574e32e2b9a23394886 (cherry picked from commit 07e17fd04ffcf204400898660a4c118666596d5d) 2017-10-23 13:42 +0000 [72bf65f44f] Ben Ford * http.c: Fix http header send content. Currently ast_http_send barricades a portion of the content that needs to be sent in order to establish a connection for things like the ARI client. The conditional and contents have been changed to ensure that everything that needs to be sent, will be sent. ASTERISK-27372 Change-Id: I8816d2d8f80f4fefc6dcae4b5fdfc97f1e46496d 2017-10-13 12:46 +0000 [d5d1e98fa4] Kevin Harwell * Update for 13.18.0-rc1 2017-10-13 12:09 +0000 [4bc2aca9b7] Kevin Harwell * AMI: Increase version number Bump the AMI patch number since the following new addition was made: * Added a new CancelAtxfer action that cancels an attended transfer. Change-Id: I9bac528791bd62ef0e99243903b6bc7a6c7ab182 2017-08-25 08:19 +0000 [6d3ee9fb93] Thomas Sevestre * features, manager : Add CancelAtxfer AMI action Add action to cancel feature attended transfer with AMI interface ASTERISK-27215 #close Change-Id: Iab8a81362b5a1757e2608f70b014ef863200cb42 2017-10-06 04:55 +0000 [21d502818f] Daniel Tryba * res_pjsip_session: Prevent user=phone being added to anonimized URIs. Move ast_sip_add_usereqphone to be called after anonymization of URIs, to prevent the user_eq_phone adding "user=phone" to URIs containing a username that is not a phonenumber (RFC3261 19.1.1). An extra call to ast_sip_add_usereqphone on the saved version before anonymization is added to add user=phone" to the PAI. ASTERISK-27047 #close Change-Id: Ie5644bc66341b86dc08b1f7442210de2e6acdec6 2017-10-06 05:14 +0000 [af09996178] Daniel Tryba * res_pjsip: Prevent "user=phone" being added multiple times to header ast_sip_add_usereqphone adds "user=phone" to the header every time is is called without checking whether the param already exists. Preventing this by searching to string representation of header for "user=phone". ASTERISK-26988 #close Change-Id: Ib84383b07254de357dc6a98d91fc1d2c2c3719e6 2017-10-10 09:49 +0000 [8e05796e81] Tzafrir Cohen * cdr_mysql: avoid releasing a config string Fixes a memory corruption issue after a reload of cdr_mysql. Issue was accidentally included in 747beb1ed159f89a3b58742e4257740b3d6d6bba . ASTERISK-27270 #close Change-Id: I90b6a9d18710c0f9009466370bd5f4bac5d5d12e 2017-10-05 18:12 +0000 [5f6bad6733] Richard Mudgett * cdr.c: Defer misc checks. Try to defer some checks until needed in case there is an early exit. Change-Id: Ibc6b34c38a4f60ad4f9b67984b7d070a07257064 2017-10-11 07:03 +0000 [f3f141781c] George Joseph * chan_vpb: Fix a gcc 7 out-of-bounds complaint chan_vpb was trying to use sizeof(*p->play_dtmf), where p->play_dtmf is defined as char[16], to get the length of the array but since p->play_dtmf is an actual array, sizeof(*p->play_dtmf) returns the size of the first array element, which is 1. gcc7 validly complains because the context in which it's used could cause an out-of-bounds condition. Change-Id: If9c4bfdb6b02fa72d39e0c09bf88900663c000ba 2017-10-06 02:39 +0000 [416e35589e] Nathan Bruning * app_queue.c: clear moh field in init_queue ASTERISK-27301 #close Change-Id: Ic31361f34e2de3b6470e68fc37205a7711082eba 2017-10-10 12:01 +0000 [e71a65a358] Sean Bright * app_originate: Set ORIGINATE_STATUS correctly on failure We were ignoring the return value from ast_pbx_outgoing_exten() and ast_pbx_outgoing_app() which could fail before setting the reason code. This resulted in failures being reported as success. ASTERISK-25266 #close Reported by: Allen Ford Change-Id: Idf16237b7e41b527d2c69c865829128686beeb3b 2017-10-02 16:46 +0000 [42fdfffefc] Richard Mudgett * cdr.c: Eliminated simple RAII_VAR usages. Change-Id: I150505db307249a962987e7b941bdd369bb91f35 2017-10-09 22:51 +0000 [48971e4d43] Corey Farrell * res_pjproject: Fix cleanup of buildopts vector. ASTERISK-27306 Change-Id: I3bed0edf3f55b1d4adcbabb25ec14f11dc766c72 2017-10-03 16:09 +0000 [128f7ffaa2] Richard Mudgett * cdr.c: Replace redundant check with an ast_assert() The only caller of cdr_object_fn_table.process_party_b() explicitly does the check before calling. Change-Id: Ib0c53cdf5048227842846e0df9d2c19117c45618 2017-10-02 17:41 +0000 [3525081a7c] Richard Mudgett * cdr.c: Replace inlined code with ao2_t_replace() Change-Id: I9f424f5282ca7d833592f958d95f1b2bafb549b0 2017-09-29 12:07 +0000 [7366657a9a] Richard Mudgett * cdr.c: Use current ao2 flag names Change-Id: Ib59d7d2f2a4a822754628f2c48a308d6791a6e6e 2017-09-29 12:31 +0000 [34d55352a5] Richard Mudgett * cdr.h: Fix doxygen comments. * Also some misc formatting in cdr.c. Change-Id: Ied89a28802a662c37c43326a1aafdce596e0df4a 2017-09-20 18:36 +0000 [d388c18abf] Richard Mudgett * res_pjsip_registrar.c: Update remove_existing AOR contact handling. When "rewrite_contact" is enabled, the "max_contacts" count option can block re-registrations because the source port from the endpoint can be random. When the re-registration is blocked, the endpoint may give up re-registering and require manual intervention. * The "remove_existing" option now allows a registration to succeed by displacing any existing contacts that now exceed the "max_contacts" count. Any removed contacts are the next to expire. The behaviour change is beneficial when "rewrite_contact" is enabled and "max_contacts" is greater than one. The removed contact is likely the old contact created by "rewrite_contact" that the device is refreshing. ASTERISK-27192 Change-Id: I64c107a10b70db1697d17136051ae6bf22b5314b 2017-10-04 10:46 +0000 [82592c3673] Corey Farrell * res_pjsip: Fix issues that prevented shutdown of modules. res_pjsip and res_pjsip_session had circular references, preventing both modules from shutting down. * Move session supplement registration to res_pjsip. * Use create internal functions for use by pjsip_message_filter.c. ASTERISK-27306 Change-Id: Ifbd5c19ec848010111afeab2436f9699da06ba6b 2017-10-09 08:15 +0000 [6b16fa12c8] Sean Bright * res_config_sqlite: Don't enable SQLite CDRs when running 'make samples' Change-Id: I65a5190b2732b2246d67472db70dd37db64ddad4 2017-10-08 14:05 +0000 [39b68a41f7] David Hajek * res/res_ari.c Fix: Memory leaks in ARI when using Content-Type: application/json ASTERISK-27305 Reported by: David Hajek Tested by: David Hajek Change-Id: Ife3e289062e6cf7d0e7d342dbf79ed96feff441e 2017-10-08 09:11 +0000 [209916981a] Alexander Traud * tcptls: Do not re-bind to wildcard on client creation. Since ASTERISK-26922, this issue affected only those chan_sip which were * enabled for dual-stack (bindaddr=::), and * enabled for TCP (tcpenable=yes) and/or TLS (tlsenable=yes), and * tried to register and/or invite a IPv4-only service, * via TCP and/or TLS. Now, ast_tcptls_client_create does not re-bind to [::] anymore. ASTERISK-27324 #close Change-Id: I4b242837bdeb1ec7130dc82505c6180a946fd9b5 2017-10-05 16:26 +0000 [f1163c0f6f] Corey Farrell * res_pjsip: Fix leak of persistent endpoint references. Do not manually call sip_endpoint_apply_handler from load_all_endpoints. This is not necessary and causes memory leaks. Additionally reinitialize persistent->aors when we reuse a persistent object with a new endpoint. ASTERISK-27306 Change-Id: I59bbfc8da8a14d5f4af8c5bb1e71f8592ae823eb 2017-10-05 17:59 +0000 [8bf4be1048] Corey Farrell * vector: multiple evaluation of elem in AST_VECTOR_ADD_SORTED. Use temporary variable to prevent multiple evaluations of elem argument. This resolves a memory leak in res_pjproject startup. ASTERISK-27317 #close Change-Id: Ib960d7f5576f9e1a3c478ecb48995582a574e06d 2017-10-05 15:54 +0000 [5110600f1e] Corey Farrell * res_pjsip: Fix leak of fake_auth references. pjsip_distributor leaks references to fake_auth when the default realm has not changed. ASTERISK-27306 Change-Id: I3fcf103b3680ad2d1d4610dcd6738eeaebf4d202 2017-10-05 20:23 +0000 [462dd7c2de] Corey Farrell * main/strings: Fix uninitialized value. ast_strings_match uses sscanf and checks for non-zero return to verify a token was parsed. This is incorrect as sscanf returns EOF (-1) for errors. ASTERISK-27318 #close Change-Id: Ifcece92605f58116eff24c5a0a3b0ee08b3c87b1 2017-09-28 02:56 +0000 [29c442b587] Benoît Dereck-Tricot * res_calendar_icalendar: Filter out occurrences superceded by another VEVENT When we are loading the calendars, we call libical's icalcomponent_foreach_recurrence method for each VEVENT component that we have in our calendar. That method has no knowledge concerning the existence of the other VEVENT components and will feed our callback with all ocurrences matching the requested time span. The occurrences generated by icalcomponent_foreach_recurrence while expanding a recurring VEVENT's RRULE and RDATE properties can be superceded by an other VEVENT sharing the same UID. I use an external iterator (in libical terminology) to avoid messing with the internal ones from the calling function, and search for VEVENTS which could supersede the current occurrence. The event which can invalidate this occurence needs to have: - the same UID as our recurrent component (comp) - a RECURRENCE-ID property, which represents the start time of this occurrence If one component is found, just clean and return. ASTERISK-27296 #close Reported by: Benoît Dereck-Tricot Change-Id: I8587ae3eaa765af7cb21eda3b6bf84e8a1c87af8 2017-10-03 15:16 +0000 [6c30f4a2d1] Torrey Searle * contrib/thirdparty/sip_to_pjsip: add additional flag mappings add mappings for udptl redundancy, rtptimeout, and debug flags Change-Id: Ie73cf5c83c05dee01eb9624ede76c1a30225d73a 2017-10-02 07:48 +0000 [6dfe5b29b6] Daniel Tryba * res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy Currently privacy requests are only granted if the Privacy header value is exactly "id" (defined in RFC 3325). It ignores any other possible value (or a combination there of). This patch reverses the logic from testing for "id" to grant privacy, to testing for "none" and granting privacy for any other value. "none" must not be used in combination with any other value (RFC 3323 section 4.2). ASTERISK-27284 #close Change-Id: If438a21f31a962da32d7a33ff33bdeb1e776fe56 2017-09-28 17:37 +0000 [0945f10d3b] Richard Mudgett * app_queue.c: Fix announcements when announce-to-first-user not enabled. The previous patch for ASTERISK-27216 made it so you wouldn't get any position or periodic announcements unless you had announce-to-first-user enabled. The announce-to-first-user feature was added by ASTERISK_21782 as a result of the patch which introduced the redundant announcements that ASTERISK-27216 removes. * By noting that the makeannouncement variable is used to suppresses the first user announcement, we set its initial value to the announce-to-first-user enable setting. ASTERISK-27216 Change-Id: Ieaeb7dbea8ae7073086b775fbafe0625b000b10a 2017-09-21 14:43 +0000 [a433bb38b5] Richard Mudgett * heap.c: No need to calloc heap pointer array. Change-Id: I5ae2f316229f336eb90d99c7af7ed07a33097e68 2017-09-27 13:45 +0000 [47620ea862] George Joseph * logger: Bring back ability to turn debug on by source file Somewhere along the way we lost the ability to debug individual source files. For modules, this wasn't a big deal but all the source files in ./main are in the one "core" module so debugging individual core capabilities was almost impossible. * Added a test to DEBUG_ATLEAST that also checks __FILE__ instead of just module name. Any source file will work even if it's in a module subdirectory. Change-Id: Icc0af41837f3b1679dec7af21fa32cd1f7469f6e 2017-09-26 11:01 +0000 [d70d7b2f5d] George Joseph * pjsip_message_filter: Fix regression causing bad contact address The "res_pjsip: Filter out non SIP(S) requests" commit moved the filtering of messages to pjproject's PJSIP_MOD_PRIORITY_TRANSPORT_LAYER in order to filter out incoming bad uri schemes as early as possible. Since the change affected outgoing messages as well and the TRANSPORT layer is the last to be run on outgoing messages, we were overwriting the setting of external_signaling_address (which is set earlier by res_pjsip_nat) with an internal address. * pjsip_message_filter now registers itself as a pjproject module twice. Once in the TSX layer for the outgoing messages (as it was originally), then a second time in the TRANSPORT layer for the incoming messages to catch the invalid uri schemes. ASTERISK-27295 Reported by: Sean Bright Change-Id: I2c90190c43370f8a9d1c4693a19fd65840689c8c 2017-09-13 21:31 +0000 [221d8a5c24] Richard Mudgett * res_rtp_asterisk.c: Fix bridge_p2p_rtp_write() reentrancy potential. The bridge_p2p_rtp_write() has potential reentrancy problems. * Accessing the bridged RTP members must be done with the instance1 lock held. The DTMF and asymmetric codec checks must be split to be done with the correct RTP instance struct locked. i.e., They must be done when working on the appropriate side of the point to point bridge. * Forcing the RTP mark bit was referencing the wrong side of the point to point bridge. The set mark bit is used everywhere else to set the mark bit when sending not receiving. The patches for ASTERISK_26745 and ASTERISK_27158 did not take into account that not everything carried by RTP uses a codec. The telephony DTMF events are not exchanged with a codec. As a result when RFC2833/RFC4733 sent digits you would crash if "core set debug 1" is enabled, the DTMF digits would always get passed to the core even though the local native RTP bridge is active, and the DTMF digits would go out using the wrong SSRC id. * Add protection for non-format payload types like DTMF when updating the lastrxformat and lasttxformat. Also protect against non-format payload types when checking for asymmetric codecs. ASTERISK-27292 Change-Id: I6344ab7de21e26f84503c4d1fca1a41579364186 2017-09-25 13:09 +0000 [f3b1b64d21] Sean Bright * pjproject: Patch to correct STUN FINGERPRINT usage Change-Id: I0e453253dff1388b0186b36c754457c1d0d12db6 2017-09-25 10:59 +0000 [8d2c3effc2] Richard Mudgett * channel.c: Fix invalid reference in conditionaled out code. ASTERISK-27289 Change-Id: I7a415948116493050614d9f4fa91ffbe0c21ec4c 2017-09-25 07:25 +0000 [690f7f7c76] George Joseph * build: A few gcc 7 error fixes Change-Id: I7b5300fbf1af7d88d47129db13ad6dbdc9b553ec 2017-09-22 10:02 +0000 [f39af4d36d] Sean Bright * res_pjsip: Use ast_sip_is_content_type() where appropriate Change-Id: If3ab0d73d79ac4623308bd48508af2bfd554937d 2017-09-19 05:22 +0000 [c98e980fff] Rodrigo Ramírez Norambuena * res_config_pgsql: Fix removed support to previous for versions PostgreSQL 9.1 In PostgreSQL 9.1 the backslash are string literals and not the escape of characters. In previous issue ASTERISK_26057 was fixed the use of escape LIKE but the support for old version of Postgresql than 9.1 was dropped. The sentence before make was "ESCAPE '\'" but in version before than 9.1 need it to be as follow "ESCAPE '\\'". ASTERISK-27283 Change-Id: I96d9ee1ed7693ab17503cb36a9cd72847165f949 2017-09-15 02:59 +0000 [0adf6f3bd9] Stefan Engström * app_queue: Only do announcement logic between ringing cycles This patch reverts the change by patch 2263 from old reviewboard. Note that reverting that 2263-patch still preserves the behaviour that the commit log of the 2263-patch claimed to add. The reason for this is: The function wait_for_answer is only called from try_calling which in turn is only called from the main for loop in queue_exec, and earlier in that loop we already check the things that's removed by this patch. There's no need to check those things twice each loop iteration, and I think the proper place to check it is before each ringing cycle. By checking it in wait_for_answer, you allow the issue explained in the jira - that the head caller hears announcements while the agents' sip phones are actively ringing. Reported-by: Stefan Engström Tested-by: Stefan Engström ASTERISK-27216 #close Change-Id: Ic4290dc75256f9743900c6762ee1bb915f672db0 2017-09-07 04:41 +0000 [da40976987] Jean Aunis * bridge : Fix one-way direct-media when early bridging with native_rtp When two channels were early bridged in a native_rtp bridge, the RTP description on one side was not updated when the other side answered. This patch forbids non-answered channels to enter a native_rtp bridge, and triggers a bridge reconfiguration when an ANSWER frame is received. ASTERISK-27257 Change-Id: If1aaee1b4ed9658a1aa91ab715ee0a6413b878df 2017-09-19 10:38 +0000 [828a0611bc] George Joseph * res_pjsip_pubsub: Check for Content-Type header in rx_notify_request pubsub_on_rx_notify_request wasn't checking for a null Content-Type header before checking that it was application/simple-message-summary. ASTERISK-27279 Reported by: Ross Beer Change-Id: Iec2a6c4d2e74af37ff779ecc9fd35644c5c4ea52 2017-09-19 09:34 +0000 [94f616e5e2] David J. Pryke * chan_sip: Expose read-only access to the full SIP INVITE Request-URI Provide a way to get the contents of the the Request URI from the initial SIP INVITE in dial plan function call. (In this case "${CHANNEL(ruri)}") ASTERISK-27278 Reported by: David J. Pryke Tested by: David J. Pryke Change-Id: I1dd4d6988eed1b6c98a9701e0e833a15ef0dac3e 2017-09-18 10:27 +0000 [cfc0ca1fb5] Alexander Traud * tcptls: Fixed a white space error. ASTERISK-26606 Change-Id: I81a7268ef7ba012d4d80d44c70b6276d48e397fa 2017-09-18 10:00 +0000 [99a08eb7ab] Alexander Traud * res_srtp: lower log level of auth failures Previously, sRTP authentication failures were reported on log level WARNING. When such failures happen, each RT(C)P packet is affected, spamming the log. Now, those failures are reported at log level VERBOSE 2. Furthermore, the amount is further reduced (previously all two seconds, now all three seconds). Additionally, the new log entry informs whether media (RTP) or statistics (RTCP) are affected. ASTERISK-16898 #close Change-Id: I6c98d46b711f56e08655abeb01c951ab8e8d7fa0 2017-09-13 03:46 +0000 [f1eb36ea51] alex * cdr_mysql.c: Apply cdrzone to start and answer Change-Id: I7de0a5adc89824a5f2b696fc22c80fc22dff36b0 2017-08-25 17:01 +0000 [6d4b801c83] Richard Mudgett * AST-2017-008: Improve RTP and RTCP packet processing. Validate RTCP packets before processing them. * Validate that the received packet is of a minimum length and apply the RFC3550 RTCP packet validation checks. * Fixed potentially reading garbage beyond the received RTCP record data. * Fixed rtp->themssrc only being set once when the remote could change the SSRC. We would effectively stop handling the RTCP statistic records. * Fixed rtp->themssrc to not treat a zero value as special by adding rtp->themssrc_valid to indicate if rtp->themssrc is available. ASTERISK-27274 Make strict RTP learning more flexible. Direct media can cause strict RTP to attempt to learn a remote address again before it has had a chance to learn the remote address the first time. Because of the rapid relearn requests, strict RTP could latch onto the first remote address and fail to latch onto the direct media remote address. As a result, you have one way audio until the call is placed on and off hold. The new algorithm learns remote addresses for a set time (1.5 seconds) before locking the remote address. In addition, we must see a configured number of remote packets from the same address in a row before switching. * Fixed strict RTP learning from always accepting the first new address packet as the new stream. * Fixed strict RTP to initialize the expected sequence number with the last received sequence number instead of the last transmitted sequence number. * Fixed the predicted next sequence number calculation in rtp_learning_rtp_seq_update() to handle overflow. ASTERISK-27252 Change-Id: Ia2d3aa6e0f22906c25971e74f10027d96525f31c 2017-09-13 14:14 +0000 [5075cc8eed] Sean Bright * res_calendar: On reload, update all configuration This changes the behavior of res_calendar to drop all existing calendars and re-create them whenever a reload is done. The Calendar API provides no way for configuration information to be pushed down to calendar 'techs' so updated settings would not take affect until a module unload/load was done or Asterisk was restarted. Asterisk 15+ already has a configuration option 'fetch_again_at_reload' that performs a similar function. Also fix a tiny memory leak in res_calendar_caldav while we're at it. ASTERISK-25524 #close Reported by: Jesper Change-Id: Ib0f8057642e9d471960f1a79fd42e5a3ce587d3b 2017-09-13 16:23 +0000 [63900374fa] George Joseph * res_pjsip: Filter out non SIP(S) requests Incoming requests with non sip(s) URIs in the Request, To, From or Contact URIs are now rejected with PJSIP_SC_UNSUPPORTED_URI_SCHEME (416). This is performed in pjsip_message_filter (formerly pjsip_message_ip_updater) and is done at pjproject's "TRANSPORT" layer before a request can even reach the distributor. URIs read by res_pjsip_outbound_publish from pjsip.conf are now also checked for both length and sip(s) scheme. Those URIs read by outbound registration and aor were already being checked for scheme but their error messages needed to be updated to include scheme failure as well as length failure. Change-Id: Ibb2f9f1d2dc7549da562af4cbd9156c44ffdd460 2017-09-13 14:08 +0000 [db785ddb92] Sean Bright * res_calendar: Various fixes * The way that we were looking at XML elements for CalDAV was extremely fragile, so use SAX2 for increased robustness. * Don't complain about a 'channel' not be specified if autoreminder is not set. Assume that if 'channel' is not set, we don't want to be notified. * Fix some truncated CLI output in 'calendar show calendar' and make the 'Autoreminder' description a bit more clear ASTERISK-24588 #close Reported by: Stefan Gofferje ASTERISK-25523 #close Reported by: Jesper Change-Id: I200d11afca6a47e7d97888f286977e2e69874b2c 2017-09-13 09:38 +0000 [0688f61a01] Sean Bright * chan_rtp: Use μ-law by default instead of signed linear Multicast/Unicast RTP do not use SDP so we need to use a format that cleanly maps to one of the static RTP payload types. Without this change, an Originate to a Multicast or Unicast channel without a format specified would produce no audio on the receiving device. ASTERISK-21399 #close Reported by: Tzafrir Cohen Change-Id: I97e332b566e85da04b0004b9b0daae746cfca0e3 2017-09-11 05:46 +0000 [ed2a4ee81e] George Joseph * res_pjsip: Add handling for incoming unsolicited MWI NOTIFY A new endpoint parameter "incoming_mwi_mailbox" allows Asterisk to receive unsolicited MWI NOTIFY requests and make them available to other modules via the stasis message bus. res_pjsip_pubsub has a new handler "pubsub_on_rx_mwi_notify_request" that parses a simple-message-summary body and, if endpoint->incoming_mwi_account is set, calls ast_publish_mwi_state with the voice-message counts from the message. Change-Id: I08bae3d16e77af48fcccc2c936acce8fc0ef0f3c 2017-09-08 21:41 +0000 [044674c0cd] Richard Mudgett * res_rtp_asterisk.c: Add doxygen to RTCP payload types. Change-Id: I3f20ce428777cc4ce9c13b2f808d29ff8c873998 2017-09-11 05:52 +0000 [5ff2d06aa6] George Joseph * alembic: Fix typo in add_auto_info_to_endpoint_dtmf_mode The downgrade function was missing "_v2" at the end of the alter column type. Change-Id: Iaa9bcef48d6f3590ce07a61342d8e66f00263d8e 2017-09-10 06:17 +0000 [babb617f20] Walter Doekes * res/res_pjsip: Fix localnet checks in pjsip, part 2. In 45744fc53, I mistakenly broke SDP media address rewriting by misinterpreting which address was checked in the localnet comparison. Instead of checking the remote peer address to decide whether we need media address rewriting, we check our local media address: if it's local, then we rewrite. This feels awkward, but works and even made directmedia work properly if you set local_net. (For the record: for local peers, the SDP media rewrite code is not called, so the comparison does no harm there.) ASTERISK-27248 #close Change-Id: I566be1c33f4d0a689567d451ed46bab9c3861d4f 2017-09-05 11:13 +0000 [ad606844be] Florian Floimair * alembic: Add support for MS-SQL MS-SQL has no native Enum-type support and therefore needs to work with constraints. Since these constraints need unique names the suggested approach referenced in the following alembic documentation has been applied: http://bit.ly/2x9r8pb ASTERISK-27255 #close Change-Id: I4a399ba3eed41a33ce8cb294968ad340221580ee 2017-09-05 07:31 +0000 [2aefc6e5fe] Jacek Konieczny * func_cdr: honour 'u' flag on dummy channel Fixes ${CDR(...,u)} when used in cdr_custom.conf ASTERISK-27165 #close Change-Id: Ia4e0b6ba93e03d27886354c279737790e2cd6a83 2017-09-06 16:05 +0000 [c0d4f1880e] Scott Griepentrog * chan_sip: when getting sip pvt return failure if not found In handle_request_invite, when processing a pickup, a call is made to get_sip_pvt_from_replaces to locate the pvt for the subscription. The pvt is assumed to be valid when zero is returned indicating no error, and is dereferenced which can cause a crash if it was not found. This change checks the not found case and returns -1 which allows the calling code to fail appropriately. ASTERISK-27217 #close Reported-by: Bryan Walters Change-Id: I6bee92b8b8b85fcac3fd66f8c00ab18bc1765612 2017-09-06 10:50 +0000 [e4797b2cbd] Sean Bright * app_waitforsilence: Cleanup & don't treat missing frames as 'noise' * WaitForSilence completes successfully if it receives no media in the specified timeout, but when acting as WaitForNoise that logic needs to be reversed. * Use standard argument parsing macros and add some error checking for invalid values. * The documentation indicated that the first argument to both WaitForSilence and WaitForNoise was required when it was not. Update the documentation to reflect that. * Wrap up some behavior in structs to avoid boolean checks all over the place. ASTERISK-24066 #close Reported by: M vd S Change-Id: I01d40adc5b63342bb5018a1bea2081a0aa191ef9 2017-09-01 05:17 +0000 [186ef1a657] George Joseph * stasis/control: Fix possible deadlock with swap channel If an error occurs during a bridge impart it's possible that the "bridge_after" callback might try to run before control_swap_channel_in_bridge has been signalled to continue. Since control_swap_channel_in_bridge is holding the control lock and the callback needs it, a deadlock will occur. * control_swap_channel_in_bridge now only holds the control lock while it's actually modifying the control structure and releases it while the bridge impart is running. * bridge_after_cb is now tolerant of impart failures. Change-Id: Ifd239aa93955b3eb475521f61e284fcb0da2c3b3 2017-09-06 05:23 +0000 [597d1f8951] Vitezslav Novy * chan_sip: Do not change IP address in SDP origin line (o=) in SIP reINVITE If directmedia=yes is configured, when call is answered, Asterisk sends reINVITE to both parties to set up media path directly between the endpoints. In this reINVITE msg SDP origin line (o=) contains IP address of endpoint instead of IP of asterisk. This behavior violates RFC3264, sec 8: "When issuing an offer that modifies the session, the "o=" line of the new SDP MUST be identical to that in the previous SDP, except that the version in the origin field MUST increment by one from the previous SDP." This patch assures IP address of Asterisk is always sent in SDP origin line. ASTERISK-17540 Reported by: saghul Change-Id: I533a047490c43dcff32eeca8378b2ba02345b64e 2017-09-06 07:54 +0000 [15ddc9acb3] George Joseph * alembic: Fix enum creation for dtls_fingerprint Change-Id: Ic061c5066a146616a68376881c7e4cf6d6e7e7db 2017-09-05 11:08 +0000 [2370469645] Florian Floimair * alembic: fix erroneous commit for add_prune_on_boot Added include for postgresql ENUM type and redefined values in the same way as in the other migration scripts. ASTERISK-27254 #close Change-Id: Id667304cdf3891b1c2f7d35fab3e2a84026159fa 2017-09-06 03:15 +0000 [13aa1241c3] Alexander Traud * res_srtp: Add support for libsrtp2.1. Asterisk is able to use libSRTP 2.0.x. However since libSRTP 2.1.x, the macro SRTP_AES_ICM got renamed to SRTP_AES_ICM_128. Beside to still compile with previous versions of libSRTP, this change allows libSRTP 2.1.x as well. ASTERISK-27253 #close Change-Id: I2e6eb3c3bc844fee8a624060a2eb6f182dc70315 2017-09-05 09:35 +0000 [598a18ffee] Ben Ford * chan_pjsip: Suppress frame warnings. When rtp_keepalive is on for a PJSIP endpoint dialing to another Asterisk instance also using PJSIP, Asterisk will continue to print warning messages about not being able to send frames of a certain type. This suppresses that warning message. Change-Id: I0332a05519d7bda9cacfa26d433909ff1909be67 2017-08-25 17:05 +0000 [6c922b3157] Richard Mudgett * res_rtp_asterisk.c: Check RTP packet version earlier. Change-Id: Ic6493a7d79683f3e5845dff1cee49445fd5a0adf 2017-09-05 10:05 +0000 [3f7d0b63fc] Sean Bright * formats: Restore previous fread() behavior Some formats are able to handle short reads while others are not, so restore the previous behavior for the format modules so that we don't have spurious errors when playing back files. ASTERISK-27232 #close Reported by: Jens T. Change-Id: Iab7f52b25a394f277566c8a2a4b15a692280a300 2017-09-05 09:16 +0000 [45744fc53d] Walter Doekes * res/res_pjsip: Standardize/fix localnet checks across pjsip. In 2dee95cc (ASTERISK-27024) and 776ffd77 (ASTERISK-26879) there was confusion about whether the transport_state->localnet ACL has ALLOW or DENY semantics. For the record: the localnet has DENY semantics, meaning that "not in the list" means ALLOW, and the local nets are in the list. Therefore, checks like this look wrong, but are right: /* See if where we are sending this request is local or not, and if not that we can get a Contact URI to modify */ if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { ast_debug(5, "Request is being sent to local address, " "skipping NAT manipulation\n"); (In the list == localnet == DENY == skip NAT manipulation.) And conversely, other checks that looked right, were wrong. This change adds two macro's to reduce the confusion and uses those instead: ast_sip_transport_is_nonlocal(transport_state, addr) ast_sip_transport_is_local(transport_state, addr) ASTERISK-27248 #close Change-Id: Ie7767519eb5a822c4848e531a53c0fd054fae934 2017-09-05 05:23 +0000 [786c4791f9] George Joseph * res_pjsip_t38: Make t38_reinvite_response_cb tolerant of NULL channel t38_reinvite_response_cb can get called by res_pjsip_session's session_inv_on_tsx_state_changed in situations where session->channel is NULL. If it is, the ast_log warning segfaults because it tries to get the channel name from a NULL channel. * Check session->channel and print "unknown channel" when it's NULL. ASTERISK-27236 Reported by: Ross Beer Change-Id: I4326e288d36327f6c79ab52226d54905cdc87dc7 2017-09-01 16:17 +0000 [55f30c29fd] Sean Bright * rtp_engine: Prevent possible double free with DTLS config ASTERISK-27225 #close Reported by: Richard Kenner Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89 2017-09-01 13:15 +0000 [f36db2dbdc] Sean Bright * chan_ooh323: Fix confusing indentation warning ASTERISK-27177 #close Reported by: Tzafrir Cohen Change-Id: I40311c404edb2302a7543ad5ca7a06b2a38f2d97 2017-09-01 09:51 +0000 [5f4863d4f9] Sean Bright * app_directory: Handle a NULL mailbox without crashing ASTERISK-27241 #close Reported by: David Moore Change-Id: Ibbbca85517b04c315406ebfe3b6f7e0763daedc6 2017-07-24 10:48 +0000 [990b017668] George Joseph * pjsip_message_ip_updater: Fix issue handling "tel" URIs sanitize_tdata was assuming all URIs were SIP URIs so when a non SIP uri was in the From, To or Contact headers, the unconditional cast of a non-pjsip_sip_uri structure to pjsip_sip_uri caused a segfault when trying to access uri->other_param. * Added PJSIP_URI_SCHEME_IS_SIP(uri) || PJSIP_URI_SCHEME_IS_SIPS(uri) checks before attempting to cast or use the returned uri. ASTERISK-27152 Reported-by: Ross Beer Change-Id: Id380df790e6622c8058a96035f8b8f4aa0b8551f 2017-07-01 19:24 +0000 [04ee3eb774] Corey Farrell * AST-2017-006: Fix app_minivm application MinivmNotify command injection An admin can configure app_minivm with an externnotify program to be run when a voicemail is received. The app_minivm application MinivmNotify uses ast_safe_system() for this purpose which is vulnerable to command injection since the Caller-ID name and number values given to externnotify can come from an external untrusted source. * Add ast_safe_execvp() function. This gives modules the ability to run external commands with greater safety compared to ast_safe_system(). Specifically when some parameters are filled by untrusted sources the new function does not allow malicious input to break argument encoding. This may be of particular concern where CALLERID(name) or CALLERID(num) may be used as a parameter to a script run by ast_safe_system() which could potentially allow arbitrary command execution. * Changed app_minivm.c:run_externnotify() to use the new ast_safe_execvp() instead of ast_safe_system() to avoid command injection. * Document code injection potential from untrusted data sources for other shell commands that are under user control. ASTERISK-27103 Change-Id: I7552472247a84cde24e1358aaf64af160107aef1 2017-05-22 10:36 +0000 [1a022285dd] Joshua Colp * res_rtp_asterisk: Only learn a new source in learn state. This change moves the logic which learns a new source address for RTP so it only occurs in the learning state. The learning state is entered on initial allocation of RTP or if we are told that the remote address for the media has changed. While in the learning state if we continue to receive media from the original source we restart the learning process. It is only once we receive a sufficient number of RTP packets from the new source that we will switch to it. Once this is done the closed state is entered where all packets that do not originate from the expected source are dropped. The learning process has also been improved to take into account the time between received packets so a flood of them while in the learning state does not cause media to be switched. Finally RTCP now drops packets which are not for the learned SSRC if strict RTP is enabled. ASTERISK-27013 Change-Id: I56a96e993700906355e79bc880ad9d4ad3ab129c 2017-08-29 14:22 +0000 [4aaccb7795] Richard Mudgett * bridge_native_rtp.c: Fixup native_rtp_framehook() * Fix framehook to test frame type for control frame. * Made framehook exit early if frame type is not a control frame. * Eliminated RAII_VAR in framehook. * Use switch instead of else-if ladder for control frame handling. Change-Id: Ia555fc3600bd85470e3c0141147dbe3ad07c1d18 2017-08-29 09:26 +0000 [d2ace23248] Sean Bright * confbridge: Handle user hangup during name recording This prevents orphaned CBAnn channels from getting stuck in the bridge. ASTERISK-26994 #close Reported by: James Terhune Change-Id: I5e43e832a9507ec3f2c59752cd900b41dab80457 2017-08-25 21:06 +0000 [a45af32983] Andre Nazario * chan_pjsip: Add tag info in CHANNEL function Create local_tag and remote_tag in CHANNEL info to get tag from From and To headers of a SIP dialog. ASTERISK-27220 Change-Id: I59b16c4b928896fcbde02ad88f0e98922b15d524 2017-08-25 13:44 +0000 [9e6efcace5] Sean Bright * voicemail: Fix various abuses of mkstemp mkstemp() returns a unique filename, but appending an extension to that filename does not guarantee uniqueness. Instead, use mkdtemp() and we can put whatever extension we want on the files that we create inside the directory. In the case of app_minivm, we also now properly clean up any temporary files that we create. ASTERISK-20858 #close Reported by: Walter Doekes Change-Id: I30ad04f0e115f0b11693ff678ba5184d8b938e43 2017-08-25 12:20 +0000 [01b5913ce0] Sean Bright * app_record: Resolve some absolute vs. relative filename bugs If the Record() application is called with a relative filename that includes directories, we were not properly creating the intermediate directories and Record() would fail. Secondarily, updated the documentation for RECORDED_FILE to mention that it does not include a filename extension. Finally, rewrote the '%d' functionality to be a bit more straight forward and less noisy. ASTERISK-16777 #close Reported by: klaus3000 Change-Id: Ibc2640cba3a8c7f17d97b02f76b7608b1e7ffde2 2017-08-23 10:01 +0000 [bf178a0f4f] Florian Floimair * alembic: Add dtls_fingerprint column in ps_endpoints table The ps_endpoints table was missing the dtls_fingerprint column introduced with commit adba2a8d7fd. ASTERISK-27168 #close Change-Id: I9cb5006f7f50718b5239919562773adabb334cfd 2016-02-28 19:05 +0000 [fff2f68616] Matt Jordan * main/app: Only look to end of file if ':end' is specified, and not just ':' There is a little known feature in app_controlplayback that will cause the specified offset to be used relative to the end of a file if a ':end' is detected within the filename. This feature is pretty bad, but okay. However, a bug exists in this code where a ':' detected in the filename will cause the end pointer to be non-NULL, even if the full ':end' isn't specified. This causes us to treat an unspecified offset (0) as being "start playing from the end of the file", resulting in no file playback occurring. This patch fixes this bug by resetting the end pointer if ':end' is not found in the filename. ASTERISK-23608 #close Reported by: Jonathan White Change-Id: Ib4c7b1b45283e4effd622a970055c51146892f35 (cherry picked from commit 13efea24f7ce6ccc01d1a5a0603be2636d83a408) 2017-08-24 09:42 +0000 [579d4593ac] Sean Bright * app_queue: Evaluate realtime queues when running dialplan functions ASTERISK-19103 #close Reported by: Jim Van Meggelen Change-Id: I4bd32a9d1fcebb8ac56bff0e084d4f53e31b692b 2017-08-23 09:19 +0000 [0af145de2d] Sean Bright * app_voicemail: Honor escape digits in "greeting only" mode ASTERISK-21241 #close Reported by: Eelco Brolman Patches: Patch uploaded by Eelco Brolman (License 6442) Change-Id: Icbe39b5c82a49b46cf1d168dc17766f3d84f54fe 2017-08-24 08:35 +0000 [d251a961ac] Sean Bright * res_smdi: Clean up memory leak Change-Id: I1e33290929e1aa7c5b9cb513f8254f2884974de8 2017-08-11 11:40 +0000 [3f22b53349] Richard Mudgett * bridge_softmix.c: Remove always true test. Change-Id: I26238df2ff0d0f6dfe95c3aa35da588f1ee71727 2017-08-17 16:46 +0000 [b88c3a4209] Sungtae Kim * app_queue: Fix initial hold time queue statistic Fixed to use correct initial value and fixed to use the correct queue info to check the first value. ASTERISK-27204 Change-Id: Ia9e36c828e566e1cc25c66f73307566e4acb8e73 2017-08-21 04:28 +0000 [8e99969000] Torrey Searle * res/res_pjsip_session: allow SDP answer to be regenerated If an SDP answer hasn't been sent yet, it's legal to change it. This is required for PJSIP_DTMF_MODE to work correctly, and can also have use in the future for updating codecs too. ASTERISK-27209 #close Change-Id: Idbbfb7cb3f72fbd96c94d10d93540f69bd51e7a1 2017-08-20 08:15 +0000 [4faf77feec] Michael Kuron * res_xmpp: fix inverted return code check in OAuth fetch_access_token calls func_curl via ast_func_read. The latter returns 0 upon success and -1 if the function is not available. This commit inverts the return code check so that an error is printed if the module is not loaded and not if it is loaded. ASTERISK-27207 #close Change-Id: I9ef903f80702d1218e8701f65a4e5e918e6548fb 2017-08-17 12:00 +0000 [a6251ec373] Sean Bright * res_calendar_icalendar: Properly handle recurring events When looking for recurring events, use the correct end time based on the configured 'timeframe.' ASTERISK-27174 #close Reported by: Mark Thompson Change-Id: Id90c3cfc79d561a5521d79be176683e225f2edef 2017-08-16 15:43 +0000 [572b5307e0] George Joseph * Fix downloader not working with curl The codec/dpma downloader wasn't handling curl correctly. The logic that transforms makeopts into a bash-sourceable file wasn't handling the make 'or' command in DOWNLOAD_TIMEOUT so bash was looking for an 'or' command. That logic has been eliminated. Instead of trying to transform and source makeopts, the downloader now calls a make scriptlet to print the value of a specific variable. This way, make handles the ors (or any other make construct that happens to creep into that file). ASTERISK-27202 Reported by: Sean McCord Change-Id: Iadfb6693528e4d4da7b8bb201fa66da2c71c7f99 2017-08-15 15:15 +0000 [8594f73a81] Richard Mudgett * configure: Check cache for valid pjproject tarball before downloading. On a fresh Asterisk source directory, the bundled pjproject tarball is unconditionally downloaded even if the tarball is already in a specified cache directory. * Made check if the pjproject tarball is valid in the cache directory before downloading the tarball on a fresh source directory. Change-Id: Ic7ec842d3c97ecd8dafbad6f056b7fdbce41cae5 2017-08-15 11:14 +0000 [d08342b0cb] Richard Mudgett * res_pjsip: Fix prune_on_boot to remove only contacts for the host. * Check that the contact's reg_server matches the host's name before deleting any prune_on_boot contacts. We don't want to delete reliable transport contacts made with other servers if the ps_contacts database table is shared with other servers. Thanks to Ross Beer for pointing out that the original prune logic would delete reliable transport contacts from other servers. ASTERISK-27147 Change-Id: I8e439d0d1c266ffdfd7b73d1e5e466180a689bd0 2017-08-04 09:25 +0000 [54e3ac402f] Andrey Egorov * res_xmpp: Google OAuth 2.0 protocol support for XMPP / Motif Add ability to use tokens instead of passwords according to Google OAuth 2.0 protocol. ASTERISK-27169 Reported by: Andrey Egorov Tested by: Andrey Egorov Change-Id: I07f7052a502457ab55010a4d3686653b60f4c8db 2017-08-10 14:18 +0000 [bac3e8c08b] Richard Mudgett * STUN/netsock2: Fix some valgrind uninitialized memory findings. * netsock2.c: Test the addr->len member first as it may be the only member initialized in the struct. * stun.c:ast_stun_handle_packet(): The combinded[] local array could get used uninitialized by ast_stun_request(). The uninitialized string gets copied to another location and could overflow the destination memory buffer. These valgrind findings were found for ASTERISK_27150 but are not necessarily a fix for the issue. Change-Id: I55f8687ba4ffc0f69578fd850af006a56cbc9a57 2017-08-02 18:44 +0000 [1cf2c79f37] Richard Mudgett * res_pjsip_outbound_registration.c: Re-REGISTER on transport shutdown. The fix for the issue is broken up into three parts. This is part three which handles the client side of REGISTER requests. The registered contact may no longer be valid on the server when the transport used is reliable and the connection is broken. * Re-REGISTER our contact if the reliable transport is broken after registration completes. We attempt to re-REGISTER immediately to minimize the time we are unreachable. Time may have already passed between the connection being broken and the loss being detected. * Reorder sip_outbound_registration_state_alloc() so the STATSD_GUAGE's are still correct if an allocation failure happens. ASTERISK-27147 Change-Id: I3668405b1ee75dfefb07c0d637826176f741ce83 2017-07-31 14:21 +0000 [07d026b4cd] Richard Mudgett * res_pjsip: Remove ephemeral registered contacts on transport shutdown. The fix for the issue is broken up into three parts. This is part two which handles the server side of REGISTER requests when rewrite_contact is enabled. Any registered reliable transport contact becomes invalid when the transport connection becomes disconnected. * Monitor the rewrite_contact's reliable transport REGISTER contact for shutdown. If it is shutdown then the contact must be removed because it is no longer valid. Otherwise, when the client attempts to re-REGISTER it may be blocked because the invalid contact is there. Also if we try to send a call to the endpoint using the invalid contact then the endpoint is not likely to see the request. The endpoint either won't be listening on that port for new connections or a NAT/firewall will block it. * Prune any rewrite_contact's registered reliable transport contacts on boot. The reliable transport no longer exists so the contact is invalid. * Websockets always rewrite the REGISTER contact address and the transport needs to be monitored for shutdown. * Made the websocket transport set a unique name since that is what we use as the ao2 container key. Otherwise, we would not know which transport we find when one of them shuts down. The names are also used for PJPROJECT debug logging. * Made the websocket transport post the PJSIP_TP_STATE_CONNECTED state event. Now the global keep_alive_interval option, initially idle shutdown timer, and the server REGISTER contact monitor can work on wetsocket transports. * Made the websocket transport set the PJSIP_TP_DIR_INCOMING direction. Now initially idle websockets will automatically shutdown. ASTERISK-27147 Change-Id: I397a5e7d18476830f7ffe1726adf9ee6c15964f4 2017-07-28 18:26 +0000 [ca261d4b70] Richard Mudgett * res_pjsip: PJSIP Transport state monitor refactor. The fix for the issue is broken up into three parts. This is part one which refactors the transport state monitor code to allow more modules to be able to monitor transports. * Pull the management of PJPROJECT's transport state callback code from res_pjsip_transport_management.c into res_pjsip. Now other modules can dynamically add and remove themselves from transport monitoring without worrying about breaking PJPROJECT's callback chain. * Add the ability for other modules to get a callback whenever a specific transport is shutdown. ASTERISK-27147 Change-Id: I7d9a31371eb1487c9b7050cf82a9af5180a57912 2017-07-27 15:36 +0000 [162f6ab845] Richard Mudgett * res_pjsip_transport_management.c: Rename some variables. * Use monitored instead of the misleading keepalive name. Change-Id: I9e5bcbb4ab2b82d49bcd0f06dfe85d15e0b552b6 2017-08-10 09:09 +0000 [22575b6342] Scott Griepentrog * res_pjsip_messaging: IPv6 receive address needs brackets When handling an incoming SIP MESSAGE, PJSIP attaches the IP address that the message was received from to the message in the variable PJSIP_RECVADDR. When the IP address is IPv6 the :PORT appended results in an unparseable mess. By using an additional bit flag on the pj_sockaddr_print call, the conventional use of brackets around the address is achieved. ASTERISK-27193 #close Change-Id: I12342521f2ce87a5b6e4883d480a3fd957aa9fd9 2017-08-09 08:01 +0000 [363d61ef58] George Joseph * configure: Add --with-download-cache option To make building without an internet connection easier, a new ./configure option '--with-download-cache' was added that sets the cache for externals (like pjproject, the codecs and the DPMA), AND the sounds files. It can also be specified as an environment variable named "AST_DOWNLOAD_CACHE". The existing '--with-sounds-cache' option / SOUNDS_CACHE_DIR env variable and '--with-externals-cache' option / EXTERNALS_CACHE_DIR env variable remain and if specified, will override '--with-downloads-cache'. Change-Id: I5c3cf15ee61e8fe191b52732303e969854f8d861 2017-07-26 09:17 +0000 [3608f96ea3] Torrey Searle * res_rtp_asterisk: enable rtcp & QOS stats on native bridge Asterisk wasn't generating or forwarding RTCP packets when native bridge was activated. Also the stats weren't available via CHANNEL(qos). Now the RTCP stats are always calculated. ASTERISK-27158 #close Change-Id: I46fb8f61c95e836b9d2dda6054b0cf205c16037b 2017-07-26 11:39 +0000 [0de7312fac] Joshua Colp * res_pjsip_session: Release media resources on session end quicker. A change was made long ago where the session was kept around until the underlying INVITE session had been destroyed. This had the side effect of also keeping the underlying media resources around for this time as well. This change ensures that when we know the session is ending we release the media resources immediately. ASTERISK-27110 Change-Id: I643e431d5c3bf05cda220c1d39e824a505a29b82 2017-08-02 16:08 +0000 [905c4ca3dc] Corey Farrell * app_privacy: remove unused header asterisk/image.h Change-Id: I56ed530633a642633b18383821069e806c92ae82 2017-08-03 13:13 +0000 [38dbc708e7] Tzafrir Cohen * Support GMIME 3.0 Support building the Asterisk httpd with version 3.0 of gmime as well as earlier versions of that library. ASTERISK-27173 Change-Id: I7e13dd05a3083ccb0df2dabf83110223f6a9fa8f 2017-07-28 07:53 +0000 [c4f201cd73] Torrey Searle * res_rtp_asterisk: Make P2P bridge Asymmetric codec aware Introduce a new property to rtp-engine to make it aware of the desire for assymetric codecs or not. If asymmetric codecs is not allowed, the bridge will compare read/write formats and shut down the p2p bridge if needed ASTERISK-26745 #close Change-Id: I0d9c83e5356df81661e58d40a8db565833501a6f 2017-08-03 21:30 +0000 [84b6a5efd7] Corey Farrell * Correct some leaks in unit tests. * chan_sip: channel in test_sip_rtpqos_1. * test_config: config hook, config info and global config holder. * test_core_format: format in format_attribute_set_without_interface. * test_stream: unneeded frame duplication. * test_taskprocessor: task_data. Change-Id: I94d364d195cf3b3b5de2bf3ad565343275c7ad31 2017-07-26 17:49 +0000 [f9a823e9dc] Richard Mudgett * res_pjsip_transport_websocket.c: Fix serializer ref leak. Change-Id: Ib5a19bfd597f63d9021baeb645fc11153b3afa57 2017-08-02 18:41 +0000 [631180a0c3] Richard Mudgett * res_pjsip_outbound_registration.c: Misc fixes. * Remove unnecessary CMP_STOP. * In handle_client_registration() use DEBUG_ATLEAST() to only do work needed for the debug log message when the debug log message is needed. * In sip_outbound_registration_state_destroy() check state->registration for NULL. Change-Id: I656d0fa11dda0b00048103efb1558e67a426fd80 2017-07-31 20:20 +0000 [7b84c6693e] Richard Mudgett * res_pjsip_nat.c: Remove unnecessary CMP_STOP. Change-Id: I6279b0d723bc3b75b8d65e81e02da9ea9bc0c3da 2017-07-31 14:20 +0000 [a32614a2a8] Richard Mudgett * res_pjsip_registrar.c: Remove unnecessary CMP_STOP. Most uses of CMP_STOP are superfluous and are only respected when OBJ_MULTIPLE is used to search the container. Change-Id: I20571a202ec0aa1098bb2749eeba18de7ca110b8 2017-08-03 11:30 +0000 [d066758a4c] Corey Farrell * Fix compile error for old versions of GCC. Use -Wno-format-truncation only if supported by compiler. ASTERISK-27171 #close Change-Id: Iac0aed7a5bcaa16c21b7d62c4e4678d244c4ccb6 2017-08-01 15:57 +0000 [ed1bce956e] George Joseph * Revert "res_pjsip_session: Release media resources on session end quicker." This reverts commit 98709642d640b490f327d220fdcdea6d45fd65d7. See the 15 branch review. Change-Id: I8476b3cdacaad5157fa36b6247d0e4cdf1e8d5c6 2017-06-29 03:47 +0000 [9a09f7dd5d] Niklas Larsson * app_queue: Add priority to AMI QueueStatus Add priority to callers in AMI QueueStatus response ASTERISK-27092 #close Change-Id: I8d1f737a72c7c38f4cfe1a4ee3ecc0a4f85bd199 2017-07-26 11:39 +0000 [3418d8d145] Joshua Colp * res_pjsip_session: Release media resources on session end quicker. A change was made long ago where the session was kept around until the underlying INVITE session had been destroyed. This had the side effect of also keeping the underlying media resources around for this time as well. This change ensures that when we know the session is ending we release the media resources immediately. ASTERISK-27110 Change-Id: I3c6a82fe7d2c50b9dc9197cb12ef22f20d337501 2017-07-26 08:48 +0000 [4d318cac68] Sean Bright * res_pjsip_pidf_eyebeam_body_supplement: Correct status presentation This change fixes PIDF content generation when the underlying device state is considered in use. Previously it was incorrectly marked as closed meaning they were offline/unavailable. The code now correctly marks them as open. Additionally: * Generate an XML element for our activity instead of a using a text node. * Consider every extension state other than "unavailable" to be 'open' status. * Update the XML namespaces and structure to reflect those documented in RFC 4480 * Use 'on-the-phone' (defined in RFC 4880) instead of 'busy' as the "in use" activity. This change results in eyeBeam using the appropriate icon for the watched user. This was tested on eyeBeam 1.5.20.2 build 59030 on Windows. ASTERISK-26659 #close Reported by: Abraham Liebsch patches: ASTERISK-26659.diff submitted by snuffy (license 5024) Change-Id: I6e5ad450f91106029fb30517b8c0ea0c2058c810 2017-07-23 18:34 +0000 [114602f434] Joshua Colp * res_pjsip: Add support for dnsmgr to external_media_address. The "external_media_address" option on transports is now resolved using dnsmgr. This allows it to be automatically refreshed regularly if refreshes are enabled in dnsmgr. If the system is using a dynamic IP address a dynamic DNS hostname can be provided to keep the IP address up to date. Change-Id: Ia54771720dff0105bde55d5bbb81a3ba437e05b2 2017-07-27 20:58 +0000 [0f49e6ee2e] Corey Farrell * Fix compiler warnings on Fedora 26 / GCC 7. GCC 7 has added capability to produce warnings, this fixes most of those warnings. The specific warnings are disabled in a few places: * app_voicemail.c: truncation of paths more than 4096 chars in many places. * chan_mgcp.c: callid truncated to 80 chars. * cdr.c: two userfields are combined to cdr copy, fix would break ABI. * tcptls.c: ignore use of deprecated method SSLv3_client_method(). ASTERISK-27156 #close Change-Id: I65f280e7d3cfad279d16f41823a4d6fddcbc4c88 2017-07-27 06:35 +0000 [0d58fefa30] George Joseph * bundled_pjproject: Improve SSL/TLS error handling OpenSSL has 2 levels or error processing. It's possible for the top layer to return SSL_ERROR_SYSCALL but the lower layer return no error, in which case processing should continue. Only the top layer was being examined though so connections were being torn down when they didn't need to be. This patch adds the examination of the lower level codes, and if they return no errors, allows processing to continue. ASTERISK-27001 Reported-by: Ian Gilmour patches: pjproject-2.6.patch submitted by Ian Gilmour (license 6889) Updated-by: George Joseph and Sauw Ming (Teluu) Merged to upstream pjproject on 7/27/2017 (commit 5631) Change-Id: I23844ca0c68ef1ee550f14d46f6dae57d33b7bd2 2017-06-26 07:52 +0000 [423d01cf16] Torrey Searle * chan_pjsip: add a new function PJSIP_DTMF_MODE This function is a replica of SIPDtmfMode, allowing the DTMF mode of a PJSIP call to be modified on a per-call basis ASTERISK-27085 #close Change-Id: I20eef5da3e5d1d3e58b304416bc79683f87e7612 2017-07-25 15:17 +0000 [c16000f201] Sean Bright * res_rtp_asterisk: Fix mapping of pjsip's ICE roles to ours Change-Id: Ia578ede1a55b21014581793992a429441903278b 2017-07-20 08:08 +0000 [708cdc0b8e] Sergej Kasumovic * res_stasis_device_state: Unsubscribe should remove old subscriptions Case scenario with Applications ARI: * Once you subscribe to deviceState with Applications REST API, it will be added into subscription pool. * When you unsubscribe it will remove from the device_state_subscription hash table but not from the subscription pool. * When you subscribe again, it will add it to pool again. * Now you will have two subscriptions and you will receive same event twice. This fix should now remove deviceState subscription from pool and it should fix unsubscribe on deviceState. ASTERISK-27130 #close Change-Id: I718b70d770a086e39b4ddba4f69a3c616d4476c4 2017-07-24 13:30 +0000 [24bb5a8908] Joshua Colp * core: Add VP9 passthrough support. This change adds VP9 as a known codec and creates a cached "vp9" media format for use. Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc 2017-07-21 15:57 +0000 [07f8e45a90] Matthew Fredrickson * format.h: Fix a few minor errors in comments. A few minor problems were found in comments in format.h. This patch fixes them. Change-Id: I07f0bdb47b93359b361c4c3d8ecc87cd3199dd94 2017-07-21 17:04 +0000 [7e9aa74daa] Rusty Newton * say.c: Fix file locations for second, seconds, minute, minutes files The seconds and minutes files have always existed in the base language directory of the Core package. So say.c has always been calling the wrong location (under digits/) for those two files and in the case of second and minute they didn't exist in the Core packages at all. The 1.6 sounds release moves the second and minute files into Core from Extra for the languages that already had them. A future release will include the second and minute files for languages that didn't already have them. This patch just changes all the target locations for second, seconds, minute, and minutes that were under the digits subdir to be under the root of sounds instead. Which is where the sounds will be for some languages after 1.6 sounds and for all languages after a future release. ASTERISK-25810 #close Change-Id: I05d9d4bee6a7237030530a46e7eb3df15f13f702 Reported-by: Nicolas Riendeau 2017-07-19 18:11 +0000 [7ff9d8785d] Richard Mudgett * app_voicemail.c: Allow mailbox entry on authentication retry prompt. The following testsuite voicemail tests were failing to re-enter the mailbox after the first login attempt. tests/apps/voicemail/authenticate_invalid_mailbox tests/apps/voicemail/authenticate_invalid_password The tests were noting the start of the vm-incorrect-mailbox prompt and immediately sending the mailbox for the next login attempt. Since the invalid message playback had to complete before the digits were recognized, the test passed for the wrong reason and added approximately 20 seconds to the test times. * Allow the vm-incorrect-mailbox prompt to get interrupted by the mailbox digits like the initial vm-login prompt so the tests are able to enter the intended mailbox. Change-Id: I1dc53fe917bfe03a4587b2c4cd24c94696a69df8 2017-07-21 14:20 +0000 [4f93f75e7e] Rusty Newton * Sounds: Update Makefile for Extra sounds 1.5.1 release Incrementing version for the Extra sounds release. 1.5.1 Extra sounds removes two prompts that were moved into the Core packages in the 1.6 Core sounds release. ASTERISK-27142 #close Change-Id: I82f017812b0ea9599e19dd4635afd55611f13ee7 2017-07-20 09:57 +0000 [cea4ce246d] Sean Bright * corosync: Fix corosync library name in configure.ac Also add new corosync packages to install_prereq. Reported by Travis Ryan in #asterisk-dev Change-Id: Ib861c95ba630fed62dc54e56784ad8446ed9d2db 2017-07-18 15:04 +0000 [9a47dd7113] Benjamin Keith Ford * pjsip: Increase maximum packet size. The maximum packet size for PJSIP has been increased to handle the multiple streams being added for WebRTC. Change-Id: I9ea1e8d02668c544acadcb1c6200e1cc1bd588b3 2017-07-11 04:48 +0000 [1c3e7df26e] Holger Hans Peter Freyther * app_playback.c: Use the timezonename parameter In say_date_generic the timezonename parameter is passed but never used. Fix it by passing it to the ast_localtime function. ASTERISK-27124 Change-Id: I6afa98f9163190043244b9f3ba91eb1874d1b586 2017-07-16 12:18 +0000 [51761b759d] Joshua Colp * res_rtp_asterisk: Use RTP component for ICE if RTCP-MUX is in use. This change makes it so that if an RTCP packet is being sent the RTP ICE component is used for sending if RTCP-MUX is in use. ASTERISK-27133 Change-Id: I6200f611ede709602ee9b89501720c29545ed68b 2017-07-11 09:55 +0000 [a4c85309f0] Torrey Searle * res/res_stasis_snoop: generate silence when audiohook returns null Currently when rtp is paused, no packets are written to the recorded audio file, causing the silence to be skipped and recording not properly time aligned. The read handler as been adapted to return a silence frame of the correct size. ASTERISK-27128 #close Change-Id: I2d7f60650457860b9c70907b14426756b058a844 2017-07-14 01:25 +0000 [3858d99b73] Sergej Kasumovic * app_confbridge: Make sure name recordings are always removed from the filesystem This commit fixes two possible scenarios: * When recording name and if during recording you hangup, file is never removed. This is due to the fact file location is nulled. * When recording name and if you hangup during thank-you prompt, file is never removed. ASTERISK-27123 #close Change-Id: I39b7271408b4b54ce880c5111a886aa8f28c2625 2017-07-14 01:11 +0000 [cdd6ca488a] Sergej Kasumovic * chan_iax2: On reload make sure to check for existing MWI subscription On every reload of chan_iax2 module, MWI subscription was added, which results in additional taskprocessors being accumulated over time. This commit fixes it by making sure we check for existing subscription first. This was verified with 'core show taskprocessors' CLI command. ASTERISK-27122 #close Change-Id: Ie2ef528fd5ca01b933eeb88188cc10967899cfb9 2017-07-13 15:43 +0000 [9f66fb7901] Rusty Newton * Sounds: Update for core sounds 1.6 release Added necessary lines to make the en_NZ language set selectable and to get core sounds 1.6 pulled down. ASTERISK-26807 #close ASTERISK-25816 #close ASTERISK-26274 #close Change-Id: I84e4dd4696568cc1ba318d12ac4b075461d6eed4 2017-07-10 14:04 +0000 [df49ad2528] Corey Farrell * core: Add PARSE_TIMELEN support to ast_parse_arg and ACO. This adds support for parsing timelen values from config files. This includes support for all flags which apply to PARSE_INT32. Support for this parser is added to ACO via the OPT_TIMELEN_T option type. Fixes an issue where extra characters provided to ast_app_parse_timelen were ignored, they now cause an error. Testing is included. ASTERISK-27117 #close Change-Id: I6b333feca7e3f83b4ef5bf2636fc0fd613742554 2017-07-12 15:07 +0000 [6d0ff310c6] Sean Bright * basic-pbx: Remove res_pjsip_multihomed from sample config ASTERISK-27127 #close Reported by: HZMI8gkCvPpom0tM Change-Id: I2b0c54570d58156e37166ac536728af3b6c01789 2017-07-11 07:26 +0000 [4e555437dc] George Joseph * res_musiconhold: Add kill_escalation_delay, kill_method to class By default, when res_musiconhold reloads or unloads, it sends a HUP signal to custom applications (and all descendants), waits 100ms, then sends a TERM signal, waits 100ms, then finally sends a KILL signal. An application which is interacting with an external device and/or spawns children of its own may not be able to exit cleanly in the default times, expecially if sent a KILL signal, or if it's children are getting signals directly from res_musiconhoild. * To allow extra time, the 'kill_escalation_delay' class option can be used to set the number of milliseconds res_musiconhold waits before escalating kill signals, with the default being the current 100ms. * To control to whom the signals are sent, the "kill_method" class option can be set to "process_group" (the default, existing behavior), which sends signals to the application and its descendants directly, or "process" which sends signals only to the application itself. Change-Id: Iff70a1a9405685a9021a68416830c0db5158603b 2017-07-03 07:30 +0000 [4f2f3bfebf] Tzafrir Cohen * Avoid setting maxfiles for a remote asterisk Setting maxfiles (maximum number of open files) has no practical effect on a remote asterisk (rasterisk, rasterisk -x). It has an ill effect of printing an extra message, which may be annoying in case of -x. ASTERISK-27105 #close Change-Id: Iaf9eb344e4b4b517df91b736b27ec55f6a6921a2 2017-07-05 15:31 +0000 [32b98ad956] George Joseph * http.c: Reduce log spam Messages like "fwrite() failed: Connection reset by peer" are no help whatsoever, especially since they can be caused simply by a client disconnecting. * Make those WARNINGs DEBUGs. * Check the return of the headers fprintf. Change-Id: I17bd5f3621514152a7b2b263c801324c5e96568b 2017-07-07 11:19 +0000 [25e18bf514] Benjamin Keith Ford * res_pjsip: Fix crash with from_user containing invalid characters. If the from_user field contains certain characters (like @, {, ^, etc.), PJSIP will return a null value for the URI when attempting to parse it. This causes a crash when trying to dial out through a trunk that contains these invalid characters in its from_user field. This change checks the configuration and ensures that an endpoint will not be created if the from_user contains an invalid character. It also adds a null check to the PJSIP URI parsing as a backup. ASTERISK-27036 #close Reported by: Maxim Vasilev Change-Id: I0396fdb5080604e0bdf1277464d5c8a85db913d0 2017-06-27 19:27 +0000 [8a803f75a0] Richard Mudgett * json.c: Add backtrace log to find 'Invalid UTF-8 string' errors Change-Id: I9020ff9f2b3749904317c0c173f47a1bbed6f929 2017-07-05 13:39 +0000 [aa514f420b] Richard Mudgett * res_rtp_asterisk.c: Fix TURN deadlock by using ICE session group lock. When a message is received on the TURN socket, the code processing the message needs to call into the ICE/STUN session for further processing. This code path locks the TURN group lock then the ICE/STUN group lock. In another thread an ICE/STUN timer can fire off to send a keep alive message over the TURN socket. In this code path, the ICE/STUN group lock is obtained then the TURN group lock is obtained to send the packet. A classic deadlock case if the group locks are not the same. * Made TURN get created using the ICE/STUN session's group lock. NOTE: I was originally concerned that the ICE/STUN session can get recreated by ice_reset_session() for an event like RTCP multiplexing causing a change during SDP negotiation. In this case the TURN group lock would become different. However, TURN is also recreated as part of the ICE/STUN recreation in ice_create() when all known ICE candidates are added to the new ICE session. While the ICE/STUN and TURN sessions are being recreated there is a period where the group locks could be different. ASTERISK-27023 #close Patches: res_rtp_asterisk-turn-deadlock-fix.patch (license #6502) patch uploaded by Michael Walton (modified) Change-Id: Ic870edb99ce4988a8c8eb6e678ca7f19da1432b9 2017-07-06 05:55 +0000 [379fe65831] George Joseph * Fix alembic branches Change-Id: I04f607f084bda9b1b7f626e8e9735c37dc751187 2017-06-23 11:17 +0000 [22c4c1a0ba] Richard Mudgett * bridge_native_rtp.c: Fix direct media video RTP instance ACL check. The video stream was using the audio stream RTP instance addresses to check if the video RTP gets directed to an allowed direct media Access Control List (ACL) address. There is no guarantee that the video RTP instance uses the same addresses as the audio RTP instance. This looks like it has been a bug since v11 when direct media ACL was first added to chan_sip and then faithfully reproduced through a couple code refactorings into the new bridging architecture. Change-Id: I8ddd56320e0eea769f3ceed3fa5b6bdfb51d681a 2017-07-05 07:42 +0000 [6258de458b] Sean Bright * core: Fix segfault when invoking 'data get' CLI command Invoking 'data get /asterisk/core/channeltypes' caused a crash because of an assumption of a tech's capabilities to be non-NULL. The 'Surrogate' tech, however, does have a NULL capabilities member, resulting in a crash. ASTERISK-27108 #close Change-Id: I2fbe7715681f43d5565d1e1599269468c26b0e0a 2017-07-03 10:59 +0000 [39d2ebbf56] Alexander Traud * chan_sip: Only when different, add TCP|TLS in autodomain (SIP Domain Support). When sip.conf contained tcpenable=yes and autodomain=yes, the TCP domain was added in any case, because of a local Boolean-negation error of the return value of ast_sockaddr_cmp. After fixing this error for TCP and TLS, the TLS domain was still always added with tlsenable=yes, because the domains were not compared just on the address but also on the port – and TLS is always on a different port than UDP/TCP. ASTERISK-27106 Change-Id: I14fe9e319e238320b094016980445ef3a5b3337c 2017-07-03 10:38 +0000 [9f4b3b966e] Alexander Traud * chan_sip: Fix a typo for tlsbindaddr in autodomain (SIP Domain Support). Because of a copy-and-paste error when the struct ast_sockaddr changed, tlsbindaddr was not added, when sip.conf contained autodomain=yes; see "show sip domains" on the command-line interface (CLI) of Asterisk. ASTERISK-27106 Change-Id: I3d0957150017c223136968ef1266f275d0d6695e 2017-06-29 13:58 +0000 [194625c1de] Sean Bright * app_voicemail: Cleanup ODBC connection handling The primary focus of this patch is adding a missing call to ast_odbc_release_obj(), but is also a general cleanup of the ODBC related code in app_voicemail. ASTERISK-27093 #close Change-Id: I8e285142eaeb3146b4287a928276b70db76c902b 2017-06-30 23:57 +0000 [73520e9f58] Corey Farrell * channel: Clear channel flag in error branch. Clear channel flag AST_FLAG_END_DTMF_ONLY in ast_waitfordigit_full when ast_read returns NULL. ASTERISK-27100 #close Change-Id: Id3039e9a4e74e0cb359f636c9fd0c9740ebf7d9d 2017-06-29 18:27 +0000 [0d64cbde57] Richard Mudgett * pjsip_distributor.c: Fix deadlock with TCP type transports. When a SIP message comes in on a transport, pjproject obtains the lock on the transport and pulls the data out of the socket. Unlike UDP, the TCP transport does not allow concurrent access. Without concurrency the transport lock is not released when the transport's message complete callback is called. The processing continues and eventually Asterisk starts processing the SIP message. The first thing Asterisk tries to do is determine the associated dialog of the message to determine the associated serializer. To get the associated serializer safely requires us to get the dialog lock. To send a request or response message for a dialog, pjproject obtains the dialog lock and then obtains the transport lock. Deadlock can result because of the opposite order the locks are obtained. * Fix the deadlock by obtaining the serializer associated with the dialog another way that doesn't involve obtaining the dialog lock. In this case, we use an ao2 container to hold the associated endpoint and serializer. The new locks are held a brief time and won't overlap other existing lock times. ASTERISK-27090 #close Change-Id: I9ed63f4da9649e9db6ed4be29c360968917a89bd 2017-06-29 18:22 +0000 [905d18e8bf] Richard Mudgett * pjsip_distributor.c: Fix unidentified_requests hash functions. The OBJ_SEARCH_xxx defines should not be used as if they were individual bits. They represent a multi-bit enumeration value field. Change-Id: I32abc9a475396dab02402a7014357dd94284e17b 2017-06-30 08:31 +0000 [bbe68f139d] George Joseph * pjproject_bundled: Allow passing configure options to bundled There wasn't any good way to pass options like --host or --build down to the pjproject configure which makes cross-compiling difficult. * Added a new PJPROJECT_CONFIGURE_OPTS environment variable which can be used to pass arbitrary options to pjproject configure. * Automatically set the pjproject configure --host and --build options to match those supplied for the asterisk configure. ASTERISK-27097 #close Reported-by: Kinsey Moore Change-Id: I5fa776e110262851173002a26ffe1172e4c35b2e 2017-06-29 14:50 +0000 [6bd7c0f37c] George Joseph * chan_pjsip: Fix ability to send UPDATE on COLP When connected_line_method is "invite", we're supposed to determine if the client can support UPDATE and if it can, send UPDATE instead of INVITE to avoid the SDP renegotiation. Not only was pjproject not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing that invite_tsx wasn't NULL which isn't always the case. * Updated chan_pjsip/update_connected_line_information to drop the requirement that invite_tsx isn't NULL. * Submitted patch to pjproject sip_inv.c that sets the PJSIP_INV_SUPPORT_UPDATE flag correctly. * Updated pjsip.conf.sample to clarify what happens when "invite" is specified. ASTERISK-27095 Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560 2017-06-27 04:37 +0000 [2c43ca0ac5] Ivan Poddubny * app_queue: Fix returning to dialplan when a queue is empty The fix for ASTERISK-25665 introduced a regression. The return value of queue_exec used to be 0 in case of leavewhenempty but it was changed to -1 (returned from wait_our_turn and passed transparently by queue_exec), thus leading to hangup instead of returning back to dialplan. This commit resets the value back to 0 in this case, restoring original behavior. ASTERISK-27065 #close Reported by: Marek Cervenka Change-Id: Id9c83b75aeda463250155e88c5004be52bbca5ac 2017-06-28 09:03 +0000 [0426b1d88a] Joshua Colp * res_rtp_asterisk: Fix issues with ICE renegotiation. When re-inviting to add more streams it is possible for the role of existing ICE sessions to be changed to the incorrect value. This results in subsequent refreshes within the sessions getting a role conflict and the ICE session breaking down. This change only sets the role to be the new value if an ICE renegotiation is actually going to happen, otherwise the existing role is preserved. As well if we encounter a situation where a unidirectional ICE negotiation happens and the other side does not send us candidates we will not store any information for sending traffic, even though we know where they are reachable. This change fixes this by using the source of the ICE traffic itself as the target if no candidates are known and we receive some ICE traffic. ASTERISK-27088 Change-Id: I71228181e358917fcefc3100fad21b2fc02a59a9 2017-06-08 22:50 +0000 [eb48e99bd4] George Joseph * bridge_native_rtp: Keep rtp instance refs on bridge_channel There have been reports of deadlocks caused by an attempt to send a frame to a channel's rtp instance after the channel has left the native bridge and been destroyed. This patch effectively causes the bridge channel to keep a reference to the glue and both the audio and video rtp instances so what gets started will get stopped. ASTERISK-26978 #close Reported-by: Ross Beer Change-Id: I9e1ac49fa4af68d64826ccccd152593cf8cdb21a 2017-06-27 10:46 +0000 [1f59d08924] Torrey Searle * res/res_pjsip_t38: fix incorrect increment of media_count The T38 sdp callback incorrectly has a side effect of incrementing the media_count. This can lead to core dumps. Change-Id: I7bb2f4987de4046ec52cfc34e5ea0662dae32af8 2017-06-15 03:12 +0000 [9fbc34d2bd] Torrey Searle * res_pjsip: Add DTMF INFO Failback mode The existing auto dtmf mode reverts to inband if 4733 fails to be negotiated. This patch adds a new mode auto_info which will switch to INFO instead of inband if 4733 is not available. ASTERISK-27066 #close Change-Id: Id185b11e84afd9191a2f269e8443019047765e91 2017-06-22 07:47 +0000 [154d2914fa] Torrey Searle * res/res_pjsip_t38 ensure t38 requests get rejected quickly arm the t38 webhook always, so we can correctly reject a T38 negotiation request when t38 is disabled on a channel Change-Id: Ib1ffe35aee145d4e0fe61dd012580be11aae079d 2017-06-21 17:57 +0000 [764d04fa87] Richard Mudgett * res_pjsip_mwi.c: Eliminate RAII_VAR in contact delete observer Change-Id: I0bc97c6608de1d1a4228826b3b3be43f162f05f3 2017-06-16 18:08 +0000 [0f6a9617eb] Alexei Gradinari * res_pjsip_mwi: update unsolicited MWI subscriptions on updating contact Do not need to unsubscribe/subscribe on creating the ednpoint's contact. The modified function create_mwi_subscriptions_for_endpoint adds the subscription only if it does not exist. The subscriptions aren't added for active contacts which are retrieved on startup from realtime if mwi_disable_initial_unsolicited=yes. Because the mwi_contact_added is not called. So the subscriptions also should be created on updating contact. ASTERISK-26230 #close Change-Id: I47e265af9296ca09aa42a316fdacac104148cee4 2017-06-20 15:41 +0000 [1f9913f272] Kevin Harwell * core_local: local channel data not being properly unref'ed and unlocked In an earlier version of Asterisk a local channel [un]lock all functions were added in order to keep a crash from occurring when a channel hung up too early during an attended transfer. Unfortunately, when a transfer failure occurs and depending on the timing, the local channels sometime do not get properly unlocked and deref'ed after being locked and ref'ed. This happens because the underlying local channel structure gets NULLed out before unlocking. This patch reworks those [un]lock functions and makes sure the values that get locked and ref'ed later get unlocked and deref'ed. ASTERISK-27074 #close Change-Id: Ice96653e29bd9d6674ed5f95feb6b448ab148b09 2017-06-20 16:01 +0000 [67664fbf95] Kevin Harwell * bridge: stuck channel(s) after failed attended transfer If an attended transfer failed it was possible for some of the channels involved to get "stuck" because Asterisk was not hanging up the transfer target. This patch ensures Asterisk hangs up the transfer target when an attended transfer failure occurs. ASTERISK-27075 #close Change-Id: I98a6ecd92d3461ab98c36f0d9451d23adaf3e5f9 2017-06-19 11:28 +0000 [cecf6540dc] Rodrigo Ramírez Norambuena * cdr: fix mistake spelling of a word for Unanswered. Change-Id: I7a610bef369924523a445c7e849ee88cc45dc5df 2017-06-19 17:21 +0000 [8f356192d1] Alexei Gradinari * app_voicemail: IMAP connection control A new global option "imap_poll_logout" was added to specify whether need to disconnect from the IMAP server after polling of mailboxes. ASTERISK-27068 #close Closing IMAP connection after loading mailbox from voicemail.conf ASTERISK-24052 #close Change-Id: Ib7558ba04516240a32b65f42e9be64372a0ae12a 2017-06-12 16:17 +0000 [8e749c8f51] Alexei Gradinari * res_pjsip_mwi: unsubscribe unsolicited MWI on deleting endpoint last contact If the endpoint's last contact is deleted unsolicited MWI has to be unsubscribed. ASTERISK-27051 #close Change-Id: I33e174e0b9dba0998927d16d6d100fda5c7254e0 2017-06-16 09:31 +0000 [edfdb4dff5] George Joseph * res_stasis: Plug reference leak on stolen channels When a stasis channel is stolen by another app, the control structure is unreffed but never unlinked from the app_controls container. This causes the channel reference to leak. Added OBJ_UNLINK to the callback in channel_stolen_cb. Also added some additional channel lifecycle debug messages to channel.c. ASTERISK-27059 #close Repoorted-by: George Joseph Change-Id: Ib820936cd49453f20156971785e7f4f182c56e14 2017-06-16 14:56 +0000 [0a40073750] Matthew Fredrickson * formats/format_g729: Fix typo in comment There was a typo in a comment. This commit is to fix the typo. ASTERISK-27060 #close Change-Id: Ic2699f8dbeaacd58ccb6ec3203e853e1babe3235 2017-06-12 09:23 +0000 [a6e4899612] Alexei Gradinari * res_pjsip: New endpoint option "notify_early_inuse_ringing" This option was added to control whether to notify dialog-info state 'early' or 'confirmed' on Ringing when already INUSE. The value "yes" is useful for some SIP phones (Cisco SPA) to be able to indicate and pick up ringing devices. ASTERISK-26919 #close Change-Id: Ie050bc30023543c7dfb4365c5be3ce58c738c711 2017-03-30 09:33 +0000 [005a4afa6b] Jan Friesse * res_corosync: Change thread stack size In Corosync 2.x libraries were changed to use LibQB IPC. Sadly LibQB IPC doesn't support copy-free access to received buffer, so Corosync libraries were rewritten to use stack as buffer. Mostly the needed stack size is quite small, but for all *_dispatch functions, 1MiB is needed. Asterisk function ast_pthread_create_background set stack size for new thread to much smaller AST_BACKGROUND_STACKSIZE (~500KiB). This results in Asterisk crash when running with Corosync 2.x. Patch solves this issue by creating it's own version of ast_pthread_create_background which sets stack size to much higher value (actually it's AST_BACKGROUND_STACKSIZE + 3MiB). Another problem may appear when "corosync show members" netconsole command is executed. It is also executed in thread and also has only 500KiB stack size. Sadly it calls corosync_cfg_get_node_addrs which again needs at least 1MiB stack. Solution is to use HAVE_COROSYNC_CFG_STATE_TRACK as a discriminator between Corosync 1.x and 2.x. If 1.x is found, nothing changes. If 2.x is found, NodeID is displayed instead of IP address. ASTERISK-25370 #close Reported by: mdu113 Change-Id: Id95b0d21ab6e708e7d74ad8786c587211676fa08 2017-06-13 11:33 +0000 [7901b9853e] George Joseph * res_ari: Add "module loaded" check to ari stubs The recent change to make the use of LOAD_DECLINE more consistent caused res_ari to unload itself before declining if the ari.conf file wasn't found. The ari stubs though still tried to use the configuration resulting in segfaults. This patch creates a new CHECK_ARI_MODULE_LOADED macro which tests to see if res_ari is actually loaded and causes the stubs to also decline if it isn't. The macro was then added to the mustache template's "load_module" function. ASTERISK-27026 #close Reported-by: Ronald Raikes Change-Id: I263d56efa628ee3c411bdcd16d49af6260c6c91d 2017-06-15 13:48 +0000 [3b6c327c51] Alexei Gradinari * app_voicemail: IMAP logout on reload/unload Closing IMAP connection on module reload or unload. ASTERISK-24052 #close Change-Id: I2a40182aa9ef249fa6865d33570430e9ada68525 2017-06-15 12:33 +0000 [b9a4ab8c8c] Richard Mudgett * chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read. The construction of the returned string assumed incorrectly that the supplied buffer would always be initialized as an empty string. If it is not an empty string we could overrun the supplied buffer by the length of the non-empty buffer string plus one. It is also theoreticaly possible for the supplied buffer to be overrun by a string terminator during a read operation even if the supplied buffer is an empty string. * Fix the assumption that the supplied buffer would already be an empty string. The buffer is not guaranteed to contain an empty string by all possible callers. * Fix string terminator buffer overrun potential. Change-Id: If6a0806806527678c8554b1dcb34fd7808aa95c9 2017-06-15 07:32 +0000 [4910a3bf40] Joshua Colp * channel: Fix reference counting in ast_channel_suppress. The ast_channel_suppress function wrongly decremented the reference count of the underlying structure used to keep track of what should be suppressed on a channel if the function was called multiple times on the same channel. This change cleans up the reference counting a bit so this no longer occurs. ASTERISK-27016 Change-Id: I2eed4077cb4916e6626f9f120b63b963acc5c136 2017-06-14 12:34 +0000 [f1a209d5ac] Richard Mudgett * app_voicemail.c: Fix compile error when IMAP enabled. Change-Id: I2703f15b4099b4210c68eccf293105d1975c1fc1 2017-06-08 12:28 +0000 [dc307af7f2] Frederic LE FOLL * Core/PBX: Deadlock between dialplan execution and application unregistration. Not easy to reproduce, but we have noticed deadlocks when unloading a module while dialplan is handling a request. The deadlock is between : 1) Dialplan execution: pbx_extension_helper() first taking conlock, then pbx_findapp() [when called] asking for lock on apps list. 2) Application unregistration: ast_unregister_application() first taking lock on apps list, then unreference_cached_app() [when called] asking for conlock. As a protection, I suggest to modify ast_unregister_application(), so that it anticipates the need of conlock, before taking the lock on apps list. The side effect is a longer unavailability of conlock when unregistering an application. ASTERISK-27041 Change-Id: I0db0f1eb320da6a5758cce3a47d765be1face8e2 2017-06-14 11:12 +0000 [c2eea791e4] George Joseph * res_pjsip_pubsub: Fix reference to released endpoint destroy_subscription was attempting to get the id of the subscription tree's endpoint after we'd already called ao2_cleanup on it causing a segfault. Moved the cleanup until after the debug statement and since endpoint could also be NULL at this point, check for that as well. ASTERISK-27057 #close Reported-by: Ryan Smith Change-Id: Ice0a7727f560cf204d870a774c6df71e159b1678 2017-06-14 08:29 +0000 [2dee95cc7a] George Joseph * res_pjsip_session: Correct inverted test in session_outgoing_nat_hook There was a typo introduced in commit 776ffd77 which was preventing the transport's external media address from being used. ASTERISK-27024 #close Reported-by: Christopher van de Sande patches: patch.diff submitted by Florian Floimair (license 6892) Change-Id: I7ec617171eaa2d86d2680b00cf37d5088adafc27 2017-06-08 17:31 +0000 [e16a669c70] Jørgen H * res_pjsip_transport_websocket: Add NULL check in get_write_timeout Added check for NULL return value when calling ast_sorcery_retrieve_by_id in function get_write_timeout ASTERISK-27046 Change-Id: I9357717278da631c3a1cb502c412693929b0cb41 2017-06-14 08:54 +0000 [7dafe82751] George Joseph * res_rtp_asterisk: Fix ssrc change for rtcp srtp It looks like there was a copy/paste error in ast_rtp_change_source where if there was a rtcp srtp instance, instead of updating its ssrc we were updating the srtp instance ssrc twice. ASTERISK-27022 #close Reported-by: Michael Walton Change-Id: Ic88f3aee7227b401c58745ac265ff92c19620095 2017-06-08 14:38 +0000 [e414833f6e] Joshua Colp * bridge: Add a deferred queue. This change adds a deferred queue to bridging. If a bridge technology determines that a frame can not be written and should be deferred it can indicate back to bridging to do so. Bridging will then requeue any deferred frames upon a new channel joining the bridge. This change has been leveraged for T.38 request negotiate control frames. Without the deferred queue there is a race condition between the bridge receiving the T.38 request negotiate and the second channel joining and being in the bridge. If the channel is not yet in the bridge then the T.38 negotiation fails. A unit test has also been added that confirms that a T.38 request negotiate control frame is deferred when no other channel is in the bridge and that it is requeued when a new channel joins the bridge. ASTERISK-26923 Change-Id: Ie05b08523f399eae579130f4a5f562a344d2e415 2017-06-13 14:17 +0000 [6cdf3191d3] Kevin Harwell * res_pjsip_refer/session: Calls dropped during transfer When doing an attended transfer it's possible for the transferer, after receiving an accepted response from Asterisk, to send a BYE to Asterisk, which can then be processed before Asterisk has time to start and/or complete the transfer process. This of course causes the transfer to not complete successfully, thus dropping the call. This patch makes it so any BYEs received from the transferer, after the REFER, that initiate a session end are deferred until the transfer is complete. This allows the channel that would have otherwise been hung up by Asterisk to remain available throughout the transfer process. ASTERISK-27053 #close Change-Id: I43586db79079457d92d71f1fd993be9a3b409d5a 2017-06-13 10:47 +0000 [0bde568669] George Joseph * pjproject_bundled: Use the asterisk github mirror for download We now mirror the pjproject tarball and md5 at https://github.com/asterisk/third-party/tree/master/pjproject To improve download reliability, we now get the tarball from our mirror instead of from pjsip.org. ASTERISK-27052 #close Reported-by: 'alex' Change-Id: I60236587a8935bfa71fcc391f4e2ecb31918c08a 2017-06-12 17:55 +0000 [08be5e01e8] Alexei Gradinari * app_voicemail: IMAP logout on MWI unsubscribe Closing IMAP connection on MWI unsubscribe. ASTERISK-24052 #close Change-Id: I4ff964026002b2817b48c20fb4239f0a880228fd 2017-06-12 09:57 +0000 [59c9bbe696] Alexei Gradinari * res_pjsip_mwi: don't create mwi subscriptions if initial unsolicited disabled If sending unsolicited mwi to all endpoints on startup is disabled (mwi_disable_initial_unsolicited=yes) do not need to create subscriptions. If there are many (thousands) realtime endpoints configured with unsolicited mwi and Vociemail Storage configured as ODBC or IMAP there will be huge number of DB/IMAP requests on startup. ASTERISK-26230 #close Change-Id: I50ae909639e3ee298b931a54def4b2b9e0fb86c5 2017-06-06 14:54 +0000 [68de35a6a0] David M. Lee * CFLAGS for BIND8 support Some systems (like macOS) require BIND_8_COMPAT to be defined so that the nameser libraries are, well, BIND8 compatible. Change-Id: If79fc27a64f90de1835b5aa3aadfa9be22bd16b0 2017-06-11 12:06 +0000 [da3312457e] Sean Bright * codecs.conf.sample: Fix max_bandwidth speling error Reported by Sylvain Boily via asterisk-dev mailing list. Change-Id: Idc7623f335aea3e144dd369ba383b9a757480a9d 2017-06-08 10:54 +0000 [6a64f65fe6] Guido Falsi * BuildSystem: Add patches to allow building with recent LibreSSL Add some #if defined checks which allow building against LibreSSL. These patchess come from OpenBSD ports: https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/telephony/asterisk/patches/ ASTERISK-27043 #close Reported by: OpenBSD ports Change-Id: I2f6c08a5840b85ad4d2b75370b947ddde7a9a572 2017-06-08 10:36 +0000 [44cee2f4a1] Guido Falsi * BuildSystem: Fix build on FreeBSD due to missing crypt.h FreeBSD does not include a crypt.h include file. Definitions for crypt() and crypt_r() are in unistd.h ASTERISK-27042 #close Change-Id: Ib307ee5e384870c6af50efa89fb73722dd0c3a7e 2017-06-07 15:19 +0000 [1f10c6b3b0] Joshua Colp * chan_pjsip: Update device state when in early media. The chan_pjsip module uses a calculation approach for determining device state. This means that in situations where we would expect device state to change we need to tell the core to query. A scenario that was missed is when early media was signaled. This change adds the notification for the core to query device state when we are told that early media is being provided. ASTERISK-27039 Change-Id: Iafebfd152894966344ff2e950a3cee9f59a3eb6f 2017-06-07 14:32 +0000 [590ffcaf0b] Sean Bright * eventfd: Disable during cross compilation Reported by Lonnie Abelbeck via private e-mail. Change-Id: Icc80f12b8d8d591e14a8e0ed9f1c02cbd193a89b 2017-06-07 11:21 +0000 [5520b6c201] Alexei Gradinari * CHANGES: correct version for a new option 'refer_blind_progress' Change-Id: If4817d26a8974610827624fb8a4e56d681d6bf97 2017-06-06 07:04 +0000 [996a4791ff] Joshua Colp * pjsip: Extend 'asymmetric_rtp_codec' option to include us changing. PJSIP support in Asterisk differs from chan_sip in that it allows media to be sent as-is without transcoding provided the codecs were negotiated in the SDP. This is allowed according to the RFC. Support for this differs quite a lot though and some endpoints do not handle it well. This change extends the 'asymmetric_rtp_codec' option to also cover this case. When set to no (the default) the code behaves as chan_sip does - the best codec is selected and we will only ever send that, unless we change what we are sending if the remote side changes. When set to yes we will send media as-is without transcoding if the codec has been negotiated in the SDP. ASTERISK-26996 Change-Id: Ib1647f6902a0843e8c435946f831c2159e8d1d51 2017-06-06 10:04 +0000 [c093bf8072] Sean Bright * res_rtp_multicast: Use consistent timestamps when possible When a frame destined for a MulticastRTP channel does not have timing information (such as when an 'originate' is done), we generate the RTP timestamps ourselves without regard to the number of samples we are about to send. Instead, use the same method as res_rtp_asterisk and 'predict' a timestamp given the number of samples. If the difference between the timestamp that we generate and the one we predict is within a specific threshold, use the predicted timestamp so that we end up with timestamps that are consistent with the number of samples we are actually sending. Change-Id: I2bf0db3541b1573043330421cbb114ff0f22ec1f 2017-05-31 10:41 +0000 [746c2c5745] Joshua Colp * res_pjsip: Add support for returning only reachable contacts and use it. This introduces the ability for PJSIP code to specify filtering flags when retrieving PJSIP contacts. The first flag for use causes the query code to only retrieve contacts that are not unreachable. This change has been leveraged by both the Dial() process and the PJSIP_DIAL_CONTACTS dialplan function so they will now only attempt calls to contacts which are not unreachable. ASTERISK-26281 Change-Id: I8233b4faa21ba3db114f5a42e946e4b191446f6c 2017-06-05 10:45 +0000 [adfb28882b] Kevin Harwell * channel: ast_write frame wrongly freed after call to audiohooks ASTERISK-26419 introduced a bug when calling ast_audiohook_write_list in ast_write. It would free the frame given to ast_write if the frame returned by ast_audiohook_write_list was different than the given one. The frame give to ast_write should never be freed within that function. It is the caller's resposibility to free the frame after writing (or when it its done with it). By freeing it within ast_write this of course led to some memory corruption problems. This patch makes it so the frame given to ast_write is no longer freed within the function. The frame returned by ast_audiohook_write_list is now subsequently used in ast_write and is freed later. It is freed either after translate if the frame returned by translate is different, or near the end of ast_write prior to function exit. ASTERISK-26973 #close Change-Id: I463d4ac3b736ced95de986ee74a489c7c7ab103b 2017-05-31 11:45 +0000 [283cc59af7] Sean Bright * pbx_builtin: Properly handle hangup during Background Before this patch, when a user hung up during a Background, we would stuff 0xff into a char and attempt a dialplan lookup of it. This caused problems for some realtime engines which interpreted the value as the beginning of an invalid UTF-8 sequence. ASTERISK-19291 #close Reported by: Andrew Nowrot Change-Id: I8ca6da93252d61c76ebdb46a4aa65e73ca985358 2017-05-31 04:25 +0000 [dc05183f4b] Joshua Colp * channel / app_meetme: Fix parentheses. ASTERISK-27025 Change-Id: Id736b0aa4ec6b6b0f04663d64fa8d151f81fdbed 2017-05-30 16:07 +0000 [cf6cf59646] Sean Bright * stasis_recording: Correct ast_asprintf error checking ASTERISK-27021 #close Reported by: Tim Morgan Change-Id: I0ac061f040093e806c3b1f4e2340864f3ce4dd75 2017-05-28 15:43 +0000 [70e5887906] Sean Bright * format: Reintroduce smoother flags In review 4843 (ASTERISK-24858), we added a hack that forced a smoother creation when sending signed linear so that the byte order was adjusted during transmission. This was needed because smoother flags were lost during the new format work that was done in Asterisk 13. Rather than rolling that same hack into res_rtp_multicast, re-introduce smoother flags so that formats can dictate their own options. Change-Id: I77b835fba0e539c6ce50014a984766f63cab2c16 2017-05-30 09:34 +0000 [97b003f5e2] Sean Bright * format_mp3: Re-work menuselect/build issues Rather than removing format_mp3 from ALL_C_MODS (which caused format_mp3 to not show up in menuselect), use .PHONY targets when the necessary source files are not present. ASTERISK-23951 Reported by: Tzafrir Cohen Change-Id: I0a7512c51acc9e86043671795020b0de725bd9e8 2017-05-30 09:43 +0000 [c10341646d] George Joseph * test_json: Fix test names with reserved words Some of the test names were actually reserved words (true, false, int, null, string, bool). When the jenkins test results analyzer does its thing it tries to create a map using the test names as keys and fails because they're reserved words. Added "type_" to those test names. Change-Id: I90d809f46969c78a1c605b736ff0635196a2cf1b 2017-05-26 11:41 +0000 [b07b216235] Joshua Colp * manager: Clear the flag on the other channel. During the channel flag audit an incorrect change was done. The flag should be cleared on the second channel. ASTERISK-26469 Change-Id: I770c5a389550a2fb5a6ade942fccbb2e1d9199c8 2017-05-26 11:06 +0000 [5e9cd1f20d] Sean Bright * res_srtp: Add support for libsrtp2 ASTERISK-25294 #close Reported by: Tzafrir Cohen ASTERISK-26976 #close Reported by: Alex Change-Id: I789b1c3d1ed31365bbd9339fa58ef36f48833c40 2017-05-25 11:10 +0000 [72213c98e3] Sean Bright * format_mp3: Don't try to build format_mp3 if we don't have sources ASTERISK-23951 #close Reported by: Tzafrir Cohen Change-Id: Iebf181d44bb735787fde4b5be863c4d7e2478a30 2017-05-24 15:50 +0000 [65898c3af8] George Joseph * unittests: Add a unit test that causes a SEGV and... ...that can only be run by explicitly calling it with 'test execute category /DO_NOT_RUN/ name RAISE_SEGV' This allows us to more easily test CI and debugging tools that should do certain things when asterisk coredumps. To allow this a new member was added to the ast_test_info structure named 'explicit_only'. If set by a test, the test will be skipped during a 'test execute all' or 'test execute category ...'. Change-Id: Ia3a11856aae4887df9a02b6b081cc777b36eb6ed 2017-05-23 15:42 +0000 [90237dca11] Sean Bright * res_agi: Allow configuration of audio format of EAGI pipe This change allows the format of the EAGI audio pipe to be changed by setting the dialplan variable 'EAGI_AUDIO_FORMAT' to the name of one of the loaded formats. ASTERISK-26124 #close Change-Id: I7a10fad401ad2a21c68c2e7246fa357d5cee5bbd 2017-05-23 13:33 +0000 [3eb7fbba72] Sean Bright * res_agi: Clarify 'RECORD FILE' documentation Documented the 'beep' option in both the parameters list and the command description. ASTERISK-23839 #close Change-Id: I4970395c922dbdce3f7cf0f56d5b065ec9aa53ea 2017-05-23 13:06 +0000 [f306e451f6] Sean Bright * res_agi: Prevent crash when SET VARIABLE called without arguments Explicitly check that the appropriate number of arguments were passed to SET VARIABLE before attempting to reference them. Also initialize the arguments array to zeroes before populating it. ASTERISK-22432 #close Change-Id: I5143607d80a2724f749c1674f3126b04ed32ea97 2017-05-23 12:35 +0000 [a007e438c3] Sean Bright * res_agi: Fix malformed AGI usage response If the generated XML documentation for a command does not end with a \n, the postamble of the usage message does not appear on its own line. ASTERISK-25662 #close Change-Id: If190f1e9e37fe215fed95897d78d4a6e142b0020 2017-05-23 12:00 +0000 [971a401ce9] Sean Bright * sip.conf.sample: Clarify where DTLS settings are permitted ASTERISK-25101 #close Change-Id: I09a97793e5577b4422d0ae883fadb3f0d86725cc 2017-05-23 10:06 +0000 [700ef6861a] Sean Bright * res_format_attr_h26x: Trim blanks in fmtp attributes Some devices separate format attributes with a semicolon followed by a space, so trim blanks before trying to match them. ASTERISK-27008 #close Change-Id: Ia44cb2e4fef5c73dc541a29da79cb0e19c22d9cc 2017-05-15 15:03 +0000 [6bfcb1acc7] Joshua Colp * app_queue: Fix members showing as being in call when not. A change was done which added an 'in_call' flag to queue members that was set to true while talking to an agent. Unfortunately in practice this does not accurately reflect whether they are talking to an agent or not. If a Local channel is involved and a transfer is performed then the app_queue application would incorrectly think the agent was still in a call with the caller. This was done to fix a race condition between an agent becoming available by device state and the checking of the last call information for the wrapup time. There was a small window where the last call information would be the previous value instead of the new one. This change goes about fixing the original issue in a different way by considering the call completed if device state is received which would make the agent available and if they are currently in a call. If this occurs the last call information is updated before the agent becomes available ensuring that old information is not present when checking if the member should be called. This also improves the transfer situation by actually updating and enforcing the wrapup time. ASTERISK-26399 ASTERISK-26400 ASTERISK-26715 ASTERISK-26975 Change-Id: Ife1cb686e3173b3a6d368601adef9aff69d4beea 2017-05-23 05:45 +0000 [f1b32de2c5] Robert Mordec * app_confbridge: Race between removing and playing name recording while leaving When user leaves a conference, its channel calls async_play_sound_file() in order to play the name announcement and then unlinks the sound file. The async_play_sound_file() function adds a task to conference playback queue, which then runs playback_common() function in a different thread. It leads to a race condition when, in some cases, channel thread may unlink the sound file before playback_common() had a chance to open it. This patch creates a file deletion task, that is queued after playback. ASTERISK-27012 #close Change-Id: I412f7922d412004b80917d4e892546c15bd70dd3 2017-05-22 13:51 +0000 [e91efef2bb] Kevin Harwell * res_rtp_asterisk: rtcp mux using the wrong srtp unprotecting algorithm When using rtcp mux if an rtcp payload came in it would still use the srtp unprotect algorithm instead of the srtp unprotect rtcp method. Since rtcp data was being passed to the rtp unprotect method this would result in an error. This patch ensures that the correct unprotect method is chosen by making sure the passed in rtcp flag is appropriately set when rtcp mux is enabled and an rtcp payload is received. ASTERISK-26979 #close Change-Id: Ic5409f9d1a267f1d4785fc5aed867daaecca6241 2017-05-19 10:05 +0000 [4479038073] Sean Bright * chan_sip: Better ICE handling for RTCP-MUX If we are offered or are offering RTCP-MUX, don't consider RTCP ICE candidates. This confuses certain browsers (current Firefox for example) and causes intial audio setup delays. ASTERISK-26982 #close Change-Id: Ifeaf47e83972fe8dbe58b7fb3d6d1823400cfb91 2017-04-26 09:22 +0000 [36628cc9c4] Yasin CANER * res_pjsip_session : fixed wrong From Header number On Re-invite ASTERISK-26964 #close Change-Id: I55a9caa7dc90e6c4c219cb09b5c2ec08af84a302 2017-04-13 17:16 +0000 [919ccdb9ac] Mark Michelson * AST-2017-002: Ensure transaction key buffer is large enough. ASTERISK-26938 #close Change-Id: I266490792fd8896a23be7cb92f316b7e69356413 2017-04-13 17:17 +0000 [49c032abef] Mark Michelson * AST-2017-003: Handle zero-length body parts correctly. ASTERISK-26939 #close Change-Id: I7ea235ab39833a187db4e078f0788bd0af0a24fd 2017-04-13 11:14 +0000 [1cc18d4025] George Joseph * AST-2017-004: chan_skinny: Add EOF check in skinny_session The while(1) loop in skinny_session wasn't checking for EOF so a packet that was longer than a header but still truncated would spin the while loop infinitely. Not only does this permanently tie up a thread and drive a core to 100% utilization, the call of ast_log() in such a tight loop eats all available process memory. Added poll with timeout to top of read loop ASTERISK-26940 #close Reported-by: Sandro Gauci Change-Id: I2ce65f3c5cb24b4943a9f75b64d545a1e2cd2898 2017-05-18 16:35 +0000 [c107ab4c04] Sean Bright * res_hep_rtcp: Add support level to module info Change-Id: I5661478f9cf12d431f730e42be79323b62831e92 2017-05-11 00:25 +0000 [cfeae52c0f] Ivan Poddubny * app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON There are 2 places in app_queue.c that log EXITEMPTY event: one in wait_our_turn, and another one in queue_exec in the loop trying to call an agent after wait_our_turn. In most cases it leads to logging EXITEMPTY twice. ABANDON is also logged on two places, and in the rare case when an agent and caller hang up simultaneously it's also possible to get duplicates in queue_log. This commit changes wait_our_turn to return -1 ("the caller should exit the queue") instead of 0 ("the caller's turn has arrived") in case of leaving when empty, so queue_exec skips the agent calling loop. Also, leave_queue is now executed only once in this case, because 2nd time is just a noop when the queue entry has already been removed. Also, it sets qe->handled to -1 to indicate that the call was not answered by an agent, but the necessary handling has already been done in order to avoid logging an extra ABANDON entry. ASTERISK-25665 #close Reported by: Ove Aursand Change-Id: I4578dd383bf2ac41589cf167865e8aaebcd4c11e 2017-05-14 00:37 +0000 [5da91c65be] Rodrigo Ramírez Norambuena * Fix spelling queues.conf.sample file Change-Id: Ie1c2d83af66f27a449da09a68d987e0992627fee 2017-05-13 11:40 +0000 [1618203964] Joshua Colp * asterisk: Audit locking of channel when manipulating flags. When manipulating flags on a channel the channel has to be locked to guarantee that nothing else is also manipulating the flags. This change introduces locking where necessary to guarantee this. It also adds helper functions that manipulate channel flags and lock to reduce repeated code. ASTERISK-26789 Change-Id: I489280662dba0f4c50981bfc5b5a7073fef2db10 2017-05-12 21:04 +0000 [b67363006f] Richard Mudgett * res_pjsip_session.c: Process initial INVITE sooner. (key exists) Retransmissions of an initial INVITE could be queued in the serializer before we have processed the first INVITE message. If the first INVITE message doesn't get completely processed before the retransmissions are seen then we could try to setup the same call from the retransmissions. A symptom of this is seeing a (key exists) message associated with an INVITE. An earlier change attempted to address this kind of problem by calculating a distributor serializer to use for unassociated messages. Part of that change also made incoming calls keep using that distributor serializer. (ASTERISK-26088) However, some leftover code was still deferring the INVITE processing to the session's serializer even though we were already in that serializer. This not only is unnecessary but would cause the same call resetup problem. * Removed the code to defer processing the initial INVITE to the session's serializer because we are already running in that serializer. ASTERISK-26998 #close Change-Id: I1e822d82dcc650e508bc2d40d545d5de4f3421f6 2017-05-08 15:56 +0000 [6af2dd34af] Alexei Gradinari * res_pjsip: New endpoint option "refer_blind_progress" This option was added to turn off notifying the progress details on Blind Transfer. If this option is not set then the chan_pjsip will send NOTIFY "200 OK" immediately after "202 Accepted". Some SIP phones like Mitel/Aastra or Snom keep the line busy until receive "200 OK". ASTERISK-26333 #close Change-Id: Id606fbff2e02e967c02138457badc399144720f2 2017-05-09 10:34 +0000 [6fba0a41f0] Joshua Colp * tcptls: Improve error messages for TLS connections. This change uses the functions provided by OpenSSL to query and better construct error messages for situations where the connection encounters a problem. ASTERISK-26606 Change-Id: I7ae40ce88c0dc4e185c4df1ceb3a6ccc198f075b 2017-05-04 17:28 +0000 [8ec6e19c86] Joshua Elson * Prevent Undefined Capath Crash It is possible to initialize a valid config without a capath or cafile definition. This will cause a crash on a reload. This fix ensures capath is always allocated. ASTERISK-26983 #close Change-Id: I63ff715d9d9023427543a5b8a4ba7b0d82533c12 2017-05-05 11:33 +0000 [d6325373ac] George Joseph * cel_odbc: Fix timestamp processing for microseconds When a column is of type timestamp, the fraction part of the event field's seconds was frequently parsed incorrectly especially if there were leading zeros. For instance "2017-05-23 23:55:03.023" would be parsed into an int as "23" then when the timestamp was formatted again to be inserted into the database column it'd be "2017-05-23 23:55:03.23" which is now 230 milliseconds instead of 23 milliseconds. "03.000001" would be transformed to "03.1", etc. * If the event field is 'eventtime' and the db column is timestamp, then existing processing has already correctly formatted the timestamp so now we simply use it rather than parsing it and re-printing it. This is the most common use case anyway. * If the event field is other than 'eventtime' and the db column is timestamp, we now parse the seconds, including the fractional part into a double rather than 2 ints. This preserves the magnitude and precision of the fractional part. When we print it, we now print it as a "%09.6lf" which correctly represents the input. To be honest, why we parse the string timestamp into components, test the components, then print the components back into a string timestamp is beyond me. We should use parse it, test it, then if it passes, use the original string representation in the database call. Maybe someone thought that some implementations wouldn't take a partial timestamp string like "2017-05-06" and decided to always produce a full timestamp string even if an abbreviated one was supplied. Anyway, I'm leaving it as it is. ASTERISK-25032 #close Reported-by: Etienne Lessard Change-Id: Id407e6221f79a5c1120e1a70bc7e893bbcaf1938 2017-05-09 05:25 +0000 [10a49ab362] Joshua Colp * res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages. This change adds the required logic to allow the SIP Call-ID to be placed into the HEP RTCP traffic if the chan_sip module is used. In cases where the option is enabled but the channel is not either SIP or PJSIP then the code will fallback to the channel name as done previously. Based on the change on Nir's branch at: team/nirs/hep-chan-sip-support ASTERISK-26427 Change-Id: I09ffa5f6e2fdfd99ee999650ba4e0a7aad6dc40d 2017-05-08 16:11 +0000 [7d4a22bf2e] George Joseph * logger: Added logger_queue_limit to the configuration options. All log messages go to a queue serviced by a single thread which does all the IO. This setting controls how big that queue can get (and therefore how much memory is allocated) before new messages are discarded. The default is 1000. Should something go bezerk and log tons of messages in a tight loop, this will prevent memory escalation. When the limit is reached, a WARNING is logged to that effect and messages are discarded until the queue is empty again. At that time another WARNING will be logged with the count of discarded messages. There's no "low water mark" for this queue because the logger thread empties the entire queue and processes it in 1 batch before going back and waiting on the queue again. Implementing a low water mark would mean additional locking as the thread processes each message and it's not worth it. A "test" was added to test_logger.c but since the outcome is non-deterministic, it's really just a cli command, not a unit test. Change-Id: Ib4520c95e1ca5325dbf584c7989ce391649836d1 2017-05-08 13:40 +0000 [1bcce442d0] Vitezslav Novy * chan_sip: Change sip_get_codec() to return correct codec list Return cahnnel nativeformats to fix bridge technology selection process. Same approach as in pjsip module. ASTERISK-26143 Reported-by: Henning Holtschneider Change-Id: I64e863753954d6ad67a9e722df2ebc328705ad48 2017-05-04 17:32 +0000 [614eda785d] Richard Mudgett * netsock2.c: Made get/set addr port avoid potential uninitialized memory. Change-Id: I532052bd7cd95a4b3565485fc01e2a1ea07ee647 2017-05-05 08:48 +0000 [c3ed63cb2c] Joshua Colp * func_cdr: Allow empty value for CDR dialplan function. A regression was introduced in 12 where passing an empty value to the CDR dialplan function was not longer allowed. This change returns to the behavior of 11 where it is permitted. ASTERISK-26173 Change-Id: I3f148203b54ec088007e29e30005a5de122e51c5 2017-05-04 16:04 +0000 [bed6c0d04b] George Joseph * app_confbridge: Fix reference to cfg in menu_template_handler menu_template_handler wasn't properly accounting for the fact that it might be called both during a load/reload (which isn't really valid but not prevented) and by a dialplan function. In both cases it was attempting to use the "pending" config which wasn't valid in the latter case. aco_process_config is also partly to blame because it wasn't properly cleaning "pending" up when a reload was done and no changes were made. Both of these contributed to a crash if CONFBRIDGE(menu,template) was called in a dialplan after a reload. * aco_process_config now sets info->internal->pending to NULL after it unrefs it although this isn't strictly necessary in the context of this fix. * menu_template_handler now uses the "current" config and silently ignores any attempt to be called as a result of someone uses the "template" parameter in the conf file. Luckily there's no other place in the codebase where aco_pending_config is used outside of aco_process_config. ASTERISK-25506 #close Reported-by: Frederic LE FOLL Change-Id: Ib349a17d3d088f092480b19addd7122fcaac21a7 2017-04-30 16:40 +0000 [7ffd80cc04] Joshua Colp * bridge: Fix returning to dialplan when executing Bridge() from AMI. When using the Bridge AMI action on the same channel multiple times it was possible for the channel to return to the wrong location in the dialplan if the other party hung up. This happened because the priority of the channel was not preserved across each action invocation and it would fail to move on to the next priority in other cases. This change makes it so that the priority of a channel is preserved when taking control of it from another thread and it is incremented as appropriate such that the priority reflects where the channel should next be executed in the dialplan, not where it may or may not currently be. The Bridge AMI action was also changed to ensure that it too starts the channels at the next location in the dialplan. ASTERISK-24529 Change-Id: I52406669cf64208aef7252a65b63ade31fbf7a5a 2017-05-01 13:04 +0000 [bbe90d6aed] Kevin Harwell * res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures When a call gets put on hold RTP is temporarily stopped and Asterisk was setting the remote RTCP address to NULL. Then when RTCP data was received from the remote endpoint, Asterisk would be missing this information when publishing the rtcp_message stasis event. Consequently, message subscribers (in this case res_hep_rtcp) trying to parse the "from" field output the following error: "ast_sockaddr_split_hostport: Port missing in (null)" This patch makes it so the remote RTCP address is no longer set to NULL when stopping RTP. There was only one place that appeared to check if the remote RTCP address was NULL as a way to tell if RTCP was running. This patch added an additional check on the RTCP schedid for that case to make sure RTCP was truly not running. ASTERISK-26860 #close Change-Id: I6be200fb20db647e48b5138ea4b81dfa7962974b 2017-05-02 11:34 +0000 [526a0081a0] Sean Bright * cleanup: Change severity of fread short-read warning Many sound files don't have a full frame's worth of data at EOF, so the warning messages were a bit too noisy. So we demote them to debug messages. Change-Id: I6b617467d687658adca39170a81797a11cc766f6 2017-04-26 07:58 +0000 [23db04ed93] Thierry Magnien * channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections For outgoing TCP connections, Asterisk uses the first IP address of the interface instead of the IP address we asked him to bind to. ASTERISK-26922 #close Reported-by: Ksenia Change-Id: I43c71ca89211dbf1838e5bcdb9be8d06d98e54eb 2017-04-29 16:18 +0000 [02234e920c] Richard Mudgett * rtp_engine.c: Fix deadlock potential copying RTP payload maps. There is a theoretical potential to deadlock in ast_rtp_codecs_payloads_copy() because it locks two different ast_rtp_codecs locks. It is theoretical because the callers of the function are either copying between a local ast_rtp_codecs struct and a RTP instance of the ast_rtp_codecs struct. Or they are copying between the caller and callee channel RTP instances before initiating the call to the callee. Neither of these situations could actually result in a deadlock because there cannot be another thread involved at the time. * Add deadlock avoidance code to ast_rtp_codecs_payloads_copy() since it locks two ast_rtp_codecs locks to perform a copy. This only affects v13 since this deadlock avoidance code is already in newer branches. Change-Id: I1aa0b168f94049bd59bbd74a85bd1e78718f09e5 2017-04-29 16:11 +0000 [9d5df48968] Richard Mudgett * res_pjsip_t38.c: Fix deadlock in T.38 framehook. A deadlock can happen between a channel lock and a pjsip session media container lock. One thread is processing a reINVITE's SDP and walking through the session's media container when it waits for the channel lock to put the determined format capabilities onto the channel. The other thread is writing a frame to the channel and processing the T.38 frame hook. The T.38 frame hook then waits for the pjsip session's media container lock. The two threads are now deadlocked. * Made the T.38 frame hook release the channel lock before searching the session's media container. This fix has been done to several other frame hooks to fix deadlocks. ASTERISK-26974 #close Change-Id: Ie984a76ce00bef6ec9aa239010e51e8dd74c8186 2017-04-28 10:56 +0000 [623832b94e] George Joseph * res_pjsip_outbound_authenticator_digest: Add context to log messages There was no context info in this module's log messages so it was impossible to toubleshoot. Added endpoint or host to all messages and added the realms in the challenge for the "No auth credentials for any realm" message. Change-Id: Ifeed2786f35fbea7d141237ae15625e472acff9b 2017-04-27 08:02 +0000 [c5b9ed20fd] George Joseph * res_pjsip_session: Add cleanup to ast_sip_session_terminate If you use ast_request to create a PJSIP channel but then hang it up without causing a transaction to be sent, the session will never be destroyed. This is due ot the fact that it's pjproject that triggers the session cleanup when the transaction ends. app_chanisavail was doing this to get more granular channel state and it's also possible for this to happen via ARI. * ast_sip_session_terminate was modified to explicitly call the cleanup tasks and unreference session if the invite state is NULL AND invite_tsx is NULL (meaning we never sent a transaction). * chan_pjsip/hangup was modified to bump session before it calls ast_sip_session_terminate to insure that session stays valid while it does its own cleanup. * Added test events to session_destructor for a future testsuite test. ASTERISK-26908 #close Reported-by: Richard Mudgett Change-Id: I52daf6f757184e5544c261f64f6fe9602c4680a9 2017-04-26 14:20 +0000 [c853cfdc7c] Kevin Harwell * res_pjsip/res_pjsip_callerid: NULL check on caller id name string It's possible for a name in a party id structure to be marked as valid, but the name string itself be NULL (for instance this is possible to do by using the dialplan CALLERID function). There were a couple of places where the name was validated, but the string itself was not checked before passing it to functions like 'strlen'. This of course caused a crashed. This patch adds in a NULL check before attempting to pass it into a function that is not NULL tolerant. ASTERISK-25823 #close Change-Id: Iaa6ffe9d92f598fe9e3c8ae373fadbe3dfbf1d4a 2017-04-25 11:43 +0000 [4d3b4fbf22] Kevin Harwell * vector: defaults and indexes Added an pre-defined integer vector declaration. This makes integer vectors easier to declare and pass around. Also, added the ability to default a vector up to a given size with a default value. Lastly, added functionality that returns the "nth" index of a matching value. Also, updated a unit test to test these changes. Change-Id: Iaf4b51b2540eda57cb43f67aa59cf1d96cdbcaa5 2017-04-20 02:13 +0000 [566ad7c35d] Jean Aunis * chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK Some equipments may send a re-INVITE containing an SDP in the final ACK request. If this happens in the context of direct media, the remote end should be updated with a re-INVITE. This patch queues an "update RTP peer" frame to trigger the re-INVITE, instead of the "source change" frame wich was used previously. ASTERISK-26951 Change-Id: I3644d2025f20e086ea9f8f62b486172c52b5b2e6 2017-04-26 08:45 +0000 [001dc2ade6] George Joseph * pjproject_bundled: Add --disable-libwebrtc to configure Without the disable, pjproject tries to build it's internal webrtc implementation which requires sse2. This fails on platforms without sse2. ASTERISK-26930 #close Reported-by: abelbeck Change-Id: I07231f9160c35cfa42b194d3aad4e7d51fd9a410 2017-04-26 05:38 +0000 [ae696132a2] Joshua Colp * frame: Better handle interpolated frames. Interpolated frames are frames which contain a number of samples but have no actual data. Audiohooks did not handle this case when translating an incoming frame into signed linear. It assumed that a frame would always contain media when it may not. If this occurs audiohooks will now immediately return and not act on the frame. As well for users of ast_trans_frameout the function has been changed to be a bit more sane and ensure that the data pointer on a frame is set to NULL if no data is actually on the frame. This allows the various spots in Asterisk that check for an interpolated frame based on the presence of a data pointer to work as expected. ASTERISK-26926 Change-Id: I7fa22f631fa28d540722ed789ce28e84c7f8662b 2017-04-21 12:04 +0000 [1b50df78d0] Sean Bright * cleanup: Fix fread() and fwrite() error handling Cleaned up some of the incorrect uses of fread() and fwrite(), mostly in the format modules. Neither of these functions will ever return a value less than 0, which we were checking for in some cases. I've introduced a fair amount of duplication in the format modules, but I plan to change how format modules work internally in a subsequent patch set, so this is simply a stop-gap. Change-Id: I8ca1cd47c20b2c0b72088bd13b9046f6977aa872 2017-04-25 07:52 +0000 [c09b9dba90] Joshua Colp * alembic: Add table for 'resource_list' PJSIP RLS type. This change adds an Alembic migration which adds a ps_resource_list table that can contain resource_list RLS configuration objects. ASTERISK-26929 Change-Id: I7c888fafc67b3e87012de974f71ca7a5b8b1ec05 2017-04-24 13:16 +0000 [1b88a3a4cf] Sean Bright * res_hep: Add additional config initialization and validation * Initialize hepv3_runtime_data.sockfd to -1 so that our ao2 destructor does not close fd 0 * Add logging output when the required option - capture_address - is not specified. * Remove a no longer relevant #define and correct related documentation * Pass appropriate flags to aco_option_register so that capture_address cannot be the empty string. ASTERISK-26953 #close Change-Id: Ief08441bc6596d6f1718fa810e54a5048124f076 2017-04-17 19:06 +0000 [cea3742c54] Sean Bright * core: Use eventfd for alert pipes on Linux when possible The primary win of switching to eventfd when possible is that it only uses a single file descriptor while pipe() will use two. This means for each bridge channel we're reducing the number of required file descriptors by 1, and - if you're using timerfd - we also now have 1 less file descriptor per Asterisk channel. The API is not ideal (passing int arrays), but this is the cleanest approach I could come up with to maintain API/ABI. I've also removed what I believe to be an erroneous code block that checked the non-blocking flag on the pipe ends for each read. If the file descriptor is 'losing' its non-blocking mode, it is because of a bug somewhere else in our code. In my testing I haven't seen any measurable difference in performance. Change-Id: Iff0fb1573e7f7a187d5211ddc60aa8f3da3edb1d 2017-04-21 12:33 +0000 [1213ac1ac5] Richard Mudgett * res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions. If ICE is enabled and a STUN server does not respond then we will block until we give up on the STUN response. This will take nine seconds. In the mean time the peer that sent the INVITE will send retransmissions. * Restructure res_pjsip_session.c:new_invite() to send a 100 Trying out earlier to prevent these retransmissions. ASTERISK-26890 Change-Id: Ie3fc611e53a0eff6586ad55e4aacad81cf6319a8 2017-04-21 12:07 +0000 [80fd7fd908] Richard Mudgett * res_pjsip_session.c: Restructure ast_sip_session_alloc() * Restructure ast_sip_session_alloc() to need less cleanup on off nominal error paths. * Made ast_sip_session_alloc() and ast_sip_session_create_outgoing() avoid unnecessary ref manipulation to return a session. This is faster than calling a function. That function may do logging of the ref changes with REF_DEBUG enabled. Change-Id: I2a0affc4be51013d3f0485782c96b8fee3ddb00a 2017-04-19 15:08 +0000 [98e38daf82] Sean Bright * pbx: Use same thread if AST_OUTGOING_WAIT_COMPLETE specified Both ast_pbx_outgoing_app() and ast_pbx_outgoing_exten() cause the core to spawn a new thread to perform the dial. When AST_OUTGOING_WAIT_COMPLETE is passed to these functions, the calling thread will be blocked until the newly created channel has been hung up. After this patch, we run the dial on the current thread rather than spawning a new one. The only in-tree code that passes AST_OUTGOING_WAIT_COMPLETE is pbx_spool, so you should see reduced thread usage if you are using .call files. Change-Id: I512735d243f0a9da2bcc128f7a96dece71f2d913 2017-04-19 13:23 +0000 [55f452884f] Richard Mudgett * res_rtp_asterisk.c: Fix crash in RTCP DTLS operation. Occasionally a crash happens when processing the RTCP DTLS timeout handler. The RTCP DTLS timeout timer could be left running if we have not completed the DTLS handshake before we place the call on hold or we attempt direct media. * Made ast_rtp_prop_set() stop the RTCP DTLS timer when disabling RTCP. * Made some sanity tweaks to ast_rtp_prop_set() when switching from standard RTCP mode to RTCP multiplexed mode. ASTERISK-26692 #close Change-Id: If6c64c79129961acfa4b3d63a864e8f6b664acc0 2017-03-22 16:05 +0000 [f856cfbb51] Richard Mudgett * rtp_engine/res_rtp_asterisk: Fix RTP struct reentrancy crashes. The struct ast_rtp_instance has historically been indirectly protected from reentrancy issues by the channel lock because early channel drivers held the lock for really long times. Holding the channel lock for such a long time has caused many deadlock problems in the past. Along comes chan_pjsip/res_pjsip which doesn't necessarily hold the channel lock because sometimes there may not be an associated channel created yet or the channel pointer isn't available. In the case of ASTERISK-26835 a pjsip serializer thread was processing a message's SDP body while another thread was reading a RTP packet from the socket. Both threads wound up changing the rtp->rtcp->local_addr_str string and interfering with each other. The classic reentrancy problem resulted in a crash. In the case of ASTERISK-26853 a pjsip serializer thread was processing a message's SDP body while another thread was reading a RTP packet from the socket. Both threads wound up processing ICE candidates in PJPROJECT and interfering with each other. The classic reentrancy problem resulted in a crash. * rtp_engine.c: Make the ast_rtp_instance_xxx() calls lock the RTP instance struct. * rtp_engine.c: Make ICE and DTLS wrapper functions to lock the RTP instance struct for the API call. * res_rtp_asterisk.c: Lock the RTP instance to prevent a reentrancy problem with rtp->rtcp->local_addr_str in the scheduler thread running ast_rtcp_write(). * res_rtp_asterisk.c: Avoid deadlock when local RTP bridging in bridge_p2p_rtp_write() because there are two RTP instance structs involved. * res_rtp_asterisk.c: Avoid deadlock when trying to stop scheduler callbacks. We cannot hold the instance lock when trying to stop a scheduler callback. * res_rtp_asterisk.c: Remove the lock in struct dtls_details and use the struct ast_rtp_instance ao2 object lock instead. The lock was used to synchronize two threads to prevent a race condition between starting and stopping a timeout timer. The race condition is no longer present between dtls_perform_handshake() and __rtp_recvfrom() because the instance lock prevents these functions from overlapping each other with regards to the timeout timer. * res_rtp_asterisk.c: Remove the lock in struct ast_rtp and use the struct ast_rtp_instance ao2 object lock instead. The lock was used to synchronize two threads using a condition signal to know when TURN negotiations complete. * res_rtp_asterisk.c: Avoid deadlock when trying to stop the TURN ioqueue_worker_thread(). We cannot hold the instance lock when trying to create or shut down the worker thread without a risk of deadlock. This patch exposed a race condition between a PJSIP serializer thread setting up an ICE session in ice_create() and another thread reading RTP packets. * res_rtp_asterisk.c:ice_create(): Set the new rtp->ice pointer after we have re-locked the RTP instance to prevent the other thread from trying to process ICE packets on an incomplete ICE session setup. A similar race condition is between a PJSIP serializer thread resetting up an ICE session in ice_create() and the timer_worker_thread() processing the completion of the previous ICE session. * res_rtp_asterisk.c:ast_rtp_on_ice_complete(): Protect against an uninitialized/null remote_address after calling update_address_with_ice_candidate(). * res_rtp_asterisk.c: Eliminate the chance of ice_reset_session() destroying and setting the rtp->ice pointer to NULL while other threads are using it by adding an ao2 wrapper around the PJPROJECT ice pointer. Now when we have to unlock the RTP instance object to call a PJPROJECT ICE function we will hold a ref to the wrapper. Also added some rtp->ice NULL checks after we relock the RTP instance and have to do something with the ICE structure. ASTERISK-26835 #close ASTERISK-26853 #close Change-Id: I780b39ec935dcefcce880d50c1a7261744f1d1b4 2017-04-19 08:39 +0000 [dafcd97a77] Sean Bright * build: Update config.guess and config.sub Change-Id: Id078a1df07a771808775e1053cdfe1d99c8fb172 2017-04-14 13:52 +0000 [9bbfa6fda1] Sean Bright * format_wav: Read 16khz wav samples properly When opening a PCM wave file for reading, we aren't tracking the frequency of the opened file, so we treat 16khz files as 8khz and do half reads. This patch also cleans up some of the data types and an unnecessarily complex `if` expression. ASTERISK-26613 #close Reported by: Vitaly K Change-Id: I05f8b263058dc573ea8ffe0c62e7964506e11815 2017-04-16 19:54 +0000 [4ccaffe644] George Joseph * make ari-stubs so doc periodic jobs can run The periodic doc job does a make ari-stubs and checks that there are no changes before generating the docs. Since I changed the mustache template (and the generated code directly) recently and forgot to regenerate the stubs, the doc job thinks they're out of date. Change-Id: Ibd4bc649556615ff714d44534c45b6c2f6aa449d 2017-04-14 12:51 +0000 [90c630aaa1] Sean Bright * format_ogg_vorbis: Clear ogg/vorbis data structures on close On filestream close, we need to clear out the ogg & vorbis data structures to prevent a memory leak. ASTERISK-26169 #close Reported by: Ivan Myalkin Change-Id: Iee94c5a5d5bdafbf8b181c5c064d15d90ace8274 2017-04-14 17:31 +0000 [9084c85cb1] Richard Mudgett * Revert "bridging: Ensure successful T.38 negotation" This reverts commit 3e7c396a51b240088c475dd53e7bac9869376129. Change-Id: I61d49d563babff788bb557345729b200d116bd88 2017-04-14 16:50 +0000 [357d1fbdcc] Sean Bright * res_stun_monitor: Don't fail to load if DNS resolution fails res_stun_monitor will fail to load if DNS resolution of the STUN server fails. Instead, we continue without the STUN server being resolved and we will re-attempt the resolution on the STUN refresh interval. ASTERISK-21856 #close Reported by: Jeremy Kister Change-Id: I6334c54a1cc798f8a836b4b47948e0bb4ef59254 2017-04-14 14:36 +0000 [ac15ebc379] Sean Bright * format_pcm: Track actual header size of .au files Sun's Au file format has a minimum data offset 24 bytes, but this offset is encoded in each .au file. Instead of assuming the minimum, read the actual value and store it for later use. ASTERISK-20984 #close Reported by: Roman S. Patches: asterisk-1.8.20.0-au-clicks-2.diff (license #6474) patch uploaded by Roman S. Change-Id: I524022fb19ff2fd5af2cc2d669d27a780ab2057c 2017-04-11 11:07 +0000 [f882ca2572] George Joseph * modules: change module LOAD_FAILUREs to LOAD_DECLINES In all non-pbx modules, AST_MODULE_LOAD_FAILURE has been changed to AST_MODULE_LOAD_DECLINE. This prevents asterisk from exiting if a module can't be loaded. If the user wishes to retain the FAILURE behavior for a specific module, they can use the "require" or "preload-require" keyword in modules.conf. A new API was added to logger: ast_is_logger_initialized(). This allows asterisk.c/check_init() to print to the error log once the logger subsystem is ready instead of just to stdout. If something does fail before the logger is initialized, we now print to stderr instead of stdout. Change-Id: I5f4b50623d9b5a6cb7c5624a8c5c1274c13b2b25 2017-04-07 16:14 +0000 [cd80af508e] Richard Mudgett * res_rtp_asterisk.c: Add stun_blacklist option Added the stun_blacklist option to rtp.conf. Some multihomed servers have IP interfaces that cannot reach the STUN server specified by stunaddr. Blacklist those interface subnets from trying to send a STUN packet to find the external IP address. Attempting to send the STUN packet needlessly delays processing incoming and outgoing SIP INVITEs because we will wait for a response that can never come until we give up on the response. Multiple subnets may be listed. ASTERISK-26890 #close Change-Id: I3ff4f729e787f00c3e6e670fe6435acce38be342 2017-04-06 17:31 +0000 [f8219a2e12] Richard Mudgett * stun.c: Fix ast_stun_request() erratic timeout. If ast_stun_request() receives packets other than a STUN response then we could conceivably never exit if we continue to receive packets with less than three seconds between them. * Fix poll timeout to keep track of the time when we sent the STUN request. We will now send a STUN request every three seconds regardless of how many other packets we receive while waiting for a response until we have completed three STUN request transmission cycles. Change-Id: Ib606cb08585e06eb50877f67b8d3bd385a85c266 2017-04-06 18:30 +0000 [19b82a8644] Richard Mudgett * sorcery.c: Speed up ast_sorcery_retrieve_by_id() Return early if ast_sorcery_retrieve_by_id() is not passed an id to find. Also eliminated the RAII_VAR() usage in the function. Change-Id: I871dbe162a301b5ced8b4393cec27180c7c6b218 2017-04-10 11:30 +0000 [aecf19e7d2] Richard Mudgett * res_pjsip: Fix pointer use after unref. Change-Id: I4b6e1b0070563eeaee223cb58326f1b962ed5bc1 2017-04-06 18:18 +0000 [304f652cda] Richard Mudgett * res_pjsip_sdp_rtp.c: Don't use deprecated transport struct member. * create_rtp(): Eliminate use of deprecated transport struct member. That member and several others in the transport structure were deprecated because of an infinite loop created when using realtime configuration. See 2451d4e4550336197ee2e482750cc53f30afa352 ASTERISK-26851 Change-Id: I0533aa13c9ce3c6cc394e0fd2b5bf1cd1b2ef3bc 2017-04-10 17:45 +0000 [bb8cd2add7] Richard Mudgett * tcptls.c: Cleanup TCP/TLS listener thread on abnormal exit. Temporarily running out of file descriptors should not terminate the listener thread. Otherwise, when there becomes more file descriptors available, nothing is listening. * Added EMFILE exception to abnormal thread exit. * Added an abnormal TCP/TLS listener exit error message. * Closed the TCP/TLS listener socket on abnormal exit so Asterisk does not appear dead if something tries to connect to the socket. ASTERISK-26903 #close Change-Id: I10f2f784065136277f271159f0925927194581b5 2017-04-07 08:58 +0000 [d8967ff2c0] Torrey Searle * strings.h: Avoid overflows in the string hash functions On 2's compliment machines abs(INT_MIN) behavior is undefined and results in a negative value still being returnd. This results in negative hash codes that can result in crashes. ASTERISK-26528 #close Change-Id: Idff550145ca2133792a61a2e212b4a3e82c6517b 2017-04-08 03:05 +0000 [bbbd262ec0] Walter Doekes * samples: Undo removal of include from canonicalize-app-names commit. This include was accidentally removed in changeset Ia79aea64de89531362e993e34230c2044a70aa93. My bad. Change-Id: I1d716c7f9590b4e97909fb8bca1f2ed9bd0e4082 2017-04-07 08:35 +0000 [b3f4a6365e] Joshua Colp * pjsip: Add Alembic for PUBLISH support. This change adds database tables for the PUBLISH support so it can be configured using realtime. A minor fix to the res_pjsip_publish_asterisk module was done so that it read the sorcery configuration from the correct section. Finally the sample configuration files have been updated. ASTERISK-26928 Change-Id: I81991ae5c75af98d247f7eacd1c0b0a763675952 2017-04-07 08:06 +0000 [e0e5a337fd] Alexander Traud * pjproject_bundled: Crash on pj_ssl_get_info() while ioqueue_on_read_complete(). When the Asterisk channel driver res_pjsip offers SIP-over-TLS, sometimes, not reproducible, Asterisk crashed in pj_ssl_sock_get_info() because a NULL pointer was read. This change avoids this crash. ASTERISK-26927 #close Change-Id: I24a6011b44d1426d159742ff4421cf806a52938b 2017-04-05 06:41 +0000 [3e7c396a51] Torrey Searle * bridging: Ensure successful T.38 negotation When a T.38 happens immediatly after call establishment, the control frame can be lost because the other leg is not yet in the bridge. This patch detects this case an makes sure T.38 negotation happens when the 2nd leg is being made compatible with the negotating first leg ASTERISK-26923 #close Change-Id: If334125ee61ed63550d242fc9efe7987e37e1d94 2017-04-04 16:20 +0000 [4e6e069491] George Joseph * pjproject_bundled: Add 3 upstream patches 0035-r5572-svn-backport-dialog-transaction-deadlock.patch 0036-r5573-svn-backport-ua-pjsua-transaction-deadlock.patch 0037-r5576-svn-backport-session-timer-crash.patch Also removed the progress bar from wget download to stdout. ASTERISK-26905 #close Reported-by: Ross Beer Change-Id: I268fb3cf71a3bb24283ff0d24bd8b03239d81256 2017-04-05 14:50 +0000 [d2a33cdedc] George Joseph * sample_config: Add samples for pubsub to pjsip.conf.sample Added: * outbound-publish * resource_list * inbound-publication * asterisk-publication Change-Id: I65043a896c35483f30a92d30b5b118359af7ba5a 2017-04-05 09:10 +0000 [ab9d2fc86d] Walter Doekes * samples: Canonicalize app names in extensions.conf.sample. This takes care of warnings by ossobv/asterisklint. Change-Id: Ia79aea64de89531362e993e34230c2044a70aa93 2017-04-03 15:38 +0000 [6906765381] Richard Mudgett * res_pjsip_sdp_rtp.c: Don't alter global addr variable. * create_rtp(): Fix unexpected alteration of global address_rtp if a transport is bound to an address. * create_rtp(): Fix use of uninitialized memory if the endpoint RTP media address is invalid or the transport has an invalid address. ASTERISK-26851 Change-Id: Icde42e65164a88913cb5c2601b285eebcff397b7 2017-03-27 09:03 +0000 [68bde0f07d] Corey Farrell * CDR: Protect from data overflow in ast_cdr_setuserfield. ast_cdr_setuserfield wrote to a fixed length field using strcpy. This could result in a buffer overrun when called from chan_sip or func_cdr. This patch adds a maximum bytes written to the field by using ast_copy_string instead. ASTERISK-26897 #close patches: 0001-CDR-Protect-from-data-overflow-in-ast_cdr_setuserfie.patch submitted by Corey Farrell (license #5909) Change-Id: Ib23ca77e9b9e2803a450e1206af45df2d2fdf65c 2017-03-25 19:01 +0000 [70e5a2655d] Daniel Journo * Unused realtime MOH classes not purged on 'moh reload' Purge Realtime MOH classes on 'moh reload' even when musiconhold.conf hasn't changed. ASTERISK-25974 #close Change-Id: I42c78ea76528473a656f204595956c9eedcf3246 2017-04-03 13:56 +0000 [27b556778d] Richard Mudgett * res_pjsip: Fix transport ref leak. We were leaking a transport ref in multihomed_on_rx_message() which resulted in the FRACK about excessive ref counts. ASTERISK-26916 #close Change-Id: I7a96658a9614a060565bb9ad51cb1c9c11ee145f 2017-04-03 02:30 +0000 [94bd529f9e] Alexander Traud * chan_sip: Session Timers required but refused wrongly. SIP user-agents indicate which protocol extensions are allowed in headers like Supported and Required. Such protocol extensions are Session Timers (RFC 4028) for example. Session Timers are supported since Mantis-10665. Since ASTERISK-21721, not only the first but multiple Supported/Required headers in a message are parsed. In that change, an existing variable was re-used within a newly added do-loop. Currently, at the end of that loop, that variable is an empty string always. Previously, that variable was used within log output. However, the log output was not changed. ASTERISK-26915 #close Change-Id: I09315f31b4d78fb214bb2a9fb6c0f5e143eae990 2017-03-31 16:31 +0000 [bca9685d39] Joshua Colp * res_pjsip_session: Allow BYE to be sent on disconnected session. It is perfectly acceptable for a BYE to be sent on a disconnected session. This occurs when we respond to a challenge to the BYE for authentication credentials. ASTERISK-26363 Change-Id: I6ef0ddece812fea6665a1dd2549ef44fb9d90045 2017-03-30 18:28 +0000 [c701550803] Corey Farrell * Forward declare 'struct ast_json' in asterisk.h The ast_json structure is used in many Asterisk headers and is often the only part of json.h used. This adds a forward declaration to asterisk.h and removes the include of json.h from many headers. The declaration has been left in endpoints.h and stasis.h to avoid problems with source files that use ast_json functions without directly including json.h. ari.h continues to include json.h as it uses enum ast_json_encoding_format. Change-Id: Id766aabce6bed56626d27e8d29f559b5e687b769 2017-03-30 08:11 +0000 [754e99d517] Sean Bright * cdr_pgsql: Fix buffer overflow calling libpq Implement the same buffer size checking done in cel_pgsql. ASTERISK-26896 #close Reported by: twisted Change-Id: Iaacfa1f1de7cb1e9414d121850d2d8c2888f3f48 2017-03-28 13:01 +0000 [7954b39a50] Walter Doekes * build: Fix deb build issues with fakeroot If DESTDIR is set, don't call ldconfig. Assume that DESTDIR is used to create a binary archive. The ldconfig call should be delegated to the archive postinst script. This fixes the case where fakeroot wraps 'make install' causing $EUID to be 0 even though it doesn't have permission to call ldconfig. The previous logic in configure.ac to detect and correct libdir has been removed as it was not completely accurate. CentOS 64-bit users should again specifiy --libdir=/usr/lib64 when configuring to prevent install to /usr/lib. Updated Makefile:check-old-libdir to check for orphans in lib64 when installing to lib as well as orphans in lib when installing to lib64. Updated Makefile and main/Makefile uninstall targets to remove the orphans using the new logic. ASTERISK-26705 Change-Id: I51739d4a03e60bff38be719b8d2ead0007afdd51 2017-03-29 10:11 +0000 [c9648f4690] Sean Bright * astobj2: Prevent potential deadlocks with ao2_global_obj_release The ao2_global_obj_release() function holds an exclusive lock on the global object while it is being dereferenced. Any destructors that run during this time that call ao2_global_obj_ref() will deadlock because a read lock is required. Instead, we make the global object inaccessible inside of the write lock and only dereference it once we have released the lock. This allows the affected destructors to fail gracefully. While this doesn't completely solve the referenced issue (the error message about not being able to create an IQ continues to be shown) it does solve the backtrace spew that accompanied it. ASTERISK-21009 #close Reported by: Marcello Ceschia Change-Id: Idf40ae136b5070dba22cb576ea8414fbc9939385 2017-03-30 11:57 +0000 [1d1309b1ed] Joshua Colp * Revert "Update for 13.15.0-rc1" This reverts commit 552cf009c0939c8b6597708135412bdc596df4bb. Change-Id: Ie345bea481261b761c44079e9472622040fda302 2017-03-30 10:18 +0000 [3c23ebdef4] Corey Farrell * CEL: Remove header declarations of non-existant functions. ast_cel_alloc and ast_cel_destroy do not exist in code, remove them from the headers. Change-Id: I99ce848e2e109e7d61771559f559b9e57973e45c 2017-03-29 08:27 +0000 [ef19db9261] Alexander Traud * srtp: Allow zero as tag value for a sRTP Crypto Suite. ASTERISK-25490 #close Change-Id: I1c5fc0942c33c96d62b24203aad0f1e1a1a0131f 2017-03-28 13:10 +0000 [a827892ff7] George Joseph * res_pjsip_config_wizard: Add 2 new parameters to help with proxy config Two new parameters have been added to the pjsip config wizard. * Setting 'sends_line_with_registrations' to true will cause the wizard to skip the creation of an identify object to match incoming request to the endpoint and instead add the line and endpoint parameters to the outbound registration object. * Setting 'outbound_proxy' is a shortcut for adding individual endpoint/outbound_proxy, aor/outbound_proxy and registration/outbound_proxy parameters. Change-Id: I678e5f80765734c056620528a6d40d82736ceeb0 2017-03-28 09:29 +0000 [864dda07f3] Sean Bright * alembic: Turn off execute bit on non-executable python scripts Change-Id: I744c986da4a38aeff8c00837eb89de7841fbc86c 2017-03-27 12:37 +0000 [a9529cbb21] Richard Mudgett * Add DTLS sanity check. Change-Id: Ib32612cf6c7ce9213a11b9cba82f630f8cd3564b 2017-03-27 11:49 +0000 [bb68f57a03] Josh Roberson * cel_pgsql.c: Fix buffer overflow calling libpq PQEscapeStringConn() expects the buffer passed in to be an adequitely sized buffer to write out the escaped SQL value string into. It is possible, for large values (such as large values to Dial with a lot of devices) to have more than our 512+1 byte allocation and thus cause libpq to create a buffer overrun. glibc will nicely ABRT asterisk for you, citing a stack smash. Let's only allocate it to be as large as needed: If we have a value, then (strlen(value) * 2) + 1 (as recommended by libpq), and if we have none, just one byte to hold our null will do. ASTERISK-26896 #close Change-Id: If611c734292618ed68dde17816d09dd16667dea2 2017-03-24 07:43 +0000 [79a2c26c03] Sean Bright * core: Remove embedded module support This has not worked for some time and is no longer actively maintained. Change-Id: I5110b0db69c152761b58fa025cb0a53b0e544d99 2017-03-27 09:35 +0000 [2c28f7a922] Sean Bright * res_musiconhold: Document the 'format' option ASTERISK-26086 #close Reported by: Jens Bürger Change-Id: I6aab666c0bf01fd0c64d7a5bcb22fa7f5d41335e 2017-03-27 08:58 +0000 [61fd70c250] Sean Bright * res_musiconhold: Don't chdir() when scanning MoH files There doesn't appear to be any reason that we are chdir'ing in moh_scan_files, and in the event of an Asterisk crash, the core files may not get written because we have changed into a read-only directory. ASTERISK-23996 #close Reported by: Walter Doekes Change-Id: Iac806dce01b3335963fbd62d4b4da9a65c614354 2017-03-23 09:48 +0000 [73bb08fd6a] Sean Bright * res_xmpp: Use incremental backoff when a read error occurs If a read error occurs, we immediately attempt a reconnect without any delay. Instead, let's sleep and backoff up to 60 seconds before we try again. ASTERISK-24712 #close Reported by: Matthias Urlichs Change-Id: I6fe10ef4734837727437beab715e336777f13f48 2017-03-23 05:19 +0000 [55693383e2] Sean Bright * res_xmpp: Fix ref counting issue The only remaining reference to the endpoint is in the endpoints container, and because it is unlinked in ast_endpoint_shutdown, we don't have to explicitly cleanup the endpoint ourselves. Change-Id: I912a2692e52d3e2ed445b32d8ae3f9004bc2f2e8 2017-03-23 09:45 +0000 [1966265562] Sean Bright * res_xmpp: Try to provide useful errors messages from OpenSSL If any errors occur during the TLS connection setup, we currently dump a fairly generic error message. So instead we try to pull in something useful from OpenSSL to report instead. ASTERISK-24712 Reported by: Matthias Urlichs Change-Id: I288500991a9681f447d92913b11fedaf426087f4 2017-03-23 09:30 +0000 [03b99ae3d2] Sean Bright * res_xmpp: Correctly check return value of SSL_connect SSL_connect returns non-zero for both success and some error conditions so simply negating is inadequate. Change-Id: Ifbf882896e598703b6c615407fa456d3199f95b1 2017-03-24 11:29 +0000 [d9d2beba1c] Sean Bright * res_pjsip_sdp_rtp: Set hangup cause for RTP timeouts chan_sip sets the hangup cause code to AST_CAUSE_REQUESTED_CHAN_UNAVAIL (44) when a channel is hung up due to an RTP timeout. So do the same when it happens with PJSIP for parity. Change-Id: I3546ebbde6460c22a27c9da1bf321711b5961ab8 2017-03-23 15:33 +0000 [552cf009c0] Kevin Harwell * Update for 13.15.0-rc1 2017-03-23 14:03 +0000 [f1b34e6eb4] Kevin Harwell * AMI: Updated version Updated the AMI version for the following reason (see CHANGES for more details): The 'PJSIPShowEndpoint' command's response event of 'IdentifyDetail' now contains a new optional parameter, 'MatchHeader'. Change-Id: I9aeac4decc89f9b464b3f026e97c7ef1acc79242 2017-03-23 12:07 +0000 [e6aeeabddf] Kevin Harwell * pjproject_bundled: raise timeout value used when downloading After configuring Asterisk with '--with-pjproject-bundled' the configure/build process attempts to download pjproject from its download site. Currently, a timeout of 10 seconds is used that will stop the download process if pjproject has not been fully downloaded in that time. For some systems this was not enough time and the process was timing out too early. This patch raises the download timeout value to '60'. Also, this patch fixes another bug where the DOWNLOAD_TIMEOUT variable was not being properly exported due to a naming error. DOWNLOAD_MAX_TIMEOUT is now properly renamed to DOWNLOAD_TIMEOUT. ASTERISK-26814 #close Change-Id: Ia56e4e8a3d39db76bc8a1852b2cf07ec10b39842 2017-03-22 20:33 +0000 [0939a19cff] Sean Bright * res_xmpp: Correct implementation of JABBER_STATUS & JabberStatus The documentation for JABBER_STATUS (and the deprecated JabberStatus app) indicate that a return value of 7 indicates that the specified buddy was not in the roster. It also indicates that you can specify a "bare" JID (one without a resource). Unfortunately the actual behavior does not match the documented behavior. Assuming that our roster includes the buddy online and available "valid@example.org/Valid" and does *not* include the buddy "invalid@example.org", the JABBER_STATUS() function returns the following before this patch: +------------------------------+------------+--------------------------+ | Buddy | Status | Result | +------------------------------+------------+--------------------------+ | valid@example.org | Online | 7 (Not in roster) | | valid@example.org/Valid | Online | 1 (Online) | | valid@example.org/Invalid | N/A | 7 (Not in roster) | | invalid@example.org | N/A | Error logged, no return | | invalid@example.org/Valid | N/A | Error logged, no return | +------------------------------+------------+--------------------------+ And after this patch: +------------------------------+------------+--------------------------+ | Buddy | Status | Result | +------------------------------+------------+--------------------------+ | valid@example.org | Online | 1 (Online) | | valid@example.org/Valid | Online | 1 (Online) | | valid@example.org/Invalid | N/A | 6 (Offline) | | invalid@example.org | N/A | 7 (Not in roster) | | invalid@example.org/Valid | N/A | 7 (Not in roster) | +------------------------------+------------+--------------------------+ This brings the behavior in line with the documentation. ASTERISK-23510 #close Reported by: Anthony Critelli Change-Id: I9c3241035363ef4a6bdc21fabfd8ffcd9ec657bf 2017-03-22 17:32 +0000 [a487f6fb97] Sean Bright * res_xmpp: Don't crash when trying to send a message without a connection If we never establish a connection to our Jabber server, iksemel never sets up its internal transport pointer, so attempting to send a message dereferences a NULL pointer and causes a crash. ASTERISK-21855 #close Reported by: Jeremy Kister Change-Id: I204a568894e4a53ab929783ecc594a000f04d79c 2017-03-22 15:40 +0000 [90fb1fca41] Sean Bright * res_xmpp: Include client name in connection related error messages ASTERISK-25622 #close Reported by: Sean Darcy Change-Id: I8472cb7bfb58d411a3cfbd482da98cae2d94d1e9 2017-03-21 12:32 +0000 [e196190f11] Sebastian Gutierrez * cdr: Allow setting of user field from 'h' extension The CDR code previously did not allow the user field to be set from the 'h' extension in the dialplan. This change removes that limitation and allows it to be set. ASTERISK-26818 Change-Id: I0fed8a79b5e408bac4e30542b8f33a61c5ed9aa6 2017-03-14 16:45 +0000 [398e5ec16c] Richard Begg * res_pjsip_session: Enable RFC3578 overlap dialing support. Support for RFC3578 overlap dialling (i.e. 484 Response to partially matched destinations) as currently provided by chan_sip is missing from res_pjsip. This patch adds a new endpoint attribute (allow_overlap) [defaults to yes] which when set to yes enables 484 responses to partial destination matches rather than the current 404. ASTERISK-26864 Change-Id: Iea444da3ee7c7d4f1fde1d01d138a3d7b0fe40f6 2017-03-21 06:59 +0000 [218f618095] Sean Bright * res_hep: Capture actual transport type in use Rather than hard-coding UDP, allow consumers of the HEP API to specify which protocol is in use. Update the PJSIP provider to pass in the current protocol type. ASTERISK-26850 #close Change-Id: I54bbb0a001cfe4c6a87ad4b6f2014af233349978 2017-03-21 09:57 +0000 [1c8b81a2a4] Sean Bright * Revert "app_queue: Handle the caller being redirected out of a queue bridge" This reverts commit 163e9e53dc7d84dd42721e733b7706c8147bdd27. Change-Id: Ief28479c77a298879dfe2c56be7ee92dc465da4b 2017-03-21 08:26 +0000 [b3cc20799b] Sean Bright * res_pjsip_messaging: Check URI type before dereferencing We aren't validating that the URI we just parsed is a SIP/SIPS one before trying to access the user, host, and port members of a possibly uninitialized structure. Also update the MessageSend documentation to indicate what 'from' formats are accepted. ASTERISK-26484 #close Reported by: Vinod Dharashive Change-Id: I476b5cc5f18a7713d0ee945374f2a1c164857d30 2017-03-13 15:21 +0000 [91c97b5da5] Joshua Elson * pjsip: prevent memory corruption on creation of xml bodies ASTERISK-26776 #close Change-Id: I884b6f4e8233a355d0be687ec78d41bc0e4d3fd2 2017-03-20 16:27 +0000 [7f34c11b6a] Sean Bright * bridge_softmix: Ignore non-voice frames from translator Some codecs - codec_speex specifically - take voice frames and return other types of frames, like CNG. If we subsequently treat those as voice frames, we'll run into trouble when destroying the frame because of the requirement that each voice frame have an associated format. ASTERISK-26880 #close Reported by: Kirsty Tyerman Change-Id: I43f8450c48fb276ad8b99db8512be82949c1ca7c 2017-03-14 23:49 +0000 [d5b480afca] Aaron An * audiohook.c: Lost RTP packets lead to out-of-sync MixMonitor. Fixed a bug in function "ast_audiohook_write_frame" that checked the variable other_factory_samples and only flushed the factories, so they would be in sync, when other_factory_samples > 0. When there is not any rtp incoming the variable other_factory_samples will be 0, and although the result of "our_factory_ms - other_factory_ms" may be very large, this led to the record file not syncing. ASTERISK-26875 #close Reported-by: Aaron An Tested-by: Aaron An Change-Id: Ia4d890fb8fc1636a7188502bab35f555685aea22 2017-03-18 12:30 +0000 [38cebc73a3] Sean Bright * thread safety: Don't use getprotobyname() POSIX does not require getprotobyname() to be thread safe and some implementations use static memory which causes issues when multiple threads are used. Further, our usage of it today is just to ultimately get IPPROTO_TCP for calls to setsockopt(). So instead we just use IPPROTO_TCP directly. Change-Id: I2e14e58674808f7ce99b2f5e900d0f90d0d8da48 2017-03-19 13:26 +0000 [265455bc2d] Sean Bright * res_rtp_asterisk: Pass correct data length to ast_rtcp_interpret We are currently passing in the capacity of the read buffer instead of the number of bytes that we actually read off the wire. Change-Id: I60465049727d955c7f9a5e529e6f2aaff04cda36 2017-03-14 09:27 +0000 [76afb9e18a] Robert Mordec * app_queue: Member stuck as pending after forwarding previous call from queue Queue member will get stuck in pending_members if queue calls a device that is different from the one observed for state changes. This patch removes members from pending_members as a result of channel stasis events such as blind or attended transfers and hangup. ASTERISK-26862 #close Change-Id: I8bf6df487b9bb35726c08049ff25cdad5e357727 2017-02-22 23:26 +0000 [60b372a883] Richard Mudgett * CHANNEL(callid): Give dialplan access to the callid. * Added CHANNEL(callid) to retrieve the call identifier log tag associated with the channel. Dialplan now has access to the call log search key associated with the channel so it can be saved in case there is a problem with the call. ASTERISK-26878 Change-Id: I2c97ebd928b6f3c5bc80c5729e4d3c07f453049f 2017-03-16 08:42 +0000 [9a57b24e17] Sean Bright * app_queue: Fix locking behavior in stasis message handlers The queue_stasis_data structure contains various mutable fields that require appropriate locking. Specifically, the 'dying,' 'member_uniqueid,' and 'caller_uniqueid' fields need to be locked when read from or written to. Change-Id: I246b7dbff8447acc957a1299f6ad0ebd0fd39088 2017-03-07 19:28 +0000 [8721d0bf1b] Sean Bright * chan_sip: Add rtcp-mux support ASTERISK-26846 #close Change-Id: I541a1602ff55ab73684e9f8002edb9e0e745d639 2017-03-16 16:50 +0000 [792171ea9e] Richard Mudgett * app_confbridge: Fix ConfbridgeTalking AMI event description. Thanks to Chris Howard for pointing this out on the wiki. Change-Id: I18e56de09a70e736b5d04719d45ef29cf0636705 2017-03-16 16:37 +0000 [047fb7f11e] Richard Mudgett * res_pjsip_asterisk.c: Fix compile error if libsrtp is not installed. struct ast_rtcp does not define the dtls member if SRTP is not enabled. ASTERISK-26732 Change-Id: Id15ea212e04490e012f2cf4a56818b4dd948875e 2017-03-16 15:45 +0000 [a75f02c089] Richard Mudgett * res_pjsip_sdp_rtp.c: Fix cut-n-paste error We were inadvertenly referencing the cos_video option to determine if we should set the tos_audio and cos_audio value on the RTP instance. Change-Id: Ia7964f486801d39dc6f5dae570baff079e1595b0 2017-03-16 10:39 +0000 [776ffd7724] Matt Jordan * res/res_pjsip_session: Only check localnet if it is defined If local_net is not defined on a transport, transport_state->localnet will be NULL. ast_apply_ha will, be default, return AST_SENSE_ALLOW in this case, causing the external_media_address, if set, to be skipped. This patch causes us to only check if we are sending within a network if local_net is defined. ASTERISK-26879 #close Change-Id: Ib661c31a954cabc9c99f1f25c9c9a5c5b82cbbfb 2017-03-14 16:22 +0000 [139bc3495f] Richard Begg * res_pjsip_sdp_rtp: RTP instance does not use same IP as explicit transport Currently a wildcard address is used for the local RTP socket, which will not always result in the same address as used by the SIP socket (e.g. if explicit transport addresses are configured). Use the transport's host address when binding new local RTP sockets if available. ASTERISK-26851 Change-Id: I098c29c9d1f79a4f970d72ba894874ac75954f1a 2017-03-16 09:07 +0000 [7ea7797e12] Joshua Colp * res_rtp_asterisk: Fix crash when RTCP is not present when DTLS is stopped. This change removes an assumption that when DTLS is stopped an RTCP session will be present on the RTP session. This is not always the case. ASTERISK-26732 Change-Id: Ib9f7c09ce0b005efe362dbcc8795202b18f94611 2017-03-07 08:33 +0000 [9b756662a8] George Joseph * res_pjsip: Symmetric transports A new transport parameter 'symmetric_transport' has been added. When a request from a dynamic contact comes in on a transport with this option set to 'yes', the transport name will be saved and used for subsequent outgoing requests like OPTIONS, NOTIFY and INVITE. It's saved as a contact uri parameter named 'x-ast-txp' and will display with the contact uri in CLI, AMI, and ARI output. On the outgoing request, if a transport wasn't explicitly set on the endpoint AND the request URI is not a hostname, the saved transport will be used and the 'x-ast-txp' parameter stripped from the outgoing packet. * config_transport was modified to accept and store the new parameter. * config_transport/transport_apply was updated to store the transport name in the pjsip_transport->info field using the pjsip_transport->pool on UDP transports. * A 'multihomed_on_rx_message' function was added to pjsip_message_ip_updater that, for incoming requests, retrieves the transport name from pjsip_transport->info and retrieves the transport. If transport->symmetric_transport is set, an 'x-ast-txp' uri parameter containing the transport name is added to the incoming Contact header. * An 'ast_sip_get_transport_name' function was added to res_pjsip. It takes an ast_sip_endpoint and a pjsip_sip_uri and returns a transport name if endpoint->transport is set or if there's an 'x-ast-txp' parameter on the uri and the uri host is an ipv4 or ipv6 address. Otherwise it returns NULL. * An 'ast_sip_dlg_set_transport' function was added to res_pjsip which takes an ast_sip_endpoint, a pjsip_dialog, and an optional pjsip_tpselector. It calls ast_sip_get_transport_name() and if a non-NULL is returned, sets the selector and sets the transport on the dialog. If a selector was passed in, it's updated. * res_pjsip/ast_sip_create_dialog_uac and ast_sip_create_dialog_uas were modified to call ast_sip_dlg_set_transport() instead of their original logic. * res_pjsip/create_out_of_dialog_request was modified to call ast_sip_get_transport_name() and pjsip_tx_data_set_transport() instead of its original logic. * Existing transport logic was removed from endpt_send_request since that can only be called after a create_out_of_dialog_request. * res_pjsip/ast_sip_create_rdata was converted to a wrapper around a new 'ast_sip_create_rdata_with_contact' function which allows a contact_uri to be specified in addition to the existing parameters. (See below) * res_pjsip_pubsub/internal_pjsip_evsub_send_request was eliminated since all it did was transport selection and that is now done in ast_sip_create_dialog_uac and ast_sip_create_dialog_uas. * 'contact_uri' was added to subscription_persistence. This was necessary because although the parsed rdata contact header has the x-ast-txp parameter added (if appropriate), subscription_persistence_update stores the raw packet which doesn't have it. subscription_persistence_recreate was then updated to call ast_sip_create_rdata_with_contact with the persisted contact_uri so the recreated subscription has the correct transport info to send the NOTIFYs. * res_pjsip_session/internal_pjsip_inv_send_msg was eliminated since all it did was transport selection and that is now done in ast_sip_create_dialog_uac. * pjsip_message_ip_updater/multihomed_on_tx_message was updated to remove all traces of the x-ast-txp parameter from the outgoing headers. NOTE: This change does NOT modify the behavior of permanent contacts specified on an aor. To do so would require that the permanent contact's contact uri be updated with the x-ast-txp parameter and the aor sorcery object updated. If we need to persue this, we need to think about cloning permanent contacts into the same store as the dynamic ones on an aor load so they can be updated without disturbing the originally configured value. You CAN add the x-ast-txp parameter to a permanent contact's uri but it would be much simpler to just set endpoint->transport. Change-Id: I4ee1f51473da32ca54b877cd158523efcef9655f 2017-03-15 13:24 +0000 [adad6020be] Richard Mudgett * autochan/mixmonitor/chanspy: Fix unsafe channel locking and references. Dereferencing struct ast_autochan.chan without first calling ast_autochan_channel_lock() is unsafe because the pointer could change at any time due to a masquerade. Unfortunately, ast_autochan_channel_lock() itself uses struct ast_autochan.chan unsafely and can result in a deadlock if the original channel happens to get destroyed after a masquerade in addition to the pointer getting changed. The problem is more likely to happen with v11 and earlier because masquerades are used to optimize out local channels on those versions. However, it could still happen on newer versions if the channel is executing a dialplan application when the channel is transferred or redirected. In this situation a masquerade still must be used. * Added a lock to struct ast_autochan to safely be able to use ast_autochan.chan while trying to get the channel lock in ast_autochan_channel_lock(). The locking order is the channel lock then the autochan lock. Locking in the other direction requires deadlock avoidance. * Fix unsafe ast_autochan.chan usages in app_mixmonitor.c. * Fix unsafe ast_autochan.chan usages in app_chanspy.c. * app_chanspy.c: Removed unused autochan parameter from next_channel(). ASTERISK-26867 Change-Id: Id29dd22bc0f369b44e23ca423d2f3657187cc592 2017-03-07 14:13 +0000 [7bc69753bc] Mark Michelson * Add rtcp-mux support This commit adds support for RFC 5761: Multiplexing RTP Data and Control Packets on a Single Port. Specifically, it enables the feature when using chan_pjsip. A new option, "rtcp_mux" has been added to endpoint configuration in pjsip.conf. If set, then Asterisk will attempt to use rtcp-mux with whatever it communicates with. Asterisk follows the rules set forth in RFC 5761 with regards to falling back to standard RTCP behavior if the far end does not indicate support for rtcp-mux. The lion's share of the changes in this commit are in res_rtp_asterisk.c. This is because it was pretty much hard wired to have an RTP and an RTCP transport. The strategy used here is that when rtcp-mux is enabled, the current RTCP transport and its trappings (such as DTLS SSL session) are freed, and the RTCP session instead just mooches off the RTP session. This leads to a lot of specialized if statements throughout. ASTERISK-26732 #close Reported by Dan Jenkins Change-Id: If46a93ba1282418d2803e3fd7869374da8b77ab5 2017-03-09 11:05 +0000 [163e9e53dc] Sean Bright * app_queue: Handle the caller being redirected out of a queue bridge A caller can leave the Queue() application after being bridged with a member in a few ways: * Caller or member hangup * Caller is transferred somewhere else (blind or atx) * Caller is externally redirected elsewhere The first 2 scenarios are currently handled by subscribing to stasis messages, but the 3rd is not explicitly covered. If a caller is redirected away from the Queue() application, the member who was last bridged with that caller will remain in an "In use" state until the caller hangs up. This patch adds handling of the caller leaving the queue via redirection. We monitor the caller-member bridge, and if the caller is the one that leaves, we treat it the same as we would a caller hangup. ASTERISK-26400 #close Reported by: Etienne Lessard Change-Id: Iba160907770de5a6c9efeffc9df5a13e9ea75334 2017-03-15 08:44 +0000 [7612601964] Joshua Colp * res_pjsip_endpoint_identifier_ip: Don't output error if no header_match. This change ensures that if no header_match option is set on an identify an error message is not output stating the option is set to an invalid value. ASTERISK-26863 Change-Id: I239bc6d2319dd3da24ba96a38d4d6e9b5526d62a 2017-03-14 08:49 +0000 [48447313b6] Torrey Searle * res/res_pjsip_refer: call xfer w/o extension When transfering to a URI without an extension, ensure that the s extension of the dialplan is entered ASTERISK-26869 #close Change-Id: I07403df66cf93f09e00a40ab5b41bfc6f72b1525 2017-03-14 16:16 +0000 [9fd9b39e8b] Richard Mudgett * pbx.c: Fix crash from malformed exten pattern. Forgetting to indicate an exten is a pattern can cause a crash if the "pattern" has a character set range. e.g., "9999[3-5]" The crash is due to a buffer overwrite because the '-' exten eye-candy wasn't removed as expected and overran the allocated space. The buffer overwrite is fixed two ways in this patch. 1) Fix ext_strncpy() to distinguish between pattern and non-pattern extens. Now '-' characters are removed when they are eye-candy and not when they are part of a pattern character set. Since the function is private to pbx.c, the return value now returns the number of bytes written to the destination buffer instead of the strlen() of the final buffer so the callers that care don't need to add one. 2) Fix callers to ext_strncpy() to supply the correct available buffer size of the destination buffer. ASTERISK-26668 Change-Id: I555d97411140e47e0522684062d174fbe32aa84a 2017-03-14 16:51 +0000 [5389666d6f] Richard Begg * chan_iax2: Reload of iax peer results in loss of host address/port When using a non-dynamic peer address, build_peer() invalidates the peer address structure by setting the address family to unspecified. However, if dnsmgr is enabled, the subsequent call to ast_dnsmgr_lookup() will not amend the peer address if the cache is still valid, resulting in peer connectivity failures. To fix this, we call ast_dnsmgr_refresh() instead. ASTERISK-26865 Change-Id: Id8a89a2f771ebbaf32255a35fe596a6dcb97a082 2017-03-14 15:12 +0000 [658d59c683] Matt Jordan * configure: Don't use the progress bar with curl when downloading to stdout In some scenarios, such as when there may not be a terminal (such as inside a Docker container), curl will apparently direct the progress bar to stdout. This can cause extra data to be appended to a file curl'd down to stdout, resulting in md5 verification failures. This patch removes the progress bar, and tells curl to download the file silently. ASTERISK-26872 #close Change-Id: Ie860b020f627d4372b3e7ce9453de5faafeebe6c 2017-03-14 07:50 +0000 [b3c2c996f1] Matt Jordan * res_pjsip_endpoint_identifier_ip: Add an option to match requests by header This patch adds a new features to the endpoint identifier module, 'match_header'. When set, inbound requests are matched by a provided SIP header: value pair. This option works in conjunction with the existing 'match' configuration option, such that if any 'match*' attribute matches an inbound request, the request is associated with the specified endpoint. Since this module now identifies by more than just IP address, appropriate renaming of the module and/or variables can be done in a non-release branch. ASTERISK-26863 #close Change-Id: Icfc14835c962f92e35e67bbdb235cf0589de5453 (cherry picked from commit 30f52d79d7fc9ab0b628bef2b61ea515413795a2) 2017-03-14 09:55 +0000 [51985565ef] Matt Jordan * configs/samples/hep.conf.sample: Clarify how the HEP stack works This patch updates the documenation in hep.conf.sample to better specify how the various HEP modules interact. ASTERISK-26717 #close Change-Id: I337fb742a89e3ec5edc7fc7a7a0295218d841124 2017-03-14 09:59 +0000 [f9b791debe] Matt Jordan * funcs/func_devstate: Remove new line in Device field of during module load During module loading of func_devstate, Asterisk emits the current device state of all Custom device states currently stored in the AstDB. This was erroneously including a new line character ('\n') to the end of the device state, causing two new lines to be emitted in DeviceStateChange AMI events. Note that this only happened for those device state changes that occurred during startup. Regular device state changes for Custom device states are handled elsewhere, and did not have the newline. ASTERISK-26643 #close Reported by: Roman Bedros Tested by: Matt Jordan patches: ami_devstate.diff uploaded by Roman Bedros (License 6842) Change-Id: I1f4c02fc79c448d43bf725f5039c83d9611d7d93 2017-03-14 09:37 +0000 [216e28aa95] Matt Jordan * main/stasis_cache: Demote the ERROR message when removing a nonexistent item This patch demotes the ERROR message that is displayed when a nonexistent item is removed from the Stasis cache. The genesis of this demotion is due to chan_sip's realtime peers and their interaction with Asterisk's core ast_endpoint code, but ostensibly it could happen from other channel drivers as well. Since Mark Michelson already did an excellent job of explaining on this issue, it is quoted here for posterity: "Internally, when a realtime peer is retrieved, Asterisk creates an ast_endpoint structure. When that peer is destroyed, the ast_endpoint is destroyed as well. Part of the destruction of the ast_endpoint involves clearing the Stasis cache of all information about that endpoint. The problem here is that the act of creating the ast_endpoint is not enough to actually put any information in the Stasis cache. Instead, something has to happen, such as a state change, in order for the Stasis cache to have any information about that endpoint. When a device registers, chan_sip creates an ast_endpoint structure, processes the REGISTER, and then destroys the ast_endpoint. When the ast_endpoint is destroyed, there is nothing to destroy in the Stasis cache, so an error message is emitted. When you use rtcachefriends, ast_endpoint structures persist for the lifetime of the module and so you do not see this error message." ASTERISK-25237 #close Change-Id: I53cebc6b4a897a1ab9564182b75c177780feff70 2017-03-12 09:21 +0000 [c8d1b915d7] Joshua Colp * chan_pjsip: Don't assume a session will have a channel. When querying for PJSIP specific information using the dialplan function CHANNEL() it is possible that the underlying session will no longer have a channel associated with it. This is most likely to occur when the RTCP HEP module attempts to get the channel name. If this happens then a crash will occur. This change just adds a check that the channel exists on the session before querying it. ASTERISK-26857 Change-Id: I113479cffff6ae64cf8ed089e9e1565223426f01 2017-03-13 10:45 +0000 [6d1eb880c2] George Joseph * menuselect: Add a new 'options' support type The Binaural Rendering patches in the master branch required menuselect to be updated with a new support type called 'option'. This allows binaural rendering to be turned on or off when bridge_softmix is built. This patch backports the 'option' functionality to the 13 and 14 branches. Here's what it looks like in menuselect: [*] bridge_simple [*] bridge_softmix --- Module Options --- [ ] binaural_rendering_in_bridge_softmix To create an option for a module, you can create (or update) the menuselect-tree xml snippet in the directory where the module resides and add a member element with an 'option' support_level. Example (abbreviated) from bridges/bridges.xml: option bridge_softmix fftw3 no The 'name' will be added or removed from the MENUSELECT_ make variable following the standard module "missing means yes" rules. Example (abbreviated) from bridges/Makefile: ifeq ($(findstring binaural_rendering,$(MENUSELECT_BRIDGES)),) bridge_softmix.o: _ASTCFLAGS+=-DBINAURAL_RENDERING bridge_softmix.so: LIBS+=$(FFTW3_LIB) endif Change-Id: I66d23755ed6e81f8d439cad410f2ffa7c30f25ad 2017-03-10 20:29 +0000 [523de8eb8e] George Joseph * pjproject_bundled: Reduce the need for rebuilds Bundled pjproject should now only rebuild if one of the menuselect "Compiler Flags" options changes. Change-Id: If114a2e16b9e77af371a600d6a5e197bbf28fe43 2017-03-07 08:12 +0000 [d3ef833b3b] Jean Aunis * chan_sip: Call not cancelled after receiving a 422 response When receiving a 422 response, the invitestate variable must be reset to INV_CALLING. ASTERISK-26841 Change-Id: Ia0502d6b02192664cefa4e75bafdd2645ce56099 2017-03-05 15:26 +0000 [67c989ce78] Daniel Journo * pjsip/cli_commands: pjsip show channelstats shows wrong codec * cli_commands.c Fixed CLI output ASTERISK-26822 #close Change-Id: I3889ef6a8f6738fc312fab42db5efacd6e452b01 2017-03-07 07:37 +0000 [2a85888262] Joshua Colp * res_pjsip_transport_websocket: Add support for IPv6. This change adds a PJSIP patch (which has been contributed upstream) to allow the registration of IPv6 transport types. Using this the res_pjsip_transport_websocket module now registers an IPv6 Websocket transport and uses it for the corresponding traffic. ASTERISK-26685 Change-Id: Id1f9126f995b31dc38db8fdb58afd289b4ad1647 2017-03-08 08:16 +0000 [bc6eeab822] Daniel Journo * app_voicemail: Cannot set fromstring on a per-mailbox basis * apps/app_voicemail.c fromstring field added to mailbox which will override the global fromstring if set. ASTERISK-24562 #close Change-Id: I5e90e3a1ec2b2d5340b49a0db825e4bbb158b2fe 2017-03-06 15:54 +0000 [d9972423d1] Daniel Journo * Saynumber is trying to get "and" from "digits/" subfolder * say.c Changed 'digits/and' to 'vm-and' for en_GB ASTERISK-26598 #close Change-Id: If1b713e5daea6f952b339f139178d292a6c4fcfe 2017-03-06 13:15 +0000 [77901a58ca] Sean Bright * pbx_spool: Gracefully handle long lines in call files Per the linked issue, we aren't checking the buffer filled by fgets() to determine if it contains a newline, so we will fail to correctly parse the trailing portion of a long line. This patch increases the buffer size from 256 to 1024, and skips any line that exceeds that length, logging a warning in the process. ASTERISK-17067 #close Reported by: Dave Olszewski Change-Id: I51bcf270c1b4347ba05b43f18dc2094c76f5d7b0 2017-03-02 21:27 +0000 [4271c700f7] Richard Mudgett * core: Cleanup ast_get_hint() usage. * manager.c:manager_state_cb() Fix potential use of uninitialized hint[] if a hint does not exist for the requested extension. Ran into this when developing a testsuite test. The AMI event ExtensionStatus came out with the hint header value containing garbage. The AMI event PresenceStatus also had the same issue. * manager.c:action_extensionstate() no need to completely initialize the hint[]. Only initialize the first element. * pbx.c:ast_add_hint() Remove unnecessary assignment. * chan_sip.c: Eliminate an unneeded hint[] local variable. We only care about the return value of ast_get_hint() there. Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b 2017-02-16 04:22 +0000 [e510595c86] Jørgen H * res_pjsip WebRTC/websockets: Fix usage of WS vs WSS. According to the RFC[1] WSS should only be used in the Via header for secure Websockets. * Use WSS in Via for secure transport. * Only register one transport with the WS name because it would be ambiguous. Outgoing requests may try to find the transport by name and pjproject only finds the first one registered. This may mess up unsecure websockets but the impact should be minimal. Firefox and Chrome do not support anything other than secure websockets anymore. * Added and updated some debug messages concerning websockets. * security_events.c: Relax case restriction when determining security transport type. * The res_pjsip_nat module has been updated to not touch the transport on Websocket originating messages. [1] https://tools.ietf.org/html/rfc7118 ASTERISK-26796 #close Change-Id: Ie3a0fb1a41101a4c1e49d875a8aa87b189e7ab12 2017-03-01 07:23 +0000 [76971d4c4a] Sean Bright * res_config_pgsql: Make 'require' return consistent with other backends res_config_pgsql should match the behavior of other realtime backend drivers so that queue_log can disable adaptive logging. ASTERISK-25628 #close Reported by: Dmitry Wagin Change-Id: Ic1fb1600c7ce10fdfb1bcdc43c5576b7e0014372 2017-02-28 09:41 +0000 [fa8f6c2fc4] Sean Bright * res_config_pgsql: Release table locks where appropriate The find_table() functions NULL or a locked table pointer. We are not consistently calling release_table() in failure paths. Change-Id: I6f665b455799c84b036e5b34904b82b05eab9544 2017-02-28 05:41 +0000 [5b34b751a0] Tzafrir Cohen * pjsip.conf.sample: user_agent: not a specific version Use the description of useragent from sip.conf here. ASTERISK-26825 #close Change-Id: I5b33a4aaa0ae1d793289d05e3bc09521affbf755 2017-02-27 20:07 +0000 [8e6ecdade2] George Joseph * res_pjsip_pubsub: Remove unneeded endpoint unref When a subscription was being recreated and the endpoint wasn't found, we were trying to unref the endpoint. This was causing FRACKs. Removed the unref. ASTERISK-26823 #close Change-Id: If86d2aecff8fe853c7f38a1bfde721fcef3cd164 2017-02-16 04:16 +0000 [0595c31da7] Jørgen H * res_pjsip: Fix crash when contact has no status This change fixes an assumption in res_pjsip that a contact will always have a status. There is a race condition where this is not true and would crash. The status will now be unknown when this situation occurs. ASTERISK-26623 #close Change-Id: Id52d3ca4d788562d236da49990a319118f8d22b5 2017-02-21 18:06 +0000 [c07bcca87e] George Joseph * res_pjsip_outbound_registration: Subscribe to network change events Outbound registration now subscribes to network change events published by res_stun_monitor and refreshes all registrations when an event happens. The 'pjsip send (un)register' CLI commands were updated to accept '*all' as an argument to operate on all registrations. The 'PJSIP(Un)Register' AMI commands were also updated to accept '*all'. ASTERISK-26808 #close Change-Id: Iad58a9e0aa5d340477fca200bf293187a6ca5a25 2017-02-26 10:09 +0000 [d91f61f0b5] Vitezslav Novy * chan_sip: Allow DTLS to be disabled when reloading. This change fixes a problem where removing the DTLS configuration options and reloading would not disable DTLS. This occurred because the DTLS configuration was not reset to an unconfigured state on reload. ASTERISK-26313 Change-Id: I10952709cc4a7727fb50534b042bce9d64894b39 2017-02-27 12:25 +0000 [3d2c119778] George Joseph * build: Warn if asterisk is installed in both 32 and 64 bit sys dirs ... and clean them both up on uninstall. We've fixed the issue where 'make install' was installing to /usr/lib on 64-bit systems that use /usr/lib64. Now we need to clean up the remnants in /usr/lib. * 'make install' now prints a warning if DESTDIR/ASTLIBDIR contains 'lib64' and libasterisk* shared libraries or modules are also found in DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'. * 'make uninstall' ALWAYS cleans up both DESTDIR/ASTLIBDIR and DESTDIR/ASTLIBDIR with 'lib64' transformed to 'lib'. ASTERISK-26705 Change-Id: I6edddeb3c07a51e7c7ba7cac3c05e4bf3ec3f01f 2017-02-27 07:02 +0000 [eac818801b] Joshua Colp * bridge_native_rtp: Handle case where channel joins already suspended. The bridge_native_rtp module did not properly handle the case where a smart bridge operation occurs while a channel is suspended. In this scenario the module would incorrectly set up local or remote RTP bridging despite the media having to flow through Asterisk. The remote endpoint would see two media streams and experience wonky audio. The module has been changed so that it ensures both channels are not suspended when performing the native RTP bridging and this requirement has been documented in the bridge technology. ASTERISK-26781 Change-Id: Id4022d73ace837d4a293106445e3ade10dbc7c7c 2017-02-24 11:49 +0000 [d49af061bc] Joshua Colp * config: Improve documentation and behavior of outbound_proxy option. This change updates the documentation for the outbound_proxy option to ensure it is consistently stated that a full SIP URI must be provided for the option. The res_pjsip_outbound_registration module has also been changed so that the provided outbound_proxy value is checked to ensure it is a URI and if not an error is output stating so. ASTERISK-26782 Change-Id: I6c239a32274846fd44e65b44ad9bf6373479b593 2017-02-09 18:05 +0000 [9c05ddbddd] George Joseph * pjproject_bundled: Update for pjproject 2.6 * Removed all 2.5.5 functional patches. * Updated usages of pj_release_pool to be "safe". * Updated configure options to disable webrtc. * Updated config_site.h to disable webrtc in pjmedia. * Added Richard Mudgett's recent resolver patches. Change-Id: Ib400cc4dfca68b3d07ce14d314e829bfddc252c7 2017-02-23 15:49 +0000 [bee55aaf2c] George Joseph * build: Execute ldconfig to build cache. (take two) On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. To make matters worse, options were being passed to ldconfig on both Linux and FreeBSD that actually prevented the rebuild of the cache. * Fedora has a /usr/share/config.site that automatically tells autoconf to use /usr/lib64 but CentOS does not. This logic was copied to configure.ac and modified so systems like Ubuntu, which still use /usr/lib for 64-bit systems, aren't affected. Now that we have them in the correct directory... In order for the system loader to find libasteriskssl and libasteriskpj, one of 3 things has to happen... - The linker cache must be rebuilt including the directory where the libasterisk* libraries were installed. Only root can rebuild the cache. This was busted. - We have to link the asterisk binary with an rpath pointing to the directrory where the libasterisk* libraries were installed. This makes things very complicated and will happen over the collective dead bodies of everyone who's had to package a distribution with an rpath. - Finally, you can start asterisk with LD_LIBRARY_PATH set to the directrory where the libasterisk* libraries were installed. There are no other options. So... * The invokation of ldconfig has been moved from main/Makefile to ASTTOPDIR/Makefile, the options have been removed, and DESTDIR/ASTLIBDIR appended. If you aren't root, you will be warned after the "Asterisk Installation Compete" banner that you must re-run 'make install' as root, manually run 'ldconfig DESTDIR/ASTLIBDIR' as root, or run asterisk with LD_LIBRARY_PATH. ASTERISK-26705 Change-Id: I2a64b7c33a7d3e9bde20f47e3d3ab771977af982 2017-02-23 14:48 +0000 [da0cadd100] Sean Bright * res_config_pgsql: Fix thread safety problems * A missing AST_LIST_UNLOCK() in find_table() * The ESCAPE_STRING() macro uses pgsqlConn under the hood and we were not consistently locking before calling it. * There were a handful of other places where pgsqlConn was accessed directly without appropriate locking. Change-Id: Iea63f0728f76985a01e95b9912c3c5c6065836ed 2017-02-22 08:53 +0000 [f1963c5b8d] Sean Bright * res_config_ldap: Various code improvements The initial motivation for this patch was to properly handle memory allocation failures - we weren't checking the return values from the various LDAP library allocation functions. In the process, because update_ldap() and update2_ldap() were substantially the same code, they've been consolidated. Change-Id: Iebcfe404177cc6860ee5087976fe97812221b822 2017-02-22 13:08 +0000 [1ec796ce18] Michael L. Young * build_tools: Fix download_externals to allow the use of curl or wget Not sure if this is really a bug versus an improvement. I can see it being viewed as a bug though by some. The current build_tools/download_externals file depends on wget in order to download external modules. The current build system is able to discover which tool to use for fetching remote files - either wget or curl. This patch takes advantage of this capability by modifying the two calls to the wget binary to instead use what was discovered by the build system. ASTERISK-26812 #close Change-Id: If9411a2554f009274d377445613ae91192d948a1 2017-02-22 11:13 +0000 [5c9c097d17] Joshua Colp * Revert "build: Execute ldconfig to build cache." This reverts commit d90430953c508670a67de68de400fef44f5e9fba. Change-Id: I758fe7ea0408f83a6df8e1774310d69f482700f6 2017-02-21 10:47 +0000 [ca6d001144] Sean Bright * pbx_realtime: Prevent premature extension matching The patterns provided by pbx_realtime were checked in the order in which they were returned from the realtime backend. If there was overlap between multiple patterns, the first one to correctly match was chosen even though it may not have been the best match. We now sort the patterns descending by their length and compare in that order. There may be cases where this still results in a sub-optimal match, but this patch should improve the overall behavior. ASTERISK-18271 #close Reported by: Charlie Smurthwaite Change-Id: I56d9ac15810eb1775966b669c3028e32cc7bd809 2017-02-21 15:09 +0000 [0654bf637c] Sean Bright * pbx_dundi: DUNDi weight parameter not processed correctly The DUNDi weight field is not always converted from network byte order to host byte order. This can result in incorrect weight values and incorrect selection of DUNDi destinations. ASTERISK-18731 #close Reported by: Peter Racz Patches: dundi_weight.patch (license #6290) patch uploaded by Peter Racz Change-Id: Iba3e1a700ff539db57211a7bbc26f7b22ea9a1be 2017-02-21 10:47 +0000 [d5522de597] Sean Bright * realtime: Fix ast_load_realtime_multientry handling ast_load_realtime_multientry() returns an ast_config structure whose ast_categorys are keyed with the empty strings. Several modules were giving semantic meaning to the category names causing problems at runtime. * app_directory: Treated the category name as the mailbox name, and would fail to direct calls to the appropriate extension after an entry was chosen. * app_queue: Queues, queue members, and queue rules were all affected and needed to be updated. * pbx_realtime: Pattern matching would never succeed because the extension entered by the user was always compared to the empty string. Change-Id: Ie7e44986344b0b76ea8f6ddb5879f5040c6ca8a7 2017-02-21 08:56 +0000 [5eb7875243] Sean Bright * realtime: Centralize some common realtime backend code All of the realtime backends create artificial ast_categorys to pass back into the core as query results. These categories have no filename or line number information associated with them and the backends differ slightly on how they create them. So create a couple helper macros to help make things more consistent. Also updated the call sites to remove redundant error messages about memory allocation failure. Note that res_config_ldap sets the category filename to the 'table name' but that is not read by anything in the core, so I've dropped it. Change-Id: I3a1fd91e0c807dea1ce3b643b0a6fe5be9002897 2017-02-16 10:30 +0000 [d90430953c] Joshua Colp * build: Execute ldconfig to build cache. On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. This change does the minimally invasive thing and executes ldconfig so that the libraries in the lib directory are found and their location cached. By doing so Asterisk starts up fine. If DESTDIR is specified, however, the old logic is executed as the install process may not have permission to alter the ldconfig cache. ASTERISK-26705 Change-Id: If4eca46ac510c6fea5568256280ffdb3888d7bb4 2017-01-08 20:32 +0000 [3b606093d3] Richard Mudgett * res_pjsip_authenticator_digest.c: Fix sorcery's immutable contract violation. The inbound authentication object is supposed to be immutable when it is stored in sorcery. However, the immutable property is violated if the authentication object does not have a realm set. The immutable contract violation has a different effect depending upon what sorcery back end is used. If it is the config file back end you would get the same object back until res_pjsip is reloaded. If it is the real-time or AstDB back end you would get a new object on each query. If it is cached you would get the same object back until it is refreshed from the database. Once an inbound authentication object has its realm set it may or may not get updated again if the default_realm changes. If the same authentication object is used for inbound and outbound authentication then the immutable violation can make it very hard to determine why the outbound authentication now fails. The only diagnostic message is a complaint about no realms matching when it had worked earlier. It fails because of the difference in behaviour for an empty realm setting between inbound and outbound authentication objects. * Fixed the sorcery object immutable violation by creating a new object and setting the default_realm on it instead. The new object is a shallow copy for speed. * The auth_store thread storage no longer holds an auth ref. It interferes with the shallow copy and never needed a ref anyway. ASTERISK-26799 #close Change-Id: I2328a52f61b78ed5fbba38180b7f183ee7e08956 2017-02-04 20:17 +0000 [6208962b00] Richard Mudgett * res_pjsip: Update artificial auth whenever default_realm changes. There was code attempting to update the artificial authentication object whenever the default_realm changed. However, once the artificial authentication object was created it would never get updated. The artificial authentication object would require a system restart for a change to the default_realm to take effect. ASTERISK-26799 Change-Id: Id59036e9529c2d3ed728af2ed904dc36e7094802 2017-01-01 08:02 +0000 [9f11da85a2] Richard Mudgett * res_pjsip: Update authentication realm documentation. Using the same auth section for inbound and outbound authentication is not recommended. There is a difference in meaning for an empty realm setting between inbound and outbound authentication uses. An empty inbound auth realm represents the global section's default_realm value when the authentication object is used to challenge an incoming request. An empty outgoing auth realm is treated as a don't care wildcard when the authentication object is used to respond to an incoming authentication challenge. ASTERISK-26799 Change-Id: Id3952f7cfa1b6683b9954f2c5d2352d2f11059ce 2017-02-13 17:11 +0000 [473813311b] Richard Mudgett * pjproject: Fixes to resolve DNS SRV crashes. * Re #1945 (misc): Don't trigger SRV complete callback when there is a parse error. * srv_resolver.c: Don't try to send query if already considered resolved. ** In resolve_hostnames() don't try to resolve a query that is already considered resolved. ** In resolve_hostnames() fix DNS typo in comments. ** In build_server_entries() move a common expression assigning to cnt earlier. * sip_transport.c: Fix tdata object name to actually contain the pointer. It helps if the logs referencing a tdata object buffer actually have a name that includes the correct pointer as part of the name. Also since the tdata has its own pool it helps if any logs referencing the pool have the same name as the tdata object. This change brings tdata logging in line with how tsx objects are named. ASTERISK-26669 #close ASTERISK-26738 #close Change-Id: I56af2ded25476b3e870ca586ee69ed6954ef75af 2017-02-06 14:26 +0000 [d58fdae811] Richard Mudgett * pjsip_distributor.c: Update some debug messages to get transaction name. * Removed overloaded unmatched response ignore. We obviously sent the request so we shouldn't ignore it because it isn't new work. ASTERISK-26669 ASTERISK-26738 Change-Id: I55fb5cadc83a8e6699b347c6dc7fa32c5a617d37 2017-02-04 16:00 +0000 [eb9ae4f7cb] Richard Mudgett * res_pjsip: Record the serializer earlier on the tdata. When PJPROJECT needs to do a DNS resolution and there is not a cached entry available, the SIP request message goes out on the PJSIP monitor thread instead of the original serializer thread. Thus when the response comes back it does not get processed by the original sending serializer. This patch records the serializer on tdata before passing a request message to PJPROJECT where it can in Asterisk code. There are several places in PJPROJECT for outbound registration and publishing support that would need to record the serializer. Unfortunately, without replacing the PJPROJECT DNS resolver as was done in v14 we cannot fix those without modifying PJPROJECT. Even if we backported the DNS resolver from v14, the outbound registration refresh timer does not go out on a serializer thread but the PJSIP monitor thread. Fortunately, Asterisk's outbound publish support doesn't use the auto refresh timer that would also not go out under the serializer thread. This patch is v13 only. ASTERISK-26669 ASTERISK-26738 Change-Id: I9997b9ed6dbcebd2c37d6a67dc6dcee9c78914a4 2017-02-20 13:38 +0000 [57f19d6efb] Richard Mudgett * pjproject: Increase SENDER_WIDTH column size for 64-bit system logs. ASTERISK-26669 ASTERISK-26738 Change-Id: Ibae6fc8cae69a1f04df0c577c4c11200499d6fe0 2017-02-20 06:28 +0000 [47daca8a2b] Sean Bright * app_voicemail: vm_authenticate accesses uninitialized memory vm_authenticate doesn't always set the passed ast_vm_user argument, so we initialize to 0 before passing it in. ASTERISK-25893 #close Reported by: Filip Jenicek Change-Id: Ia3cc0128f93d352ed9add8d5c2f0f7232c2cbe4a 2017-02-20 11:19 +0000 [06214173a9] Joshua Colp * Revert "build: Execute ldconfig to build cache." This reverts commit e910dbab90ef3d628955c49f441b2c9dda1f222c. Change-Id: I242aa0a965a79738dc898299959c6d2e020c86bd 2017-02-20 08:04 +0000 [c9ea98f9bf] George Joseph * pjproject cli: Add object count after object lists When listing a container, we now print the number of objects in the container at the end of the list. Change-Id: I791cbc3ee9da9a2af9adc655164b5d32953df812 2017-02-20 05:53 +0000 [d8972f50f4] Sean Bright * res_config_ldap: Don't try to delete non-existent attributes OpenLDAP will raise an error when we try to delete an LDAP attribute that doesn't exist. We need to filter out LDAP_MOD_DELETE requests based on which attributes the current LDAP entry actually has. There is of course a small window of opportunity for this to still fail, but it is much less likely now. Change-Id: I3fe1b04472733e43151563aaf9f8b49980273e6b 2017-02-20 05:49 +0000 [b980cae1f7] Sean Bright * res_config_ldap: Remove extraneous line numbers from log messages Extraneous line numbers were being output in many log messages. These have been removed. Change-Id: Ice9efa3d252ee87f37fa8f5ea852fda482675431 2017-02-20 05:45 +0000 [011b7be62a] Sean Bright * res_config_ldap: Make memory allocation more consistent The code in update_ldap() and update2_ldap() was using both Asterisk's memory allocation routines as well as OpenLDAP's. I've changed it so that everything that is passed to OpenLDAP's functions are allocated with their routines. Change-Id: Iafec9c1fd8ea49ccc496d6316769a6a426daa804 2017-02-20 05:30 +0000 [b2836dde7e] Sean Bright * res_config_ldap: Fix configuration inheritance from _general The "_general" configuration section allows administrators to provide both general configuration options (host, port, url, etc.) as well as a global realtime-to-LDAP-attribute mapping that is a fallback if one of the later sections do not override it. This neglected to exclude the general configuration options from the mapping. As an example, during my testing, chan_sip requested 'port' from realtime, and because I did not have it defined, it pulled in the 'port' configuration option from "_general." We now filter those out explicitly. Change-Id: I1fc61560bf96b8ba623063cfb7e0a49c4690d778 2017-02-20 05:27 +0000 [6d5e9993b2] Sean Bright * res_config_ldap: Fix erroneous LDAP_MOD_REPLACE in LDAP modify We always treat the first change of our modification batch as a replacement when it sometimes is actually a delete. So we have to pass the correct arguments to the OpenLDAP library. ASTERISK-26580 #close Reported by: Nicholas John Koch Patches: res_config_ldap.c-11.24.1.patch (license #6833) patch uploaded by Nicholas John Koch Change-Id: I0741d25de07c9539f1edc6eff3696165dfb64fbe 2017-02-15 11:55 +0000 [5b7c6678ae] Sean Bright * res_config_sqlite3: Fix crash when loading with invalid config When ast_config_load() fails with CONFIG_STATUS_FILEINVALID, it has already destroyed the ast_config struct for us. Trying to do it again results in a crash. Change-Id: If6a5c0ca718ad428e01a1fb25beb209a9ac18bc6 2017-02-17 16:57 +0000 [096496e13e] Richard Mudgett * tcptls.c: Add some missing allocation failure checks. Change-Id: I0ddf01cd3c10d3b6666d7bf68d4e206a37f4fbdb 2017-02-17 17:06 +0000 [047a1e7dcc] Sean Bright * pjproject-bundled: Fix checksum verification when using cURL ASTERISK-26802 #close Reported by: Michael L. Young Change-Id: Iad293080f55d4d69ab615717a15211d916eed613 2017-02-16 08:38 +0000 [2cd75fe311] Sean Bright * realtime: Fix LIKE escaping in SQL backends The realtime framework allows for components to look up values using a LIKE clause with similar syntax to SQL's. pbx_realtime uses this functionality to search for pattern matching extensions that start with an underscore (_). When passing an underscore to SQL's LIKE clause, it will be interpreted as a wildcard matching a single character and therefore needs to be escaped. It is (for better or for worse) the responsibility of the component that is querying realtime to escape it with a backslash before passing it in. Some RDBMs support escape characters by default, but the SQL92 standard explicitly says that there are no escape characters unless they are specified with an ESCAPE clause, e.g. SELECT * FROM table WHERE column LIKE '\_%' ESCAPE '\' This patch instructs 3 backends - res_config_mysql, res_config_pgsql, and res_config_sqlite3 - to use the ESCAPE clause where appropriate. Looking through documentation and source tarballs, I was able to determine that the ESCAPE clause is supported in: MySQL 5.0.15 (released 2005-10-22 - earliest version available from archives) PostgreSQL 7.1 (released 2001-04-13) SQLite 3.1.0 (released 2005-01-21) The versions of the relevant libraries that we depend on to access MySQL and PostgreSQL will not work on versions that old, and I've added an explicit check in res_config_sqlite3 to only use the ESCAPE clause when we have a sufficiently new version of SQLite3. res_config_odbc already handles the escape characters appropriately, so no changes were required there. ASTERISK-15858 #close Reported by: Humberto Figuera ASTERISK-26057 #close Reported by: Stepan Change-Id: I93117fbb874189ae819f4a31222df7c82cd20efa 2017-02-16 10:30 +0000 [e910dbab90] Joshua Colp * build: Execute ldconfig to build cache. On some platforms a multiarch approach is used for libraries. The build system does not take this into account and still places libraries into the lib directory if no --libdir is specified to configure. On initial startup this results in libasteriskssl.so not being found, as it is not in the multiarch lib directory. This change does the minimally invasive thing and executes ldconfig so that the libraries in the lib directory are found and their location cached. By doing so Asterisk starts up fine. ASTERISK-26705 Change-Id: I6d30b6427e9d5e69470e11327c7ff203fa7da519 2017-02-16 05:46 +0000 [9b02bbfa88] Sean Bright * res_config_sqlite3: Properly create missing columns when necessary There were two specific issues resolved here: 1) The code that iterated over the required fields (via ast_realtime_require) was broken for the RQ_INTEGER1 field type. Iteration would stop when the first RQ_INTEGER1 (0) field was encountered. 2) sqlite3_changes() was used to try and count the number of rows returned by a SELECT statement. sqlite3_changes() only counts affected rows, so this was always returning the value from the most recent data modification statement. We now separate read-only queries from data modification queries and count rows appropriately in both cases. ASTERISK-23457 #close Reported by: Scott Griepentrog Change-Id: I91ed20494efc3fcfbc2a96ac7646999a49814884 2017-02-15 14:44 +0000 [0fc27fa364] Joshua Elson * http: Ensure capath is defined on all http creations ASTERISK-26794 #close Change-Id: I9cbc3b6b6a8aab590f5ccde9c262a98e4d5253a1 2017-02-15 23:09 +0000 [7aa731c1c7] Igor Goncharovsky * chan_unistim: fix char type to have consistent behavior on ARM There is difference exists in behaviour of char type on x86 and ARM. On x86 by default char variable type means signed char, but in ARM unsigned char used. This make binary calculations and negative values works wrong on ARM. This patch change type of char variables used for store negative values and binary calculations to signed char. ASTERISK-26714 Change-Id: Id78716dee9568a58419d4ef63c038affc3dfc7ab 2017-02-07 13:17 +0000 [be77b845d9] George Joseph * res_pjsip_pubsub: Correctly implement persisted subscriptions This patch fixes 2 original issues and more that those 2 exposed. * When we send a NOTIFY, and the client either doesn't respond or responds with a non OK, pjproject only calls our pubsub_on_evsub_state callback, no others. Since pubsub_on_evsub_state (which does the sub_tree cleanup) does not expect to be called back without the other callbacks being called first, it just returns leaving the sub_tree orphaned. Now pubsub_on_evsub_state checks the event for PJSIP_EVENT_TSX_STATE which is what pjproject will set to tell us that it was the transaction that timed out or failed and not the subscription itself timing our or being terminated by the client. If is TSX_STATE, pubsub_on_evsub_state now does the proper cleanup regardless of the state of the subscription. * When a client renews a subscription, we don't update the persisted subscription with the new expires timestamp. This causes subscription_persistence_recreate to prune the subscription if/when asterisk restarts. Now, pubsub_on_rx_refresh calls subscription_persistence_update to apply the new expires timestamp. This exposed other issues however... * When creating a dialog from rdata (which sub_persistence_recreate does from the packet buffer) there must NOT be a tag on the To header (which there will be when a client refreshes a subscription). If there is one, pjsip_dlg_create_uas will fail. To address this, subscription_persistence_update now accepts a flag that indicates that the original packet buffer must not be updated. New subscribes don't set the flag and renews do. This makes sure that when the rdata is recreated on asterisk startup, it's done from the original subscribe packet which won't have the tag on To. * When creating a dialog from rdata, we were setting the dialog's remote (SUBSCRIBE) cseq to be the same as the local (NOTIFY) cseq. When the client tried to resubscribe after a restart with the correct cseq, we'd reject the request with an Invalid CSeq error. * The acts of creating a dialog and evsub by themselves when recreating a subscription does NOT restart pjproject's subscription timer. The result was that even if we did correctly recreate the subscription, we never removed it if the client happened to go away or send a non-OK response to a NOTIFY. However, there is no pjproject function exposed to just set the timer on an evsub that wasn't created by an incoming subscribe request. To address this, we create our own timer using ast_sip_schedule_task. This timer is used only for re-establishing subscriptions after a restart. An earlier approach was to add support for setting pjproject's timer (via a pjproject patch) and while that patch is still included here, we don't use that call at the moment. While addressing these issues, additional debugging was added and some existing messages made more useful. A few formatting changes were also made to 'pjsip show scheduled tasks' to make displaying the subscription timers a little more friendly. ASTERISK-26696 ASTERISK-26756 Change-Id: I8c605fc1e3923f466a74db087d5ab6f90abce68e 2017-02-15 11:03 +0000 [73133d5354] Sean Bright * res_rtp_asterisk: Use PJ_ICE_MAX_CAND instead of hard-coding 16 pjsip limits the total number of ICE candidates to PJ_ICE_MAX_CAND, which is a compile-time constant. Instead of hard-coding 16 when we enumerate local interfaces, use PJ_ICE_MAX_CAND so that we can potentially collect more interfaces if the compile time options are changed. Tangentially related to ASTERISK~24464 Change-Id: I1b85509e39e33b1fed63c86261fc229ba14bbabd 2017-02-03 02:25 +0000 [99b40e72ae] Tzafrir Cohen * libasteriskssl: do nothing with OpenSSL >= 1.1 OpenSSL 1.1 requires no explicit initialization. The hacks in the library are not needed. They also happen to fail running Asterisk. ASTERISK-26109 #close Change-Id: I3b3efd5d80234a4c45a8ee58dcfe25b15d9ad100 2017-02-13 16:50 +0000 [4c31e03e80] Sean Bright * app_voicemail: Allow 'Comedian Mail' branding to be overriden Original patch by John Covert, slight modifications by me. ASTERISK-17428 #close Reported by: John Covert Patches: app_voicemail.c.patch (license #5512) patch uploaded by John Covert Change-Id: Ic3361b0782e5a5397a19ab18eb8550923a9bd6a6 2017-01-20 23:59 +0000 [e97e50b68b] Tzafrir Cohen * tcptls: use TLS_client_method with OpenSSL 1.1 OpenSSL 1.1 introduced TLS_client_method() and deprecated the previous version-specific methods (such as TLSv1_client_method(). Other than being simpler to use and more correct (gain support for TLS newer that TLS1, in our case), the older ones produce a deprecation warning that fails the build in dev-mode. ASTERISK-26109 #close Change-Id: I257b1c8afd09dcb0d96cda3a41cb9f7a15d0ba07 2017-01-20 23:57 +0000 [0d555f0d81] Tzafrir Cohen * openssl 1.1 support: use OPENSSL_VERSION_NUMBER Use OPENSSL_VERSION_NUMBER instead of OPENSSL_API_COMPAT to detect the openssl 1.1 API. ASTERISK-26109 #close Change-Id: I4e448f55ef516aedf6ad154037c35577a421a458 2017-01-25 16:25 +0000 [9d34df9a5e] Ryan Rittgarn * app_voicemail: VoiceMailPlayMsg did not play database stored messages When attempting to use VoiceMailPlayMsg with a realtime data backend the message is located, but never retrieved. This patch adds the required RETRIEVE and DISPOSE calls that will fetch the message from the database (and IMAP storage as well for that matter). Also, removed extraneous make_file call. ASTERISK-26723 #close Change-Id: I1e122dd53c0f3d7faa10f3c2b7e7e76a47d51b8c 2017-02-14 08:12 +0000 [f99e5f4de4] Sean Bright * app_record: Add option to prevent silence from being truncated When using Record() with the silence detection feature, the stream is written out to the given file. However, if only 'silence' is detected, this file is then truncated to the first second of the recording. This patch adds the 'u' option to Record() to override that behavior. ASTERISK-18286 #close Reported by: var Patches: app_record-1.8.7.1.diff (license #6184) patch uploaded by var Change-Id: Ia1cd163483235efe2db05e52f39054288553b957 2017-02-11 09:57 +0000 [ea8a610776] Sean Bright * cli: Fix various CLI documentation and completion issues * app_minivm: Use built-in completion facilities to complete optional arguments. * app_voicemail: Use built-in completion facilities to complete optional arguments. * app_confbridge: Add missing colons after 'Usage' text. * chan_alsa: Use built-in completion facilities to complete optional arguments. * chan_sip: Use built-in completion facilities to complete optional arguments. Add completions for 'load' for 'sip show user', 'sip show peer', and 'sip qualify peer.' * chan_skinny: Correct and extend completions for 'skinny reset' and 'skinny show line.' * func_odbc: Correct completions for 'odbc read' and 'odbc write' * main/asterisk: Correct and extend completions for 'core show file version.' * main/astmm: Use built-in completion facilities to complete arguments for 'memory' commands. * main/bridge: Correct completions for 'bridge kick.' * main/ccss: Use built-in completion facilities to complete arguments for 'cc cancel' command. * main/cli: Add 'all' completion for 'channel request hangup.' Correct completions for 'core set debug channel.' Correct completions for 'core show calls.' * main/pbx_app: Remove redundant completions for 'core show applications.' * main/pbx_hangup_handler: Remove unused completions for 'core show hanguphandlers all.' * res_sorcery_memory_cache: Add completion for 'reload' argument of 'sorcery memory cache stale' and properly implement. Change-Id: Iee58c7392f6fec34ad9d596109117af87697bbca 2017-01-13 11:21 +0000 [17030100ca] Norbert Varga * chan_pjsip: Multidomain endpoint finding on call When PJSIP tries to call an endpoint with a domain (e.g. 1000@test.com), the user part is stripped down as it would be a trunk with a specified user, and only the host part is called as a PJSIP endpoint and can't be found. This is not correct in the case of a multidomain SIP account, so the stripping after the @ sign is done only if the whole endpoint (in multidomain case 1000@test.com) can't be found. ASTERISK-26248 Change-Id: I3a2dd6f57f3bd042df46b961eccd81d31ab202e6 2017-02-13 05:05 +0000 [18f1b52601] Joshua Colp * channel: Protect flags in ast_waitfor_nandfds operation. The ast_waitfor_nandfds operation will manipulate the flags of channels passed in. This was previously done without the channel lock being held. This could result in incorrect values existing for the flags if another thread manipulated the flags at the same time. This change locks the channel during flag manipulation. ASTERISK-26788 Change-Id: I2c5c8edec17c9bdad4a93291576838cb552ca5ed 2017-02-11 11:25 +0000 [a46a21642e] Richard Mudgett * res_pjsip.c: Fix inconsistency between warning and action. The original return value corresponded to AST_SIP_AUTHENTICATION_CHALLENGE but we have no authenticator registered to create the challenge. Change-Id: I62368180d774b497411b80fbaabd0c80841f8512 2017-02-11 11:26 +0000 [67b21dc63a] Richard Mudgett * pjsip_distributor.c: Fix off-nominal tdata ref leak. Change-Id: I571f371d0956a8039b197b4dbd8af6b18843598d 2017-02-09 10:01 +0000 [8936568515] Sean Bright * manager: Restore Originate failure behavior from Asterisk 11 In Asterisk 11, if the 'Originate' AMI command failed to connect the provided Channel while in extension mode, a 'failed' extension would be looked up and run. This was, I believe, unintentionally removed in 51b6c49. This patch restores that behavior. This also adds an enum for the various 'synchronous' modes in an attempt to make them meaningful. ASTERISK-26115 #close Reported by: Nasir Iqbal Change-Id: I8afbd06725e99610e02adb529137d4800c05345d 2017-02-08 14:27 +0000 [2817f87d27] Richard Mudgett * core: Cleanup some channel snapshot staging anomalies. We shouldn't unlock the channel after starting a snapshot staging because another thread may interfere and do its own snapshot staging. * app_dial.c:dial_exec_full() made hold the channel lock while setting up the outgoing channel staging. Made hold the channel lock after the called party answers while updating the caller channel staging. * chan_sip.c:sip_new() completed the channel staging on off-nominal exit. Also we need to use ast_hangup() instead of ast_channel_unref() at that location. * channel.c:__ast_channel_alloc_ap() added a comment about not needing to complete the channel snapshot staging on off-nominal exit paths. * rtp_engine.c:ast_rtp_instance_set_stats_vars() made hold the channel locks while staging the channels for the stats channel variables. Change-Id: Iefb6336893163f6447bad65568722ad5d5d8212a 2017-02-10 09:35 +0000 [c7fcc4468f] George Joseph * configs/samples: Fix placement of 'identify' entry in sorcery.conf The entry for 'identify' was incorrectly placed in the res_pjsip section when it should be in res_pjsip_endpoint_identifier_ip. ASTERISK-26785 #close Change-Id: Ia1372b12a952bfe2df6b1b1e0e725ca306a5d41a 2017-02-08 11:50 +0000 [cbc23c31cf] Mark Michelson * Revert "Update qualifies when AOR configuration changes." This reverts commit 6492e91392b8fd394193e411c6eb64b45486093f. The change in question was intended to prevent the need to reload in order to update qualifies on contacts when an AOR changes. However, this ended up causing a deadlock instead. Change-Id: I1a835c90a5bb65b6dc3a1e94cddc12a4afc3d71e 2017-02-07 12:01 +0000 [7e14e086cf] Joshua Colp * srv: Fix crash when ast_srv_lookup is used and 0 records are returned. When performing an SRV lookup using the ast_srv_lookup function it did not properly handle the situation where 0 records are returned. If this happened it would wrongly assume that at least one record was present. This change fixes the code so it will exit early if an error occurs or if 0 records are returned. ASTERISK-26772 patches: srv_lookup.patch submitted by nappsoft (license 6822) Change-Id: I09b19081c74e0ad11c12bf54a257243b1bcb2351 2017-02-06 11:40 +0000 [7b39d6901a] Joshua Colp * res_stasis_device_state: Protect the adding/removing of subscriptions. The adding and removing of device state subscriptions did not protect fully against simultaneous manipulation. In particular the subscribe case allowed a small window where two subscriptions could be added for the same device state instead of just one. This change makes the code hold the subscriptions lock for the entirety of each operation to ensure that two are not occurring at the same time. ASTERISK-26770 Change-Id: I3e7f8eb9d09de440c9024d2dd52029f6f20e725b 2017-02-01 17:56 +0000 [c384dfd6b0] Richard Mudgett * res_pjsip: Fix some off nominal tdata leaks. Change-Id: I243a4be5e7fbfe604923764969c4ee04eee89b9d 2017-02-02 11:26 +0000 [70aff89e5d] Sean Bright * res_odbc: Remove deprecated settings from sample configuration file ASTERISK-26704 #close Reported by: Anthony Messina Change-Id: I976a1f94cf79c5f31e76174c61f5c6a65fd6354f 2017-02-01 15:56 +0000 [3aee199913] Sean Bright * audiohooks: Muting a hook can mute underlying frames If an audiohook is placed on a channel that does not require transcoding, muting that hook will cause the underlying frames to be muted as well. The original patch is from David Woolley but I have modified slightly. ASTERISK-21094 #close Reported by: David Woolley Patches: ASTERISK-21094-Patch-1.8-1.txt (license #5737) patch uploaded by David Woolley Change-Id: Ib2b68c6283e227cbeb5fa478b2d0f625dae338ed 2017-02-01 13:54 +0000 [6492e91392] Mark Michelson * Update qualifies when AOR configuration changes. Prior to this change, qualifies would only update in the following cases: * A reload of res_pjsip.so was issued. * A dynamic contact was re-registered after its AOR's qualify_frequency had been changed This does not work well if you are using realtime for your AORs. You can update your database to have a new qualify_frequency, but the permanent contacts on that AOR will not have their qualifies updated. And the dynamic contacts on that AOR will not have their qualifies updated until the next registration, which could be a long time. This change seeks to fix this problem by making it so that whenever AOR configuration is applied, the contacts pertaining to that AOR have their qualifies updated. Additions from this patch: * AOR sorcery objects now have an apply handler that calls into a newly added function in the OPTIONS code. This causes all contacts associated with that AOR to re-schedule qualifies. * When it is time to qualify a contact, the OPTIONS code checks to see if the AOR can still be retrieved. If not, then qualification is canceled on the contact. Alterations from this patch: * The registrar code no longer updates contact's qualify_frequence and qualify_timeout. There is no point to this since those values already get updated when the AOR changes. * Reloading res_pjsip.so no longer calls the OPTIONS initialization function. Reloading res_pjsip.so results in re-loading AORs, which results in re-scheduling qualifies. Change-Id: I2e7c3316da28f389c45954f24c4e9389abac1121 2017-01-31 18:28 +0000 [43f0ff4b69] Richard Mudgett * channel.c: Fix unbalanced read queue deadlocking local channels. Using the timerfd timing module can cause channel freezing, lingering, or deadlock issues. The problem is because this is the only timing module that uses an associated alert-pipe. When the alert-pipe becomes unbalanced with respect to the number of frames in the read queue bad things can happen. If the alert-pipe has fewer alerts queued than the read queue then nothing might wake up the thread to handle received frames from the channel driver. For local channels this is the only way to wake up the thread to handle received frames. Being unbalanced in the other direction is less of an issue as it will cause unnecessary reads into the channel driver. ASTERISK-26716 is an example of this deadlock which was indirectly fixed by the change that found the need for this patch. * In channel.c:__ast_queue_frame(): Adding frame lists to the read queue did not add the same number of alerts to the alert-pipe. Correspondingly, when there is an exceptionally long queue event, any removed frames did not also remove the corresponding number of alerts from the alert-pipe. ASTERISK-26632 #close Change-Id: Ia98137c5bf6e9d6d202ce0eb36441851875863f6 2017-01-31 16:38 +0000 [a199f94908] Richard Mudgett * res_agi: Prevent an AGI from eating frames it should not. (Re-do) A dialplan intercept routine is equivalent to an interrupt routine. As such, the routine must be done quickly and you do not have access to the media stream. These restrictions are necessary because the media stream is the responsibility of some other code and interfering with or delaying that processing is bad. A possible future dialplan processing architecture change may allow the interception routine to run in a different thread from the main thread handling the media and remove the execution time restriction. * Made res_agi.c:run_agi() running an AGI in an interception routine run in DeadAGI mode. No touchy channel frames. ASTERISK-25951 ASTERISK-26343 ASTERISK-26716 Change-Id: I638f147ca7a7f2590d7194a8ef4090eb191e4e43 2017-01-31 16:32 +0000 [6bed318a66] Richard Mudgett * Frame deferral: Revert API refactoring. There are several issues with deferring frames that are caused by the refactoring. 1) The code deferring frames mishandles adding a deferred frame to the deferred queue. As a result the deferred queue can only be one frame long. 2) Deferrable frames can come directly from the channel driver as well as the read queue. These frames need to be added to the deferred queue. 3) Whoever is deferring frames is really only doing the __ast_read() to collect deferred frames and doesn't care about the returned frames except to detect a hangup event. When frame deferral is completed we must make the normal frame processing see the hangup as a frame anyway. As such, there is no need to have varying hangup frame deferral methods. We also need to be aware of the AST_SOFTHANGUP_ASYNCGOTO hangup that isn't real. That fake hangup is to cause the PBX thread to break out of loops to go execute a new dialplan location. 4) To properly deal with deferrable frames from the channel driver as pointed out by (2) above, means that it is possible to process a dialplan interception routine while frames are deferred because of the AST_CONTROL_READ_ACTION control frame. Deferring frames is not implemented as a re-entrant operation so you could have the unsupported case of two sections of code thinking they have control of the media stream. A worse problem is because of the bad implementation of the AMI PlayDTMF action. It can cause two threads to be deferring frames on the same channel at the same time. (ASTERISK_25940) * Rather than fix all these problems simply revert the API refactoring as there is going to be only autoservice and safe_sleep deferring frames anyway. ASTERISK-26343 ASTERISK-26716 #close Change-Id: I45069c779aa3a35b6c863f65245a6df2c7865496 2017-01-31 11:17 +0000 [e371e13b9e] Joshua Colp * res_pjsip: Handle invocation of callback on outgoing request when error occurs. There are some error cases in PJSIP when sending a request that will result in the callback for the request being invoked. The code did not handle this case and assumed on every error case that the callback was not invoked. The code has been changed to check whether the callback has been invoked and if so to absorb the error and treat it as a success. ASTERISK-26679 ASTERISK-26699 Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91 2017-01-30 09:02 +0000 [339c30f2b6] Sean Bright * res_rtp_asterisk: Swap byte-order when sending signed linear Before Asterisk 13, signed linear was converted into network byte order by a smoother before being sent over the network. We restore this behavior by forcing the creation of a smoother when slinear is in use and setting the appropriate flags so that the byte order conversion is always done. ASTERISK-24858 #close Reported-by: Frankie Chin Change-Id: I868449617d1a7819578f218c8c6b2111ad84f5a9 2017-01-31 12:46 +0000 [7fd28cefdb] George Joseph * debug_utilities: Install ast_logescalator to /var/lib/asterisk/scripts Forgot to install it with the original patch Change-Id: I8bdb540a6694971ae5fe21f48d532332c6482e4c 2017-01-25 06:50 +0000 [456bc3c704] George Joseph * debug_utilities: Add ast_logescalator The escalator works by creating a set of startup commands in cli.conf that set up logger channels and issue the debug commands for the subsystems specified. If asterisk is running when it is executed, the same commands will be issued to the running instance. The original cli.conf is saved before any changes are made and can be restored by executing '$prog --reset'. The log output will be stored in... $astlogdir/message.$uniqueid $astlogdir/debug.$uniqueid $astlogdir/dtmf.$uniqueid $astlogdir/fax.$uniqueid $astlogdir/security.$uniqueid $astlogdir/pjsip_history.$uniqueid $astlogdir/sip_history.$uniqueid Some minor tweaks were made to chan_sip, and res_pjsip_history so their history output could be send to a log channel as packets are captured. A minor tweak was also made to manager so events are output to verbose when "manager set debug on" is issued. Change-Id: I799f8e5013b86dc5282961b27383d134bf09e543 2017-01-23 09:35 +0000 [54b027916a] Torrey Searle * libastssl/pj: libastssl/pj should have an so_version Issue introduced in b59956a87. In the non-darwin case libastssl/pj should be versioned. This causes the symbol file for this lib to not be generated. Change-Id: Ib07ae8c40252813c488e2c1ac6204fd42816dd4c 2017-01-24 19:51 +0000 [3c8f84786e] Kirill Katsnelson * make_build_h: handle backslashes in external strings LikewiseOpen creates user names with a backslash in them. A gentle massage with sed(1) allows such strings to be inserted into build.h properly quoted. I am also adding the same for host name and other strings used in the script that are more or less user-controlled. ASTERISK-26754 Change-Id: Iac5ef2b67a68ee58f35ddbf86bb818ba6eabecae 2017-01-17 20:46 +0000 [555e8cd2ba] Kirill Katsnelson * ast_careful_fwrite to support EPIPE gracefully When a reading end of the network socket is closed by an AMI manager, the EPIPE is signaled when writing to our end, resulting in the spurious log error message ast_careful_fwrite: fwrite() returned error: Broken pipe Previously EPIPE was handled in ast_carefulwrite() a few lines above, but not in this function. ASTERISK-26753 Change-Id: I6a67335cd6526608bb9b78f796c626b1677664b8 2017-01-24 22:31 +0000 [be92f10a16] Kirill Katsnelson * app_queue: Fix queues randomly disappearing on reload With 500+ queues and a reload every minute, a random queue disappears upon reload. The cause is mususe of the 'dead' flag. Namely, all queues were marked dead up front, and then "resurrected" by dropping this flag for those found in the configuration. But a queue marked dead can be removed also when control leaves the app entry point on a PBX thread. With this change, the queue is marked only not found, and at the end of reload only the queues that are still not found are actually marked as dead, so the dead flag is never reset, and set only on positively dead queues. ASTERISK-26755 Change-Id: I3a4537aec9eb8d8aeeaa0193407e3523feb004bf 2017-01-26 07:57 +0000 [aae9df0643] Joshua Colp * res_pjsip_endpoint_identifier_ip: Fix memory leak of hosts when resolving. This change adds a missing unreference of the hostname when resolving and also cleans up the iterator. ASTERISK-26735 Change-Id: Ic012ebaf3d89e714eec340b7b0c5e63c66af857a 2017-01-25 15:26 +0000 [9e3150b98d] Mark Michelson * Add reload options to CLI/AMI stale object commands. Marking an object as stale in a memory cache is supposed to prime the cache so that the next time the item is retrieved, the stale item is deleted from the cache and a background task is run to re-populate the cache with a fresh version of the object. The problem is, there are some object types out there for which there is no natural reason that they would be retrieved from the backend with any regularity. Outbound PJSIP registrations are a good example of this. At startup, they are read, and an object-specific state is created that refers to the initially-retrieved object for all time. Adding the "reload" option to the CLI/AMI commands gives the cache the opportunity to manually re-retrieve the object from the backend, both storing the new object in the cache and applying the new object's configuration to the module that uses that object. Change-Id: Ieb1fe7270ceed491f057ec5cbf0e097bde96c5c8 2017-01-10 17:39 +0000 [c54f9d2bf0] Richard Mudgett * T.140: Fix format ref and memory leaks. * channel.c:ast_sendtext(): Fix T.140 SendText memory leak. * format_compatibility.c: T.140 RED and T.140 were swapped. * res_rtp_asterisk.c:rtp_red_init(): Fix ast_format_t140_red ref leak. * res_rtp_asterisk.c:rtp_red_init(): Fix data race after starting periodic scheduled red_write(). * res_rtp_asterisk.c: Some other minor misc tweaks. Change-Id: Ifa27a2e0f8a966b1cf628607c86fc4374b0b88cb 2017-01-24 15:39 +0000 [a2f0adccbd] Joshua Colp * res_pjsip_endpoint_identifier_ip: Ensure error defaults to 0. When configuring a match using a netmask the error variable was not defaulting to 0. For some people this would cause the code to think an error occurred when adding the match when in reality it added perfectly fine. ASTERISK-26693 Change-Id: I850c250813742bddde65c84e739093c9e01dfe56 2017-01-10 17:37 +0000 [607b3ac736] Richard Mudgett * astobj2.c: Add excessive ref count trap. Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a 2017-01-10 13:11 +0000 [ab8cb5a7ce] Richard Mudgett * main/app.c: Memory corruption from early format destruction. * make_silence() created a malloced silence slin frame without adding a slin format ref. When the frame is destroyed it will unref the slin format that never had a ref added. Memory corruption is expected to follow. * Simplified and fixed counting the number of samples in a frame list for make_silence(). * Eliminated an unnecessary RAII_VAR associated with the make_silence() frame. Change-Id: I47de3f9b92635b7f8b4d72309444d6c0aee6f747 2017-01-11 14:59 +0000 [dcd8e4b1a0] Richard Mudgett * frame.c: Fix off-nominal format ref leaks. * ast_frisolate() could leak frame format refs on allocation failures. * Similified code in ast_frisolate() and code used by ast_frisolate(). Change-Id: I79566d4d36b3d7801bf0c8294fcd3e9a86a2ed6d 2017-01-13 19:08 +0000 [00a227e93d] Richard Mudgett * stasis_bridge.c: Fix off-nominal stasis control ref leak. Change-Id: Ib17218343a6596832060180e19386da9df150ac8 2017-01-10 12:30 +0000 [38a2021c68] Richard Mudgett * res_musiconhold.c: Fix format ref leak when parsing MOH config class. Change-Id: Ica8e8e2ce7604c2c61ec55bef07dc675361d2ea5 2017-01-10 14:03 +0000 [ab7a9fc5b2] Richard Mudgett * chan_oss.c: Fix format ref leak in oss_read(). Change-Id: I0a5d56c7dcf327d60f86a4c25a23571733709fd0 2017-01-10 17:48 +0000 [1484a991e1] Richard Mudgett * Add notes about embedded ast_frame structs holding a format ref. mod_format.h: Note ast_filestream.fr holds a format ref. translate.h: Note ast_trans_pvt.f holds a format ref. Change-Id: I86bda354d725207b41e08920355d7c31b2d7f749 2017-01-19 09:05 +0000 [17f4989d49] George Joseph * ari: Implement 'debug all' and request/response logging The 'ari set debug' command has been enhanced to accept 'all' as an application name. This allows dumping of all apps even if an app hasn't registered yet. To accomplish this, a new global_debug global variable was added to res/stasis/app.c and new APIs were added to set and query the value. 'ari set debug' now displays requests and responses as well as events. This required refactoring the existing debug code. * The implementation for 'ari set debug' was moved from stasis/cli.{c,h} to ari/cli.{c,h}, and stasis/cli.{c,h} were deleted. * In order to print the body of incoming requests even if a request failed, the consumption of the body was moved from the ari stubs to ast_ari_callback in res_ari.c and the moustache templates were then regenerated. The body is now passed to ast_ari_invoke and then on to the handlers. This results in code savings since that template was inserted multiple times into all the stubs. An additional change was made to the ao2_str_container implementation to add partial key searching and a sort function. The existing cli code assumed it was already there when it wasn't so the tab completion was never working. Change-Id: Ief936f747ce47f1fb14035fbe61152cf766406bf 2017-01-20 21:13 +0000 [30cb4eb57f] Richard Mudgett * PJPROJECT logging: Fix detection of max supported log level. The mechanism used for detecting the maximum log level compiled into the linked pjproject did not work. The API call simply stores the requested level into an integer and does no range checking. Asterisk was assuming that there was range checking and limited the new value to the allowable range. To get the actual maximum log level compiled into the linked pjproject we need to get and save off the initial set log level from pjproject. This is the maximum log level supported. * Get and save off the initial log level setting before altering it to the desired level on startup. This has to be done by a macro rather than calling a core function to avoid incorrectly linking pjproject. * Split the initial log level warning messages to warn if the linked pjproject cannot support the requested startup level and if it is too low to get the pjproject buildopts for "pjproject show buildopts". * Adjust the CLI "pjproject set log level" to check the saved max log level and to generate normal output messages instead of a warning message. ASTERISK-26743 #close Change-Id: I40aa76653e2a1dece66c3f8734594b4f0471cfb4 2017-01-21 14:43 +0000 [cd2677f966] Tzafrir Cohen * tests: use datadir for sound files Some (voicemail-related) tests API symlinks beep.gsm and other files from ast_config_AST_VAR_DIR. It should use ast_config_AST_DATA_DIR. ASTERISK-26740 #close Change-Id: Id49c56fb9e16df64b1a2b829693ca7601252df89 2017-01-20 23:41 +0000 [b62f84bfb1] Tzafrir Cohen * test_voicemail_api: order of params to VERIFY macros Fix order of parameters in calls to VM_API_INT_VERIFY and VM_API_STRING_VERIFY ASTERISK-26739 #close Change-Id: I30dc6b36893aadad6012be3f16f93aa5720870d6 Note: status: builds. Not tested any further. 2017-01-05 13:21 +0000 [e3dcb9ddd9] Richard Mudgett * res_pjsip_pubsub.c: Implement "pjsip show subscriptions" commands. ASTERISK-23828 #close Change-Id: Ifb8a3b61f447aedc58a8e6b36a810f7566018567 2017-01-23 16:18 +0000 [75497c33ea] Mark Michelson * Free endpoint ACLs when destroying PJSIP endpoints. If endpoint ACLs were specified, they were not being freed when endpoints were destroyed. On systems with realtime endpoints, this could add up quickly since each DB lookup would allocate the ACL without freeing it. ASTERISK-26731 #close Reported by Ustinov Artem Change-Id: Ie1f8bf5b7a0de628c975beba01e69c56893331ad 2017-01-23 09:10 +0000 [177e81ee47] George Joseph * pjproject_bundled: Fix setting max log level An earlier attempt to prevent pjsua from spitting out an extra 6795 lines of debug output every time the testsuite called it was also turning off the ability for asterisk to output debug info when it needed to. This patch reverts the earlier fix and instead adds a pjproject patch that sets the startup log level to 1 for pjsua pjsystest and the pjsua python binding. This is an asterisk-only patch that does not affect pjproject functionality and will not be submitted upstream. Change-Id: I347a8b58b2626f2906ccfc1d339e907627a0c9e8 2017-01-23 10:08 +0000 [6d23b2e360] Joshua Colp * res_pjsip_endpoint_identifier_ip: Read settings before resolving. An option has been added, srv_lookups, which controls whether SRV lookups are performed on the provided match hosts or not. It was possible for this option to be applied after resolution had already happened. This change makes it so hosts are stored away, settings are read and applied, and then resolution is done. This ensures that no matter the ordering the srv_lookups option is in effect. ASTERISK-26735 Change-Id: I750378cb277be0140f8c5539450270afbfc43388 2017-01-22 17:25 +0000 [a969bf3577] Richard Mudgett * LISTFILTER: Remove outdated ERROR message. Feeding LISTFILTER an empty variable results in an invalid ERROR message. Earlier changes made the message useless because we can no longer tell if the variable is empty or does not exist. It is valid to try to remove a value from an empty list just as it is valid to try to remove a value that is not in a non-empty list. * Removed the outdated ERROR message. * Added more test cases to the LISTFILTER unit test. Change-Id: Ided9040e6359c44a335ef54e02ef5950a1863134 2017-01-05 15:11 +0000 [3890337e7a] Richard Mudgett * res_pjsip_pubsub.c: Fix AMI event list counts. Fix the AMI PJSIPShowSubscriptionsInbound, PJSIPShowSubscriptionsOutbound, and PJSIPShowResourceLists actions event counts. The reported counts may not necessarily be accurate depending on what happens. The subscriptions count would be wrong if Asterisk ever has outbound subscriptions. The resource list count could be wrong if a list were added or removed during the AMI action being processed. Change-Id: I4344301827523fa174960a42c413fd19abe4aed5 2017-01-05 13:02 +0000 [fe4801c4f9] Richard Mudgett * res_pjsip_pubsub.c: Fix incorrect message string wrapping. Change-Id: Id771e6fe56d89ce365ddcbb423f820af97211120 2017-01-05 13:01 +0000 [46484b8730] Richard Mudgett * res_pjsip_pubsub.c: Eliminate trivial SCOPED_LOCK usage. Change-Id: Ie0b69a830385452042fa19e7d267c6790ec6b6be 2017-01-05 12:58 +0000 [8160474d7d] Richard Mudgett * res_pjsip: alloca can never fail. Change-Id: Ia2a6158e5fdf311bc2a1c0c43417978de504b1f1 2017-01-13 11:03 +0000 [c628a7acac] George Joseph * debug_utilities: Create ast_loggrabber ast_loggrabber gathers log files from customizable search patterns, optionally converts POSIX timestamps to a readable format and tarballs the results. Also a few tweaks were made to ast_coredumper. Change-Id: I8bfe1468ada24c1344ce4abab7b002a59a659495 (cherry picked from commit 5fa1c56d7e76999aa14f133a33f6b168e7c3b99c) 2017-01-01 03:47 +0000 [e335b706ee] Richard Mudgett * res_pjsip_outbound_authenticator_digest.c: Fix spacing in warning messages. Change-Id: I573f0343c0c63a785cd4da60d57cc9f8b9ce7f49 2017-01-12 15:58 +0000 [883e7fde31] Kevin Harwell * abstract/fixed/adpative jitter buffer: disallow frame re-inserts It was possible for a frame to be re-inserted into a jitter buffer after it had been removed from it. A case when this happened was if a frame was read out of the jitterbuffer, passed to the translation core, and then multiple frames were returned from said translation core. Upon multiple frames being returned the first is passed on, but sebsequently "chained" frames are put back into the read queue. Thus it was possible for a frame to go back into the jitter buffer where this would cause problems. This patch adds a flag to frames that are inserted into the channel's read queue after translation. The abstract jitter buffer code then checks for this flag and ignores any frames marked as such. Change-Id: I276c44edc9dcff61e606242f71274265c7779587 2017-01-13 21:23 +0000 [473330983b] Richard Mudgett * taskprocessor.c: Change when high water warning logged. The task processor queue reached X scheduled tasks message was originally intended to get logged only once per task processor to prevent spamming the log. This is no longer necessary since high and low water thresholds can better control when the message is logged. It is beneficial to generate the warning each time a task processor reaches the high water level because PJSIP stops processing new requests while any high water alert is active. Without this change you would have to enable at least debug level 3 logging to know about a repeated alert trigger. * Made generate the warning message whenever a task is pushed into the task processor that triggers the high water alert. * Appended 'again' to the warning for a repeated high water alert trigger. Change-Id: Iabf75a004f7edaf1e5e8c323099418e667cac999 2017-01-10 05:54 +0000 [0047b1bc49] Aaron An * res_rtp_asterisk: Fix bug in function CHANNEL(rtcp, all_rtt) Function CHANNEL(rtcp,all_rtt) CHANNEL(rtcp,all_loss) CHANNEL(rtcp,all_jitter) always return 0.0 due to wrong define of macro "AST_RTP_SATA_SET" and "AST_RTP_STAT_STRCPY". It should compare "combined" with "stat" not "current_stat". ASTERISK-26710 #close Reported-by: Aaron An Tested-by: AaronAn Change-Id: Id4140fafbf92e2db689dac5b17d9caa009028a15 2017-01-10 18:10 +0000 [47474cfd54] George Joseph * debug_utilities: Create the ast_coredumper utility This utility allows easy manipulation of asterisk coredumps. * Configurable search paths and patterns for existing coredumps * Can generate a consistent coredump from the running instance * Can dump the lock_infos table from a coredump * Dumps backtraces to separate files... - thread apply 1 bt full -> .thread1.txt - thread apply all bt -> .brief.txt - thread apply all bt full -> .full.txt - lock_infos table -> .locks.txt * Can tarball corefiles and optionally delete them after processing * Can tarball results files and optionally delete them after processing * Converts ':' in coredump and results file names '-' to facilitate uploading. Jira for instance, won't accept file names with colons in them. Tested on Fedora24+, Ubuntu14+, Debian6+, CentOS6+ and FreeBSD9+[1]. [1] For *BSDs, the "devel/gdb" package might have to be installed to get a recent gdb. The utility will check all instances of gdb it finds in $PATH and if one isn't found that can run python, it prints a friendly error. Change-Id: I935d37ab9db85ef923f32b05579897f0893d33cd 2017-01-08 10:29 +0000 [f8cd73ec3c] George Joseph * pjproject_bundled: Fix compilation with MALLOC_DEBUG When MALLOC_DEBUG was specified, make was failing. Immediately remaking would work. The issues was in the ordering of the make dependencies. Change-Id: If6030b54fc693f3179f32bfd20c6b5d5f1b3f7cd 2017-01-05 06:11 +0000 [37aaaa2da2] Joshua Colp * res_pjsip_endpoint_identifier_ip: Add support for SRV lookups. This change implements SRV support for the IP based endpoint identifier module. All possible addresses through SRV are looked up and added as matches. If no SRV records are available a fallback to normal host resolution is done. If an IP address is provided then no SRV lookup occurs. This is configured using the "srv_lookups" option on the identify section and defaults to "yes". ASTERISK-26693 Change-Id: I6b641e275bf96629320efa8b479737062aed82ac 2016-12-22 09:13 +0000 [569dac8e50] Alexander Traud * res_pjsip_session: Access SIPDOMAIN via Dialplan. This feature was available in the SIP channel driver chan_sip. For example, Asterisk is the outbound proxy and has to handle all SIP-URIs, even domains not local to Asterisk. In that case, SIPDOMAIN is used in the Dialplan, to detect and dial remote SIP-URIs. This change here sets the SIP destination domain of an inbound call (SIPDOMAIN) in the SIP channel driver res_pjsip as well. ASTERISK-26670 #close Change-Id: I27c880dc404a3c1c6792e1ba3545475339577243 2017-01-04 05:50 +0000 [367128e70b] Alexander Traud * chan_sip: Remember SDP negotiation on SIP_CODEC_INBOUND. After a SIP_CODEC_INBOUND in the dialplan, do not continue with cached formats but remember the joint format. Cached formats contain default parameters, often create an empty fmtp line. However, a joint format might have passed format_get_joint(.) in a res_format_attr_* module (like Opus Codec) and contain the resulting format parameters from a SDP negotiation. ASTERISK-26691 #close Change-Id: I35712d98a793d4c3efdd156cec57deab9014b1dc 2017-01-03 15:14 +0000 [d7e5a747c3] George Joseph * pjproject_bundled: Compile pjsua with max log level = 2 A while back, we changed config_site.h to set PJ_LOG_MAX_LEVEL = 6. This allowed us to control the log level better from inside Asterisk. An unfortunate side effect of this was that the pjsua binary and python bindings were also compiled with log level set to 6 so whenever a testsuite test that uses pjsua runs, it spits out 6795 lines of debug in an instant even before the test starts. I believe this overruns the Jenkins capture buffer and prevents the test from properly terminating. In turn, this results in the testsuite just hanging until the job is killed. It's more frequent on the higher end agents because they can spit out the messages faster. Unfortunately, the messages are all spit out before we have control of the python pj.Lib instance where we can set logging levels so the only alternative was to actually compile pjsua and _pjsua.so with an overridden PJ_LOG_MAX_LEVEL. Although defining a lower max level was done in the Makefile, the define in config_site.h had to be wrapped with "#ifndef" so the change would take effect. Change-Id: I2af9e7d48dde1927279c586c9c725d868fe6f3ff 2016-12-22 16:00 +0000 [34e728cfb9] Joshua Colp * chan_pjsip: Use session for retrieving CHANNEL() information. The CHANNEL() dialplan function implementation for PJSIP allows querying of PJSIP specific information. This used the channel passed in to get the PJSIP session and associated information. It is possible for this channel to be masqueraded and end up as a different channel type by the time the information request is actually acted upon. This change retrieves the PJSIP session safely and accesses data from it (including channel). This provides a guarantee that the session and channel will not be altered when the request is being acted upon. ASTERISK-26673 Change-Id: I335e12b89e1820cafdd92b3e7526b8ba649eb7e6 2016-12-31 19:56 +0000 [a398f98b08] Joshua Elson * res_pjsip: Fix known compact header issues ASTERISK-26684 #close Change-Id: Ifd7e401c45015119dd5e8421dbfe3afa6381744a 2016-12-30 09:10 +0000 [0ab9d103f6] George Joseph * res_pjsip_refer: Handle compact Refer-To header. refer_incoming_refer_request needed to look for the "r" header as well as the "Refer-To" header. ASTERISK-26655 #close patches: refer_compact_fix.diff submitted by JoshE (license 6075) Change-Id: I610410a99b02427ea5db887aeb454d5f12c2259f 2016-12-23 12:11 +0000 [21151408f7] Richard Mudgett * bridge_native_rtp.c: Minor code cleanups. In native_rtp_bridge_compatible_check() * Made one variable declaration per line. * Extracted if test assignment to make the test easier to see. * Made long if tests easier to see the combinatorial logic. * Added bridge id to a couple debug messages. Change-Id: I65bc5732aa7c9a2537f062f106fbea711cf2daad 2016-12-23 12:10 +0000 [9dcf9e9cea] Richard Mudgett * bridge_native_rtp.c: Fix native rtp bridge data race. native_rtp_bridge_compatible() didn't lock the bridge channels before checking the channels for native bridging ability. As a result, one of the channel's native format capabilities structure got replaced out from under the native bridge check. Use of a stale pointer to freed memory causes bad things to happen. MALLOC_DEBUG, DO_CRASH, and the tests/channels/pjsip/transfers/blind_transfer/caller_direct_media testsuite test caught this. * Add missing channel locking in native_rtp_bridge_compatible(). Change-Id: If25fdb3ac8e85563c4857fb8216b3d9dc3d0fa53 2016-12-21 16:28 +0000 [a9e459f8ac] Richard Mudgett * res_rtp_asterisk.c: Fix uninitialized memory crash. ast_rtp_remote_address_set() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor(). * Optimized out the 'us' struct variable. ASTERISK-26672 #close Change-Id: I4acea5dcdf0813da2c7d3e11c2d6067d160d17dc 2016-12-21 17:55 +0000 [bcdd282ada] Richard Mudgett * res_rtp_asterisk.c: Initialize ourip passed to ast_find_ourip(). We access uninitialized memory when the 'ourip' parameter does not have an initial guess to our IP address. ASTERISK-26672 Change-Id: I35507ea1ad7455d2be188f6ccdd4add7bd150e15 2016-12-21 16:25 +0000 [ac31233dbe] Richard Mudgett * acl.c: Improve ast_ouraddrfor() diagnostic messages. * Made not generate strings unless they will actually be used. ASTERISK-26672 Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3 2016-12-21 17:54 +0000 [0aa5db4b38] Richard Mudgett * chan_rtp.c: Fix uninitialized memory crash. unicast_rtp_request() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor() and abort the UnicastRTP channel request if it fails. ASTERISK-26672 Change-Id: I1ef7a7c09f4da4f15dcb6de660d2bcac5f2a95c0 2016-12-07 15:23 +0000 [e2fa3c7eda] Richard Mudgett * res_rtp_asterisk.c: Fix off nominal memory leak. Change-Id: I95b1088d11244a2edae6607c12fbf33b38658a75 2016-12-09 12:23 +0000 [d13be4eff6] Martin Tomec * app_queue: Ensure member is removed from pending when hanging up. In some cases member is added to pending_members, and the channel is hung up before any extension state change. So the member would stay in pending_members forever. So when we call do_hang, we should also remove member from pending. ASTERISK-26621 #close Change-Id: Iae476b5c06481db18ebe0fa594b3e80fdc9a7d54 2016-12-18 15:23 +0000 [815f755155] George Joseph * pjproject_bundled: Make build single threaded There were just too many issues in various environments with multi threaded building of pjproject. It doesn't really speed things up anyway since asterisk is already being compiled in parallel. Change-Id: Ie5648fb91bb89b4224b6bf43a0daa1af793c4ce1 2016-12-08 20:00 +0000 [493849dcd7] Corey Farrell * chan_sip: Reorder unload_module to deal with stuck TCP threads. In some situations TCP threads may become frozen. This creates the possibility that Asterisk could segfault if they become unfrozen after chan_sip has been dlclose'd. This reorders the unload_module process to allow abort if threads do not exit within 5 seconds. High level order as follows: 1) Unregister from the core to stop new requests. 2) Signal threads to stop 3) Clear config based tables (but do not free the table itself). 4) Verify that threads have shutdown, cancel unload if not. 5) Clean all remaining resources. ASTERISK-26586 Change-Id: Ie23692041d838fbd35ece61868f4c640960ff882 2016-12-16 01:32 +0000 [ab447f8a6a] David M. Lee * configure: fix with-pjproject-bundled The AC_ARG_WITH macro's shell variable is withval; not enableval. Purely coincidentally, the option would work when --enable-dev-mode is given. Also fixed a portability problem with bootstrap.sh, since -printf is not a portable option for find. Change-Id: I0f0e5b1a934b5af5737713834361e9c95b96b376 2016-12-15 13:25 +0000 [35736d419a] Richard Mudgett * autosupport: Add 'pjproject show buildopts' Change-Id: I8aa55a7c3fb175235ddc7f85e9457d5102d06fa7 2016-12-14 14:21 +0000 [4b285d226d] Richard Mudgett * chan_dahdi.c: Fix bounds check regression. Caused by ASTERISK-25494 Change-Id: I1fc408c1a083745ff59da5c4113041bbfce54bcb 2016-12-13 14:34 +0000 [9114574188] Richard Mudgett * res_pjsip: Add/update ERROR msg if invalid URI. ASTERISK-24499 Change-Id: Ie305153e47e922233b2ff24715e0e326e5fa3a6c 2016-12-12 18:38 +0000 [75a6afbec5] Richard Mudgett * MESSAGE: Flush Message/ast_msg_queue channel alert pipe. ASTERISK-25083 Change-Id: Id54baa57a8dbca84e29f28bcd2ffc0a5ac12d8b2 2016-12-13 14:06 +0000 [91485734a4] George Joseph * res_sorcery_memory_cache: Change an error to a debug message When a sorcery user calls ast_sorcery_delete on an object that may have already expired from the cache, res_sorcery_memory_cache spits out an ERROR. Since this can happen frequently and validly when an inbound registration expires after the cache entry expired, the errors are unnecessary and misleading. Changed to a debug/1. Change-Id: Idf3a67038c16e3da814cf612ff4d6d18ad29ecd7 2016-12-09 08:14 +0000 [cd46e86491] George Joseph * pjproject_bundled: Retry download if previously saved tarball is bad If a tarball is corrupted during download, the makefile will attempt to download it again. If the tarball somehow gets corrupted after it's downloaded however, the makefile was just failing. We now retry the download. ASTERISK-26653 #close Change-Id: I1b24d454852d80186f60c5a65dc4624ea8a1c359 2016-12-08 12:54 +0000 [22820e10fe] Badalyan Vyacheslav * chan_sip: Delete unneeded check P is always true. We check it before Change-Id: Iee61cda002a9f61aee26b9f66c5f9b59e3389efb 2016-12-08 12:58 +0000 [6aa2c5e5f9] Badalyan Vyacheslav * Small code cleanup in chan_sip The conditional expressions of the 'if' operators situated alongside each other are identical. Change-Id: I2cf7c317b106ec14440c7f1b5dcfbf03639f748a 2016-12-08 12:43 +0000 [b596fac838] Badalyan Vyacheslav * Fix typo in chan_sip The conditional expressions of the 'if' operators situated alongside each other are identical. Change-Id: I652b6dcddb3be007e669a6aa8107edb31a1ddafb 2016-12-08 12:30 +0000 [483ed9f1aa] Badalyan Vyacheslav * res_pjsip: Fix 'A = B != C' kind. Consider reviewing the expression of the 'A = B != C' kind. The expression is calculated as following: 'A = (B != C)' Change-Id: Ibaa637dfda47d51a20e26069d3103e05ce80003d 2016-11-30 09:31 +0000 [41c6319c4e] Walter Doekes * chan_sip: Do not allow non-SP/HTAB between header key and colon. RFC says SIP headers look like: HCOLON = *( SP / HTAB ) ":" SWS SWS = [LWS] ; sep whitespace LWS = [*WSP CRLF] 1*WSP ; linear whitespace WSP = SP / HTAB ; from rfc2234 chan_sip implemented this: HCOLON = *( LOWCTL / SP ) ":" SWS LOWCTL = %x00-1F ; CTL without DEL This discrepancy meant that SIP proxies in front of Asterisk with chan_sip could pass on unknown headers with \x00-\x1F in them, which would be treated by Asterisk as a different (known) header. For example, the "To\x01:" header would gladly be forwarded by some proxies as irrelevant, but chan_sip would treat it as the relevant "To:" header. Those relying on a SIP proxy to scrub certain headers could mistakenly get unexpected and unvalidated data fed to Asterisk. This change fixes so chan_sip only considers SP/HTAB as valid tokens before the colon, making it agree on the headers with other speakers of SIP. ASTERISK-26433 #close AST-2016-009 Change-Id: I78086fbc524ac733b8f7f78cb423c91075fd489b 2016-11-14 18:18 +0000 [888142e891] Joshua Colp * res_format_attr_opus: Fix crash when fmtp contains spaces. When an opus offer or answer was received that contained an fmtp line with spaces between the attributes the module would fail to properly parse it and crash due to recursion. This change makes the module handle the space properly and also removes the recursion requirement. ASTERISK-26579 Change-Id: I01f53e5d9fa9f1925a7365f8d25071b5b3ac2dc3 2016-12-06 14:54 +0000 [ebc67d3053] George Joseph * res_pjsip_registrar: AMI Add RegistrationInboundContactStatuses command The PJSIPShowRegistrationsInbound AMI command was just dumping out all AORs which was pretty useless and resource heavy since it had to get all endpoints, then all aors for each endpoint, then all contacts for each aor. PJSIPShowRegistrationInboundContactStatuses sends ContactStatusDetail events which meets the intended purpose of the other command and has significantly less overhead. Also, some additional fields that were added to Contact since the original creation of the ContactStatusDetail event have been added to the end of the event. For compatibility purposes, PJSIPShowRegistrationsInbound is left intact. ASTERISK-26644 #close Change-Id: I326f12c9ecb52bf37ba03f0748749de4da01490a 2016-12-06 16:45 +0000 [d506874477] Richard Mudgett * Bundled pjproject: Fix finding SIP transactions. Occasionally SIP message transactions are not found when they should be. In the particular case an incoming INVITE transaction is CANCELed but the INVITE transaction cannot be found so a 481 response is returned for the CANCEL. The problematic calls have a '_' character in the Via branch parameter. The problem is in the pjproject PJ_HASH_USE_OWN_TOLOWER feature's code. The problem with the "own tolower" code is that it does not calculate the same hash value as when the pj_tolower() function is used. The "own tolower" code will erroneously modify the ASCII characters '@', '[', '\\', ']', '^', and '_'. Calls to pj_hash_calc_tolower() can use the PJ_HASH_USE_OWN_TOLOWER substitute algorithm when enabled. Calls to pj_hash_get_lower(), pj_hash_set_lower(), and pj_hash_set_np_lower() call find_entry() which never uses the PJ_HASH_USE_OWN_TOLOWER algorithm. As a result you may not be able to find a hash tabled entry because the calculated hash values would differ. * Simply disable PJ_HASH_USE_OWN_TOLOWER. ASTERISK-26490 #close Change-Id: If89bfdb5f301b8b685881a9a2a6e0c3c5af32253 2016-12-06 12:06 +0000 [4b233675d8] George Joseph * pjproject_bundled: Fix missing inclusion of symbols Added back in a -g3, and an -O3 when DONT_OPTIMIZE is not set, to the CFLAGS. Not sure how they went missing. Also fixed an uninstall problem where we weren't removing the symlink from libasteriskpj.so.2 to libasteriskpj.so. While I was there, I fixed it for libasteriskssl as well. Change-Id: I9e00873b1e9082d05b5549d974534b48a2142556 2016-12-02 12:04 +0000 [580f83dac7] Richard Mudgett * Remove files that got merged in error somehow to the 13 branch. Change-Id: Id79e2226c31084f9252d5aede9050d3cf13322c8 2016-11-30 18:25 +0000 [61ba2a014a] Richard Mudgett * res_pjsip_outbound_registration.c: Filter redundant statsd reporting. Increasing the testsuite shutdown timeout before forcibly killing Asterisk allowed more events to be sent out. Some tests failed as a result. The tests/channels/pjsip/statsd/registrations failed because we now get the statsd events that a comment in the test configuration stated couldn't be intercepted. Unfortunately, we get a variable number of events because of internal status state transition races generating redundant statsd events. We were reporting redundant statsd PJSIP.registrations.state changes for internal state changes that equated to the same thing publicly. * Made update_client_state_status() filter out redundant statsd updates. ASTERISK-26527 Change-Id: If851c7d514bb530d9226e4941ba97dcf52000646 2016-11-22 11:20 +0000 [2ceb609edb] Guido Falsi * res_rtp: Fix regression when IPv6 is not available. The latest Release candidate fails to create RTP streams when IPv6 is not available. Due to the changes made in September the ast_sockaddr structure passed around to create these streams is always of AF_INET6 type, causing failure when used for IPv4. This patch adds a utility function to check for availability of IPv6 and applies such check at startup to determine how to create the ast_sockaddr structures. ASTERISK-26617 #close Change-Id: I627a4e91795e821111e1cda523f083a40d0e0c3e 2016-11-28 19:43 +0000 [53459cdaa9] Eduardo S. Libardi * res_calendar_caldav: Add support reading gmail calendar The response from gmail calendar includes the string name "caldav:calendar-data". res_calendar_caldav implements the example included in RFC 4791: string "C:calendar-data". When reading the calendar, res_calendar_caldav compare the string and if does not match just discards the event. This commit compares the response to both strings, successfully loading gmail calendar events. Writing to gmail calendar is working prior to this fix. ASTERISK-26624 Reported by: Eduardo S. Libardi Change-Id: Ia1eef10552ae616efb645d390f5ffe81260d7d4a 2016-11-23 18:27 +0000 [44fe4a5769] Richard Mudgett * PJPROJECT logging: Made easier to get available logging levels. Use of the new logging is as simple as issuing the new CLI command or setting the new pjproject.conf option. Other options that can affect the logging are how you have the pjproject log levels mapped to Asterisk log types in pjproject.conf and if you have configured Asterisk to log the DEBUG type messages. Altering the pjproject.conf level mapping shouldn't be necessary for most installations as the default mapping is sensible. Configuring Asterisk to log the DEBUG message type is standard practice for collecting debug information. * Added CLI "pjproject set log level" command to dynamically adjust the maximum pjproject log message level. * Added CLI "pjproject show log level" command to see the currently set maximum pjproject log message level. * Added pjproject.conf startup section "log_level" option to set the initial maximum pjproject log message level so all messages could be captured from initialization. * Set PJ_LOG_MAX_LEVEL to 6 to compile in all defined logging levels into bundled pjproject. Pjproject will use the currently set run time log level to determine if a log message is generated just like Asterisk verbose and debug logging levels. * In log_forwarder(), made always log enabled and mapped pjproject log messages. DEBUG mapped log messages are no longer gated by the current Asterisk debug logging level. * Removed RAII_VAR() from res_pjproject.c:get_log_level(). ASTERISK-26630 #close Change-Id: I6dca12979f482ffb0450aaf58db0fe0f6d2e5389 2016-11-30 10:48 +0000 [17b0b91afa] Mark Michelson * Frame deferral: Re-queue deferred frames one-at-a-time. The recent change that made frame deferral into an API had a behavior change to it. When frame deferral was completed, we would take all of the deferred frames and queue them all onto the channel in one call to ast_queue_frame_head(). Before frame deferral was API-ized, places that performed manual frame deferral would actually take each deferred frame and queue them onto the channel. This change in behavior caused the confbridge_recording test to start failing consistently. Without going too crazily deep into the details, a channel was getting "stuck" in an ast_safe_sleep(). An AMI redirect was attempting to break it out of the sleep, but because there were more frames in the channel read queue than expected, the channel ended up being unable to break from its sleep loop. By restoring the behavior of individual frame queuing after deferral, the test starts passing again. Note, this points to a potential underlying issue pointing to an "unbalance" that can occur when queuing multiple frames at once, and so a follow-up issue is being created to investigate that possibility. Change-Id: Ied5dacacda06d343dea751ed5814a03364fe5a7d 2016-06-28 16:26 +0000 [b0c9f07f04] Tzafrir Cohen * OpenSSL 1.1.0 support OpenSSL 1.1.0 includes some major changes in the interface. See https://wiki.openssl.org/index.php/1.1_API_Changes . Status: Right now there are still a few deprecation notes with OpenSSL 1.1.0. But it's a start. Changes: * CRYPTO_LOCK is no longer available. Replace it with its value for now. I don't completely understand what it is used for there. * Remove several functions from libasteriskssl that seem to no longer be needed. * Structures have become opaque and are accesses with accessors. * ERR_remove_thread_state() no longer needed. * SSLv2 code now could no longer be used in 1.1. ASTERISK-26109 #close Change-Id: I5e29d477d486ca29b6aae0dc2f5dff960c1cb82b 2016-11-28 15:12 +0000 [a33ed3327a] Matt Jordan * res/res_pjsip: Fix documentation whitespace issues Tabs > Spaces. Change-Id: If1e43a71822615a898e958e0f8b2e882606f0bd0 2016-11-22 10:27 +0000 [09c36a6535] Matt Jordan * res_pjsip/chan_sip: Advertise 'ws' in the SIP URI transport parameter Per RFC 7118 5.2, the SIP URI 'transport' parameter should advertise 'ws' when WebSockets are to be used as the transport. This applies to both secure and insecure WebSockets. There were two bugs in Asterisk with respect to this: (1) The most egregious occurs in res_pjsip. There, we advertise 'ws' for insecure websockets and 'wss' for secure websockets. While this would seem to make sense - since 'WS' and 'WSS' are used for the Via Transport parameter - this is not the case for the SIP URI. This patch corrects that by registering the secure websockets with pjproject using the shorthand 'WS', and by returning 'ws' when asked for the transport parameter. Note that in pjproject, it is perfectly valid to have multiple transports use the same shorthand. (2) In chan_sip, we return an upper-case version of the transport 'WS' instead of 'ws'. Since we should be strict in what we send and liberal in what we accept (within reason), this patch lower-cases the transport before appending it to the parameter. ASTERISK-24330 #close Reported by: cervajs, Inaki Baz Castillo Change-Id: Iff77b645f8cc3b7cd35168a6676c26b147f22f42 2016-11-28 11:03 +0000 [29e887e9e1] George Joseph * build_tools: Fix download_externals to handle certified branches download_externals wasn't handling the "certified/13.x" version correctly. Change-Id: I124d195bb117ca36fd7bf1150c630f3b474a9d9a 2016-11-02 05:05 +0000 [bfb8c962c4] Tzafrir Cohen * autoconf: more variants for OSARCH linux-gnu There are quite a few odd GNU/Linux platforms. Just call all of them linux-gnu. Specifically this fixes building the Debian platforms mips64el and x32. And maybe also others. ASTERISK-26546 #close Change-Id: I06ec4bd7f0ee1c84b6b24d81538223b07c4174b1 2016-11-17 08:25 +0000 [a1fa909033] Timo Teräs * codec_dahdi: Fix poll.h include. POSIX defines poll.h. sys/poll.h should not be used as it is c-library internal header which may or may not exist. Notably in musl including sys/poll.h generates warning of being incorrect. Change-Id: Ib318c1c7142a737bcf3caa4d8d72560bebe39252 2016-11-26 10:57 +0000 [0cc8351484] Michael Kuron * chan_sip: Fix segfault during module unload If a TCP/TLS connection was pending (not accepted and not timed out) during unload of chan_sip, Asterisk would segfault when trying to send a signal to a thread whose thread ID hadn't been recorded yet. This commit fixes that by recording the thread ID before calling the blocking connect() syscall. This was a regression introduced by 776a14386a55b5425c7e9617eff8af8b45427144. The above wasn't enough to fix the segfault, which was now delayed to the point where connect() timed out. Therefore, it was necessary to also remove the SA_RESTART flag from the SIGURG sigaction so that pthread_kill() could be used to interruput the connect() syscall. This was a regression introduced by 5d313f51b982a18f7321adcf7c7a4e822d8b2714. ASTERISK-26586 #close Change-Id: I76fd9d47d56e4264e2629bce8ec15fecba673e7b 2016-11-11 08:16 +0000 [8756ce64b7] gestoip2 * res_rtp_asterisk: RTT miscalculation in RTCP When retrieving RTCP stats for PJSIP channels, RTT values are unreliable. RTT calculation is correct, but the data representation isn't. RTT is represented by a 32-bit fixed-point number with the integer part in the first 16 bits and the fractional part in the last 16 bits. In order to get the RTT value, the fractional part is miscalculated, there is an unnecessary 16 bit shift that causes overflow. Besides this there is another mistake, when transforming the integer value to the fixed point fractional part via bitwise operation, that loses precision. * RTT fractional part is no longer shifted, avoiding overflow. * RTT fractional part is transformed to its fixed-point value more precisely. * Fixed timeval2ntp() and ntp2timeval() second fraction conversions. * Fixed NTP timestamp report logging. The usec was inexplicably multiplied by 4096. ASTERISK-26566 #close Reported by Hector Royo Concepcion Change-Id: Ie09bdabfee75afb3f1b8ddfd963e5219ada3b96f 2016-11-15 13:44 +0000 [8e77d6f520] Michael Kuron * tcptls: Use new certificate upon sip reload Previously, a TLS server socket would only be restarted upon sip reload if the bind address had changed. This commit adds checking for changes to TLS parameters like certificate, ciphers, etc. so they get picked up without requiring a reload of the entire chan_sip module. This does not affect open connections in any way, but new connections will use the new TLS parameters. The changes also apply to HTTP and Manager. ASTERISK-26604 #close Change-Id: I169e86cefc6dcd627c915134015a6a1ab1aadbe6 2016-11-11 00:29 +0000 [86d824b7ff] Timo Teräs * addons/chan_mobile: do not use strerror_r The two reasons why it might be used are that some systems do not implement strerror in thread safe manner, and that strerror_r returns the error code in the string in case there's no error message. However, all of asterisk elsewhere uses strerror() and assumes it to be thread safe. And in chan_mobile the errno is also explicitly printed so neither of the above reasons are valid. The reasoning to remove usage is that there are actually two versions of strerror_r: XSI and GNU. They are incompatible in their return value, and there's no easy way to figure out which one is being used. glibc gives you the GNU version if _GNU_SOURCE is defined, but the same feature test macro is needed for other symbols. On all other systems you assumedly get XSI symbol, and compilation warnings as well as non-working error printing. Thus the easiest solution is to just remove strerror_r and use strerror as rest of the code. Alternative is to introduce ast_strerror in separate translation unit so it can request the XSI symbol in glibc case, and replace all usage of strerror. Change-Id: I84d35225b5642d85d48bc35fdf399afbae28a91d 2016-11-21 09:40 +0000 [425da14927] George Joseph * build: Backport addition of librt check to configure.ac A while back, a master-only change was made to check for librt which should probably have been cherry-picked to 13 at that time. Sometime between then and now, part of that change did make it into 13 but it was incomplete and non-functional. This patch backports the rest of the librt check and allows the link of libasteriskpj to use the results. Change-Id: I1424008fd8c90f389dda53162ec4a340b253a3c1 2016-11-16 12:05 +0000 [2a40c3a867] George Joseph * pjproject_bundled: Improve reliability of pjproject download The download process now has a timeout which will cause wget to retry if it stops retrieving data for 5 seconds and fetch and curl to timeout if the whole retrieval take smore than 30 seconds. If the tarball retrieval works, the MD5SUM file is retrieved from the downloads site and the md5 checksum is verified. If either the tarball retrieval or MD5SUM retrieval fails, or the checksums don't match, the entire process is retried once. If it fails again, any incomplete tarball is deleted. .DELETE_ON_ERROR: was also added to the Makefile. Not only does this delete the tarball on failure, it till also delete corrupted library files from the pjproject source directory should they fail to build correctly. Tested all the way back to FreeBSD 9, CentOS 6, Debian 6 and Ubuntu 14. Change-Id: Iea7d33b96a31622ab1b6e54baebaf271959514e1 2016-11-11 07:13 +0000 [12c4e664bc] Mikheili Dautashvili * main/app.c: Transmit Silence on ControlPlayback pause ASTERISK-26562 #close Change-Id: Ie6cb0ffc2b8c775639ce7784fe96f4ea00cfa2f8 2016-11-15 15:01 +0000 [cf6d13180e] Alexei Gradinari * chan_pjsip: fix switching sending codec when asymmetric_rtp_codec=no The sending codec is switched to the receiving codec and then is switched back to the best native codec on EVERY receiving RTP packets. This is because after call of ast_channel_set_rawwriteformat there is call of ast_set_write_format which calls set_format which sets rawwriteformat to the best native format. This patch adds a new function ast_set_write_format_path which set specific write path on channel and uses this function to switch the sending codec. ASTERISK-26603 #close Change-Id: I5b7d098f8b254ce8f45546e6c36e5d324737f71d 2016-11-10 13:34 +0000 [ee73af1d88] George Joseph * Update for 13.12.2 2016-11-04 10:57 +0000 [a3614d75f6] Kevin Harwell * Revert "chan_sip: Fix lastrtprx always updated" This reverts commit 93332cb1d0eea18021ea6538237297e627d6e2fc. Unfortunately, the aforementioned commit caused a regression (incoming calls would eventually disconnect). Thus it is being removed. ASTERISK-26523 #close ASTERISK-25270 Change-Id: Ibf5586adc303073a8eac667a4cbfdb6be184a64d 2016-10-27 13:48 +0000 [7d7b52c434] Mark Michelson * Update for 13.12.1 2016-10-26 07:51 +0000 [9c761b8f45] Joshua Colp * app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS. When executing the MailboxExists dialplan application and MAILBOX_EXISTS dialplan function the passed in temporary voice mailbox was not cleared, causing it to try to free garbage. ASTERISK-26503 #close Change-Id: Ie21ccfa1b80b9c59318e596f6b8e17da2b5a7cb3 2016-10-25 14:13 +0000 [226a7e36c5] Mark Michelson * Update for 13.12.0 2016-10-17 14:08 +0000 [df75b647da] Mark Michelson * Update for 13.12.0-rc1 2017-12-13 14:34 +0000 Asterisk Development Team * asterisk certified/13.13-cert9 Released. 2017-11-30 10:12 +0000 [3eea735a39] Joshua Colp * AST-2017-012: Place single RTCP report block at beginning of report. When the RTCP code was transitioned over to Stasis a code change was made to keep track of how many reports are present. This count controlled where report blocks were placed in the RTCP report. If a compound RTCP packet was received this logic would incorrectly place a report block in the wrong location resulting in a write to an invalid location. This change removes this counting logic and always places the report block at the first position. If in the future multiple reports are supported the logic can be extended but for now keeping a count serves no purpose. ASTERISK-27382 ASTERISK-27429 Change-Id: Iad6c8a9985c4b608ef493e19c421211615485116 2017-12-05 18:04 +0000 [7c0bc72972] Richard Mudgett * CDR: Fix deadlock setting some CDR values. Setting channel variables with the AMI Originate action caused a deadlock when you set CDR(amaflags) or CDR(accountcode). This path has the channel locked when the CDR function is called. The CDR function then synchronously passes the job to a stasis thread. The stasis handling function then attempts to lock the channel. Deadlock results. * Avoid deadlock by making the CDR function handle setting amaflags and accountcode directly on the channel rather than passing it off to the CDR processing code under a stasis thread to do it. * Made the CHANNEL function and the CDR function process amaflags the same way. * Fixed referencing the wrong message type in cdr_prop_write(). ASTERISK-27460 Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f 2017-12-01 19:42 +0000 Asterisk Development Team * asterisk certified/13.13-cert8 Released. 2017-11-30 14:38 +0000 [efeb9da0e7] George Joseph * AST-2017-013: chan_skinny: Call pthread_detach when sess threads end chan_skinny creates a new thread for each new session. In trying to be a good cleanup citizen, the threads are joinable and the unload_module function does a pthread_cancel() and a pthread_join() on any sessions that are active at that time. This has an unintended side effect though. Since you can call pthread_join on a thread that's already terminated, pthreads keeps the thread's storage around until you explicitly call pthread_join (or pthread_detach()). Since only the module_unload function was calling pthread_join, and even then only on the ones active at the tme, the storage for every thread/session ever created sticks around until asterisk exits. * A thread can detach itself so the session_destroy() function now calls pthread_detach() just before it frees the session memory allocation. The module_unload function still takes care of the ones that are still active should the module be unloaded. ASTERISK-27452 Reported by: Juan Sacco Change-Id: I9af7268eba14bf76960566f891320f97b974e6dd 2017-11-10 07:06 +0000 [191190a982] Joshua Colp * pjsip: Add patch to allow all transports to be destroyed. If a transport is created with the same transport type, source IP address, and source port as one that already exists the old transport is moved into a linked list called "tp_list". If this old transport is later shutdown it will not be destroyed as the process checks whether the transport is valid or not. This check does not look at the "tp_list" when making the determination causing the transport to not be destroyed. This change updates the logic to query not just the main storage method for transports but also the "tp_list". Upstream issue https://trac.pjsip.org/repos/ticket/2061 ASTERISK-27411 Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429 2017-11-08 16:59 +0000 Asterisk Development Team * asterisk certified/13.13-cert7 Released. 2017-10-19 13:53 +0000 [44f3d85cde] George Joseph * AST-2017-009: pjproject: Add validation of numeric header values Parsing the numeric header fields like cseq, ttl, port, etc. all had the potential to overflow, either causing unintended values to be captured or, if the values were subsequently converted back to strings, a buffer overrun. To address this, new "strto" functions have been created that do range checking and those functions are used wherever possible in the parser. * Created pjlib/include/limits.h and pjlib/include/compat/limits.h to either include the system limits.h or define common numeric limits if there is no system limits.h. * Created strto*_validate functions in sip_parser that take bounds and on failure call the on_str_parse_error function which prints an error message and calls PJ_THROW. * Updated sip_parser to validate the numeric fields. * Fixed an issue in sip_transport that prevented error messages from being properly displayed. * Added "volatile" to some variables referenced in PJ_CATCH blocks as the optimizer was sometimes optimizing them away. * Fixed length calculation in sip_transaction/create_tsx_key_2543 to account for signed ints being 11 characters, not 9. ASTERISK-27319 Reported by: Youngsung Kim at LINE Corporation Change-Id: I48de2e4ccf196990906304e8d7061f4ffdd772ff 2017-10-19 13:35 +0000 [1b31e3c3bd] Kevin Harwell * AST-2017-011 - res_pjsip_session: session leak when a call is rejected A previous commit made it so when an invite session transitioned into a disconnected state destruction of the Asterisk pjsip session object was postponed until either a transport error occurred or the event timer expired. However, if a call was rejected (for instance a 488) before the session was fully established the event timer may not have been initiated, or it was canceled without triggering either of the session finalizing states mentioned above. Really the only time destruction of the session should be delayed is when a BYE is being transacted. This is because it's possible in some cases for the session to be disconnected, but the BYE is still transacting. This patch makes it so the session object always gets released (no more memory leak) when the pjsip session is in a disconnected state. Except when the method is a BYE. Then it waits until a transport error occurs or an event timeout. ASTERISK-27345 #close Reported by: Corey Farrell Change-Id: I1e724737b758c20ac76d19d3611e3d2876ae10ed 2017-10-03 16:19 +0000 [178b372019] Richard Mudgett * AST-2017-010: Fix cdr_object_update_party_b_userfield_cb() buf overrun cdr_object_update_party_b_userfield_cb() could overrun the fixed buffer if the supplied string is too long. The long string could be supplied by external means using the CDR(userfield) function. This may seem reminiscent to AST-2017-001 (ASTERISK_26897) and it is. The earlier patch fixed the buffer overrun for Party A's userfield while this patch fixes the same thing for Party B's userfield. ASTERISK-27337 Change-Id: I0fa767f65ecec7e676ca465306ff9e0edbf3b652 2017-09-19 16:09 +0000 Asterisk Development Team * asterisk certified/13.13-cert6 Released. 2017-08-25 17:05 +0000 [88c8e8a11c] Richard Mudgett * AST-2017-008: Improve RTP and RTCP packet processing. Validate RTCP packets before processing them. * Validate that the received packet is of a minimum length and apply the RFC3550 RTCP packet validation checks. * Fixed potentially reading garbage beyond the received RTCP record data. * Fixed rtp->themssrc only being set once when the remote could change the SSRC. We would effectively stop handling the RTCP statistic records. * Fixed rtp->themssrc to not treat a zero value as special by adding rtp->themssrc_valid to indicate if rtp->themssrc is available. ASTERISK-27274 Make strict RTP learning more flexible. Direct media can cause strict RTP to attempt to learn a remote address again before it has had a chance to learn the remote address the first time. Because of the rapid relearn requests, strict RTP could latch onto the first remote address and fail to latch onto the direct media remote address. As a result, you have one way audio until the call is placed on and off hold. The new algorithm learns remote addresses for a set time (1.5 seconds) before locking the remote address. In addition, we must see a configured number of remote packets from the same address in a row before switching. * Fixed strict RTP learning from always accepting the first new address packet as the new stream. * Fixed strict RTP to initialize the expected sequence number with the last received sequence number instead of the last transmitted sequence number. * Fixed the predicted next sequence number calculation in rtp_learning_rtp_seq_update() to handle overflow. ASTERISK-27252 Change-Id: Ia2d3aa6e0f22906c25971e74f10027d96525f31c 2017-09-01 05:17 +0000 [67b1b028a1] George Joseph * stasis/control: Fix possible deadlock with swap channel If an error occurs during a bridge impart it's possible that the "bridge_after" callback might try to run before control_swap_channel_in_bridge has been signalled to continue. Since control_swap_channel_in_bridge is holding the control lock and the callback needs it, a deadlock will occur. * control_swap_channel_in_bridge now only holds the control lock while it's actually modifying the control structure and releases it while the bridge impart is running. * bridge_after_cb is now tolerant of impart failures. Change-Id: Ifd239aa93955b3eb475521f61e284fcb0da2c3b3 2017-08-31 15:48 +0000 Asterisk Development Team * asterisk certified/13.13-cert5 Released. 2017-07-01 19:24 +0000 [7ca7306012] Corey Farrell * AST-2017-006: Fix app_minivm application MinivmNotify command injection An admin can configure app_minivm with an externnotify program to be run when a voicemail is received. The app_minivm application MinivmNotify uses ast_safe_system() for this purpose which is vulnerable to command injection since the Caller-ID name and number values given to externnotify can come from an external untrusted source. * Add ast_safe_execvp() function. This gives modules the ability to run external commands with greater safety compared to ast_safe_system(). Specifically when some parameters are filled by untrusted sources the new function does not allow malicious input to break argument encoding. This may be of particular concern where CALLERID(name) or CALLERID(num) may be used as a parameter to a script run by ast_safe_system() which could potentially allow arbitrary command execution. * Changed app_minivm.c:run_externnotify() to use the new ast_safe_execvp() instead of ast_safe_system() to avoid command injection. * Document code injection potential from untrusted data sources for other shell commands that are under user control. ASTERISK-27103 Change-Id: I7552472247a84cde24e1358aaf64af160107aef1 2017-05-22 10:36 +0000 [1724a8c98f] Joshua Colp * res_rtp_asterisk: Only learn a new source in learn state. This change moves the logic which learns a new source address for RTP so it only occurs in the learning state. The learning state is entered on initial allocation of RTP or if we are told that the remote address for the media has changed. While in the learning state if we continue to receive media from the original source we restart the learning process. It is only once we receive a sufficient number of RTP packets from the new source that we will switch to it. Once this is done the closed state is entered where all packets that do not originate from the expected source are dropped. The learning process has also been improved to take into account the time between received packets so a flood of them while in the learning state does not cause media to be switched. Finally RTCP now drops packets which are not for the learned SSRC if strict RTP is enabled. ASTERISK-27013 Change-Id: I56a96e993700906355e79bc880ad9d4ad3ab129c 2017-07-11 07:26 +0000 [b189f8c5cf] George Joseph * res_musiconhold: Add kill_escalation_delay, kill_method to class By default, when res_musiconhold reloads or unloads, it sends a HUP signal to custom applications (and all descendants), waits 100ms, then sends a TERM signal, waits 100ms, then finally sends a KILL signal. An application which is interacting with an external device and/or spawns children of its own may not be able to exit cleanly in the default times, expecially if sent a KILL signal, or if it's children are getting signals directly from res_musiconhoild. * To allow extra time, the 'kill_escalation_delay' class option can be used to set the number of milliseconds res_musiconhold waits before escalating kill signals, with the default being the current 100ms. * To control to whom the signals are sent, the "kill_method" class option can be set to "process_group" (the default, existing behavior), which sends signals to the application and its descendants directly, or "process" which sends signals only to the application itself. Change-Id: Iff70a1a9405685a9021a68416830c0db5158603b 2017-06-29 18:27 +0000 [aa10dd31d0] Richard Mudgett * pjsip_distributor.c: Fix deadlock with TCP type transports. When a SIP message comes in on a transport, pjproject obtains the lock on the transport and pulls the data out of the socket. Unlike UDP, the TCP transport does not allow concurrent access. Without concurrency the transport lock is not released when the transport's message complete callback is called. The processing continues and eventually Asterisk starts processing the SIP message. The first thing Asterisk tries to do is determine the associated dialog of the message to determine the associated serializer. To get the associated serializer safely requires us to get the dialog lock. To send a request or response message for a dialog, pjproject obtains the dialog lock and then obtains the transport lock. Deadlock can result because of the opposite order the locks are obtained. * Fix the deadlock by obtaining the serializer associated with the dialog another way that doesn't involve obtaining the dialog lock. In this case, we use an ao2 container to hold the associated endpoint and serializer. The new locks are held a brief time and won't overlap other existing lock times. ASTERISK-27090 #close Change-Id: I9ed63f4da9649e9db6ed4be29c360968917a89bd 2017-06-29 14:50 +0000 [ef4a035371] George Joseph * chan_pjsip: Fix ability to send UPDATE on COLP When connected_line_method is "invite", we're supposed to determine if the client can support UPDATE and if it can, send UPDATE instead of INVITE to avoid the SDP renegotiation. Not only was pjproject not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing that invite_tsx wasn't NULL which isn't always the case. * Updated chan_pjsip/update_connected_line_information to drop the requirement that invite_tsx isn't NULL. * Submitted patch to pjproject sip_inv.c that sets the PJSIP_INV_SUPPORT_UPDATE flag correctly. * Updated pjsip.conf.sample to clarify what happens when "invite" is specified. ASTERISK-27095 Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560 2017-06-20 15:41 +0000 [89aabfe10b] Kevin Harwell * core_local: local channel data not being properly unref'ed and unlocked In an earlier version of Asterisk a local channel [un]lock all functions were added in order to keep a crash from occurring when a channel hung up too early during an attended transfer. Unfortunately, when a transfer failure occurs and depending on the timing, the local channels sometime do not get properly unlocked and deref'ed after being locked and ref'ed. This happens because the underlying local channel structure gets NULLed out before unlocking. This patch reworks those [un]lock functions and makes sure the values that get locked and ref'ed later get unlocked and deref'ed. ASTERISK-27074 #close Change-Id: Ice96653e29bd9d6674ed5f95feb6b448ab148b09 2017-06-20 16:01 +0000 [9dcac3b7e3] Kevin Harwell * bridge: stuck channel(s) after failed attended transfer If an attended transfer failed it was possible for some of the channels involved to get "stuck" because Asterisk was not hanging up the transfer target. This patch ensures Asterisk hangs up the transfer target when an attended transfer failure occurs. ASTERISK-27075 #close Change-Id: I98a6ecd92d3461ab98c36f0d9451d23adaf3e5f9 2017-06-13 14:17 +0000 [adfdfdee61] Kevin Harwell * res_pjsip_refer/session: Calls dropped during transfer When doing an attended transfer it's possible for the transferer, after receiving an accepted response from Asterisk, to send a BYE to Asterisk, which can then be processed before Asterisk has time to start and/or complete the transfer process. This of course causes the transfer to not complete successfully, thus dropping the call. This patch makes it so any BYEs received from the transferer, after the REFER, that initiate a session end are deferred until the transfer is complete. This allows the channel that would have otherwise been hung up by Asterisk to remain available throughout the transfer process. ASTERISK-27053 #close Change-Id: I43586db79079457d92d71f1fd993be9a3b409d5a 2017-05-19 20:45 +0000 Asterisk Development Team * asterisk certified/13.13-cert4 Released. 2017-04-13 11:14 +0000 [7e8b57db67] gtjoseph * AST-2017-004: chan_skinny: Add EOF check in skinny_session The while(1) loop in skinny_session wasn't checking for EOF so a packet that was longer than a header but still truncated would spin the while loop infinitely. Not only does this permanently tie up a thread and drive a core to 100% utilization, the call of ast_log() in such a tight loop eats all available process memory. Added poll with timeout to top of read loop ASTERISK-26940 #close Reported-by: Sandro Gauci Change-Id: I2ce65f3c5cb24b4943a9f75b64d545a1e2cd2898 2017-04-13 17:17 +0000 [d0e628e792] Mark Michelson * AST-2017-003: Handle zero-length body parts correctly. ASTERISK-26939 #close Change-Id: I7ea235ab39833a187db4e078f0788bd0af0a24fd 2017-04-13 17:16 +0000 [14e57ba5b5] Mark Michelson * AST-2017-002: Ensure transaction key buffer is large enough. ASTERISK-26938 #close Change-Id: I266490792fd8896a23be7cb92f316b7e69356413 2017-04-04 12:37 +0000 Asterisk Development Team * asterisk certified/13.13-cert3 Released. 2017-03-27 09:03 +0000 [d91f264721] Corey Farrell * CDR: Protect from data overflow in ast_cdr_setuserfield. ast_cdr_setuserfield wrote to a fixed length field using strcpy. This could result in a buffer overrun when called from chan_sip or func_cdr. This patch adds a maximum bytes written to the field by using ast_copy_string instead. ASTERISK-26897 #close patches: 0001-CDR-Protect-from-data-overflow-in-ast_cdr_setuserfie.patch submitted by Corey Farrell (license #5909) Change-Id: Ib23ca77e9b9e2803a450e1206af45df2d2fdf65c 2017-03-14 09:27 +0000 [563b639e5a] Robert Mordec * app_queue: Member stuck as pending after forwarding previous call from queue Queue member will get stuck in pending_members if queue calls a device that is different from the one observed for state changes. This patch removes members from pending_members as a result of channel stasis events such as blind or attended transfers and hangup. ASTERISK-26862 #close Change-Id: I8bf6df487b9bb35726c08049ff25cdad5e357727 2017-03-07 18:43 +0000 Asterisk Development Team * asterisk certified/13.13-cert2 Released. 2016-11-15 15:01 +0000 [44cac45610] Alexei Gradinari * chan_pjsip: fix switching sending codec when asymmetric_rtp_codec=no The sending codec is switched to the receiving codec and then is switched back to the best native codec on EVERY receiving RTP packets. This is because after call of ast_channel_set_rawwriteformat there is call of ast_set_write_format which calls set_format which sets rawwriteformat to the best native format. This patch adds a new function ast_set_write_format_path which set specific write path on channel and uses this function to switch the sending codec. ASTERISK-26603 #close Change-Id: I5b7d098f8b254ce8f45546e6c36e5d324737f71d (cherry picked from commit cf6d13180effc92a2483dccc68f2f188689a40fa) 2017-02-13 17:11 +0000 [0d7f99a087] Richard Mudgett * pjproject: Fixes to resolve DNS SRV crashes. * Re #1945 (misc): Don't trigger SRV complete callback when there is a parse error. * srv_resolver.c: Don't try to send query if already considered resolved. ** In resolve_hostnames() don't try to resolve a query that is already considered resolved. ** In resolve_hostnames() fix DNS typo in comments. ** In build_server_entries() move a common expression assigning to cnt earlier. * sip_transport.c: Fix tdata object name to actually contain the pointer. It helps if the logs referencing a tdata object buffer actually have a name that includes the correct pointer as part of the name. Also since the tdata has its own pool it helps if any logs referencing the pool have the same name as the tdata object. This change brings tdata logging in line with how tsx objects are named. ASTERISK-26669 #close ASTERISK-26738 #close Change-Id: I56af2ded25476b3e870ca586ee69ed6954ef75af 2017-02-20 13:38 +0000 [35881858db] Richard Mudgett * pjproject: Increase SENDER_WIDTH column size for 64-bit system logs. ASTERISK-26669 ASTERISK-26738 Change-Id: Ibae6fc8cae69a1f04df0c577c4c11200499d6fe0 2017-02-06 14:26 +0000 [0d4412f2b3] Richard Mudgett * pjsip_distributor.c: Update some debug messages to get transaction name. * Removed overloaded unmatched response ignore. We obviously sent the request so we shouldn't ignore it because it isn't new work. ASTERISK-26669 ASTERISK-26738 Change-Id: I55fb5cadc83a8e6699b347c6dc7fa32c5a617d37 2017-02-04 16:00 +0000 [4af241ab60] Richard Mudgett * res_pjsip: Record the serializer earlier on the tdata. When PJPROJECT needs to do a DNS resolution and there is not a cached entry available, the SIP request message goes out on the PJSIP monitor thread instead of the original serializer thread. Thus when the response comes back it does not get processed by the original sending serializer. This patch records the serializer on tdata before passing a request message to PJPROJECT where it can in Asterisk code. There are several places in PJPROJECT for outbound registration and publishing support that would need to record the serializer. Unfortunately, without replacing the PJPROJECT DNS resolver as was done in v14 we cannot fix those without modifying PJPROJECT. Even if we backported the DNS resolver from v14, the outbound registration refresh timer does not go out on a serializer thread but the PJSIP monitor thread. Fortunately, Asterisk's outbound publish support doesn't use the auto refresh timer that would also not go out under the serializer thread. This patch is v13 only. ASTERISK-26669 ASTERISK-26738 Change-Id: I9997b9ed6dbcebd2c37d6a67dc6dcee9c78914a4 2017-02-13 19:25 +0000 Asterisk Development Team * asterisk certified/13.13-cert1 Released. 2017-02-08 12:58 +0000 [0ef6b6960d] gtjoseph * Update for certified/13.13-cert1-rc4 2017-02-08 11:50 +0000 [7603c4f32b] Mark Michelson * Revert "Update qualifies when AOR configuration changes." This reverts commit 6492e91392b8fd394193e411c6eb64b45486093f. The change in question was intended to prevent the need to reload in order to update qualifies on contacts when an AOR changes. However, this ended up causing a deadlock instead. Change-Id: I1a835c90a5bb65b6dc3a1e94cddc12a4afc3d71e 2017-02-03 13:58 +0000 [47febcb927] Mark Michelson * Update for certified/13.13-cert1-rc3 2017-01-31 18:28 +0000 [5c90c1e9f5] Richard Mudgett * channel.c: Fix unbalanced read queue deadlocking local channels. Using the timerfd timing module can cause channel freezing, lingering, or deadlock issues. The problem is because this is the only timing module that uses an associated alert-pipe. When the alert-pipe becomes unbalanced with respect to the number of frames in the read queue bad things can happen. If the alert-pipe has fewer alerts queued than the read queue then nothing might wake up the thread to handle received frames from the channel driver. For local channels this is the only way to wake up the thread to handle received frames. Being unbalanced in the other direction is less of an issue as it will cause unnecessary reads into the channel driver. ASTERISK-26716 is an example of this deadlock which was indirectly fixed by the change that found the need for this patch. * In channel.c:__ast_queue_frame(): Adding frame lists to the read queue did not add the same number of alerts to the alert-pipe. Correspondingly, when there is an exceptionally long queue event, any removed frames did not also remove the corresponding number of alerts from the alert-pipe. ASTERISK-26632 #close Change-Id: Ia98137c5bf6e9d6d202ce0eb36441851875863f6 2017-01-31 16:38 +0000 [5c2b7e34ff] Richard Mudgett * res_agi: Prevent an AGI from eating frames it should not. (Re-do) A dialplan intercept routine is equivalent to an interrupt routine. As such, the routine must be done quickly and you do not have access to the media stream. These restrictions are necessary because the media stream is the responsibility of some other code and interfering with or delaying that processing is bad. A possible future dialplan processing architecture change may allow the interception routine to run in a different thread from the main thread handling the media and remove the execution time restriction. * Made res_agi.c:run_agi() running an AGI in an interception routine run in DeadAGI mode. No touchy channel frames. ASTERISK-25951 ASTERISK-26343 ASTERISK-26716 Change-Id: I638f147ca7a7f2590d7194a8ef4090eb191e4e43 2017-01-31 16:32 +0000 [7d291e9ef7] Richard Mudgett * Frame deferral: Revert API refactoring. There are several issues with deferring frames that are caused by the refactoring. 1) The code deferring frames mishandles adding a deferred frame to the deferred queue. As a result the deferred queue can only be one frame long. 2) Deferrable frames can come directly from the channel driver as well as the read queue. These frames need to be added to the deferred queue. 3) Whoever is deferring frames is really only doing the __ast_read() to collect deferred frames and doesn't care about the returned frames except to detect a hangup event. When frame deferral is completed we must make the normal frame processing see the hangup as a frame anyway. As such, there is no need to have varying hangup frame deferral methods. We also need to be aware of the AST_SOFTHANGUP_ASYNCGOTO hangup that isn't real. That fake hangup is to cause the PBX thread to break out of loops to go execute a new dialplan location. 4) To properly deal with deferrable frames from the channel driver as pointed out by (2) above, means that it is possible to process a dialplan interception routine while frames are deferred because of the AST_CONTROL_READ_ACTION control frame. Deferring frames is not implemented as a re-entrant operation so you could have the unsupported case of two sections of code thinking they have control of the media stream. A worse problem is because of the bad implementation of the AMI PlayDTMF action. It can cause two threads to be deferring frames on the same channel at the same time. (ASTERISK_25940) * Rather than fix all these problems simply revert the API refactoring as there is going to be only autoservice and safe_sleep deferring frames anyway. ASTERISK-26343 ASTERISK-26716 #close Change-Id: I45069c779aa3a35b6c863f65245a6df2c7865496 2017-01-10 17:37 +0000 [640d3b21d1] Richard Mudgett * astobj2.c: Add excessive ref count trap. Change-Id: I32e6a589cf9009450e4ff7cb85c07c9d9ef7fe4a 2017-01-31 11:17 +0000 [107c8a7e19] Joshua Colp * res_pjsip: Handle invocation of callback on outgoing request when error occurs. There are some error cases in PJSIP when sending a request that will result in the callback for the request being invoked. The code did not handle this case and assumed on every error case that the callback was not invoked. The code has been changed to check whether the callback has been invoked and if so to absorb the error and treat it as a success. ASTERISK-26679 ASTERISK-26699 Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91 2017-02-01 13:54 +0000 [3eb5f42090] Mark Michelson * Update qualifies when AOR configuration changes. Prior to this change, qualifies would only update in the following cases: * A reload of res_pjsip.so was issued. * A dynamic contact was re-registered after its AOR's qualify_frequency had been changed This does not work well if you are using realtime for your AORs. You can update your database to have a new qualify_frequency, but the permanent contacts on that AOR will not have their qualifies updated. And the dynamic contacts on that AOR will not have their qualifies updated until the next registration, which could be a long time. This change seeks to fix this problem by making it so that whenever AOR configuration is applied, the contacts pertaining to that AOR have their qualifies updated. Additions from this patch: * AOR sorcery objects now have an apply handler that calls into a newly added function in the OPTIONS code. This causes all contacts associated with that AOR to re-schedule qualifies. * When it is time to qualify a contact, the OPTIONS code checks to see if the AOR can still be retrieved. If not, then qualification is canceled on the contact. Alterations from this patch: * The registrar code no longer updates contact's qualify_frequence and qualify_timeout. There is no point to this since those values already get updated when the AOR changes. * Reloading res_pjsip.so no longer calls the OPTIONS initialization function. Reloading res_pjsip.so results in re-loading AORs, which results in re-scheduling qualifies. Change-Id: I2e7c3316da28f389c45954f24c4e9389abac1121 2017-01-31 12:46 +0000 [0611290911] gtjoseph * debug_utilities: Install ast_logescalator to /var/lib/asterisk/scripts Forgot to install it with the original patch Change-Id: I8bdb540a6694971ae5fe21f48d532332c6482e4c 2017-01-25 06:50 +0000 [805928c98b] gtjoseph * debug_utilities: Add ast_logescalator The escalator works by creating a set of startup commands in cli.conf that set up logger channels and issue the debug commands for the subsystems specified. If asterisk is running when it is executed, the same commands will be issued to the running instance. The original cli.conf is saved before any changes are made and can be restored by executing '$prog --reset'. The log output will be stored in... $astlogdir/message.$uniqueid $astlogdir/debug.$uniqueid $astlogdir/dtmf.$uniqueid $astlogdir/fax.$uniqueid $astlogdir/security.$uniqueid $astlogdir/pjsip_history.$uniqueid $astlogdir/sip_history.$uniqueid Some minor tweaks were made to chan_sip, and res_pjsip_history so their history output could be send to a log channel as packets are captured. A minor tweak was also made to manager so events are output to verbose when "manager set debug on" is issued. Change-Id: I799f8e5013b86dc5282961b27383d134bf09e543 2017-01-25 15:26 +0000 [1997157e7e] Mark Michelson * Add reload options to CLI/AMI stale object commands. Marking an object as stale in a memory cache is supposed to prime the cache so that the next time the item is retrieved, the stale item is deleted from the cache and a background task is run to re-populate the cache with a fresh version of the object. The problem is, there are some object types out there for which there is no natural reason that they would be retrieved from the backend with any regularity. Outbound PJSIP registrations are a good example of this. At startup, they are read, and an object-specific state is created that refers to the initially-retrieved object for all time. Adding the "reload" option to the CLI/AMI commands gives the cache the opportunity to manually re-retrieve the object from the backend, both storing the new object in the cache and applying the new object's configuration to the module that uses that object. Change-Id: Ieb1fe7270ceed491f057ec5cbf0e097bde96c5c8 2016-12-09 12:23 +0000 [92bdcfd57e] Martin Tomec * app_queue: Ensure member is removed from pending when hanging up. In some cases member is added to pending_members, and the channel is hung up before any extension state change. So the member would stay in pending_members forever. So when we call do_hang, we should also remove member from pending. ASTERISK-26621 #close Change-Id: Iae476b5c06481db18ebe0fa594b3e80fdc9a7d54 (cherry picked from commit d13be4eff699449172efbd9fed0ee97f6a790b6a) 2017-01-20 21:13 +0000 [9a4434eb74] Richard Mudgett * PJPROJECT logging: Fix detection of max supported log level. The mechanism used for detecting the maximum log level compiled into the linked pjproject did not work. The API call simply stores the requested level into an integer and does no range checking. Asterisk was assuming that there was range checking and limited the new value to the allowable range. To get the actual maximum log level compiled into the linked pjproject we need to get and save off the initial set log level from pjproject. This is the maximum log level supported. * Get and save off the initial log level setting before altering it to the desired level on startup. This has to be done by a macro rather than calling a core function to avoid incorrectly linking pjproject. * Split the initial log level warning messages to warn if the linked pjproject cannot support the requested startup level and if it is too low to get the pjproject buildopts for "pjproject show buildopts". * Adjust the CLI "pjproject set log level" to check the saved max log level and to generate normal output messages instead of a warning message. ASTERISK-26743 #close Change-Id: I40aa76653e2a1dece66c3f8734594b4f0471cfb4 2017-01-19 09:05 +0000 [6b0d734312] gtjoseph * ari: Implement 'debug all' and request/response logging The 'ari set debug' command has been enhanced to accept 'all' as an application name. This allows dumping of all apps even if an app hasn't registered yet. To accomplish this, a new global_debug global variable was added to res/stasis/app.c and new APIs were added to set and query the value. 'ari set debug' now displays requests and responses as well as events. This required refactoring the existing debug code. * The implementation for 'ari set debug' was moved from stasis/cli.{c,h} to ari/cli.{c,h}, and stasis/cli.{c,h} were deleted. * In order to print the body of incoming requests even if a request failed, the consumption of the body was moved from the ari stubs to ast_ari_callback in res_ari.c and the moustache templates were then regenerated. The body is now passed to ast_ari_invoke and then on to the handlers. This results in code savings since that template was inserted multiple times into all the stubs. An additional change was made to the ao2_str_container implementation to add partial key searching and a sort function. The existing cli code assumed it was already there when it wasn't so the tab completion was never working. Change-Id: Ief936f747ce47f1fb14035fbe61152cf766406bf 2017-01-23 09:10 +0000 [28733bb0ab] gtjoseph * pjproject_bundled: Fix setting max log level An earlier attempt to prevent pjsua from spitting out an extra 6795 lines of debug output every time the testsuite called it was also turning off the ability for asterisk to output debug info when it needed to. This patch reverts the earlier fix and instead adds a pjproject patch that sets the startup log level to 1 for pjsua pjsystest and the pjsua python binding. This is an asterisk-only patch that does not affect pjproject functionality and will not be submitted upstream. Change-Id: I347a8b58b2626f2906ccfc1d339e907627a0c9e8 2017-01-13 11:03 +0000 [0d2f17b22c] gtjoseph * debug_utilities: Create ast_loggrabber ast_loggrabber gathers log files from customizable search patterns, optionally converts POSIX timestamps to a readable format and tarballs the results. Also a few tweaks were made to ast_coredumper. Change-Id: I8bfe1468ada24c1344ce4abab7b002a59a659495 (cherry picked from commit 5fa1c56d7e76999aa14f133a33f6b168e7c3b99c) 2017-01-19 13:18 +0000 [92876c1c2a] Mark Michelson * Update for certified/13.13-cert1-rc2 2017-01-08 10:29 +0000 [52bee5df9e] gtjoseph * pjproject_bundled: Fix compilation with MALLOC_DEBUG When MALLOC_DEBUG was specified, make was failing. Immediately remaking would work. The issues was in the ordering of the make dependencies. Change-Id: If6030b54fc693f3179f32bfd20c6b5d5f1b3f7cd (cherry picked from commit f8cd73ec3c159f2e6c464952c92d8fdb69394371) 2017-01-03 15:14 +0000 [08857b6e0e] gtjoseph * pjproject_bundled: Compile pjsua with max log level = 2 A while back, we changed config_site.h to set PJ_LOG_MAX_LEVEL = 6. This allowed us to control the log level better from inside Asterisk. An unfortunate side effect of this was that the pjsua binary and python bindings were also compiled with log level set to 6 so whenever a testsuite test that uses pjsua runs, it spits out 6795 lines of debug in an instant even before the test starts. I believe this overruns the Jenkins capture buffer and prevents the test from properly terminating. In turn, this results in the testsuite just hanging until the job is killed. It's more frequent on the higher end agents because they can spit out the messages faster. Unfortunately, the messages are all spit out before we have control of the python pj.Lib instance where we can set logging levels so the only alternative was to actually compile pjsua and _pjsua.so with an overridden PJ_LOG_MAX_LEVEL. Although defining a lower max level was done in the Makefile, the define in config_site.h had to be wrapped with "#ifndef" so the change would take effect. Change-Id: I2af9e7d48dde1927279c586c9c725d868fe6f3ff (cherry picked from commit d7e5a747c312de18647213359103ce6022776864) 2016-12-18 15:23 +0000 [7aacc0fc7f] gtjoseph * pjproject_bundled: Make build single threaded There were just too many issues in various environments with multi threaded building of pjproject. It doesn't really speed things up anyway since asterisk is already being compiled in parallel. Change-Id: Ie5648fb91bb89b4224b6bf43a0daa1af793c4ce1 (cherry picked from commit 815f7551550908c83220196ba08742af0c745772) 2016-11-23 18:27 +0000 [3a8a42b404] Richard Mudgett * PJPROJECT logging: Made easier to get available logging levels. Use of the new logging is as simple as issuing the new CLI command or setting the new pjproject.conf option. Other options that can affect the logging are how you have the pjproject log levels mapped to Asterisk log types in pjproject.conf and if you have configured Asterisk to log the DEBUG type messages. Altering the pjproject.conf level mapping shouldn't be necessary for most installations as the default mapping is sensible. Configuring Asterisk to log the DEBUG message type is standard practice for collecting debug information. * Added CLI "pjproject set log level" command to dynamically adjust the maximum pjproject log message level. * Added CLI "pjproject show log level" command to see the currently set maximum pjproject log message level. * Added pjproject.conf startup section "log_level" option to set the initial maximum pjproject log message level so all messages could be captured from initialization. * Set PJ_LOG_MAX_LEVEL to 6 to compile in all defined logging levels into bundled pjproject. Pjproject will use the currently set run time log level to determine if a log message is generated just like Asterisk verbose and debug logging levels. * In log_forwarder(), made always log enabled and mapped pjproject log messages. DEBUG mapped log messages are no longer gated by the current Asterisk debug logging level. * Removed RAII_VAR() from res_pjproject.c:get_log_level(). ASTERISK-26630 #close Change-Id: I6dca12979f482ffb0450aaf58db0fe0f6d2e5389 2017-01-10 18:10 +0000 [8e5e3c2b0c] gtjoseph * debug_utilities: Create the ast_coredumper utility This utility allows easy manipulation of asterisk coredumps. * Configurable search paths and patterns for existing coredumps * Can generate a consistent coredump from the running instance * Can dump the lock_infos table from a coredump * Dumps backtraces to separate files... - thread apply 1 bt full -> .thread1.txt - thread apply all bt -> .brief.txt - thread apply all bt full -> .full.txt - lock_infos table -> .locks.txt * Can tarball corefiles and optionally delete them after processing * Can tarball results files and optionally delete them after processing * Converts ':' in coredump and results file names '-' to facilitate uploading. Jira for instance, won't accept file names with colons in them. Tested on Fedora24+, Ubuntu14+, Debian6+, CentOS6+ and FreeBSD9+[1]. [1] For *BSDs, the "devel/gdb" package might have to be installed to get a recent gdb. The utility will check all instances of gdb it finds in $PATH and if one isn't found that can run python, it prints a friendly error. Change-Id: I935d37ab9db85ef923f32b05579897f0893d33cd (cherry picked from commit 47474cfd54a9185c1433464ccfd6301427a03957) 2016-12-22 16:00 +0000 [cedf8a21a1] Joshua Colp * chan_pjsip: Use session for retrieving CHANNEL() information. The CHANNEL() dialplan function implementation for PJSIP allows querying of PJSIP specific information. This used the channel passed in to get the PJSIP session and associated information. It is possible for this channel to be masqueraded and end up as a different channel type by the time the information request is actually acted upon. This change retrieves the PJSIP session safely and accesses data from it (including channel). This provides a guarantee that the session and channel will not be altered when the request is being acted upon. ASTERISK-26673 Change-Id: I335e12b89e1820cafdd92b3e7526b8ba649eb7e6 2016-12-23 12:10 +0000 [92235dba88] Richard Mudgett * bridge_native_rtp.c: Fix native rtp bridge data race. native_rtp_bridge_compatible() didn't lock the bridge channels before checking the channels for native bridging ability. As a result, one of the channel's native format capabilities structure got replaced out from under the native bridge check. Use of a stale pointer to freed memory causes bad things to happen. MALLOC_DEBUG, DO_CRASH, and the tests/channels/pjsip/transfers/blind_transfer/caller_direct_media testsuite test caught this. * Add missing channel locking in native_rtp_bridge_compatible(). Change-Id: If25fdb3ac8e85563c4857fb8216b3d9dc3d0fa53 2016-12-21 16:28 +0000 [d8747659f0] Richard Mudgett * res_rtp_asterisk.c: Fix uninitialized memory crash. ast_rtp_remote_address_set() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor(). * Optimized out the 'us' struct variable. ASTERISK-26672 #close Change-Id: I4acea5dcdf0813da2c7d3e11c2d6067d160d17dc 2016-12-21 17:54 +0000 [a9400da2d3] Richard Mudgett * chan_rtp.c: Fix uninitialized memory crash. unicast_rtp_request() could pass an uninitialized 'us' parameter to ast_ouraddrfor(). If ast_ouraddrfor() returns an error then the 'us' parameter may not get initialized. Thus when the code tries to save the 'us' parameter to the local address we could try to copy a ridiculous sized memory buffer and segfault. * Made pass an initialized 'us' parameter to ast_ouraddrfor() and abort the UnicastRTP channel request if it fails. ASTERISK-26672 Change-Id: I1ef7a7c09f4da4f15dcb6de660d2bcac5f2a95c0 2016-12-21 17:55 +0000 [a2c695cd18] Richard Mudgett * res_rtp_asterisk.c: Initialize ourip passed to ast_find_ourip(). We access uninitialized memory when the 'ourip' parameter does not have an initial guess to our IP address. ASTERISK-26672 Change-Id: I35507ea1ad7455d2be188f6ccdd4add7bd150e15 2016-12-21 16:25 +0000 [a3502c1885] Richard Mudgett * acl.c: Improve ast_ouraddrfor() diagnostic messages. * Made not generate strings unless they will actually be used. ASTERISK-26672 Change-Id: I155fbe7fdff5ce47dfe5326f3baf5446849702c3 2016-12-14 14:21 +0000 [a3da3bb406] Richard Mudgett * chan_dahdi.c: Fix bounds check regression. Caused by ASTERISK-25494 Change-Id: I1fc408c1a083745ff59da5c4113041bbfce54bcb 2016-12-13 14:34 +0000 [1bb47bc3b0] Richard Mudgett * res_pjsip: Add/update ERROR msg if invalid URI. ASTERISK-24499 Change-Id: Ie305153e47e922233b2ff24715e0e326e5fa3a6c 2016-12-12 18:38 +0000 [ee9c8d0c97] Richard Mudgett * MESSAGE: Flush Message/ast_msg_queue channel alert pipe. ASTERISK-25083 Change-Id: Id54baa57a8dbca84e29f28bcd2ffc0a5ac12d8b2 2016-12-13 14:06 +0000 [a209faa94f] gtjoseph * res_sorcery_memory_cache: Change an error to a debug message When a sorcery user calls ast_sorcery_delete on an object that may have already expired from the cache, res_sorcery_memory_cache spits out an ERROR. Since this can happen frequently and validly when an inbound registration expires after the cache entry expired, the errors are unnecessary and misleading. Changed to a debug/1. Change-Id: Idf3a67038c16e3da814cf612ff4d6d18ad29ecd7 2016-11-30 09:31 +0000 [2021b5380d] Walter Doekes * chan_sip: Do not allow non-SP/HTAB between header key and colon. RFC says SIP headers look like: HCOLON = *( SP / HTAB ) ":" SWS SWS = [LWS] ; sep whitespace LWS = [*WSP CRLF] 1*WSP ; linear whitespace WSP = SP / HTAB ; from rfc2234 chan_sip implemented this: HCOLON = *( LOWCTL / SP ) ":" SWS LOWCTL = %x00-1F ; CTL without DEL This discrepancy meant that SIP proxies in front of Asterisk with chan_sip could pass on unknown headers with \x00-\x1F in them, which would be treated by Asterisk as a different (known) header. For example, the "To\x01:" header would gladly be forwarded by some proxies as irrelevant, but chan_sip would treat it as the relevant "To:" header. Those relying on a SIP proxy to scrub certain headers could mistakenly get unexpected and unvalidated data fed to Asterisk. This change fixes so chan_sip only considers SP/HTAB as valid tokens before the colon, making it agree on the headers with other speakers of SIP. ASTERISK-26433 #close AST-2016-009 Change-Id: I78086fbc524ac733b8f7f78cb423c91075fd489b 2016-11-14 18:18 +0000 [d27eae001d] Joshua Colp * res_format_attr_opus: Fix crash when fmtp contains spaces. When an opus offer or answer was received that contained an fmtp line with spaces between the attributes the module would fail to properly parse it and crash due to recursion. This change makes the module handle the space properly and also removes the recursion requirement. ASTERISK-26579 Change-Id: I01f53e5d9fa9f1925a7365f8d25071b5b3ac2dc3 2016-12-06 14:54 +0000 [f243f7fb4b] gtjoseph * res_pjsip_registrar: AMI Add RegistrationInboundContactStatuses command The PJSIPShowRegistrationsInbound AMI command was just dumping out all AORs which was pretty useless and resource heavy since it had to get all endpoints, then all aors for each endpoint, then all contacts for each aor. PJSIPShowRegistrationInboundContactStatuses sends ContactStatusDetail events which meets the intended purpose of the other command and has significantly less overhead. Also, some additional fields that were added to Contact since the original creation of the ContactStatusDetail event have been added to the end of the event. For compatibility purposes, PJSIPShowRegistrationsInbound is left intact. ASTERISK-26644 #close Change-Id: I326f12c9ecb52bf37ba03f0748749de4da01490a 2016-12-06 16:45 +0000 [c7c2db5a29] Richard Mudgett * Bundled pjproject: Fix finding SIP transactions. Occasionally SIP message transactions are not found when they should be. In the particular case an incoming INVITE transaction is CANCELed but the INVITE transaction cannot be found so a 481 response is returned for the CANCEL. The problematic calls have a '_' character in the Via branch parameter. The problem is in the pjproject PJ_HASH_USE_OWN_TOLOWER feature's code. The problem with the "own tolower" code is that it does not calculate the same hash value as when the pj_tolower() function is used. The "own tolower" code will erroneously modify the ASCII characters '@', '[', '\\', ']', '^', and '_'. Calls to pj_hash_calc_tolower() can use the PJ_HASH_USE_OWN_TOLOWER substitute algorithm when enabled. Calls to pj_hash_get_lower(), pj_hash_set_lower(), and pj_hash_set_np_lower() call find_entry() which never uses the PJ_HASH_USE_OWN_TOLOWER algorithm. As a result you may not be able to find a hash tabled entry because the calculated hash values would differ. * Simply disable PJ_HASH_USE_OWN_TOLOWER. ASTERISK-26490 #close Change-Id: If89bfdb5f301b8b685881a9a2a6e0c3c5af32253 2016-12-06 12:06 +0000 [221e838b26] gtjoseph * pjproject_bundled: Fix missing inclusion of symbols Added back in a -g3, and an -O3 when DONT_OPTIMIZE is not set, to the CFLAGS. Not sure how they went missing. Also fixed an uninstall problem where we weren't removing the symlink from libasteriskpj.so.2 to libasteriskpj.so. While I was there, I fixed it for libasteriskssl as well. Change-Id: I9e00873b1e9082d05b5549d974534b48a2142556 2016-11-30 10:48 +0000 [492b37429c] Mark Michelson * Frame deferral: Re-queue deferred frames one-at-a-time. The recent change that made frame deferral into an API had a behavior change to it. When frame deferral was completed, we would take all of the deferred frames and queue them all onto the channel in one call to ast_queue_frame_head(). Before frame deferral was API-ized, places that performed manual frame deferral would actually take each deferred frame and queue them onto the channel. This change in behavior caused the confbridge_recording test to start failing consistently. Without going too crazily deep into the details, a channel was getting "stuck" in an ast_safe_sleep(). An AMI redirect was attempting to break it out of the sleep, but because there were more frames in the channel read queue than expected, the channel ended up being unable to break from its sleep loop. By restoring the behavior of individual frame queuing after deferral, the test starts passing again. Note, this points to a potential underlying issue pointing to an "unbalance" that can occur when queuing multiple frames at once, and so a follow-up issue is being created to investigate that possibility. Change-Id: Ied5dacacda06d343dea751ed5814a03364fe5a7d 2016-11-28 11:03 +0000 [d4d1909077] gtjoseph * build_tools: Fix download_externals to handle certified branches download_externals wasn't handling the "certified/13.x" version correctly. Change-Id: I124d195bb117ca36fd7bf1150c630f3b474a9d9a 2016-11-23 15:58 +0000 [33a0d64eab] Kevin Harwell * Update for certified/13.13-cert1-rc1 2016-11-23 15:20 +0000 [907160ee21] Kevin Harwell * app_talkdectect: Now core supported, enable for cert Change-Id: Ic0b2cacb21a6e11a25ebbff7e508e106ea156f6c 2016-11-23 15:01 +0000 [0cd0495732] Kevin Harwell * Disable extended support modules Change-Id: Ib6b4f9451b5b68b738d8ab07a27de1c87c28f819 2016-11-23 14:57 +0000 [854196eea9] Kevin Harwell * .version: Update for certified/13.13 Change-Id: Ia1a0f035359d88b8885c7aca22f0d70b73aeb05d 2016-11-23 09:26 +0000 [fdde690e0f] Kevin Harwell * Update for 13.13.0 2016-11-22 12:02 +0000 [f93e55d124] Kevin Harwell * Update for 13.13.0-rc2 2016-11-21 09:40 +0000 [e246b36a3c] gtjoseph * build: Backport addition of librt check to configure.ac A while back, a master-only change was made to check for librt which should probably have been cherry-picked to 13 at that time. Sometime between then and now, part of that change did make it into 13 but it was incomplete and non-functional. This patch backports the rest of the librt check and allows the link of libasteriskpj to use the results. Change-Id: I1424008fd8c90f389dda53162ec4a340b253a3c1 2016-11-22 11:20 +0000 [855f05e525] Kevin Harwell * Update for 13.13.0 2016-11-18 12:59 +0000 [751d43e8e4] Joshua Colp * Update for 13.13.0-rc1 2016-11-18 09:45 +0000 [cb624b10ae] Mark Michelson * Bump ARI version to 1.10.0 The video-related bridge changes mean that the version needs to be bumped. Change-Id: I41c4495068562bef03aa76728f188b8ac4bd393d 2016-11-17 10:50 +0000 [bde3d022a3] Mark Michelson * manager: update minor version Based on bridge video AMI event changes, bump the minor version of AMI. Change-Id: I02586bd6cafc0baa33ea98c2f75356c0f5e03435 2016-11-16 20:24 +0000 [b213045fe4] gtjoseph * build: Various OpenBSD issues OpenBSD's 'find' doesn't take the -delete argument so you have to pipe through 'xargs rm -rf'. 'echo -e' doesn't like \t starting a line. It just prints 't' which causes the libasteriskpj.exports file to be garbage. They were just cosmetic so they were removed. librt doesn't exist so the link of libasteriskpj.so fails. It's not actually needed for linux anyway so -lrt was removed from the link. res_rtp_asterisk was failing to load because of an undefined DTLS_method. '|| defined(LIBRESSL_VERSION_NUMBER)' was added to the #if so DTLSv1_method is used instead. ASTERISK-26608 Change-Id: I926ec95b0b69633231e3ad1d6e803b977272c49c 2016-11-14 18:45 +0000 [404596b790] gtjoseph * channel: Fix issues in hangup scenarios caused by frame deferral ASTERISK-26343 Change-Id: I06dbf7366e26028251964143454a77d017bb61c8 2016-11-16 15:42 +0000 [2c031b67d3] Mark Michelson * res_format_attr_opus: Fix fmtp generation. res_format_attr_opus assumed that the string being passed into it was empty. It tried to determine if the only thing it had written was a=fmtp: And if it had, it would reset the string. Its calculation was off when working with chan_sip, though. chan_sip passes the entire built SDP rather than an empty string. This resulted in always putting an empty fmtp line in the SDP. ASTERISK-26520 #close Reported by scgm11 Change-Id: Ib2e8712d26a47067e5f36d5973577added01dbb5 2016-11-15 16:23 +0000 [ed0f1afc8c] Richard Mudgett * codec_opus: Fix warning when Opus negotiated but codec_opus not loaded. When Opus is negotiated but not loaded, the log is spammed with messages because the system does not know how to calculate the number of samples in a frame. * Suppress the warning by supplying a function that assumes 20ms of samples in the frame. For pass through support it doesn't really seem to matter what number of samples is returned anyway. ASTERISK-26605 #close Change-Id: Icf2273692f040dc2c45b01e72a790d11092f9e0f 2016-11-14 14:36 +0000 [e632222bc4] Richard Mudgett * res_pjsip_outbound_authenticator_digest.c: Fix memory pool leak. Responding to authentication challenges leaks PJSIP memory pools. The leak was introduced with a pjproject 2.5.5 API change. https://trac.pjsip.org/repos/ticket/1929 changed the API usage of pjsip_auth_clt_init() to require the new API pjsip_auth_clt_deinit() to clean up cached authentication allocations that get allocated with pjsip_auth_clt_reinit_req(). ASTERISK-26516 #close Change-Id: I4473141b8c3961d0dc91c382beb3876b3efb45c8 2016-11-15 12:01 +0000 [c92dcc76da] gtjoseph * file.c/__ast_file_read_dirs: Fix issues on filesystems without d_type One of the code paths in __ast_file_read_dirs will only get executed if the OS doesn't support dirent->d_type OR if the filesystem the particular file is on doesn't support it. So, while standard Linux systems support the field, some filesystems like XFS do not. In this case, we need to call stat() to determine whether the directory entry is a file or directory so we append the filename to the supplied directory path and call stat. We forgot to truncate path back to just the directory afterwards though so we were passing a complete file name to the callback in the dir_name parameter instead of just the directory name. The logic has been re-written to only create a full_path if we need to call stat() or if we need to descend into another directory. Change-Id: I54e4228bd8355fad65200c6df3ec4c9c8a98dfba 2015-05-14 17:12 +0000 [7b96e8cc3d] Maciej Szmigiero * Add X.509 subject alternative name support to TLS certificate verification. This way one X.509 certificate can be used for hosts that can be reached under multiple DNS names or for multiple hosts. Signed-off-by: Maciej Szmigiero ASTERISK-25063 #close Change-Id: I13302c80490a0b44c43f1b45376c9bd7b15a538f 2016-11-14 15:57 +0000 [0790aa528a] Matt Jordan * pjproject: Use a much higher limit for PJ_ICE_MAX_CHECKS The PJ_ICE_MAX_CHECKS constant is used by pjproject to determine how many pairs of local/remote candidates will be made. If for some reason we reach this upper bound, ICE will generally fail and no media will flow between the browser and Asterisk. This patch makes PJ_ICE_MAX_CHECKS set to the total possible number of pairs of candidates we'd theoretically allow, which is PJ_ICE_MAX_CAND^2. Prior to this patch, we simply multiplied PJ_ICE_MAX_CAND by two; on systems with multiple interfaces (I blame Docker), this is far too low to allow WebRTC calls to succeed. Setting this to be PJ_ICE_MAX_CAND^2 allowed WebRTC calls to succeed even when the system Asterisk was running on had quite a few virtual interfaces. Change-Id: Icd4f17de0ac9d3a83dddfc8bf1cb7616bc107d55 2016-11-14 15:32 +0000 [993a6f96c7] Matt Jordan * apps/app_echo: Only relay a single video source change frame In 9785e8d0, app_echo was updated to relay video source updates to the channel for the purposes of displaying video in WebRTC tests. Unfortunately, this can cause a Kafkaesque nightmare if two or more Local channels are in a bridge together where their ends are in app_echo. When this situation occurs, a video update sent into app_echo will cause the video update to be relayed to the other Local channels, causing another round of video updates, etc. In not much time at all, the channel length queues will be overwhelmed, channel alert pipes will fail, and all hell will break loose as Asterisk merrily continues to throw more video update requests onto the channels. This patch updates app_echo to *only* relay a single video update. Once a video update has been made, all further video updates are dropped. This meets the intended purpose of the original patch: if we get a video update and we're in app_echo, go ahead and ask the sender to update themselves. However, once we've got that video stream sync'd up, don't keep spamming the world. Change-Id: I9210780b08d4c17ddb38599d1c64453adfc34f74 2016-11-08 10:11 +0000 [d23b4af477] Matt Jordan * res/ari/resource_bridges: Add the ability to manipulate the video source In multi-party bridges, Asterisk currently supports two video modes: * Follow the talker, in which the speaker with the most energy is shown to all participants but the speaker, and the speaker sees the previous video source * Explicitly set video sources, in which all participants see a locked video source Prior to this patch, ARI had no ability to manipulate the video source. This isn't important for two-party bridges, in which Asterisk merely relays the video between the participants. However, in a multi-party bridge, it can be advantageous to allow an external application to manipulate the video source. This patch provides two new routes to accomplish this: (1) setVideoSource: POST /bridges/{bridgeId}/videoSource/{channelId} Sets a video source to an explicit channel (2) clearVideoSource: DELETE /bridges/{bridgeId}/videoSource Removes any explicit video source, and sets the video mode to talk detection ASTERISK-26595 #close Change-Id: I98e455d5bffc08ea5e8d6b84ccaf063c714e6621 2016-11-14 14:22 +0000 [404a62eeee] gtjoseph * Revert "Revert "channel: Use frame deferral API for safe sleep."" This reverts commit 58c88cfbaa80cb43419cde9186d643d1c5d24baf. Change-Id: I72692e2b2e83ef6da9390075ff20b138b2c374b6 2016-11-14 14:22 +0000 [09d8febc91] gtjoseph * Revert "Revert "autoservice: Use frame deferral API"" This reverts commit 1df434e2b4bd7cc34b9b4addf405a3caa7ac16b8. Change-Id: Id2b8a8bccbb4bbdd82b792275d4cd6f32563e401 2016-11-14 14:21 +0000 [ffad2b44df] gtjoseph * Revert "Revert "AGI: Only defer frames when in an interception routine."" This reverts commit 6be5d8de0da7e804544507f70382425af9a07b3f. Change-Id: I4b548137f52ae0686d8f09e21496b778d1c6a797 2016-11-14 14:21 +0000 [2fefb6187f] gtjoseph * Revert "Revert "Add API for channel frame deferral."" This reverts commit 6b5a7ced136b7178ae0b2ba39221eba1cd2e37c9. Change-Id: I61d1dbb2e69e1977f684b7dfc8e98211024e1cd1 2016-11-14 12:16 +0000 [5e0c224043] gtjoseph * cli: Fix ast_el_read_char to work with libedit >= 3.1 Libedit 3.1 is not build with unicode on as a default and so the prototype for the el_gets callback changed from expecting a char buffer to accepting a wchar buffer. If ast_el_read_char isn't changed, the cli reads garbage from teh terminal. Added a configure test for (*el_rfunc_t)(EditLine *, wchar_t *) and updated ast_el_read_char to use the HAVE_ define to detemrine whether to use char or wchar. ASTERISK-26592 #close Change-Id: I9099b46f68e06d0202ff80e53022a2b68b08871a 2016-11-11 02:41 +0000 [3faca1d4ff] Igor Goncharovskiy * Fix closing rtp ports after call finished in chan_unistim. Fix ASTERISK-26565 by adding ast_rtp_instance_stop before rtp instance destroy for chan_unistim. Also several fixes for displayed text translation. Change-Id: If42a03eea09bd1633471406bdc829cf98bf6affc 2016-09-23 17:54 +0000 [412d43fa21] Richard Mudgett * res_pjsip.c: Rework endpt_send_request() req_wrapper code. * Don't hold the req_wrapper lock too long in endpt_send_request(). We could block the PJSIP monitor thread if the timeout timer expires. sip_get_tpselector_from_endpoint() does a sorcery access that could take awhile accessing a database. pjsip_endpt_send_request() might take awhile if selecting a transport. * Shorten the time that the req_wrapper lock is held in the callback functions. * Simplify endpt_send_request() req_wrapper->timeout code. * Removed some redundant req_wrapper->timeout_timer->id assignments. Change-Id: I3195e3a8e0207bb8e7f49060ad2742cf21a6e4c9 2016-09-21 15:10 +0000 [2e7fc56d3c] Richard Mudgett * res_pjsip: Fix tdata leaks in off nominal paths. Change-Id: Ie83e06e88c2d60157775263b07e40b61718ac97b 2016-10-24 12:41 +0000 [da68b185b3] Richard Mudgett * res_pjsip_registrar_expire.c: Remove extra linefeed in debug message. Change-Id: I1f9adb911f23376503396ec8867e8005b755eb94 2016-11-10 10:57 +0000 [b70eb07c53] Joshua Colp * res_pjsip_sdp_rtp: Reject offer of required SRTP without res_srtp. When optimistic SRTP was on it was possible for us to still set up a call without an audio stream if an offer was received with required SRTP. This change makes it so this scenario will now fail with a 488 response. ASTERISK-26575 Change-Id: I7d14187037681f48879bd20319ac79d0877318f3 2016-11-10 08:33 +0000 [71dc333565] Joshua Colp * app_queue: Add mention of 'ABANDON' variable to CHANGES. ASTERISK-26558 Change-Id: I1127010181e79c8ac291f72f036cb8e430dc7f7e 2016-11-10 07:41 +0000 [6b5a7ced13] gtjoseph * Revert "Add API for channel frame deferral." This reverts commit 9231a56cf3d6f5eca1bf2d37d827453400690773. Multiple testsuite failures were detected after the fact. Change-Id: I3bac8d7c3ddb69a4ddf6c5d6de0ffa5ff7ff3af7 2016-11-10 07:41 +0000 [6be5d8de0d] gtjoseph * Revert "AGI: Only defer frames when in an interception routine." This reverts commit 5c10091f3d1430c6fc04015226f8c3e3aa9d8282. Multiple testsuite failures were detected after the fact. Change-Id: I397a841acc17ae230c512449cd6bed89d2ef3b73 2016-11-10 07:41 +0000 [1df434e2b4] gtjoseph * Revert "autoservice: Use frame deferral API" This reverts commit 2e3a3545754749de21873bfdc6d1a40ec7d8893f. Multiple testsuite failures were detected after the fact. Change-Id: Ia45fa4633fae74dca345b24bb6722737c63035de 2016-11-10 07:40 +0000 [58c88cfbaa] gtjoseph * Revert "channel: Use frame deferral API for safe sleep." This reverts commit 44f7e252397fd87420b3374df26941d7436401b3. Multiple testsuite failures were detected after the fact. Change-Id: I56299087da22128a95f0c8f3955f740890d7ca65 2016-11-09 18:18 +0000 [a562fbe618] gtjoseph * build: Fix default values for some SANITIZER options 2 of the sanitizers didn't have default values so in systems that don't support sanitizers menuselect would spit out warnings. They were harmless but confusing. They've now been set to "0". Change-Id: I08dc495e3b83f1feac3160b421f538c375fc5d58 2016-11-06 06:04 +0000 [7fd5031c1c] Sebastian Gutierrez * app_queue: new variable set when abandoned sets the variable ABANDONED to TRUE if the call was not answered. ASTERISK-26558 Change-Id: I4729af9bff4eba436d8a776afd3374065d0036d3 2016-11-08 10:48 +0000 [e043d1a55c] Mark Michelson * res_pjsip_session: Do not call session supplements when it's too late. res_pjsip_sesssion was hooking into transaction and invite state changes. One of the reasons for doing so was due to the PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the message sending process, and so we should call session supplements to alter the outgoing message. In reality, this event was meant to indicate that the message either a) had already been sent, or b) required a DNS lookup and would be sent when the DNS query completed. In case (a), this meant we were altering an already-sent request/response for no reason. In case (b), this potentially meant we could be trying to alter a request/response at the same time that the DNS resolution completed. In this case, it meant we might be stomping on memory being used by the thread actually sending the message. This caused potential crashes and memory corruption. This patch removes the calls to session supplements from the case where the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to alter the message at this point is too late, and it can cause nothing but harm to try to do it. Because there were no longer any calls to the handle_outgoing() function, it has been removed. Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92 2016-11-03 16:46 +0000 [44f7e25239] Mark Michelson * channel: Use frame deferral API for safe sleep. This is another case where manual frame deferral can be replaced with centralized routines instead. Change-Id: I42cdf205f8f29a7977e599751a57efbaac07c30e 2016-11-03 16:46 +0000 [2e3a354575] Mark Michelson * autoservice: Use frame deferral API Rather than use manual frame deferral, just let the channel API do it for us. ASTERISK-26343 Change-Id: I688386f36e765dbc07be863943a43f26bd5eac49 2016-11-03 16:42 +0000 [5c10091f3d] Mark Michelson * AGI: Only defer frames when in an interception routine. AGI recently was modified to defer important frames. This was because when AGI was used in a connected line interception routine, the resulting connected line frame would end up getting discarded by the AGI. However, this caused bad behavior in other cases. Specifically, during a transfer, if someone attempted to manually set the Caller ID on a channel in an AGI, the deferred connected line frame would end up overwriting what had been manually set in the AGI. Since the initial issue was specific to interception routines, this change removes the manual frame deferral from AGI and instead uses the new frame deferral API in interception routines. ASTERISK-26343 #close Reported by Morton Tryfoss Change-Id: Iab7d39436d0ee99bfe32ad55ef91e9bd88db4208 2016-11-03 16:36 +0000 [9231a56cf3] Mark Michelson * Add API for channel frame deferral. There are several places in Asterisk that have duplicated logic for deferring important frames until later. This commit adds a couple of API calls to facilitate this automatically. ast_channel_start_defer_frames(): Future reads of deferrable frames on this channel will be deferred until later. ast_channel_stop_defer_frames(): Any frames that have been deferred get requeued onto the channel. ASTERISK-26343 Change-Id: I3e1b87bc6796f222442fa6f7d1b6a4706fb33641 2016-11-03 07:42 +0000 [a9ac1f5de4] Alexander Anikin * chan_ooh323: Fixes to work right with Cisco devices Changed output packets queue processing algo to one read-one write instead of all read-all send Remove h.245 tunneling parameter from ReleaseComplete packet ASTERISK-24400 #close Reported by: Dmitry Melekhov Tested by: Dmitry Melekhov Change-Id: I0b31933b062a21011dbac9a82b8bcfe345f406f6 2016-11-03 13:10 +0000 [0ee249075a] Alexander Anikin * chan_ooh323: reset rrq count on gk registration reset registration attempts count on success registration on gatekeeper Change-Id: I5f47351852e0ca76c9ac78421659600e0f106336 2016-11-06 03:46 +0000 [59c23e1768] Michael Kuron * automon: restore mixing of the both channels after recording stops This is a regression over Asterisk 11, introduced by 2dc8a060064f359a17f5ebcd515d85fe5203c019. Previously, recordings started via the automon DTMF code would automatically be mixed together using sox because app_monitor would be called with the m option. This commit restores this behavior. Change-Id: Ibaf58684285c3f1b6ca3714524e6d638ae3b3759 2016-11-04 15:42 +0000 [e79acaeb75] Matt Jordan * res_http_websocket: Increase the buffer size for non-LOW_MEMORY systems Not surprisingly, using Respoke (and possibly other systems) it is possible to blow past the 16k limit for a WebSocket packet size. This patch bumps it up to 32k, which, at least for Respoke, is sufficient. For now. Because 32k is laughable on a LOW_MEMORY system (as is 16k, for that matter), this patch adds a LOW_MEMORY directive that sets the buffer to 8k for systems who have asked for their reduced memory availability to be considered. Change-Id: Id235902537091b58608196844dc4b045e383cd2e 2016-11-04 15:40 +0000 [7a83196985] Matt Jordan * res_stasis: Set a video source mode on Stasis created bridges When a bridge is created via ARI (through res_stasis), no video source mode is set by default. As a result, any endpoint sending video media won't ever see any video reflected back to it. This patch defaults a bridge to a 'follow the talker' video mode. Further work can be done to add routes that allow for the video mode to be controlled through the /bridges resource. Change-Id: I7e9d530a5d7a97a4524a9ee4e468e1a6b3443866 2016-11-04 15:37 +0000 [e7dc536b7a] Matt Jordan * main/bridge_channel: Fix channel reference leak on video source When a channel is made the video source, the bridge holds a reference to it. Whenever the video source changes, that reference is released. However, a ref leak does occur if the channel leaves the bridge (such as being hung up) while it is the video source, as the bridge never releases the ref in such a case. This patch adds a line to the bridge_channel_internal_join routine such that, when a channel finishes its time in the bridge, it notifies the bridge via ast_bridge_remove_video_src that if it is a video source its reference should be released. ASTERISK-26555 #close Change-Id: I3a2f5238a9d2fc49c591f0e65199d782ab0be76a 2016-11-04 15:36 +0000 [7c824b955d] Matt Jordan * main/bridge: Add some verbose logging for video source changes It's actually quite useful to see the source of a video stream change. This doesn't happen terribly often, even with talk detection - but when it does, it's nice to know which channel is now providing your video stream. As a verbose 5 level message, it shouldn't be terribly spammy or costly to have, and is 'lower level' then most other verbose messages that the bridge system emits. ASTERISK-26555 Change-Id: Ia1c20ecafa9670171fd38bddcf3beccae47fb15c 2016-11-04 15:33 +0000 [fd6af2dee8] Matt Jordan * bridges/bridge_softmix: Remove SSRC changes on join/leave; update video source WebRTC clients really, really want to know the SSRC of the media they're getting. Changing the SSRC is generally not a good thing. bridge_softmix, starting in Asterisk 12, started changing the SSRC of parties as they joined or left the bridge. With most phones, this isn't a problem: phones just play back the stream they're getting. With WebRTC clients, however, the SSRC is tied to a media stream that may be negotiated. When a new SSRC just shows up, the media can be dropped. As it turns out, the SSRC change shouldn't even be necessary. From the perspective of the client, it's still talking to Asterisk with the same media stream: why indicate that the far party has suddenly changed to a different source of media? This patch opts to just remove the SSRC changes. With this patch, video clients that join/leave a softmix bridge actually get the video stream instead of freaking out. ASTERISK-26555 Change-Id: I27fec098b32e7c8718b4b65f3fd5fa73527968bf 2016-10-28 15:11 +0000 [bd4d7d8ad0] Kevin Harwell * stasis_recording/stored: remove calls to deprecated readdir_r function. The readdir_r function has been deprecated and should no longer be used. This patch removes the readdir_r dependency (replaced it with readdir) and also moves the directory search code to a more centralized spot (file.c) Also removed a strict dependency on the dirent structure's d_type field as it is not portable. The code now checks to see if the value is available. If so, it tries to use it, but defaults back to using the stats function if necessary. Lastly, for most implementations of readdir it *should* be thread-safe to make concurrent calls to it as long as different directory streams are specified. glibc falls into this category. However, since it is possible that there exist some implementations that are not safe, locking has been added for those other than glibc. ASTERISK-26412 ASTERISK-26509 #close Change-Id: Id8f54689b1e2873e82a09d0d0d2faf41964e80ba 2016-11-04 10:57 +0000 [cb30963d22] Kevin Harwell * Revert "chan_sip: Fix lastrtprx always updated" This reverts commit 93332cb1d0eea18021ea6538237297e627d6e2fc. Unfortunately, the aforementioned commit caused a regression (incoming calls would eventually disconnect). Thus it is being removed. ASTERISK-26523 #close ASTERISK-25270 Change-Id: Ibf5586adc303073a8eac667a4cbfdb6be184a64d 2016-11-02 10:52 +0000 [3a1f9c5dab] Joshua Colp * res_stasis: Don't unsubscribe from a NULL bridge. A NULL bridge has special meaning in res_stasis for unsubscribing. It means that a subscription to ALL bridges should be removed. This should not be done as part of the normal subscription management in the res_stasis channel loop. ASTERISK-26468 Change-Id: I6d5bea8246dd13a22ef86b736aefbf2a39c15af0 2016-11-03 13:45 +0000 [eceab15f33] Alexander Anikin * chan_ooh323: Fix infinite loop on read second part of H.225 packet Fix logic on read second part of H.225 packet. There was infinite loop on wrong connections due to read before poll. Change-Id: I42b4bf75c46e4a5c5df5c5ca1f0bd74b8944e7ff 2016-11-03 11:55 +0000 [a9992da4aa] gtjoseph * pjproject_bundled: Fix issue with libasteriskpj needing libresample libresample is only needed by pjproject if we're building pjsua, which we only do if TEST_FRAMEWORK is selected. It's required by pjsua to process audio which is needed by some testsuite tests. Unfortunately, pjproject relies on a newer version of libresample than the version that ships by most distros so we need to compile the version that's bundled with pjproject. Since we only need it for pjsua, we DON'T want it's symbols exposed when we actually build asterisk. There was a problem however... TEST_FRAMEWORK is only known AFTER we've already run ./configure on both asterisk and pjproject but pjproject's ./configure needs to test it to know whether to set up to build libresample or not. The previous way of figuring this out was to always tell ./configure "yes" but not actually build the library. This caused an issue where building libasteriskpj was being told to include libresample but it wasn't actually there. The solution is to still do a default pjproject configure during an asterisk ./configure but if makeopts or menuselect.makeopts changes subsequently, we now reconfigure pjproject, taking into account the current state of TEST_FRAMEWORK. Previously, if makeopts or menuselect.makeopts changed, only a recompile of pjproject was done. Change-Id: I9b5d84c61384a3ae07fe30e85c49698378cc4685 2016-11-01 19:48 +0000 [714412f6c4] Sebastian Gutierrez * chan_sip: add missing account code Added missing account to AMI event of sip show peers ASTERISK-26176 #close Change-Id: Ieb6c2c80a838a1b59c82103eba4c63ba238dc482 2016-09-13 04:08 +0000 [0cf1778eed] Alexander Traud * rtp_engine: Allow more than 32 dynamic payload types. The dynamic range (96-127) allows 32 RTP Payload Types. RFC 3551 section 3 allows to reassign other ranges. Consequently, when the dynamic range is exhausted, you can go for "rtp_pt_dynamic = 35" (or 0) in asterisk.conf. This enables the range 35-63 (or 0-63) giving room for another 29 (or 64) payload types. ASTERISK-26311 #close Change-Id: I7bc96ab764bc30098a178b841cbf7146f9d64964 (cherry picked from commit 9ac53877f688c06acaa7c377f15da8770e4ee88b) 2016-11-02 09:15 +0000 [d971647949] Joshua Colp * app_dial: Fix incorrect device state when channel is picked up. Given the scenario where multiple channels are dialed using Dial() but the caller is picked up using PickupChan() all outgoing channels except the channel specified to PickupChan() would be marked as ringing until the call had been hung up. When using the PickupChan application the channel executing the application is swapped into place of another channel. As part of this process the channel is answered. The Dial application has explicit logic which checks if the channel is answered, cancels all other outgoing channels, and bridges. This logic is different than the normal logic that is executed when an outgoing channel is answered. This different logic failed to publish dial events stating that the other outgoing channels had been canceled. As a result references to the outgoing channels were held onto by the dial masquerade process until the call had been ended and the channels had gone away. This would result in the channels appearing in the "core show channels" list despite not being present anymore and would also result in incorrect device state. This change makes it so that this logic also publishes dial events stating that the other outgoing channels have been canceled. ASTERISK-26549 Change-Id: Iea7168e6e82f7d4609ec0366153804e4f55ea64f 2016-11-01 13:13 +0000 [afecb2cfc0] Richard Mudgett * bundled pjproject: Fix DNS write to freed memory. PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS patch. The patch below fixes a write to freed memory under cartain DNS lookup conditions. 0006-r5477-svn-backport-Fix-DNS-write-on-freed-memory.patch ASTERISK-26516 Reported by: Richard Mudgett Change-Id: Ifdfae9ecf1e41b53080f33aab44ce1a220f349c5 2016-11-01 06:56 +0000 [5f188bb7a8] Joshua Colp * res_pjsip_sdp_rtp: Limit number of formats to defined maximum. The res_pjsip_sdp_rtp module did not restrict the number of formats added to a media stream in the SDP to the defined limit. If allow=all was used with additional loaded codecs this could result in the next media stream being overwritten some. This change restricts the module to limit it to the defined maximum and also increases the maximum in our bundled pjproject. ASTERISK-26541 #close Change-Id: I0dc5f59d3891246cafa2f3df5ec406f088559ee8 2016-11-01 04:18 +0000 [94c9496ed5] Tzafrir Cohen * netsock.c: fix includes for HURD ASTERISK-25070 Change-Id: I43bf94d2d36d3d8a8d0df40cd6c027d65a462814 2016-11-01 04:00 +0000 [c1c9487375] Tzafrir Cohen * define PATH_MAX for HURD PATH_MAX is not guaranteed to be defined. In parctice, all but the HURD define it to a constant. It is indeed not safe to assume there won't be longer paths and Asterisk generally does err safely on such cases. So even for HURD we'll just pretend PATH_MAX is 4096. ASTERISK-25070 #close Change-Id: I53d10ba18c34c132bcb640a5fd8e0da1d9b22db3 2016-10-31 17:35 +0000 [50fa868ab8] Kevin Harwell * codecs.conf.sample: Add sample and option descriptions for codec_opus codecs.conf.sample was missing codec opus's configuration options, descriptions, and examples. This patch adds the configuration options and examples to codecs.conf.sample that can be used with codec_opus. ASTERISK-26538 #close Change-Id: I1d89bb5e01d3e3b5bd78951b8dd0ff077a83dc8b 2016-11-01 08:32 +0000 [b3f10b7b94] Grachev Sergey * chan_sip: Incorrect display option Outbound reg. retry 403 If in sip.conf (general section) set option register_retry_403=no, the command "sip show settings" return value: Outbound reg. retry 403:0 If in sip.conf (general section) set option register_retry_403=yes, the command "sip show settings" return value: Outbound reg. retry 403:-1 * In static char "sip show settings" for "Outbound.reg. retry 403" option use AST_CLI_YESNO ASTERISK-26476 #close Change-Id: I3c14272f05f1067bd2aeaa8b3ef9cf8fcb12dcf9 2016-10-20 07:27 +0000 [29692d4aa4] Matt Jordan * res/stasis: Add CLI commands for displaying/debugging ARI apps This patch adds three new CLI commands: - ari show apps: list the registered ARI applications - ari show app: show detailed information about an ARI application - ari set debug: dump events being sent to an ARI application Note that while these CLI commands live in the res_stasis module, we use the 'ari' family for these commands. This was done as most users of Asterisk aren't aware of the semantic differences between ARI and res_stasis, and some 'ari' CLI commands already exist. ASTERISK-26488 #close Change-Id: I51ad6ff0cabee0d69db06858c13f18b1c513c9f5 2016-10-31 16:12 +0000 [a36a7d0cf4] gtjoseph * pjproject_bundled: Fix compile of pjsua so it handles audio In order for pjsua and its python binding to actually negotiate audio for the testsuite tests, it needs g711 and resample. The pj* libraries themselves do not. Unfortunately, pjproject relies on a brand new libresample that most distros don't ship so we need to use the libresample already bundled with pjproject. Only the pjsua executable and the _pjsua.so python library are linked with it so it shouldn't interfere with asterisk itself. Also it was pointed out that apply_patches couldn't handle multiple patches that depended on each other during the dry-run, so the dry-run was removed. Change-Id: I24f397462b486dcdde0dcafe40e6c55a6593f098 2016-10-31 13:46 +0000 [42bd70b29f] Etienne Lessard * manager: Add documentation for NewConnectedLine event. The NewConnectedLine event has been added by commit fe7671f, but the documentation was missing. ASTERISK-26537 #close Change-Id: I7fc331f18caa28492da9303e576f70884ca8c9e6 2016-10-30 13:33 +0000 [30b1bc77d2] Corey Farrell * vector: Prevent NULL argument to memcpy. Headers declare that memcpy does not accept NULL argument for the first two parameters. Add a conditional block to prevent memcpy and ast_free from running on vectors with NULL element array. ASTERISK-26526 #close Change-Id: I988a476bb5fcfcbd3f6d6c6b3e7769e4f9629b71 2016-10-29 10:31 +0000 [b96f18560b] Corey Farrell * astobj2: Declare private variable data_size for AO2_DEBUG only. Every ao2 object contains storage for a private variable data_size, though the value is never read if AO2_DEBUG is disabled. This change makes the variable conditional, reducing memory usage. ASTERISK-26524 #close Change-Id: If859929e507676ebc58b0f84247a4231e11da07f 2016-10-28 16:59 +0000 [6b1c55dc9b] gtjoseph * pjproject_bundled: Fix issue where "/version.mak" wasn't found main/Makefile includes third-party/pjproject/build.mak but doesn't set PJDIR beforehand so "include $(PJDIR)/version.mak" evaluates to "/version.mak". Fix is to set PJDIR in main/Makefile before the include. Change-Id: I0f7c67d60209049056fe9c4b041bf0463aa95604 2016-10-28 14:55 +0000 [d7f457e4c1] Richard Mudgett * bundled pjproject: Crashes while resolving DNS names. PJPROJECT 2.5.5 introduced a race condition with the -r5349 IPv6 DNS patch. The patches below fix the DNS lookup race condition crash caused by attempting to send the same message twice for the single DNS lookup. 0006-r5471-svn-backport-Various-fixes-for-DNS-IPv6.patch 0006-r5473-svn-backport-Fix-pending-query.patch The patch below removes a cached DNS response from the hash table when another thread is referencing the old entry. The table still contained the entry when it was destroyed which can result in inexplicable crashes. 0006-r5475-svn-backport-Remove-DNS-cache-entry.patch ASTERISK-26344 #close Reported by: Ian Gilmour ASTERISK-26387 #close Reported by: Harley Peters Change-Id: I17fde80359e66f65a91341ceca58d914d0f61cc4 2016-10-28 09:50 +0000 [87903a6848] Rusty Newton * SAC documentation: don't specify transports for endpoints and registrations Removing explicit transport definition for endpoints and registrations. It isn't necessary and isn't generally advised. ASTERISK-26514 #close Change-Id: Ifdec5e631962438a4683600968dfa4bfd15909fb 2016-10-27 21:49 +0000 [f373de3020] Corey Farrell * Fix shutdown crash caused by modules being left open. It is only safe to run ast_register_cleanup callbacks when all modules have been unloaded. Previously these callbacks were run during graceful shutdown, making it possible to crash during shutdown. ASTERISK-26513 #close Change-Id: Ibfa635bb688d1227ec54aa211d90d6bd45052e21 2016-10-26 18:48 +0000 [61a5c3460e] gtjoseph * pjproject_bundled: Remove usage of tar's --strip-components option Older versions of tar don't support the --strip-components option so instead of doing 'tar --strip-components=1 -C source', we now just untar to the tarball's root directory (pjproject-) and rename that directory to 'source'. Also fixed an issue where the pjproject source directory is a hard coded absolute pathname. ASTERISK-26510 #close ASTERISK-22480 #close Change-Id: I9ec92952507a91ff4e4d01e0149e09fd8e8f32b0 2016-10-27 08:07 +0000 [675c71ae8c] Joshua Colp * res_pjsip_caller_id: Fix crash on session timers UPDATE on inbound calls. The res_pjsip_caller_id module wrongly assumed that a saved From header would always exist on sessions. This is true until an inbound call is received and a session timer causes an UPDATE to be sent. In this case there will be no saved From header and a crash will occur. This change makes it fall back to the From header of the outgoing request if no saved From header is present. ASTERISK-26307 #close Change-Id: Iccc3bc8d243b5ede9b81abf960292930c908d4fa 2016-10-26 07:51 +0000 [14496ce1e5] Joshua Colp * app_voicemail: Clear voice mailbox in MailboxExists and MAILBOX_EXISTS. When executing the MailboxExists dialplan application and MAILBOX_EXISTS dialplan function the passed in temporary voice mailbox was not cleared, causing it to try to free garbage. ASTERISK-26503 #close Change-Id: Ie21ccfa1b80b9c59318e596f6b8e17da2b5a7cb3 2016-10-23 07:38 +0000 [e0bc17edff] Joshua Colp * pjsip: Fix a few media bugs with reinvites and asymmetric payloads. When channel format changes occurred as a result of an RTP re-negotiation the bridge was not informed this had happened. As a result the bridge technology was not re-evaluated and the channel may have been in a bridge technology that was incompatible with its formats. The bridge is now unbridged and the technology re-evaluated when this occurs. The chan_pjsip module also allowed asymmetric codecs for sending and receiving. This did not work with all devices and caused one way audio problems. The default has been changed to NOT do this but to match the sending codec to the receiving codec. For users who want asymmetric codecs an option has been added, asymmetric_rtp_codec, which will return chan_pjsip to the previous behavior. The codecs returned by the chan_pjsip module when queried by the bridge_native_rtp module were also not reflective of the actual negotiated codecs. The nativeformats are now returned as they reflect the actual negotiated codecs. ASTERISK-26423 #close Change-Id: I6ec88c6e3912f52c334f1a26983ccb8f267020dc 2016-10-26 06:32 +0000 [f534f67f52] Joshua Colp * res_pjsip_sdp_rtp: Fix address family of explicit media_address. When an explicit media_address is provided the address family in the SDP needs to be set to reflect it. ASTERISK-26309 Change-Id: Ib9350cc91c120eb2f96f0623d3907d12af67eb79 2016-10-25 11:20 +0000 [3a2092b722] gtjoseph * test_astobj2_thrash: Fix multithreaded issues The test uses 4 threads to grow, count, lookup and shrink 15K objects in a container. If there's only 1 execution engine available, the test will complete in <50ms. If each threads gets its own execution engine, the test may timeout after 60 seconds because the count thread does a locked ao2_callback on the whole container in a tight loop with only a sched_yield to give up time. The lock contention makes the test execution times wildly variable and mostly timeout. 2 execution engines are OK, 3 results in about 33% failure rate and >=4 causes a 80% failure rate. To fix, the sched_yield was changed to a usleep(500). Also, the number of buckets specified for the container was an even number so that was changed to the next prime number greater than (MAX_HASH_ENTRIES / 100). That's 151 currently. Change-Id: I50cd2344161ea61bfe4b96d2a29a6ccf88385c77 2016-10-24 14:13 +0000 [640203802e] Pascal Cadotte Michaud * typo: s/paranthesis/parenthesis/ in a comment Change-Id: I7c1f4eb051177ee22cbe97e063d4a3effe29be30 2016-10-24 10:55 +0000 [9b3557e054] gtjoseph * pjproject_bundled: Fixed various build issues * CFLAGS is now properly set when using older gcc. * All third-party pjproject targets have been removed. This fixes an issue with older libsrtp in some distros. * Manually removing the source directory now causes a rebuild. * EXTERNALS_CACHE_DIR is now properly checked. * Whitespace fixes. Change-Id: I98fec6847efc5602a9f41cb95096fd660a49fa60 2016-09-19 06:13 +0000 [bb982480d8] Joshua Colp * pjsip: Support dual stack automatically. This change adds support for dual stack automatically. No configuration is required and the IP address and version in the SIP messages and SDP will be automatically changed based on the transport over which the message is being sent. RTP usage has also been changed to listen on both IPv4 and IPv6 simultaneously to allow media to flow, and to allow ICE support on both simultaneously. This also allows failover between IPv6 and IPv4 to work as expected. ASTERISK-26309 #close Change-Id: I235a421d8f9a326606d861b449fa6fe3a030572d 2016-10-17 14:18 +0000 [eff97808fb] Mark Michelson * ARI: Detect duplicate channel IDs ARI and AMI allow for an explicit channel ID to be specified when originating channels. Unfortunately, there is nothing in place to prevent someone from using the same ID for multiple channels. Further complicating things, adding ID validation to channel allocation makes it impossible for ARI to discern why channel allocation failed, resulting in a vague error code being returned. The fix for this is to institute a new method for channel errors to be discerned. The method mirrors errno, in that when an error occurs, the caller can consult the channel errno value to determine what the error was. This initial iteration of the feature only introduces "unknown" and "channel ID exists" errors. However, it's possible to add more errors as needed. ARI uses this feature to determine why channel allocation failed and can return a 409 error during origination to show that a channel with the given ID already exists. ASTERISK-26421 Change-Id: Ibba7ae68842dab6df0c2e9c45559208bc89d3d06 2016-10-19 17:53 +0000 [c2036c827c] snuffy * Fix issue with CLI not returning to prompt after running "features show" ASTERISK-26444 #close Change-Id: I91d645b7e6e5dba35f8c410df2be77a8c0e3acb8 2016-10-04 18:24 +0000 [3c62b60e56] Michael Walton * res_rtp_asterisk: Add ice_blacklist option Introduces ice_blacklist configuration in rtp.conf. Subnets listed in the form ice_blacklist = , e.g. ice_blacklist = 192.168.1.0/255.255.255.0, are excluded from ICE host, srflx and relay discovery. This is useful for optimizing the ICE process where a system has multiple host address ranges and/or physical interfaces and certain of them are not expected to be used for RTP. Multiple ice_blacklist configuration lines may be used. If left unconfigured, all discovered host addresses are used, as per previous behavior. Documention in rtp.conf.sample. ASTERISK-26418 #close Change-Id: Ibee88f80d7693874fda1cceaef94a03bd86012c9 2016-10-18 16:30 +0000 [012fda29d2] Mark Michelson * CDR: Alter destruction pattern for CDR chains. CDRs form chains. When the root of the chain is destroyed, it then unreferences the next CDR in the chain. That CDR is destroyed, and it then unreferences the next CDR in the chain. This repeats until the end of the chain is reached. While this typically does not cause any sort of problems, it is possible in strange scenarios for the CDR chain to grow way longer than expected. In such a scenario, the destruction pattern can result in a stack overflow. This patch fixes the problem by switching from a recursive pattern to an iterative pattern for destruction. When the root CDR is destroyed, it is responsible for iterating over the rest of the CDRs and unreferencing each one. Other CDRs in the chain, since they are not the root, will simply destroy themselves and be done. This causes the stack depth not to increase. ASTERISK-26421 #close Reported by Andrew Nagy Change-Id: I3ca90c2b8051f3b7ead2e0e43f60d2c18fb204b8 2016-10-18 09:04 +0000 [6d462b9eaf] Alexei Gradinari * chan_pjsip: segfault on already disconnected session On heavy loaded system the TCP/TLS incoming calls could be disconnected by pjproject while these calls are being processed by asterisk. This patch uses functions pjsip_inv_add_ref/pjsip_inv_dec_ref to inform pjproject that an INVITE session is in use. ASTERISK-26482 #close Change-Id: Ia2e3e2f75358cdb530252a9ce158af3d5d9fdf33 2016-10-18 03:01 +0000 [662b560c35] Alexander Traud * cli: Auto-complete File not Module for core set debug. Since Asterisk 1.8, the command "core set debug" on the command-line interface asks not for a file (.c) but a module name. This change shows modules (.so) on the auto-completion via a tabulator or the question mark. Now, when you partially type a module name, TAB or ?, you get the correct candidiates. ASTERISK-26480 Change-Id: I1213f1dd409bd4ff8de08ad80cb0c73cafb1bae0 2016-09-11 10:13 +0000 [6f5880913f] Tzafrir Cohen * menuselect: invalid test for GTK2 configuire.ac was only checking for the existence of pkg-config and not the gtk2 package itself. Now it calls AST_PKG_CONFIG_CHECK for gtk+-2.0. ASTERISK-26356 #close Change-Id: I8079d515d6ea99f9ab320a7eaa71c2aaa101ccd5 2016-10-17 11:39 +0000 [546ec4b038] gtjoseph * pjproject_bundled: Add patch to address SSL crash Addresses crashes when an attempt is made to operate on an SSL socket after the socket has been closed. ASTERISK-26477 #close Change-Id: I421305b357558b4f9e690210dc0f4831ef4b3002 2016-10-13 02:06 +0000 [644fad7477] Moises Silva * chan_rtp: Set a sane default rtp engine for unicast. ASTERISK-26439 Change-Id: I7f5ee2eeba8906e9ecb3293dbe3a747770bb5011 2016-10-15 20:05 +0000 [42cfdcd1b7] Matt Jordan * res/ari: Add the Asterisk EID field to outgoing events This patch adds the Asterisk EID field to all outgoing ARI events. Because this field should be added to all events as they are transmitted, it is appended to the JSON message just prior to it being handed off to the application message handler. This makes it somewhat resilient to both new events being added to ARI, as well as other potential event transport mechanisms. ASTERISK-26470 #close Change-Id: Ieff0ecc24464e83f3f44e9c3e7bd9a5d70b87a1d 2016-10-16 17:25 +0000 [74d9385273] gtjoseph * utils.c: Fix ast_set_default_eid for multiple platforms ast_set_default_eid was searching for ethX, emX, enoX, ensX and even pciD#U interface names. While this was a good attempt, it wasn't inclusive enough to capture interfaces like enp6s0 or ens6d1, etc. Rather than relying on interface names, we now simply find the first interface returned by the OS that has a hardware address and that address isn't all 0x00 or all 0xff. The code IS different for BSD, Solaris and Linux based on what method is available for enumerating interfaces. Tested on: FreeBSD9 CentOS6 Ubuntu14 Fedora24 I was unable to test on Solaris at this time but the code for Solaris is used elsewhere at Digium. Change-Id: Iaa6db87ca78a9a375e47d70e043ae08c1448cb72 2016-10-15 04:58 +0000 [f1fd873df0] Michael Kuron * chan_sip: Only send video on outgoing channel if incoming channel supports it Previously, the settings videosupport=always and videosupport=yes behaved identically and unconditionally caused a video offer to be sent in the SDP on an outgoing call. This was a regression introduced with commit 5a1d90e1fbfc4b48927aad55311f3b38efbf1f54 in Asterisk 1.6.1. This commit restores correct behavior: videosupport=always causes a video offer to be sent unconditionally, while videosupport=yes will only offer video on an outbound channel if the incoming channel it is bridged to also supports video. That way, the device receiving the outgoing call can display the correct user interface elements for audio or video and will not unnecessarily show a blank video window on an audio-only call. ASTERISK-17470 #close Change-Id: I782f4409d436114dbc97061c3570c0cd24f7c3ae 2016-10-13 14:09 +0000 [0306869399] Leandro Dardini * app_queue: Added initialization for "context" parameter When using Asterisk Realtime Architecture, empty fields are skipped and the default values are used. If the "context" parameter in queue was set and then cleared from the database, the old value remains in memory and it continues to be used. This change initialize the "context" parameter with an empty value, allowing clearing the parameter. ASTERISK-26462 #close Change-Id: I64be73d5044ce38dd02408bd0e53de965ef65905 2016-10-14 00:18 +0000 [ce4cfd2eca] Corey Farrell * Fix issues with bundled pjproject cached download. Previously when testing I had a preexisting makeopts in ASTTOPDIR. The ordering of configure.ac causes --with-externals-cache to be processed after third-party configure. In cases where the Asterisk clone is cleaned it would cause pjproject to be downloaded to /tmp. This moves processing of the externals cache and sounds cache to happen before third-party configure. This also addresses a possible issue with the third-party Makefile. If TMPDIR is set by the environment it would override the path given to --with-externals-cache. ASTERISK-26416 Change-Id: Ifab7f35bfcd5a31a31a3a4353cc26a68c8c6592d 2016-10-12 16:24 +0000 [3c54328c57] Richard Mudgett * Audit ast_json_pack() calls for needed UTF-8 checks. Added needed UTF-8 checks before constructing json objects in various files for strings obtained outside the system. In this case string values from a channel driver's peer and not from the user setting channel variables. * aoc.c: Fixed type mismatch in s_to_json() for time and granularity json object construction. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: Iac2d867fa598daba5c5dbc619b5464625a7f2096 2016-10-12 16:20 +0000 [7f8f125738] Richard Mudgett * json: Check party id name, number, subaddresses for UTF-8. * Updated unit test as ast_json_name_number() is now NULL tolerant. ASTERISK-26466 #close Reported by: Richard Mudgett Change-Id: I7d4e14194f8f81f24a1dc34d1b8602c0950265a6 2016-10-11 18:14 +0000 [9621c9bcbc] Richard Mudgett * json: Add UTF-8 check call. Since the json library does not make the check function public we recreate/copy the function in our interface module. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: I36d3d750b6f5f1a110bc69ea92b435ecdeeb2a99 2016-10-12 17:42 +0000 [e4bb9f9a37] Richard Mudgett * aoc.c: Whitespace cleanup * In s_to_json() removed unnecessary ast_json_ref() to ast_json_null() when creating the type json object. The ref is a noop. Change-Id: I2be8b836876fc2e34a27c161f8b1c53b58a3889a 2016-10-12 17:27 +0000 [bcac905bd3] Richard Mudgett * app_queue.c: Fix clearing of pause reason string. The pause reason is not always cleared when it should be cleared. * Made set_queue_member_pause() always clear pause reason if not pausing with a reason string. Change-Id: I993dad19626ec017478a230e980989438b778c53 2016-10-12 16:22 +0000 [ee4ae2b648] Richard Mudgett * app_minivm.c: Fix malformed ast_json_pack() call. Change-Id: I082b239022fac462666e52a14a44304748908dc0 2016-10-12 16:30 +0000 [90ae4e4337] gtjoseph * res_config_mysql: Fix several issues related to recent table changes Unlike any of the other database drivers, res_config_mysql checks that the table definition matches the requirements for every insert and update statement. Since all requirements are forced to 'char', any column that isn't a char, like ps_contacts' expiration_time, qualify_timeout, etc., will throw a warning. It's kinda harmless but very misleading. Since no other driver does those checks on insert or update, they've been removed from res_config_mysql. Also, all the logic that actually attempted to ALTER the table to fix the issue has been removed. With the move to alembic, the auto-alter functionality is not only unnecessary, it's also dangerous. The other issue is that res_config_mysql calls the mysql_insert_id function inside store_mysql. Presumably the intention was to return the number of rows inserted DESPITE A NOTE IN THE CODE THAT THE VALUE IS NON_PORTABLE AND MAY CHANGE. That value is then returned to config realtime as the number of rows inserted. Guess what? The value changed. It now only returns the number of rows inserted if there's an auto increment column on the table, which ps_contacts doesn't have. Otherwise it returns 0. So now, the insert worked but we tell config realtime and sorcery that no rows were inserted. That call to mysql_insert_id was removed and we now always return 1 if the insert succeeded. We're only inserting 1 row at a time anyway. If the insert fails, we still return -1. ASTERISK-26362 #close Reported-by: Carlos Chavez Change-Id: I83ce633efdb477b03c8399946994ee16fefceaf4 2016-09-29 13:08 +0000 [86c15db6a1] Torrey Searle * res_fax: Fix a tight race condition causing fax to crash in audio fallback When T.38 gets rejected and G711 failback occurs there is a period of time where neither AST_FAX_TECH_T38 nor AST_FAX_TECH_AUDIO is set, leading to a crash. Change-Id: Icc3f457b2292d48a9d7843dac0028347420cc982 2016-09-30 16:29 +0000 [29b7a5b00f] Rodrigo Ramírez Norambuena * Add text of cdr directory into README.md for ast-db-manage Change-Id: I68321c4bea50730c39fdb486e5f23aeadd1ad636 2016-10-06 09:58 +0000 [f919edc4e2] gtjoseph * app_dial: Add the "Q" option to set the cause on unanswered channels The "Q" option will set the cause on the unanswered channels when another channel answers. It overrides the default of ANSWERED_ELSEWHERE. NOTE: chan_sip does not support setting the cause on a CANCEL to anything other than ANSWERED_ELSEWHERE. ASTERISK-26446 #close Change-Id: I71742e0919aaa16784c30a2b2e73fbeed7672e47 2016-10-11 06:55 +0000 [a859bcb49c] Alexander Traud * chan_sip: Support nat=auto_comedia or nat=force_rport,auto_comedia. In the SIP channel driver chan_sip, auto_comedia was expected to be used in tandem with auto_force_rport. Or stated differently: Only when auto_force_rport was chosen (the default), auto_comedia worked. This change allows auto_comedia to be set independently of the state of (auto_)force_rport. For example, nat=force_rport,auto_comedia is useful for IPv4/IPv6 Dual Stack deployments when IPv6 clients are behind a Firewall. ASTERISK-26457 #close Change-Id: Ib29d66c6dbb61648e371e01fc36c6978ddae5bc2 2016-10-10 16:59 +0000 [a884b26392] Badalyan Vyacheslav * vector: After remove element recheck index Small fix. It is necessary to double-check the index that we just removed because there is a new element. ASTERISK-26453 #close Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7 2016-09-29 12:52 +0000 [349c34f72a] Torrey Searle * res_rtp_asterisk: Fix infinite DTMF issue when switching to P2P bridge If a bridge switched to P2P when a DTMF was in progress it was possible for the DTMF to continue being sent indefinitely. Change-Id: I7e2a3efe0d59d4b214ed50cd0b5d0317e2d92e29 2016-10-10 10:59 +0000 [9da3489d24] Badalyan Vyacheslav * res_pjsip_config_wizard: Memory leak in module_unload Fixed a memory leak. It removes only the first element. Added a useful feature in vector.h to remove all items under the CMP through a callback function / macro. ASTERISK-26453 #close Change-Id: I84508353463456d2495678f125738e20052da950 2016-10-09 21:53 +0000 [fa2885b3ff] Badalyan Vyacheslav * cel_odbc: Fix memory leak on module unload Change-Id: Ic7a1236eba2408090fdabb5f717b5fa455ead715 2016-10-03 11:30 +0000 [e6b0053d75] gtjoseph * bundled_pjproject: Add tests for programs used by the Makefile, et al. Added tests for bzip2, tar, patch, sed and nm to configure.ac. Set DOWNLOAD_TO_STDOUT to a working command line regardless of whether the download program is wget, curl or fetch. Added a 'configure.m4' file to the third-party directory which takes care of calling any third-party project setup. Had to move some pjproject_bundled stuff up in configure.ac so it was called before the third-party configure macro. The pjproject tarball is now downloaded to the externals_cache_dir if it was specified on the ./configure command line Removed regeneration of the pjproject aconfigure file. It was only needed for an old patch that no longer applies. Converted the tests for symbols to explicit tests since we know that they're now available in the bundled version. Saves a little time during configure. ASTERISK-26416 #close Reported-by: Corey Farrell Change-Id: Id1d94251c0155f8dd41b7de7067f35cfbaafbb9b 2016-10-05 14:53 +0000 [0dc0356e39] gtjoseph * pjproject_bundled: Add MALLOC_DEBUG capability pjproject_bundled will now use the asterisk memory debugging APIs if MALLOC_DEBUG is turned on in menuselect. Because this required stubs for the executable programs and the python bindings, some Makefile reorganization was needed to properly handle the dependencies. As a result, the makefile now individually makes each of the pjproject libraries separately instead of making them all in 1 shot. The only visible change is that there are separate status lines printed for each library instead oif 1 for all libs. Also, the making of the pjproject dependency files was eliminated. They're not needed for building unless you're actively modifying pjproject source files and it makes the build process faster. Finally, any issues with parallel builds should be resolved again making the build faster. Change-Id: Icc5e3d658fbfb00e0a46b44c66dcc2522d5171b0 2016-10-07 17:32 +0000 [dd873bcada] Corey Farrell * astobj2: Add backtrace to log_bad_ao2. * Compile __ast_assert_failed unconditionally. * Use __ast_assert_failed to log messages from log_bad_ao2 * Remove calls to ast_assert(0) that happen after log_bad_ao2 was run. Change-Id: I48f1af44b2718ad74a421ff75cb6397b924a9751 2016-10-04 16:59 +0000 [86550f9c17] gtjoseph * alembic: Allow cdr, config and voicemail to exist in the same schema cdr, config and voicemail are all separate alembic trees. Because alembic's default is to use a table named 'alembic_version' to store the current tree revision, the 3 trees can't exist in the same schema without stepping on each other. Now each tree uses 'alembic_version_' as the version table. Each tree's env.py script now first checks for 'alembic_version'. If it finds it AND its revision is in the tree's history, the script renames it to 'alembic_version_'. Regardless, the script then continues with the migration using 'alembic_version_' and creates that table if it's not found. The result is that if an existing 'alembic_version' table was found but it didn't belong to this tree, it's left alone and 'alembic_version_' is used or created. WARNING: If multiple trees are using the same schema, they MUST NOT CRU or D any objects with names that might exist in the other trees. An example would be 'yesno_values' type. If two trees perform operations on it, one tree could pull it out from under the other. Thankfully we currently don't share any names among cdr, config and voicemail. NOTE: Since the env.py scripts in each tree were identical, a common env.py has been placed in the ast-db-manage directory and a symlink to it has been placed in each tree directory. ASTERISK-24311 #close Reported-by: Dafi Ni Change-Id: I4d593f000350deb5d21a14fa1e9bc3896844d898 2016-10-05 04:25 +0000 [f166681c12] Alexander Traud * chan_sip: Honor support of Symmetric Response (rport) for SIP requests. In the SIP channel driver chan_sip, the default is "auto_force_rport". When no NAT was detected, for example in case of IPv6, Asterisk uses the IP address from the headers within the SIP-REGISTER for subsequent SIP signaling. When the remote party specifies support for Symmetric Response (RFC 3581) via the parameter "rport", Asterisk should not extract the port from the SIP headers but reuse the port of the transport. This did not happen because of a typo. ASTERISK-26438 #close Change-Id: If6e7891848aaf96666dee5305695f7c6667cd5a6 2016-10-04 20:46 +0000 [430f6e5388] Michael Walton * audiohooks: Remove redundant codec translations when using audiohooks The main frame read and write handlers in main/channel.c don't use the optimum placement in the processing flow for calling audiohooks callbacks, as far as codec translation is concerned. This change places the audiohooks callback code: * After the channel read translation if the frame is not linear before the translation, thereby increasing the chance that the frame is linear as required by audiohooks * Before the channel write translation if the frame is linear at this point This prevents the audiohooks code from instantiating additional translation paths to/from linear where a linear frame format is already available, saving valuable CPU cycles ASTERISK-26419 Change-Id: I6edd5771f0740e758e7eb42558b953f046c01f8f 2016-09-29 14:02 +0000 [2449d2877c] Kevin Harwell * Remove "format_ogg_opus: New format" This reverts commit 40aa28131bc30b4516da2b20eb1a1e043920169c. ASTERISK-26426 #close Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5 2016-09-27 16:10 +0000 [f0a2e628d6] gtjoseph * download_externals: Fix issue with re-install Needed to ignore an xmlstarlet return code for optional element. Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873 Reported-by: Dan Jenkins 2016-09-22 09:49 +0000 [5258c067ae] gtjoseph * codec_opus: Add download ability to menuselect Updated codecs/codecs.xml to add codec_opus to the external download list. ASTERISK-26409 Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4 2016-07-23 14:50 +0000 [a5af8709c8] gtjoseph * codec_opus: Replace res_format_attr_opus with the one from codec_opus Preparation ASTERISK-26409 Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3 (cherry picked from commit 59f7662a93bf9c07204fb50e1020a0f5bfbbd5c9) 2016-07-23 15:56 +0000 [44c0c51cf1] gtjoseph * format_ogg_opus: New format Add Ogg/Opus playback support. This uses libopusfile in order to be able to read .opus files and play them back. Writing/recording support is not present at this time. ASTERISK-26409 Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955 2016-09-24 19:05 +0000 [0ab443007b] gtjoseph * build_tools: Add ability to download variants to download_externals Some external packages have multiple variants that apply to different builds of asterisk. The DPMA for instance has a "bundled" variant that needs to be downloaded if asterisk was configured with --with-pjproject-bundled. There are 2 ways to specify variants: If you need the user to make the decision about which variant to download, simply create multiple menuselect "member" entries like so... external xmlstarlet bash no external xmlstarlet bash no Note that the second entry has "-" appended to the name. You can then use the existing menuselect facilities to restrict which members to enable or disable. Youy probably don't want the user to enable multiple at the same time. If you want to hide the details of the variants, the better way to do it is to create 1 member with "variant" elements. external xmlstarlet bash no The condition must be a bash expression suitable for use with an "if" statement. Any environment variable can be used plus those available in makeopts. In this case, if asterisk was configured with --with-pjproject-bundled the bundled variant will be automatically downloaded. Otherwise the normal version will be downloaded. Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e 2016-09-22 01:40 +0000 [a0a17a8c6f] Aaron An * channels/chan_pjsip: fix HANGUPCAUSE function bug. HANGUPCAUSE not return 'SIP 200 Ok' when dialed channel answered. This patch change the call order of ast_queue_control_data and ast_queue_control in chan_pjsip_incoming_response. ASTERISK-26396 #close Reported by: AaronAn Tested by: AaronAn Change-Id: Ide2d31723d8d425961e985de7de625694580be61 2016-09-23 09:54 +0000 [0502675e5c] Alessandro Crespi * chan_sip: Resolve externhost not to IPv6; instead go for IPv4. For the channel driver chan_sip, you specify externhost=example.com in sip.conf when your Asterisk is behind a NAT and your IP address is assigned dynamically. Or stated differently: You do not have a static IP address to use "externaddr" directly. This NAT support is quite handy but just about IPv4. Previously, Asterisk resolved "externhost" to any IP version. When the first DNS answer resolved to an IPv6, Asterisk sent an IPv6 in SIP/SDP for origin (o=) and connection (c=). This happened in outgoing SIP-REGISTER and while answering SIP-INVITE. If the remote peer is IPv4-only, it might not handle o=/c= with an IPv6. This change makes sure, no IPv6 is resolved anymore for "externhost". ASTERISK-18232 #close Reported by: Jacek Kowalski Tested by: Alexander Traud patches: changes.patch submitted by Alessandro Crespi Change-Id: If68eedbeff65bd1c1d8a9ed921c02ba464b32dac 2016-09-20 09:42 +0000 [0056bcaebd] gtjoseph * chan_sip: Address runaway when realtime peers subscribe to mailboxes Users upgrading from asterisk 13.5 to a later version and who use realtime with peers that have mailboxes were experiencing runaway situations that manifested as a continuous stream of taskprocessor congestion errors, memory leaks and an unresponsive chan_sip. A related issue was that setting rtcachefriends=no NEVER worked in asterisk 13 (since the move to stasis). In 13.5 and earlier, when a peer tried to register, all of the stasis threads would block and chan_sip would again become unresponsive. After 13.5, the runaway would happen. There were a number of causes... * mwi_event_cb was (indirectly) calling build_peer even though calls to mwi_event_cb are often caused by build_peer. * In an effort to prevent chan_sip from being unloaded while messages were still in flight, destroy_mailboxes was calling stasis_unsubscribe_and_join but in some cases waited forever for the final message. * add_peer_mailboxes wasn't properly marking the existing mailboxes on a peer as "keep" so build_peer would always delete them all. * add_peer_mwi_subs was unsubscribing existing mailbox subscriptions then just creating them again. All of this was causing a flood of subscribes and unsubscribes on multiple threads all for the same peer and mailbox. Fixes... * add_peer_mailboxes now marks mailboxes correctly and build_peer only deletes the ones that really are no longer needed by the peer. * add_peer_mwi_subs now only adds subscriptions marked as "new" instead of unsubscribing and resubscribing everything. It also adds the peer object's address to the mailbox instead of its name to the subscription userdata so mwi_event_cb doesn't have to call build_peer. With these changes, with rtcachefriends=yes (the most common setting), there are no leaks, locks, loops or crashes at shutdown. rtcachefriends=no still causes leaks but at least it doesn't lock, loop or crash. Since making rtcachefriends=no work wasnt in scope for this issue, further work will have to be deferred to a separate patch. Side fixes... * The ast_lock_track structure had a member named "thread" which gdb doesn't like since it conflicts with it's "thread" command. That member was renamed to "thread_id". ASTERISK-25468 #close Change-Id: I07519ef7f092629e1e844f855abd279d6475cdd0 2016-09-21 15:03 +0000 [323aff3a09] Joshua Colp * core: Ensure presencestate subtype and message are NULL. When retrieving presence state information there is no guarantee that the subtype and message passed in are set to NULL. This change ensures they are. ASTERISK-26397 #close Change-Id: I61f8187972d5d8bbd7d6b7f4daa4f4f7e8237b23 2016-09-21 10:48 +0000 [10c180760c] Joshua Colp * res_odbc: Make pooling option deprecation notice more useful. This changes the notice for the deprecation of the old pooling options to point to the new option for doing pooling. This gives a clearer direction as to what to look into. ASTERISK-26389 #close Change-Id: I2ca9cdfdcd75aec170a7db9d5ff69a4cd25b7c10 2016-09-12 07:37 +0000 [42cc267016] Tzafrir Cohen * cdr_mysql: fix UTC support * Make 'cdrzone=UTC' work properly. * Fix the documentation of cdr_mysql.conf: it's cdrzone and not timezone ASTERISK-26359 #close Change-Id: I2a6f67b71bbbe77cac31a34d0bbfb1d67c933778 2016-09-21 08:46 +0000 [f16ab19292] Joshua Colp * odbc: Remove options that are no longer applicable. The pooling, shared_connection, limit, and idlecheck options are no longer used in res_odbc. ASTERISK-26389 Change-Id: I2fde7b467d01f9d1c82cc0a339bb4f7e1dd6bbe6 2016-09-20 15:17 +0000 [c9ce299b64] Corey Farrell * core: Fix LOW_MEMORY missing symbol ast_pbx_uuid_get. Move the function outside the conditional block that excludes LOW_MEMORY. ASTERISK-26273 #close Change-Id: Ic290fa128222c410c3531107e30efacabc8493b4 2016-09-20 10:05 +0000 [610eb4c189] Corey Farrell * logger: Fix default console settings. When logger.conf is missing or invalid we should be printing notices, warnings and errors to the console. The logmask was incorrectly calculated. Change-Id: Ibaa9465a8682854bc1a5e9ba07079bea1bfb6bb3 2016-06-27 14:26 +0000 [36092ee3a0] Tzafrir Cohen * sd_notify (systemd status notifications) support sd_notify() is used to notify systemd of changes to the status of the process. This allows the systemd daemon to know when the process finished loading (and thus only start another program after Asterisk has finished loading). To use this, use a systemd unit with 'Type=notify' for Asterisk. This commit also adds the function ast_sd_notify(), a wrapper around sd_notify that does nothing if not built with systemd support. Also adds support for libsystemd detection in the configure script. Change-Id: Ied6a59dafd5ef331c5c7ae8f3ccd2dfc94be7811 (cherry picked from commit 07b95f7c65b7c083724f1af2b26f93cc22cad58c) 2016-09-19 14:21 +0000 [9372d32100] Walter Doekes * asterisk.c: Non-root users also get the astcanary after core restart. Without this change, a 'core restart' would kill the astcanary forever if you're not running as root. Both with and without this patch, the scheduling priority was still SCHED_RR after restart. Additionally, the astcanary is now spawned if you start with high priority and Asterisk doesn't get a chance to lower it. For example through: `chrt -r 10 sudo -u asterisk asterisk -c` Also reap killed astcanary processes on core restart. ASTERISK-26352 #close Change-Id: Iacb49f26491a0717084ad46ed96b0bea5f627a55 2016-09-19 09:40 +0000 [e96448e991] Walter Doekes * asterisk.c: When astcanary dies on linux, reset priority on all threads. Previously only the canary checking thread itself had its priority set to SCHED_OTHER. Now all threads are traversed and adjusted. ASTERISK-19867 #close Reported by: Xavier Hienne Change-Id: Ie0dd02a3ec42f66a78303e9c1aac28f7ed9aae39 2016-09-09 06:35 +0000 [01884a7af6] Timo Teräs * Fix showing of swap details when sysinfo() is available If sysinfo() is available, but not sysctl() or swapctl() the printing code for swap buffer sizes is incorrectly omitted. The above condition happens with musl c-library. Fix #if rule to consider defined(HAVE_SYSINFO). And also remove the redundant || defined(HAVE_SYSCTL) which was incorrectly there to start with. Now swap information is displayed only if an actual libc function to get it is available. This also fixes warnings previously seen with musl libc: [CC] asterisk.c -> asterisk.o asterisk.c: In function 'handle_show_sysinfo': asterisk.c:773:6: warning: variable 'totalswap' set but not used [-Wunused-but-set-variable] int totalswap = 0; ^~~~~~~~~ asterisk.c:770:11: warning: variable 'freeswap' set but not used [-Wunused-but-set-variable] uint64_t freeswap = 0; ^~~~~~~~ Change-Id: I1fb21dad8f27e416c60f138c6f2bff03fb626eca 2016-09-12 18:00 +0000 [cdbad152c7] Richard Mudgett * res_config_odbc.c: Fix buffer size limitation creating invalid SQL. Creating ODBC SQL queries resulted in queries too large to fit into the supplied buffer. The resulting truncated buffer contained an invalid SQL query. * Made SQL query generation code use a thread storage buffer that can increase in size as needed. * Fixed bad multi-line warning messages. ASTERISK-26263 #close Reported by: Jeppe Ryskov Larsen Change-Id: I23f3cdd43c2dac80bed3ded4dd77d18cb17f21ae 2016-09-14 08:42 +0000 [449719be00] Joshua Colp * res_pjsip_multihomed: Change Contact port to listening port. The res_pjsip_multihomed module determines what interface and transport a request is going out on and updates the SIP message accordingly with the address information. This currently incorrectly updates the Contact header for connectionful protocols to the ephemeral connection port, instead of the bound address for the listening socket which can actually accept the connection back. If the remote side attempts to connect back on the epehemeral port it will fail. This change makes it so the port is updated to the bound port on connectionful protocols and is maintained on UDP (as there can be multiple of those). ASTERISK-26374 #close Change-Id: I50f8dab65b9f75117d73ba5f6bbcf6c9871854ab 2016-09-07 14:48 +0000 [4d64b176eb] gtjoseph * pjproject_bundled: Prevent SERVFAIL from marking name server bad A name server that returns "Server Failure" is indicating only that the server couldn't process that particular request. We should NOT assume that the name server is incapable of serving other requests. Here's the scenario we've been encountering... * 2 local name servers configured in resolv.conf. * An OPTIONS request causes a request for A and AAAA records to go out to both nameservers. * The A responses both come back successfully resolved. * Because of an issue at some upstream nameserver, the AAAA responses for that particular query come back as "SERVFAIL" from both local name servers. * Both local servers are marked as bad and no further queries can be sent until the 60 second ttl expires. Only previously cached results can be used. * In this case, 60 seconds is just enough time for another OPTIONS request to go out to the same host so the cycle repeats. We could set the bad ttl really low but that also affects REFUSED and NOTAUTH which probably DO signal a real server issue. Besides, even a really low bad ttl would be an issue on a pbx. Although we use our own resolver in 14 and master and don't have this issue there, Teluu has merged this patch upstream so it's appropriate to cherry-pick to 14 and master to keep pjproject consistent. Change-Id: Ie03ba902288e274aff23f9b9bb2786e1e8be09e0 2016-09-14 07:59 +0000 [1cac856e17] Joshua Colp * rtp: Preserve timestamps on video frames. Currently when receiving video over RTP we store only a calculated samples on the frame. When starting the video it can take some time for this calculation to actually yield a value as it requires constant changing timestamps. As well if a video frame passes over multiple RTP packets this calculation will fail as the timestamp is the same as the previous RTP packet and the number of samples calculated will be 0. This change preserves the timestamp on the frame and allows it to pass through the core. When sending the video this timestamp is used instead of a new one being calculated. ASTERISK-26367 #close Change-Id: Iba8179fb5c14c9443aee4baf670d2185da3ecfbd 2016-09-14 09:51 +0000 [9df4056d70] Joshua Colp * res_pjsip_transport_management: Convert time in log message to seconds. ASTERISK-26375 #close Change-Id: I46496af5cae41413e76d44d2068a7431279f09dc 2016-09-13 05:34 +0000 [98e42cc662] Steve Davies * chan_sip: Fix session timeout on retransmit of non-UDP packets Change-Id I1cd33453c77c56c8e1394cd60a6f17bb61c1d957 Enable Session-Timers for SIP over TCP (and TLS) also disables SIP retransmits in chan_sip for non-UDP connections, allowing the TCP layer to handle the retransmits. Unfortunately, this caused sessions to be terminated with a retransmit timeout becasue it stopped at the point of the first retrans call. This patch waits for the 64*T1 timer to expire instead. ASTERISK-19968 Change-Id: I844f26801aada10bc94e9bebe6e151f0a8443204 2016-09-12 12:25 +0000 [0388882cdb] Richard Mudgett * app_queue: Fix CLI "queue show" and AMI Queues action output truncation. The output of CLI "queue show" and AMI Queues action is truncated and "failed to extend from 240 to 327" messages are generated if the queue member and interface names are lengthy. * Increase the string buffer size from 240 to 512 in order to accommodate for more information fields added to the output since v1.8. ASTERISK-26360 #close Reported by: Richard Mudgett Change-Id: Id99c03cf5362453b80491a4b3b0434cb67aa966d 2016-09-12 03:28 +0000 [da8ba990d1] Walter Doekes * chan_sip: Allow target refresh (Contact update) on re-INVITE. Previously, the Contact was stored only on initial INVITE and on any 18X and 200. That meant that after re-INVITEs from *us* the Contact could get updated, but after re-INVITEs from the *peer*, it did not. This changeset fixes this inconsistency, properly allowing target refreshes through re-INVITES (RFC3261, 12.2). If your strictrtp setting allows it, this change allows you to switch the source IP of a connected/calling device mid-call with a simple re-INVITE from the new IP. ASTERISK-26358 #close Change-Id: Ibb8512054ab27c8c3d2514022568fde943bf2435 2016-08-31 15:22 +0000 [e9ddab4685] Richard Mudgett * sip_to_pjsip.py: Map legacy_useroption_parsing. Map the sip.conf general section legacy_useroption_parsing to the new pjsip.conf global ignore_uri_user_options. ASTERISK-26316 Reported by: Kevin Harwell Change-Id: I78108a31995db19d41f4e1a07b3324692c5363fc 2016-08-29 18:08 +0000 [30af92e78d] Richard Mudgett * res_pjsip: Add ignore_uri_user_options option. This implements the chan_sip legacy_useroption_parsing option but with a better name. * Made the caller-id number and redirecting number strings obtained from incoming SIP URI user fields always truncated at the first semicolon. People don't care about anything after the semicolon showing up on their displays even though the RFC allows the semicolon. ASTERISK-26316 #close Reported by: Kevin Harwell Change-Id: Ib42b0e940dd34d84c7b14bc2e90d1ba392624f62 2016-09-09 06:26 +0000 [7ed5dc2c58] Walter Doekes * contrib: Let safe_asterisk script continue without /dev/tty9. If you use the safe_asterisk script, it uses hardcoded defaults before running configurable values from /etc/asterisk/startup.d. The hardcoded default has TTY=9. Some containerized environments don't have such a TTY, and safe_asterisk would stop. The custom configuration from /etc/asterisk/startup.d/* isn't read until after it stopped, so changing TTY in a custom config did not help. This changeset changes safe_asterisk to continue if the TTY setting was untouched and /dev/tty9 and /dev/vc/9 aren't found. Change-Id: I2c7cdba549b77f418a0af4cb1227e8e6fe4148fc 2016-09-09 05:39 +0000 [7580a736bb] Joshua Colp * res_pjsip: Only invoke unidentified endpoint logic when unidentified. The code was incorrectly invoking the unidentified logic when an endpoint had actually been identified, causing log messages to be output. ASTERISK-26349 #close Change-Id: Id8104fc9e3d138d5e8b6f6977ecc08765fd17d4f 2016-08-23 06:35 +0000 [efcfc4c1ee] 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 [f1ffc22933] 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-06 11:46 +0000 [23d6ec7417] Richard Mudgett * res_pjsip_messaging.c: Misc cleanups and fixes. * Eliminated RAII_VAR in get_outbound_endpoint(). * Simplify update_to() coding. However, this function can only be a NoOp because the To string can only be a URI and not a name-address formatted string. * Simplify update_from() coding. Also fixed a code path modifying the from string when the caller could still want to use the original string. * Fixed msg_data_create() incompletely removing the "pjsip:" to then add back the "sip:" string if needed. The code didn't handle the "pjsip:sip:" case because it left the colon after pjsip in the string. Change-Id: I68a09a665f6d4daa9eaa59069045ab69122e28db 2016-09-07 16:00 +0000 [5f19657710] Joshua Colp * res_pjsip: Allow global headers to be overridden. Currently when you add global headers from the dialplan both the header in the dialplan and the globally configured header are added to the resulting SIP INVITE. This change makes it so the headers in the dialplan take precedence and are the only ones added. Change-Id: I36f864298f38db3632ad503edc11267cb8ffb3ad 2016-08-11 12:10 +0000 [206d4f57dc] Tzafrir Cohen * followme: initialize all config items on reload Some configuration directives were not initialized on reload, and hence were not reset to default if they were removed from followme.conf. ASTERISK-26288 #close Change-Id: Ief829e16374ad1e0ecfd63e6ee4923b5a1d1c150 2016-08-01 20:55 +0000 [117a7741c8] gtjoseph * build: Add download capability for external packages The DPMA and g729a, silk, siren7 and siren14 codecs hosted at http://downloads.digium.com/pub/telephony/ are now listed in the "External" sections of the "Resource Modules" and "Codec Translators" pages in menuselect. Any that are selected will automatically be downloaded and installed when "make install" is run. Their LICENSE and README (if avaialble) files will be installed to ASTVARLIBDIR/documentation/thirdparty/. Example use with codecs: The codecs/codecs.xml file is a menuselect style xml file that lists the codecs to be included. Their support levels are 'external', which triggers the download and install, and defaultenabled is no. Also because codec_g729a is actually in a directory named codec_g729 on the download server, the newly added 'member_data' element is used to override the default of the directory name being the package name. You can use the 'directory_name' attribute to keep default base URL (http://downloads.digium.com/pub/telephony/) but use the new directory, or you use the 'remote_url' attribute to specify a full URL to the download directory. In this case, you must still follow the same subdirectory naming conventions as that used for the packages located at 'http://downloads.digium.com/pub/telephony'. A new configure option '--with-externals-cache' was added and like '--with-sounds-cache' it allows the installer to cache tarballs so they're not downloaded every time. To assist with the download and install process, each external package now has a manifest.xml file that, among other things, contains a package version and checksums for each file in the tarball. The manifest is saved to both the cache directory and ASTMODDIR and together with the manifest.xml on the downloads site, tells the install scripts whether a download and/or update is needed. bash and xmlstarlet are required for downloader operation. If they're not installed, the external items in menuselect will be unavailable. Change-Id: Id3dcf1289ffd3cb0bbd7dfab3cafbb87be60323a 2016-09-06 02:41 +0000 [d04ae7d1d8] Walter Doekes * chan_sip: Don't refuse calls with "optional crypto"; fall back to RTP. Certain SNOM phones send so-called "optional crypto" in their SDP body. Regular SRTP setup looks like this: m=audio 64620 RTP/SAVP 8 0 9 99 3 18 4 101 a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:... SNOM-style "optional crypto" looks like this: m=audio 61438 RTP/AVP 8 0 9 99 3 18 4 101 a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:... A crypto line is supplied, but the m-line does not have SAVP. When res_srtp.so is *not* loaded, then chan_sip.so treats the optional crypto as regular RTP, but when res_srtp.so *is* loaded, it refuses the incoming call with the following message: WARNING: process_sdp: Failed to receive SDP offer/answer with required SRTP crypto attributes for audio For platforms that want to start providing SRTP this presents a compatibility problem. This changeset lets chan_sip handle the SDP as if no crypto-line was supplied: i.e. accept the call as regular RTP, just like it did before res_srtp was loaded. Now you'll get this informative warning instead: WARNING: Ignoring crypto attribute in SDP because RTP transport is insecure ASTERISK-23989 #close Reported by: Olle Johansson Change-Id: I91a15ae05a0296e398d6b65f53bb11afde1d80e2 2016-09-03 16:04 +0000 [df3d0188e4] Matt Jordan * apps/app_dial: Fix crash on non-connect call paths for Privacy/Screening option In any scenario in which the callee is not connected to the caller, the current code in app_dial will crash due to raising a Dial End Stasis Message after the callee channel has been hung up. This patch corrects the error by simply moving the explicit hangup of the callee (peer) channel until after the dial end message. ASTERISK-25691 #close Change-Id: I816a414014424d0d8c80e2a3cbef13ef8c63798d 2016-09-03 16:02 +0000 [a64063cc97] Matt Jordan * apps/app_dial: Set the DIALSTATUS to NOANSWER on privacy option 5 If the callee selects option '5' using the Dial application's privacy (P) option, the DIALSTATUS is erroneously set to ANSWER. This option reflects the callee sending the caller to VoiceMail one time; the call is definitely *not* ANSWERed in such a scenario. With this patch, the DIALSTATUS is instead set to NOANSWER, which is the same DIALSTATUS that is set when the 'send to VoiceMail every time' option is set. ASTERISK-25691 Change-Id: Iaf0c9f0fa00545e7366443875e2bb7d9a89a1358 2016-08-30 16:40 +0000 [03fc438f6e] Richard Mudgett * res_pjsip_registrar.c: Reduce stack usage in find_aor_name(). Change-Id: I8aebad1fdcf303bd115b59a4b57fbbd5b2267f09 2016-08-29 18:06 +0000 [b5e753227d] Richard Mudgett * pjsip_configuration.c: Ignore repeated identify by methods. Change-Id: Ied0c06043d1dfef8fdc9c9a808cf89b118119838 2016-08-30 17:26 +0000 [9b7501b6ad] Richard Mudgett * config_global.c: Comments and a default expression adjustment. Change-Id: Ia6a58f8c73a30da6874b3f94364dce162d6f1ad3 2016-08-31 15:14 +0000 [3314e1cec2] Richard Mudgett * sip_to_pjsip.py: Map canreinvite as directmedia alias. Change-Id: I48b8e150f96a3d2a24d8fc25fbe4f5aff9f4a6b2 2016-08-31 15:37 +0000 [6372f40ba0] Richard Mudgett * sip_to_pjsip.py: Fix typo converting outboundproxy registration. Change-Id: I6f30e5f9fcf8469ba0079fbf884047d54c2c0b15 2016-08-31 15:13 +0000 [11eb1afd2d] Richard Mudgett * sip_to_pjsip.py: Fix comment typo and tabs. Change-Id: If35174614545727817d329c60ba4456c028941b5 2016-08-31 15:56 +0000 [0f9b144c1a] Richard Mudgett * Sample configs: Eliminate false multiline comment block starts. Change-Id: Ie627def9604ae30abd80754f9e6f09874825aec6 2016-09-02 11:36 +0000 [8d1c535bd6] Richard Mudgett * format_cap.c: Fix CLI "core show channeltype Surrogate" crash. * Make ast_format_cap_get_names() NULL tolerant. ASTERISK-26331 #close Reported by: CGI.NET Change-Id: Id67e93936dc8ec2a33a9d33655843d43b59285a3 2016-08-18 14:45 +0000 [9bca895469] Alexei Gradinari * res_pjsip_session: segfault on already disconnected session On heavy loaded system the TCP/TLS incoming calls could be disconnected by pjproject while these calls are being processed by asterisk which could use the session's memory pools. If the session in the disconnected state then the session memory pools were already freed, so we get segfault. This patch adds a lifetime control on an INVITE session to pjproject. The lifetime of the session is manipulated by calling pjsip_inv_add_ref/pjsip_inv_dec_ref. This patch uses these functions to inform pjproject that the session is in use. This patch adds check if the session state is not disconnected and also checks if the memory pool is not NULL. This patch also places tasks 'session_end' and 'session_end_completion' into session's serializer to avoid race condition. ASTERISK-26291 #close Change-Id: I4d28b1fb3b91f0492a911d110049d670fdc3c8d7 2016-08-10 15:14 +0000 [63feffa126] Mark Michelson * ConfBridge: Make some announcements asynchronous. Confbridge announcements tend to block a channel while they are being played. In some circumstances, this is warranted since you want that particular channel not to hear the announcement (Example: "John Doe has entered the conference"). For others it makes less sense. This change first introduces methods for playing sounds asynchronously into the conference. This is very similar to how synchronous sounds are played, except the channel initiating the playback does not wait for the sound to complete before moving on. Asynchronous announcements are used for two circumstances: * Sounds played for a user after they have left the bridge * Sounds that play first to a single user and then the rest of the conference (if the channel and conference use the same language) ASTERISK-26289 #close Reported by Mark Michelson Change-Id: Ie486bb3de1646d50894489030326a423e594ab0a 2016-08-31 12:23 +0000 [a002a4d2db] Michael Kuron * app_mp3: Use correct buffer size and the same sample rate as the channel Previously, the buffer used for MP3 streamed from HTTP servers had a size of 1 MB. For 8 kHz mono audio at 16 bit resolution, such a buffer covers about 1 minute. Only when the buffer is full does audio start to play. For MP3 files streamed from a server, that is usually not a big deal as long as the connection to the server is fast enough to supply that much data within a second or two. For MP3 live streams however, it takes 1 minute to download 1 minute of audio, so without this change, app_mp3 wasn't really usable for MP3 live streams. This commit changes the buffer size so that it covers 6 seconds of an MP3 file streamed from a server and 0.5 seconds of an MP3 live stream. The latter is identified by the use of a .m3u file extension. app_mp3 so far only supported 8 kHz audio. Now it always runs at the sample rate of the channel. ASTERISK-26085 #close Change-Id: Id1ee274733cd804a0edecf7450329b72f1235af0 2016-08-26 10:39 +0000 [308a65fe6c] Alexei Gradinari * res_pjsip: qualify/unqualify added/deleted realtime endpoints If the PJSIP endpoint's AOR with the permanent contact was deleted from the realtime storage the res_pjsip module continues trying to qualify this contact. The error 'Unable to find an endpoint to qualify contact' appeares every 'qualify_frequency' seconds. This patch deletes this contact in this case. The PJSIP endpoint's AOR with the permanent contact is never qualified if it is added to realtime storage after asterisk started. This patch adds qualifying for the AOR's permanent contacts on the first handling of this AOR. ASTERISK-26319 #close Change-Id: Ib93dded9121edb113076903d1aa95402f799f8fe 2016-08-17 02:51 +0000 [2fa168348e] chris de rock * app_macro: Consider '~~s~~' as a macro start extension. As described in issue ASTERISK-26282 the AEL parser creates macros with extension '~~s~~'. app_macro searches only for extension 's' so the created extension cannot be found. with this patch app_macro searches for both extensions and performs the right extension. ASTERISK-26282 #close Change-Id: I939aa2a694148cc1054dd75ec0c47c47f47c90fb 2016-08-29 07:10 +0000 [27951792c4] Etienne Lessard * pbx.c: Prevent infinite recursion in manager_show_dialplan_helper. Previously, if context A was including context B and context B was including context A, i.e. if there was a circular dependency between contexts, then calling manager_show_dialplan_helper could lead to an infinite recursion, resulting in a crash. This commit applies the same solution as the one implemented in the show_dialplan_helper function. The manager_show_dialplan_helper and show_dialplan_helper functions contain lots of code in common, but the former was missing the "infinite recursion avoidance" code. ASTERISK-26226 #close Change-Id: I1aea85133c21787226f4f8442253a93000aa0897 2016-08-26 14:34 +0000 [fb82fdb013] gtjoseph * pjproject_bundled: Disable srtp use by pjmedia The reason for the disable is that while Asterisk works fine with older libsrtp versions, newer versions of pjproject won't compile with them. Debian 6 for instance, has libsrtp 1.4.4 which is older than what pjproject is expecting. We don't use most of pjmedia but we DO use it for SDP negotiation. Luckily disabling srtp in pjmedia doesn't interfere with it's ability to negitiate a secure channel. The proper crypto attributes are negotiated in both directions. ASTERISK-26279 #close Change-Id: Id25a92cdf3df97a26c53cffae65b6b82de33c8e2 2016-08-26 08:41 +0000 [847bd47ff0] Alexander Traud * channel: No hung-up on failing security requirements. In your Diaplan, if you specify same => n,Set(CHANNEL(secure_bridge_media)=1) same => n,Set(CHANNEL(secure_bridge_signaling)=1) only the SIP channel driver chan_sip supports this. All other channels drivers like res_pjsip fail. In case of failure, the original sRTP source code released the whole channel, even if not hung-up, yet. This change does not release the channel but instead hangs-up the channel. ASTERISK-26306 Change-Id: I0489f0cb660fab6673b0db8af027d116e70a66db 2016-08-20 09:04 +0000 [b59d3b48d0] Alexander Traud * sip_to_pjsip: Migrate IPv4/IPv6 (Dual Stack) configurations. When using the migration script sip_to_pjsip.py, and your sip.conf is configured with bindaddr=::, two transports are written to pjsip.conf, one for 0.0.0.0 (IPv4) and one for [::] (IPv6). That way, PJProject listens on the IPv4 and IPv6 wildcards; a IPv4/IPv6 Dual Stack configuration on a single interface like in chan_sip. Furthermore, the script internal functions "build_host" and "split_hostport" did not parse Literal IPv6 addresses as expected (like [::1]:5060). This change makes sure, even such addresses are parsed correctly. ASTERISK-26309 Change-Id: Ia4799a0f80fc30c0550fc373efc207c3330aeb48 2016-08-25 07:06 +0000 [f69f5cd3c4] 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-08-04 20:11 +0000 [5cd583d7a2] Richard Mudgett * res_pjsip: Cache global config options. We may check a global config option hundreds of times a second or more. Asking sorcery for the global configuration from the config files backend involves several allocations and container traversals. Using realtime without a memory cache is a lot worse because you have to lookup in the realtime database each time to reconstitute the sorcery object. With a memory cache for realtime, there is about the same amount of overhead as for config files. Either way, it is still fairly expensive to access the sorcery object that much. * Cache the global config options so we can access them faster. You must now always perform a res_pjsip reload to change the global options. Change-Id: Ice16c7a4cbca4614da344aaea21a072b86263ef7 2016-08-23 11:02 +0000 [8b4b2500ee] Richard Mudgett * res_fax: Fix deadlock in ast_channel_get_t38_state(). ast_channel_get_t38_state() calls ast_channel_queryoption() with AST_OPTION_T38_STATE. If the passed in channel is a local channel then a deadlock can happen if a channel lock is held when called. * Made ast_channel_get_t38_state() callers not hold a channel lock before calling. * Update ast_channel_get_t38_state() doxygen to note that no channel locks can be held when calling the function. ASTERISK-26203 #close Reported by: Etienne Lessard ASTERISK-24822 #close Reported by: David Brillert ASTERISK-22732 #close Reported by: Richard Mudgett Change-Id: I49fd76fa9af628b4198009b5c0b82c8b03681214 2016-08-23 10:39 +0000 [e8d4f40022] Richard Mudgett * res_fax: Fix deadlock setting FAXMODE channel variable. ASTERISK-25980 added the FAXMODE channel variable to res_fax.c. Unfortunately, it also introduced a deadlock potential because set_channel_variables() which sets FAXMODE can be called during a masquerade. The ast_channel_get_t38_state() which gets the value used to set FAXMODE cannot be called with the channel locked. As a result, local channels can deadlock because of how they must acquire the locks necessary to operate. The intent of FAXMODE is for dialplan to know how a fax was transferred after the fax completes. However, the previous patch sets FAXMODE to the channel's current T.38 state AFTER the fax has completed and where T.38 may have already disconnected. * Set FAXMODE based upon T.38 negotiations exchanged either with the fax applications or the fax framehooks. ASTERISK-26203 Reported by: Etienne Lessard ASTERISK-24822 Reported by: David Brillert ASTERISK-22732 Reported by: Richard Mudgett Change-Id: Id525747254b64c1efe8b1b5973d52ff9719c2ae1 2016-08-22 12:31 +0000 [35cf6c7702] Richard Mudgett * res_fax.c: Fix deadlock in fax_gateway_indicate_t38(). fax_gateway_indicate_t38() calls ast_indicate_data() which cannot be called with any channel locks already held. A deadlock can happen if the function is operating on a local channel. * Made fax_gateway_indicate_t38() unlock the channel before calling ast_indicate_data() since fax_gateway_indicate_t38() is always called with the channel locked. * Made fax_gateway_indicate_t38() return void since nothing cared about its return value. ASTERISK-26203 Reported by: Etienne Lessard ASTERISK-24822 Reported by: David Brillert ASTERISK-22732 Reported by: Richard Mudgett Change-Id: I701ff2d26c5fc23e0d5a48a3fd98759a9fd09407 2016-08-23 11:16 +0000 [50b2aa506f] Richard Mudgett * res_fax.c: Add chan locked precondition comments. Change-Id: Ic10ae434536bbf7fb7055d6ab36cc50b8748a4e7 2016-08-23 10:42 +0000 [038cbc0215] Richard Mudgett * ast_framehook_detach() must be called with the channel locked. The framehook container could become corrupted if the channel lock is not held before calling. Change-Id: If0a1c7ba0484ed3a191106a7516526b905952584 2016-08-22 15:01 +0000 [88e9d05ef7] Richard Mudgett * ast_framehook_attach() must be called with the channel locked. The framehook container could become corrupted if the channel lock is not held before calling. Change-Id: I1a6b957a1f7b899eb29a186915f8cccab886a438 2016-08-24 14:42 +0000 [c9e83f6d0b] 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 2016-08-19 18:19 +0000 [cb8fd610e2] Corey Farrell * Fix checks for allocation debugging. MALLOC_DEBUG should not be used to check if debugging is actually enabled, __AST_DEBUG_MALLOC should be used instead. MALLOC_DEBUG only indicates that debugging is requested, __AST_DEBUG_MALLOC indicates it is active. Change-Id: I3ce9cdb6ec91b74ee1302941328462231be1ea53 2016-08-10 15:14 +0000 [b8b5d52b5e] Mark Michelson * ConfBridge: Rework announcer channel methodology NOTE: This patch was submitted earlier and reverted because of a failing test. The test has been patched so that it adjusts for the changes here, so this is being resubmitted for review. One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ica9fa4907c2f3728cdd1cf0bc564ef4eb40754a0 2016-08-23 05:54 +0000 [d5d7cbfcfb] Joshua Colp * Revert "ConfBridge: Rework announcer channel methodology" This reverts commit 0cdeb2bfb0f4203384c08858951af3c77be8b9b3. Change-Id: I18ba73b6d4dc0b994f4ffb01ae0b6cfad36ac636 2016-08-22 17:08 +0000 [c16ef02318] 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 2016-08-20 14:51 +0000 [e54dcf4fd5] David M. Lee * res_odbc_transaction: add dep on generic_odbc When res_odbc_transaction depended on res_odbc, it got the generic_odbc headers and libs implicitly. Now that it no longer depends on res_odbc, its dependency on generic_odbc must be explicit. Change-Id: I9db88f7af7388437f49903d3008ba8d4890d5911 2016-08-20 11:18 +0000 [be38c95def] Alexander Traud * pjproject_bundled: Allow IPv4/IPv6 (Dual Stack) configurations. PJProject supports a lot of platforms even Windows, some with different defaults when it comes to IPv6. In many Linux platforms like Ubuntu 16.04 LTS, "/proc/sys/net/ipv6/bindv6only" is set to 0 (false). Different than in Windows. Because of this, if configured with just an IPv6 address/transport, PJProject listens to both IPv4 and IPv6. However, this is not supported by the PJProject team. As consequence, you end-up with IPv4-mapped IPv6 addresses in SDP, incompatible with IPv4-only clients. Technically, you end-up with an IPv6-only server which accepts incoming connections on IPv4. If you try to configure two transports, one with IPv4 and one with IPv6 on the same interface, as expected by the PJProject team, the IPv4 transport is not able to bind because the IPv6 transport listens to both already. One solution would be to change "/proc/sys/net/ipv6/bindv6only" system-wide. Then, you are able to configure two transports, one for each IP version on the same interface. That way, you get a server which works with IPv4 clients and IPv6 clients at the same time over the same interface. Here, this change sets this parameter directly within PJProject to match the expectations of the PJProject team in any case. This allows IPv4/IPv6 Dual Stack servers out of the box like in chan_sip. This change was accepted by the PJProject team as and is expected to arrive in the next version, PJProject 2.6.0. Until then, this change is incorporated in the bundled PJProject of Asterisk. ASTERISK-26309 Change-Id: I3335d8718f79f4b2feae91b5b005a3ce684a63ae 2016-08-10 15:14 +0000 [0cdeb2bfb0] Mark Michelson * ConfBridge: Rework announcer channel methodology One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ic5cd2c4b98a1eaa1715eb7a5b35d62f1a76d78a5 2016-08-19 10:21 +0000 [b494b9f88c] Alexei Gradinari * compilation failed with -Werror=maybe-uninitialized The compilation failed for devmode --enable DONT_OPTIMIZE --enable BETTER_BACKTRACES --enable DO_CRASH --enable TEST_FRAMEWORK res_pjsip/pjsip_configuration.c: In function dtls_handler: res_pjsip/pjsip_configuration.c:974:20: error: back may be used uninitialized in this function [-Werror=maybe-uninitialized] int size = strlen(front); ^ cc1: all warnings being treated as errors Change-Id: I7f082ead0312792a577ec7c73015ba64dabca580 2016-08-19 03:59 +0000 [a628009eb9] Alexander Traud * sip_to_pjsip: Add cert_file. When using the migration script sip_to_pjsip.py, cert_file was not migrated to pjsip.conf. A previous change regarding this contained a copy/paste error. ASTERISK-22374 Change-Id: I0fa72e9412117d53b4284fc6b83fa5b2b95ba03b 2016-08-18 09:21 +0000 [b1fe070d0b] Alexander Traud * sip.conf: tlsclientmethod is using sslv23 as default. When 'tlsclientmethod' is not specified in sip.conf, chan_sip uses the OpenSSL SSLv23_method. This was documented incorrectly in the file sip.conf.sample. SSLv23_method got its name in the 90s. Today, with OpenSSL 1.0.2, this method enables (just) the secure TLSv1.0 and TLSv1.2. Or stated differently, that function should have been called 'secure_method' or 'automatic_method' back in the 90s. Consequently please, specify 'tlsclientmethod=tlsv1' in your sip.conf only if you face a server which has problems like not falling back to TLSv1.0 automatically. ASTERISK-24425 Change-Id: I502ce6146b4504cadfd3973af8d6ec3994f54fa3 2016-08-18 17:16 +0000 [ff2378c735] Kevin Harwell * rest-api: Swagger scripts were not replacing format variable in file brief Given resource paths did not have 'json' substituted in for the '{format}'. For some auto generated documentation/comment strings it resulted in something like the following: "... REST handler for /api-docs/sounds.{format}" This patch makes sure the resource api's path is properly substituted. ASTERISK-25472 #close Change-Id: Ie3e950a35db4043e284019d6c9061f3b03922e23 2016-08-16 15:57 +0000 [43f400ef95] Jason Parker (license 4993) * res_format_attr_g729: Add annexb=no format parameter to SDPs Historically, Asterisk has always specified annexb=no for the g729 format. However, when using res_pjsip no format attribute was specified. This patch makes it so the SDP now contains a format attribute line with annexb=no. Note, that this means only g729a is negotiated. Even for pass through support. According to rfc7261 the type of annex used (a or b) is dependent upon the answerer. However, Asterisk being a back to back user agent makes this tricky to support at this time, thus we only allow annex 'a' for now. ASTERISK-26228 #close patches: res_format_attr_g729.c submitted by Jason Parker (license 4993) Change-Id: I76bc20cc0a01af01536e9915afef319c269c22d0 2016-08-18 15:15 +0000 [4c1ae07d51] gtjoseph * res_odbc: Correct the dependency relationship with res_odbc_transaction The MODULEINFO dependencies between these 2 modules was reversed. res_odbc should depend on res_odbc_transaction, not the other way around. ASTERISK-25984 #close Change-Id: Ifcfbb49c0b51cf6640a5446d47cd6c48caf1331f 2016-08-18 12:04 +0000 [cab6975b02] Kevin Harwell * sip_to_pjsip: Set correct tls transport method A recent update had a copy/paste error where the unused variable 'val' was being passed to the set_value function instead of the 'method' value itself. This patch passes in the right variable. ASTERISK-22374 Change-Id: I895b7b3779ce4442bc58b8ec40d59dd29bb43f06 2016-08-18 08:19 +0000 [2381ddde63] Alexander Traud * sip_to_pjsip: Map the TLS method correctly. When using the migration script sip_to_pjsip.py and tlsclientmethod is not set in sip.conf, the default value of chan_sip (sslv23) is copied to pjsip.conf, to overwrite the default of the PJProject (tlsv1). This makes sure, res_pjsip is offering/using not just TLSv1.0 but TLSv1.2 as well. ASTERISK-22374 Change-Id: Ie530a3dae9926ae14f3920a21be1e2edb15bda4f 2016-08-18 08:17 +0000 [6500f5e138] Alexander Traud * sip_to_pjsip: Add compactheaders, timerb, timert1, and useragent. When using the migration script sip_to_pjsip.py, no section of type=system or type=general were created. Therefore the keys compactheaders, timerb, timert1, and useragent were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I318a453843227ea36bf130d392d4abd7bd26b5a1 2016-08-18 08:16 +0000 [21e9c69e56] Alexander Traud * sip_to_pjsip: Map (session-)timers correctly. When using the migration script sip_to_pjsip.py, session-timers=accept and session-timers=refuse were mapped to wrong values. ASTERISK-22374 Change-Id: Ie4e90d5f6a29aff07837b7fe5bc8aea5fb6fc092 2016-08-18 08:15 +0000 [c9a97398f7] Alexander Traud * sip_to_pjsip: Write username even without authname. When using the migration script sip_to_pjsip.py, now the (mandatory) username is written to pjsip.conf, even if there was no (optional) authname in the register string in sip.conf. ASTERISK-22374 Change-Id: Ie53e1997104cd2674821688b8a8247249f5e156f 2016-08-18 08:14 +0000 [60275359bc] Alexander Traud * sip_to_pjsip: Parse register even with transport. When using the migration script sip_to_pjsip.py and the register string started with a transport in sip.conf - like tls://... - register was not parsed correctly and therefore not migrated correctly to pjsip.conf. ASTERISK-22374 Change-Id: I44c12104eea2bd8558ada6d25d77edfecd92edd2 2016-08-18 08:13 +0000 [0d479232eb] Alexander Traud * sip_to_pjsip: Write local_net, contact_acl, contact_deny, and contact_permit. When using the migration script sip_to_pjsip.py, those keys got missing. These keys might appear several times and the function "merge_value" tried to collect those. However, because these keys have different names in sip.conf and pjsip.conf, "merge_value" was not able to find the new key name in sip.conf. This change lets "merge_value" search with the old key name in sip.conf and write with the new key name in pjsip.conf. ASTERISK-22374 Change-Id: Ie53c5278ae6f1cb8fa7e96c5289877d46981d9d2 2016-08-18 08:11 +0000 [cbc1b2d020] Alexander Traud * sip_to_pjsip: Map externhost/ip to Transports. When using the migration script sip_to_pjsip.py, the externhost or externip of sip.conf were erroneously written to Endpoints instead to Transports. ASTERISK-22374 Change-Id: I2c5873386cfc388899fa9cf2368639dd12f1b8e4 2016-08-18 08:04 +0000 [5f33e99534] Alexander Traud * sip_to_pjsip: Add defaultexpiry, maxexpiry, and minexpiry. When using the migration script sip_to_pjsip.py, defaultexpiry, maxexpiry, and minexpiry were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I007fbf543dcadc96fc3ed71c54da502bcb209b7b 2016-08-18 08:03 +0000 [231ea0350d] Alexander Traud * sip_to_pjsip: Write media_encryption. When using the migration script sip_to_pjsip.py, encryption=yes got missing and media_encryption=sdes was not written to pjsip.conf, because of a typo. ASTERISK-22374 Change-Id: I0fc3e55dc512a57603ae0fef41baacccf2a35c05 2016-08-18 08:02 +0000 [23eb065121] Alexander Traud * sip_to_pjsip: Write cos and tos. When using the migration script sip_to_pjsip.py, both tos_sip and cos_sip got missed, because of a typo. Therefore, cos and tos were not written to pjsip.conf. Furthermore, that revealed a misuse of an internal function, caused by a copy-and-paste error. ASTERISK-22374 Change-Id: Id245ebadf70ab9776eb280c026288540af3af5c2 2016-08-18 07:55 +0000 [0b675a208b] Alexander Traud * sip_to_pjsip: Add cert_file and ca_list_path. When using the migration script sip_to_pjsip.py, cert_file and ca_list_path were not migrated to pjsip.conf. ASTERISK-22374 Change-Id: I4612877d190b7f86a48698cefbf5c4db6c265825 2016-08-17 14:13 +0000 [1cd12d73a6] Richard Mudgett * res_pjsip_session.c: Fix unbound srv failover tests. Commit 1b666549f33d69dc080b212bf92126f3bc3a18b2 broke the srv failover functionality if a TCP connection gets disconnected. Under these conditions, session_inv_on_state_changed() gets a PJSIP_EVENT_TRANSPORT_ERROR and restarts the INVITE transaction on a new transport. Unfortunately, session_inv_on_tsx_state_changed() also gets the same PJSIP_EVENT_TRANSPORT_ERROR event and unconditionally terminates the session. * Made session_inv_on_tsx_state_changed() complete terminating the session on PJSIP_EVENT_TRANSPORT_ERROR only if the session state is still PJSIP_INV_STATE_DISCONNECTED. ASTERISK-26305 #close Reported by: Richard Mudgett Change-Id: If736e766b5c55b970fa38ca6c8a885caf27b897d 2016-08-16 15:36 +0000 [329507fe20] gtjoseph * res_pjsip: Add contact_user to endpoint contact_user, when specified on an endpoint, will override the user portion of the Contact header on outgoing requests. Change-Id: Icd4ebfda2f2e44d3ac749d0b4066630e988407d4 2016-08-17 08:10 +0000 [6f448f32fe] Torrey Searle * res_ari: Add http prefix to generated docs updated the uri handler to include the url prefix of the http server this enables res_ari to add it to the uris when generating docs Change-Id: I279335a2625261a8492206c37219698f42591c2e 2016-08-17 06:12 +0000 [56e0aed177] Alexander Traud * BuildSystem: Detect ca_list_path capabilities in external PJProject. Since Asterisk 13.8, pj_ssl_cert_load_from_files2 got detected only in the bundled PJProject but not in an external PJProject. Therefore, ca_list_path could not be used in pjsip.conf. With this change, pj_ssl_cert_load_from_files2 is detected again to enable ca_list_path again. ASTERISK-26303 #close Change-Id: I4a4a0cdc5cdff33730911fb4cfc0498c069043d0 2016-08-16 12:24 +0000 [2edcfcf1eb] gtjoseph * ari: Add documentation that path parameters are case-sensitive Added to api.wiki.mustache so that the generated object pages have the notation in the table header as well as under each method that has path parameters. ASTERISK-25492 #close Change-Id: I36c46c6dc0c9ac350470394a999a1b19ef3fcdaf 2016-08-15 15:29 +0000 [f4e28b3a09] Corey Farrell * Refactor usage pattern of xmldoc info tag. This updates func_channel.c and main/message.c to use a generic xpointer include instead of including info from each channel driver. Now the name attribute of info is CHANNEL or CHANNEL_EXAMPLES to be included in documentation for func_channel. Setting the name attribute of info to MessageToInfo or MessageFromInfo causes it to be included in the MessageSend application and AMI action. Change-Id: I89fd8276a3250824241a618009714267d3a8d1ea 2016-08-04 20:00 +0000 [a8d9a53bae] Richard Mudgett * res_sorcery_config.c: Cleanup ao2 container usage idioms. Change-Id: Iad24b335fb121a2bc7f1d048ab7420569edcba5a 2016-08-04 15:57 +0000 [74a91b9ee5] Richard Mudgett * sorcery.c: Minor optimizations. * Remove some unused parameters from internal functions: sorcery_wizard_create() sorcery_wizard_update() sorcery_wizard_delete() * Created the struct sorcery_observer_invocation ao2 object without a lock since it is not needed in sorcery_observer_invocation_alloc(). * Cleanup generic ao2 container sorcery object id hash, sort, and cmp functions. Change-Id: Iff71d75f52bc1b8cee955456838c149faaa4f92e 2016-08-01 11:04 +0000 [29beb2890c] Richard Mudgett * sorcery.c: Tweak some container declaration formatting. * Tweak sorcery_object_type_alloc() formatting. * Tweak ast_sorcery_init() formatting. Change-Id: Ib02430023f15268cd7a2ea53f2c331213e4d3944 2016-08-11 23:30 +0000 [9b822293bd] Corey Farrell * pbx.c: Additional fixes to ast_context_remove_extension_callerid2. Do not check registrar of the first extension head. We should only check the registrar when we match the priority. Additionally fix a couple calls to strcmp which used the input callerid instead of the clean version ex.cidmatch. ASTERISK-26233 Change-Id: I17ea6881a18f40840ae9c1f5394aab1fbb3769f1 2016-08-10 14:41 +0000 [403c794684] Alexei Gradinari * core: Entity ID is not set or invalid The Exchanging Device and Mailbox States could not working if the Entity ID (EID) is not set manually and can't be obtained from ethernet interface. This patch replaces debug message to warning and addes missing description about option 'entityid' to asterisk.conf.sample. With this patch the asterisk also: (1) decline loading the modules which won't work without EID: res_corosync and res_pjsip_publish_asterisk. (2) warn if EID is empty on loading next modules: pbx_dundi, res_xmpp Starting with v197 systemd/udev will automatically assign "predictable" names for all local Ethernet interfaces. This patch also addes some new ethernet prefixes "eno" and "ens". ASTERISK-26164 #close Change-Id: I72d712f1ad5b6f64571bb179c5cb12461e7c58c6 2016-06-15 17:10 +0000 [93332cb1d0] Evgeniy Tsybra * chan_sip: Fix lastrtprx always updated Packets are read regulary, when there is no data in buffer fr->frametype is AST_FRAME_NULL. There was no check of frametype and lastrtprx always updated and, therefore, rtptimeout did not work at all. ASTERISK-25270 #close Change-Id: If3b5ca0dbb822582a86eb7d01dcae4e83448c41d 2016-08-15 07:17 +0000 [2735ec899a] Joshua Colp * manager: Clarify that dialplan manipulation actions are under system class. ASTERISK-26246 #close Change-Id: Id673b9786389f9d2a87f638ce1a25161f5f31657 2016-08-13 22:02 +0000 [f59bd47ed3] Matt Jordan * app_dial: Improve documentation * Add some helpful and other embedded paragraph tags * Document some of the lesser known channel variables set by Dial * Add examples for some common Dial uses, along with some more challenging but useful options Change-Id: Ib2fb9301e8e044d14fbb2815ec64161f19bbfbc1 2016-08-13 20:16 +0000 [4facaac408] Matt Jordan * manager: Add tags to relate interrelated events/actions together Change-Id: Idbac539205aa732bf786c4f765577d8e9ff28ba4 2016-08-13 20:15 +0000 [232d4fe24f] Matt Jordan * manager: Add tags to relate Bridge related events,actions, and apps Change-Id: I67e6b79fa3102e494b5fe6cc7510472249080e85 2016-08-13 20:14 +0000 [63c0b2f7c9] Matt Jordan * manager: Add tags to relate AoC events and actions Change-Id: Iea89a36222712148c1775c05ed0ad1049d67a70e 2016-08-13 20:13 +0000 [0422667d6c] Matt Jordan * manager: Add tags to relate UserEvent actions/apps/events Change-Id: I80f8a981f62f50e74609c69c49edcaca6c95efa4 2016-08-12 15:53 +0000 [f9e734974b] Matt Jordan * res_agi: Improve documentation * Groups of AGI commands that have similar functionality now reference each other, and all reference the AGI application for ease of wiki reference. * The documentation for the AGI application has been improved, in particular noting the various AGI types and how they are invoked. * A warning message has been added to DeadAGI, noting that it is deprecated. Change-Id: I479ccdee8a7393f01b18692c3d4ab7e6bdd1875d 2016-08-12 13:53 +0000 [781bb410d0] Matt Jordan * manager: Add links between related events This patch adds some see-also references between related AMI events. It focuses primarily on those events that are guaranteed to come in pairs, such as DTMFBegin/DTMFEnd, as well as those that occur during the life cycle of an Asterisk channel, such as Newchannel/Hangup. Change-Id: Iaab600477052018d0f8c03d0c624c0856e9ff1f3 2016-08-12 11:15 +0000 [cfd6852d39] Matt Jordan * func_channel: Reorganize documentation * Following the example of the PJSIP channel driver, the channel technology specific documentation has been moved to the respective channel drivers that provide that functionality. This has the benefit of locating the documentation of items with those modules that provide it. * Examples of using the CHANNEL function for both standard items as well as for PJSIP have been added. * The 'max_forwards' standard item has been documented. Change-Id: Ifaa79a232c8ac99cf8da6ef6cc7815d398b1b79b 2016-08-11 22:11 +0000 [cb043249b6] Corey Farrell * Run mandatory cleanup when startup fails. Errors during startup result in an exit. These error branches should be calling ast_run_atexit(0) to ensure mandatory cleanup is run. ASTERISK-26267 #close Change-Id: If226f2326ae2df7add20040696132214cf2bb680 2016-08-11 11:24 +0000 [4d5e96ab53] gtjoseph * res_pjsip_caller_id: Copy header name to short header name When compact_headers was set, we were sending a zero-length header name for PAI and RPID because we always forced the short header name length to 0. We did this because we cloned the header from "From" and wanted to clear "f" from the sname. By cloning however, we bypass pjproject's automatic logic that sets sname to name if there's no compact form of the header, which there isn't for PAI and RPID. So now we force sname to be the same as name right after we set name. res_pjsip_diversion needed the same treatment for the Diversion header. ASTERISK-26241 #close Change-Id: I633ec139630cd83809aae00336cee4a10077e467 2016-08-11 12:18 +0000 [143df33110] gtjoseph * res_pjsip: Fail global load if debug or default_from_user are empty If debug was specified in the global configuration but left blank, the logger would treat it as a wildcard and log all hosts. If default_from_user was empty, a crash would result. The global apply handler now checks for empty strings. ASTERISK-26239 #close ASTERISK-26238 #close Change-Id: Ie75727f5cd5808845d92cc81f5713842fb203336 2016-08-01 15:07 +0000 [1fc5c90014] Richard Mudgett * res_pjsip res_pjsip_mwi: Misc fixes and cleanups. * Eliminated RAII_VAR() usage in ast_sip_persistent_endpoint_update_state(). * Added a missing allocation failure check to persistent_endpoint_find_or_create(). * Made persistent_endpoint_find_or_create() create the new object without a lock as it isn't needed. * Cleaned up some ao2 container allocation idioms. * Reordered res_pjsip_mwi.c load_module() and unload_module() Change-Id: If8ce88fbd82a0c72a37a2388f74f77237a6a36a8 2016-08-04 18:03 +0000 [73052e5732] Richard Mudgett * location.c: Misc fixes and cleanups. * Eliminated most RAII_VAR() usage. * Added several missing allocation failure checks. * Made ast_sip_for_each_contact() allocate the wrapper ao2 object without a lock as it is not needed. Change-Id: Ie20913365156c95dd79e5d471cfd25e99ae880bc 2016-08-02 13:53 +0000 [9d4bd3d763] Richard Mudgett * taskprocessor.c: Tweak high water checks. * The high water check in ast_taskprocessor_alert_set_levels() would trigger immediately if the new high water level is zero and the queue was empty. * The high water check in taskprocessor_push() was off by one. Change-Id: I687729fb4efa6a0ba38ec9c1c133c4d407bc3d5d 2016-08-03 16:24 +0000 [e1248c3075] Richard Mudgett * res_pjsip: Make aor named lock a mutex. The named aor lock was always being locked for writes so a rwlock adds no benefit and may be slower because rwlocks are biased toward read locking. Change-Id: I8c5c2c780eb30ce5441832257beeb3506fd12b28 2016-07-29 17:41 +0000 [6e40334d89] Richard Mudgett * pjsip_distributor.c: Add missing allocation failure check. Change-Id: I932ab2cea845e534d9ff318035b6de39972d3b28 2016-08-11 11:13 +0000 [a3c5488ff4] Matt Jordan * app_queue: Prevent crash when a call is forwarded to an invalid location When a call forward attempt is made from a Queue member, the current code will hang up the forwarding channel in an off-nominal condition prior to raising the Stasis events informing the rest of Asterisk that the call was forwarded. This will result in a slew of dreaded FRACKs, most likely leading to a crash. This patch modifies the code such that we don't hang up the forwarding channel even in an off-nominal condition until we've safely raised the Stasis messages. ASTERISK-25797 #close Change-Id: Ife5abed351691fd79105321636eaa8ea8dcdba38 2016-08-11 10:50 +0000 [5913929d31] Kevin Harwell * alembic: add auth_username to endpoint's identify_by enum A new identify_by option was added recently, auth_username. However, this setting was not added as an allowable choice in the database enumeration value. This patch updates the current enumeration, adding in the new setting. ASTERISK-26268 #close Change-Id: Ib4788e8485e4cd40172ec0abbf5810a147ab8bf8 2016-08-06 10:57 +0000 [1589452fdc] Alexei Gradinari * pjsip: Fix deadlock with suspend taskprocessor on masquerade If both channels which should be masqueraded are in the same serializer: 1st channel will be locked waiting condition 'complete' 2nd channel will be locked waiting condition 'suspended' On heavy load system a chance that both channels will be in the same serializer 'pjsip/distibutor' is very high. To reproduce compile res_pjsip/pjsip_distributor.c with DISTRIBUTOR_POOL_SIZE=1 Steps to reproduce: 1. Party A calls Party B (bridged call 'AB') 2. Party B places Party A on hold 3. Party B calls Voicemail app (non-bridged call 'BV') 4. Party B attended transfers Party A to voicemail using REFER. 5. When asterisk masquerades calls 'AB' and 'BV', a deadlock is happened. This patch adds a suspension indicator to the taskprocessor. When a session suspends/unsuspends the serializer it sets the indicator to the appropriate state. The session checks the suspension indicator before suspend the serializer. ASTERISK-26145 #close Change-Id: Iaaebee60013a58c942ba47b1b4930a63e686663b 2016-08-09 12:07 +0000 [f6ec94cca6] Kevin Harwell * alembic/sqlalchemy: auto increment only allowed on a single column The extensions table defined two columns (id and priority) as primary key autoincrement columns. However only one is allowed when defining the primary key. This patch removes the autoincrement attribute from the priority column since it does not need to be as such and really should not have been on there in the first place. This patch also removes 'context', 'exten', and 'priority' from the primary key index and creates a new combined unique contraint index on them. ASTERISK-26183 #close Change-Id: Ib9c712c612a4d7ec1edb0dcb77f1bae0905a470b 2016-08-07 09:58 +0000 [5f815f9dba] Matt Jordan * channels/chan_pjsip: Add PJSIP_SEND_SESSION_REFRESH This patch adds a new PJSIP specific dialplan function, PJSIP_SEND_SESSION_REFRESH. When invoked on a PJSIP channel, the media session will be refreshed via either an UPDATE or re-INVITE request. When used in conjunction with the PJSIP_MEDIA_OFFER dialplan function, the formats in use on a PJSIP channel can be re-negotiated and changed dynamically after call setup. ASTERISK-26277 #close Change-Id: Ib98fe09ba889aafe26d58d32f0fd1323f8fd9b1b 2016-08-09 16:19 +0000 [a119bab6a6] Mark Michelson * res_rtp_asterisk: Cache local RTCP address. When an RTCP packet is sent or received, res_rtp_asterisk generates a Stasis event that contains the RTCP report as well as the local and remote addresses that the report pertains to. The addresses are determined using ast_find_ourip(). For the local address, this will typically result in a lookup of the hostname of the server, and then a DNS lookup of that hostname. If you do not have the host in /etc/hosts, then this results in a full DNS lookup, which can potentially block for some time. This is especially problematic when performing RTCP reads, since those are done on the same thread responsible for reading and writing media. This patch addresses the issue by performing a lookup of the local address when RTCP is allocated. We then use this cached local address for the Stasis events when necessary. ASTERISK-26280 #close Reported by Mark Michelson Change-Id: I3dd61882c2e57036f09f0c390cf38f7c87e9b556 2016-08-08 12:53 +0000 [a06a1af0eb] Alexei Gradinari * res_pjsip_mwi: fix unsolicited mwi blocks PJSIP stack The PJSIP taskprocessors could be overflowed on startup if there are many (thousands) realtime endpoints configured with unsolicited mwi. The PJSIP stack could be totally unresponsive for a few minutes after boot completed. This patch creates a separate PJSIP serializers pool for mwi and makes unsolicited mwi use serializers from this pool. This patch also adds 2 new global options to tune taskprocessor alert levels: 'mwi_tps_queue_high' and 'mwi_tps_queue_low'. This patch also adds new global option 'mwi_disable_initial_unsolicited' to disable sending unsolicited mwi to all endpoints on startup. If disabled then unsolicited mwi will start processing on next endpoint's contact update. ASTERISK-26230 #close Change-Id: I4c8ecb82c249eb887930980a800c9f87f28f861a 2016-08-04 10:16 +0000 [485fd27f7c] Joshua Colp * res_pjsip_outbound_publish: Use a serializer shutdown group for unload. This change replaces the custom unload process for the outbound publish module with the common serializer shutdown group. ASTERISK-25217 #close Change-Id: I280a0384d860c486202d87d2d674394cca77ffb6 2016-08-03 15:39 +0000 [805f105f88] Corey Farrell * Add missing checks during startup. This ensures startup is canceled due to allocation failures from the following initializations. * channel.c: ast_channels_init * config_options.c: aco_init ASTERISK-26265 #close Change-Id: I911ed08fa2a3be35de55903e0225957bcdbe9611 2016-07-22 16:37 +0000 [ea71bd6e3e] Alexei Gradinari * app_voicemail: Add taskprocessor alert level options. On heavy loaded system with IMAP or DB storage, 'app_voicemail' taskprocessor queue could reach 500 scheduled tasks. It could happen when the IMAP or DB server dies or is unreachable. It could happen on startup when there are many (thousands) realtime endpoints configured with unsolicited mwi. If the taskprocessor queue reaches the high water level then the alert is triggered and pjsip stops processing new requests until the queue reaches the low water level to clear the alert. This patch adds 2 new 'general' configuration options to tune taskprocessor alert levels: 'tps_queue_high' - Taskprocessor high water alert trigger level. 'tps_queue_low' - Taskprocessor low water clear alert level ASTERISK-26229 #close Change-Id: I766294fbffedf64053c0d9ac0bedd3109f043ee8 2016-08-03 09:47 +0000 [9dc8cfabd5] Joshua Colp * astconfigparser: Really handle case where line is simply a comment. The regular expression would match causing the code that handled the line if it was merely a comment to never get executed. Change-Id: I3e4022481037ebcba9905587fe8c764b4ce21819 2016-07-23 08:51 +0000 [ad3e65433c] gtjoseph * asterisk.c: Add auto generation and persistence of UUID Upcoming features will require the generation and persistence of a UUID. Change-Id: I3ec0062427e133217db6ef496a4216f427c3b92d 2016-08-02 12:55 +0000 [efc4034d72] Kevin Harwell * rest-api: Code out of sync with the model Change-Id: Idccaa26fd4a423d47d013ee592b8fa6a0349c006 2016-07-29 13:13 +0000 [f6821fbaec] 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-08-01 11:08 +0000 [102d28c11a] Joshua Colp * sorcery: Use more compatible regex for local expressions. This changes the use of an empty regex for both res_sorcery_config and res_sorcery_memory to "." instead. This is a more compatible regular expression which also works on FreeBSD. ASTERISK-26206 #close Change-Id: Ia9166dd176f1597555ba22b6931180d0626c1388 2016-08-02 03:08 +0000 [b78d10a2df] Alexander Traud * res_pjsip: SIP/SDP origin (o=) contained square brackets on IP6 transports. ASTERISK-26256 #close Change-Id: I3fd68df561f81fdb8c6c497d465b50c12422f058 2016-08-01 16:13 +0000 [1f95c011c7] gtjoseph * menuselect: Add an opaque "member_data" string to the acceptable xml Change-Id: Id5ac43b95c8d7395f3be37f983632169db3d1afe 2016-07-27 09:56 +0000 [df42f64d62] David M. Lee * Replace strdupa with more portable ast_strdupa The strdupa function is a GNU extension, and not widely portable. We have an ast_strdupa function used within Asterisk which is preferred. I pulled the definition up from menuselect.c into the menuselect.h header file so it can be shared across menuselect. Change-Id: I9593c97f78386b47dc1e83201e80cb2f62b36c2e 2016-07-24 18:27 +0000 [56a07fbab9] gtjoseph * menuselect: Various menuselect enhancements * Add 'external' as a support level. * Add ability for module directories to add entries to the menu by adding members to the /.xml file. * Expand the description field to 3 lines in the ncurses implementation. * Allow the description field to wrap in the newt implementation. * Add description field to the gtk implementation. Change-Id: I7f9600a1984a42ce0696db574c1051bc9ad7c808 (cherry picked from commit 90f445729d5d86050d9d379485ff0a99f4a006c1) 2016-07-29 04:48 +0000 [7f9369c1b6] Joshua Colp * astconfigparser: Handle case where line is simply a comment. Change-Id: I2dea5815363f4d787d709228a04f33baee383ef5 2016-07-28 14:10 +0000 [57e9c66819] Corey Farrell * pbx.c: Fix handling of '-' in extension name and callerid This adds a two strings to ast_exten. name to go with exten and cidmatch_display to go with cidmatch. The new fields contain input used to add the extension in the first place. The existing fields now contain stripped input that excludes insignificant spaces and dashes. These stripped fields should always be used for comparisons. The unstripped fields should normally be used for display, but displaying stripped values will not cause runtime errors. Note the actual string is only stored twice if it contains dashes. If no dashes are found then both 'char *' fields point to the same memory. So this change has a minimum effect on memory usage. The existing functions ast_get_extension_name and ast_get_extension_cidmatch return unstripped values as they did before this change. Other similar bugs likely still exist where unstripped extensions are saved outside pbx.c then passed back in. ASTERISK-26233 #close Change-Id: I6cd61ce57acc1570ca6cc14960c4c3b0a9eb837f 2016-07-27 17:17 +0000 [873fc0fda5] Richard Mudgett * pbx.c: Allow dangerous functions when adding a hint to dialplan. We can allow dangerous functions when adding a hint since altering dialplan is itself a privileged activity. Otherwise, we could never execute dangerous functions. ASTERISK-25996 #close Reported by: Andrew Nagy Change-Id: I4929ff100ad1200a0198262d069a34f2296e77ba 2016-07-21 10:36 +0000 [f00525a6f6] Alexei Gradinari * pjproject: fixed a few bugs This patch fixes the issue in pjsip_tx_data_dec_ref() when tx_data_destroy can be called more than once, and checks if invalid value (e.g. NULL) is passed to. This patch updates array limit checks and docs in pjsip_evsub_register_pkg() and pjsip_endpt_add_capability(). Change-Id: I4c7a132b9664afaecbd6bf5ea4c951e43e273e40 2016-07-17 18:28 +0000 [972cee2e4c] 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 2016-07-27 10:33 +0000 [8902a51d59] David M. Lee * Portably sscanf tv_usec In a timeval, tv_usec is defined as a suseconds_t, which could be different underlying types on different platforms. Instead of trying to scanf directly into the timeval, scanf into a long int, then copy that into the timeval. Change-Id: I29f22d049d3f7746b6c0cc23fbf4293bdaa5eb95 2016-07-27 12:36 +0000 [852e763571] Kevin Harwell * rtp_engine: Failed assertion and wrong name given for codec Fixed an assert check that would trigger when the passed in value was negative. The negative value was being cast to an unsigned value. This resulted in the check failing. Also fixed another problem when loading formats in the engine. When setting the mime type the format's name was being passed in instead of the codec's name. Change-Id: I1a201cd419ba4d8e9a40d337e36b6fbe1737192c 2016-07-21 22:44 +0000 [e8c34680ca] Richard Mudgett * dsp.c: Add fax and DTMF detection unit tests. * Add fax amplitude and frequency sweep tests. * Add DTMF amplitude and twist unit tests. Change-Id: I8d77c9a1eec89e440d715f998c928687e870c3f7 2016-07-21 11:56 +0000 [c1f240b818] Richard Mudgett * dsp.c: Added descriptive comments to Goertzel calculations. * Added doxygen to describe some struct members and what is going on in the code. Change-Id: I2ec706a33b52aee42b16dcc356c2bd916a45190d 2016-07-13 13:48 +0000 [003a52fd62] Richard Mudgett * dsp.c: Fix incorrect format reference typo. Change-Id: Ia131da3ec29acf385cb43a586a29ecc975eb3896 2016-07-25 21:18 +0000 [4c0a0cbe02] Richard Mudgett * dsp.c: Correct DTMF twist dsp.conf documentation. Change-Id: Idf97e3a72f1edc5fca58f2fa7b20785922be0cae 2016-07-22 04:43 +0000 [87433c2566] Joshua Colp * astconfigparser.py: Update with realtime fixes. When configuring SIP URIs in the pjsip.conf file it is necessary to escape the semicolon so the parser does not treat it as a comment. This change allows this to work in the astconfigparser implementation. A secondary bug where some data was lost if a configuration option included a "=" in its value was also fixed. A bug where sections would be considered equal despite being different has also been fixed. Change-Id: If229f656ef22050b50e7b34e90c4bffe796431f8 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-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-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-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 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 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-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-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-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-12-08 17:42 +0000 Asterisk Development Team * asterisk certified/13.8-cert4 Released. 2016-12-08 11:40 +0000 [2e0239c28c] Kevin Harwell * Update for certified/13.8-cert4 2016-11-30 09:31 +0000 [4fece22836] Walter Doekes * chan_sip: Do not allow non-SP/HTAB between header key and colon. RFC says SIP headers look like: HCOLON = *( SP / HTAB ) ":" SWS SWS = [LWS] ; sep whitespace LWS = [*WSP CRLF] 1*WSP ; linear whitespace WSP = SP / HTAB ; from rfc2234 chan_sip implemented this: HCOLON = *( LOWCTL / SP ) ":" SWS LOWCTL = %x00-1F ; CTL without DEL This discrepancy meant that SIP proxies in front of Asterisk with chan_sip could pass on unknown headers with \x00-\x1F in them, which would be treated by Asterisk as a different (known) header. For example, the "To\x01:" header would gladly be forwarded by some proxies as irrelevant, but chan_sip would treat it as the relevant "To:" header. Those relying on a SIP proxy to scrub certain headers could mistakenly get unexpected and unvalidated data fed to Asterisk. This change fixes so chan_sip only considers SP/HTAB as valid tokens before the colon, making it agree on the headers with other speakers of SIP. ASTERISK-26433 #close AST-2016-009 Change-Id: I78086fbc524ac733b8f7f78cb423c91075fd489b 2016-08-06 10:57 +0000 [016d20ce12] Alexei Gradinari * pjsip: Fix deadlock with suspend taskprocessor on masquerade If both channels which should be masqueraded are in the same serializer: 1st channel will be locked waiting condition 'complete' 2nd channel will be locked waiting condition 'suspended' On heavy load system a chance that both channels will be in the same serializer 'pjsip/distibutor' is very high. To reproduce compile res_pjsip/pjsip_distributor.c with DISTRIBUTOR_POOL_SIZE=1 Steps to reproduce: 1. Party A calls Party B (bridged call 'AB') 2. Party B places Party A on hold 3. Party B calls Voicemail app (non-bridged call 'BV') 4. Party B attended transfers Party A to voicemail using REFER. 5. When asterisk masquerades calls 'AB' and 'BV', a deadlock is happened. This patch adds a suspension indicator to the taskprocessor. When a session suspends/unsuspends the serializer it sets the indicator to the appropriate state. The session checks the suspension indicator before suspend the serializer. ASTERISK-26145 #close Change-Id: Iaaebee60013a58c942ba47b1b4930a63e686663b 2016-11-08 10:48 +0000 [87e1ebc91a] Mark Michelson * res_pjsip_session: Do not call session supplements when it's too late. res_pjsip_sesssion was hooking into transaction and invite state changes. One of the reasons for doing so was due to the PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the message sending process, and so we should call session supplements to alter the outgoing message. In reality, this event was meant to indicate that the message either a) had already been sent, or b) required a DNS lookup and would be sent when the DNS query completed. In case (a), this meant we were altering an already-sent request/response for no reason. In case (b), this potentially meant we could be trying to alter a request/response at the same time that the DNS resolution completed. In this case, it meant we might be stomping on memory being used by the thread actually sending the message. This caused potential crashes and memory corruption. This patch removes the calls to session supplements from the case where the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to alter the message at this point is too late, and it can cause nothing but harm to try to do it. Because there were no longer any calls to the handle_outgoing() function, it has been removed. Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92 (cherry picked from commit e043d1a55cf356066b3b39ebac8b4bbb612ce807) 2016-11-02 09:15 +0000 [c8df727502] Joshua Colp * app_dial: Fix incorrect device state when channel is picked up. Given the scenario where multiple channels are dialed using Dial() but the caller is picked up using PickupChan() all outgoing channels except the channel specified to PickupChan() would be marked as ringing until the call had been hung up. When using the PickupChan application the channel executing the application is swapped into place of another channel. As part of this process the channel is answered. The Dial application has explicit logic which checks if the channel is answered, cancels all other outgoing channels, and bridges. This logic is different than the normal logic that is executed when an outgoing channel is answered. This different logic failed to publish dial events stating that the other outgoing channels had been canceled. As a result references to the outgoing channels were held onto by the dial masquerade process until the call had been ended and the channels had gone away. This would result in the channels appearing in the "core show channels" list despite not being present anymore and would also result in incorrect device state. This change makes it so that this logic also publishes dial events stating that the other outgoing channels have been canceled. ASTERISK-26549 Change-Id: Iea7168e6e82f7d4609ec0366153804e4f55ea64f 2016-10-18 16:50 +0000 [4c50689d09] Joshua Colp * Revert "pjproject_bundled: Add patch to address SSL crash" This reverts commit 28cc8a9dff2fb9210726cfa6274ae683fbfa4a01. Change-Id: I777cf8173f7a88273090bed72bfe57fb0e72b84f 2016-10-17 11:39 +0000 [28cc8a9dff] gtjoseph * pjproject_bundled: Add patch to address SSL crash Addresses crashes when an attempt is made to operate on an SSL socket after the socket has been closed. ASTERISK-26477 #close Change-Id: I421305b357558b4f9e690210dc0f4831ef4b3002 (cherry picked from commit 546ec4b038ac3d750c5138d7fbb8e3ce93f482df) 2016-10-12 16:24 +0000 [7c2bd702fd] Richard Mudgett * Audit ast_json_pack() calls for needed UTF-8 checks. Added needed UTF-8 checks before constructing json objects in various files for strings obtained outside the system. In this case string values from a channel driver's peer and not from the user setting channel variables. * aoc.c: Fixed type mismatch in s_to_json() for time and granularity json object construction. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: Iac2d867fa598daba5c5dbc619b5464625a7f2096 2016-10-12 16:20 +0000 [3b1b2fc1d5] Richard Mudgett * json: Check party id name, number, subaddresses for UTF-8. * Updated unit test as ast_json_name_number() is now NULL tolerant. ASTERISK-26466 #close Reported by: Richard Mudgett Change-Id: I7d4e14194f8f81f24a1dc34d1b8602c0950265a6 2016-10-11 18:14 +0000 [a835adfa92] Richard Mudgett * json: Add UTF-8 check call. Since the json library does not make the check function public we recreate/copy the function in our interface module. ASTERISK-26466 Reported by: Richard Mudgett Change-Id: I36d3d750b6f5f1a110bc69ea92b435ecdeeb2a99 2016-07-19 15:22 +0000 [7baedd9ecd] 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-10-05 14:53 +0000 [a8e37c3d06] gtjoseph * pjproject_bundled: Add MALLOC_DEBUG capability pjproject_bundled will now use the asterisk memory debugging APIs if MALLOC_DEBUG is turned on in menuselect. Because this required stubs for the executable programs and the python bindings, some Makefile reorganization was needed to properly handle the dependencies. As a result, the makefile now individually makes each of the pjproject libraries separately instead of making them all in 1 shot. The only visible change is that there are separate status lines printed for each library instead oif 1 for all libs. Also, the making of the pjproject dependency files was eliminated. They're not needed for building unless you're actively modifying pjproject source files and it makes the build process faster. Finally, any issues with parallel builds should be resolved again making the build faster. NOTE: The certified/13.8 version of this patch also builds libresample which is needed by pjsua. Later versions do not need libresample. Change-Id: Icc5e3d658fbfb00e0a46b44c66dcc2522d5171b0 2016-08-29 18:08 +0000 [adcdecd47f] Richard Mudgett * res_pjsip: Add ignore_uri_user_options option. This implements the chan_sip legacy_useroption_parsing option but with a better name. * Made the caller-id number and redirecting number strings obtained from incoming SIP URI user fields always truncated at the first semicolon. People don't care about anything after the semicolon showing up on their displays even though the RFC allows the semicolon. ASTERISK-26316 #close Reported by: Kevin Harwell Change-Id: Ib42b0e940dd34d84c7b14bc2e90d1ba392624f62 2016-09-08 16:34 +0000 Asterisk Development Team * asterisk certified/13.8-cert3 Released. 2016-09-08 11:34 +0000 [6cec20200b] gtjoseph * Release summaries: Remove previous versions 2016-09-08 11:34 +0000 [9c0f0eef6e] gtjoseph * .version: Update for certified/13.8-cert3 2016-09-08 11:34 +0000 [3923b114b9] gtjoseph * .lastclean: Update for certified/13.8-cert3 2016-09-08 11:34 +0000 [83362b5590] gtjoseph * realtime: Add database scripts for certified/13.8-cert3 2016-08-23 06:35 +0000 [d947baa255] 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-10 15:14 +0000 [df9aa402a5] Mark Michelson * ConfBridge: Make some announcements asynchronous. Confbridge announcements tend to block a channel while they are being played. In some circumstances, this is warranted since you want that particular channel not to hear the announcement (Example: "John Doe has entered the conference"). For others it makes less sense. This change first introduces methods for playing sounds asynchronously into the conference. This is very similar to how synchronous sounds are played, except the channel initiating the playback does not wait for the sound to complete before moving on. Asynchronous announcements are used for two circumstances: * Sounds played for a user after they have left the bridge * Sounds that play first to a single user and then the rest of the conference (if the channel and conference use the same language) ASTERISK-26289 #close Reported by Mark Michelson Change-Id: Ie486bb3de1646d50894489030326a423e594ab0a 2016-08-24 14:42 +0000 [b1e827d259] 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 2016-08-10 15:14 +0000 [c218e038d7] Mark Michelson * ConfBridge: Rework announcer channel methodology NOTE: This patch was submitted earlier and reverted because of a failing test. The test has been patched so that it adjusts for the changes here, so this is being resubmitted for review. One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ica9fa4907c2f3728cdd1cf0bc564ef4eb40754a0 2016-08-23 05:53 +0000 [b82f0b7722] Joshua Colp * Revert "ConfBridge: Rework announcer channel methodology" This reverts commit 4ca730127ccdc895e4d9e32cb0828c27bf74817b. Change-Id: I8886feb69ae2dbf521a8c0937792349b70db52b2 2016-08-10 15:14 +0000 [4ca730127c] Mark Michelson * ConfBridge: Rework announcer channel methodology One feature that confbridge has is the ability to play sounds to all participants in the conference. Prior to this commit, the algorithm for this was as follows: * Grab the playback lock * Push the conference announcer channel into the bridge * Play back the sound * Pull the conference announcer channel from the bridge * Release the playback lock The issue here is that the act of adding the playback channel to the bridge and removing it for each announcement is expensive. Amongst the expenses: * The announcer channel is imparted into the bridge, meaning a new thread is spun up for each playback. * When the announcer is added or removed from the bridge, it results in the BRIDGEPEER channel variable being set on all channels in the bridge. This requires keeping the bridge locked and locking each individual channel in order to set it. * There's also just the general overhead of adding the channel and removing it from the bridge. The bridge potentially has to reconfigure every single time With this commit, the paradigm for playing back announcements has shifted. * The announcer channel is now added to the bridge when the conference is allocated, and it is hung up when the conference is destroyed. * A taskprocessor is used to queue playbacks onto the announcer channel. This keeps the behavior from before where playbacks do not overlap. * The announcer channel is no longer placed into the bridge as departable. Since we are not constantly removing the channel from the bridge, it is safe to add the channel using an independent thread and simply hang the channel up when it is time for the conference to be destroyed. The use of the taskprocessor for playbacks opens up the interesting possibility of having asynchronous announcements played. In this commit, however, the behavior is still exactly the same as it previously was. ASTERISK-26289 Reported by Mark Michelson Change-Id: Ic5cd2c4b98a1eaa1715eb7a5b35d62f1a76d78a5 2016-08-16 15:36 +0000 [f40c6874c6] gtjoseph * res_pjsip: Add contact_user to endpoint contact_user, when specified on an endpoint, will override the user portion of the Contact header on outgoing requests. Change-Id: Icd4ebfda2f2e44d3ac749d0b4066630e988407d4 2016-08-09 12:07 +0000 [78a6da0885] Kevin Harwell * alembic/sqlalchemy: auto increment only allowed on a single column The extensions table defined two columns (id and priority) as primary key autoincrement columns. However only one is allowed when defining the primary key. This patch removes the autoincrement attribute from the priority column since it does not need to be as such and really should not have been on there in the first place. This patch also removes 'context', 'exten', and 'priority' from the primary key index and creates a new combined unique contraint index on them. ASTERISK-26183 #close Change-Id: Ib9c712c612a4d7ec1edb0dcb77f1bae0905a470b (cherry picked from commit f6ec94cca66addac71d566d6fa48188b407f26ba) 2016-08-15 13:27 +0000 Asterisk Development Team * asterisk certified/13.8-cert2 Released. 2016-08-15 08:27 +0000 [d7eec92332] Joshua Colp * Release summaries: Remove previous versions 2016-08-15 08:27 +0000 [847b0d007d] Joshua Colp * .version: Update for certified/13.8-cert2 2016-08-15 08:27 +0000 [bd8581cd52] Joshua Colp * .lastclean: Update for certified/13.8-cert2 2016-08-15 08:27 +0000 [628620c5ef] Joshua Colp * realtime: Add database scripts for certified/13.8-cert2 2016-08-09 16:19 +0000 [13b950f4be] Mark Michelson * res_rtp_asterisk: Cache local RTCP address. When an RTCP packet is sent or received, res_rtp_asterisk generates a Stasis event that contains the RTCP report as well as the local and remote addresses that the report pertains to. The addresses are determined using ast_find_ourip(). For the local address, this will typically result in a lookup of the hostname of the server, and then a DNS lookup of that hostname. If you do not have the host in /etc/hosts, then this results in a full DNS lookup, which can potentially block for some time. This is especially problematic when performing RTCP reads, since those are done on the same thread responsible for reading and writing media. This patch addresses the issue by performing a lookup of the local address when RTCP is allocated. We then use this cached local address for the Stasis events when necessary. ASTERISK-26280 #close Reported by Mark Michelson Change-Id: I3dd61882c2e57036f09f0c390cf38f7c87e9b556 2016-08-01 06:57 +0000 [acf021cdec] Joshua Colp * ChangeLog: Updated for certified/13.8-cert2-rc1 2016-08-01 06:57 +0000 [fba5cf4a00] Joshua Colp * Release summaries: Add summaries for certified/13.8-cert2-rc1 2016-08-01 06:57 +0000 [b2cc9b4879] Joshua Colp * Release summaries: Remove previous versions 2016-08-01 06:57 +0000 [20e25657fa] Joshua Colp * .version: Update for certified/13.8-cert2-rc1 2016-08-01 06:57 +0000 [08c26fba06] Joshua Colp * .lastclean: Update for certified/13.8-cert2-rc1 2016-08-01 06:57 +0000 [b539479f10] Joshua Colp * realtime: Add database scripts for certified/13.8-cert2-rc1 2016-06-21 10:53 +0000 [164bfc8574] 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 (cherry picked from commit 69d58a1e377938e5236f51200e222eb219739441) 2016-07-21 22:28 +0000 [7809034c0d] 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-21 09:05 +0000 [5bc48a290b] 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-12 17:24 +0000 [49defa5578] 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 [a0485fe851] 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 [d172104e12] 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-13 14:09 +0000 Asterisk Development Team * asterisk certified/13.8-cert1 Released. 2016-07-13 08:34 +0000 [482561f1e3] Joshua Colp * Release summaries: Remove previous versions 2016-07-13 08:34 +0000 [3cb116d75a] Joshua Colp * .version: Update for certified/13.8-cert1 2016-07-13 08:34 +0000 [797d39c81c] Joshua Colp * .lastclean: Update for certified/13.8-cert1 2016-07-13 08:34 +0000 [f5fbfe9a6a] Joshua Colp * realtime: Add database scripts for certified/13.8-cert1 2016-07-07 10:38 +0000 [22a36e5b10] 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-06-22 13:41 +0000 [d0c04c8986] 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-30 08:25 +0000 [0d694ce9b8] 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-28 08:22 +0000 [5f444b1f5b] 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-22 16:15 +0000 [f282a88ee4] Mark Michelson * ChangeLog: Updated for certified/13.8-cert1-rc3 2016-06-22 16:15 +0000 [bd6da93116] Mark Michelson * Release summaries: Add summaries for certified/13.8-cert1-rc3 2016-06-22 16:14 +0000 [4df81def29] Mark Michelson * Release summaries: Remove previous versions 2016-06-22 16:14 +0000 [286d58affc] Mark Michelson * .version: Update for certified/13.8-cert1-rc3 2016-06-22 16:14 +0000 [8b7fe94df7] Mark Michelson * .lastclean: Update for certified/13.8-cert1-rc3 2016-06-22 16:14 +0000 [0449fd2e1e] Mark Michelson * realtime: Add database scripts for certified/13.8-cert1-rc3 2016-06-09 09:20 +0000 [a6610fbe2f] 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-12 11:19 +0000 [102d88e791] 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-13 13:33 +0000 [d9ab222edc] Richard Mudgett * res_rtp_multicast.c: Fix warning message typo. Change-Id: Ic9928208b9957e09866abe3d9649030942ec52b3 2016-06-10 12:35 +0000 [39329a9e66] Richard Mudgett * chan_rtp: Backport changes from master. * Deprecate chan_multicast_rtp. Change-Id: Ib5a45e58c75ee8abd0b4f9575379b5321feb853e 2016-06-10 16:13 +0000 [6d45341963] Richard Mudgett * chan_rtp.c: Copy file from chan_multicast_rtp.c Change-Id: I1119b53f2152ab1cbec74b5be7ea44844dbda8ef 2016-06-03 22:44 +0000 [0322479ff7] 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 [942fa0c95b] 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 [b046fa1907] 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 [237f9ef7af] 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 [ff70f04a37] 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 [4b26c9ead8] 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 [a137d1822e] 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 [9a7a5aec18] 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 [f2a76c4292] 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-04-01 13:30 +0000 [51e45e5ca5] 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-03-31 20:04 +0000 [880d502141] 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-06-02 12:04 +0000 [a81feefde9] 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-05-30 10:58 +0000 [aab8bc5d31] 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 (cherry picked from commit e8abfdcdc5ce4d32d1fe281e75b13fd652f9e5f7) 2016-05-18 07:54 +0000 [b9a28ccbd4] 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 [f85c77a9e1] 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-07 14:39 +0000 [8bf050b853] 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-05 11:37 +0000 [4fc2c98369] 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-05 05:07 +0000 [4e7791d483] 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-05-03 07:55 +0000 [601602f44b] Joshua Colp * ChangeLog: Updated for certified/13.8-cert1-rc2 2016-05-03 07:55 +0000 [13461bb9a6] Joshua Colp * Release summaries: Add summaries for certified/13.8-cert1-rc2 2016-05-03 07:54 +0000 [cadb5c4e64] Joshua Colp * Release summaries: Remove previous versions 2016-05-03 07:54 +0000 [d4d5548ef8] Joshua Colp * .version: Update for certified/13.8-cert1-rc2 2016-05-03 07:54 +0000 [a5bc40ae51] Joshua Colp * .lastclean: Update for certified/13.8-cert1-rc2 2016-05-03 07:54 +0000 [2b6df52c66] Joshua Colp * realtime: Add database scripts for certified/13.8-cert1-rc2 2016-04-15 11:59 +0000 [c4426f1035] 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 05:48 +0000 [c69e0f1813] 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-21 14:23 +0000 [eebe8b3dd3] 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-22 17:53 +0000 [5cbd4b9799] 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-15 14:36 +0000 [bc51227ef8] 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 [8dd79720e6] 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 [2a2e754d15] 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 [188ce34aff] 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-19 13:00 +0000 [da80f40014] Joshua Colp * app_talkdetect: Enable for testsuite tests. Change-Id: I9acf2e2210f7a15cdd2c63c4c8dcb92de6b47d43 2016-04-18 12:12 +0000 [9f3ecf0a8d] 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 [39b4742db1] 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 [4caa57f6b3] 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-14 13:49 +0000 [0b35582bbb] 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 [9f8b803a29] 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 [a35d3eb73b] 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 [3de37dee68] 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-23 08:59 +0000 [e378c18815] 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 (cherry picked from commit d963a3374991c64594cf196e90a5c74964c8ba7c) 2016-04-06 11:02 +0000 [dd93204a84] Joshua Colp * ChangeLog: Updated for certified/13.8-cert1-rc1 2016-04-06 11:01 +0000 [6d29a919d4] Joshua Colp * Release summaries: Add summaries for certified/13.8-cert1-rc1 2016-04-06 10:27 +0000 [4fa3428247] Joshua Colp * Release summaries: Remove previous versions 2016-04-06 10:27 +0000 [b418e14998] Joshua Colp * .version: Update for certified/13.8-cert1-rc1 2016-04-06 10:27 +0000 [69b6cf2368] Joshua Colp * .lastclean: Update for certified/13.8-cert1-rc1 2016-04-06 10:27 +0000 [847dc5c7d7] Joshua Colp * realtime: Add database scripts for certified/13.8-cert1-rc1 2016-04-06 09:20 +0000 [c23bf7c8df] Joshua Colp * ChangeLog: Updated for certified/13.8-cert1-rc1 2016-04-06 09:19 +0000 [4f94668022] Joshua Colp * Release summaries: Add summaries for certified/13.8-cert1-rc1 2016-04-06 08:47 +0000 [454daec0e1] Joshua Colp * Release summaries: Remove previous versions 2016-04-06 08:47 +0000 [4ba2b5e92c] Joshua Colp * .version: Update for certified/13.8-cert1-rc1 2016-04-06 08:47 +0000 [e6f27ca09c] Joshua Colp * .lastclean: Update for certified/13.8-cert1-rc1 2016-04-06 08:47 +0000 [08dbdd5996] Joshua Colp * realtime: Add database scripts for certified/13.8-cert1-rc1 2016-04-06 08:26 +0000 [ec7a89771d] Joshua Colp * ChangeLog: Updated for certified/13.8-cert1-rc1 2016-04-06 08:25 +0000 [ffcb651205] Joshua Colp * Release summaries: Add summaries for certified/13.8-cert1-rc1 2016-04-06 07:52 +0000 [97499f717a] Joshua Colp * Release summaries: Remove previous versions 2016-04-06 07:52 +0000 [99d52771b5] Joshua Colp * .version: Update for certified/13.8-cert1-rc1 2016-04-06 07:52 +0000 [eb9e193c65] Joshua Colp * .lastclean: Update for certified/13.8-cert1-rc1 2016-04-06 07:52 +0000 [8ec588b8b1] Joshua Colp * realtime: Add database scripts for certified/13.8-cert1-rc1 2016-04-05 14:23 +0000 [4b87a773dc] 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-04-05 09:06 +0000 [c29e2e3fb7] Joshua Colp * .version: Update for certified/13.8 Change-Id: I37e5a8e36c2f4f9137f8f230c99220005424e514 2015-01-06 21:29 +0000 [3c796e694e] Matt Jordan * Disable extended support modules Change-Id: Ia2e359021b3eccecce20028098c5b6d1099c3f9e 2016-03-28 18:10 +0000 [7b6c4decd3] 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-29 14:39 +0000 [fad0410486] Mark Michelson * ChangeLog: Updated for 13.8.0 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 13:32 +0000 [06f5ace1fa] Mark Michelson * ChangeLog: Updated for 13.8.0-rc1 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-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-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-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 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 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 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-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] gtjoseph * 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-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] gtjoseph * 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 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-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-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-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-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] gtjoseph * 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-09 16:58 +0000 [ea917fefaf] gtjoseph * 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 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-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] gtjoseph * 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-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-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-05 20:22 +0000 [5f9aea8e3c] gtjoseph * 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-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] gtjoseph * 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 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] gtjoseph * 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-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-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-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-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-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-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: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-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 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-27 12:11 +0000 [99fb87ae13] gtjoseph * 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-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-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 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] gtjoseph * 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-22 16:22 +0000 [1474bb05f6] gtjoseph * 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] gtjoseph * .gitignore: Add .gcno and .gcda Products of --enable-coverage Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3 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-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-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 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] gtjoseph * 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-18 13:36 +0000 [63169e00ff] gtjoseph * 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-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] gtjoseph * 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-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] gtjoseph * 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] gtjoseph * 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] gtjoseph * More .gitignore updates Added .pyc and .sha1 to the top-level .gitignore. Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a Tested-by: George Joseph 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] gtjoseph * .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 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 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] gtjoseph * 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] Matt 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] Diederik de Groot (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] gtjoseph * 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] Matt 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] gtjoseph * 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] gtjoseph * 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] Diederik de Groot (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] Maciej Szmigiero (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] Matt 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] Diederik de Groot (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] Matt 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] Diederik de Groot (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] Diederik de Groot (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] gtjoseph * 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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Matt 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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Diederik de Groot (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] Justin T. Gibbs (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-22 18:58 +0000 [a3fe43fbdc] snuffy (License 5024) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433269 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-22 18:04 +0000 [08a88aab15] snuffy (License 5024) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433247 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 14:52 +0000 [6ca98524bf] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433222 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 13:23 +0000 [1c09028171] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433199 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 14:19 +0000 [73dcea59bd] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433174 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 05:20 +0000 [4c84dca2d8] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433126 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 04:53 +0000 [958bc84caf] Corey Farrell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433115 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-19 04:44 +0000 [7fddae99dd] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433113 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 21:34 +0000 [dba0f1ad67] Richard Mudgett * res_pjsip_session: Fix off-nominal extra unref of session. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433088 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 17:15 +0000 [2c7b945149] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433064 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 16:57 +0000 [1fb1c81923] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433060 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 16:49 +0000 [2122c205e6] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433057 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:34 +0000 [94fe4a9178] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433031 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:20 +0000 [1f428f25f0] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433028 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 11:10 +0000 [522f063186] Richard Mudgett * res_pjsip: Add reason comment. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433005 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 21:28 +0000 [5c03a5f2e7] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432971 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 21:00 +0000 [f7c6bedb06] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432949 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 20:36 +0000 [287a22435f] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432945 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 20:21 +0000 [37d33ed997] Di-Shi Sun (License 5076) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432938 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 19:18 +0000 [a4c27baf47] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432920 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 12:04 +0000 [a3292230b8] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432894 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 11:26 +0000 [34aa0214eb] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432892 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 09:48 +0000 [0497b7b155] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432868 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 07:58 +0000 [b9fd61f2c7] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432811 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-12 07:39 +0000 [f5bc032567] Diederik de Groot (License 6600) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432808 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 11:38 +0000 [bd029688cd] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432787 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 10:24 +0000 [c24a294f0b] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432766 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-11 10:18 +0000 [737064bfa4] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432764 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 18:09 +0000 [bc357c1d7e] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432742 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 16:33 +0000 [afea98dc73] Javier Acosta (License 6690) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432721 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 13:13 +0000 [055001716c] Graham Barnett (License 6685) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432696 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 12:47 +0000 [92178247ee] Ed Hynan (Licnese 6680) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432693 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-10 11:04 +0000 [cae712d986] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432668 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-09 11:12 +0000 [110b99646c] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432638 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-07 19:46 +0000 [714cb27000] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432614 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 16:50 +0000 [e158517a9c] Richard Mudgett * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432594 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 16:12 +0000 [5d16d80b59] Richard Mudgett * res_pjsip_refer: Made refer_attended_alloc() not create the ao2 object with a lock. The lock is unused. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432574 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 15:11 +0000 [772793f18e] Jonathan Rose * app: Add functions to swap voicemail function table for testing purposes git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432556 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 14:18 +0000 [8cced7767c] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432534 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-06 13:31 +0000 [13e715b30c] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432528 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-05 10:38 +0000 [06fa8db864] gtjoseph * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432485 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-04 12:52 +0000 [999d96d405] Matt Jordan * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432453 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-02 13:14 +0000 [9cdadc168c] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432423 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-27 12:23 +0000 [9d85e855de] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432404 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-26 12:52 +0000 [c33c5183a5] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432385 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-26 11:07 +0000 [169058e73f] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432363 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 22:58 +0000 [de86b30dba] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432342 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 21:03 +0000 [34989bd9c8] Makoto Dei (License 5027) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432321 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:48 +0000 [53aec7a969] Rusty Newton * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432301 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:09 +0000 [474fec4f92] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432281 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 17:02 +0000 [ddff640f94] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432278 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 15:42 +0000 [dd8ac00f24] Olle Johansson (License 5267) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432258 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-25 14:44 +0000 [43a3e80be1] David M. Lee * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432237 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 16:14 +0000 [978649a568] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432199 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 15:58 +0000 [3d1a1533bf] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432195 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 12:32 +0000 [5b73246a9d] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432175 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 14:47 +0000 [f726304283] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432154 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 13:26 +0000 [7a507ae31a] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432136 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 12:51 +0000 [f0d018e249] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432118 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 11:35 +0000 [c40d78c31e] Graham Barnett (License 6685) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432099 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-21 08:05 +0000 [bf9d416536] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432079 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 20:56 +0000 [93c9c3af2f] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432059 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 20:46 +0000 [54a699fb64] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432055 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 11:51 +0000 [89b48af3e5] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 11:46 +0000 [8e806f9e12] Matt Hoskins (license 6688) * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432033 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-20 09:47 +0000 [c7bdf62a95] Graham Barnett (License 6685) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432013 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 15:25 +0000 [e0ff83c272] Richard Mudgett * chan_dahdi: Remove some dead code. ........ Merged revisions 431992 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431993 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 12:25 +0000 [40547e7210] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431974 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 11:30 +0000 [2181c9443f] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431956 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-19 09:28 +0000 [374013d817] Alexander Traud (License 6520) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431937 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-18 20:01 +0000 [eb9448a1ae] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431917 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-17 09:31 +0000 [6d3fcfc3c2] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431898 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-16 15:29 +0000 [562b7bf6f0] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431879 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 13:00 +0000 [7890d0ad07] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431860 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 11:59 +0000 [cbe63ab283] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431843 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 11:42 +0000 [c8f3074cc4] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431841 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 10:00 +0000 [a3044cbf02] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431824 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-15 06:39 +0000 [ce70587ba6] Matthias Urlichs (license 5508) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431807 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 18:32 +0000 [4f4d03fdd1] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431789 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 13:45 +0000 [758a897876] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431771 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 12:30 +0000 [8c6e3ad3b4] Joshua Colp * res_pjsip_exten_state: Improve log message when a subscription is attempted to a non-existent extension. ASTERISK-24716 #close Reported by: Rusty Newton git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431754 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 12:20 +0000 [3543a36362] Joshua Colp * 'information' ends with an 'n'. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431752 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-14 12:19 +0000 [5d26236758] Joshua Colp * chan_pjsip: Fix crash when CHANNEL dialplan function is invoked with pjsip argument and no type. ASTERISK-24771 #close Reported by: Niklas Larsson git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431751 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-13 11:21 +0000 [4d797f17c5] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431734 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-12 14:32 +0000 [1995baad71] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431717 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 12:02 +0000 [e8ec15a9ef] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431698 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:36 +0000 [e64d151fae] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431693 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:28 +0000 [feddab7944] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431692 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:12 +0000 [29f3ff0b61] Richard Miller (License 5685) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431674 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 10:51 +0000 [72e5ba2ce8] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431670 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 09:51 +0000 [2531f75057] Corey Farrell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431663 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-10 17:16 +0000 [4d8ab20a8a] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431643 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 21:10 +0000 [32e42e50cc] Ben Merrills (License 6678) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431622 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 21:01 +0000 [03445a147e] Jeremiah Gowdy (License 6358) * Blocked revisions 431620 While it may not be obvious, r431620 should not occur in Asterisk 13. * We no longer set the SIP_DEFER_BYE_ON_TRANSFER flag during the handling of the INVITE with Replaces. This is now set and handled explicitly in the attended transfer and blind transfer code. * An INVITE with Replaces replacing a channel in a Bridge will now safely eject the channel being replaced. No masquerade occurs. * An INVITE with Replaces replacing a channel not in a Bridge will masquerade, but will do so in such a fashion that we can ensure that we are hanging up the channel when completed. Since the code the patch fixes no longer exists due to core framework changes, we should send a BYE naturally without the need for the flag. ........ channels/chan_sip: Ensure that a BYE is sent during INVITE w/Replaces transfer Consider a scenario where Alice and Bob have an established dialog with each other external to Asterisk. Bob decides to perform an attended transfer of Alice to Asterisk. In this case, Alice will send an INVITE with Replaces to Asterisk, where the Replaces specifies Bob's dialog with Asterisk. In this particular scenario, Asterisk will complete the transfer, but - since Bob's channel has had Alice masqueraded into it and is now a Zombie - a BYE request will not be sent. This patch fixes that issue by adding a new flag to chan_sip that tracks whether or not we have an INVITE with Replaces. If we do, the flag is used on the sip_pvt to ensure that a BYE request is sent, even if the channel has been masqueraded away. Review: https://reviewboard.asterisk.org/r/4362/ ASTERISK-22436 #close Reported by: Eelco Brolman Tested by: Jeremiah Gowdy, Kristian Høgh patches: asterisk-11-hangup-replaced-3.diff uploaded by Jeremiah Gowdy (License 6358) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431621 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 20:34 +0000 [8582411344] ibercom (License 6599) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431618 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-08 11:24 +0000 [675b2b8103] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431600 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-06 15:26 +0000 [323c0927ac] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431583 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-03 19:27 +0000 [18c8c1bae3] Joshua Colp * res_pjsip_keepalive: Don't crash if PJSIP module is not loaded. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431555 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-03 18:58 +0000 [2f2eb1931a] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431538 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-31 10:27 +0000 [f67402a52a] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431521 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 11:44 +0000 [05e2832b35] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431492 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 11:38 +0000 [6583b4de98] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431490 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 10:52 +0000 [112d23c73e] Ashley Sanders * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431471 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-30 10:47 +0000 [43dd42d8ae] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431468 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 17:02 +0000 [f7d23dfcc6] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431450 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 14:58 +0000 [e8896ac008] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431426 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 14:44 +0000 [22fc3359da] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 13:52 +0000 [b8ea23b0d1] Mark Michelson * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431420 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 10:46 +0000 [6e5eb9af88] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431403 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-29 06:09 +0000 [e0461290d0] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431385 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 11:37 +0000 [8c068fc096] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431303 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 11:34 +0000 [25a67d561c] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431301 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-28 06:18 +0000 [c3add776af] Sean Bright * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431267 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 22:09 +0000 [88fbe4e917] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431243 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 16:56 +0000 [61822e78ae] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431219 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 13:21 +0000 [e2b493b8f0] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431194 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 13:08 +0000 [9e3d316dd1] Corey Farrell (license 5909) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431179 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:36 +0000 [eda125f98d] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431160 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:32 +0000 [b64f4bb6ee] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431157 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:22 +0000 [a620b287bd] Jonathan Rose * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431153 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:20 +0000 [7f9b28b0c6] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431145 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 11:10 +0000 [1a17693789] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431134 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-27 05:47 +0000 [ceedd40370] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431114 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-26 08:49 +0000 [702d79de2a] David M. Lee * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431092 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-25 07:42 +0000 [1fc823c770] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431072 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 14:13 +0000 [e302116e40] Richard Mudgett * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431052 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 13:44 +0000 [f8b3fb6e2f] Richard Mudgett * app_confbridge: Whitespace Because there is sometimes no sence to any whitespace. ........ Merged revisions 431049 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431050 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 11:08 +0000 [197265438e] David M. Lee * Add depend on pjproject to res_pjsip_config_wizard.c git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431030 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 09:12 +0000 [630eea087d] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430999 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 09:03 +0000 [e23f07beb8] Walter Doekes * Fix typo's (retrieve, specified, address). ........ Merged revisions 430996 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430998 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-23 08:38 +0000 [9210648bbe] HZMI8gkCvPpom0tM (License 6658) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430994 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 13:24 +0000 [355eb9d22f] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430975 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 13:13 +0000 [c73b4b2a46] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430957 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 12:09 +0000 [bdfdb01bcf] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430939 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-22 08:23 +0000 [beb20440e0] Gareth Palmer (License 5169) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430921 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 15:53 +0000 [5e10007dbd] Richard Mudgett * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430902 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:33 +0000 [74a13629e2] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430864 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:27 +0000 [452f0eeb57] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430862 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 07:10 +0000 [894d4d781c] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430842 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-21 06:56 +0000 [98c3983c89] Matt Jordan * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430840 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-20 10:51 +0000 [a7ba8a58a8] Ashley Sanders * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430818 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-20 10:46 +0000 [6af6a216a1] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430817 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 20:39 +0000 [072db5e1b9] Ben Klang (License 5876) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430799 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 20:32 +0000 [e659b3e53d] LEI FU (License 6640) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430796 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 12:05 +0000 [ab5af1f3d8] Mark Michelson * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430776 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-19 07:18 +0000 [643b81d98e] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430755 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 18:31 +0000 [34c220203f] Kevin Harwell * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430734 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 16:13 +0000 [e257244bbb] Mark Michelson * Change PJProject version requirement for ca_list_path transport option in CHANGES file. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430716 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 16:12 +0000 [821c15ae53] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430714 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-16 11:45 +0000 [8bc4a89e1f] cloos (License #5956) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430709 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 11:35 +0000 [fa80d9658d] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430687 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 11:18 +0000 [6c426e86bd] Richard Mudgett * res_fax.c, res_fax_spandsp.c: Fix some curlies on the end of function definitions. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430685 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-15 06:09 +0000 [c95391f23c] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430664 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 20:18 +0000 [f6630e2481] abelbeck (License 5903) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430646 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 17:14 +0000 [77a036bf3f] Corey Farrell (license 5909) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430628 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 14:27 +0000 [e370c9e68e] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430608 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-14 09:39 +0000 [89a431df84] Diederik de Groot (License 6600) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430590 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-13 12:16 +0000 [1f94b96749] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430565 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-13 06:06 +0000 [056f11ac65] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430546 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:34 +0000 [368ecf13bf] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430528 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:28 +0000 [7d606d87bf] Niklas Larsson (License 5068) * 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430526 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 12:01 +0000 [4e2be8fb8f] Michael L. Young (license 5026) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430507 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-12 09:18 +0000 [dc993db55c] Kristian Hogh (License 6639) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430488 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 16:08 +0000 [4791d629d1] Scott Griepentrog * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430469 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 15:44 +0000 [2b0d522dbb] Scott Griepentrog * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430467 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 11:54 +0000 [4b363688d4] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430434 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-09 08:51 +0000 [eb9ce791d8] Kinsey Moore * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430416 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 15:40 +0000 [b937438c17] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430397 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 15:37 +0000 [143bec54ee] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430395 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-08 11:48 +0000 [6e59bf6491] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430373 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 15:25 +0000 [8f3c60cee7] Kinsey Moore * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430355 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:53 +0000 [42b342c6e2] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430337 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:17 +0000 [a10d2966b6] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430319 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 12:14 +0000 [13ed8f73ed] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430317 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 11:51 +0000 [42e4cb7174] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430315 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 11:35 +0000 [9ea8dd036f] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430313 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-07 10:55 +0000 [75cd302b0a] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430295 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 20:52 +0000 [e17a1a8ba1] Kinsey Moore * Fix dev-mode build on recent gcc git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430274 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 16:46 +0000 [dd42e92e7a] Matt Jordan * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430252 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:52 +0000 [4becfae3b1] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430227 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:46 +0000 [9d457fe5c2] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430225 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:35 +0000 [0fa6c34dc6] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430223 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-06 11:28 +0000 [d873b09075] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430221 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 16:49 +0000 [566907fabd] Scott Griepentrog * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430200 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 11:56 +0000 [b9a7875dd6] Joshua Colp * pjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430181 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-01-05 11:51 +0000 [a7c38428af] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430179 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-29 07:10 +0000 [cca262e7d3] Kinsey Moore * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430145 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 15:27 +0000 [1a0979d437] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430127 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 09:26 +0000 [b521c612fc] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430092 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 07:25 +0000 [915bb88d3e] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430084 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-24 07:20 +0000 [006ffdcfb2] Matt Jordan * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430083 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-23 17:18 +0000 [d1c532034b] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430064 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-23 17:15 +0000 [0a3dd7589e] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430059 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 15:18 +0000 [7a356232bd] Richard Mudgett * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 13:44 +0000 [fca0be57d9] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430010 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-22 09:40 +0000 [9735a13429] Karsten Wemheuer (License 5930) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429983 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-21 18:17 +0000 [fc79cf6428] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429914 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-20 14:57 +0000 [f88460115f] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429894 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 14:54 +0000 [4b054bdc6d] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429868 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 11:31 +0000 [7074bf956b] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429829 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-19 11:26 +0000 [6a99df47c0] Scott Griepentrog * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429827 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 16:38 +0000 [b22c833c12] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429805 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 14:03 +0000 [e603fbe04a] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429784 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:50 +0000 [4fad85f9bf] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429763 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:34 +0000 [14d2f8f20f] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429761 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 09:05 +0000 [c1582929f9] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429741 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-18 08:43 +0000 [5bd5f580c1] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429739 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 18:10 +0000 [b4621cd0f5] gtjoseph * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429719 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 17:05 +0000 [105f224cfd] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429699 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-17 03:54 +0000 [9ae57e0dd6] Walter Doekes * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429675 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 11:53 +0000 [a3534b7c05] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429653 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 10:38 +0000 [f26d4618eb] Andreas Steinmetz (license 6523) * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429633 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-16 09:43 +0000 [ad85e54fd9] Joshua Colp * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429612 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-15 11:07 +0000 [89617370ec] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429592 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-15 09:36 +0000 [b85f79c0c1] Mark Michelson * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429571 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 17:54 +0000 [2b8c441096] gtjoseph * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429542 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 17:40 +0000 [8f12ded887] Richard Mudgett * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429540 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 16:53 +0000 [8c019b1a6b] Matt Jordan * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429519 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 16:49 +0000 [7ff0d266a6] Matt Jordan * Add 11 merge properties git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429518 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 10:57 +0000 [439e6e1c5d] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429497 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 09:30 +0000 [01c4e76c4e] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429477 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 09:00 +0000 [49386cf568] David M. Lee * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429457 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 08:12 +0000 [3b0c40f337] Kinsey Moore * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429433 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 08:03 +0000 [15af40180a] Kinsey Moore * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429430 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 07:05 +0000 [0c9fbb449f] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429409 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-12 06:31 +0000 [61fe4f10d2] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429407 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 14:31 +0000 [8237bd357d] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429387 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 11:21 +0000 [2288f910ea] 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429379 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 07:56 +0000 [b7f7d045ac] Kinsey Moore * 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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429355 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-11 07:49 +0000 [50f6517296] Kinsey Moore * Stasis: Update unittest for channel snapshots This adjusts the unit test for channel snapshots to take the new language key into account. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429352 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 09:42 +0000 [d4a05879d6] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429326 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 07:34 +0000 [fb768ec33a] Joshua Colp * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429273 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-10 07:14 +0000 [a220a08777] Kinsey Moore * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429246 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:46 +0000 [22a91bf698] Scott Griepentrog * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429223 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:19 +0000 [2f21f85c37] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429206 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 14:02 +0000 [525c823b4b] Kevin Harwell * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429196 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 12:35 +0000 [664067e318] Kevin Harwell * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429175 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 09:44 +0000 [74b032bb03] Joshua Colp * 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/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429153 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2014-12-09 08:00 +0000 [64581d894d] Kinsey Moore * 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@429128 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2016-04-27 16:18 +0000 Asterisk Development Team * asterisk certified/13.1-cert7 Released. 2016-04-27 11:17 +0000 [ac50d4de09] Kevin Harwell * Release summaries: Remove previous versions 2016-04-27 11:17 +0000 [ae138f07b9] Kevin Harwell * .version: Update for certified/13.1-cert7 2016-04-27 11:17 +0000 [6887653e56] Kevin Harwell * .lastclean: Update for certified/13.1-cert7 2016-04-27 11:17 +0000 [f1dd08373d] Kevin Harwell * realtime: Add database scripts for certified/13.1-cert7 2016-04-26 05:48 +0000 [5baf815293] 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-21 14:23 +0000 [1f24863e0c] 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-22 17:53 +0000 [a2249031ef] 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-15 14:36 +0000 [c2158c01c2] 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 [4bdc54f66c] 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 2015-07-08 14:56 +0000 [1fa5565fc4] 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 This patch is a remedial cherry-pick from v13. Change-Id: I08fe33a2560da924e676df55b181e46fca604577 2015-06-22 15:11 +0000 [ac53e65cb5] 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 This patch is a remedial cherry-pick from v13. Change-Id: Idde9543d56842369384a5e8c00d72a22bbc39ada 2015-04-07 11:40 +0000 [c8e21c4eb9] 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/ This patch is a remedial cherry-pick from v13. Change-Id: I26cc0c207acf74ade93e6567febf7b9776452058 2015-01-29 17:02 +0000 [b81052d194] Scott Griepentrog * 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/ This patch is a remedial cherry-pick from v13. Change-Id: I307c3b506af5af80ec506f73e8b78a91d79999e0 2015-01-22 12:09 +0000 [a38d044e0a] Scott Griepentrog * 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/ This patch is a remedial cherry-pick from v13. Change-Id: I35c98989786f74cdd7940677002a1a88d34bd2dd 2015-01-22 13:24 +0000 [bc0a8c7bac] Richard Mudgett * 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/ This patch is a remedial cherry-pick from v13. Change-Id: I73fdf13a3a1042566281c7d06d6e83e2ef87c120 2016-04-19 17:52 +0000 [1feead5760] 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-20 10:48 +0000 Asterisk Development Team * asterisk certified/13.1-cert6 Released. 2016-04-20 05:48 +0000 [5700190dba] Joshua Colp * Release summaries: Remove previous versions 2016-04-20 05:48 +0000 [21dfb6be03] Joshua Colp * .version: Update for certified/13.1-cert6 2016-04-20 05:48 +0000 [58cff8e219] Joshua Colp * .lastclean: Update for certified/13.1-cert6 2016-04-20 05:48 +0000 [a98618d0ed] Joshua Colp * realtime: Add database scripts for certified/13.1-cert6 2016-04-18 12:12 +0000 [5d390bc4c6] 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 [204861b305] 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 [08b8a5eea9] 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-14 20:22 +0000 Asterisk Development Team * asterisk certified/13.1-cert5 Released. 2016-04-14 15:22 +0000 [9edfb2c1b8] Kevin Harwell * Release summaries: Remove previous versions 2016-04-14 15:22 +0000 [ec42f1d5e6] Kevin Harwell * .version: Update for certified/13.1-cert5 2016-04-14 15:22 +0000 [5fca21d105] Kevin Harwell * .lastclean: Update for certified/13.1-cert5 2016-04-14 15:22 +0000 [445e8b9dfc] Kevin Harwell * realtime: Add database scripts for certified/13.1-cert5 2016-04-14 13:49 +0000 [b66c7367ec] 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 [023d2936ba] 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 [0b1fe6b0ee] 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:20 +0000 [e2e8699d00] 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: Ic4f5e49f1a83fef4951ffeeef8f443a7f6ac15eb 2016-04-05 14:23 +0000 [967bb9eaf7] 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-28 18:10 +0000 [6739081385] 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-02-26 18:54 +0000 [a06d6811b6] Richard Mudgett * res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm reason. Change-Id: Id6350b3c7d4ec8df7ec89863566645e2b0f441fd 2016-02-15 12:52 +0000 [b7b193a430] 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 (cherry picked from commit 1c4f2a920db173412b38aab785ba22c2cc489f89) 2016-02-11 18:31 +0000 Asterisk Development Team * asterisk certified/13.1-cert4 Released. 2016-02-11 12:31 +0000 [7df413fbb3] Kevin Harwell * Release summaries: Remove previous versions 2016-02-11 12:31 +0000 [1423445b23] Kevin Harwell * .version: Update for certified/13.1-cert4 2016-02-11 12:31 +0000 [9a8b627f26] Kevin Harwell * .lastclean: Update for certified/13.1-cert4 2016-02-11 12:31 +0000 [d424452711] Kevin Harwell * realtime: Add database scripts for certified/13.1-cert4 2016-02-04 16:17 +0000 [59ccc89054] 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-04 11:39 +0000 [bffd954a63] 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-25 15:48 +0000 [0eb43ea9ee] Richard Mudgett * app_confbridge: Make non-admin users join a muted conference muted. ASTERISK-20987 #close Reported by: hristo Change-Id: Ic61a2b524ab3a4cfadf227fc6b3506527bc03f38 2016-02-03 22:14 +0000 Asterisk Development Team * asterisk certified/13.1-cert3 Released. 2016-02-03 16:05 +0000 [2142c74a02] Kevin Harwell * .version: Update for certified/13.1-cert3 2016-02-03 16:04 +0000 [07c95d33bd] Kevin Harwell * .lastclean: Update for certified/13.1-cert3 2016-02-03 16:04 +0000 [ce314be09d] Kevin Harwell * realtime: Add database scripts for certified/13.1-cert3 2016-02-03 12:05 +0000 [b50d584022] 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: I8635470e722ce6d47951a5045ae9ef348271d395 2015-12-07 12:46 +0000 [4fe2aa9a20] 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 2015-09-28 17:07 +0000 [c7ab026196] 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-01-25 09:35 +0000 [7d581b32e9] 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 (cherry picked from commit f22074e5d9ed1882be976299311b8e093d25e1da) 2016-01-25 16:51 +0000 [22eb1b48c0] 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 (cherry picked from commit b073244c511f9634de57ea401ab9dbebcf2390e8) 2016-01-19 18:20 +0000 [826ff1d7a3] 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-14 14:42 +0000 [6e18a60a47] 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-12-28 14:02 +0000 [f63fb0e337] 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 (cherry picked from commit c8499b8d5adc805efadb91b483d9d987f62891ff) 2016-01-12 11:14 +0000 [def98bb996] 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-08 15:22 +0000 [bb29802615] 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-07 15:37 +0000 [ca869878b4] 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 2015-12-10 11:44 +0000 [4e5aec3f0a] 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-06-26 10:36 +0000 [4d10ed67d0] 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 (cherry picked from commit 8ea214aed782424a884b9a2f67d6dca270854e83) 2015-12-01 16:11 +0000 [1ec791a3ba] 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 16:42 +0000 [a164f2ce7f] 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 [a24db35ae3] 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 [bea904e001] 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-11-23 14:27 +0000 [f5a6060707] 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-05-05 18:17 +0000 [de43ae38b4] 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 (cherry picked from commit be1260a35f88faea4fa029d59343b124d250a8a6) 2015-11-16 04:29 +0000 [457d8dc124] 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-13 14:03 +0000 [c4751171a0] 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-13 14:19 +0000 [c0a7df1021] 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-12 11:17 +0000 [2fc3267677] 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 04:16 +0000 [d760c21038] 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 (cherry picked from commit 07583c288828a496cd7730b55112128fea31eaef) 2015-11-11 17:11 +0000 [287cab1a53] 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-11 11:04 +0000 [d073cb4b6d] 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-03 16:19 +0000 [b9713354dc] 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-06-23 11:21 +0000 [ac9432fdb6] 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 (cherry picked from commit 3b2b004d699b8cc7b808f62536bb2bc4db8b4e0e) 2015-11-04 14:31 +0000 [385e26efe2] 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-11-02 17:19 +0000 [62799fe778] 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-10-23 16:53 +0000 [6eda60936a] Kevin Harwell * alembic: Bad down revision in add_default_from_user script The down revision wasn't set correct in the add_default_from_user script. This patch points it to the correct revision. Change-Id: Ied45786db265a1d4fb350ef0dd33b4d043c9a74d 2015-10-21 12:35 +0000 [c425e26595] 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 [b95101aab0] 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 [dd4d4e40e5] 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 [bda0a24206] 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 [7a22fc27fb] 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 [7fc9a998b1] 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 [7a47ab77c1] 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 [8def38f6a2] 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-04-20 14:30 +0000 [16afb39aec] 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-10-19 15:27 +0000 [78e4783572] Richard Mudgett * Add missing failure checks to ast_str_set_va() callers. Change-Id: I0c2cdcd53727bdc6634095c61294807255bd278f 2015-10-21 11:44 +0000 [43323995ba] 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-03-26 17:19 +0000 [cdd2d5b484] 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 Change-Id: I6a67336050dea74327d79cdd6f7c7ea34d0b473e git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433497 2015-10-19 19:59 +0000 [b5cfcfc427] 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 (cherry picked from commit 9fc9777fa34753fb38991d42d8dbed516e907ca2) 2015-06-05 15:37 +0000 [813b743baa] 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. This is a cherry-pick from v13. ASTERISK-25183 #close Reported by: Matt Jordan Change-Id: I8bad0ae1daf18d75b8c9e55874244b7962df2d0a 2015-10-02 17:05 +0000 [78ab76b46c] Richard Mudgett * 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 **** ASTERISK-24975 Change-Id: I3ef7428ee402816d9fcefa1b3b95830c00d5c402 Cherry-pick from v13 with additional definitions of AST_THREADSTORAGE_RAW(), ast_threadstorage_get_ptr() and ast_threadstorage_set_ptr() from commit d01706ce1ee518118456d5673f529204bdac73bb. Change-Id: I3222102d005f76744561b95a3b97700d82a5ee58 2015-10-12 11:21 +0000 [47a9452780] Richard Mudgett * config.c: Fix off-nominal memory leak. Change-Id: I06e346e9a5c63cc5071e7eda537310c4b43bffe0 2015-10-12 11:20 +0000 [728a2b7013] 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 [6c11fa2277] 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 20:43 +0000 [0fe83cad51] 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-05 16:53 +0000 [c4f63952fc] 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 [d61da57428] 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-09-30 17:28 +0000 [5d12653d2a] 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 [b35b9a9e32] 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 [9ec52447bd] 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 [110927bacc] Richard Mudgett * res_sorcery_memory_cache.c: Misc tweaks. Change-Id: I8cd32dffbb4f33bb0c39518d6e4c991e73573160 2015-09-30 17:27 +0000 [14ac763ab3] Richard Mudgett * res_sorcery_memory_cache.c: Made use OBJ_SEARCH_MASK. Change-Id: Ibca6574dc3c213b29cc93486e01ccd51f5caa46c 2015-04-09 10:42 +0000 [39fe210fd9] 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) Change-Id: Iefc901a7c5c88d9d4b853188f85092d9eb7b6ada 2015-09-24 14:56 +0000 [00be2f6b4f] 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 [bd43638622] 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 [f5a935f9d1] 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 [91f754cb89] 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 [9792b21720] 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-24 14:49 +0000 [7a4581a41b] 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 [86eee104be] 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-06-18 13:16 +0000 [deccd2ef3c] 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-09-21 18:06 +0000 [43e6804b0c] 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 [ca401c6842] 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-16 17:36 +0000 [20702e0cf2] 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-09-10 17:19 +0000 [3ef74244a4] 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-09-10 09:49 +0000 [8826e6c416] 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-04-23 09:16 +0000 [943d5c0c99] gtjoseph * 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 (cherry picked from commit 75666ad7c608ad9968a216a8f0a5832bf85b785c) 2015-09-03 14:07 +0000 [7b5bcbeebe] 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-08-29 10:36 +0000 [0901a82adb] 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 (cherry picked from commit a676ba2aad5525926ae31b8317b95ae52cbbabbb) 2015-09-04 14:40 +0000 [500856b4f0] 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-05-13 15:41 +0000 [42c40b59b6] 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 (cherry picked from commit 02c513058905dae19f28393ea840a47ae4a9e66d) 2015-09-02 17:26 +0000 [a1e1d8e815] 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 [9f5e1c0e56] 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-07-02 14:51 +0000 [1c89230e2a] 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-09-01 09:05 +0000 [2f2c35e91d] 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 [88ee3b3ef2] 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-28 20:22 +0000 [8842637d8f] 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 [06d42fede3] 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-07-23 13:11 +0000 [74d6ae20cb] 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-08-26 05:40 +0000 [54a09e4cb5] 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 [942d0ba96f] 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 06:21 +0000 [ad4e895928] 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-24 11:04 +0000 [4083e543fd] 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-04-16 13:20 +0000 [0b04269e73] 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 (cherry picked from commit 8d4ce7cc2b87317005588e700b278a8cca7005c8) 2015-08-14 15:46 +0000 [f049ad951b] 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:22 +0000 [fb347a4ded] 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 [a5049df640] 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 [7089472637] 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 [128d2348e6] 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 [6b219a866c] 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 [fc4455216a] 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 [739fca6084] 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-06 12:48 +0000 [bfb15bea06] 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 [9e93ad109b] 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-02-13 11:21 +0000 [f6dcbd9707] Richard Mudgett * 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/ Change-Id: Ib05700c3a13ceac53b17d66099ef0d296a5e1863 2015-01-16 16:12 +0000 [4350fd22c8] Mark Michelson * 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 Change-Id: I76e440e08e603c1eea40a14951e7b171c0472a55 2015-07-18 11:16 +0000 [fae081ad5b] 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-09 14:17 +0000 [d66abb6746] 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: I683bdc206c8c7def586ecaa64dcf2b86550be3bf 2015-07-16 09:46 +0000 [1b744ab684] 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-15 15:40 +0000 [147b86a8d1] 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:36 +0000 [131f6ef8f5] 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-09 09:18 +0000 [23b7b109c2] 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-26 07:44 +0000 [0fcc530dc7] 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: Id2a9e5f271c466686e6d0def461fa50c8b2cae53 2015-07-08 14:39 +0000 [c8d53f2372] Mark Michelson * res_sorcery_memory_cache: Remove ASTERISK_REGISTER_FILE() macro. This was part of the backport of res_sorcery_memory_cache from master but will not compile in 13. Change-Id: I27b3d833acda9dd1770fdbe594964197b93779b0 2015-07-06 09:24 +0000 [a72cf6ce81] Joshua Colp * res_sorcery_memory_cache: Execute stale unit test last. In Jenkins there is currently a sporadic test failure of a variable number of sorcery memory cache unit tests. I have not been able to reproduce this on the build agents themselves or on my development machine. My working theory is that the stale unit test is causing a sorcery instance to persist longer than expected, causing subsequent tests to fail when setting up and initializing the next sorcery instance. To see if this is the case this change moves the stale unit test to execute last so no subsequent unit tests can have issues initializing their sorcery instance. Change-Id: Ifd6550a949613be774b75fa5db12c02110f82c4a 2015-06-17 07:00 +0000 [e0cd8216bb] Joshua Colp * res_sorcery_memory_cache: Remove 'prefetch' option. To prevent confusion I am removing the prefetch option until such time as it is implemented. All other functionality, however, has been implemented. ASTERISK-25067 Change-Id: I9ce6aa3e5c6c5bc3c5baa8ff90fa036d73939895 2015-06-02 10:20 +0000 [8b2bad7740] Joshua Colp * test_sorcery_memory_cache_thrash: Add unit tests for thrashing the memory cache. This change adds a CLI command which can perform memory cache thrashing as well as unit tests which perform thrashing under the following configurations: 1. Low number of unique objects that go stale after 1 second 2. Low number of unique objects that expire after 1 second 3. Low number of unique objects which are constantly updated 4. Large number of unique objects which exceed a defined cache size 5. Large number of unique objects which exceed a defined cache size that also expire and go stale rapidly 6. Large number of unique objects which expire and go stale rapidly 7. Large number of unique objects For all of the above there are a large number of threads constantly attempting to retrieve random objects and each test runs for a few seconds. ASTERISK-25067 Reported by: Matt Jordan Change-Id: I8c8ceff977332c80ed4a31f10d694d48552b2f78 2015-06-04 13:11 +0000 [8575c4f18d] Joshua Colp * res_sorcery_memory_cache: Implement expire_on_reload option. This change implements the expire_on_reload option for memory caches. If enabled and a reload is performed all objects within the cache will be expired and the cache emptied. ASTERISK-25067 Reported by: Matt Jordan Change-Id: Id46aa1957d660556700e689e195eed57c989b85e 2015-06-04 05:33 +0000 [da52527136] Joshua Colp * res_sorcery_memory_cache: Add test event when a refresh occurs. This change adds a testsuite event for when a refresh occurs. This is useful as it provides a guaranteed mechanism of knowing when it has occurred instead of waiting an arbitrary amount of time. ASTERISK-25067 Reported by: Matt Jordan Change-Id: Iaa6b8d2d6bab7f99ee08e1c8908b8272a8987e65 2015-05-26 07:34 +0000 [f596b4a85c] Joshua Colp * res_sorcery_memory_cache: Add CLI commands and AMI actions. This change adds the following CLI commands and AMI actions: sorcery memory cache show sorcery memory cache dump sorcery memory cache expire sorcery memory cache stale SorceryMemoryCacheExpire SorceryMemoryCacheExpireObject SorceryMemoryCacheStale SorceryMemoryCacheStaleObject These allow both examination and manipulation of sorcery memory caches from external sources. Cached objects can be explicitly expired from a cache or marked as stale. If expired they are immediately removed. If marked as stale they will be background refreshed when next retrieved. ASTERISK-25067 Reported by Matt Jordan Change-Id: I68e03cfd8c34b5e07f4b6ee4fd93a3f4a00a3d9e 2015-05-26 13:01 +0000 [9c2de310be] Mark Michelson * res_sorcery_memory_cache: Add support for refreshing stale objects. This change introduces a check of object_lifetime_stale when retrieving cached objects. If the amount of time the object has been in the cache exceeds the lifetime, then a task is scheduled to update the cached object based on an object retrieved from other sorcery wizards instead. To prevent the cached object from being retrieved during a refresh, thread-local storage is used to mark the thread as being a stale object update. This results in the cache returning no object, leading to sorcery querying other wizards for the object instead. A test has been added for stale objects as well. This test ensures that stale objects are retrieved the same as freshly-cached objects. The test also ensures that after an object is stale, changes in the backend are reflected in the cache, to include if the object has been deleted from the backend. ASTERISK-25067 Reported by Matt Jordan Change-Id: I9bd7c049adf6939bfe2899f393c2bfbbf412d217 2015-05-20 17:35 +0000 [9a7fccc50c] Joshua Colp * res_sorcery_memory_cache: Add support for object_lifetime_maximum. This makes the "object_lifetime_maximum" option operational. On the addition of an object to an empty memory cache a scheduled task is created which, when invoked, expires objects from the cache which have exceeded their lifetime. If more objects have been added the remaining life of the oldest object is used to schedule the next invocation of the scheduled task. If the oldest object is removed from the cache before it can be expired automatically the scheduled task is cancelled, if possible, and the lifetime of the next oldest is used to schedule the task. If during these two operations no additional objects exist in the cache then no task is scheduled. An additional unit test has been added which verifies this functionality. ASTERISK-25067 Reported by: Matt Jordan Change-Id: I87409674674a508e7717ee20739ca15cec6ba7b6 2015-05-20 15:19 +0000 [9ae9221d2b] Mark Michelson * res_sorcery_memory_cache: Add support for maximum_objects. This makes the "maximum_objects" option operational. A heap has been added alongside the hash table in the cache. When objects are added to the cache, they are also added to the heap. Similarly, when objects are removed from the cache, they are removed from the heap. The heap's use comes into play when an item is to be added to a "full" cache. When the cache is full, the oldest item is removed from the cache, using the heap to determine the oldest item. A unit test has been added that verifies that the maximum_objects option works as expected and that the oldest object is removed from the cache when an object beyond the maximum is added. ASTERISK-25067 #close Reported by Matt Jordan Change-Id: I490658830e9c4cbf0b3051e4cdc4913cf9f1b73a 2015-05-16 17:02 +0000 [e4d42119b5] Joshua Colp * res_sorcery_memory_cache: Add basic module implementation. This change adds a basic res_sorcery_memory_cache module which implements configuration option parsing, configuration file parsing for threading, sorcery interface implementation, and unit tests. Objects can be added, updated, deleted, and retrieved from the memory cache. Automatic expiration and stale handling will be added in the future. Note that unit tests exist within the module itself in case the threading done as a result of expiration results in asynchronous actions (which it likely will). Providing access and a notification mechanism for an external test module would be complicated and not worth it. ASTERISK-25067 #close Reported by: Matt Jordan Change-Id: Id8a6a357ef5a83d466f81eee56a67d13eeb118b9 2015-07-02 17:03 +0000 [49a37f22e1] Jonathan Rose * app: Add functions to swap vm function table This patch adds function-mocking methods for testing voicemail features in external modules. It is being pulled over from r432556 on SVN because DPMA won't presently compile with TEST_FRAMEWORK set in Asterisk 13.1 certified. Change-Id: I1c2cf6d5a8589104154a86538ecd3f62a2694681 2015-04-22 16:22 +0000 [f58c0acfa2] gtjoseph * 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-29 12:45 +0000 [9cbd76630a] 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 16:12 +0000 [8ba3de43ad] 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-26 10:41 +0000 [20f50131d7] 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 [0d535df734] 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-23 14:34 +0000 [3332869b48] Richard Mudgett * AMI: Add Linkedid to the standard channel snapshot AMI event headers. ASTERISK-25189 #close Reported by: John Hardin Change-Id: I2b1778c3fdc1dca0ed55db4e3a639eddfb16c2ac 2015-06-17 05:04 +0000 [a35d6feae2] 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-10 18:28 +0000 [75589c4a3b] 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 [8142b922ab] 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-08 12:28 +0000 [ca2174bb23] Matt Jordan * .version: Update for certified/13.1-cert3-rc1 2015-06-08 12:28 +0000 [2ef2c12fae] Matt Jordan * .lastclean: Update for certified/13.1-cert3-rc1 2015-06-08 12:28 +0000 [5032390639] Matt Jordan * realtime: Add database scripts for certified/13.1-cert3-rc1 2015-06-08 09:43 +0000 [2bf6fd263a] 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 17:41 +0000 [5f954e1e00] 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-02-17 09:34 +0000 [c994a3bfa0] Richard Mudgett * 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/ ........ Merged revisions 431898 from http://svn.asterisk.org/svn/asterisk/branches/13 Change-Id: I57878adc0846dd942a699ad36dcec9cba5e57994 2015-04-06 14:23 +0000 [1e98fcac6b] 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/ ........ Merged revisions 434131 from http://svn.asterisk.org/svn/asterisk/branches/13 Change-Id: Ibbc25d4592aabf7596ef473447d630961f88c217 2015-05-26 13:56 +0000 [bd32327353] 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-12 17:45 +0000 [b81353a0ec] 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-12 17:34 +0000 [523fab02d8] 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-04-16 10:51 +0000 [b764454d4d] 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-05-06 13:24 +0000 [6433b697ae] 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-01-19 07:18 +0000 [bf31a486cb] Joshua Colp * 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 Change-Id: I5b57362201cc8c6555834ec8707e9fbddeff7904 2015-05-04 12:16 +0000 [7c687c8e54] 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-04-29 14:29 +0000 [0602409c89] 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 15:20 +0000 [c6c06bbe70] 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 [08a4cf3237] 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 06:04 +0000 [47df4e031c] 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-27 16:56 +0000 [11d85ea251] 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 [0037ca59a6] 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-11 10:10 +0000 [e84fcb2464] 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 Change-Id: I15bde169fd59a224a02005fec9a439f0679a375e 2015-04-23 12:54 +0000 [008076ecf4] 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-15 10:38 +0000 [1bb6122f35] 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-15 16:08 +0000 [cb67aae596] gtjoseph * More .gitignore updates Added .pyc and .sha1 to the top-level .gitignore. Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a Tested-by: George Joseph 2015-04-13 19:06 +0000 [70fab74baf] gtjoseph * .gitignore updates for master/13 Added products of ./bootstrap Added nmenuselect and gmenuselect to menuselect/ Change-Id: Ied658463958bafc04a9aff9ebc28e40c116a6e35 2015-04-13 09:54 +0000 [735bea479a] 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 [7d64479748] 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-12 06:12 +0000 [9237e8b11e] 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 [630dbcb8b4] 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 [e4892f9aa4] gtjoseph * 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-14 14:04 +0000 [677898f839] 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-08 13:19 +0000 [918ca7dd36] 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/ ........ Merged revisions 434425 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@434428 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 12:24 +0000 [08945a5c77] Maciej Szmigiero (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 ........ Merged revisions 434384 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@434418 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-07 10:35 +0000 [45f09898e9] 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. ........ Merged revisions 434218 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@434220 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-03 16:59 +0000 [42b7ebdd4d] 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 ........ Merged revisions 433968 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433970 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 15:32 +0000 [b6fff2719d] Mark Michelson * 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/ AFS-254 ........ Merged revisions 429223 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433918 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-01 11:29 +0000 [8ae3670781] 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. ........ Merged revisions 433888 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433890 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 22:39 +0000 [259227eb1a] 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. ........ Merged revisions 433863 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433864 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-31 17:34 +0000 [758fead630] 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/ ........ Merged revisions 433839 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433842 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 15:55 +0000 [b5b44876c2] 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/ ........ Merged revisions 433619 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433621 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-27 15:25 +0000 [66b8c7cab4] 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/ ........ Merged revisions 433596 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433618 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 14:57 +0000 [fb7062afca] Richard Mudgett * 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/ ........ Merged revisions 433222 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433224 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-20 14:04 +0000 [cf9799845f] Richard Mudgett * 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/ ........ Merged revisions 433199 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433201 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 16:56 +0000 [90fc65da62] Richard Mudgett * 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 ........ Merged revisions 433057 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433059 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:44 +0000 [e0b644ddb7] Kevin Harwell * 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 ........ Merged revisions 433031 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433034 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 13:43 +0000 [d7c8041f6b] Kevin Harwell * 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/ ........ Merged revisions 433028 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433033 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-17 11:25 +0000 [cd4e18c4cc] Richard Mudgett * Multiple revisions 431583,433005 ........ r431583 | sgriepentrog | 2015-02-06 15:26:12 -0600 (Fri, 06 Feb 2015) | 10 lines 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/ ........ r433005 | rmudgett | 2015-03-17 11:10:39 -0500 (Tue, 17 Mar 2015) | 1 line res_pjsip: Add reason comment. ........ Merged revisions 431583,433005 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@433025 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-13 10:51 +0000 [6cd70450fd] Kevin Harwell * 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 ........ Merged revisions 432868 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432888 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-09 11:44 +0000 [4eb1dd4b35] Kevin Harwell * 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/ ........ Merged revisions 432638 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432658 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-04 12:53 +0000 [52366a423c] Matt Jordan * 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/ ........ Merged revisions 432453 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432454 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-03-02 13:15 +0000 [b17d0953b6] Matt Jordan * 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 ........ Merged revisions 432423 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432424 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-26 11:15 +0000 [3b4ba353f0] Kevin Harwell * 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 ........ Merged revisions 432363 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432365 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-24 16:01 +0000 [33c73ffeaa] Matt Jordan * 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 ........ Merged revisions 432195 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@432197 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 12:04 +0000 [3ad393b043] Kevin Harwell * 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/ ........ Merged revisions 431698 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@431700 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:52 +0000 [8be00450b9] Kevin Harwell * 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 ........ Merged revisions 431670 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@431697 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 11:48 +0000 [340588c721] Richard Mudgett * 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/ ........ Merged revisions 431692 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@431696 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-11 10:19 +0000 [69dc8f9ec2] Kevin Harwell * 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/ ........ Merged revisions 430064 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@431667 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-02-05 09:50 +0000 [2125e1b2de] Mark Michelson * Add Asterisk 13 revision 431420 that fixes disabling 100rel option on PJSIP endpoints. git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/13.1@431573 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2015-04-08 Asterisk Development Team * Certified Asterisk 13.1-cert2 Released. * Mitigate 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. ASTERISK-24847 #close Reported by: Maciej Szmigiero patches: asterisk-null-in-cn.patch uploaded by mhej (license 6085) AST-2015-003 2015-01-30 Asterisk Development Team * Certified Asterisk 13.1-cert1 Released. 2015-01-30 17:53 +0000 [r431494] 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/ ........ Merged revisions 431492 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-30 16:50 +0000 [r431470] 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 ........ Merged revisions 431468 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-30 16:41 +0000 [r431467] Jonathan Rose * main/manager.c, /: Merge r431153 from asterisk/branches/13 r431153 | jrose | 2015-01-27 11:22:52 -0600 (Tue, 27 Jan 2015) | 9 lines 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-28 21:53 +0000 [r431326-431334] Mark Michelson * 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 ........ Merged revisions 431301 from http://svn.asterisk.org/svn/asterisk/branches/13 * res/res_pjsip_t38.c, res/res_pjsip_session.c, /, res/res_pjsip_sdp_rtp.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 ........ Merged revisions 431303 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-28 04:11 +0000 [r431244] Richard Mudgett * /, res/res_pjsip_outbound_registration.c, res/res_pjsip.c, main/sorcery.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/ ........ Merged revisions 431243 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-27 23:02 +0000 [r431200-431221] 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 ........ Merged revisions 431219 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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 ........ Merged revisions 431194 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-27 17:52 +0000 [r431162] 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 ........ Merged revisions 431160 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-27 17:35 +0000 [r431159] Joshua Colp * res/res_pjsip_sdp_rtp.c, main/bridge_channel.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/ ........ Merged revisions 431157 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-27 17:18 +0000 [r431140] Matthew Jordan * /, apps/confbridge/include/confbridge.h, apps/confbridge/conf_config_parser.c: 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 ........ Merged revisions 431134 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-27 11:48 +0000 [r431116] 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/ ........ Merged revisions 431114 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-23 15:24 +0000 [r431016] Kevin Harwell * res/res_ari_events.c, include/asterisk/stasis_app.h, res/res_pjsip_mwi.c, 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: 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/ ........ Merged revisions 430999 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-21 19:47 +0000 [r430898] Richard Mudgett * CHANGES, /, res/res_pjsip_outbound_registration.c: Multiple revisions 430223,430373,430395 ........ r430223 | gtjoseph | 2015-01-06 11:35:21 -0600 (Tue, 06 Jan 2015) | 24 lines 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/ ........ r430373 | gtjoseph | 2015-01-08 11:48:29 -0600 (Thu, 08 Jan 2015) | 25 lines 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/ ........ r430395 | gtjoseph | 2015-01-08 15:37:42 -0600 (Thu, 08 Jan 2015) | 14 lines 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/ ........ Merged revisions 430223,430373,430395 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-21 13:36 +0000 [r430843-430865] 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 ........ Merged revisions 430864 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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 ........ Merged revisions 430842 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-19 18:18 +0000 [r430782] 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) ........ Merged revisions 430776 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-15 12:11 +0000 [r430666] 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/ ........ Merged revisions 430664 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-07 03:29 +0000 [r430253-430293] Matthew Jordan * utils/conf2ael.c, apps/app_waitforring.c, formats/format_vox.c, res/res_timing_pthread.c, pbx/pbx_ael.c, cel/cel_sqlite3_custom.c, res/res_hep_rtcp.c, formats/format_jpeg.c, apps/app_jack.c, apps/app_adsiprog.c, cdr/cdr_sqlite3_custom.c, res/res_snmp.c, channels/chan_sip.c, cel/cel_tds.c, apps/app_dictate.c, apps/app_festival.c, agi/eagi-test.c, res/res_hep_pjsip.c, apps/app_alarmreceiver.c, apps/app_image.c, channels/chan_console.c, apps/app_getcpeid.c, apps/app_talkdetect.c, channels/chan_oss.c, channels/chan_misdn.c, apps/app_mp3.c, channels/chan_alsa.c, pbx/pbx_dundi.c, channels/chan_nbs.c, utils/extconf.c, apps/app_zapateller.c, cel/cel_pgsql.c, res/res_config_pgsql.c, utils/muted.c, apps/app_test.c, utils/smsq.c, apps/app_morsecode.c, apps/app_ices.c, cdr/cdr_csv.c, channels/chan_phone.c, funcs/func_pitchshift.c, funcs/func_audiohookinherit.c, res/res_pjsip_phoneprov_provider.c, apps/app_minivm.c, res/res_statsd.c, apps/app_sms.c, res/res_config_ldap.c, utils/streamplayer.c, utils/check_expr.c, cel/cel_radius.c, apps/app_nbscat.c, res/res_hep.c, apps/app_waitforsilence.c, apps/app_dahdiras.c, pbx/pbx_lua.c, res/res_ael_share.c, cdr/cdr_radius.c, cdr/cdr_tds.c, utils/stereorize.c, apps/app_osplookup.c, channels/chan_skinny.c, funcs/func_frame_trace.c, apps/app_amd.c, pbx/pbx_realtime.c, apps/app_url.c, apps/app_externalivr.c, cdr/cdr_odbc.c, res/res_timing_kqueue.c, channels/chan_mgcp.c, channels/chan_unistim.c, res/res_phoneprov.c, utils/astman.c, cdr/cdr_pgsql.c, res/res_config_sqlite.c: Disable extended support modules * /, 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. ........ Merged revisions 430252 from http://svn.asterisk.org/svn/asterisk/branches/13 2015-01-06 19:53 +0000 [r430245] 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 ........ Merged revisions 430200 from http://svn.asterisk.org/svn/asterisk/branches/13 2014-12-24 15:27 +0000 [r430085-430094] 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. ........ Merged revisions 429519 from http://svn.asterisk.org/svn/asterisk/branches/13 * contrib/ast-db-manage/config/versions/371a3bf4143e_add_user_eq_phone_option_to_pjsip.py (added), /, res/res_pjsip.c: 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 ........ Merged revisions 430092 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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. ........ Merged revisions 429352 from http://svn.asterisk.org/svn/asterisk/branches/13 * CHANGES, res/res_pjsip.c, include/asterisk/res_pjsip.h, res/res_pjsip_keepalive.c (added), res/res_pjsip/config_global.c, /, 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 ........ Merged revisions 430084 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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 ........ Merged revisions 430083 from http://svn.asterisk.org/svn/asterisk/branches/13 2014-12-22 21:22 +0000 [r430030-430046] 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/ ........ Merged revisions 430034 from http://svn.asterisk.org/svn/asterisk/branches/13 * include/asterisk/_private.h, main/asterisk.c, /, main/logger.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 ........ Merged revisions 430010 from http://svn.asterisk.org/svn/asterisk/branches/13 2014-12-22 18:35 +0000 [r430007-430008] bebuild : * /, res/res_pjsip/pjsip_options.c: Multiple revisions 429128,429246 ........ r429128 | kmoore | 2014-12-09 08:00:50 -0600 (Tue, 09 Dec 2014) | 12 lines 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 ........ r429246 | kmoore | 2014-12-10 07:14:56 -0600 (Wed, 10 Dec 2014) | 8 lines 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 ........ Merged revisions 429128,429246 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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 ........ Merged revisions 429741 from http://svn.asterisk.org/svn/asterisk/branches/13 2014-12-19 21:52 +0000 [r429855-429892] bebuild : * CHANGES, res/res_ari_channels.c, res/ari/resource_channels.h, /, rest-api/api-docs/channels.json, res/ari/resource_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/ ........ Merged revisions 429153 from http://svn.asterisk.org/svn/asterisk/branches/13 * res/ari/ari_model_validators.c, main/manager_channels.c, res/ari/ari_model_validators.h, /, main/stasis_channels.c, rest-api/api-docs/channels.json: 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 ........ Merged revisions 429206 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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/ ........ Merged revisions 429407 from http://svn.asterisk.org/svn/asterisk/branches/13 * include/asterisk/format.h, main/format.c, /, main/codec.c: 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/ ........ Merged revisions 429497 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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 ........ Merged revisions 429761 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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/ ........ Merged revisions 429175 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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 ........ Merged revisions 429433 from http://svn.asterisk.org/svn/asterisk/branches/13 * channels/chan_pjsip.c, res/res_pjsip_session.c, include/asterisk/res_pjsip_session.h, /, res/res_pjsip_session.exports.in: 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/ ........ Merged revisions 429409 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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/ ........ Merged revisions 429477 from http://svn.asterisk.org/svn/asterisk/branches/13 * main/rtp_engine.c, /, channels/chan_sip.c, include/asterisk/rtp_engine.h, res/res_rtp_asterisk.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 ........ Merged revisions 429196 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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 ........ Merged revisions 429739 from http://svn.asterisk.org/svn/asterisk/branches/13 * 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 ........ Merged revisions 429829 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, include/asterisk/lock.h, main/lock.c: 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 ........ Merged revisions 429540 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, 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 ........ Merged revisions 429571 from http://svn.asterisk.org/svn/asterisk/branches/13 * /, asterisk-13.1.0-summary.html (removed), asterisk-13.1.0-summary.txt (removed): Update properties; remove old summaries * / (added): Create Certified Asterisk 13.1 branch 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 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-02 13:35 +0000 [r424338] Scott Griepentrog * /, configs/samples/pjsip.conf.sample: res_pjsip: document use of rewrite_contact in sample conf Without setting rewrite_contact, an invite to an endpoint behind NAT will not reach it - unless the endpoint itself uses STUN or TURN to discover it's public URI. Thus, the use of this should be in the sample documentation. Review: https://reviewboard.asterisk.org/r/4036/ ........ Merged revisions 424337 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-01 22:52 +0000 [r424333] Jonathan Rose * channels/chan_pjsip.c: chan_pjsip: Fix an assertion for channels that lack formats on creation ASTERISK-24222 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/4017/ 2014-10-01 20:36 +0000 [r424313] Corey Farrell * res/res_hep.c, /: res_hep: Release allocation reference to configuration. ASTERISK-24362 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4026/ ........ Merged revisions 424312 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-01 16:37 +0000 [r424288-424291] Joshua Colp * /, res/res_pjsip/pjsip_configuration.c, configs/samples/pjsip.conf.sample, res/res_pjsip.c: res_pjsip: Add 'dtls_fingerprint' option to configure DTLS fingerprint hash. During the latest update to DTLS-SRTP support the ability to configure the hash used for fingerprints was added. This gave us two supported ones: SHA-1 and SHA-256. The default was accordingly updated to SHA-256. Unfortunately this configuration ability was not exposed within res_pjsip. This change adds a dtls_fingerprint option that controls it. #SIPit31 ........ Merged revisions 424290 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_sdp_rtp.c: res_pjsip_sdp_rtp: Accept DTLS attributes in top level, not just media session. #SIPit31 ........ Merged revisions 424287 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-01 12:27 +0000 [r424245-424266] Kinsey Moore * res/res_pjsip/config_transport.c, /, res/res_pjsip/location.c, res/res_pjsip_endpoint_identifier_ip.c, res/res_pjsip/pjsip_configuration.c, configs/samples/pjsip.conf.sample: PJSIP: Handle defaults properly This updates the code behind PJSIP configuration options with custom handlers to deal with the assigned default values properly where it makes sense and adjusting the default value where it doesn't. Before applying this patch, there were several cases where the default value for an option would prevent that config section from loading properly. Reported by: Thomas Thompson Review: https://reviewboard.asterisk.org/r/4019/ ........ Merged revisions 424263 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_nat.c: PJSIP: Force transport on contact rewrite If contact rewriting is enabled but the contact differs in transport from what is actually being used, messages after the initial INVITE transaction can be sent to an incorrect transport/port combination. In the case where this bug occurred the remote party never received a BYE since it was sent to the remote party's TCP port over UDP. Review: https://reviewboard.asterisk.org/r/4032/ ........ Merged revisions 424244 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-10-01 10:09 +0000 [r424179-424184] Walter Doekes * /, channels/chan_sip.c: chan_sip: Simplify some unref code by removing unlink_peer_from_tables. ASTERISK-22945 #related Reported by: ibercom Patches: asterisk11-chan_sip-simplifies.patch uploaded by ibercom (License #6599) ........ Merged revisions 424181 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 424182 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424183 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip: Remove excess ref of realtime peer before sip_poke_peer. The peer is referenced at the end of sip_poke_peer, it should not get an extra ref before the call to sip_poke_peer. This fixes a memory leak. ASTERISK-22945 #close Reported by: ibercom Tested by: Yuriy Gorlichenko Patches: asterisk11.patch uploaded by ibercom (License #6599) Review: https://reviewboard.asterisk.org/r/4031/ ........ Merged revisions 424176 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 424177 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424178 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-30 11:40 +0000 [r424153-424156] Joshua Colp * res/res_pjsip_sdp_rtp.c, /: res_pjsip_sdp_rtp: Don't place an extra whitespace before 'rport' and don't put IPv6 addresses in brackets. #SIPit31 ........ Merged revisions 424155 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Ensure that the base and mapped address for candidates is present in SDP. This change fixes an issue where ICE candidates put into the SDP did not contain the 'raddr' and 'rport' information for server reflexive and relay candidates. #SIPit31 ........ Merged revisions 424151 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424152 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-29 21:59 +0000 [r424129] George Joseph * /, res/res_pjsip/pjsip_cli.c: pjsip_cli: Suppress header print on error or no objects If there's an error on the pjsip command line or there are no objects, don't print the column headers. ASTERISK-24350 #close Reported-by: Brad Latus Tested-by: George Joseph Tested-by: Brad Latus Review: https://reviewboard.asterisk.org/r/4025/ ........ Merged revisions 424128 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-29 21:26 +0000 [r424126] Walter Doekes * /, contrib/scripts/autosupport: autosupport: Fix bashism. '==' is bashism (bashspecific, fails when dash is /bin/sh). Anyway, a 'case' works better there. Originally committed in r375059 and r375060 on 2012-10-16 21:13:08. ASTERISK-20567 #close Reported by: Tzafrir Cohen ........ Merged revisions 424117 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 424125 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-29 21:17 +0000 [r424097-424105] Richard Mudgett * res/res_pjsip.c, res/res_pjsip_pubsub.c, res/res_pjsip_session.c, /, res/res_pjsip_authenticator_digest.c: Simplify UUID generation in several places. Replace code using ast_uuid_generate() with simpler and faster code using ast_uuid_generate_str(). The new code avoids a malloc(), free(), and copy. ........ Merged revisions 424103 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/threadpool.c: threadpool.c: Minor cleanup fixes. * Fix threadpool_alloc() prototype. * Add missing off-nominal NULL check of pool in threadpool_alloc(). * searializer_create() does not need to create the object with a lock as the lock is not used. ........ Merged revisions 424096 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-27 12:43 +0000 [r424057] Joshua Colp * channels/chan_pjsip.c, res/res_pjsip_session.c, /: res_pjsip_session: Add additional checks for delaying session refreshes. There are certain situations which no checks existed for which need to prevent session refreshes. This includes sending a session refresh with SDP before SDP negotiation has completed and sending a session refresh before the dialog itself has been established. Checks for these have been added. Additionally COLP related UPDATEs were including SDP when it is not needed. Review: https://reviewboard.asterisk.org/r/4008/ ........ Merged revisions 424056 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-26 15:21 +0000 [r423992] Richard Mudgett * /, res/res_fax.c: res_fax: Fix out of bounds error in update_modem_bits(). ASTERISK-24357 #close Reported by: Jeremy Laine Patches: res_fax_bounds.patch (license #6561) patch uploaded by Jeremy Laine Modified patch to not use magic numbers. ........ Merged revisions 423979 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423983 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423987 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-26 08:25 +0000 [r423918] Walter Doekes * /, doc/asterisk.8: docs: Escape unescaped minus sign in asterisk.8 manpage. ASTERISK-23768 #close Reported by: Jeremy Lainé Patches: escape_manpage_hyphen.patch uploaded by Jeremy Lainé (License #6561) ........ Merged revisions 423915 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423916 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423917 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-25 21:01 +0000 [r423895] Richard Mudgett * res/res_pjsip.c, /: res_pjsip.c: Add missing off nominal cleanup in ast_sip_push_task_synchronous(). * Made memset the std struct in ast_sip_push_task_synchronous() because if DEBUG_THREADS is enabled then uninitialized lock tracking data is used. ........ Merged revisions 423894 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-24 18:32 +0000 [r423867] Richard Mudgett * /, res/res_pjsip/pjsip_options.c, res/res_pjsip.c: pjsip_options.c: Fix race condition stopping periodic out of dialog OPTIONS request. The crash on the issues is a result of an invalid transport configuration change when asterisk is restarted. The attempt to send the qualify request fails and we cleaned up. However, the callback is also called which results in a double unref of the objects involved. * Put a wrapper around pjsip_endpt_send_request() to detect when the passed in callback is called because of an error so callers can know to not cleanup. * Made send_request_cb() able to handle repeated challenges (Up to 10). * Fix periodic endpoint qualify OPTIONS sched deletion race by avoiding it. The sched entry will no longer self stop and must be externally stopped. * Added REF_DEBUG description tags to struct sched_data in pjsip_options.c. * Fix some off-nominal ref leaks in schedule_qualify(), qualify_and_schedule(). * Reordered pjsip_options.c module start/stop code to cleanup better on error. ASTERISK-24295 #close Reported by: Rogger Padilla Review: https://reviewboard.asterisk.org/r/3954/ ........ Merged revisions 423866 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-24 08:53 +0000 [r423803] Walter Doekes * /, channels/chan_sip.c: chan_sip: Unref outbound proxy structure on dialog/pvt destruction. Make sure outbound proxy refs are always unreffed on dialog destruction. Review: https://reviewboard.asterisk.org/r/4016/ ........ Merged revisions 423800 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423801 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423802 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-23 14:29 +0000 [r423783] Mark Michelson * tests/test_cel.c, tests/test_cdr.c: Make CDR and CEL unit tests less FRACKy. Prior to this commit, CDR and CEL tests were expected to trigger FRACKs (i.e. assertions) due to the fact that the channels they create have no formats on them. Some code was independently added recently that attempts to prevent FRACKs from occurring by failing early when attempting to set up translation paths if one or both channels support no formats. Unfortunately, this attempt to be helpful made the CDR and CEL tests go from simply FRACKing to outright failing and in some cases, failing so badly as to crash Asterisk. This commit seeks to correct past mistakes by adding the ulaw format to channels created by the CDR and CEL unit tests. This makes setting up translation paths succeed, eliminates previously-seen FRACKs, and ultimately causes the unit tests to succeed again. Review: https://reviewboard.asterisk.org/r/4014 2014-09-22 19:48 +0000 [r423660-423723] Walter Doekes * /, channels/chan_sip.c: chan_sip: On INVITE retransmission, don't add an extra 503 response. INVITE arrives to asterisk, asterisk responds Busy(). If the INVITE is retransmitted, asterisk would generate a 503 in addition to the 486. Thanks Torrey Searle for providing a working regression test. ASTERISK-24335 #close Review: https://reviewboard.asterisk.org/r/4003/ Patches: retrans_486_invite.patch uploaded by Torrey Searle (License #5334) ........ Merged revisions 423720 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423721 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423722 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/editline/readline.c: cli.c: Fix tab completion "module load" when MALLOC_DEBUG is enabled. r421600 conflicted with r155763. ASTERISK-24348 #close ........ Merged revisions 423657 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423658 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423659 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-21 01:15 +0000 [r423618-423641] Matthew Jordan * main/channel.c: main/channel: Unlock channel in off-nominal path In r423414 (13) / r423415 (trunk), an API call that determines if a format capability structure is empty was added. This returns true if the format capability structure is completely empty or "none". A check for this was added in channel.c's set_format call. Unfortunately, when this check was true, it returned from the function while still holding the channel lock. This caused the CDR unit tests - which have a tendency to create channels with no formats - to deadlock. Whoops. This patch unlocks the channel on the off-nominal path. * rest-api/api-docs/events.json, /: rest-api/api-docs/events.json: Remove non-compliant 'extends' attribute Prior to the release of Swagger 1.2, the attribute 'extends' was being promoted as a possible way to show that a particular object extends an existing object. Instead, the Swagger specification went with the 'subTypes' attribute in the base object. This patch removes the unsupported attribute; the object that the offending objects proposed to extend already lists them in its 'subTypes' attribute. ASTERISK-24300 #close Reported by: Bradley Watkins ........ Merged revisions 423620 from http://svn.asterisk.org/svn/asterisk/branches/12 * rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, 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, rest-api/api-docs/playbacks.json: rest-api/api-docs: Correct basePath in resources to match top resources file The resources.json file that defines the resource JSON files used with ARI references a basePath of 'http://localhost:8088/ari'. This does not match what is defined in the resource files themselves, 'http://localhost:8088/stasis'. The correct base path is the one that includes 'ari' in the URL; this patch updates the various resource JSON files to have the correct basePath. ASTERISK-24339 #close Reported by: Bradley Watkins ........ Merged revisions 423617 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-19 19:51 +0000 [r423580] Joshua Colp * /, res/res_pjsip_notify.c: res_pjsip_notify: Fix crash on unload/load and don't say the module doesn't exist on reload. When unloading the module did not unregister the CLI commands causing a crash upon load when they were registered again. When reloading the module the return value from the config options framework was not checked to determine if an error occurred or not. This caused a message to be output saying the module did not exist when reloading if no changes were present. AST-1433 #close AST-1434 #close ........ Merged revisions 423579 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-19 17:08 +0000 [r423561] Richard Mudgett * channels/chan_pjsip.c, res/res_pjsip_sdp_rtp.c: res_pjsip_sdp_rtp.c: Fix native formats containing formats that were not negotiated. Outgoing PJSIP calls can result in non-negotiated formats listed in the channel's native formats if video formats are listed in the endpoint's configuration. The resulting call could then use a non-negotiated format resulting in one way audio. * Simplified the update of session->req_caps in set_caps(). Why do something in five steps when only one is needed? AFS-162 #close Review: https://reviewboard.asterisk.org/r/4000/ 2014-09-19 15:18 +0000 [r423524-423530] Jonathan Rose * /, main/stasis_channels.c: Stasis_channels: Resolve unfinished Dials when doing masquerades Masquerades into channels that are in the dialing state don't end their dial and this goes against the model for things like CDRs and generating Dial end manager actions and such. ASTERISK-24237 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3990/ ........ Merged revisions 423525 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c: chan_iax2: Fix a crash when using chan_iax2 jitterbuffer settings Caused by format changes in Asterisk 13 ASTERISK-24265 #close Reported by: Dafi Ni Review: https://reviewboard.asterisk.org/r/3999/ 2014-09-19 12:45 +0000 [r423504] Kinsey Moore * include/asterisk/framehook.h, /, main/framehook.c, res/res_pjsip_t38.c: PJSIP: Prevent T38 framehook being put on wrong channel This change gives framehooks a reverse-direction masquerade callback in addition to chan_fixup_cb similar to the callback added to datastores to handle the same situation. The new callback provides the same parameters as the fixup callback, but is called on the new channel's framehooks before moving framehooks from the old channel to the new channel. This gives the framehooks an oppurtunity to decide whether they should remain on the new channel or be removed. This new callback is used to prevent the PJSIP T.38 framehook from remaining on a masqueraded channel if the new channel is not also a PJSIP channel. This was causing a crash when a local channel was masqueraded into a PJSIP channel and the framehook was executed on the local channel since the channel's tech private data was not structured as expected. Review: https://reviewboard.asterisk.org/r/4001/ ........ Merged revisions 423503 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 19:30 +0000 [r423482] Sean Bright * res/res_pjsip/config_auth.c, /: res_pjsip: Don't require a password when doing userpass authentication. An empty password is valid for username/password authentication so we should allow password to be empty/not supplied. Review: https://reviewboard.asterisk.org/r/3988 ........ Merged revisions 423481 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 19:22 +0000 [r423478] George Joseph * tests/test_strings.c, /, main/utils.c, include/asterisk/strings.h: utils: Create ast_strsep function that ignores separators inside quotes This function acts like strsep with three exceptions... * The separator is a single character instead of a string. * Separators inside quotes are treated literally instead of like separators. * You can elect to have leading and trailing whitespace and quotes stripped from the result and have '\' sequences unescaped. Like strsep, ast_strsep maintains no internal state and you can call it recursively using different separators on the same storage. Also like strsep, for consistent results, consecutive separators are not collapsed so you may get an empty string as a valid result. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3989/ ........ Merged revisions 423476 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 18:31 +0000 [r423462] Mark Michelson * res/res_pjsip_pubsub.c: Add subscription state test events. These are needed for a set of batched notification RLS tests that are about to be committed to the testsuite. Review: https://reviewboard.asterisk.org/r/3967 2014-09-18 17:11 +0000 [r423425] Jonathan Rose * res/res_pjsip_endpoint_identifier_ip.c, /: res_pjsip_endpoint_identifier_ip: Fix parsing of match value with CIDR Also fixes comma separates match lists ASTERISK-24290 #close Reported by: Ray Crumrine Review: https://reviewboard.asterisk.org/r/3995/ ........ Merged revisions 423417 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 17:09 +0000 [r423418-423423] Richard Mudgett * bridges/bridge_softmix.c: bridge_softmix.c: Made use ao2_replace() instead of the inline equivalent. * Clarified some read/write format comments. * Fixed a doxygen tag typo. * main/astobj2.c, contrib/scripts/refcounter.py, /: astobj2.c/refcounter.py: Fix to deal with invalid object refs. * Make astob2 REF_DEBUG output an invalid object line when an invalid ao2 object ref/unref is attempted. This is similar to the constructor/destructor lines. * Fixed refcounter.py to handle skewed objects that have constructor/destructor states. * Made refcounter.py highlight the invalid ao2 object refs by putting them in their own section of the processed output file. * Made refcounter.py highlight unreffing an object by more than one that results in a negative ref count and the object being destroyed. The abnormally destroyed object is reported in the invalid and finalized object sections of the output. Review: https://reviewboard.asterisk.org/r/3971/ ........ Merged revisions 423349 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423400 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423416 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 16:37 +0000 [r423348-423414] Mark Michelson * include/asterisk/format_cap.h, main/channel.c, main/format_cap.c, main/translate.c: Add API call to determine if format capability structure is "empty". Empty here means that there are no formats in the format_cap structure or the only format in it is the "none" format. I've added calls to check the emptiness of a format_cap in a few places in order to short-circuit operations that would otherwise be pointless as well as to prevent some assertions from being triggered in cases where channels with no formats are used. * /, res/res_fax_spandsp.c: res_fax_spandsp: Properly handle cleanup before starting FAXes. If faxing fails at a very early stage, then it is possible for us to pass a NULL t30 state pointer to spandsp, which spandsp is none too pleased with. This patch ensures that we pass the correct pointer to spandsp in the situation where we have not yet set our local t30 state pointer. ASTERISK-24301 #close Reported by Matt Jordan Patches: ASTERISK-24301-fax.diff Uploaded by Mark Michelson (License #5049) ........ Merged revisions 423360 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423365 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_mwi.c, res/res_pjsip_dialog_info_body_generator.c, res/res_pjsip_xpidf_body_generator.c, res/res_pjsip_mwi_body_generator.c, res/res_pjsip_pubsub.c, res/res_pjsip_exten_state.c, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_pidf_body_generator.c: res_pjsip_pubsub: Add some type safety when generating NOTIFY bodies. res_pjsip_pubsub has two separate checks that it makes when a SUBSCRIBE arrives. * It checks that there is a subscription handler for the Event * It checks that there are body generators for the types in the Accept header The problem is, there's nothing that ensures that these two things will actually mesh with each other. For instance, Asterisk will accept a subscription to MWI that accepts pidf+xml bodies. That doesn't make sense. With this commit, we add some type information to the mix. Subscription handlers state they generate data of type X, and body generators state that they consume data of type X. This way, Asterisk doesn't end up in some hilariously mismatched situation like the one in the previous paragraph. ASTERISK-24136 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3877 Review: https://reviewboard.asterisk.org/r/3878 ........ Merged revisions 423344 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 15:13 +0000 [r423284] George Joseph * /, res/res_pjsip/location.c, res/res_pjsip_endpoint_identifier_ip.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_options.c, res/res_pjsip/config_transport.c, include/asterisk/res_pjsip.h, res/res_pjsip/config_auth.c: res_pjsip: ami: Fix error in AMI output when an endpoint has no transport When no transport is associated to an endpoint, the AMI output for PJSIPShowEndpoint indicates an error instead of silently ignoring the missing transport. This patch causes the error to appear only if a transport was specified on the endpoint and the transport doesn't exist. It also fixes an issue with counting the objects that were actually found. ASTERISK-24161 #close ASTERISK-24331 #close Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3998/ ........ Merged revisions 423282 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-18 15:00 +0000 [r423281] David M. Lee * makeopts.in, Makefile: Only install dahdi_span_config_hook if DAHDI is enabled This patch changes the install to only install the hook script if DAHDI is enabled. It also adds the script to the uninstall task, and moves the DAHDI_UDEV_HOOK_DIR variable so that it's not between the _MAKEOPTS variables and their comment. This allows installs which specify a --prefix to work normally, as long as they don't enable DAHDI. Review: https://reviewboard.asterisk.org/r/3972/ 2014-09-18 14:45 +0000 [r423279] George Joseph * main/manager.c, /, include/asterisk/config.h, main/config.c: config: bug: Fix SEGV in ast_category_insert when matching category isn't found If you call ast_category_insert with a match category that doesn't exist, the list traverse runs out of 'next' categories and you get a SEGV. This patch adds check for the end-of-list condition and changes the signature to return an int for success/failure indication instead of a void. The only consumer of this function is manager and it was also changed to use the return value. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3993/ ........ Merged revisions 423276 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423277 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423278 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-17 18:05 +0000 [r423209-423255] Joshua Colp * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Ensure that the thread terminating pj stuff is registered. ........ Merged revisions 423253 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423254 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix 100% CPU usage due to timer heap thread spinning. Side note: I need a vacation. ........ Merged revisions 423210 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423211 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix building when pjproject is not used. ........ Merged revisions 423207 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423208 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-16 16:32 +0000 [r423192] Scott Griepentrog * apps/app_voicemail.c, include/asterisk/file.h, main/file.c: Voicemail: get correct duration when copying file to vm Changes made during format improvements resulted in the recording to voicemail option 'm' of the MixMonitor app writing a zero length duration in the msgXXXX.txt file. This change introduces a new function ast_ratestream(), which provides the sample rate of the format associated with the stream, and updates the app_voicemail function for ast_app_copy_recording_to_vm to calculate the right duration. Review: https://reviewboard.asterisk.org/r/3996/ ASTERISK-24328 #close 2014-09-16 12:12 +0000 [r423152-423173] Joshua Colp * res/res_pjsip_session.c, /: res_pjsip_session: Fix usage of wrong memory pool when creating local SDP. ........ Merged revisions 423172 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/rtp_engine.h, res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix a myriad of TURN client issues. 1. The number of file descriptors an ioqueue instance can handle is fixed, so we now spawn the required number to handle the load. 2. Our transport identifiers were exceeding the range supported by pjnath. 3. The TURN client did not set up client binding causing needless bandwidth usage. 4. The code no longer updates address information on each packet. 5. STUN traffic was getting looped back to Asterisk instead of going through the TURN server. 6. Synchronization now ensures things are completely setup or destroyed. 7. Logging now reflects the target the TURN server is sending to/receiving from on our behalf. ASTERISK-23577 #close Reported by: Jay Jideliov ASTERISK-23634 #close Reported by: Roman Skvirsky Review: https://reviewboard.asterisk.org/r/3982/ ........ Merged revisions 423150 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423151 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-15 10:49 +0000 [r423069-423129] Walter Doekes * /, contrib/ast-db-manage/config/versions/5950038a6ead_fix_pjsip_verifiy_typo.py (added): contrib: Fix verifyi typo in alembic DB script ps_transport table. Reported by: Zogot (on IRC) Patches: tmp.diff uploaded by Zogot, cleaned up by me. ........ Merged revisions 423128 from http://svn.asterisk.org/svn/asterisk/branches/12 * configs/samples/sip.conf.sample, /: chan_sip: Clarify that sipdebug=yes cannot be undone by the CLI. Document it in sip.conf. ASTERISK-24249 #close Reported by: Avinash Mohod Review: https://reviewboard.asterisk.org/r/3926/ ........ Merged revisions 423066 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 423067 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 423068 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-12 16:09 +0000 [r422985] Jonathan Rose * main/config.c, /: Realtime: Fix a bug that caused realtime destroy command to crash Also has could affect with anything that goes through ast_destroy_realtime. If a CLI user used the command 'realtime destroy ' with only a single column/value pair, Asterisk would crash when trying to create a variable list from a NULL value. ASTERISK-24231 #close Reported by: Niklas Larsson Review: https://reviewboard.asterisk.org/r/3985/ ........ Merged revisions 422984 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-11 22:16 +0000 [r422965] Mark Michelson * /, main/app.c: Remove undocumented default behavior of ast_play_and_record_full acceptdtmf. ast_play_and_record_full() has a parameter called "acceptdtmf" that is a string of acceptable DTMF digits that may be pressed by a caller to end and accept the recording. ARI uses this function in order to perform recording, and it provides options for what is passed as acceptdtmf to ast_play_and_record_full(). By default, ARI passes an empty string, with the intention that no DTMF can be used to end the recording. The problem is that ast_play_and_record_full() attempts to be "helpful" by setting "#" as the acceptdtmf if an empty string or NULL pointer has been passed in. With ARI, this results in unexpected behavior occurring if you have attempted to intercept "#" yourself in order to perform some other manipulation of the live recording. This change removes the "helpful" behavior by no longer accepting "#" as a default acceptdtmf if none is specified by the caller of ast_play_and_record_full(). This makes the ARI scenario work as expected. The other callers of ast_play_and_record_full() are app_voicemail and app_minivm, and in both cases, they pass an explicit "#" to ast_play_and_record_full() as acceptdtmf, so they are unaffected by this change. ........ Merged revisions 422964 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-10 16:04 +0000 [r422905] George Joseph * /, main/config.c: config: bug: fix truncation of included config files on permissions error ast_config_text_file_save() currently truncates include files as they are processed. If a subsequent include file or the main config file has a permissions error that prevents writing, earlier include files are left truncated resulting in a frantic search for backups. This patch causes ast_config_text_file_save to check for write access on all files before it truncates any of them. Will be applied 1.8 > trunk. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3986/ ........ Merged revisions 422900 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422903 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422904 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-10 15:59 +0000 [r422901] Sean Bright * res/res_pjsip/config_auth.c, /: pjsip/config_auth.c: Add missing whitespace to log messages. The errors generated when validating 'auth' settings are missing a space which makes the messages a little confusing. ........ Merged revisions 422899 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-09 20:01 +0000 [r422883] Rusty Newton * /, sounds/sounds.xml, sounds/Makefile: Sounds/BuildSystem: Modifications to include new releases and Japanese language. Modifying Makefile and sounds.xml to include new core 1.4.26 and extra 1.4.15 sound prompt releases, plus the new Japanese core sound prompts contributed by QLOOG. ASTERISK-23324 Reported by: Kevin McCoy Tested by: Rusty Newton ........ Merged revisions 422789 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422790 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422791 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-08 18:03 +0000 [r422851-422855] Mark Michelson * configs/samples/pjsip.conf.sample: Add note about configuring list_items on a single line. * configs/samples/pjsip.conf.sample: Add sample configuration for resource lists. On review /r/3977, it was recommended to note in the sample configuration about the size limitation for resource lists. However, since there was no section in the sample configuration at all for resource list subscriptions, I decided to make a separate commit where I have added the necessary sample configuration as well as the size limitation warning. * res/res_pjsip_pubsub.c: Pre-allocate transmission data buffer for RLS NOTIFY requests. PJSIP, unless a constant is modified at compilation time, limits SIP requests to 4000 bytes. Full-state RLS notifications can easily exceed this limit with moderately small lists. This changeset allows for Asterisk to work around this size limit by performing its own allocation of the transmission data buffer. This way, Asterisk can allocate a buffer that exceeds the built-in maximum. We still impose our own limit of 64000 bytes, mainly because making allocations larger than that is a bit absurd. ASTERISK-24181 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3977 2014-09-08 15:41 +0000 [r422836] Jonathan Rose * res/res_pjsip_pubsub.c: res_pjsip_pubsub: Check supported headers for eventlist when subscribing to resource list https://wiki.asterisk.org/wiki/display/AST/Resource+List+Subscription+Test+Plan According to the off-nominal plan, if evenlist support is not specified in a SUBSCRIBE's supported header(s), that subscription should be rejected with an error. ASTERISK-23871 Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3960/diff/#index_header 2014-09-06 22:49 +0000 [r422767-422770] Matthew Jordan * /, main/cdr.c: main/cdr: Copy over location information during a fork When a CDR is forked, a new CDR is created and appended to the CDR chain for the Party A. The forked CDR starts life off as a clone of the last non-finalized for the particular Party A. In the past, merely copying over the snapshots for Party A/Party B would be sufficient. However, as the CDRs now contain cached information from Party A - specifically application/data, context, and extension - we need to copy that over during a fork as well. Huzzah for unit tests catching this when the context/extension were derived from a cached value on the CDR instead of on Party A. ........ Merged revisions 422769 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/rtp_engine.c, /: main/rtp_engine: Format NTP timestamps as unsigned ints On some systems, a timeval's tv_sec/tv_usec will be unsigned lont ints, as opposed to long ints. When the RTP engine formats these as strings, it was previously formatting them as signed integers, which can result in some odd negative timestamp values (particularly on 32-bit systems). This patch formats the values as unsigned long integers. ........ Merged revisions 422766 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-06 19:12 +0000 [r422747] Joshua Colp * res/res_pjsip_sdp_rtp.c, /: res_pjsip_sdp_rtp: Fix retrieval of "ice-pwd" attribute if in session and not media stream. ........ Merged revisions 422746 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-05 22:03 +0000 [r422716-422719] Matthew Jordan * main/cdr.c, /, apps/app_macro.c, include/asterisk/channel.h, apps/app_stack.c: main/cdrs: Preserve context/extension when executing a Macro or GoSub The context/extension in a CDR is generally considered the destination of a call. When looking at a 2-party call CDR, users will typically be presented with the following: context exten channel dest_channel app data default 1000 SIP/8675309 SIP/1000 Dial SIP/1000,,20 However, if the Dial actually takes place in a Macro, the current behaviour in 12 will result in the following CDR: context exten channel dest_channel app data macro-dial s SIP/8675309 SIP/1000 Dial SIP/1000,,20 The same is true of a GoSub: context exten channel dest_channel app data subs dial_stuff SIP/8675309 SIP/1000 Dial SIP/1000,,20 This generally makes the context/exten fields less than useful. It isn't hard to preserve these values in the CDR state machine; however, we need to have something that informs us when a channel is executing a subroutine. Prior to this patch, there isn't anything that does this. This patch solves this problem by adding a new channel flag, AST_FLAG_SUBROUTINE_EXEC. This flag is set on a channel when it executes a Macro or a GoSub. The CDR engine looks for this value when updating a Party A snapshot; if the flag is present, we don't override the context/exten on the main CDR object. In a funny quirk, executing a hangup handler must *not* abide by this logic, as the endbeforehexten logic assumes that the user wants to see data that occurs in hangup logic, which includes those subroutines. Since those execute outside of a typical Dial operation (and will typically have their own dedicated CDR anyway), this is unlikely to cause any heartburn. Review: https://reviewboard.asterisk.org/r/3962/ ASTERISK-24254 #close Reported by: tm1000, Tony Lewis Tested by: Tony Lewis ........ Merged revisions 422718 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: main/cdr: Fix crash/memory consumption in CDRs in multi-party bridge scenarios This patch fixes an issue where CDRs would get stuck generating an infinite number of CDRs, eventually crashing Asterisk (and consuming a lot of memory along the way). When a channel enters into a multi-party bridge, the CDR engine creates mappings of each participant to each other participant, picking the 'A' party as it goes. So, if we have four channels in a multi-party bridge (Alice, Bob, Charlie, Denise), we would have something like: Alice => Bob Alice => Charlie Alice => Denise Bob => Charlie Bob => Denise Charlie => Denise This works fine when participants enter the bridge a single time. When a participant leaves a bridge, the CDRs for that channel are transitioned to a finalized state. The bug occurs if Bob rejoins. When the CDR engine creates mappings between the channels, it walks through all the participants currently in the bridge, and realizes that no one in the bridge can create a CDR with the channel (Bob). As such it creates a new CDR for the candidate and appends it to that candidate's chain. Unfortunately, on this particular code path, it doesn't stop traversing the candidate's chain. Since we just added ourselves to the chain, this causes the loop to keep going, constantly adding new CDRs. This patch makes it so the engine bails when it creates a CDR match in this case. Review: https://reviewboard.asterisk.org/r/3964/ ASTERISK-24241 #close Reported by: Deepak Singh Rawat Tested by: Deepak Singh Rawat ASTERISK-24208 Reported by: Frankie Chin ........ Merged revisions 422715 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-05 20:35 +0000 [r422700] Richard Mudgett * funcs/func_channel.c: func_channel.c: Add missing locking to some CHANNEL() requests. * The CHANNEL() audionativeformat, videonativeformat, audioreadformat, and audiowriteformat now need locking since the media format rework when accessing the channel's format pointers. * Increased the buffer size for CHANNEL() audionativeformat and videonativeformat output strings since the allow=all can be a lengthy list. * Tweaked the CHANNEL() XML documentation for secure_bridge_signaling, secure_bridge_media, and state. * Ensured the output buffer is initialized for secure_bridge_signaling and secure_bridge_media. * Made use the locked_copy_string() macro instead of inlining it for trace and checkhangup. 2014-09-05 20:11 +0000 [r422665-422684] Jonathan Rose * main/dial.c, include/asterisk/dial.h: Dial API: Add a dial option to indicate the dialed channel will replace dialer Adds an option to the dial API that marks an outgoing dial as replacing the dialing channel for the purpose of propagating accountcode. When it is used, AST_CHANNEL_REQUESTOR_REPLACEMENT is used instead of AST_CHANNEL_REQUESTOR_BRIDGE_PEER when setting accountcodes on the involved channels with ast_channel_req_accountcodes. Review: https://reviewboard.asterisk.org/r/3968/ * main/cli.c, /: Call IDs: Fix appearance of call ID in core show channels when NULL NULL call IDs were meant to appear as '(none)' but instead were showing the contents of an uninitialized character buffer. ASTERISK-24223 Review: https://reviewboard.asterisk.org/r/3979/ ........ Merged revisions 422664 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-05 17:36 +0000 [r422661] Richard Mudgett * main/devicestate.c, channels/chan_iax2.c: devicestate.c: Minor tweaks * In ast_state_chan2dev() use ARRAY_LEN() instead of a sentinel value in chan2dev[]. * Fix some comments in chan_iax2.c. 2014-09-05 13:28 +0000 [r422646] Kinsey Moore * menuselect/menuselect.c: Menuselect: Fix incorrect enabling on failed deps This corrects a situation where menuselect can incorrectly enable a module by default that has defaultenabled set to "no" and has failed/non-selected dependencies. The bug is due to an inverted test when checking for whether the given module should be set to enabled by default on load. Review: https://reviewboard.asterisk.org/r/3975/ Reported by: John Bigelow 2014-09-04 21:23 +0000 [r422631] Jonathan Rose * main/manager.c, /: Manager: Require read permission for SYSTEM in order to send FullyBooted Review: https://reviewboard.asterisk.org/r/3969/ ........ Merged revisions 422584 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422625 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422626 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-03 14:05 +0000 [r422558] Joshua Colp * res/res_pjsip_transport_websocket.c, /: res_pjsip_transport_websocket: Fix crash when the Contact header is not a URI. The code for changing the Contact header wrongly assumed that the Contact would always contain a URI. This is incorrect. ASTERISK-24271 Reported by: Dafi Ni ........ Merged revisions 422557 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-02 20:29 +0000 [r422542] Mark Michelson * /, channels/chan_pjsip.c, res/res_pjsip_diversion.c, res/res_pjsip_session.c, include/asterisk/res_pjsip_session.h: Resolve race condition where channels enter dialplan application before media has been negotiated. Testsuite tests will occasionally fail because on reception of a 200 OK SIP response, an AST_CONTROL_ANSWER frame is queued prior to when media has finished being negotiated. This is because session supplements are called into before PJSIP's inv_session code has told us that media has been updated. Sometimes the queued answer frame is handled by the PBX thread before the ensuing media negotiations occur, causing a test failure. As it turns out, there is another place that session supplements could be called into, which is after media has finished getting negotiated. What this commit introduces is a means for session supplements to indicate when they wish to be called into when handling an incoming SIP response. By default, all session supplements will be run at the same point that they were prior to this commit. However, session supplements may indicate that they wish to be handled earlier than normal on redirects, or they may indicate they wish to be handled after media has been negotiated. In this changeset, two session supplements have been updated to indicate a preference for when they should be run: res_pjsip_diversion executes before handling redirection in order to get information from the Diversion header, and chan_pjsip now handles responses to INVITEs after media negotiation to fix the race condition mentioned previously. ASTERISK-24212 #close Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/3930 ........ Merged revisions 422536 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-09-01 14:16 +0000 [r422504-422507] Matthew Jordan * main/cli.c, /: main/cli: Do not attempt to show CDR data for internal channels Internal channels don't have CDRs. Querying the CDR engine for their variables will make it cranky. ........ Merged revisions 422506 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis.c, /, res/stasis/stasis_bridge.c: res_stasis: Don't play MoH to channels by default when added to holding bridges When ARI manipulates a bridge, it generally doesn't care what the mixing technology is. Operations on a bridge initiated through ARI should perform their action in generally the same way, regardless of the bridge's mixing technology. While the mixing technology may determine how media flows to channels, the actual operations on a bridge themselves should be the same. Currently, this isn't the case with holding bridges. When a channel joins without a role, MoH is started on that channel automatically. Subsequent bridge operations that would stop MoH would fail (as there is no Announcer channel playing MoH to the bridge). Starting MoH on the bridge will also create two MoH streams: one from the MoH being played on the participant channel, and one from the announcer channel. From the perspective of ARI users, this is counter-intuitive - I would not expect MoH to be started for me. The mixing technology determines how media is shared between participants, not the application experience. This patch does the following: * The Stasis bridge class now inspects channels as they are going into a bridge. If the bridge has a holding capability, and the channel has no roles, we give it a participant role and mark the default behaviour to have no entertainment. This allows addChannel operations to continue to set a participant role with an entertainment option if it felt like it (or could do it). * The music on hold channel is now Stasis approved (tm) Review: https://reviewboard.asterisk.org/r/3929/ ASTERISK-24264 #close Reported by: Samuel Galarneau Tested by: Samuel Galarneau ........ Merged revisions 422503 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-30 17:32 +0000 [r422442-422445] George Joseph * apps/app_confbridge.c, /: confbridge: Add Duration to ConfbridgeList event The ConfbridgeList event doesn't include how long the user has been a member of the conference. This patch adds Duration (seconds) which is based on user->chan->answertime. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3955/ ........ Merged revisions 422444 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: manager: Make WaitEvent action respect eventfilters A WaitEvent issued via an http session isn't respecting eventfilters defined for the user. I just added a match_filter to the predicate that controls astman_append. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3958/ ........ Merged revisions 422439 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422440 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422441 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-29 19:40 +0000 [r422374-422379] Matthew Jordan * doc/smsq.8 (added), /: doc: Add a manpage for the smsq utility This patch adds a manpage for the smsq utility. Note that this is one of the patches the Debian distro applies for the Asterisk project, as per ASTERISK-24191. Review: https://reviewboard.asterisk.org/r/3895/ ASTERISK-24171 #close Reported by: Jeremy Laine patches: smsq.8 uploaded by Jeremy Laine (License 6561) ........ Merged revisions 422376 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422377 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422378 from http://svn.asterisk.org/svn/asterisk/branches/12 * doc/aelparse.8 (added), /: doc: Add a manpage for the aelparse utility This patch adds a manpage for the aelparse utility. Note that this is one of the patches the Debian distro applies for the Asterisk project, as per ASTERISK-24191. Review: https://reviewboard.asterisk.org/r/3896/ ASTERISK-24171 #close Reported by: Jeremy Laine patches: aelparse.8 uploaded by Jeremy Laine (License 6561) ........ Merged revisions 422371 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422372 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422373 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-29 19:05 +0000 [r422359] Scott Griepentrog * channels/chan_sip.c: The assertion that peer was not found on final event message was being triggered on configuration reload. This patch changes that case to just return instead. Review: https://reviewboard.asterisk.org/r/3953/ Commited in trunk revision 422358 2014-08-28 21:54 +0000 [r422296] Matthew Jordan * LICENSE, /: LICENSE: Clarify language in Asterisk's LICENSE to allow for linking to UniMRCP The UniMRCP project distributes Asterisk modules that integrate Asterisk with UniMRCP, and other Asterisk users use the UniMRCP library as well. Unfortunately, the UniMRCP license is Apache 2.0, which per the Free Software Foundation, is not a compatible license with the GPLv2. "Please note that this license is not compatible with GPL version 2, because it has some requirements that are not in that GPL version. These include certain patent termination and indemnification provisions. The patent termination provision is a good thing, which is why we recommend the Apache 2.0 license for substantial programs over other lax permissive licenses." On the other hand, UniMRCP is a great project and we'd like to let people use it with Asterisk. This patch updates the LICENSE text to allow users to link Asterisk with UniMRCP and distribute the resulting binaries. ........ Merged revisions 422293 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422294 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422295 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-28 20:30 +0000 [r422276] Michael L. Young * /, channels/chan_iax2.c: chan_iax2: Fix Dynamic IAX2 Registrations After Temporary DNS Failure The reporter on the issue found some issues when upgrading from version 10 to 11 on 55 hosts. Two situations that can occur with dynamic registrations. 1. With dnsmgr disabled, if the host is not resolvable we are not trying to resolve the host again when it is time to attempt to register again. This results in never registering to the host. 2. With dnsmgr enabled, when the host is temporarily not resolvable the address is set to 0.0.0.0:0 and then when the host is resolvable the port is not being restored and stays set to 0. This patch resolves these two issues by: * Storing the hostname so that it can be used for resolving with DNS. * Resolve the hostname on the next scheduled attempt to register. * Storing the port used to reach the host so that when the hostname is resolvable again, we can set the port again if the port is still unset after looking up the host. ASTERISK-23767 #close Reported by: David Herselman Tested by: David Herselman, Michael L. Young Patches: asterisk-23767-dns_reg_retry_and_set_port_11_v3.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3856/ ........ Merged revisions 422274 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422275 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-28 17:25 +0000 [r422256] Richard Mudgett * /, UPGRADE.txt: Added ConfBridge AMI event note to UPGRADE.txt. ........ Merged revisions 422255 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-28 15:49 +0000 [r422239] Mark Michelson * res/res_pjsip_pubsub.c: Fix bug that did not allow for multiple batched RLS notifications to be sent. A misunderstanding of how the scheduler worked caused further batched notifications beyond the first not to get scheduled. Now we reset our scheduler ID to -1 after the batched notification is sent. This way, further notifications can be scheduled when they arise. 2014-08-28 00:36 +0000 [r422200-422215] Richard Mudgett * res/res_pjsip/pjsip_options.c, /: res/res_pjsip/pjsip_options.c: Eliminate excessive RAII_VAR usage. * Fix off nominal ref leak in find_or_create_contact_status(). * Add missing NULL check of status in update_contact_status() and init_start_time(). ........ Merged revisions 422214 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/sched.c, include/asterisk/sched.h: sched: Fix typo and whitespace change. 2014-08-27 17:29 +0000 [r422177] George Joseph * /, apps/confbridge/confbridge_manager.c, apps/app_confbridge.c: confbridge: Add 'Admin' param to join, leave, mute, unmute and talking events Currently there's no way to tell if a user is an admin or not when receiving the join, leave, mute, unmute and talking events. This patch adds that capability. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3950/ ........ Merged revisions 422176 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-27 15:31 +0000 [r422154] Kinsey Moore * include/asterisk/utils.h, /, channels/chan_sip.c, tests/test_callerid.c (added), tests/test_utils.c, main/callerid.c, main/utils.c, res/res_pjsip_caller_id.c: CallerID: Fix parsing of malformed callerid This allows the callerid parsing function to handle malformed input strings and strings containing escaped and unescaped double quotes. This also adds a unittest to cover many of the cases where the parsing algorithm previously failed. Review: https://reviewboard.asterisk.org/r/3923/ Review: https://reviewboard.asterisk.org/r/3933/ ........ Merged revisions 422112 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 422113 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 422114 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-26 23:28 +0000 [r422091] George Joseph * apps/app_confbridge.c, /: confbridge: Make kick, mute and unmute handle channel targets consistently. Kick, mute and unmute were a little inconsistent in their handling of channel targets. This patch cleans that up by insuring they all handle the 'all' target consistently and adds the 'participants' target which acts on non-admins. Documentation for kick was also cleaned up as it never supported partial channel names. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3944/ ........ Merged revisions 422090 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-26 22:13 +0000 [r422071] Mark Michelson * main/sched.c, /: Fix race condition in the scheduler when deleting a running entry. When scheduled tasks run, they are removed from the heap (or hashtab). When a scheduled task is deleted, if the task can't be found in the heap (or hashtab), an assertion is triggered. If DO_CRASH is enabled, this assertion causes a crash. The problem is, sometimes it just so happens that someone attempts to delete a scheduled task at the time that it is running, leading to a crash. This change corrects the issue by tracking which task is currently running. If that task is attempted to be deleted, then we mark the task, and then wait for the task to complete. This way, we can be sure to coordinate task deletion and memory freeing. ASTERISK-24212 Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/3927 ........ Merged revisions 422070 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-25 16:44 +0000 [r421979-422037] Richard Mudgett * res/res_musiconhold.c: res_musiconhold.c: Release any format refs before memset(). * Clear the channel music_state pointer before destroying the music_state object for safety. * res/res_musiconhold.c, /: res_musiconhold: Fix MOH restarting where it left off from the last hold. Restore code removed by https://reviewboard.asterisk.org/r/3536/ that introduced a regression that prevents MOH from restarting were it left off the last time. ASTERISK-24019 #close Reported by: Jason Richards Patches: jira_asterisk_24019_v1.8.patch (license #5621) patch uploaded by rmudgett Review: https://reviewboard.asterisk.org/r/3928/ ........ Merged revisions 421976 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421977 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421978 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-24 19:36 +0000 [r421911-421956] Joshua Colp * res/res_pjsip_transport_websocket.c, /: res_pjsip_transport_websocket: Attach the Websocket module on outgoing INVITEs. In order to alter the Contact header on in-dialog requests and responses the Websocket module must be attached on outgoing INVITEs. The Contact header is modified so that the PJSIP transport layer can find and use the existing Websocket connection based on the source IP address, port, and transport. ASTERISK-24143 #close Reported by: Aleksei Kulakov ........ Merged revisions 421955 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_transport_websocket.c: res_pjsip_transport_websocket: Fix a progressive memory growth. The packet structure used to receive messages was using the transport pool. This meant that for each parsing the pool would grow accordingly. Since memory can not be reclaimed without resetting it this would cause the memory pool to grow and grow. This change uses a specific memory pool for the packet structure and resets it to a fresh state after the message has been received and handled. ........ Merged revisions 421939 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_transport_websocket.c: res_pjsip_transport_websocket: Ensure secure Websocket clients can be called. This change enforces the transport in the Contact header for Websocket clients. Previously a client may provide a transport of 'ws' when it is actually using a transport of 'wss'. This would cause outgoing calls to fail as the existing connection could not be found. ........ Merged revisions 421931 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip: Use the server reflexive ICE candidate RTCP port as provided. This code originally worked around an issue within res_rtp_asterisk itself. The wrong socket was being used for the STUN check for RTCP, causing the port to be the same as RTP. This was subsequently fixed and the RTCP port provided for the ICE candidate is correct and does not need to be incremented. ASTERISK-23997 #close Reported by: Badalian Vyacheslav Patches: plus1.diff submitted by Badalian Vyacheslav (license 5249) ........ Merged revisions 421909 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421910 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-22 16:56 +0000 [r421882] Mark Michelson * apps/app_mixmonitor.c: Fix a locking inversion in MixMonitor. We need to unlock the audiohook before trying to lock the channel, since the correct locking order is channel then audiohook. 2014-08-22 16:44 +0000 [r421880] Jonathan Rose * res/res_stasis_answer.c, res/res_stasis.c, res/stasis/command.c, res/res_stasis_playback.c, /, res/stasis/control.c, res/stasis/stasis_bridge.c, res/stasis/command.h, include/asterisk/stasis_app_impl.h, res/res_stasis_recording.c: ARI: Fix a crash caused by hanging during playback to a channel in a bridge ASTERISK-24147 #close Reported by: Edvin Vidmar Review: https://reviewboard.asterisk.org/r/3908/ ........ Merged revisions 421879 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-22 14:08 +0000 [r421860] Matthew Jordan * main/message.c, /: main/message: Add a new-line to a DEBUG message ........ Merged revisions 421859 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-21 22:07 +0000 [r421802] Richard Mudgett * /, res/res_musiconhold.c: res_musiconhold.c: Remove obsolete REF_DEBUG code. Remove unneeded code that writes to the wrong file location in an obsolete format. ........ Merged revisions 421799 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421800 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421801 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-21 21:42 +0000 [r421790-421797] Mark Michelson * res/res_pjsip_session.c, /: Switch from hostname to an IP address in the SDP origin line. Using the hostname in the SDP origin line may not satisfy the requirement of RFC 4566 that we use a FQDN or IP address. This change has us use the same information from the SDP connection line if possible. If not possible, we'll use the configured media address. And if that's not possible, we use the result of a PJLIB call to get the IP address of ourself. ASTERISK-23994 #close Reported by Private Name Review: https://reviewboard.asterisk.org/r/3925 ........ Merged revisions 421796 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/stasis/control.c: Ensure after-bridge behavior is correct when moving from Stasis to a non-Stasis bridge. Because of the departable state of channels that enter Stasis bridges, Stasis has to take responsibility for directing the channel to its intended after-bridge destination if the channel moves from a Stasis bridge to a non-Stasis bridge. This change ensures that when such a move occurs, when the channel leaves the bridging system, any after bridge gotos are honored. Review: https://reviewboard.asterisk.org/r/3920 ........ Merged revisions 421792 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_caller_id.c, /: Let's try checking the name and number, instead of the name twice. ........ Merged revisions 421789 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-21 21:25 +0000 [r421788] Jonathan Rose * /, res/res_musiconhold.c: res_musiconhold: Fix reference leaks caused when reloading with REF_DEBUG set Due to a faulty function for debugging reference decrementing, it was possible to reduce the refcount on the wrong object if two moh classes of the same name were in the moh class container. (closes issue ASTERISK-22252) Reported by: Walter Doekes Patches: 18_moh_debug_ref_patch.diff Uploaded by Jonathan Rose (license 6182) ........ Merged revisions 398937 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421777 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421779 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-21 21:18 +0000 [r421783] Mark Michelson * /, res/res_pjsip_caller_id.c: Improve consistency of party ID privacy usage. Prior to this change, the Remote-Party-ID header took the position of "If caller name and number are not explicitly allowed, then they are private" and P-Asserted-Identity took the position of "Caller name and number are only private if marked explicitly so" Now both mechanisms of conveying party identification use the former approach. ........ Merged revisions 421778 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-21 17:34 +0000 [r421675-421720] Matthew Jordan * /, channels/chan_sip.c: chan_sip: Don't use port derived from fromdomain if it isn't set If a user does not provide a port in the fromdomain setting, chan_sip will set the fromdomainport to STANDARD_SIP_PORT (5060). The fromdomainport value will then get used unilaterally in certain places. This causes issues with TLS, where the default port is expected to be 5061. This patch modifies chan_sip such that fromdomainport is only used if it is not the standard SIP port; otherwise, the port from the SIP pvt's recorded self IP address is used. Review: https://reviewboard.asterisk.org/r/3893/ ASTERISK-24178 #close Reported by: Elazar Broad patches: fromdomainport_fix.diff uploaded by Elazar Broad (License 5835) ........ Merged revisions 421717 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421718 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421719 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, UPGRADE.txt, main/app.c: ARI: Fix implicit answer when playback is initiated on unanswered channel When issuing a POST /channels/{channel_id}/play on a channel that is not yet answered, ARI is supposed to: * Queue up an AST_CONTROL_PROGRESS on the channel * Start up the playback of the media Instead, we sneak an answer on the channel right before starting playing media. This is due to ARI's usage of control_streamfile. This function implicitly answers the channel (and doesn't give ARI the option to stop it). The answering of the channel here is probably unnecessary: * app_voicemail, by far the biggest consumer of this function, always answers the channels anyway * control stream file (in res_agi) and ControlPlayback probably shouldn't be implicitly answering the channel. Answering should not be tied directly to playing back media. As it turns out, the answering of the channel here is pretty old: 356042 twilson if (ast_channel_state(chan) != AST_STATE_UP) { 3087 anthm res = ast_answer(chan); 180259 tilghman } (As in, ancient?) Note that others ran into this problem and commented about it on various mailing lists. Review: https://reviewboard.asterisk.org/r/3907/ ASTERISK-24229 #close Reported by: Matt Jordan ........ Merged revisions 421695 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/stasis/messaging.h, main/dns.c, /, main/format_cache.c: Clean up files that do not end with newlines Trivial patch to add new lines to several files missing them. This fixes warnings when compiling with gcc 4.1.2 on CentOS 5. ASTERISK-24245 #close Reported by: Shaun Ruffell patches: 0002-Trivial-addition-of-newlines-at-end-of-three-files.patch uploaded by Shaun Ruffell (License 5417) ........ Merged revisions 421677 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/uri.h, main/uri.c: uri: Quiet warning about type qualifiers ignored on function return type This patch fixes gcc warnings that occur due to the type qualifier 'const' being ignored on a return type of int. ASTERISK-24246 #close Reported by: Shaun Ruffell patches: 0001-main-uri-Quiet-warning-about-ignored-attribute-on-re.patch uploaded by Shaun Ruffell (License 5417) 2014-08-20 22:49 +0000 [r421616-421645] Richard Mudgett * main/bridge.c, res/res_pjsip_sdp_rtp.c, main/file.c, main/bridge_channel.c, channels/chan_pjsip.c, main/channel.c: chan_pjsip: Update media translation paths when new SDP negotiated. On a SIP reinvite that changes media strams, the PJSIP channel driver was flooding the log with "Asked to transmit frame type %s, while native formats is %s" warnings. * Fixes PJSIP not setting up translation paths when the formats change on a reinvite. AFS-63 was effectively reintroduced because of the media formats work. res_pjsip_sdp_rtp.c:set_caps() * Improved the unexpected frame format WARNING message to include more information. * Added protective locking while altering formats on a channel. Reworked set_format() to simplify and protect the formats under manipulation. * Restored some code that got lost in the media_formats work. (channel.c:set_format() and res_pjsip_sdp_rtp.c:set_caps()) AFS-137 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3906/ * /, main/cli.c: cli.c: Fix tab completion of "module load" when MALLOC_DEBUG is enabled. filename_completion_function() returns memory that was not allocated by the MALLOC_DEBUG allocation tracker so the memory must be freed by ast_std_free(). ........ Merged revisions 421600 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421602 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421608 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-20 20:40 +0000 [r421566-421585] Mark Michelson * res/res_pjsip_pubsub.c: Set the role for inbound subscriptions correctly. This was causing the AMI show_subscriptions test in the testsuite to fail since all subscriptions were being seen as subscribers instead of notifiers. * /, channels/chan_pjsip.c: Move evaluation of set_var options in pjsip to the end of channel initialization. This allows for set_var to override certain defaults such as caller ID and codec values. This also fixes a test suite regression. The "set_var" test suite test attempted to use set_var to override caller ID, but a recent change caused that to no longer work. ........ Merged revisions 421565 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-20 13:04 +0000 [r421538] Kinsey Moore * include/asterisk/stasis_bridges.h, tests/test_cel.c, res/ari/ari_model_validators.c, main/stasis_bridges.c, res/ari/ari_model_validators.h, rest-api/api-docs/events.json, /, res/stasis/app.c, main/bridge.c: Stasis: Add information to blind transfer event When a blind transfer occurs that is forced to create a local channel pair to satisfy the transfer request, information about the local channel pair is not published. This adds a field to describe that channel to the blind transfer message struct so that this information is conveyed properly to consumers of the blind transfer message. This also fixes a bug in which Stasis() was unable to properly identify the channel that was replacing an existing Stasis-controlled channel due to a blind transfer. Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3921/ ........ Merged revisions 421537 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-19 20:28 +0000 [r421448-421488] Mark Michelson * /, res/res_pjsip.c: Alter documentation for callerid_privacy to use correct values. ........ Merged revisions 421485 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis.c, /: Fix compilation error on certain versions of GCC. ........ Merged revisions 421447 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-19 19:42 +0000 [r421445] Kinsey Moore * main/manager.c, /: AMI Docs: Fix Status channel parameter optionality ........ Merged revisions 421442 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421443 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421444 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-19 16:28 +0000 [r421423] Jonathan Rose * res/res_stasis.c, /: ARI: Fix a bug where /channels/{channelID}/continue doesn't execute PBX If /channels/{channelID}/continue is called on a channel that was originated without a PBX (such as the ARI command POST channel with a stasis application argument), the channel will not start dialplan execution. This patch will now run the PBX out of the stasis execution if the channel doesn't currently have an active PBX upon continuing. ASTERISK-24043 #close Reported by: Krandon Bruse Review: https://reviewboard.asterisk.org/r/3917/ Patches: stasis-continue.diff submitted by Krandon Bruse (license 6631) ........ Merged revisions 421416 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-19 16:11 +0000 [r421403] Richard Mudgett * /, res/res_pjsip_caller_id.c, channels/chan_pjsip.c, res/res_pjsip_session.c: chan_pjsip: Fix attended transfer connected line name update. A calls B B answers B SIP attended transfers to C C answers, B and C can see each other's connected line information B completes the transfer A has number but no name connected line information about C while C has the full information about A I examined the incoming and outgoing party id information handling of chan_pjsip and found several issues: * Fixed ast_sip_session_create_outgoing() not setting up the configured endpoint id as the new channel's caller id. This is why party A got default connected line information. * Made update_initial_connected_line() use the channel's CALLERID(id) information. The core, app_dial, or predial routine may have filled in or changed the endpoint caller id information. * Fixed chan_pjsip_new() not setting the full party id information available on the caller id and ANI party id. This includes the configured callerid_tag string and other party id fields. * Fixed accessing channel party id information without the channel lock held. * Fixed using the effective connected line id without doing a deep copy outside of holding the channel lock. Shallow copy string pointers can become stale if the channel lock is not held. * Made queue_connected_line_update() also update the channel's CALLERID(id) information. Moving the channel to another bridge would need the information there for the new bridge peer. * Fixed off nominal memory leak in update_incoming_connected_line(). * Added pjsip.conf callerid_tag string to party id information from enabled trust_inbound endpoint in caller_id_incoming_request(). AFS-98 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3913/ ........ Merged revisions 421400 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-18 21:10 +0000 [r421376] Damien Wedhorn * channels/chan_skinny.c: Skinny: Fixup compile warning for non dev-mode. 2014-08-18 20:19 +0000 [r421337] George Joseph * funcs/func_config.c, /: func_config: Change 'Not Found' message from ERROR to DEBUG When you call the CONFIG dialplan function with the name of a variable that doesn't exist in the target context you get an ERROR. This does nothing but clutter up the logs with messages that may be perfectly acceptable. Just because a variable wasn't in the context doesn't mean it's an error. Maybei t's optional or just needs to be defaulted or ignored. This patch changes the log level from ERROR to DEBUG. If a dialplan developer wants to debug their dialplan they still canby setting the console debug level as needed. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3919/ ........ Merged revisions 421327 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421328 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421329 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-18 01:13 +0000 [r421230-421312] Matthew Jordan * res/ari/resource_channels.c: res/ari/resource_channels: Fix compilation issue Forgot a parameter. Whoops. * res/ari/resource_channels.c: res/ari/resource_channels: Don't return allocation failure on failed function If a function fails to execute, it is most likely due to one of two reasons: (1) The function doesn't exist or can't be read from (2) The function is dangerous and is restricted based on the user's permissions Currently we return allocation failure, which is incorrect. This updates the reason code to more accurately reflect why the request failed. ASTERISK-24215 * /, apps/app_meetme.c: apps/app_meetme: Fix crash when publishing MeetMe messages with no channel The same function, meetme_stasis_generate_msg, handles creating and publishing Stasis message both when there are channels in the MeetMe conference and when there are no channels in the conference. When the performance improvement was made to use cached snapshots, this created a situation where Asterisk would crash: obtaining a cached snapshot is not NULL tolerant. This patch restores the previous implementation, which used a NULL safe set of routines to produce a blob containing the channel snapshot (if available) and information about the MeetMe conference. ASTERISK-24234 #close Reported by: Shaun Ruffell Tested by: Shaun Ruffell ........ Merged revisions 421270 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_dial.c, /: apps/app_dial: Fix Dial 'z' option The 'z' option is supposed to disable the dial timeout in the case of a call forward. Unfortunately, the wrong timeout timer was passed to the do_forward function, resulting in the option not working. ASTERISK-24225 #close Reported by: dimitripietro Tested by: dimitripietro patches: jira_asterisk_24225_v1.8.patch uploaded by rmudgett (License 5621) jira_asterisk_24225_v11.patch uploaded by rmudgett (License 5621) ........ Merged revisions 421232 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421233 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421234 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, configure, configure.ac: configure: Undefine FORTIFY_SOURCE prior to defining it for patched gcc Some distributions of Linux patch gcc to define FORTIFY_SOURCE when gcc is executed with optimization. This "help" unfortunately results in re-definition warnings when FORTIFY_SOURCE is later defined in Asterisk's build system. This patch undefines FORTIFY_SOURCE prior to defining it to prevent this warning. Review: https://reviewboard.asterisk.org/r/3912/ ASTERISK-24032 #close Reported by: Kilburn Tested by: Kilburn, wdoekes patches: 1.8.diff uploaded by cloos (License 5956) 10.diff uploaded by cloos (License 5956) 11.diff uploaded by cloos (License 5956) 12.diff uploaded by cloos (License 5956) 13.diff uploaded by cloos (License 5956) ........ Merged revisions 421227 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421228 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421229 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-17 16:10 +0000 [r421210] Joshua Colp * res/res_http_websocket.c: res_http_websocket: Include query parameters in client connection requests. Review: https://reviewboard.asterisk.org/r/3914/ 2014-08-15 17:08 +0000 [r421187] Jonathan Rose * main/channel.c, /: Bridging: Fix a behavioral change when checking if a channel is leaving a bridge r420934 introduced some failures in the test suite. Upon investigating, it was discovered that differences in the way we were evaluating whether a channel was in the process of leaving a bridge were causing some reinvites not to occur (mostly reinvites back to Asterisk when ending a call). This patch fixes that behavioral change. ASTERISK-24027 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3910/ ........ Merged revisions 421186 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-15 15:45 +0000 [r421042-421166] Matthew Jordan * apps/app_voicemail.c, /, main/app.c: app_voicemail/app: Remove test events that were duplicated by r421059 Moving the test event raised when a file is played back (which occurred in r421059) broke the ever loving snot out of the voicemail tests. This caused duplicate test events to get raised, as app_voicemail and main/app were raising events prior to call ast_streamfile. The voicemail tests did not enjoy getting multiple events. Since raising the playback event in ast_streamfile is far more useful to the vast majority of tests, this patch keeps the call there and simply removes the extraneous calls that duplicated the event. ........ Merged revisions 421125 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421164 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421165 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_hep_rtcp.c, /: res/res_hep_rtcp: Remove dependency on PJSIP The res_hep_rtcp module was incorrectly including . This didn't need to be included, as the module does not using PJPROJECT any fashion. Unfortunately, because res_hep_rtcp did not include pjsip in its MODULEINFO as a dependency, this also meant that res_hep_rtcp will fail to compile on a system without PJPROJECT. This patch removes the include. Thanks to Damien Wedhorn for pointing this out in #asterisk-dev. ASTERISK-24236 #close Reported by: Damien Wedhorn, Matt Jordan Tested by: Damien Wedhorn ........ Merged revisions 421064 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/file.c, main/app.c: main/file: Move test event to emit PLAYBACK event more consistently This is being done in advance of the test for ASTERISK-23953 ........ Merged revisions 421059 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 421060 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 421061 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_cel.c, main/cel.c, /: cel: Make sure channels in extra fields include their unique IDs as well CEL typically tracks a lot of information using the unique ID of the channel. This is typically needed due to tying events together using the linked ID of the various channels involved in a "call", which is derived from the channel ID of the oldest channel involved in a bridge (or in the case of a Dial, the parent channel). Previously, we had updated the extra fields to include the involved channel names, but forgot to put in the unique ID. This patch corrects that error. ........ Merged revisions 421037 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-14 16:32 +0000 [r420957-421010] Richard Mudgett * /, res/ari/resource_channels.c: ARI: Originate to app local channel subscription code optimization. Reduce the scope of local_peer and only get it if the ARI originate is subscribing to the channels. Review: https://reviewboard.asterisk.org/r/3905/ ........ Merged revisions 421009 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/channel_internal_api.c, main/channel.c: channel_internal_api.c: Replace some code with ao2_replace(). Use ao2_replace() instead of ao2_cleanup(); ao2_bump(). ao2_replace() has the advantange of not altering the ref count if the replaced pointer is the same. Review: https://reviewboard.asterisk.org/r/3904/ * /, res/res_pjsip_send_to_voicemail.c: res_pjsip_send_to_voicemail.c: Fix svn file properties. ........ Merged revisions 420956 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-13 16:53 +0000 [r420950] Kinsey Moore * res/res_pjsip.c, /: PJSIP: Prevent crash no-URI contacts This prevents a crash from occurring when a contact with no URI is used for the creation of an outbound out-of-dialog request with no associated endpoint. ........ Merged revisions 420949 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-13 16:07 +0000 [r420940] Jonathan Rose * main/bridge_after.c, main/channel_internal_api.c, include/asterisk/channel.h, apps/app_chanspy.c, apps/app_mixmonitor.c, apps/app_stack.c, main/bridge_channel.c, main/channel.c, main/pbx.c, /, main/framehook.c: Bridges: Fix feature interruption/unintended kick caused by external actions If a manager or CLI user attached a mixmonitor to a call running a dynamic bridge feature while in a bridge, the feature would be interrupted and the channel would be forcibly kicked out of the bridge (usually ending the call during a simple 1 to 1 call). This would also occur during any similar action that could set the unbridge soft hangup flag, so the fix for this was to remove unbridge from the soft hangup flags and make it a separate thing all together. ASTERISK-24027 #close Reported by: mjordan Review: https://reviewboard.asterisk.org/r/3900/ ........ Merged revisions 420934 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-13 14:24 +0000 [r420919] Kinsey Moore * main/manager.c: AMI: Improve documentation for Status action 2014-08-13 07:52 +0000 [r420899] Walter Doekes * /, main/logger.c: logger: Don't store verbose-magic in the log files. In r399267, the verbose2magic stuff was edited. This time it results in magic characters in the log files for multiline messages. In trunk (and 13) this was fixed by the "stripping" of those characters from multiline messages (in r414798). This fix is altered to actually strip the characters and not replace them with blanks. Review: https://reviewboard.asterisk.org/r/3901/ Review: https://reviewboard.asterisk.org/r/3902/ ........ Merged revisions 420897 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420898 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-12 23:43 +0000 [r420879-420881] Richard Mudgett * channels/chan_sip.c: chan_sip: Fix type mismatch when the format is changed. Symptom is most likely an invalid ao2 object bad magic number message or a less likely crash. * res/res_stasis_snoop.c: res_stasis_snoop.c: Fix off nominial exit path leaving Snoop channel locked and not hungup. * Made use ast_copy_string() instead of strcpy() for snoop uniqueid for safety. There is no guarantee that the max channel uniqueid length will remain the same as the snoop uniqueid space. 2014-08-12 11:17 +0000 [r420856] Joshua Colp * apps/app_voicemail.c: app_voicemail: Fix the "test_voicemail_vm_info" unit test. 2014-08-11 20:53 +0000 [r420837] Richard Mudgett * res/stasis/command.c, /: res/stasis/command.c: Fix recent commit using spaces instead of tabs. ........ Merged revisions 420836 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-11 18:50 +0000 [r420808] Matthew Jordan * rest-api/api-docs/playbacks.json, rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, rest-api/resources.json, 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.5.0/1.5.0 respectively This is to support the backwards compatible changes made in the next version of Asterisk. ........ Merged revisions 420805 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-11 18:46 +0000 [r420796-420803] Kinsey Moore * /, res/res_stasis.c: Stasis: Use the correct return value Return the correct value instead of always returning 0 when setting internal status on unreal channels. Reported by: Richard Mudgett ........ Merged revisions 420802 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis.c, res/ari/resource_bridges.c, /, res/stasis/stasis_bridge.c, include/asterisk/stasis_app.h: Stasis: Allow internal channels directly into bridges The patch to catch channels being shoehorned into Stasis() via external mechanisms also happens to catch Announcer and Recorder channels because they aren't known to be stasis-controlled channels in the usual sense. This marks those channels as Stasis()-internal channels and allows them directly into bridges. Review: https://reviewboard.asterisk.org/r/3903/ ........ Merged revisions 420795 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-11 18:32 +0000 [r420758-420794] Mark Michelson * include/asterisk/stasis_app.h, main/stasis_channels.c, res/ari/resource_channels.c, CHANGES, res/res_pjsip_pubsub.c, main/manager_channels.c, apps/app_dial.c, res/stasis/app.c, res/stasis/control.c: Improve call forwarding reporting, especially with regards to ARI. This patch addresses a few issues: 1) The order of Dial events have been changed when performing a call forward. The order has now been altered to 1) Dial begins dialing channel A. 2) When A forwards the call to B, we issue the dial end event to channel A, indicating the dial is being canceled due to a forward to B. 3) When the call to channel B occurs, we then issue a new dial begin to channel B. 2) Call forwards are now reported on the calling channel, not the peer channel. 3) AMI DialEnd events have been altered to display the extension the call is being forwarded to when relevant. 4) You can now get the values of channel variables for channels that are not currently in the Stasis application. This brings the retrieval of channel variables more in line with the rest of channel read operations since they may be performed on channels not in Stasis. ASTERISK-24134 #close Reported by Matt Jordan ASTERISK-24138 #close Reported by Matt Jordan Patches: forward-shenanigans.diff uploaded by Matt Jordan (License #6283) Review: https://reviewboard.asterisk.org/r/3899 * res/res_pjsip_pubsub.c: Fix crashing unit tests with regards to RLS. The unit tests require a sorcery.conf file that has been set up to store resource lists in memory rather than retrieving from configuration. With a setup that is not conducive to running the tests, a fault in sorcery currently causes Asterisk to crash when attempting to run any of the tests. To get around the crash, this adds a function that verifies the current environment and marks the tests as "not run" if the setup is not correct. * res/res_pjsip_pubsub.c: Fix crash encountered by the testsuite. Running testsuite tests locally produced no errors, but when run using the continuous integration framework, crashes occurred. The crashes occurred due to a refcounting error that had been fixed for a similar situation. 2014-08-11 13:57 +0000 [r420742] Matthew Jordan * res/res_hep.c, res/res_hep_pjsip.c, res/res_hep_rtcp.c: res_hep: Remove disabling of modules These modules were originally specified as being disabled, as they were introduced midstream in Asterisk 12. That makes it nicer for folks who are upgrading to a new release in the middle of Asterisk 12. That's not the case for Asterisk 13: it's a brand new release. There's no reason to have the modules disabled by default in that case. 2014-08-11 10:40 +0000 [r420657-420717] Walter Doekes * /, main/utils.c: general: Fix memory Corruption in __ast_string_field_ptr_build_va. If the space left in a stringfield is between 0 and (alignof(ast_string_field_allocation)-1) adding new data would cause memory corruption, because we would assume enough space (unsigned underrun). Thanks Arnd Schmitter for reporting and finding out the cause! ASTERISK-23508 #close Reported by: Arnd Schmitter Tested by: Arnd Schmitter, JoshE Review: https://reviewboard.asterisk.org/r/3898/ ........ Merged revisions 420680 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420715 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420716 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/tcptls.c, /: tcptls: Avoid compiler warning on non-dev-mode. ........ Merged revisions 420654 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420655 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420656 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-11 01:31 +0000 [r420607-420639] Matthew Jordan * funcs/func_jitterbuffer.c: funcs/func_jitterbuffer: Tweak documentation This patch merely reformats and cleans up a bit of the jitterbuffer documentation for the wiki. * UPGRADE.txt, configs/samples/extconfig.conf.sample, CHANGES, apps/app_queue.c, contrib/ast-db-manage/config/versions/d39508cb8d8_create_queue_rules.py (added), configs/samples/queuerules.conf.sample: app_queue: Add RealTime support for queue rules This patch gives the optional ability to keep queue rules in RealTime. It is important to note that with this patch: (a) Queue rules in RealTime are only examined on module load/reload (b) Queue rules are loaded both from the queuerules.conf file as well as the RealTime backend To inform app_queue to examine RealTime for queue rules, a new setting has been added to queuerules.conf's general section "realtime_rules". RealTime queue rules will only be used when this setting is set to "yes". The schema for the database table supports a rule_name, time, min_penalty, and max_penalty columns. min_penalty and max_penalty can be relative, if a '-' or '+' literal is provided. Otherwise, the penalties are treated as constants. For example: rule_name, time, min_penalty, max_penalty 'default', '10', '20', '30' 'test2', '20', '30', '55' 'test2', '25', '-11', '+1111' 'test2', '400', '112', '333' 'test3', '0', '4564', '46546' 'test_rule', '40', '15', '50' which would result in : Rule: default - After 10 seconds, adjust QUEUE_MAX_PENALTY to 30 and adjust QUEUE_MIN_PENALTY to 20 Rule: test2 - After 20 seconds, adjust QUEUE_MAX_PENALTY to 55 and adjust QUEUE_MIN_PENALTY to 30 - After 25 seconds, adjust QUEUE_MAX_PENALTY by 1111 and adjust QUEUE_MIN_PENALTY by -11 - After 400 seconds, adjust QUEUE_MAX_PENALTY to 333 and adjust QUEUE_MIN_PENALTY to 112 Rule: test3 - After 0 seconds, adjust QUEUE_MAX_PENALTY to 46546 and adjust QUEUE_MIN_PENALTY to 4564 Rule: test_rule - After 40 seconds, adjust QUEUE_MAX_PENALTY to 50 and adjust QUEUE_MIN_PENALTY to 15 If you use RealTime, the queue rules will be always reloaded on a module reload, even if the underlying file did not change. With the option disabled, the rules will only be reloaded if the file was modified. Review: https://reviewboard.asterisk.org/r/3607/ ASTERISK-23823 #close Reported by: Michael K patches: app_queue.c_realtime_trunk.patch uploaded by Michael K (License 6621) * CHANGES: Update CHANGES file * UPGRADE.txt: Update UPGRADE.txt file 2014-08-08 20:08 +0000 [r420577-420592] Jason Parker * apps/app_voicemail.c: Fix build in devmode. * CHANGES, configs/samples/voicemail.conf.sample, apps/app_voicemail.c: app_voicemail: Add the ability to specify multiple email addresses. ASTERISK-24045 Reported by: Jacob Barber Review: https://reviewboard.asterisk.org/r/3833/ 2014-08-08 17:53 +0000 [r420534-420562] Matthew Jordan * channels/chan_sip.c, channels/sip/security_events.c, channels/sip/dialplan_functions.c, channels/sip/reqresp_parser.c, channels/sip/route.c, channels/sip/utils.c, channels/sip/config_parser.c: chan_sip: Mark chan_sip and its files as extended support * rest-api-templates/make_ari_stubs.py: make_ari_stubs: Update wiki prefix to '13' * rest-api-templates/res_ari_resource.c.mustache: res_ari_resource.c.mustache: Update template to emit module support level * main/message.c, /: main/message: remove debug message ........ Merged revisions 420533 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-08 03:03 +0000 [r420514] Kinsey Moore * tests/test_cel.c, /: CEL: Update unit tests for additional information This updates the CEL unit tests for the new information contained in the attended transfer CEL extra field. ........ Merged revisions 420513 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-08 01:31 +0000 [r420494-420496] Matthew Jordan * UPGRADE.txt: Update UPGRADE file for 13 branch * /: Remove old properties * / (added): ___ _ _ _ __ _____ / _ \ | | (_) | | / ||____ | / /_\ \___| |_ ___ _ __ _ ___| | __ `| | / / | _ / __| __/ _ | '__| / __| |/ / | | \ \ | | | \__ | || __| | | \__ | < _| |.___/ / \_| |_|___/\__\___|_| |_|___|_|\_\ \___\____/ 2014-08-07 21:58 +0000 [r420437] Richard Mudgett * /, channels/chan_sip.c: chan_sip: Replace sip_tls_read() and resolve the large SDP poll issue. Replace sip_tls_read() and sip_tcp_read() with a single function and resolve the poll/wait issue with large SDP payloads. ASTERISK-18345 #close Reported by: Stephane Chazelas Patches: tcptls_pollv4.diff (license #5835) patch uploaded by Elazar Broad Review: https://reviewboard.asterisk.org/r/3882/ ........ Merged revisions 420434 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420435 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420436 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-07 21:17 +0000 [r420389-420415] Kinsey Moore * main/stasis_bridges.c, /: Stasis: Correct blind transfer message generation This fixes the json object creation format string and key name for the BridgeBlindTransfer Stasis event allowing it to be published properly. ........ Merged revisions 420414 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_bridges.c, /: Stasis: Ensure transfer messages follow validation rules This makes Stasis() event generation for transfer messages follow validation rules. Currently, ast_json_null() is being used in place of omitting a key entirely which falls afoul of these validation rules. https://reviewboard.asterisk.org/r/3892/ ........ Merged revisions 420408 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pubsub.c: Fix build in dev mode 2014-08-07 19:44 +0000 [r420384-420388] Mark Michelson * /, main/bridge.c: Ensure bridges exist when trying to determine bridged parties when publishing transfer information. ........ Merged revisions 420387 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/strings.c, include/asterisk/res_pjsip_presence_xml.h, res/res_pjsip_mwi.c, res/res_pjsip_dialog_info_body_generator.c, res/res_pjsip_xpidf_body_generator.c, include/asterisk/strings.h, res/res_pjsip_pubsub.c, res/res_pjsip_exten_state.c, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_pidf_body_generator.c: Add support for RFC 4662 resource list subscriptions. This commit adds the ability for a user to configure a resource list in pjsip.conf. Subscribing to this list simultaneously subscribes the subscriber to all resources listed. This has the potential to reduce the amount of SIP traffic when loads of subscribers on a system attempt to subscribe to each others' states. 2014-08-07 18:51 +0000 [r420364] Richard Mudgett * include/asterisk/format_compatibility.h, channels/iax2/format_compatibility.c, channels/iax2/include/codec_pref.h, main/format_compatibility.c, channels/chan_iax2.c, channels/iax2/codec_pref.c, channels/iax2/include/format_compatibility.h: chan_iax2: Several media format fixes. * Fixed the iax.conf bandwidth option. This is the root cause of ASTERISK-24150. * Added checks in iax2_request() to ensure that there are actual formats requested for the new channel to prevent any more fracks from issues like ASTERISK-24150. This is a consequence of the iax.conf bandwidth option not working. * Fixed struct iax2_codec_pref.order member size mismatch issue when converting to and from the codec preference order list passed over the wire. In addition the values sent over the wire are now compatible with previous Asterisk versions. * Fixed several issues dealing with the struct iax2_codec_pref members. Off-by-one, array limit errors, and the order/framing members always need to be updated together. * Made iax2_request() setup the channel's native format preference order according to the user's wishes. The new media format strategy needs the order specified earler. * Fixed usage of ast_format_compatibility_bitfield2format(). The function can return NULL if the bitfield was not associated with a function. * Deleted dead code iax2_codec_pref_getsize() and iax2_codec_pref_setsize(). * Made iax2_parse_allow_disallow() and iax2_codec_pref_string() call iax2_codec_pref_to_cap() instead of inlining it. * Made IAX_CAPABILITY_MEDBANDWIDTH, IAX_CAPABILITY_LOWBANDWIDTH, and IAX_CAPABILITY_LOWFREE constants again as they were in Asterisk v1.8. * Renamed prefs to prefs_global so it won't get confused with the local pref versions. * Fixed too small buffer in handle_cli_iax2_show_peer(). * Fixed ast_cli() calls in handle_cli_iax2_show_peer() to output complete lines. * Changed struct create_addr_info.prefs to be struct iax2_codec_pref as an optimization so iax2_request() and iax2_call() do less work. * Fixed a potential deadlock in ast_iax2_new() on an off-nominal path when the pbx could not get started. * Made set_config() setup a local prefs list along side the local capability format bitfield. Once the config is loaded, then the local copies are put into the global versions. * Fix unininialized codec_buf in function_iaxpeer(). ASTERISK-24150 #close Reported by: Scott Griepentrog Review: https://reviewboard.asterisk.org/r/3890/ 2014-08-07 15:30 +0000 [r420338] Kinsey Moore * include/asterisk/bridge_features.h, res/res_stasis.c, res/stasis/command.c, rest-api/api-docs/events.json, /, res/stasis/app.c, res/stasis/control.c, main/bridge.c, main/bridge_basic.c, res/stasis/stasis_bridge.c, include/asterisk/stasis_bridges.h, res/stasis/command.h, include/asterisk/stasis_app.h, res/stasis/app.h, res/stasis/control.h, apps/app_queue.c, res/ari/ari_model_validators.c, main/cel.c, main/stasis_bridges.c, res/ari/ari_model_validators.h, main/channel.c, include/asterisk/datastore.h, tests/test_cel.c: Stasis: Convey transfer information to applications This fixes a class of issues where Stasis applications were not made aware that their channels were being manipulated or replaced by external entitiessuch as transfers, AMI commands, or dialplan applications such as Bridge(). Inconsistent information such as StasisEnd events with unknown channels as a result of masquerades has also been corrected. To accomplish these fixes, several new fields were added to blind and attended transfer messages as well as StasisStart and BridgeAttendedTransfer Stasis events. ASTERISK-23941 #close Review: https://reviewboard.asterisk.org/r/3865/ Review: https://reviewboard.asterisk.org/r/3857/ Review: https://reviewboard.asterisk.org/r/3852/ Review: https://reviewboard.asterisk.org/r/3816/ Review: https://reviewboard.asterisk.org/r/3731/ Review: https://reviewboard.asterisk.org/r/3729/ Review: https://reviewboard.asterisk.org/r/3728/ ........ Merged revisions 420325 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-07 14:37 +0000 [r420314-420315] Joshua Colp * include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_pubsub.exports.in, res/res_pjsip_publish_asterisk.c (added), res/res_pjsip_pubsub.c: res_pjsip_publish_asterisk: Add support for exchanging device and mailbox state using SIP. This module uses the inbound and outbound PUBLISH support to exchange device and mailbox state between Asterisk instances. Each instance is configured to publish to the other and requires no intermediary server. The functionality provided is similar to the XMPP and Corosync support. Review: https://reviewboard.asterisk.org/r/3780/ * include/asterisk/res_pjsip_outbound_publish.h (added), res/res_pjsip_outbound_publish.exports.in (added), res/res_pjsip_outbound_publish.c (added): res_pjsip_outbound_publish: Add module which provides outbound PUBLISH support. This module implements the core parts required for doing outbound PUBLISH. It takes care of configuration, lifetime management, and authentication. Additional modules implement the specific events that are published. Review: https://reviewboard.asterisk.org/r/3780/ 2014-08-07 14:17 +0000 [r420289-420309] Matthew Jordan * main/pbx.c: pbx: Filter out pattern matching hints in responses sent to ExtensionStateList Hints that are a pattern match are technically stored in the hint container in the same fashion as concrete implementations of hints. The pattern matching hints, however, are not "real" in the sense that things can subscribe to them: rather, they are stored in the hints container so that when a subscription is made a "real" hint can be generated for the subscription if one does not yet exist. The extension state core takes care of this correctly by matching against non-pattern matching extensions prior to pattern matching extensions. Because of this, however, the ExtensionStateList AMI action was returning pattern matching hints when executed. These hints are meaningless from the perspective of AMI clients: their state will never change, they cannot be subscribed to, and events would never normally be generated from them. As such, we now filter these out of the response. * build_tools/post_process_documentation.py: build_tools: Skip managerEvent combining for AMI action responses AMI action responses can (and will) reference AMI events that they return. These event references and definitions should not be combined with AMI events raised elsewhere in the code, as they are specifically tied to the AMI action that raised them. ASTERISK-24156 #close Reported by: Rusty Newton 2014-08-06 18:12 +0000 [r420212-420237] Richard Mudgett * contrib/ast-db-manage/config/versions/2fc7930b41b3_add_pjsip_endpoint_options_for_12_1.py, /: Fix alembic script to work properly in offline mode. When run in offline mode, this would attempt to check the database for the presence of a type it was going to try to create. I now check the context to see if we're running in offline mode and change a parameter accordingly. ........ Merged revisions 407567 from http://svn.asterisk.org/svn/asterisk/branches/12 * contrib/ast-db-manage/config/versions/3855ee4e5f85_add_missing_pjsip_options.py (added), /: Add alembic script that adds contact user_agent and endpoint message_context. ........ Merged revisions 411514 from http://svn.asterisk.org/svn/asterisk/branches/12 * contrib/ast-db-manage/voicemail/versions/39428242f7f5_increase_recording_column_size.py (added), /, contrib/ast-db-manage/config/versions/43956d550a44_add_tables_for_pjsip.py, contrib/ast-db-manage/config.ini.sample, contrib/ast-db-manage/config/versions/1758e8bbf6b_increase_useragent_column_size.py (added), contrib/ast-db-manage/config/versions/5139253c0423_make_q_member_uniqueid_autoinc.py (added), contrib/ast-db-manage/cdr.ini.sample, contrib/ast-db-manage/voicemail.ini.sample: alembic: Adjust sippeers, queue_members, and voicemail_messages tables. * Increased the sippeers useragent max string size to 255. * Changed the queue_members uniqueid to an auto incremented integer instead of a string. * Increased the voicemail_messages BLOB size to LONGBLOB on mysql. * Fixed the add_tables_for_pjsip config change version downgrade actions to drop a table it created. * Adjusted the sample alembic.ini files cdr.ini.sample, config.ini.sample, and voicemail.ini.sample to give a mysql and postgres sqlalchemy.url lines. ASTERISK-23847 #close Reported by: Stephen More ASTERISK-23825 #close Reported by: Stephen More ASTERISK-23909 #close Reported by: Stephen More Review: https://reviewboard.asterisk.org/r/3870/ ........ Merged revisions 420211 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-06 16:12 +0000 [r420149] George Joseph * /, pbx/pbx_lua.c, main/pbx.c: pbx_lua: fix regression with global sym export and context clash by pbx_config. ASTERISK-23818 (lua contexts being overwritten by contexts of the same name in pbx_config) surfaced because pbx_lua, having the AST_MODFLAG_GLOBAL_SYMBOLS set, was always force loaded before pbx_config. Since I couldn't find any reason for pbx_lua to export it's symbols to the rest of Asterisk, I simply changed the flag to AST_MODFLAG_DEFAULT. Problem solved. What I didn't realize was that the symbols need to be exported not because Asterisk needs them but because any external Lua modules like luasql.mysql need the base Lua language APIs exported (ASTERISK-17279). Back to ASTERISK-23818... It looks like there's an issue in pbx.c where context_merge was only merging includes, switches and ignore patterns if the context was already existing AND has extensions, or if the context was brand new. If pbx_lua is loaded before pbx_config, the context will exist BUT pbx_lua, being implemented as a switch, will never place extensions in it, just the switch statement. The result is that when pbx_config loads, it never merges the switch statement created by pbx_lua into the final context. This patch sets pbx_lua's modflag back to AST_MODFLAG_GLOBAL_SYMBOLS and adds an "else if" in context_merge that catches the case where an existing context has includes, switchs or ingore patterns but no actual extensions. ASTERISK-23818 #close Reported by: Dennis Guse Reported by: Timo Teräs Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3891/ ........ Merged revisions 420146 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 420147 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 420148 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-06 15:32 +0000 [r420144] Walter Doekes * funcs/func_channel.c: Add documentation to the ability to retrieve the source port of a SIP call. (belongs with r419970) ASTERISK-24040 #close Patches: func_channel.c.diff uploaded by dtryba Review: https://reviewboard.asterisk.org/r/3781/ 2014-08-06 12:55 +0000 [r420124] Kinsey Moore * configs/samples/stasis.conf.sample (added), main/named_acl.c, apps/app_queue.c, main/stasis_bridges.c, main/loader.c, main/stasis.c, apps/app_forkcdr.c, main/stasis_message.c, funcs/func_cdr.c, res/res_corosync.c, res/res_stun_monitor.c, res/res_stasis_test.c, res/res_stasis.c, apps/app_chanspy.c, main/stasis_cache.c, main/pickup.c, main/security_events.c, include/asterisk/stasis.h, main/devicestate.c, main/core_local.c, res/res_stasis_snoop.c, main/endpoints.c, main/presencestate.c, main/cdr.c, main/channel.c, main/stasis_system.c, main/manager.c, main/test.c, main/file.c, main/app.c, pbx/pbx_realtime.c, main/stasis_channels.c, tests/test_stasis.c, res/parking/parking_manager.c, main/stasis_endpoints.c, main/rtp_engine.c, main/ccss.c, main/bridge.c, tests/test_stasis_channels.c: Stasis: Allow message types to be blocked This introduces stasis.conf and a mechanism to prevent certain message types from being published. Internally, this works by preventing the chosen message types from being created which ensures that those message types can never be published. This patch also adjusts message publishers such that message payloads are not created if the related message type is not available. ASTERISK-23943 #close Review: https://reviewboard.asterisk.org/r/3823/ 2014-08-05 21:48 +0000 [r420098-420100] Matthew Jordan * res/stasis/messaging.c, /: stasis: Fix compilation issue with ao2 tagged objects ........ Merged revisions 420099 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_endpoints.c, rest-api/api-docs/events.json, /, channels/chan_sip.c, res/stasis/app.c, res/stasis/messaging.h (added), res/ari/resource_endpoints.h, res/res_pjsip_messaging.c, tests/test_message.c (added), res/res_xmpp.c, include/asterisk/json.h, CHANGES, include/asterisk/manager.h, res/ari/ari_model_validators.c, res/ari/ari_model_validators.h, main/json.c, res/res_ari_endpoints.c, include/asterisk/message.h, res/ari/resource_channels.c, main/message.c, res/res_stasis.c, res/stasis/messaging.c (added), rest-api/api-docs/endpoints.json: Multiple revisions 420089-420090,420097 ........ r420089 | mjordan | 2014-08-05 15:10:52 -0500 (Tue, 05 Aug 2014) | 72 lines ARI: Add channel technology agnostic out of call text messaging This patch adds the ability to send and receive text messages from various technology stacks in Asterisk through ARI. This includes chan_sip (sip), res_pjsip_messaging (pjsip), and res_xmpp (xmpp). Messages are sent using the endpoints resource, and can be sent directly through that resource, or to a particular endpoint. For example, the following would send the message "Hello there" to PJSIP endpoint alice with a display URI of sip:asterisk@mycooldomain.org: ari/endpoints/sendMessage?to=pjsip:alice&from=sip:asterisk@mycooldomain.org&body=Hello+There This is equivalent to the following as well: ari/endpoints/PJSIP/alice/sendMessage?from=sip:asterisk@mycooldomain.org&body=Hello+There Both forms are available for message technologies that allow for arbitrary destinations, such as chan_sip. Inbound messages can now be received over ARI as well. An ARI application that subscribes to endpoints will receive messages from those endpoints: { "type": "TextMessageReceived", "timestamp": "2014-07-12T22:53:13.494-0500", "endpoint": { "technology": "PJSIP", "resource": "alice", "state": "online", "channel_ids": [] }, "message": { "from": "\"alice\" ", "to": "pjsip:asterisk@127.0.0.1", "body": "Watson, come here.", "variables": [] }, "application": "testsuite" } The above was made possible due to some rather major changes in the message core. This includes (but is not limited to): - Users of the message API can now register message handlers. A handler has two callbacks: one to determine if the handler has a destination for the message, and another to handle it. - All dialplan functionality of handling a message was moved into a message handler provided by the message API. - Messages can now have the technology/endpoint associated with them. Various other properties are also now more easily accessible. - A number of ao2 containers that weren't really needed were replaced with vectors. Iteration over ao2_containers is expensive and pointless when the lifetime of things is well defined and the number of things is very small. res_stasis now has a new file that makes up its structure, messaging. The messaging functionality implements a message handler, and passes received messages that match an interested endpoint over to the app for processing. Note that inadvertently while testing this, I reproduced ASTERISK-23969. res_pjsip_messaging was incorrectly parsing out the 'to' field, such that arbitrary SIP URIs mangled the endpoint lookup. This patch includes the fix for that as well. Review: https://reviewboard.asterisk.org/r/3726 ASTERISK-23692 #close Reported by: Matt Jordan ASTERISK-23969 #close Reported by: Andrew Nagy ........ r420090 | mjordan | 2014-08-05 15:16:37 -0500 (Tue, 05 Aug 2014) | 2 lines Remove automerge properties :-( ........ r420097 | mjordan | 2014-08-05 16:36:25 -0500 (Tue, 05 Aug 2014) | 2 lines test_message: Fix strict-aliasing compilation issue ........ Merged revisions 420089-420090,420097 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-05 13:59 +0000 [r420028] Jonathan Rose * main/format.c: chan_iax2: Fix a crash that occurs when using allow=all for an IAX2 peer Or any combination of codecs that includes Opus. ASTERISK-24107 #close Review: https://reviewboard.asterisk.org/r/3885/ 2014-08-04 21:00 +0000 [r420007] Richard Mudgett * main/format_cache.c, include/asterisk/format_cache.h: Remove duplicate definitions of ast_format_vp8. 2014-08-04 20:25 +0000 [r419970] Mark Michelson * channels/sip/dialplan_functions.c: Add the ability to retrieve the source port of a SIP call. This adds the ability to call CHANNEL(recvport) on chan_sip channels to see the port on which an INVITE was received. ASTERISK-24040 #close Reported by dtryba Patches: dialplan_functions.patch uploaded by dtryba (License #6628) Review: https://reviewboard.asterisk.org/r/3781 2014-08-04 19:47 +0000 [r419945] Rusty Newton * main/manager.c, /: Manager - Improve documentation for manager commands Getvar and Setvar. The documentation for these commands did not make it clear that they could accept expressions and functions. Modified to make this clear, but tried not to be overly explicit. ASTERISK-21178 #close Reported by: Rusty Newton Tested by: Rusty Newton Review: https://reviewboard.asterisk.org/r/3854 ........ Merged revisions 419942 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 419943 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 419944 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-08-02 03:37 +0000 [r419914] Kinsey Moore * res/res_pjsip.c: Manager: Add PJSIPShowEndpoint[s] documentation This adds a large swath of response documentation for PJSIPShowEndpoint and PJSIPShowEndpoints AMI commands. It relies heavily on the existing text in the configInfo documentation via xi:include tags to avoid documentation duplication. Review: https://reviewboard.asterisk.org/r/3888/ 2014-08-01 14:48 +0000 [r419888] Mark Michelson * CHANGES, res/res_pjsip/pjsip_options.c: Add ContactStatusDetail to PJSIPShowEndpoint AMI output. Now when running PJSIPShowEndpoint, you will receive a ContactStatusDetail for each bound contact that Asterisk is qualifying. This information includes the URI of the contact, current reachability, and roundtrip time. AFS-91 #close Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3797 2014-07-31 16:19 +0000 [r419851] Jonathan Rose * CHANGES, res/res_pjsip_notify.c: PJSIP: Send Notify AMI and CLI commands can now send to URI instead of endpoint Review: https://reviewboard.asterisk.org/r/3817/ 2014-07-31 11:57 +0000 [r419822-419825] Matthew Jordan * main/rtp_engine.c, /, res/res_hep_rtcp.c (added), CHANGES, channels/chan_pjsip.c, res/res_rtp_asterisk.c: res_hep_rtcp: Add module that sends RTCP information to a Homer Server This patch adds a new module to Asterisk, res_hep_rtcp. The module subscribes to the RTCP topics in Stasis and receives RTCP information back from the message bus. It encodes into HEPv3 packets and sends the information to the res_hep module for transmission. Using this, someone with a Homer server can get live call quality monitoring for all RTP-based channels in their Asterisk 12+ systems. In addition, there were a few bugs in the RTP engine, res_rtp_asterisk, and chan_pjsip that were uncovered by the tests written for the Asterisk Test Suite. This patch fixes the following: 1) chan_pjsip failed to set its channel unique ids on its RTP instance on outbound calls. It now does this in the appropriate location, in the serialized call callback. 2) The rtp_engine was overflowing some values when packed into JSON. Specifically, some longs and unsigned ints can't be be packed into integer values, for obvious reasons. Since libjansson only supports integers, floats, strings, booleans, and objects, we print these values into strings. 3) res_rtp_asterisk had a few problems: (a) it would emit a source IP address of 0.0.0.0 if bound to that IP address. We now use ast_find_ourip to get a better IP address, and properly marshal the result into an ast_strdupa'd string. (b) Reports can be generated with no report bodies. In particular, this occurs when a sender is transmitting information to a receiver (who will send no RTP back to the sender). As such, the sender has no report body for what it received. We now properly handle this case, and the sender will emit SR reports with no body. Likewise, if we receive an RTCP packet with no report body, we will still generate the appropriate events. ASTERISK-24119 #close ........ Merged revisions 419823 from http://svn.asterisk.org/svn/asterisk/branches/12 * funcs/func_jitterbuffer.c, doc/appdocsxml.dtd, main/xmldoc.c: xmldocs: Add support for an tag in the Asterisk XML Documentation This patch adds support for an tag in the XML documentation schema. For CLI help, this doesn't change the formatting too much: - Preceeding white space is removed - Unlike with para elements, new lines are preserved However, having an tag in the XML schema allows for the wiki documentation generation script to surround the documentation with {code} or {noformat} tags, generating much better content for the wiki - and allowing us to put dialplan examples (and other code snippets, if desired) into the documentation for an application/function/AMI command/etc. Review: https://reviewboard.asterisk.org/r/3807/ 2014-07-30 18:32 +0000 [r419806] Kinsey Moore * main/manager.c, res/res_manager_presencestate.c, res/res_manager_devicestate.c, main/pbx.c: manager: Add state list commands This patch adds three new AMI commands: * ExtensionStateList (pbx.c) - list all known extension state hints and their current statuses. Events emitted by the list action are equivalent to the ExtensionStatus events. * PresenceStateList (res_manager_presencestate) - list all known presence state values. Events emitted are generated by the stasis message type, and hence are PresenceStateChange events. * DeviceStateList (res_manager_devicestate) - list all known device state values. Events emitted are generated by the stasis message type, and hence are DeviceStateChange events. Patch-by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3799/ 2014-07-29 19:41 +0000 [r419789] Mark Michelson * main/manager.c: Do not omit the first header of a UserEvent AMI action from the corresponding emitted UserEvent. ASTERISK-24124 #close Reported by Matt Jordan AFS-131 #close Reported by Matt Jordan Patches: userevent.patch uploaded by Matt Jordan (License #6283) 2014-07-29 10:56 +0000 [r419751-419766] Joshua Colp * res/res_pjsip_session.c, /: res_pjsip_session: Fix race condition where redirecting information may not be set. Since the PJSIP INVITE session module is invoked before any session supplements it was possible for it to handle a redirect before the res_pjsip_diversion module interpreted and set redirecting information on the channel. This would cause the redirecting information to get lost. This patch ensures that session supplements are *always* invoked before a redirect occurs by explicitly calling them in the redirect handler. Review: https://reviewboard.asterisk.org/r/3850/ ........ Merged revisions 419764 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_xpidf_body_generator.c, res/res_pjsip_pidf_body_generator.c: res_pjsip_pidf_body_generator / res_pjsip_xpidf_body_generator: Ensure local entity is unquoted. The local entity as provided by PJSIP is quoted within '<' and '>'. As a result placing this value into XML will result in malformed XML being produced. This patch now unquotes the local entity so it can go safely into the XML. Review: https://reviewboard.asterisk.org/r/3851/ ........ Merged revisions 419750 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-28 18:58 +0000 [r419688] Richard Mudgett * apps/app_speech_utils.c, main/channel.c, /, funcs/func_frame_trace.c, main/abstract_jb.c: datastores: Audit ast_channel_datastore_remove usage. Audit of v1.8 usage of ast_channel_datastore_remove() for datastore memory leaks. * Fixed leaks in app_speech_utils and func_frame_trace. * Fixed app_speech_utils not locking the channel when accessing the channel datastore list. Review: https://reviewboard.asterisk.org/r/3859/ Audit of v11 usage of ast_channel_datastore_remove() for datastore memory leaks. * Fixed leak in func_jitterbuffer. (Was not in v12) Review: https://reviewboard.asterisk.org/r/3860/ Audit of v12 usage of ast_channel_datastore_remove() for datastore memory leaks. * Fixed leaks in abstract_jb. * Fixed leak in ast_channel_unsuppress(). Used by ARI mute control and res_mutestream. * Fixed ref leak in ast_channel_suppress(). Used by ARI mute control and res_mutestream. Review: https://reviewboard.asterisk.org/r/3861/ ........ Merged revisions 419684 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 419685 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 419686 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-25 18:09 +0000 [r419612] Joshua Colp * main/loader.c: loader: Fix an infinite loop when printing modules using "module show". When creating the alphabetical sorted list each module is added to a list temporarily. On the second iteration each module already has a pointer to another module, causing stuff to go into a loop. ASTERISK-24123 #close Reported by: Malcolm Davenport 2014-07-25 16:47 +0000 [r419592] Mark Michelson * res/res_ari_sounds.c, res/res_stasis.c, res/res_fax_spandsp.c, res/res_timing_kqueue.c, res/res_odbc.c, res/res_pjsip_transport_websocket.c, apps/app_voicemail.c, res/res_calendar.c, channels/chan_unistim.c, cel/cel_radius.c, channels/chan_multicast_rtp.c, res/res_pjsip_notify.c, res/res_snmp.c, formats/format_sln.c, apps/app_meetme.c, apps/app_dictate.c, codecs/codec_gsm.c, res/res_stasis_snoop.c, res/res_musiconhold.c, res/res_format_attr_h264.c, res/res_http_websocket.c, apps/app_followme.c, res/res_config_sqlite.c, formats/format_siren7.c, cdr/cdr_csv.c, formats/format_ilbc.c, channels/chan_phone.c, apps/app_setcallerid.c, apps/app_osplookup.c, cel/cel_custom.c, apps/app_mp3.c, res/res_agi.c, channels/chan_motif.c, res/res_timing_timerfd.c, apps/app_confbridge.c, res/res_format_attr_silk.c, formats/format_siren14.c, res/res_sorcery_realtime.c, channels/chan_mgcp.c, apps/app_jack.c, codecs/codec_lpc10.c, res/res_pjsip_pidf_body_generator.c, res/res_config_pgsql.c, funcs/func_dialplan.c, apps/app_nbscat.c, cdr/cdr_syslog.c, res/res_pjsip_authenticator_digest.c, apps/app_festival.c, res/res_fax.c, apps/app_waitforsilence.c, res/res_adsi.c, res/res_crypto.c, res/res_ari_applications.c, res/res_hep_pjsip.c, pbx/pbx_lua.c, res/res_pjsip_messaging.c, res/res_pjsip_caller_id.c, channels/chan_console.c, apps/app_getcpeid.c, res/res_stasis_answer.c, channels/chan_oss.c, res/res_pjsip_nat.c, res/res_pjsip_session.c, cdr/cdr_tds.c, res/res_pjsip_header_funcs.c, res/res_parking.c, formats/format_vox.c, res/res_pjsip_rfc3326.c, res/res_ari_endpoints.c, res/res_stun_monitor.c, res/res_pjsip_mwi.c, res/res_stasis_recording.c, res/res_pjsip_xpidf_body_generator.c, apps/app_sms.c, codecs/codec_ulaw.c, channels/chan_nbs.c, apps/app_stack.c, channels/chan_pjsip.c, formats/format_g729.c, cel/cel_pgsql.c, res/res_sorcery_config.c, res/res_ari.c, addons/chan_ooh323.c, cdr/cdr_sqlite3_custom.c, codecs/codec_adpcm.c, res/res_ari_asterisk.c, res/res_calendar_caldav.c, apps/app_image.c, apps/app_ices.c, formats/format_wav_gsm.c, main/cli.c, res/res_format_attr_celt.c, res/res_rtp_multicast.c, channels/chan_dahdi.c, funcs/func_pitchshift.c, res/res_smdi.c, res/res_pjsip_one_touch_record_info.c, pbx/pbx_ael.c, pbx/pbx_realtime.c, apps/app_amd.c, channels/chan_alsa.c, formats/format_h263.c, apps/app_url.c, res/res_pjsip_acl.c, apps/app_externalivr.c, res/res_curl.c, formats/format_gsm.c, res/res_speech.c, cdr/cdr_manager.c, res/res_calendar_exchange.c, codecs/codec_g722.c, res/res_pjsip_multihomed.c, res/res_ari_mailboxes.c, cel/cel_tds.c, res/res_sorcery_memory.c, apps/app_fax.c, codecs/codec_speex.c, res/res_pjsip_sdp_rtp.c, codecs/codec_g726.c, formats/format_ogg_vorbis.c, apps/app_talkdetect.c, res/res_ari_channels.c, res/res_pjsip_exten_state.c, apps/app_speech_utils.c, apps/app_agent_pool.c, apps/app_waitforring.c, res/res_statsd.c, addons/cdr_mysql.c, formats/format_g726.c, res/res_ari_bridges.c, addons/app_mysql.c, res/res_stasis_playback.c, addons/format_mp3.c, res/res_pjsip_endpoint_identifier_ip.c, res/res_phoneprov.c, res/res_pjsip_t38.c, res/res_pjsip_registrar_expire.c, cdr/cdr_pgsql.c, cdr/cdr_radius.c, res/res_chan_stats.c, res/res_format_attr_opus.c, res/res_config_odbc.c, funcs/func_audiohookinherit.c, res/res_pjsip_outbound_registration.c, cel/cel_manager.c, funcs/func_odbc.c, res/res_pjsip_endpoint_identifier_anonymous.c, funcs/func_frame_trace.c, funcs/func_aes.c, cdr/cdr_sqlite.c, apps/app_minivm.c, res/res_pjsip_log_forwarder.c, formats/format_h264.c, res/res_config_ldap.c, apps/app_ivrdemo.c, addons/chan_mobile.c, apps/app_stasis.c, res/res_pjsip_diversion.c, cdr/cdr_custom.c, apps/app_adsiprog.c, res/res_pjsip_dtmf_info.c, res/res_rtp_asterisk.c, res/res_calendar_icalendar.c, res/res_hep.c, channels/chan_sip.c, channels/chan_bridge_media.c, codecs/codec_alaw.c, apps/app_queue.c, res/res_srtp.c, funcs/func_presencestate.c, res/res_timing_pthread.c, res/res_manager_presencestate.c, res/res_corosync.c, apps/app_celgenuserevent.c, cel/cel_sqlite3_custom.c, res/snmp/agent.c, pbx/pbx_dundi.c, formats/format_g723.c, funcs/func_devstate.c, res/res_pjsip_registrar.c, res/res_pjsip_pidf_eyebeam_body_supplement.c, addons/res_config_mysql.c, res/res_pjsip_pidf_digium_body_supplement.c, apps/app_test.c, res/res_timing_dahdi.c, cdr/cdr_adaptive_odbc.c, apps/app_alarmreceiver.c, apps/app_chanisavail.c, res/res_format_attr_h263.c, res/res_pjsip_mwi_body_generator.c, res/res_xmpp.c, res/res_http_post.c, channels/chan_iax2.c, res/res_pjsip_endpoint_identifier_user.c, res/res_pjsip.c, res/res_pktccops.c, res/res_pjsip_send_to_voicemail.c, main/loader.c, cel/cel_odbc.c, res/res_ari_model.c, channels/chan_skinny.c, res/res_pjsip_outbound_authenticator_digest.c, res/res_mwi_external.c, apps/app_skel.c, formats/format_pcm.c, include/asterisk/module.h, res/res_pjsip_path.c, res/res_ari_playbacks.c, res/res_pjsip_pubsub.c, cdr/cdr_odbc.c, funcs/func_periodic_hook.c, res/res_stasis_test.c, formats/format_jpeg.c, res/res_pjsip_refer.c, formats/format_g719.c, res/res_clialiases.c, res/res_config_sqlite3.c, res/res_ari_device_states.c, formats/format_wav.c, apps/app_saycounted.c, apps/app_dahdiras.c, apps/app_morsecode.c, res/res_stasis_mailbox.c, res/res_ael_share.c, res/res_mwi_external_ami.c, res/res_pjsip_logger.c, res/res_stasis_device_state.c, res/res_calendar_ews.c, res/res_monitor.c, apps/app_playback.c, res/res_ari_recordings.c, res/res_manager_devicestate.c, res/res_config_curl.c, channels/chan_misdn.c, funcs/func_curl.c, res/res_ari_events.c, res/res_pjsip_dialog_info_body_generator.c, res/res_sorcery_astdb.c, codecs/codec_dahdi.c, apps/app_zapateller.c, pbx/pbx_config.c: Add module support level to ast_module_info structure. Print it in CLI "module show" . ASTERISK-23919 #close Reported by Malcolm Davenport Review: https://reviewboard.asterisk.org/r/3802 2014-07-25 14:47 +0000 [r419563-419567] Matthew Jordan * CHANGES, res/ari/ari_model_validators.c, rest-api/api-docs/recordings.json, res/ari/ari_model_validators.h, /, res/res_stasis_recording.c: Multiple revisions 419565-419566 ........ r419565 | mjordan | 2014-07-25 09:41:23 -0500 (Fri, 25 Jul 2014) | 21 lines ARI: report duration values in LiveRecording objects This patch adds three new fields to the LiveRecording model: - total_duration: the total length of the live recording - talking_duration: optional. The duration of talking energy that was detected while the recording was made. - silence_duration: optional. The duration of silence that was detected while the recording was made. These values are reported in the RecordingFinished ARI event. When a DSP is enabled on the channel during the recording - which occurs when the recording is created with max_silence_seconds (indicating that the user actually cares about how much silence is in the file), we will report the talking_duration and silence_duration in addition to the total_duration. Review: https://reviewboard.asterisk.org/r/3770/ ASTERISK-24037 #close Reported by: Samuel Galarneau ........ r419566 | mjordan | 2014-07-25 09:46:15 -0500 (Fri, 25 Jul 2014) | 1 line Update CHANGES for r419565 ........ Merged revisions 419565-419566 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/loader.c, res/res_calendar.c: module loader: Unload modules in reverse order of their start order When Asterisk starts a module (calling its load_module function), it re-orders the module list, sorting it alphabetically. Ostensibly, this was done so that the output of 'module show' listed modules in alphabetic order. This had the unfortunate side effect of making modules with complex usage patterns unloadable. A module that has a large number of modules that depend on it is typically abandoned during the unloading process. This results in its memory not being reclaimed during exit. Generally, this isn't harmful - when the process is destroyed, the operating system will reclaim all memory allocated by the process. Prior to Asterisk 12, we also didn't have many modules with complex dependencies. However, with the advent of ARI and PJSIP, this can make make unloading those modules successfully nearly impossible, and thus tracking memory leaks or ref debug leaks a real pain. While this patch is not a complete overhaul of the module loader - such an effort would be beyond the scope of what could be done for Asterisk 13 - this does make some marginal improvements to the loader such that modules like res_pjsip or res_stasis *may* be made properly un-loadable in the future. 1. The linked list of modules has been replaced with a doubly linked list. This allows traversal of the module list to occur backwards. The module shutdown routine now walks the global list backwards when it attempts to unload modules. 2. The alphabetic reorganization of the module list on startup has been removed. Instead, a started module is placed at the end of the module list. 3. The ast_update_module_list function - which is used by the CLI to display the modules - now does the sorting alphabetically itself. It creates its own linked list and inserts the modules into it in alphabetic order. This allows for the intent of the previous code to be maintained. This patch also contains a fix for res_calendar. Without calendar.conf, the calendar modules were improperly bumping the use count of res_calendar, then failing to load themselves. This patch makes it so that we detect whether or not calendaring is enabled before altering the use count. Review: https://reviewboard.asterisk.org/r/3777/ 2014-07-25 10:54 +0000 [r419537-419539] Joshua Colp * apps/app_bridgewait.c, /: app_bridgewait: Remove possibility of race condition between channels leaving/joining. Bridges created by app_bridgewait previously had the "dissolve when empty" flag set. This caused the bridge core to destroy them when the last channel had left. This introduced a race condition where we may have a reference to the bridge but it is not actually joinable when we try to join it. This flag has now been removed and the bridge is guaranteed to be joinable at all times. ASTERISK-23987 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3836/ ........ Merged revisions 419538 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/bridge.c: bridge: Make "bridge destroy" only available in developer mode and add "all" to "bridge kick". The "bridge destroy" CLI command is invasive to bridges and can leave them in an unexpected state for the users of them. Since this command may be useful for developers it is now only available when developer mode is available. To take its place "all" has been added as a valid option to the "bridge kick" CLI command. It will kick all of the channels in the bridge out. ASTERISK-23987 Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3840/ ........ Merged revisions 419536 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-24 22:48 +0000 [r419520] Richard Mudgett * main/bridge.c, main/bridge_basic.c, main/core_unreal.c, UPGRADE.txt, include/asterisk/channel.h, CHANGES, apps/app_followme.c, apps/app_queue.c, main/cel.c, res/parking/parking_bridge_features.c, apps/app_dial.c, main/channel.c, main/dial.c, main/pbx.c: accountcode: Slightly change accountcode propagation. The previous behavior was to simply set the accountcode of an outgoing channel to the accountcode of the channel initiating the call. It was done this way a long time ago to allow the accountcode set on the SIP/100 channel to be propagated to a local channel so the dialplan execution on the Local;2 channel would have the SIP/100 accountcode available. SIP/100 -> Local;1/Local;2 -> SIP/200 Propagating the SIP/100 accountcode to the local channels is very useful. Without any dialplan manipulation, all channels in this call would have the same accountcode. Using dialplan, you can set a different accountcode on the SIP/200 channel either by setting the accountcode on the Local;2 channel or by the Dial application's b(pre-dial), M(macro) or U(gosub) options, or by the FollowMe application's b(pre-dial) option, or by the Queue application's macro or gosub options. Before Asterisk v12, the altered accountcode on SIP/200 will remain until the local channels optimize out and the accountcode would change to the SIP/100 accountcode. Asterisk v1.8 attempted to add peeraccount support but ultimately had to punt on the support. The peeraccount support was rendered useless because of how the CDR code needed to unconditionally force the caller's accountcode onto the peer channel's accountcode. The CEL events were thus intentionally made to always use the channel's accountcode as the peeraccount value. With the arrival of Asterisk v12, the situation has improved somewhat so peeraccount support can be made to work. Using the indicated example, the the accountcode values become as follows when the peeraccount is set on SIP/100 before calling SIP/200: SIP/100 ---> Local;1 ---- Local;2 ---> SIP/200 acct: 100 \/ acct: 200 \/ acct: 100 \/ acct: 200 peer: 200 /\ peer: 100 /\ peer: 200 /\ peer: 100 If a channel already has an accountcode it can only change by the following explicit user actions: 1) A channel originate method that can specify an accountcode to use. 2) The calling channel propagating its non-empty peeraccount or its non-empty accountcode if the peeraccount was empty to the outgoing channel's accountcode before initiating the dial. e.g., Dial and FollowMe. The exception to this propagation method is Queue. Queue will only propagate peeraccounts this way only if the outgoing channel does not have an accountcode. 3) Dialplan using CHANNEL(accountcode). 4) Dialplan using CHANNEL(peeraccount) on the other end of a local channel pair. If a channel does not have an accountcode it can get one from the following places: 1) The channel driver's configuration at channel creation. 2) Explicit user action as already indicated. 3) Entering a basic or stasis-mixing bridge from a peer channel's peeraccount value. You can specify the accountcode for an outgoing channel by setting the CHANNEL(peeraccount) before using the Dial, FollowMe, and Queue applications. Queue adds the wrinkle that it will not overwrite an existing accountcode on the outgoing channel with the calling channels values. Accountcode and peeraccount values propagate to an outgoing channel before dialing. Accountcodes also propagate when channels enter or leave a basic or stasis-mixing bridge. The peeraccount value only makes sense for mixing bridges with two channels; it is meaningless otherwise. * Made peeraccount functional by changing accountcode propagation as described above. * Fixed CEL extracting the wrong ie value for the peeraccount. This was done intentionally in Asterisk v1.8 when that version had to punt on peeraccount. * Fixed a few places dealing with accountcodes that were reading from channels without the lock held. AFS-65 #close Review: https://reviewboard.asterisk.org/r/3601/ 2014-07-24 21:01 +0000 [r419504] Michael L. Young * main/db.c, include/asterisk/astdb.h: core/db: Revert Patch Added In Attempt To Improve I/O Performance Reverting the patch since it was causing a regression and after fixing the regression, there were no performance gains. At least based on my method for measurement. ASTERISK-24050 Review: https://reviewboard.asterisk.org/r/3841/ 2014-07-24 17:50 +0000 [r419438-419439] Corey Farrell * include/asterisk/astobj.h: Deprecate astobj.h This flags astobj.h as deprecated, warns people to use astobj2.h instead. Only netsock.c (also deprecated) still uses astobj.h. ASTERISK-24069 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3818/ * channels/sip/include/sip.h, channels/chan_sip.c: chan_sip: complete upgrade to ao2 This change upgrades sip_registry and sip_subscription_mwi to astobj2. ASTERISK-24067 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3759/ 2014-07-24 16:52 +0000 [r419377] Jason Parker * addons/chan_ooh323.c, /: Don't cause Asterisk to exit if ooh323.conf not found. (closes issue ASTERISK-23814) ........ Merged revisions 419374 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 419375 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 419376 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-24 15:20 +0000 [r419358] Matthew Jordan * main/devicestate.c, channels/chan_pjsip.c: device state: Update the core to report ONHOLD if a channel is on hold In Asterisk, it is possible for a device to have a status of ONHOLD. This is not typically an easy thing to determine, as a channel being on hold is not a direct channel state. Typically, this has to be calculated outside of the core independently in channel drivers, notably, chan_sip and chan_pjsip. Both of these channel drivers already have to calculate device state in a fashion more complex than the core can handle, as they aggregate all state of all channels associated with a peer/endpoint; they also independently track whether or not one of those channels is currently on hold and mark the device state appropriately. In 12+, we now have the ability to report an AST_DEVICE_ONHOLD state for all channels that defer their device state to the core. This is due to channel hold state actually now being tracked on the channel itself. If a channel driver defers its device state to the core (which many, such as DAHDI, IAX2, and others do in most situations), the device state core already goes out to get a channel associated with the device. As such, it can now also factor the channel hold state in its calculation. This patch adds this logic to the device state core. It also uses an existing mapping between device state and channel state to handle more channel states. chan_pjsip has been updated slightly as well to make use of this (as it was, for some reason, reporting a channel state of BUSY as a device state of INUSE, which feels slightly wrong). Review: https://reviewboard.asterisk.org/r/3771/ ASTERISK-24038 #close 2014-07-24 13:00 +0000 [r419342] Kinsey Moore * include/asterisk/manager.h, doc/appdocsxml.dtd, main/xmldoc.c, main/manager_bridges.c, main/manager.c, include/asterisk/xmldoc.h, main/config_options.c: AMI: Allow for command response documentation Allow for responses to AMI actions/commands to be documented properly in XML and displayed via the CLI. Response events are documented exactly as standard AMI events are documented. Review: https://reviewboard.asterisk.org/r/3812/ 2014-07-23 16:46 +0000 [r419319] Matthew Jordan * main/endpoints.c, tests/test_stasis_endpoints.c, /: endpoints: Fix failing unit tests from r419196 This patch does two things: (1) It updates the unit tests to expect additional stasis messages. More messages are now sent to the endpoint topic, due to forwarding all channel messages and the forwarding relationship set up between endpoints themselves. (2) Remove the technology forwarding subscription during ast_endpoint_shutdown. This prevents an improper double shutdown of an endpoint from occurring. ........ Merged revisions 419318 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-23 14:00 +0000 [r419286] Scott Griepentrog * apps/app_voicemail.c, /: app_voicemail: use a consistent generator string When updating voicemail.conf when a user changes their pin, change the generator string to be the same as the module name when reading so that the same config_hook will be called. Review: https://reviewboard.asterisk.org/r/3837/ ........ Merged revisions 419284 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 419285 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-23 01:28 +0000 [r419268] Corey Farrell * main/manager.c, res/res_fax.c: res_fax: unregister manager actions on unload * Unregister manager actions FAXSessions, FAXSession and FAXStats at unload. * Update ast_manager_register2 use ao2_t_alloc tagged with the action name. ASTERISK-24058 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3831/ 2014-07-22 20:22 +0000 [r419222-419252] Michael L. Young * CHANGES, main/bridge_channel.c: core/bridge_channel: Substitute Variables In Features Application Map Say you wanted to include variables in an application map and have those variables substituted and passed along to the application being executed; currently this does not happen. This patch adds this ability to pass channel variable values to an application before being executed. ASTERISK-22608 #close Reported by: Michael L. Young patches: features_substitute_arguments_v2.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3819/ * CHANGES, apps/app_mixmonitor.c: apps/app_mixmonitor: Add Options To Play Beep At Start Or Stop We have a new periodic beep feature but sometimes a user needs some sort of feedback, without the need to have a periodic beep during the recording, to let them know that MixMonitor started recording or ended the recording. The use case where this patch is being used is when using Dynamic Features to start and end MixMonitor. This patch adds an option to play a beep when MixMonitor starts and an option to play a beep when MixMonitor ends. ASTERISK-24051 #close Reported by: Michael L. Young patches: mixmonitor-play-beep-start-stop.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3820/ * main/db.c, include/asterisk/astdb.h: core/db: Improve I/O When Updating Rows When updating a row, we are currently doing an INSERT OR REPLACE INTO. The downside to this is that the row is deleted if it exists and then a new row is inserted. So, we are hitting the disk twice. One for the deletion and one for the insertion. This patch changes this statement to an INSERT INTO and if the insert fails because a row with that key exists, we will IGNORE the failure. Then we will attempt to perform an UPDATE on the existing row if that row wasn't just INSERTed. ASTERISK-24050 #close Reported by: Michael L. Young patches: astdb-insert-update-io-help_trunk_v2.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3815/ 2014-07-22 17:10 +0000 [r419206] Richard Mudgett * codecs/codec_speex.c: codec_speex: Fix trashing normal static frame for AST_FRAME_CNG. Made use a local static frame to generate the AST_FRAME_CNG frame when silence starts. I don't think the handling of the AST_FRAME_CNG has ever really worked because there doesn't seem to be any consumers of it. Review: https://reviewboard.asterisk.org/r/3813/ 2014-07-22 16:20 +0000 [r419203] Matthew Jordan * include/asterisk/endpoints.h, rest-api/api-docs/applications.json, include/asterisk/xmpp.h, main/channel_internal_api.c, channels/chan_motif.c, include/asterisk/channel.h, res/ari/resource_applications.h, res/res_xmpp.c, channels/chan_iax2.c, main/endpoints.c, channels/chan_pjsip.c, main/channel.c, res/ari/resource_endpoints.c, /, channels/chan_sip.c: ARI: Fix endpoint/channel subscription issues; allow for subscriptions to tech This patch serves two purposes: (1) It fixes some bugs with endpoint subscriptions not reporting all of the channel events (2) It serves as the preliminary work needed for ASTERISK-23692, which allows for sending/receiving arbitrary out of call text messages through ARI in a technology agnostic fashion. The messaging functionality described on ASTERISK-23692 requires two things: (1) The ability to send/receive messages associated with an endpoint. This is relatively straight forwards with the endpoint core in Asterisk now. (2) The ability to send/receive messages associated with a technology and an arbitrary technology defined URI. This is less straight forward, as endpoints are formed from a tech + resource pair. We don't have a mechanism to note that a technology that *may* have endpoints exists. This patch provides such a mechanism, and fixes a few bugs along the way. The first major bug this patch fixes is the forwarding of channel messages to their respective endpoints. Prior to this patch, there were two problems: (1) Channel caching messages weren't forwarded. Thus, the endpoints missed most of the interesting bits (such as channel creation, destruction, state changes, etc.) (2) Channels weren't associated with their endpoint until after creation. This resulted in endpoints missing the channel creation message, which limited the usefulness of the subscription in the first place (a major use case being 'tell me when this endpoint has a channel'). Unfortunately, this meant another parameter to ast_channel_alloc. Since not all channel technologies support an ast_endpoint, this patch makes such a call optional and opts for a new function, ast_channel_alloc_with_endpoint. When endpoints are created, they will implicitly create a technology endpoint for their technology (if one does not already exist). A technology endpoint is special in that it has no state, cannot have channels created for it, cannot be created explicitly, and cannot be destroyed except on shutdown. It does, however, have all messages from other endpoints in its technology forwarded to it. Combined with the bug fixes, we now have Stasis messages being properly forwarded. Consider the following scenario: two PJSIP endpoints (foo and bar), where bar has a single channel associated with it and foo has two channels associated with it. The messages would be forwarded as follows: channel PJSIP/foo-1 -- \ --> endpoint PJSIP/foo -- / \ channel PJSIP/foo-2 -- \ ---- > endpoint PJSIP / channel PJSIP/bar-1 -----> endpoint PJSIP/bar -- ARI, through the applications resource, can: - subscribe to endpoint:PJSIP/foo and get notifications for channels PJSIP/foo-1,PJSIP/foo-2 and endpoint PJSIP/foo - subscribe to endpoint:PJSIP/bar and get notifications for channels PJSIP/bar-1 and endpoint PJSIP/bar - subscribe to endpoint:PJSIP and get notifications for channels PJSIP/foo-1,PJSIP/foo-2,PJSIP/bar-1 and endpoints PJSIP/foo,PJSIP/bar Note that since endpoint PJSIP never changes, it never has events itself. It merely provides an aggregation point for all other endpoints in its technology (which in turn aggregate all channel messages associated with that endpoint). This patch also adds endpoints to res_xmpp and chan_motif, because the actual messaging work will need it (messaging without XMPP is just sad). Review: https://reviewboard.asterisk.org/r/3760/ ASTERISK-23692 ........ Merged revisions 419196 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-22 14:36 +0000 [r419180] Joshua Colp * channels/chan_iax2.c: chan_iax2: Restore previous behavior of iax2_best_codec. The iax2_best_codec function was changed to convert the formats into a format compatibilities structure and grab the first format from it. The resulting order differs from the previous order of iax2_best_codec which causes unexpected formats to get chosen (such as g723). This commit brings back the old behavior of iax2_best_codec by having a specified preference list. Review: https://reviewboard.asterisk.org/r/3835/ 2014-07-22 14:22 +0000 [r419110-419175] Kinsey Moore * addons/ooh323c/src/printHandler.c, tests/test_sorcery_realtime.c, tests/test_json.c, addons/ooh323c/src/ooq931.c, tests/test_astobj2_thrash.c, addons/chan_ooh323.c, /, tests/test_optional_api.c, tests/test_abstract_jb.c, apps/app_meetme.c, tests/test_logger.c, tests/test_event.c, tests/test_hashtab_thrash.c, res/res_mwi_external_ami.c, tests/test_sorcery.c, res/res_corosync.c, tests/test_voicemail_api.c, tests/test_aoc.c, tests/test_astobj2.c, tests/test_config.c: Fix more dev-mode build issues ........ Merged revisions 419129 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 419162 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 419163 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/dial.c: Dial API: Prevent crash on NULL cap This prevents a crash in the Dial API triggered by use of the Page() application where a format capability struct was used before checking whether it was NULL. ASTERISK-24074 #close * channels/chan_skinny.c, tests/test_core_format.c: Fix build in dev-mode 2014-07-21 16:26 +0000 [r419109] Jonathan Rose * channels/chan_iax2.c: chan_iax2: Restore codec choice behavior from media formats branch After merging the media formats branch, chan_iax2 was discarding codec preferences for the purpose of choosing which codec a channel would use once a call started. This patch restores the Asterisk 1.8-12 codec choice behaviors. ASTERISK-23958 #close Review: https://reviewboard.asterisk.org/r/3800/ 2014-07-21 16:09 +0000 [r419093] Joshua Colp * channels/chan_iax2.c: chan_iax2: Only send mini frames if the underlying format has not changed, not if it has. ASTERISK-24072 #close Reported by: Matt Jordan 2014-07-21 14:49 +0000 [r419077] Sean Bright * configure, configure.ac: Fix build when pjproject is installed in a non-standard location. When configuring Asterisk to build against a version of pjproject installed in a non-standard location, the checks for "PJSIP Transaction Group Lock Support" and "PJSIP Media Stream Replacement Support" fail. This is because these secondary checks are not taking the CFLAGS and LIBS returned by the pkg-config check into account. Review: https://reviewboard.asterisk.org/r/3830 2014-07-21 08:41 +0000 [r419060] Corey Farrell * channels/sig_analog.c, res/res_smdi.c, channels/chan_motif.c, include/asterisk/smdi.h, apps/app_voicemail.c, channels/chan_dahdi.c: res_smdi: convert to astobj2 Remove functions: ast_smdi_interface_unref ast_smdi_md_message_putback ast_smdi_mwi_message_putback ast_smdi_md_message destructor ast_smdi_mwi_message destructor Includes for astobj.h are removed everywhere it's possible. ASTERISK-24066 #close Review: https://reviewboard.asterisk.org/r/3758/ 2014-07-20 22:06 +0000 [r419044] Matthew Jordan * apps/app_confbridge.c, res/ari/resource_channels.c, include/asterisk/rtp_engine.h, include/asterisk/slinfactory.h, res/res_calendar.c, codecs/codec_g722.c, include/asterisk/res_pjsip_session.h, main/frame.c, codecs/ex_lpc10.h, apps/app_dictate.c, res/res_fax.c, apps/app_echo.c, include/asterisk/slin.h, codecs/codec_g726.c, formats/format_ogg_vorbis.c, codecs/codec_gsm.c, codecs/ex_alaw.h, formats/format_wav_gsm.c, channels/iax2/provision.c, channels/chan_iax2.c, res/res_format_attr_h264.c, main/data.c, main/manager.c, include/asterisk/audiohook.h, formats/format_pcm.c, main/config_options.c, res/res_format_attr_silk.c, main/bridge_channel.c, res/res_speech.c, channels/chan_pjsip.c, res/res_clioriginate.c, formats/format_g729.c, channels/chan_unistim.c, res/res_rtp_asterisk.c, include/asterisk/smoother.h (added), main/rtp_engine.c, addons/format_mp3.c, formats/format_wav.c, apps/confbridge/conf_chan_record.c, include/asterisk/speech.h, codecs/ex_adpcm.h, channels/iax2/codec_pref.c (added), include/asterisk/codec.h (added), formats/format_siren7.c, include/asterisk/file.h, channels/chan_dahdi.c, include/asterisk/image.h, funcs/func_channel.c, main/abstract_jb.c, formats/format_h263.c, codecs/codec_dahdi.c, main/dsp.c, apps/app_voicemail.c, apps/app_jack.c, funcs/func_talkdetect.c, channels/chan_vpb.cc, channels/chan_sip.c, formats/format_sln.c, tests/test_abstract_jb.c, codecs/codec_alaw.c, UPGRADE.txt, main/smoother.c (added), codecs/ex_speex.h, channels/chan_console.c, apps/app_talkdetect.c, main/format_pref.c (removed), main/indications.c, include/asterisk/format_cap.h, main/media_index.c, apps/app_agent_pool.c, res/res_pjsip_session.c, main/cli.c, res/res_format_attr_celt.c, channels/chan_skinny.c, tests/test_core_format.c (added), funcs/func_frame_trace.c, res/res_pjsip/pjsip_configuration.c, main/file.c, include/asterisk/frame.h, formats/format_g726.c, apps/app_mixmonitor.c, channels/chan_mgcp.c, main/sorcery.c, codecs/ex_ilbc.h, codecs/codec_lpc10.c, tests/test_format_cache.c (added), apps/app_meetme.c, main/translate.c, apps/app_originate.c, res/parking/parking_applications.c, apps/app_ices.c, channels/iax2/parser.c, res/res_rtp_multicast.c, pbx/pbx_spool.c, funcs/func_pitchshift.c, formats/format_vox.c, main/format_cap.c, tests/test_cel.c, include/asterisk/format.h, formats/format_h264.c, apps/app_chanspy.c, apps/app_nbscat.c, addons/chan_ooh323.c, bridges/bridge_holding.c, channels/iax2/include/codec_pref.h (added), codecs/codec_adpcm.c, apps/app_waitforsilence.c, res/res_pjsip_sdp_rtp.c, addons/chan_ooh323.h, bridges/bridge_simple.c, apps/app_alarmreceiver.c, bridges/bridge_softmix.c, res/res_stasis_snoop.c, main/sounds_index.c, main/core_local.c, main/codec_builtin.c (added), include/asterisk/format_cache.h (added), apps/app_speech_utils.c, res/res_format_attr_opus.c, include/asterisk/abstract_jb.h, main/channel.c, include/asterisk/format_compatibility.h (added), apps/app_mp3.c, tests/test_voicemail_api.c, channels/chan_alsa.c, main/app.c, formats/format_g723.c, codecs/codec_ilbc.c, tests/test_config.c, formats/format_gsm.c, apps/app_milliwatt.c, codecs/ex_ulaw.h, main/asterisk.c, include/asterisk/res_pjsip.h, main/format.c, main/ccss.c, main/bridge.c, codecs/codec_speex.c, include/asterisk/format_pref.h (removed), apps/app_record.c, main/slinfactory.c, res/res_adsi.c, main/core_unreal.c, res/ari/resource_bridges.c, include/asterisk/callerid.h, channels/pjsip/dialplan_functions.c, main/dial.c, channels/dahdi/bridge_native_dahdi.c, main/format_cache.c (added), include/asterisk/mod_format.h, apps/app_sms.c, codecs/codec_resample.c, main/format_compatibility.c (added), main/audiohook.c, formats/format_jpeg.c, res/res_stasis.c, formats/format_g719.c, include/asterisk/translate.h, funcs/func_speex.c, codecs/codec_a_mu.c, channels/iax2/format_compatibility.c (added), apps/app_festival.c, main/channel_internal_api.c, tests/test_format_api.c (removed), codecs/ex_g722.h, main/utils.c, res/ari/resource_sounds.c, res/res_format_attr_h263.c, codecs/ex_g726.h, include/asterisk/_private.h, channels/chan_oss.c, channels/chan_misdn.c, main/codec.c (added), main/callerid.c, addons/ooh323cDriver.c, apps/app_amd.c, codecs/codec_ulaw.c, main/image.c, channels/chan_nbs.c, bridges/bridge_native_rtp.c, channels/iax2/include/format_compatibility.h (added), formats/format_siren14.c, res/res_fax_spandsp.c, addons/chan_mobile.c, addons/ooh323cDriver.h, channels/sip/include/sip.h, tests/test_format_cap.c (added), channels/chan_multicast_rtp.c, include/asterisk/vector.h, channels/chan_bridge_media.c, apps/app_fax.c, main/bridge_basic.c, apps/app_test.c, include/asterisk/channel.h, include/asterisk/data.h, tests/test_core_codec.c (added), res/res_musiconhold.c, codecs/ex_gsm.h, formats/format_ilbc.c, include/asterisk/config_options.h, channels/chan_phone.c, include/asterisk/bridge_channel.h, apps/app_dumpchan.c, channels/chan_motif.c, res/res_agi.c: media formats: re-architect handling of media for performance improvements In the old times media formats were represented using a bit field. This was fast but had a few limitations. 1. Asterisk was limited in how many formats it could handle. 2. Formats, being a bit field, could not include any attribute information. A format was strictly its type, e.g., "this is ulaw". This was changed in Asterisk 10 (see https://wiki.asterisk.org/wiki/display/AST/Media+Architecture+Proposal for notes on that work) which led to the creation of the ast_format structure. This structure allowed Asterisk to handle attributes and bundle information with a format. Additionally, ast_format_cap was created to act as a container for multiple formats that, together, formed the capability of some entity. Another mechanism was added to allow logic to be registered which performed format attribute negotiation. Everywhere throughout the codebase Asterisk was changed to use this strategy. Unfortunately, in software, there is no free lunch. These new capabilities came at a cost. Performance analysis and profiling showed that we spend an inordinate amount of time comparing, copying, and generally manipulating formats and their related structures. Basic prototyping has shown that a reasonably large performance improvement could be made in this area. This patch is the result of that project, which overhauled the media format architecture and its usage in Asterisk to improve performance. Generally, the new philosophy for handling formats is as follows: * The ast_format structure is reference counted. This removed a large amount of the memory allocations and copying that was done in prior versions. * In order to prevent race conditions while keeping things performant, the ast_format structure is immutable by convention and lock-free. Violate this tenet at your peril! * Because formats are reference counted, codecs are also reference counted. The Asterisk core generally provides built-in codecs and caches the ast_format structures created to represent them. Generally, to prevent inordinate amounts of module reference bumping, codecs and formats can be added at run-time but cannot be removed. * All compatibility with the bit field representation of codecs/formats has been moved to a compatibility API. The primary user of this representation is chan_iax2, which must continue to maintain its bit-field usage of formats for interoperability concerns. * When a format is negotiated with attributes, or when a format cannot be represented by one of the cached formats, a new format object is created or cloned from an existing format. That format may have the same codec underlying it, but is a different format than a version of the format with different attributes or without attributes. * While formats are reference counted objects, the reference count maintained on the format should be manipulated with care. Formats are generally cached and will persist for the lifetime of Asterisk and do not explicitly need to have their lifetime modified. An exception to this is when the user of a format does not know where the format came from *and* the user may outlive the provider of the format. This occurs, for example, when a format is read from a channel: the channel may have a format with attributes (hence, non-cached) and the user of the format may last longer than the channel (if the reference to the channel is released prior to the format's reference). For more information on this work, see the API design notes: https://wiki.asterisk.org/wiki/display/AST/Media+Format+Rewrite Finally, this work was the culmination of a large number of developer's efforts. Extra thanks goes to Corey Farrell, who took on a large amount of the work in the Asterisk core, chan_sip, and was an invaluable resource in peer reviews throughout this project. There were a substantial number of patches contributed during this work; the following issues/patch names simply reflect some of the work (and will cause the release scripts to give attribution to the individuals who work on them). Reviews: https://reviewboard.asterisk.org/r/3814 https://reviewboard.asterisk.org/r/3808 https://reviewboard.asterisk.org/r/3805 https://reviewboard.asterisk.org/r/3803 https://reviewboard.asterisk.org/r/3801 https://reviewboard.asterisk.org/r/3798 https://reviewboard.asterisk.org/r/3800 https://reviewboard.asterisk.org/r/3794 https://reviewboard.asterisk.org/r/3793 https://reviewboard.asterisk.org/r/3792 https://reviewboard.asterisk.org/r/3791 https://reviewboard.asterisk.org/r/3790 https://reviewboard.asterisk.org/r/3789 https://reviewboard.asterisk.org/r/3788 https://reviewboard.asterisk.org/r/3787 https://reviewboard.asterisk.org/r/3786 https://reviewboard.asterisk.org/r/3784 https://reviewboard.asterisk.org/r/3783 https://reviewboard.asterisk.org/r/3778 https://reviewboard.asterisk.org/r/3774 https://reviewboard.asterisk.org/r/3775 https://reviewboard.asterisk.org/r/3772 https://reviewboard.asterisk.org/r/3761 https://reviewboard.asterisk.org/r/3754 https://reviewboard.asterisk.org/r/3753 https://reviewboard.asterisk.org/r/3751 https://reviewboard.asterisk.org/r/3750 https://reviewboard.asterisk.org/r/3748 https://reviewboard.asterisk.org/r/3747 https://reviewboard.asterisk.org/r/3746 https://reviewboard.asterisk.org/r/3742 https://reviewboard.asterisk.org/r/3740 https://reviewboard.asterisk.org/r/3739 https://reviewboard.asterisk.org/r/3738 https://reviewboard.asterisk.org/r/3737 https://reviewboard.asterisk.org/r/3736 https://reviewboard.asterisk.org/r/3734 https://reviewboard.asterisk.org/r/3722 https://reviewboard.asterisk.org/r/3713 https://reviewboard.asterisk.org/r/3703 https://reviewboard.asterisk.org/r/3689 https://reviewboard.asterisk.org/r/3687 https://reviewboard.asterisk.org/r/3674 https://reviewboard.asterisk.org/r/3671 https://reviewboard.asterisk.org/r/3667 https://reviewboard.asterisk.org/r/3665 https://reviewboard.asterisk.org/r/3625 https://reviewboard.asterisk.org/r/3602 https://reviewboard.asterisk.org/r/3519 https://reviewboard.asterisk.org/r/3518 https://reviewboard.asterisk.org/r/3516 https://reviewboard.asterisk.org/r/3515 https://reviewboard.asterisk.org/r/3512 https://reviewboard.asterisk.org/r/3506 https://reviewboard.asterisk.org/r/3413 https://reviewboard.asterisk.org/r/3410 https://reviewboard.asterisk.org/r/3387 https://reviewboard.asterisk.org/r/3388 https://reviewboard.asterisk.org/r/3389 https://reviewboard.asterisk.org/r/3390 https://reviewboard.asterisk.org/r/3321 https://reviewboard.asterisk.org/r/3320 https://reviewboard.asterisk.org/r/3319 https://reviewboard.asterisk.org/r/3318 https://reviewboard.asterisk.org/r/3266 https://reviewboard.asterisk.org/r/3265 https://reviewboard.asterisk.org/r/3234 https://reviewboard.asterisk.org/r/3178 ASTERISK-23114 #close Reported by: mjordan media_formats_translation_core.diff uploaded by kharwell (License 6464) rb3506.diff uploaded by mjordan (License 6283) media_format_app_file.diff uploaded by kharwell (License 6464) misc-2.diff uploaded by file (License 5000) chan_mild-3.diff uploaded by file (License 5000) chan_obscure.diff uploaded by file (License 5000) jingle.diff uploaded by file (License 5000) funcs.diff uploaded by file (License 5000) formats.diff uploaded by file (License 5000) core.diff uploaded by file (License 5000) bridges.diff uploaded by file (License 5000) mf-codecs-2.diff uploaded by file (License 5000) mf-app_fax.diff uploaded by file (License 5000) mf-apps-3.diff uploaded by file (License 5000) media-formats-3.diff uploaded by file (License 5000) ASTERISK-23715 rb3713.patch uploaded by coreyfarrell (License 5909) rb3689.patch uploaded by mjordan (License 6283) ASTERISK-23957 rb3722.patch uploaded by mjordan (License 6283) mf-attributes-3.diff uploaded by file (License 5000) ASTERISK-23958 Tested by: jrose rb3822.patch uploaded by coreyfarrell (License 5909) rb3800.patch uploaded by jrose (License 6182) chan_sip.diff uploaded by mjordan (License 6283) rb3747.patch uploaded by jrose (License 6182) ASTERISK-23959 #close Tested by: sgriepentrog, mjordan, coreyfarrell sip_cleanup.diff uploaded by opticron (License 6273) chan_sip_caps.diff uploaded by mjordan (License 6283) rb3751.patch uploaded by coreyfarrell (License 5909) chan_sip-3.diff uploaded by file (License 5000) ASTERISK-23960 #close Tested by: opticron direct_media.diff uploaded by opticron (License 6273) pjsip-direct-media.diff uploaded by file (License 5000) format_cap_remove.diff uploaded by opticron (License 6273) media_format_fixes.diff uploaded by opticron (License 6273) chan_pjsip-2.diff uploaded by file (License 5000) ASTERISK-23966 #close Tested by: rmudgett rb3803.patch uploaded by rmudgetti (License 5621) chan_dahdi.diff uploaded by file (License 5000) ASTERISK-24064 #close Tested by: coreyfarrell, mjordan, opticron, file, rmudgett, sgriepentrog, jrose rb3814.patch uploaded by rmudgett (License 5621) moh_cleanup.diff uploaded by opticron (License 6273) bridge_leak.diff uploaded by opticron (License 6273) translate.diff uploaded by file (License 5000) rb3795.patch uploaded by rmudgett (License 5621) tls_fix.diff uploaded by mjordan (License 6283) fax-mf-fix-2.diff uploaded by file (License 5000) rtp_transfer_stuff uploaded by mjordan (License 6283) rb3787.patch uploaded by rmudgett (License 5621) media-formats-explicit-translate-format-3.diff uploaded by file (License 5000) format_cache_case_fix.diff uploaded by opticron (License 6273) rb3774.patch uploaded by rmudgett (License 5621) rb3775.patch uploaded by rmudgett (License 5621) rtp_engine_fix.diff uploaded by opticron (License 6273) rtp_crash_fix.diff uploaded by opticron (License 6273) rb3753.patch uploaded by mjordan (License 6283) rb3750.patch uploaded by mjordan (License 6283) rb3748.patch uploaded by rmudgett (License 5621) media_format_fixes.diff uploaded by opticron (License 6273) rb3740.patch uploaded by mjordan (License 6283) rb3739.patch uploaded by mjordan (License 6283) rb3734.patch uploaded by mjordan (License 6283) rb3689.patch uploaded by mjordan (License 6283) rb3674.patch uploaded by coreyfarrell (License 5909) rb3671.patch uploaded by coreyfarrell (License 5909) rb3667.patch uploaded by coreyfarrell (License 5909) rb3665.patch uploaded by mjordan (License 6283) rb3625.patch uploaded by coreyfarrell (License 5909) rb3602.patch uploaded by coreyfarrell (License 5909) format_compatibility-2.diff uploaded by file (License 5000) core.diff uploaded by file (License 5000) 2014-07-18 21:48 +0000 [r419022] Matthew Jordan * rest-api/api-docs/recordings.json, res/ari/resource_recordings.c, res/stasis_recording/stored.c, res/res_ari_recordings.c, /, include/asterisk/stasis_app_recording.h, res/ari/resource_recordings.h, CHANGES: ari: Add a copy operation for stored recordings This patch adds a new operation for stored recordings, copy. It takes an existing stored recording and makes a copy of it in the same directory or a relative directory under the stored recording directory. /ari/recordings/stored/{recordingName}/copy?destinationRecordingName={copy_name} This is particularly useful for voicemail-esque applications, which may need to copy or move recordings around a directory structure. Review: https://reviewboard.asterisk.org/r/3768/ ASTERISK-24036 #close Reported by: Sam Galarneau Tested by: Sam Galarneau ........ Merged revisions 419021 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-18 21:25 +0000 [r418997-419020] Corey Farrell * main/stasis_message_router.c, /: stasis: fix call to ao2_t_alloc for stasis_message_router_create This fixes a build failure introduced by r3821. struct stasis_topic is opaque, so topic->name is unavailable. Switch to using stasis_topic_name(). ........ Merged revisions 419019 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis.c, main/stasis_cache_pattern.c, main/stasis_message.c, main/stasis_message_router.c, /: stasis: use ao2_t_alloc for certain object allocators Add tags to stasis objects using the name. This makes it easier to track the source of certain stasis ref leaks. Review: https://reviewboard.asterisk.org/r/3821/ ........ Merged revisions 418996 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-18 19:07 +0000 [r418980] Kinsey Moore * res/res_fax_spandsp.c: Fix build in dev-mode 2014-07-18 17:55 +0000 [r418961-418963] Scott Griepentrog * res/res_pjsip_pubsub.c, main/astobj2.c, include/asterisk/astobj2.h, main/logger.c, main/utils.c: astobj2: assert on invalid ref and backtrace cleanup If a reference count goes negative, instead of just logging that fact, be more helpful with a backtrace and an assert that will DO_CRASH. This patch also removes the duplicate ao2_bt() function and cleans up extraneous usage of the ast_log_backtrace() call. Review: https://reviewboard.asterisk.org/r/3765/ * /, channels/chan_sip.c: media formats: fix ref leak of peer for mwi subscription Holding a reference to the peer during mwi subscriptions resulted in a circular reference because the final event message would not be sent until destruction of the peer. Instead, pass the name of the peer to the event callback so that it can fail gracefully after the peer has gone. ASTERISK-23959 Review: https://reviewboard.asterisk.org/r/3754/ ........ Merged revisions 418636 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/features_config.c: feature_config: insure featuregroups and applicationmaps are initialized If the features.conf is missing, the cfg->featurgroups and cfg->applicationmaps is not initialized, resulting in assert on ao2_find of a null container. This patch changes the initialization call and adds asserts for a safeguard. Review: https://reviewboard.asterisk.org/r/3809/ ........ Merged revisions 418886 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-18 16:47 +0000 [r418938] Richard Mudgett * funcs/func_audiohookinherit.c, /: func_audiohookinherit.c: Fixup some XML documentation wording. ........ Merged revisions 418937 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-18 16:28 +0000 [r418911-418936] Jonathan Rose * main/channel.c, funcs/func_audiohookinherit.c, /, include/asterisk/audiohook.h, main/framehook.c, res/res_fax.c, main/bridge_basic.c, include/asterisk/res_fax.h, bridges/bridge_native_rtp.c, main/audiohook.c, CHANGES, include/asterisk/framehook.h, res/res_pjsip_refer.c: Channels: Masquerades to automatically move frame/audio hooks Whenever possible, audiohooks and framehooks will now be copied over to the channel that the masquerading channel gets cloned into. This should occur for all audiohooks and most framehooks. As a result, in Asterisk 12.5 and up, the AUDIOHOOK_INHERIT function is now deprecated and its behavior is essentially the new default for all audiohooks, plus some additional audiohooks/framehooks. Review: https://reviewboard.asterisk.org/r/3721/ ........ Merged revisions 418914 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_fax.c, include/asterisk/res_fax.h, CHANGES, res/res_fax.exports.in, res/res_fax_spandsp.c: res_fax: Provide AMI equivalents for fax CLI commands Specifically the following equivalents were created: fax show session -> FAXSession fax show sessions -> FAXSessions fax show stats -> FAXStats Review: https://reviewboard.asterisk.org/r/3666/ 2014-07-18 00:11 +0000 [r418893-418895] Sean Bright * config.sub, menuselect/config.guess, menuselect/config.sub, config.guess: Update config.guess and config.sub * autoconf/ast_ext_tool_check.m4: Add missing file from previous commit. * menuselect/aclocal.m4, menuselect/configure, menuselect/acinclude.m4 (removed), menuselect/bootstrap.sh, menuselect/autoconfig.h.in: Import Asterisk's autoconf magic instead of using our own. 2014-07-17 21:17 +0000 [r418832-418870] Matthew Jordan * configs/samples/acl.conf.sample (added), configs/samples/extensions.conf.sample (added), configs/res_parking.conf.sample (removed), configs/samples/cel_sqlite3_custom.conf.sample (added), configs/cdr_sqlite3_custom.conf.sample (removed), configs/modules.conf.sample (removed), configs/samples/cli_aliases.conf.sample (added), configs/meetme.conf.sample (removed), configs/cdr_pgsql.conf.sample (removed), configs/samples/extensions.ael.sample (added), configs/samples/cdr_adaptive_odbc.conf.sample (added), configs/samples/motif.conf.sample (added), configs/samples/extensions_minivm.conf.sample (added), configs/samples/res_curl.conf.sample (added), configs/res_config_sqlite3.conf.sample (removed), configs/mgcp.conf.sample (removed), configs/dsp.conf.sample (removed), configs/udptl.conf.sample (removed), configs/sip.conf.sample (removed), configs/dbsep.conf.sample (removed), configs/queuerules.conf.sample (removed), configs/samples/cdr_mysql.conf.sample (added), configs/confbridge.conf.sample (removed), configs/samples/cdr_odbc.conf.sample (added), configs/samples/minivm.conf.sample (added), configs/enum.conf.sample (removed), configs/samples/codecs.conf.sample (added), configs/samples/chan_dahdi.conf.sample (added), configs/samples/cdr_custom.conf.sample (added), configs/samples/res_config_mysql.conf.sample (added), configs/samples/dundi.conf.sample (added), configs/samples/oss.conf.sample (added), configs/samples/app_mysql.conf.sample (added), configs/samples/queues.conf.sample (added), configs/samples/cdr.conf.sample (added), configs/samples/cdr_syslog.conf.sample (added), configs/festival.conf.sample (removed), configs/samples/cel_pgsql.conf.sample (added), configs/http.conf.sample (removed), configs/phoneprov.conf.sample (removed), configs/alarmreceiver.conf.sample (removed), configs/samples/features.conf.sample (added), configs/cdr_tds.conf.sample (removed), configs/func_odbc.conf.sample (removed), configs/samples/logger.conf.sample (added), configs/samples/res_odbc.conf.sample (added), configs/samples/agents.conf.sample (added), configs/res_fax.conf.sample (removed), configs/samples/xmpp.conf.sample (added), configs/iaxprov.conf.sample (removed), configs/res_pgsql.conf.sample (removed), configs/extensions.conf.sample (removed), configs/chan_mobile.conf.sample (removed), configs/asterisk.adsi (removed), configs/cel_sqlite3_custom.conf.sample (removed), configs/users.conf.sample (removed), configs/samples/res_pktccops.conf.sample (added), configs/samples/amd.conf.sample (added), configs/rtp.conf.sample (removed), configs/samples/res_parking.conf.sample (added), configs/hep.conf.sample (removed), configs/samples/modules.conf.sample (added), configs/cel_tds.conf.sample (removed), configs/res_curl.conf.sample (removed), configs/samples/skinny.conf.sample (added), configs/samples/cdr_pgsql.conf.sample (added), configs/samples/sip_notify.conf.sample (added), configs/samples/test_sorcery.conf.sample (added), configs/samples/dsp.conf.sample (added), configs/ss7.timers.sample (removed), configs/samples/udptl.conf.sample (added), configs/cdr_odbc.conf.sample (removed), configs/samples/sip.conf.sample (added), configs/minivm.conf.sample (removed), configs/res_config_sqlite.conf.sample (removed), configs/codecs.conf.sample (removed), configs/osp.conf.sample (removed), configs/samples/cel_custom.conf.sample (added), configs/samples/dbsep.conf.sample (added), configs/samples/app_skel.conf.sample (added), configs/console.conf.sample (removed), configs/cdr_manager.conf.sample (removed), configs/cdr_custom.conf.sample (removed), configs/chan_dahdi.conf.sample (removed), configs/res_config_mysql.conf.sample (removed), configs/samples/statsd.conf.sample (added), configs/cli.conf.sample (removed), configs/queues.conf.sample (removed), configs/cdr_syslog.conf.sample (removed), UPGRADE.txt, configs/manager.conf.sample (removed), configs/samples/res_corosync.conf.sample (added), configs/features.conf.sample (removed), configs/sla.conf.sample (removed), configs/logger.conf.sample (removed), configs/res_odbc.conf.sample (removed), configs/agents.conf.sample (removed), configs/samples/ooh323.conf.sample (added), Makefile, configs/xmpp.conf.sample (removed), configs/samples/phoneprov.conf.sample (added), configs/samples/alarmreceiver.conf.sample (added), configs/samples/cdr_tds.conf.sample (added), configs/extconfig.conf.sample (removed), configs/samples/func_odbc.conf.sample (added), configs/samples/res_fax.conf.sample (added), configs/samples/iaxprov.conf.sample (added), configs/samples/res_ldap.conf.sample (added), configs/samples/dnsmgr.conf.sample (added), configs/res_pktccops.conf.sample (removed), configs/cel.conf.sample (removed), configs/samples/res_pgsql.conf.sample (added), configs/samples/chan_mobile.conf.sample (added), configs/samples/asterisk.adsi (added), configs/samples/users.conf.sample (added), configs/samples/rtp.conf.sample (added), configs/phone.conf.sample (removed), configs/skinny.conf.sample (removed), configs/muted.conf.sample (removed), configs/samples/hep.conf.sample (added), configs/iax.conf.sample (removed), configs/samples/cel_tds.conf.sample (added), configs/sip_notify.conf.sample (removed), configs/samples/telcordia-1.adsi (added), configs/samples/alsa.conf.sample (added), configs/samples/adsi.conf.sample (added), configs/test_sorcery.conf.sample (removed), configs/samples/followme.conf.sample (added), configs/samples/asterisk.conf.sample (added), configs/extensions.lua.sample (removed), configs/say.conf.sample (removed), configs/cel_custom.conf.sample (removed), configs/samples/ss7.timers.sample (added), configs/samples/cel_odbc.conf.sample (added), configs/app_skel.conf.sample (removed), configs/samples/ccss.conf.sample (added), configs/cli_permissions.conf.sample (removed), configs/statsd.conf.sample (removed), configs/samples/res_config_sqlite.conf.sample (added), configs/config_test.conf.sample (removed), configs/indications.conf.sample (removed), configs/samples/osp.conf.sample (added), configs/samples/cdr_manager.conf.sample (added), configs/samples/console.conf.sample (added), configs/voicemail.conf.sample (removed), configs/res_corosync.conf.sample (removed), configs/misdn.conf.sample (removed), configs/samples/cli.conf.sample (added), configs/ari.conf.sample (removed), configs/ooh323.conf.sample (removed), configs/samples/calendar.conf.sample (added), configs/samples/res_stun_monitor.conf.sample (added), configs/samples/manager.conf.sample (added), configs/samples/pjsip_notify.conf.sample (added), configs/samples/sla.conf.sample (added), configs/musiconhold.conf.sample (removed), configs/pjsip.conf.sample (removed), configs/sorcery.conf.sample (removed), configs/vpb.conf.sample (removed), configs/unistim.conf.sample (removed), configs/res_ldap.conf.sample (removed), configs/dnsmgr.conf.sample (removed), configs/samples/extconfig.conf.sample (added), configs/samples/res_snmp.conf.sample (added), configs/acl.conf.sample (removed), configs/samples/smdi.conf.sample (added), configs/samples/cel.conf.sample (added), configs/cli_aliases.conf.sample (removed), configs/samples/cdr_sqlite3_custom.conf.sample (added), configs/extensions.ael.sample (removed), configs/cdr_adaptive_odbc.conf.sample (removed), configs/samples/phone.conf.sample (added), configs/extensions_minivm.conf.sample (removed), configs/motif.conf.sample (removed), configs/telcordia-1.adsi (removed), configs/samples/meetme.conf.sample (added), configs/adsi.conf.sample (removed), configs/alsa.conf.sample (removed), configs/samples/muted.conf.sample (added), configs/followme.conf.sample (removed), configs/asterisk.conf.sample (removed), configs/samples/iax.conf.sample (added), configs/samples/res_config_sqlite3.conf.sample (added), configs/samples/mgcp.conf.sample (added), configs/cel_odbc.conf.sample (removed), configs/ccss.conf.sample (removed), configs/cdr_mysql.conf.sample (removed), configs/samples/extensions.lua.sample (added), configs/samples/say.conf.sample (added), configs/dundi.conf.sample (removed), configs/samples/queuerules.conf.sample (added), configs/oss.conf.sample (removed), configs/app_mysql.conf.sample (removed), configs/samples/confbridge.conf.sample (added), configs/samples/cli_permissions.conf.sample (added), configs/samples/enum.conf.sample (added), configs/samples/config_test.conf.sample (added), configs/cdr.conf.sample (removed), configs/samples/indications.conf.sample (added), configs/cel_pgsql.conf.sample (removed), configs/res_stun_monitor.conf.sample (removed), configs/calendar.conf.sample (removed), configs/samples/voicemail.conf.sample (added), configs/pjsip_notify.conf.sample (removed), configs/samples/misdn.conf.sample (added), configs/samples/ari.conf.sample (added), configs/samples/festival.conf.sample (added), configs/samples/http.conf.sample (added), configs/res_snmp.conf.sample (removed), configs/samples/musiconhold.conf.sample (added), configs/samples/pjsip.conf.sample (added), configs/samples/sorcery.conf.sample (added), configs/samples/vpb.conf.sample (added), configs/smdi.conf.sample (removed), configs/samples/unistim.conf.sample (added), configs/samples (added), configs/amd.conf.sample (removed): configs: Move sample config files into a subdirectory of configs This moves all samples configs from configs/ to configs/samples. This allows for additional sets of sample configuration files to be added in the future. Review: https://reviewboard.asterisk.org/r/3804/ * channels/chan_sip.c, UPGRADE.txt: chan_sip: Make progressinband=never really mean 'never' progressinband=never in sip.conf is easily defeated if an onward trunk sends a progress indication of its own. This is almost certain to happen if the onward trunk is ISDN or IAX as these technologies send a progress indication even if early media is not required. This progress message is passed to the caller, and causes the "never" option to be rather badly named. This patch changes the behaviour of this setting in the following ways: 1) In sip_write(), do not pass the media unless we have either progressed beyond INV_EARLY_MEDIA, or we are in INV_EARLY_MEDIA state, and early media is both set-up and wanted. This helps resolve double-ringing on some buggy handsets. 2) In sip_indicate(), if we see AST_CONTROL_PROGRESS, but SIP_PROG_INBAND_NEVER is set, send a 180 Ringing instead to avoid implicitly enabling early media. Avoid sending double ring indications. NOTE: the meaning of the SIP_PROGRESS_SENT flag changes slightly in this patch to also encapsulate the fact that a channel has *sent or received* a 183 Progress indication. This makes the updated code in sip_write() much more simple. Review: https://reviewboard.asterisk.org/r/3700 ASTERISK-23972 #close Reported by: Steve Davies patches: inband_never_present_early_media2 uploaded by Steve Davies (License 5012) * menuselect: Add svn:ignore property * UPGRADE.txt, menuselect/configure, menuselect/configure.ac, configure, configure.ac: configure: Fix libxml2 development library dependency checking The commit that added libxml2 support didn't fully check for the libxml2 development script in the Asterisk configure file. As a result, Asterisk could be configured, then fail on menuselect. This patch fixes it so that Asterisk should detect the libxml2 dependency failure first. * menuselect/makeopts.in, menuselect/autoconfig.h.in, menuselect/menuselect.h, menuselect/example_menuselect-tree, configure, include/asterisk/autoconfig.h.in, menuselect/Makefile, menuselect/README, menuselect/aclocal.m4, configure.ac, UPGRADE.txt, menuselect/configure, menuselect/configure.ac, menuselect/menuselect.c, menuselect/acinclude.m4: menuselect: Add libxml2 support (Patch 3) This is the final patch in adding menuselect to Asterisk. - The first patch (r418832) added menuselect along with mxml - The second patch (r418833) removed mxml from menuselect This patch adds support for libxml2 to menuselect, and makes libxml2 a required library for Asterisk. Note that the libxml2 portion of this patch was written by Sean Bright, and was made available on a team branch: http://svn.digium.com/svn/menuselect/team/seanbright/libxml2/ Review: https://reviewboard.asterisk.org/r/3773/ ASTERISK-20703 #close patches: some_mysterious_team_branch uploaded by seanbright (License 5060) * menuselect/mxml (removed): menuselect: Remove mxml from menuselect (Patch 2) This is the second patch that adds menuselect to Asterisk trunk. The previous commit (r418832) added menuselect along with mxml; this patch removes mxml completely from Menuselect. A subsequent patch will switch menuselect over to using libxml2, and make libxml2 a required dependency for Asterisk. ASTERISK-20703 * menuselect/mxml/configure.in (added), menuselect/acinclude.m4 (added), menuselect/mxml/mxml.list.in (added), menuselect/mxml/README (added), menuselect/linkedlists.h (added), menuselect/mxml (added), menuselect/mxml/config.h.in (added), menuselect/aclocal.m4 (added), menuselect/install-sh (added), menuselect/mxml/mxml-string.c (added), menuselect/menuselect_stub.c (added), menuselect/make_version (added), menuselect/mxml/mxml-entity.c (added), menuselect/bootstrap.sh (added), menuselect/makeopts.in (added), menuselect/autoconfig.h.in (added), menuselect/config.guess (added), menuselect/mxml/install-sh (added), menuselect/test/build_tools/menuselect-deps (added), /, menuselect/contrib/menuselect-dummy (added), menuselect/config.sub (added), menuselect/mxml/configure (added), menuselect/mxml/Makefile.in (added), menuselect (added), menuselect/contrib (added), menuselect/mxml/mxml.pc.in (added), menuselect/configure.ac (added), menuselect/mxml/mxml-set.c (added), menuselect/contrib/Makefile-dummy (added), menuselect/mxml/ANNOUNCEMENT (added), menuselect/missing (added), menuselect/menuselect_curses.c (added), menuselect/example_menuselect-tree (added), menuselect/Makefile (added), menuselect/mxml/mxml-search.c (added), menuselect/test (added), menuselect/test/menuselect-tree (added), menuselect/mxml/mxml.h (added), menuselect/mxml/mxml-index.c (added), menuselect/configure (added), menuselect/menuselect_newt.c (added), menuselect/mxml/mxml-attr.c (added), menuselect/mxml/mxml-private.c (added), menuselect/menuselect.c (added), menuselect/mxml/CHANGES (added), menuselect/mxml/COPYING (added), menuselect/mxml/mxml-file.c (added), menuselect/menuselect.h (added), menuselect/menuselect_gtk.c (added), menuselect/README (added), menuselect/strcompat.c (added), menuselect/mxml/mxml-node.c (added), menuselect/test/build_tools (added): menuselect: Add menuselect to Asterisk trunk (Patch 1) This is the first patch that adds menuselect to Asterisk trunk, and removes the svn:externals property. This is being done for two reasons: (1) The removal of external repositories eases a future migration to git (2) Asterisk is now the only thing that uses menuselect; as a result, there's little need to keep it in an external repository Subsequent patches will remove the mxml dependency from menuselect and tidy up the build system. ASTERISK-20703 2014-07-17 14:28 +0000 [r418811] Kinsey Moore * /, main/bridge_channel.c: TEST_FRAMEWORK: Fix threewaytransfer reporting Ensure that three-way transfers can be reported even if featuremap is non-NULL. ........ Merged revisions 418810 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-16 23:08 +0000 [r418788] Corey Farrell * /, channels/dahdi/bridge_native_dahdi.c: Remove include of astobj.h from channels/dahdi/bridge_native_dahdi.c. The include was unneeded, this is split off from r3758 as it applies to 12. ........ Merged revisions 418787 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-16 14:03 +0000 [r418717-418757] Matthew Jordan * res/res_pjsip/pjsip_configuration.c, CHANGES, res/res_pjsip.c, channels/chan_pjsip.c, include/asterisk/res_pjsip.h, contrib/ast-db-manage/config/versions/1d50859ed02e_create_accountcode.py (added), /, configs/pjsip.conf.sample: res_pjsip: Support setting a default accountcode on endpoints Most channel drivers let you specify a default accountcode to be set on channels associated with a particular peer/endpoint/object. Prior to this patch, chan_pjsip/res_pjsip did not support such a setting. This patch adds a new setting to the res_pjsip endpoint object, 'accountcode'. When a channel is created that is associated with an endpoint with this value set, the channel will automatically have its accountcode property set to the value configured for the endpoint. Review: https://reviewboard.asterisk.org/r/3724/ ASTERISK-24000 #close Reported by: Matt Jordan ........ Merged revisions 418756 from http://svn.asterisk.org/svn/asterisk/branches/12 * cdr/cdr_pgsql.c, CHANGES, configs/cdr_pgsql.conf.sample, configs/res_pgsql.conf.sample, cel/cel_pgsql.c, res/res_config_pgsql.c, configs/cel_pgsql.conf.sample: cel_pgsql, cdr_pgsql, res_config_pgsql: Add PostgreSQL application_name support This patch adds support for the PostgreSQL application_name connection setting. When the appropriate PostgreSQL module's configuration is set with an application name, the name will be passed to PostgreSQL on connection and displayed in the database's pg_stat_activity view, as well as in CSV logs. This aids in managing which applications/servers are connected to a PostgreSQL database, as well as tracing the activity of those connections. Review: https://reviewboard.asterisk.org/r/3591 ASTERISK-23737 #close Reported by: Gergely Domodi patches: pgsql_application_name.patch uploaded by Gergely Domodi (License 6610) * codecs/codec_adpcm.c, main/format.c: codec_adpcm: Change description of codec "ADPCM" to "Dialogic ADPCM" Technically, ADPCM is a method that can be applied to several codecs. Asterisk's ADPCM codec is the Dialogic ADPCM or VOX codec. See http://en.wikipedia.org/wiki/Dialogic_ADPCM for more information about said codec. Review: https://reviewboard.asterisk.org/r/3744 patches: rb3744.patch uploaded by dennis.guse (License 6513) * UPGRADE.txt, main/manager.c, /: manager: Return ActionID on nominal responses to PresenceState action When the PresenceState action is executed, the nominal path fails to include the ActionID in the successful response. This patch adds a call to astman_start_ack, which guarantees that an ActionID (if provided) will be sent back to the AMI client. Unlike the Asterisk 11 and 12 patches, this patch also deprecates the duplicate Message key in the response to the action, replacing it with the key 'PresenceMessage'. Review: https://reviewboard.asterisk.org/r/3776/ ASTERISK-23985 #close ........ Merged revisions 418713 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418714 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-15 23:03 +0000 [r418716] Kinsey Moore * /, main/bridge_channel.c: TEST_FRAMEWORK: Fix ref leak in feature activation This fixes two reference leaks that would occur when TEST_FRAMEWORK was enabled and features were successfully executed. ........ Merged revisions 418715 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-15 17:57 +0000 [r418654] Jonathan Rose * funcs/func_uri.c, /: func_uri: URIENCODE/URIDECODE - allow empty strings as argument Previously these two dialplan functions would issue warnings and return failure when an empty string is used as the argument. Now they will not issue a warning and will successfully return an empty string. ASTERISK-23911 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3745/ ........ Merged revisions 418641 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 418649 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418650 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-15 12:11 +0000 [r418616] Sean Bright * main/asterisk.c: Update Asterisk copyright year in main/asterisk.c It's been 2014 for like... 6 months. 2014-07-14 14:55 +0000 [r418566-418587] Richard Mudgett * include/asterisk/logger.h, /: logger.h: Extract DEBUG_ATLEAST() to complement VERBOSITY_ATLEAST(). ........ Merged revisions 418586 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/jabber.h (removed), include/asterisk/jingle.h (removed), include/asterisk/frame_defs.h (removed), configs/h323.conf.sample (removed): Actually delete the removed files. 2014-07-13 21:57 +0000 [r418507] Corey Farrell * /, main/astobj2.c, contrib/scripts/refcounter.py: astobj2: work around REF_DEBUG race which causes out of order log entries * Update refcounter.py to use delta's to track the current reference count. * Use result from internal_ao2_ref to write old_refcount to refs_log. Review: https://reviewboard.asterisk.org/r/3756/ ........ Merged revisions 418504 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 418505 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418506 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-13 20:08 +0000 [r418488] Scott Griepentrog * include/asterisk/astobj2.h: astobj2: correct define for ao2_t_cleanup This change maps the ao2_t_cleanup() function to the correct debug function so that it can be used. Review: https://reviewboard.asterisk.org/r/3764/ 2014-07-13 16:48 +0000 [r418448-418467] Corey Farrell * main/manager.c, /, apps/app_skel.c: Fix minor reference leaks in app_skel and TEST_FRAMEWORK * Cleanup games object in app_skel. * Cleanup stasis subscription to TEST_FRAMEWORK in manager.c (12+). Review: https://reviewboard.asterisk.org/r/3757/ ........ Merged revisions 418465 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418466 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/jabber.h, include/asterisk/jingle.h, configs/h323.conf.sample: Remove files left behind on removal of h323, jingle and jabber. This change removes h323.conf.sample, jingle.h, jabber.h left behind by r3698. Review: https://reviewboard.asterisk.org/r/3755/ 2014-07-11 23:00 +0000 [r418419] Matthew Jordan * main/astobj2.c, include/asterisk/astobj2.h: astobj2: Add tag variants for ao2_bump, ao2_cleanup, and ao2_replace Tags are useful in hunting down ref imbalances; this patch adds tag variants for these commonly used macros/functions. Review: https://reviewboard.asterisk.org/r/3750/ 2014-07-11 21:10 +0000 [r418397] Corey Farrell * /, include/asterisk/astobj2.h: astobj2: tweak ao2_replace to do nothing when it would be a NoOp This change causes ao2_replace to do nothing when src == dst. This avoids REF_DEBUG logging when we're not actually doing anything. Review: https://reviewboard.asterisk.org/r/3743/ ........ Merged revisions 418396 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-11 16:42 +0000 [r418370] Scott Griepentrog * /, main/config.c: config: inform config hook of change when writing file When updated configuration is written back to the conf file - for example when a user changes their voicemail pin, make sure that any config hook that wants to know of changes is informed. Review: https://reviewboard.asterisk.org/r/3708/ ........ Merged revisions 418366 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418369 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-10 15:36 +0000 [r418325] Matthew Jordan * /, include/asterisk/xmpp.h: include/asterisk/xmpp.h: Convert indentation to tabs This is a whitespace only change. ........ Merged revisions 418323 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418324 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-10 01:59 +0000 [r418226-418264] Richard Mudgett * channels/sig_pri.c, /: chan_dahdi/sig_pri: Fix type mismatch in the idledial feature's channel creation. Square pegs in round holes don't work very well. ........ Merged revisions 418261 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 418262 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 418263 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/stasis/stasis_bridge.h (added), main/bridge_channel.c, res/res_stasis.c, /, res/stasis/stasis_bridge.c (added), include/asterisk/bridge_channel.h, main/bridge_basic.c: ARI: Make mixing bridges propagate linkedids and accountcodes. * Create a Stasis bridge sub-class to propagate linkedids and accountcodes. * Fixed the basic bridge sub-class to update peeraccount codes when the number of channels in the bridge drops back down to two parties. * Refactored ast_bridge_channel_update_accountcodes() to handle channels joining/leaving the bridge. * Fixed the basic bridge sub-class to not call the base bridge class pull method twice. AFS-105 #close ASTERISK-23852 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3720/ ........ Merged revisions 418225 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-08 14:48 +0000 [r418174-418183] Matthew Jordan * 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, rest-api/api-docs/playbacks.json, rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, rest-api/resources.json, include/asterisk/manager.h, rest-api/api-docs/bridges.json, rest-api/api-docs/recordings.json: manager/ARI: Update version to 2.4.0/1.4.0; Update UPGRADE.txt ........ Merged revisions 418182 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix undefined function when PJPROJECT is not installed The dtls_perform_handshake function was mistakenly placed under the guards for USE_PJPROJECT. If PJPROJECT was not installed, the function would not be defined, while other functions would attempt to still use it. This prevented res_rtp_asterisk from being loaded. ASTERISK-24001 #close Reported by: Don Fanning ........ Merged revisions 418172 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-07 16:08 +0000 [r418117] Joshua Colp * include/asterisk/res_pjsip_body_generator_types.h, res/res_pjsip_dialog_info_body_generator.c (added), res/res_pjsip_exten_state.c, res/res_pjsip/presence_xml.c, /, include/asterisk/res_pjsip_presence_xml.h: res_pjsip_dialog_info_body_generator: Add dialog-info+xml support for presence. This module implements dialog-info+xml for the purposes of presence. This means that phones such as Grandstreams can now subscribe to receive presence information for an extension. ASTERISK-21443 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3705/ ........ Merged revisions 418116 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-07 02:15 +0000 [r418090] Matthew Jordan * include/asterisk/stasis_app.h, res/ari/resource_channels.c, res/res_stasis.c, /, res/stasis/app.c: ARI/res_stasis: Subscribe to both Local channel halves when originating to app This patch fixes two bugs: 1. When originating a channel into a Stasis application, we already create a subscription for the channel that is going into our Stasis app. Unfortunately, when you create a Local channel and pass it off to a Stasis app, you really aren't creating just one channel: you're creating two. This patch snags the second half of the Local channel pair (assuming it is a Local channel pair, but luckily core_local is kind about such assumptions) and subscribes to it as well. 2. Subscriptions are a bit sticky right now. If a subscription is made, the 'interest' count gets bumped on the Stasis subscription - but unless something explicitly unsubscribes the channel, said subscription sticks around. This is not much of a problem is a user is creating the subscription - if they made it, they must want it. However, when we are creating implicit subscriptions, we need to make sure something clears them out. This patch takes a pessimistic approach: it watches the cache updates coming from Stasis and, if we notice that the cache just cleared out an object, we delete our subscription object. This keeps our ao2 container of Stasis forwards in an application from growing out of hand; it also is a bit more forgiving for end users who may not realize they were supposed to unsubscribe from that channel that just hung up. Review: https://reviewboard.asterisk.org/r/3710/ #ASTERISK-23939 #close ........ Merged revisions 418089 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-07 01:22 +0000 [r418067-418084] Kinsey Moore * tests/test_cel.c, main/cel.c, channels/chan_pjsip.c, res/res_pjsip_session.c, /: CEL: Fix incorrect/missing extra field information This corrects two issues with the extra field information in Asterisk 12+ in channel event logs. It is possible to inject custom values into the dialstatus provided by ast_channel_dial_type() Stasis messages that fall outside the enumeration allowed for the DIALSTATUS channel variable. CEL now filters for the allowed values and ignores other values. The "hangupsource" extra field key is always blank if the far end channel is a chan_pjsip channel. This is because the hangupsource is never set for the pjsip channel driver. This change sets the hangupsource whenever a hangup is queued for chan_pjsip channels. This corrects an issue with the pjsip channel driver where the hangupcause information was not being set properly. Review: https://reviewboard.asterisk.org/r/3690/ ........ Merged revisions 418071 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/http.c: HTTP: Fix build for gcc 4.10 ........ Merged revisions 418066 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-04 15:26 +0000 [r418019-418050] Matthew Jordan * main/Makefile: main/Makefile: fix compilation error of buildinfo occurring on 'make install' Egads. Another bad deletion of too much when attempting to remove h323 stuff. * configure.ac, build_tools/menuselect-deps.in, configure, main/Makefile: configure: Remove last vestiges of h323; DO create menuselect-deps The previous patch (r418034) fixed the 'glitch' that the channels/h323 Makefile no longer existed. Unfortunately, removing the entire line was a bit of a blunder, as it meant that build_tools/menuselect-deps was never generated. Hilarity ensued when actually trying to compile. But hey! At least configure worked. This patch fixes *that* glitch, and removes some more of the vestiges of h323. (It had tendrils in the main Makefile? Crazy.) * configure.ac, configure: configure: Update script to pass if channels/h323/Makefile.in does not exist This simply removes that check from the configure script, as r418019 removed chan_h323. * apps/app_dahdibarge.c (removed), configs/gtalk.conf.sample (removed), main/pbx.c, apps/app_readfile.c (removed), channels/chan_sip.c, configs/jingle.conf.sample (removed), UPGRADE.txt, res/res_musiconhold.c, channels/chan_gtalk.c (removed), channels/Makefile, CHANGES, res/res_jabber.c (removed), channels/h323 (removed), utils/conf2ael.c, channels/chan_jingle.c (removed), res/ael/pval.c, configs/jabber.conf.sample (removed), configs/asterisk.conf.sample, res/res_agi.c, channels/chan_h323.c (removed), addons/Makefile, pbx/pbx_realtime.c, utils/ael_main.c, include/asterisk/options.h, main/asterisk.c, addons/app_saycountpl.c (removed): Remove many deprecated modules Billing records are fair, To get paid is quite bright, You should really use ODBC; Good-bye cdr_sqlite. Microsoft did once push H.323, Hell, we all remember NetMeeting. But try to compile chan_h323 now And you will take quite a beating. The XMPP and SIP war was fierce, And in the distant fray Was birthed res_jabber/chan_jingle; But neither to stay. For everyone did care and chase what Google professed. "Free Internet Calling" was what devotees cried, But Google did change the specs so often That the developers were happy the day chan_gtalk died. And then there was that odd application Dedicated to the Polish tongue. app_saycountpl was subsumed by Say; One could say its bell was rung. To read and parse a file from the dialplan You could (I guess) use an application. app_readfile did fill that purpose, but I think A function is perhaps better in its creation. Barging is rude, I'm not sure why we do it. Inwardly, the caller will probably sigh. But if you really must do it, Don't use app_dahdibarge, use ChanSpy. We all despise the sound of tinny robots It makes our queues so cold. To control such an abomination It's better to not use Wait/SetMusicOnHold. It's often nice to know properties of a channel It makes our calls right We have a nice function called CHANNEL And so SIPCHANINFO is sent off into the night. And now things get odd; Apparently one could delimit with a colon Properties from the SIPPEER function! Commas are in; all others are done. Finally, a word on pipes and commas. We're sorry. We can't say it enough. But those compatibility options in asterisk.conf; To maintain them forever was just too tough. This patch removes: * cdr_sqlite * chan_gtalk * chan_jingle * chan_h323 * res_jabber * app_saycountpl * app_readfile * app_dahdibarge It removes the following applications/functions: * WaitMusicOnHold * SetMusicOnHold * SIPCHANINFO It removes the colon delimiter from the SIPPEER function. Finally, it also removes all compatibility options that were configurable from asterisk.conf, as these all applied to compatibility with Asterisk 1.4 systems. Review: https://reviewboard.asterisk.org/r/3698/ 2014-07-03 22:22 +0000 [r417933-417976] Richard Mudgett * channels/sig_pri.h, channels/chan_dahdi.c, configs/chan_dahdi.conf.sample, /, UPGRADE.txt, channels/sig_pri.c: chan_dahdi: Add inband_on_setup_ack compatibility option. The new inband_on_setup_ack option causes Asterisk to assume inband audio may be present when a SETUP_ACKNOWLEDGE message is received. Q.931 Section 5.1.3 says that in scenarios with overlap dialing, when a dialtone is sent from the network side, progress indicator 8 "Inband info now available" MAY be sent to the CPE if no digits were received with the SETUP. It is thus implied that the ie is mandatory if digits came with the SETUP and dialtone is needed. This option should be enabled, when the network sends dialtone and you want to hear it, but the network doesn't send the progress indicator when needed. NOTE: For Q.SIG setups this option should be enabled when outgoing overlap dialing is also enabled because Q.SIG does not send the progress indicator with the SETUP ACK. The commit -r413714 (AST-1338) which causes this issue was dealing with a SIP-to-ISDN interoperability issue. This commit is a merge of the two patches indicated below. ASTERISK-23897 #close Reported by: Pavel Troller Patches: pri-4.diff (license #6302) patch uploaded by Pavel Troller jira_asterisk_23897_v11.patch (license #5621) patch uploaded by rmudgett Review: https://reviewboard.asterisk.org/r/3633/ ........ Merged revisions 417956 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417957 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417958 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_channels.c, res/res_ari.c, main/manager.c, /: res_ari: Fix some off-nominal paths just dropping the HTTP connection. * Removed some incorrect newlines on ast_http_error() messages in manager.c. * Removed an incorrect newline in res_ari_channels.c. Addendum to ASTERISK-23552 ........ Merged revisions 417932 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-03 17:34 +0000 [r417910-417916] Jonathan Rose * CHANGES, channels/chan_dahdi.c: chan_dahdi: Add AMI commands for controlling PRI debugging output Adds the following AMI commands: PRIDebugSet - Set PRI debug levels for a specific span PRIDebugFileSet - Set the file used for PRI debug message output PRIDebugFileUnset - Disables file output for PRI debug messages Review: https://reviewboard.asterisk.org/r/3681/ * CHANGES, pbx/pbx_config.c, main/pbx.c: pbx_config: Add manager actions to add/remove extensions Adds two new manager commands to pbx_config - DialplanExtensionAdd and DialplanExtensionRemove which allow manager users to create and delete extensions respectively. Review: https://reviewboard.asterisk.org/r/3650/ 2014-07-03 17:16 +0000 [r417901] Richard Mudgett * res/res_phoneprov.c, main/http.c, UPGRADE.txt, include/asterisk/tcptls.h, res/res_http_post.c, res/res_http_websocket.c, configs/http.conf.sample, include/asterisk/http.h, main/tcptls.c, res/res_ari.c, main/manager.c, /: HTTP: Add persistent connection support. Persistent HTTP connection support is needed due to the increased usage of the Asterisk core HTTP transport and the frequency at which REST API calls are going to be issued. * Add http.conf session_keep_alive option to enable persistent connections. * Parse and discard optional chunked body extension information and trailing request headers. * Increased the maximum application/json and application/x-www-form-urlencoded body size allowed to 4k. The previous 1k was kind of small. * Removed a couple inlined versions of ast_http_manid_from_vars() by calling the function. manager.c:generic_http_callback() and res_http_post.c:http_post_callback() * Add missing va_end() in ast_ari_response_error(). * Eliminated unnecessary RAII_VAR() use in http.c:auth_create(). ASTERISK-23552 #close Reported by: Scott Griepentrog Review: https://reviewboard.asterisk.org/r/3691/ ........ Merged revisions 417880 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-03 16:55 +0000 [r417900] Matthew Jordan * main/tcptls.c, configure, include/asterisk/autoconfig.h.in, configure.ac: main/tcptls: Add checks for OpenSSL Elliptic Curve support The patch for ASTERISK-23905 that added PFS support in Asterisk depends on the elliptic curve library support being present in OpenSSL. As it turns out, some versions of OpenSSL don't have this library - notably the version running on our build agents. This patch fixes the build by providing a configure check for the specific library calls that the PFS patch relies on. Review: https://reviewboard.asterisk.org/r/3709/ 2014-07-03 16:14 +0000 [r417877-417879] sgalarneau : * res/ari/resource_events.h, rest-api/api-docs/channels.json, res/ari/resource_channels.h, rest-api/api-docs/events.json, /: ARI: Improvements to body parameters documentation The variables body parameter under the originate and originate with id operations of the channel resource showed invalid JSON in its description. The variables body parameter under the userEvent operation of the event resource made no mention that the custom key/value pairs should be wrapped in a variables key in order to be added to the custom user event. ASTERISK-23975 #close Review: https://reviewboard.asterisk.org/r/3692/ ........ Merged revisions 417878 from http://svn.asterisk.org/svn/asterisk/branches/12 * rest-api-templates/api.wiki.mustache, rest-api-templates/swagger_model.py, /: api.wiki.mustache: Update wiki template to support body parameters This patch updates the api.wiki.mustache template and the swagger_model python script to understand if an operation has a body parameter. If an operation does have a body parameter, it will now be displayed in the corresponding wiki entry. ........ Merged revisions 407389 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-03 14:08 +0000 [r417863] Tzafrir Cohen * Makefile, contrib/scripts/dahdi_span_config_hook (added): dahdi_span_config_hook: automatically register new dahdi channels Install a hook script for DAHDI to register new spans with Asterisk automatically by running: asterisk -rx 'dahdi create channel FIRST LAST' Review: https://reviewboard.asterisk.org/r/3157/ 2014-07-03 12:10 +0000 [r417800-417803] Matthew Jordan * main/tcptls.c, CHANGES: main/tcptls: Add support for Perfect Forward Secrecy This patch enables Perfect Forward Secrecy (PFS) in Asterisk's core TLS API. Modules that wish to enable PFS should consider the following: - Ephemeral ECDH (ECDHE) is enabled by default. To disable it, do not specify a ECDHE cipher suite in a module's configuration, for example: tlscipher=AES128-SHA:DES-CBC3-SHA - Ephemeral DH (DHE) is disabled by default. To enable it, add DH parameters into the private key file, i.e., tlsprivatekey. For an example, see the default dh2048.pem at http://www.opensource.apple.com/source/OpenSSL098/OpenSSL098-35.1/src/apps/dh2048.pem?txt - Because clients expect the server to prefer PFS, and because OpenSSL sorts its cipher suites by bit strength, (see "openssl ciphers -v DEFAULT") consider re-ordering your cipher suites in the conf file. For example: tlscipher=AES128+kEECDH:AES128+kEDH:3DES+kEDH:AES128-SHA:DES-CBC3-SHA:-ADH:-AECDH will use PFS when offered by the client. Clients which do not offer PFS fall-back to AES-128 (or even 3DES as recommend by RFC 3261). Review: https://reviewboard.asterisk.org/r/3647/ ASTERISK-23905 #close Reported by: Alexander Traud patches: tlsPFS_for_HEAD.patch uploaded by Alexander Traud (License 6520) tlsPFS.patch uploaded by Alexander Traud (License 6520) * /, main/utils.c: main/untils: Prevent potential infinite loop in ast_careful_fwrite A loop in ast_careful_fwrite exists that will continually attempt to write to a file stream, even in the presence of EAGAIN/EINTR errors. However, if a connection that uses ast_careful_fwrite closes suddenly, ast_careful_fwrite's call to fflush may return EAGAIN/EINTER along with EOF. A subsequent call to fflush will return EOF but not clear errno, resulting in an infinite loop. This patch clears errno after it is detected and handled the loop, such that any subsequent call to fflush will not get erroneously stuck. Review: https://reviewboard.asterisk.org/r/3704 #ASTERISK-23984 #close Reported by: Steve Davies patches: fflush_loop_fix uploaded by one47 (License 5012) ........ Merged revisions 417797 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417798 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417799 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-02 21:13 +0000 [r417770] Jonathan Rose * res/ari/resource_events.h, res/ari/resource_asterisk.h, res/ari/resource_applications.h, res/ari/resource_playbacks.h, res/ari/resource_channels.h, res/ari/resource_sounds.h, /, res/ari/resource_bridges.h, res/ari/resource_recordings.h, rest-api-templates/ari_resource.h.mustache, res/ari/resource_device_states.h, res/ari/resource_endpoints.h, res/ari/resource_mailboxes.h: ARI: Remove unnecessary \briefs from automatically generated documentation Review: https://reviewboard.asterisk.org/r/3440/ ........ Merged revisions 412653 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-07-01 14:42 +0000 [r417679-417706] Joshua Colp * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Don't leak memory or reset state if DTLS configuration is set multiple times. ........ Merged revisions 417705 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, contrib/ast-db-manage/config/versions/51f8cb66540e_add_further_dtls_options.py (added), include/asterisk/res_pjsip_session.h, main/rtp_engine.c, /, channels/chan_sip.c, main/sdp_srtp.c, res/res_pjsip_sdp_rtp.c, res/res_pjsip/pjsip_configuration.c, configs/sip.conf.sample, include/asterisk/rtp_engine.h, res/res_pjsip.c, channels/sip/include/sip.h, include/asterisk/res_pjsip.h, include/asterisk/sdp_srtp.h: Recorded merge of revisions 417677 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ res_rtp_asterisk: Add SHA-256 support for DTLS and perform DTLS negotiation on RTCP. This change fixes up DTLS support in res_rtp_asterisk so it can accept and provide a SHA-256 fingerprint, so it occurs on RTCP, and so it occurs after ICE negotiation completes. Configuration options to chan_sip and chan_pjsip have also been added to allow behavior to be tweaked (such as forcing the AVP type media transports in SDP). ASTERISK-22961 #close Reported by: Jay Jideliov Review: https://reviewboard.asterisk.org/r/3679/ Review: https://reviewboard.asterisk.org/r/3686/ ........ Merged revisions 417678 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-30 18:39 +0000 [r417663] Mark Michelson * res/res_pjsip_pubsub.c: Reverse logic during subscription persistence recreation. In the abstraction effort, this bit of logic got messed up. We want to recreate the persistence if things go well, not if things fail. 2014-06-30 13:02 +0000 [r417590-417649] Matthew Jordan * apps/app_voicemail.c: apps/app_voicemail: Fix compilation error introduced in r417591 Not sure why that change to ast_channel_alloc was made but ... okay. * apps/app_voicemail.c, main/say.c, CHANGES: app_voicemail, say: Add support for Japanese Language This patch adds support for the Japanese language to both the say family of applications, as well as for VoiceMail and VoiceMailMain. A new pack of language sounds will be released at the same time as the next major version of Asterisk to support the new language features. The language features can be enabled using a language code of 'ja'. Review: https://reviewboard.asterisk.org/r/3477 ASTERISK-23324 #close Reported by: Kevin McCoy patches: app_voicemail.c.20140226.jb.patch uploaded by Kevin McCoy (License 6586) say.c.20140226.jb.patch uploaded by Kevin McCoy (License 6586) * /, channels/chan_sip.c: chan_sip: be more tolerant of whitespace between attributes in SDP fmtp line This patch is essentially a backport of a small portion of r397526 from ASTERISK-21981. In that patch, pass through support and format attribute negotiation was added for Opus. Part of that included being more tolerant to whitespace in the fmtp line of an SDP; that part of the patch is being applied here. As the author of the backport pointed out, in SDP, the fmtp line is allowed to include whitespace between attributes. RFC 3267 chapter 8.3 (from 2001) includes an example for this. This was not removed in the updated RFC 4867 in 2007. Review: https://reviewboard.asterisk.org/r/3658 #ASTERISK-23916 #close Reported by: Alexander Traud patches: sdpFMTPspace_Asterisk11.patch uploaded by Alexander Traud (License 6520) ........ Merged revisions 417587 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417588 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417589 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-27 23:21 +0000 [r417571] Richard Mudgett * /, main/event.c: event.c: Fix type mismatch errors in ie_maps[]. In v12+ the type values from the table are only used by the CEL unit tests. Since the unit tests were only comparing a generated expected event with a real event to see if the ie contents matched and using the same table IE_PLTYPE values to read the event contents, the type mismatches were not detected. ........ Merged revisions 417565 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-27 19:27 +0000 [r417485-417511] Corey Farrell * /, main/astobj2.c: Ensure REF_DEBUG records entrys for attempts to ao2_ref an invalid object This change ensures that __ao2_ref_debug writes to ref_log when given a non-NULL pointer to an invalid ao2 object. This is to ensure that we record any attempt manipulate references of already freed objects. ASTERISK-23948 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3677/ ........ Merged revisions 417500 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417505 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417509 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, contrib/scripts/refcounter.py: refcounter.py: prevent use of excessive RAM with large refs logs When processing a 212MB refs file, refcounter.py used over 3GB of RAM. This change greatly reduces memory usage in two ways: * Saving object history in whole lines instead of separated values. * Not saving normal/skewed/leaked object lists unless they are requested. ASTERISK-23921 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3668/ ........ Merged revisions 417480 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417481 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417483 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-27 13:50 +0000 [r417461] Matthew Jordan * res/res_pjsip/pjsip_configuration.c, res/res_pjsip_pubsub.c, res/res_pjsip_registrar.c, include/asterisk/res_pjsip.h, /, res/res_pjsip_outbound_registration.c: res_pjsip: Add ActionID to events created as a result of PJSIP AMI actions A number of various PJSIP AMI actions were failing to parse out and place the ActionID into their responses. This patch updates the various PJSIP actions such that the passed in ActionID is emitted on any event list complete events, as well as any intermediate events created as a result of the action. #ASTERISK-23947 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3675/ ........ Merged revisions 417460 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-27 02:04 +0000 [r417423-417447] Kinsey Moore * tests/test_cel.c: CEL: Update unit tests for bridge tech field Update the CEL unit tests that handle BRIDGE_ENTER and BRIDGE_EXIT events to expect the "bridge_technology" extra field key. * CHANGES: CHANGES: Add missing changes Add missing CHANGES changes from r417361 and r417383. 2014-06-26 18:27 +0000 [r417400-417421] Matthew Jordan * res/res_http_websocket.exports.in, /: res_http_websocket: Export symbol for ast_websocket_set_timeout Thanks to Sean Bright for pointing out that this was missed in #asterisk-dev. ........ Merged revisions 417419 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417420 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_pjsip.c, /: chan_pjsip: Add a test event for fast picture updates This will drive the test on review r3419. Note that the patch for this was done by Ben Ford, although it was slightly modified for this commit. ASTERISK-23562 Reported by: Matt Jordan ........ Merged revisions 417399 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-26 14:48 +0000 [r417361-417383] Kinsey Moore * main/cel.c: CEL: Add bridge tech to relevant CEL records Add the "bridge_technology" extra field key to BRIDGE_ENTER and BRIDGE_EXIT CEL events to convey the bridge technology in use at the time the record was generated. * main/bridge.c, include/asterisk/channel.h, include/asterisk/bridge_features.h, tests/test_channel_feature_hooks.c (added), main/bridge_channel.c, main/channel.c: Bridging: Allow channels to define bridging hooks This patch allows the current owner of a channel to define various feature hooks to be made available once the channel has entered a bridge. This includes any hooks that are setup on the ast_bridge_features struct such as DTMF hooks, bridge event hooks (join, leave, etc.), and interval hooks. Review: https://reviewboard.asterisk.org/r/3649/ 2014-06-26 12:43 +0000 [r417317-417360] Matthew Jordan * CHANGES, apps/app_jack.c: app_jack: Support audio with a sampling rate higher than 8kHz This patch enables the jack-audiohook to cope with dynamic sampling rates from and to Asterisk. Information from the channel is taken to derive the channel's sampling rate, suiting SLINxx format and frame->datalen. There are stil a few limitations after this patch: * Required information is taken from the channel during initialization as the audiohook does not provide this information. Audiohook.internal_sampl_rate(...) is set later, but no callback is available to inform app_jack. * Frame.datalen is computed using "rate / 50" assuming a ptime of 20ms. There is no internal API available to determine datalen for a SLINxx. * Ringbuffer size is now dynamic depending on the value of frame.datalen (see above) and the number of frames, which are in RINGBUFFER_FRAME_CAPACITY, that need to fit. Review: https://reviewboard.asterisk.org/r/3618 Note that the patch being committed here is based on the patch posted on ASTERISK-23836. However, Matthis Schmieder also provided a patch to enable this functionality, and that patch is noted below. ASTERISK-20696 #close Reported by: Matthis Schmieder patches: app_jack.patch uploaded by Matthis Schmieder (License 6445) ASTERISK-23836 #close Reported by: Dennis Guse patches: patch-app_jack.c uploaded by Dennis Guse (License 6513) * main/udptl.c, /: udptl: Correct FEC to not consider negative sequence numbers as missing When using FEC, with span=3 and entries=4 Asterisk will attempt to repair the packet with sequence number 5, as it will see that packet -4 is missing. The result is Asterisk sending garbage packets that can kill a fax. This patch adds a check to see if the sequence number is valid before checking if the packet is missing. Review: https://reviewboard.asterisk.org/r/3657/ #ASTERISK-23908 #close Reported by: Torrey Searle patches: udptl_fec.patch uploaded by Torrey Searle (License 5334) ........ Merged revisions 417318 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417320 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417324 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/internal.h, configs/ari.conf.sample, res/res_http_websocket.c, res/res_pjsip.c, configs/pjsip.conf.sample, include/asterisk/http_websocket.h, configs/sip.conf.sample, res/res_pjsip/config_transport.c, res/ari/ari_websockets.c, res/res_pjsip_transport_websocket.c, res/ari/config.c, channels/sip/include/sip.h, include/asterisk/res_pjsip.h, res/res_ari.c, /, channels/chan_sip.c, UPGRADE.txt: res_http_websocket: Close websocket correctly and use careful fwrite When a client takes a long time to process information received from Asterisk, a write operation using fwrite may fail to write all information. This causes the underlying file stream to be in an unknown state, such that the socket must be disconnected. Unfortunately, there are two problems with this in Asterisk's existing websocket code: 1. Periodically, during the read loop, Asterisk must write to the connected websocket to respond to pings. As such, Asterisk maintains a reference to the session during the loop. When ast_http_websocket_write fails, it may cause the session to decrement its ref count, but this in and of itself does not break the read loop. The read loop's write, on the other hand, does not break the loop if it fails. This causes the socket to get in a 'stuck' state, preventing the client from reconnecting to the server. 2. More importantly, however, is that the fwrite in ast_http_websocket_write fails with a large volume of data when the client takes awhile to process the information. When it does fail, it fails writing only a portion of the bytes. With some debugging, it was shown that this was failing in a similar fashion to ASTERISK-12767. Switching this over to ast_careful_fwrite with a long enough timeout solved the problem. Note that this version of the patch, unlike r417310 in Asterisk 11, exposes configuration options beyond just chan_sip's sip.conf. Configuration options to configure the write timeout have also been added to pjsip.conf and ari.conf. #ASTERISK-23917 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3624/ ........ Merged revisions 417310 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417311 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-26 10:06 +0000 [r417251] Corey Farrell * /, channels/chan_sip.c: chan_sip: Fix handling of "From" headers longer than 256 characters From headers were processed using a 256 character buffer on the stack. This change replaces that with a heap allocation by ast_strdup. ASTERISK-23790 #close Reported by: uniken1 Tested by: uniken1 Review: https://reviewboard.asterisk.org/r/3669/ Patches: chan_sip-large-from-header-1.8-r3.patch uploaded by wdoekes (license 5674) ........ Merged revisions 417248 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 417249 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417250 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-25 20:57 +0000 [r417233] Mark Michelson * res/res_pjsip_pubsub.c, res/res_pjsip_exten_state.c, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_pidf_body_generator.c, res/res_pjsip_pubsub.exports.in, res/res_pjsip_mwi.c, res/res_pjsip_xpidf_body_generator.c: Abstract PJSIP-specific elements from the pubsub API. This helps to pave the way for RLS work that is to come. Since this is a self-contained change and subscription tests still pass, this work is being committed directly to trunk instead of a working branch. ASTERISK-23865 #close Review: https://reviewboard.asterisk.org/r/3628 2014-06-25 18:57 +0000 [r417213] Corey Farrell * main/astobj2_container.c, /: ao2_container node object ignores REF_DEBUG in all places except one Almost every reference operation against container node's uses __ao2_alloc or __ao2_ref, thereby preventing ref logging for the nodes. One node reference is released with ao2_t_ref, causing refcounter.py to falsely report skews and leaks for many nodes. ASTERISK-23922 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3670/ ........ Merged revisions 417212 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-25 00:45 +0000 [r417193] Damien Wedhorn * channels/chan_skinny.c: Skinny: cleanup some log messages around sessions. 2014-06-24 02:50 +0000 [r417167] Corey Farrell * include/asterisk/netsock.h, main/utils.c, main/netsock.c, include/asterisk/res_pjsip_session.h: Move eid functions to utils.c, mark netsock.h deprecated Move eid functions from netsock.c to utils.c. These functions were already published by utils.h. Flag netsock.h as deprecated and switch res_pjsip_session.h to use netsock2.h. The only code that still uses netsock.h is chan_iax2. ASTERISK-23920 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3661/ 2014-06-23 18:50 +0000 [r417143] Joshua Colp * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Return the length of data written when sending via ICE instead of 0. ASTERISK-23834 #close Reported by: Richard Kenner ........ Merged revisions 417141 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 417142 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-23 16:04 +0000 [r417120] Richard Mudgett * /, main/core_unreal.c: core_unreal: Fix off by one buffer overwrite error. Appending the ;2 to the user supplied ;1 uniqueid to create the ;2 version if the user did not also supply an extra uniqueid for the ;2 channel resulted in allocating a buffer that was one byte too small. * Fix off by one error in ast_unreal_new_channels() when generating the ;2 uniqueid from the user suppled ;1 version. * Pulled some long assignment lines from if tests to improve line break readability in ast_unreal_new_channels(). ........ Merged revisions 417119 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-23 07:44 +0000 [r417059] Tzafrir Cohen * channels/sig_pri.c, channels/sig_pri.h, channels/chan_dahdi.c: suspended destructions of pri spans on events If a DAHDI span disappears, we wish for its representation in Asterisk to be destroyed as well. The information about the span's removal may come from several paths: 1. DAHDI sends DAHDI_EVENT_REMOVE on every channel. 2. An extra DAHDI_EVENT_REMOVED is sent on every subsequent call to DAHDI_GET_EVENT. 3. Every read (including the internal one by libpri on the D-channel) returns -ENODEV. Asterisk responsds to DAHDI_EVENT_REMOVE on a channel by destroying it. Destroying a channel requires holding the channel list lock (iflock). Destroying a channel that is part of a span requires holding the span's lock. Destroying a channel from a context that holds the span lock, while at the same time another channel is destroyed directly, leads to a deadlock. Solution: don't destroy span while holding the channels list lock. Thus changes in this patch: * Deferring removal of PRI spans in response to events: doomed spans are collected on a list. * Doomed spans are removed periodically by the monitor thread. * ENODEV reads from the D-channel will warant the same deferred removal. Review: https://reviewboard.asterisk.org/r/3548/ 2014-06-22 18:53 +0000 [r416996] George Joseph * include/asterisk/astobj2.h, Makefile.rules, Makefile, /: astobj2: Add an ao2_replace macro to astobj2.h This macro replaces one object reference with another cleaning up the original. param dst Pointer to the object that will be cleaned up. param src Pointer to the object replacing it. src's ref count is bumped if it's non-NULL. dst's ref count is decremented if it's non-NULL. src is assigned to dst, This patch was reviewed on IRC by coreyfarrell and mjordan. Tested by: George Joseph ........ Merged revisions 416995 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-20 23:18 +0000 [r416872-416935] George Joseph * /, configure, include/asterisk/autoconfig.h.in: build: Allow autoconf/ast_ext_tool_check to handle cross-compiling better. ast_ext_tool_check.m4 isn't handling cases where a path to a package is provided (E.G. --with-mysqlclient=/some/sysroot) and the package has a config tool (E.G. mysql_config) and the package has its own subdirectories in include or lib. For example, mysql's libraries are in ${MYSQLCLIENT_DIR}/usr/lib/mysql but ast_ext_tool_check sets MYSQLCLIENT_LIB to ${MYSQLCLIENT_DIR}/usr/lib. libxml2 has the same problem with its includes. They're in ${LIBXML2_DIR}/usr/include/libxml2 not directly in ${LIBXML2_DIR}/usr/include. Both cause configure to fail and there are others in the same boat. The problem is caused by logic in ast_ext_tool_check that overrides the result of the config tool's --cflags and --libs options if package_DIR is set. This patch prepends package_DIR (if specified) to the -L and -I results from the package's config tool instead of overriding them. A regenerated ./configure and include/asterisk/autoconfig.h.in are included but can be regenerated by running ./bootstrap.sh at any time. Tested by: George Joseph Tested by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3550/ ........ Merged revisions 416929 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416930 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416931 from http://svn.asterisk.org/svn/asterisk/branches/12 * autoconf/ast_ext_tool_check.m4, /: build: Allow autoconf/ast_ext_tool_check to handle cross-compiling better. ast_ext_tool_check.m4 isn't handling cases where a path to a package is provided (E.G. --with-mysqlclient=/some/sysroot) and the package has a config tool (E.G. mysql_config) and the package has its own subdirectories in include or lib. For example, mysql's libraries are in ${MYSQLCLIENT_DIR}/usr/lib/mysql but ast_ext_tool_check sets MYSQLCLIENT_LIB to ${MYSQLCLIENT_DIR}/usr/lib. libxml2 has the same problem with its includes. They're in ${LIBXML2_DIR}/usr/include/libxml2 not directly in ${LIBXML2_DIR}/usr/include. Both cause configure to fail and there are others in the same boat. The problem is caused by logic in ast_ext_tool_check that overrides the result of the config tool's --cflags and --libs options if package_DIR is set. This patch prepends package_DIR (if specified) to the -L and -I results from the package's config tool instead of overriding them. Tested by: George Joseph Tested by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3550/ ........ Merged revisions 416870 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416871 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-20 20:57 +0000 [r416848-416850] Jonathan Rose * res/parking/parking_manager.c, /: res_parking: Make manager commands register with module information Previously module information was not included due to an oversight. Review: https://reviewboard.asterisk.org/r/3626/ ........ Merged revisions 416849 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/logger.c, CHANGES, include/asterisk/logger.h, main/manager.c: Logger: Add manager command 'LoggerRotate' to rotate logger Part of a series of AMI command equivalents to existing CLI commands Review: https://reviewboard.asterisk.org/r/3651/ 2014-06-20 17:06 +0000 [r416830] Richard Mudgett * apps/app_voicemail.c, include/asterisk/app.h, main/app.c, apps/app_directory.c, apps/app_chanspy.c: voicemail API callbacks: Extract the sayname API call to its own registerd callback. * Extract the sayname API call to its own registerd callback. This allows the app_directory and app_chanspy applications to say a mailbox owner's name using an alternate provider when app_voicemail is not available because you are using res_mwi_external. app_directory still uses the voicemail.conf file. AFS-64 #close Reported by: Mark Michelson 2014-06-20 15:27 +0000 [r416738-416807] George Joseph * main/astobj2_private.h, main/astobj2_container_private.h, main/astobj2_container.c, main/astobj2_hash.c, main/astobj2_rbtree.c, build_tools/cflags.xml, /, tests/test_astobj2.c: astobj2: Additional refactoring to push impl specific code down into the impls. Move some implementation specific code from astobj2_container.c into astobj2_hash.c and astobj2_rbtree.c. This completely removes the need for astobj2_container to switch on RTTI and it no longer has any knowledge of the implementation details. Also adds AO2_DEBUG as a new compile option in menuselect which controls astobj2 debugging independently of AST_DEVMODE and REF_DEBUG. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3593/ ........ Merged revisions 416806 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_endpoint_identifier_ip.c, main/acl.c, include/asterisk/netsock2.h, include/asterisk/acl.h, main/netsock2.c: pjsip cli: Change Identify to show CIDR notation instead of netmasks. * Added ast_sockaddr_cidr_bits() to count the 1 bits in an ast_sockaddr. * Added ast_ha_join_cidr() which uses ast_sockaddr_cidr_bits() for the netmask instead of ast_sockaddr_stringify_addr. * Changed res_pjsip_endpoint_identifier_ip to call ast_ha_join_cidr() instead of ast_ha_join() for the CLI output. This is a CLI change only. AMI was not affected. Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3652/ ........ Merged revisions 416737 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-19 19:40 +0000 [r416736] Kinsey Moore * /, main/bridge.c, res/parking/parking_tests.c, channels/sip/reqresp_parser.c, main/logger.c, main/test.c: Fix build warnings with TEST_FRAMEWORK enabled ........ Merged revisions 416732 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416733 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416734 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-19 16:04 +0000 [r416589-416670] George Joseph * pbx/pbx_lua.c, /: Remove the problematic and unneeded AST_MODFLAG_GLOBAL_SYMBOLS from pbx_lua.c AST_MODFLAG_GLOBAL_SYMBOLS was causing the module to be incorrectly loaded before pbx_config. pbx_config was therefore blowing away contexts that were created by pbx_lua. With AST_MODFLAG_DEFAULT the load order is now correct and contexs are being properly merged. AST_MODFLAG_GLOBAL_SYMBOLS was not needed anyway since no other modules needed its global symbols that early. ASTERISK-23818 #close Reported by: Dennis Guse Tested by: Dennis Guse Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3629/ ........ Merged revisions 416668 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416669 from http://svn.asterisk.org/svn/asterisk/branches/12 * configs/extensions.lua.sample, /: Update extensions.lua.sample with naming conflict guidance. The sample extensions.lua was causing pbx_lua to fail to load when parsing 'app.goto("default", "s", 1)' because in Lua 5.2, 'goto' is now a reserved word. This patch adds guidance to extensions.lua.sample and changed 'app.goto("default", "s", 1)' to 'app.['goto']("default", "s", 1)'. ASTERISK-23844 #close Reported by: rnewton Tested by: gtjoseph Review: https://reviewboard.asterisk.org/r/3627/ ........ Merged revisions 416581 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416582 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-18 04:22 +0000 [r416561] Matthew Jordan * /, main/stasis_channels.c: stasis_channels: Update the stasis cache if manager variables are needed In r416211, the publishing of variable changes was modified such that a cached channel snapshot was used if manager variables were not requested with each AMI event. This was done to reduce the amount of channel snapshots created. However, an assumption was made that generating a channel snapshot and publishing the snapshot to the channel topic was sufficient to ensure that the cache would be updated; this is not the case. The channel snapshot type must be used to force a snapshot update. This patch updates the publication of channel variables such that the cache is updated prior to publication of the channel variable message if manager variables are in use. This ensures that all AMI events receive the variable update when they are supposed to. Note that this issue was caught by the Asterisk Test Suite (go go testing) ........ Merged revisions 416557 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-17 18:45 +0000 [r416444-416503] Mark Michelson * /, funcs/func_strings.c: Allow the PUSH and UNSHIFT functions to set inheritable channel variables. ........ Merged revisions 416500 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416501 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416502 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pidf_body_generator.c, /, res/res_pjsip_xpidf_body_generator.c: Fix string growth algorithm for XML presence bodies. pjpidf_print() does not return < 0 if there is not enough room for the document to be printed. Rather, it returns 39, the length of the XML prolog. The algorithm also had a bug in that it would return if it attempted to grow the string larger. ........ Merged revisions 416442 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-17 16:33 +0000 [r416443] Kinsey Moore * res/res_musiconhold.c, /: MoH: Don't restart stream on repeated start calls Currently, music on hold will stop and then start again from the beginning if ast_moh_start() is called multiple times. This can happen if a call is put on hold repeatedly (the channel receives multiple HOLD control frames) and can be triggered from ARI by starting MoH on a channel multiple times. This is fairly jarring/annoying to users. This change prevents MoH from being restarted if the requested music class is the same as the one currently playing. This includes an extra check to prevent the errors previously experienced in the testsuite and has 100+ test runs behind it. Review: https://reviewboard.asterisk.org/r/3615/ ........ Merged revisions 416439 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416440 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416441 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-16 18:27 +0000 [r416416] Richard Mudgett * channels/chan_dahdi.c, configs/chan_dahdi.conf.sample, channels/sig_ss7.h, configure, channels/chan_dahdi.h, configure.ac, UPGRADE.txt, configs/ss7.timers.sample (added), CHANGES, channels/sig_ss7.c: chan_dahdi: Adds support for major update to libss7. * SS7 support now requires libss7 v2.0 or later. The new libss7 is not backwards compatible. * Added SS7 support for connected line and redirecting. * Most SS7 CLI commands are reworked as well as new SS7 commands added. See online CLI help. * Added several SS7 config option parameters described in chan_dahdi.conf.sample. * ISUP timer support reworked and now requires explicit configuration. See ss7.timers.sample. Special thanks to Kaloyan Kovachev for his support and persistence in getting the original patch by adomjan updated and ready for release. SS7-27 #close Reported by: adomjan 2014-06-16 16:22 +0000 [r416394] Kevin Harwell * include/asterisk/http_websocket.h, tests/test_websocket_client.c, res/res_http_websocket.c: res_http_websocket: read/write string fixup There was a problem when reading a string from the websocket. It assumed the received data had a null terminator and tried to write the data to an ast_str. This of course could/would read past the end of the given buffer while writing the data to the internal buffer of ast_str. Modified the the code to correctly place a null terminator on the result string. 2014-06-16 09:04 +0000 [r416339] Igor Goncharovskiy * cel/cel_sqlite3_custom.c, main/db.c, res/res_config_sqlite3.c, cdr/cdr_sqlite3_custom.c, /: We have faced situation when using CDR and CEL by sqlite3 modules. With system having high load (~100 concurrent calls created by sipp) we found many cdr and cel records missed. There is special finction in sqlite3, that make able to fix this situation - sqlite3_wait_timeout, that also can replace awful code cdr_sqlite3 ad cel_sqlite3 modules. Also this function can be used for aastdb and res_config_sqlite3 to avoid missed writes to sqlite db. #ASTERISK-23766 #close Reported by: Igor Goncharovsky Review: https://reviewboard.asterisk.org/r/3559/ ........ Merged revisions 416336 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416337 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416338 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-16 02:40 +0000 [r416267-416319] Matthew Jordan * /, channels/chan_sip.c: channels/chan_sip: Forbid remote bridging if T.38 is negotiated When a framehook is removed - such as the fax gateway framehook - the bridge framework will re-evaluate the bridge mixing technologies to see if it can improve the bridging. When this occurs, get_rtp_info will be called to determine if local or remote bridging can be used. Using remote bridging will cause a fax to fail, as direct media negotiation will cause some small number of packets to not arrive at the remote endpoint. This patch forces local native bridging if T.38 negotiation is in progress or has been established. ........ Merged revisions 416318 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/channel_internal_api.c: channel_internal_api: Publish a snapshot change when linkedids change Snapshots are now not published *quite* as much as they used to. One instance where they are not published any longer is during bridge enter and exit - the state of the channel doesn't change, the bridge does. However, channels are changed when a linkedid is propagated; previously, the channel's state would be updated and published during the bridge enter event. Now this must be explicitly done. ........ Merged revisions 416300 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, tests/test_stasis_endpoints.c: test_stasis_endpoints: Remove expected channel snapshot We no longer publish a channel snapshot when it is associated with an endpoint; after all, the channel itself hasn't changed - the endpoint state has changed. This updates the channel_messages unit test accordingly. ........ Merged revisions 416298 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_musiconhold.c: MoH: Undo commit r416150 (1.8) This patch reverts r416150. When the comparison between mohclass->name and state->class->name is made, you are not guaranteed that (a) state->class is non-NULL or that state or state->class are in a safe state. Crashes caught by the bridges/transfer_capabilities test. ........ Merged revisions 416251 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416252 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416255 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-14 19:26 +0000 [r416237] Corey Farrell * res/res_manager_devicestate.c, res/res_manager_presencestate.c: res_manager_devicestate and res_manager_presencestate missing support level Add MODULEINFO comment block to define support level core for these new modules. Review: https://reviewboard.asterisk.org/r/3620/ 2014-06-13 18:24 +0000 [r416216] Matthew Jordan * res/res_agi.c, res/res_pjsip/pjsip_configuration.c, main/stasis_channels.c, res/ari/resource_channels.c, main/bridge_channel.c, main/pbx.c, main/stasis_cache.c, /, apps/app_meetme.c, main/pickup.c, main/channel_internal_api.c, include/asterisk/channel.h, main/core_local.c, main/aoc.c, main/endpoints.c, main/cel.c, apps/app_queue.c, main/stasis_bridges.c, apps/app_agent_pool.c, main/cli.c, main/channel.c, main/dial.c, main/manager.c, include/asterisk/stasis_channels.h: stasis: Reduce creation of channel snapshots to improve performance During some performance testing of Asterisk with AGI, ARI, and lots of Local channels, we noticed that there's quite a hit in performance during channel creation and releasing to the dialplan (ARI continue). After investigating the performance spike that occurs during channel creation, we discovered that we create a lot of channel snapshots that are technically unnecessary. This includes creating snapshots during: * AGI execution * Returning objects for ARI commands * During some Local channel operations * During some dialling operations * During variable setting * During some bridging operations And more. This patch does the following: - It removes a number of fields from channel snapshots. These fields were rarely used, were expensive to have on the snapshot, and hurt performance. This included formats, translation paths, Log Call ID, callgroup, pickup group, and all channel variables. As a result, AMI Status, "core show channel", "core show channelvar", and "pjsip show channel" were modified to either hit the live channel or not show certain pieces of data. While this is unfortunate, the performance gain from this patch is worth the loss in behaviour. - It adds a mechanism to publish a cached snapshot + blob. A large number of publications were changed to use this, including: - During Dial begin - During Variable assignment (if no AMI variables are emitted - if AMI variables are set, we have to make snapshots when a variable is changed) - During channel pickup - When a channel is put on hold/unhold - When a DTMF digit is begun/ended - When creating a bridge snapshot - When an AOC event is raised - During Local channel optimization/Local bridging - When endpoint snapshots are generated - All AGI events - All ARI responses that return a channel - Events in the AgentPool, MeetMe, and some in Queue - Additionally, some extraneous channel snapshots were being made that were unnecessary. These were removed. - The result of ast_hashtab_hash_string is now cached in stasis_cache. This reduces a large number of calls to ast_hashtab_hash_string, which reduced the amount of time spent in this function in gprof by around 50%. #ASTERISK-23811 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3568/ ........ Merged revisions 416211 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-13 13:11 +0000 [r416149-416153] Kinsey Moore * res/res_musiconhold.c, /: MoH: Don't restart stream on repeated start calls Currently, music on hold will stop and then start again from the beginning if ast_moh_start() is called multiple times. This can happen if a call is put on hold repeatedly (the channel receives multiple HOLD control frames) and can be triggered from ARI by starting MoH on a channel multiple times. This is fairly jarring/annoying to users. This change prevents MoH from being restarted if the requested music class is the same as the one currently playing. Review: https://reviewboard.asterisk.org/r/3615/ ........ Merged revisions 416150 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416151 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416152 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cel.c, /: CEL: Expose parking retreiver in extra field This exposes the retreiver of a parked call under the "retreiver" key of the extra field when this information is available. Review: https://reviewboard.asterisk.org/r/3608/ ........ Merged revisions 416148 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-13 05:16 +0000 [r416071] Richard Mudgett * main/http.c, include/asterisk/tcptls.h, main/tcptls.c, main/manager.c, /, channels/chan_sip.c: AST-2014-007: Fix of fix to allow AMI and SIP TCP to send messages. ASTERISK-23673 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3617/ ........ Merged revisions 416066 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 416067 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 416070 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 21:27 +0000 [r416024] Rusty Newton * main/pbx.c: main/pbx - documentation - enhance 'core show hints' and 'core show hint' help text Adds descriptive help text to 'core show hints' and 'core show hint'. The text describes the various columns for the sake of clarity. It takes into account recent changes to the content displayed by the commands https://reviewboard.asterisk.org/r/3604/ and https://reviewboard.asterisk.org/r/3611/. ASTERISK-23764 Review: https://reviewboard.asterisk.org/r/3610/ 2014-06-12 20:17 +0000 [r415982] Kinsey Moore * res/res_pjsip_pubsub.c, /: Fix build in devmode for GCC 4.10 ........ Merged revisions 415980 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 17:00 +0000 [r415907] Richard Mudgett * include/asterisk/utils.h, main/tcptls.c, main/manager.c, /, channels/chan_sip.c, main/http.c, UPGRADE.txt, main/utils.c, include/asterisk/tcptls.h, res/res_http_websocket.c, configs/http.conf.sample: AST-2014-007: Fix DOS by consuming the number of allowed HTTP connections. Simply establishing a TCP connection and never sending anything to the configured HTTP port in http.conf will tie up a HTTP connection. Since there is a maximum number of open HTTP sessions allowed at a time you can block legitimate connections. A similar problem exists if a HTTP request is started but never finished. * Added http.conf session_inactivity timer option to close HTTP connections that aren't doing anything. Defaults to 30000 ms. * Removed the undocumented manager.conf block-sockets option. It interferes with TCP/TLS inactivity timeouts. * AMI and SIP TLS connections now have better authentication timeout protection. Though I didn't remove the bizzare TLS timeout polling code from chan_sip. * chan_sip can now handle SSL certificate renegotiations in the middle of a session. It couldn't do that before because the socket was non-blocking and the SSL calls were not restarted as documented by the OpenSSL documentation. * Fixed an off nominal leak of the ssl struct in handle_tcptls_connection() if the FILE stream failed to open and the SSL certificate negotiations failed. The patch creates a custom FILE stream handler to give the created FILE streams inactivity timeout and timeout after a specific moment in time capability. This approach eliminates the need for code using the FILE stream to be redesigned to deal with the timeouts. This patch indirectly fixes most of ASTERISK-18345 by fixing the usage of the SSL_read/SSL_write operations. ASTERISK-23673 #close Reported by: Richard Mudgett ........ Merged revisions 415841 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415854 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415896 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 15:50 +0000 [r415839] Scott Griepentrog * /, apps/app_queue.c: app_queue: delayed state can cause early leavewhenempty ringing In app_queue, device state changes arrive in event messages and update the queue member status value. That value is checked in get_member_status() to decide that the caller should leave when there are no available members. Although event messages can be delayed by other activity, there is no adverse affect by lagged status except in one specific case: there is only one available member, it was just rung, and leavewhenempty is enabled set for ringing members. This change adds a direct check of the device state only under this condition where the caller may be dropped incorrectly, resolving this issue without affecting performance of app_queue normally. AST-1248 #close Review: https://reviewboard.asterisk.org/r/3595/ Reported by: Thomas Arimont ........ Merged revisions 415833 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415835 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415836 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 15:39 +0000 [r415834] Jonathan Rose * apps/app_mixmonitor.c, /, UPGRADE.txt: MixMontior: Add class authorization requirements to MixMonitor AMI commands MixMonitor AMI commands StartMixMonitor and StopMixMonitor lacked class authorization. StopMixMonitor now requires that the manager user either have the call or system class authorization. StartMixMonitor is a slightly larger issue since it can execute shell commands if the right arguments are passed into it, and we consider this a permission escalation. A security release will be issued for problem this shortly. ASTERISK-23609 #close Reported by: Corey Farrell ........ Merged revisions 415825 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415832 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 14:39 +0000 [r415813] Kevin Harwell * res/res_pjsip_pubsub.c, /: res_pjsip_pubsub: unauthenticated remote crash in PJSIP pub/sub framework A remotely exploitable crash vulnerability exists in the PJSIP channel driver's pub/sub framework. If an attempt is made to unsubscribe when not currently subscribed and the endpoint's "sub_min_expiry" is set to zero, Asterisk tries to create an expiration timer with zero seconds, which is not allowed, so an assertion raised. The fix was to reject a subscription that is attempting to unsubscribe when not being already subscribed. Asterisk now checks for this situation appropriately and responds with a 400 instead of crashing. AST-2014-005 ASTERISK-23489 #close ........ Merged revisions 415812 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 14:15 +0000 [r415795] Mark Michelson * res/res_pjsip.c, /: Fix potential deadlock situation in res_pjsip. SIP transaction timeouts are handled in the PJSIP monitor thread. When this happens on a subscription, and the subscription is destroyed, the subscription destruction is dispatched synchronously to the threadpool. The issue is that the PJSIP dialog is locked by the monitor thread, and then the dispatched task attempts to lock the dialog. This leads to a deadlock that causes SIP traffic to no longer be accepted on the Asterisk server. The fix here is to treat the monitor thread as if it were a threadpool thread when it attempts to dispatch synchronous tasks. This way, the dispatched task turns into a simple function call within the same thread, and the locking issue is averted. AST-2014-008 ASTERISK-23802 #close ........ Merged revisions 415794 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 11:34 +0000 [r415767] Joshua Colp * res/res_pjsip.c, res/res_pjsip_pubsub.c, res/res_pjsip_exten_state.c, include/asterisk/res_pjsip.h, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip_pubsub.exports.in, /, contrib/ast-db-manage/config/versions/c6d929b23a8_create_pjsip_subscription_persistence_.py (added), res/res_pjsip_mwi.c: res_pjsip_pubsub: Persist subscriptions in sorcery so they are recreated on startup. This change makes res_pjsip_pubsub persist inbound subscriptions in sorcery. By default this uses the local astdb but it can also be configured to store within an outside database. When Asterisk is started these subscriptions are recreated if they have not expired. Notifications are sent to the devices which have subscribed and they are none the wiser that the system has restarted. Review: https://reviewboard.asterisk.org/r/3598/ ........ Merged revisions 415766 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-12 07:52 +0000 [r415749] Walter Doekes * UPGRADE.txt, contrib/scripts/safe_asterisk, Makefile, /: safe_asterisk: Overwrite old safe_asterisk on make install. From now on, make install will overwrite safe_asterisk with the latest version. You need to move any local modifications to files inside /etc/asterisk/startup.d, if you have any. See also commits r394939 and r397938. ASTERISK-21965 #close Patches: safe_asterisk.patch uploaded by jkister (License 6232, modified by me) ........ Merged revisions 415748 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-11 23:01 +0000 [r415730] Richard Mudgett * main/format.c, /: format.c: Fix misuse of hash container function. The supplied hash function to a container must be idempotent given the object's key value to figure out which container bucket the object belongs in. Returning a random number or the current container count is not idempotent. The "computed hash" value doesn't help find the object later in those cases. * Fixed the format_list container to actually be a list since that is how the container is used. Conceptually, if more than 283 formats were added to the format_list then odd things may have happened before the fix. ........ Merged revisions 415728 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415729 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-11 20:22 +0000 [r415698-415715] Scott Griepentrog * main/pbx.c: CLI: correct presence information on core show hints Adds presence to core show hint and changes presence string conversion to use the correct function. ASTERISK-23858 #close Review: https://reviewboard.asterisk.org/r/3611/ * main/pbx.c: CLI: add presence information to core show hints Adds presence state value to output of core show hints. Also reformats the output slightly so it doesn't use as much space as it would otherwise. Was: 1000@demo : SIP/1000 State:Unavailable Watchers 0 Now: 1000@demo : SIP/1000 State:Unavailable Presence:Idle Watchers 0 AFS-53 #close Review: https://reviewboard.asterisk.org/r/3604/ 2014-06-10 18:32 +0000 [r415679] Kinsey Moore * main/channel.c, /: Fix build in dev mode due to signed/unsigned mismatch ........ Merged revisions 415678 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-10 16:06 +0000 [r415659] Jonathan Rose * main/message.c, /, res/res_pjsip_notify.c: PJSIP: PJSIPNotify - Strip content-length headers and add documentation Documentation for how to add custom headers/content to notifies created with the PJSIPNotify manager action was a little sparse and it also wasn't vetting application of Content-length headers like its chan_sip equivalent was (so two Content-length headers could be applied... and PJSIP determines the content length anyway, so it just opens people up for error). This patch also flips the variable order so that the variables are interpreted in the same order as they are put in the AMI action. Review: https://reviewboard.asterisk.org/r/3587/ ........ Merged revisions 415658 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-10 09:28 +0000 [r415630] Alexandr Anikin * addons/chan_ooh323.c, /: chan_ooh323: fix loading module failure if there no accessible h323_log or ooh323 config file change return 1 to return AST_MODULE_LOAD_FAILURE on module load routine few cosmetic changes ASTERISK-23814 #close (closes issue ASTERISK-23814) Reported by: Igor Goncharovsky Patches: ASTERISK-23814-ast11.patch ........ Merged revisions 415599 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415602 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-09 20:21 +0000 [r415580] Mark Michelson * res/res_pjsip_header_funcs.c, /: chan_pjsip: Fix bug where custom SIP headers could be duplicated on outgoing INVITEs. When using PJSIP_HEADER() to add custom headers to outgoing INVITE requests, certain situations could result in the headers being duplicated. For instance, if the request were retransmitted, or if the INVITE were re-sent with authentication credentials, the custom headers would be re-added to the request. The fix here is to, after adding the custom headers to the outbound INVITE, remove the datastore that holds the custom headers to add. This way, there is no risk in accidentally adding them if the session supplement is called into a second or third time. ........ Merged revisions 415579 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-09 12:12 +0000 [r415524] Walter Doekes * /, UPGRADE.txt, contrib/scripts/safe_asterisk: safe_asterisk: Cleanup additions to r415132. * Replaced a stray echo that should've been a message call in safe_asterisk. This replaces a conditional log message by a slightly different message. Please update your log parsing scripts. * Made the $NOTIFY mail Subject more verbose by adding the machine name and exitstatus. (Note that a 'make install' still won't overwrite your old safe_asterisk if it exists. See ASTERISK-21965.) ASTERISK-23492 #close ........ Merged revisions 415521 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415522 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415523 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-09 03:50 +0000 [r415466] Corey Farrell * /, main/autoservice.c: autoservice: stop thread on graceful shutdown This change adds thread shutdown to autoservice for graceful shutdowns only. ast_register_cleanup is backported to 1.8 to allow this. The logger callid is also released on shutdown in 11+. ASTERISK-23827 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3594/ ........ Merged revisions 415463 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415464 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415465 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-08 18:12 +0000 [r415444] Matthew Jordan * include/asterisk/channel.h, bridges/bridge_native_rtp.c, main/bridge_channel.c, main/channel.c, main/pbx.c, /, main/framehook.c, main/bridge_after.c: bridges/bridge_native_rtp: Reconfigure bridge on removal of framehook This patch is a re-do of r414122. When r414122 was merged, a major problem with it was uncovered. UNBRIDGE soft hangup flags have a catastrophic effect on the pbx core if they leak out from the bridge layer: the channel gets hung up. With the number of threads involved in a blind transfer, and with the initial patch, it was likely that this would occur. This caused a large number of test failures This patch is nearly identical with the one proposed in r414122, save for the following changes: - We explicitly clear the UNBRIDGE flag when setting an after goto on a channel in a bridge - Defensively, if we encounter an UNBRIDGE flag in the pbx core, we handle it https://reviewboard.asterisk.org/r/3585/ ........ Merged revisions 415443 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-07 00:42 +0000 [r415428] Richard Mudgett * include/asterisk/bridge.h, /: bridge.h: Remove redundant struct ast_bridge_channel forward declaration. ........ Merged revisions 415427 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-06 21:44 +0000 [r415411] Jonathan Rose * include/asterisk/manager.h, main/config.c, main/manager.c, /, channels/chan_sip.c, include/asterisk/config.h: chan_sip: Fix order of variables specified in SIPNotify action Prior to this patch, sequential variables would be ordered in reverse from the order specified in the manager action. Review: https://reviewboard.asterisk.org/r/3588/ ........ Merged revisions 415359 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415390 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415410 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-06 20:45 +0000 [r415358] Kevin Harwell * main/uri.c, tests/test_websocket_client.c: core uri: Custom uri parsing error when no query parameters If using the custom URI parsing code (not external uriparser lib) and there was no query parameters the resulting pointer would be NULL and then an attempt was made to subtract from it. The pointer is now set to a valid value if there is no query parameter(s). Also, in the 'ast_uri_make_host_with_port' function when setting the terminator on the resulting string it was writing it one past the end of allocated memory. It now writes the string terminator appropriately. 2014-06-06 19:13 +0000 [r415343] Kinsey Moore * /, res/res_pjsip_sdp_rtp.c: PJSIP: Remove premature write of raw formats Currently, there are situations that can occur when using chan_pjsip and certain dialplan applications (notably ChanSpy()) that can cause the channel to get no audio with scrolling warnings about format mismatches. This is caused by a failure to update translation paths on a mid-call native format update since the raw formats have already been updated by res_pjsip_sdp_rtp.c in set_caps(). Removing the premature raw format updates allows the translation paths to be setup correctly and the raw read and write formats with them. AFS-63 #close ........ Merged revisions 415342 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-06 14:12 +0000 [r415319] George Joseph * tests/test_astobj2.c, main/astobj2_private.h (added), main/astobj2.c, main/astobj2_container_private.h (added), main/astobj2_container.c (added), main/astobj2_hash.c (added), main/astobj2_rbtree.c (added), /, include/asterisk/astobj2.h: Split astobj2.c into more maintainable components. Split astobj2.c into the following files to improve maintainability. astobj2.c - object primitives, object primitive misc and initialization code. astobj2_private.h - internal object declarations needed by the containers. astobj2_container.c - generic conainer and container misc code. astobj2_container_hash.c - hash container specific code. astobj2_container_rbtree.c - rbtree container specific code. astobj2_container_private.h - generic container definitions and rtti prototypes. https://reviewboard.asterisk.org/r/3576/ ........ Merged revisions 415317 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-06 12:49 +0000 [r415302] Rusty Newton * /, configs/cli_aliases.conf.sample: configs/cli_aliases.conf: Two new aliases, plus enhancements for context names. Changed naming of included alias templates to avoid confusion between version names. For example, asterisk12 was for asterisk 1.2, so I changed it to asterisk_1dot2, so that later we can use asterisk_12 for Asterisk 12. Added alias for "features reload" to the template for Asterisk 11 style syntax template, as features reload was removed in 12, but you can still do "module reload features" Added alias for "pjsip reload" to the friendly template. It is shorter than "module reload res_pjsip.so" and if some are like me; I constantly forget that reloading chan_pjsip doesn't parse config. Remembering "pjsip reload" is just easier. ASTERISK-23654 #close ASTERISK-23654 #comment Fixed by adding two new aliases and enhancements for context names. Review: https://reviewboard.asterisk.org/r/3572/ ........ Merged revisions 415301 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-05 19:04 +0000 [r415231-415288] Richard Mudgett * main/config.c: config: Fix indentation and missing curlies in config_text_file_load(). * main/config.c, /: config: Fix config files not reloading when only an included file changes. The twisted logic determining if a config file should be reloaded was mostly broken and disabled. The incorrect test that ASTERISK-23383 fixed actually reenabled the broken logic. The incorrect test was causing the timestamp to always be cleared which caused config files with includes to always be reloaded. * Made wildcard includes always cause a reload. Determining if a file was deleted cannot be determined without restructuring the cache to determine if any files are missing from the last files actually loaded. Also without refactoring config_text_file_load(), the glob loop couldn't check more than one file for changes anyway. * Made remove the cache entry if the file no longer exists when trying to get its timestamp or it is no longer a regular file. This fixes the corner case where the file was loaded, then deleted, then the config reloaded, then the file restored with the same timestamp, and then the config reloaded again. * Made remove the cache entry include list when actually loading the file. This gets rid of any stale includes the file had from the last time the file was loaded. ASTERISK-23683 #close Reported by: tootai Review: https://reviewboard.asterisk.org/r/3575/ ........ Merged revisions 415225 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415229 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415230 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-05 17:22 +0000 [r415223] Kevin Harwell * tests/test_uri.c (added), include/asterisk/http_websocket.h, main/http.c, main/uri.c (added), tests/test_websocket_client.c (added), res/res_http_websocket.c, include/asterisk/http.h, include/asterisk/uri.h (added), res/res_http_websocket.exports.in: res_http_websocket: Create a websocket client Added a websocket server client in Asterisk. Asterisk has a websocket server, but not a client. The ability to have Asterisk be able to connect to a websocket server can potentially be useful for future work (for instance this could allow ARI to connect back to some external system, although more work would be needed in order to incorporate that). Also a couple of things to note - proxy connection support has not been implemented and there is limited http response code handling (basically, it is connect or not). Also added an initial new URI handling mechanism to core. Internet type URI's are parsed into a data structure that contains pointers to the various parts of the URI. (closes issue ASTERISK-23742) Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/3541/ 2014-06-05 14:49 +0000 [r415208] Matthew Jordan * /, apps/app_confbridge.c: app_confbridge: Allow muting of users waiting to enter a ConfBridge Prior to this patch, users waiting to enter a ConfBridge were not considered when muted via the CLI or via AMI. Instead, a confusing message would be emitted stating that the channel did not exist. This patch allows a user to be muted when waiting to enter a ConfBridge conference. This is equivalent to start when muted, only toggled via the CLI or AMI. Review: https://reviewboard.asterisk.org/r/3582 #ASTERISK-23824 #close patches: rb3582.patch uploaded by tm1000 (License 6524) ........ Merged revisions 415206 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415207 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-05 11:59 +0000 [r415192] Kinsey Moore * /, channels/chan_pjsip.c: PJSIP: Send initial connected line information This makes chan_pjsip send connected line information when it is called so that connected line information is available on the connected channel. (closes issue DPMA-442) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/3584/ ........ Merged revisions 415191 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-04 20:16 +0000 [r415173] Walter Doekes * /, contrib/scripts/safe_asterisk: safe_asterisk: Cleanup and debian compatibility. Cleans up the safe_asterisk script and adds the ASTSAFE_FOREGROUND option that allows the debian asterisk init script to capture the right pid. * Drop the vim #modeline which wasn't used. Use test consistently without the odd configure xno syntax. Double quote all paths. General cleanup. * Don't output message()s to the console but only to TTY if set. * Allow TTY to be "no" as well as empty (debian compatibility with debian/patches/safe_asterisk-config). * Add option to export ASTSAFE_FOREGROUND=1 from the init script that calls this to disable backgrounding. Debian uses a similar method in debian/patches/safe_asterisk-nobg). ASTERISK-23492 #close Review: https://reviewboard.asterisk.org/r/3574/ ........ Merged revisions 415132 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415171 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415172 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-04 14:13 +0000 [r415116-415118] Matthew Jordan * /, channels/chan_pjsip.c: chan_pjsip: Add debug in RTP Engine glue callback This patch adds some debug statements that aid with determining why a direct media request may or may not be initiated. ........ Merged revisions 415117 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_session.c, /: res_pjsip_session: Add debug statement for session refreshes This small patch adds a debug level 3 statement indicating how a session refresh is being sent - either as a re-INVITE or as an UPDATE - and where the session refresh is going. ........ Merged revisions 415115 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-04 07:27 +0000 [r415080] Corey Farrell * /, apps/confbridge/include/confbridge.h, apps/app_confbridge.c: app_confbridge: Correct verification of conference name length Conference names were not checked for maximum length, allowing unexpected behaviour. This change adds checking to ensure the maximum length is not exceeded. The maximum length is also changed from 32 to AST_MAX_EXTENSION. ASTERISK-23035 #close Reported by: Iñaki Cívico Tested by: Iñaki Cívico Patches: confbridge-enforce_max-1.8.patch uploaded by coreyfarrell (license 5909) confbridge-enforce_max-11up.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 415060 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 415066 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 415078 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-03 07:36 +0000 [r415000] Walter Doekes * /, funcs/func_odbc.c: func_odbc: Fix fixed size buffers fix (r414968). The change that removed the fixed size buffers in odbc-related code -- removing arbitrary column width limits -- was incomplete. This change adds: no segfault on writesql without insertsql and return value checks after strdup. While I was in the vicinity I cleaned up the linefeeds in the odbc function descriptions, moved some code for clarity, removed some blobs and noted (but didn't fix) that the 'odbc write ... exec' CLI command doesn't behave as the dialplan equivalent when insertsql= is used. ASTERISK-23582 #close Review: https://reviewboard.asterisk.org/r/3579/ ........ Merged revisions 414997 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414998 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414999 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-06-01 15:32 +0000 [r414976] Joshua Colp * /, bridges/bridge_native_rtp.c: bridge_native_rtp: Take the bridge type choice of both channels into account. The bridge_native_rtp module currently uses the bridge result of the first channel that joins a bridge as the ultimate result. This means that if the first channel has direct media enabled but the second does not a direct media bridge will still occur. This change makes it so that both sides are taken into account. If either side forbids the bridge or responds with a local bridge result then either a generic or local bridge occurs. ASTERISK-23541 #close Reported by: Justin E Review: https://reviewboard.asterisk.org/r/3577/ ........ Merged revisions 414975 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-30 14:53 +0000 [r414949] Kinsey Moore * res/res_pjsip_refer.c, /: PJSIP: Prevent crash on blind transfer Blind transfers don't go too well with NULL channels which can occur if the channel has already been transferred away. (closes issue ASTERISK-23718) Reported by: Jonathan Rose ........ Merged revisions 414948 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-30 12:42 +0000 [r414883-414935] Matthew Jordan * main/audiohook.c, CHANGES, res/ari/ari_model_validators.c, res/ari/ari_model_validators.h, funcs/func_talkdetect.c (added), include/asterisk/stasis_channels.h, rest-api/api-docs/events.json, /, main/stasis_channels.c: TALK_DETECT: A channel function that raises events when talking is detected This patch adds a new channel function TALK_DETECT that, when set on a channel, causes events indicating the start/stop of talking on a channel to be emitted to both AMI and ARI clients. The function allows setting both the silence threshold (the length of silence after which we decide no one is talking) as well as the talking threshold (the amount of energy that counts as talking). Parameters can be updated on a channel after talk detection has been enabled, and talk detection can be removed at any time. The events raised by the function use a nomenclature similar to existing AMI/ARI events. For AMI: ChannelTalkingStart/ChannelTalkingStop For ARI: ChannelTalkingStarted/ChannelTalkingFinished Review: https://reviewboard.asterisk.org/r/3563/ #ASTERISK-23786 #close Reported by: Matt Jordan ........ Merged revisions 414934 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/config.c, /: main/config.c: AMI action UpdateConfig EmptyCat clears all categories When invoking UpdateConfig AMI action with Action set to EmptyCat, Asterisk will make all categories empty in the config but the one requested with a Cat variable. This is due to a bug in ast_category_empty (main/config.c) that makes an incorrect comparison for a category name. This patch corrects the comparison such that only the requested category is cleared. Review: https://reviewboard.asterisk.org/r/3573/ #ASTERISK-23803 #close Reported by: zvision patches: manager.c.diff uploaded by zvision (License 5755) ........ Merged revisions 414880 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414881 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414882 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-29 18:51 +0000 [r414861] Kinsey Moore * main/pbx.c, /: PBX: Prevent incorrect hint parsing Dynamic and pattern matching hints should not be checked for their last known state until they are instantiated by subscribers. (closes issue AFS-56) Reported by: John Hardin Patch AFS-56-pbx.diff submitted by Matt Jordan (license 6283) ........ Merged revisions 414813 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414859 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414860 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-28 22:54 +0000 [r414798] Matthew Jordan * main/loader.c, include/asterisk/logger.h, res/res_config_curl.c, cel/cel_odbc.c, res/res_config_odbc.c, bridges/bridge_builtin_features.c, main/optional_api.c, main/logger.c, main/config_options.c, cdr/cdr_odbc.c, apps/app_mixmonitor.c, main/asterisk.c, res/res_odbc.c, main/xmldoc.c, apps/app_voicemail.c, cel/cel_pgsql.c, channels/chan_unistim.c, res/res_config_pgsql.c, main/pbx.c, cdr/cdr_sqlite3_custom.c, res/res_fax.c, main/bridge.c, apps/app_waitforsilence.c, cdr/cdr_adaptive_odbc.c, res/parking/parking_applications.c, cdr/cdr_pgsql.c, res/res_jabber.c: Logger/CLI/etc.: Fix some aesthetic issues; reduce chatty verbose messages This patch addresses some aesthetic issues in Asterisk. These are all just minor tweaks to improve the look of the CLI when used in a variety of settings. Specifically: * A number of chatty verbose messages were removed or demoted to DEBUG messages. Verbose messages with a verbosity level of 5 or higher were - if kept as verbose messages - demoted to level 4. Several messages that were emitted at verbose level 3 were demoted to 4, as announcement of dialplan applications being executed occur at level 3 (and so the effects of those applications should generally be less). * Some verbose messages that only appear when their respective 'debug' options are enabled were bumped up to always be displayed. * Prefix/timestamping of verbose messages were moved to the verboser handlers. This was done to prevent duplication of prefixes when the timestamp option (-T) is used with the CLI. * Verbose magic is removed from messages before being emitted to non-verboser handlers. This prevents the magic in multi-line verbose messages (such as SIP debug traces or the output of DumpChan) from being written to files. * _Slightly_ better support for the "light background" option (-W) was added. This includes using ast_term_quit in the output of XML documentation help, as well as changing the "Asterisk Ready" prompt to bright green on the default background (which stands a better chance of being displayed properly than bright white). Review: https://reviewboard.asterisk.org/r/3547/ 2014-05-28 20:53 +0000 [r414781] Rusty Newton * /, configs/pjsip.conf.sample: pjsip.conf: privkey_file should be priv_key_file, mediaencryption=yes should be mediaencryption=sdes privkey_file was missed in the snake case update. An example included an invalid value for the mediaencryption option. ........ Merged revisions 414780 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-28 17:46 +0000 [r414764-414766] Matthew Jordan * 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, rest-api/api-docs/playbacks.json, rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, rest-api/resources.json, include/asterisk/manager.h, rest-api/api-docs/bridges.json, rest-api/api-docs/recordings.json: AMI/ARI: Update version numbers Update the semantic versioning of ARI to 1.3.0 and AMI to 2.3.0 to account for backwards compatible changes going from 12.2.0 to 12.3.0. ........ Merged revisions 414765 from http://svn.asterisk.org/svn/asterisk/branches/12 * contrib/ast-db-manage/cdr/env.py, /: ast-db-manage/cdr/env.py: Don't fail if a config file can't be loaded When generating SQL files via the repotools alembic_creator.py script, a configuration object is used programatically with SQLAlechemy, as opposed to a configuration file. This patch ignores failures to interpret a config file, as ... there isn't one in this case. ........ Merged revisions 414763 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-28 16:56 +0000 [r414748-414750] Richard Mudgett * res/res_pjsip_session.c, include/asterisk/res_pjsip_session.h, /, res/res_pjsip_t38.c: res_pjsip_session: Fix leaked video RTP ports. Simply enabling PJSIP to negotiage a video codec (e.g., h264) would leak video RTP ports if the codec were not negotiated by an incoming call. * Made add_sdp_streams() associate the handler with the media stream if the handler handled the media stream. Otherwise, when the ast_sip_session_media object was destroyed it didn't know how to clean up the RTP resources. * Fixed sdp_requires_deferral() associating the handler with the media stream when deciding if the SDP processing needs to be deferred for T.38. Like the leaked video RTP ports, the T.38 handler needs to clean up allocated resources from deciding if SDP processing needs to be deffered. * Cleaned up some dead code in handle_incoming_sdp() and sdp_requires_deferral(). ASTERISK-23721 #close Reported by: cervajs Review: https://reviewboard.asterisk.org/r/3571/ ........ Merged revisions 414749 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, CHANGES, apps/app_agent_pool.c: app_agent_pool: Return to dialplan if the agent fails to ack the call. Improvements to the agent pool functionality. * AgentRequest no longer hangs up the caller if the agent fails to connect with the caller. It now continues in the dialplan. * AgentRequest returns AGENT_STATUS set to NOT_CONNECTED if the agent failed to connect with the call. Most likely because the agent did not acknowledge the call in time or got disconnected. * The agent alerting play file configured by the agent.conf custom_beep option can now be disabled by setting the option to an empty string. The agent is effectively alerted to a call presence when MOH stops. * Fixed bridge reference leak when the agent connects with a caller. ASTERISK-23499 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3551/ ........ Merged revisions 414747 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-28 11:37 +0000 [r414696] Joshua Colp * res/res_config_odbc.c, /, funcs/func_odbc.c: res_config_odbc: Use dynamically sized buffers to store row data so values do not get truncated. ASTERISK-23582 #close ASTERISk-23582 #comment Reported by: Walter Doekes Review: https://reviewboard.asterisk.org/r/3557/ ........ Merged revisions 414693 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414694 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414695 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-28 09:43 +0000 [r414567-414679] Walter Doekes * /, channels/chan_unistim.c: chan_unistim: Unlock mutex in rare OOM condition. #ASTERISK-23792 #close Reported by: Peter Whisker Review: https://reviewboard.asterisk.org/r/3567/ ........ Merged revisions 414677 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414678 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip: Start session timer at 200, not at INVITE. Asterisk started counting the session timer at INVITE while the other end correctly started at 200. This meant that for short session-expiries (90 seconds) combined with long ringing times (e.g. 30 seconds), asterisk would wrongly assume that the timer was hit before the other end thought it was time to send a session refresh. This resulted in prematurely ended calls. This changes the session timer to start counting first at 200 like RFC says it should. (Also removed a few excess NULL checks that would never hit, because if they did, asterisk would have crashed already.) ASTERISK-22551 #close Reported by: i2045 Review: https://reviewboard.asterisk.org/r/3562/ ........ Merged revisions 414620 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414628 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414636 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_config_odbc.c, /: res_config_odbc: Fix old and new ast_string_field memory leaks. The ODBC realtime driver uses ^NN parameter encoding to cope with the special meaning of the semi-colon. A semi-colon in a field is interpreted as if the key was supplied twice, something which isn't otherwise possible with fixed database columns. E.g. allow=alaw;ulaw is parsed as allow=alaw and allow=ulaw. A literal semi-colon is rewritten to ^3B when stored in the database. The module uses a stringfield to efficiently store the encoded parameters. However, this stringfield wasn't always freed in some off-nominal cases. Commit r413241 fixed initialization so the encoding for INSERT and DELETE queries wouldn't crash. (Only SELECTs and UPDATEs worked apparently.) But that commit forgot the frees. This change cleans that up. Review: https://reviewboard.asterisk.org/r/3555/ ........ Merged revisions 414564 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414565 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414566 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-25 02:37 +0000 [r414543] Matthew Jordan * /, main/core_unreal.c: core_unreal: Prevent double free of core_unreal pvt When a channel is destroyed (such as via ast_channel_release in off nominal paths in core_unreal), it will attempt to free (via ast_free) the channel tech pvt. This is problematic for a few reasons: 1. The channel tech pvt is an ao2 object in core_unreal. Free'ing the pvt directly is no good. 2. The channel tech pvt's reference count is dropped just prior to calling ast_channel_release, resulting in the pvt's destruction. Hence, the channel destructor is free'ing an invalid pointer. This patch keeps the dropping of the reference count, but sets the pvt to NULL on the channel prior to releasing it. This models what would occur if the channel was hung up directly. ........ Merged revisions 414542 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-23 17:36 +0000 [r414529] Matthew Jordan * tests/test_cel.c, /: test_cel: Fix unit tests broken due to event def changes from res_corosync This patch instructs test_cel to skip any IE types it doesn't care about. The addition of the raw and bitfield types caused the tests to fail. ........ Merged revisions 414528 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-23 14:36 +0000 [r414475] Kinsey Moore * main/event.c, /: Fix signed/unsigned build warnings ........ Merged revisions 414474 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-22 16:19 +0000 [r414417] Richard Mudgett * /, apps/app_meetme.c: app_meetme: Don't interrupt MOH for waitmarked users. Occasionally, when the last marked user leaves the conference, waitmarked users don't get MOH if MOH is supposed to be played while a waitmarked user is waiting for another marked user. * Made not interrupt MOH when the user is a waitmarked user. The waitmarked user doesn't need to hear any leave announcements from the conference as the user would have already heard different leave announcements if they were enabled. Apparently DAHDI occasionally sends unending non-silent streams to these users or a normal user still in the conference has continuous high background noise. These non-silent streams cause MOH to be suspended while the never ending "announcement" is played. Issue caused by ASTERISK-13680. AST-1349 #close Reported by: Tyler Stewart Review: https://reviewboard.asterisk.org/r/3543/ ........ Merged revisions 414401 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414402 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414404 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-22 16:09 +0000 [r414406] Scott Griepentrog * rest-api/api-docs/events.json, /, res/stasis/app.c, res/ari/resource_events.c, include/asterisk/stasis_app.h, include/asterisk/stasis.h, apps/app_userevent.c, res/ari/resource_events.h, res/ari/ari_model_validators.c, CHANGES, main/stasis.c, res/ari/ari_model_validators.h, include/asterisk/stasis_channels.h, res/res_ari_events.c, main/stasis_channels.c, res/res_stasis.c, main/manager_channels.c, main/stasis_endpoints.c: ARI: Add ability to raise arbitrary User Events User events can now be generated from ARI. Events can be signalled with arbitrary json variables, and include one or more of channel, bridge, or endpoint snapshots. An application must be specified which will receive the event message (other applications can subscribe to it). The message will also be delivered via AMI provided a channel is attached. Dialplan generated user event messages are still transmitted via the channel, and will only be received by a stasis application they are attached to or if the channel is subscribed to. This change also introduces the multi object blob mechanism used to send multiple snapshot types in a single message. The dialplan app UserEvent was also changed to use multi object blob, and a new stasis message type created to handle them. ASTERISK-22697 #close Review: https://reviewboard.asterisk.org/r/3494/ ........ Merged revisions 414405 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-22 15:52 +0000 [r414403] Jonathan Rose * include/asterisk/bridge.h, res/parking/parking_bridge_features.c, channels/chan_mgcp.c, res/res_pjsip_refer.c, channels/chan_dahdi.c, channels/sig_analog.c, /, channels/chan_sip.c, main/parking.c, main/bridge.c, main/bridge_basic.c, res/parking/parking_applications.c, include/asterisk/parking.h: res_pjsip_refer: Fix bugs involving Parking/PJSIP/transfers PJSIP would never send the final 200 Notify for a blind transfer when transferring to parking. This patch fixes that. In addition, it fixes a reference leak when performing blind transfers to non-bridging extensions. Review: https://reviewboard.asterisk.org/r/3485/ ........ Merged revisions 414400 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-22 14:02 +0000 [r414331-414348] Matthew Jordan * /, UPGRADE.txt: UPGRADE: Add note for REF_DEBUG flag ........ Merged revisions 414345 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414346 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414347 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_corosync.c, include/asterisk/stasis.h, main/app.c, main/devicestate.c, main/event.c, main/stasis.c, include/asterisk/devicestate.h, include/asterisk/event.h, main/stasis_message.c, /, include/asterisk/event_defs.h: res_corosync: Update module to work with Stasis (and compile) This patch fixes res_corosync such that it works with Asterisk 12. This restores the functionality that was present in previous versions of Asterisk, and ensures compatibility with those versions by restoring the binary message format needed to pass information from/to them. The following changes were made in the core to support this: * The event system has been partially restored. All event definition and event types in this patch were pulled from Asterisk 11. Previously, we had hoped that this information would live in res_corosync; however, the approach in this patch seems to be better for a few reasons: (1) Theoretically, ast_events can be used by any module as a binary representation of a Stasis message. Given the structure of an ast_event object, that information has to live in the core to be used universally. For example, defining the payload of a device state ast_event in res_corosync could result in an incompatible device state representation in another module. (2) Much of this representation already lived in the core, and was not easily extensible. (3) The code already existed. :-) * Stasis message types now have a message formatter that converts their payload to an ast_event object. * Stasis message forwarders now handle forwarding to themselves. Previously this would result in an infinite recursive call. Now, this simply creates a new forwarding object with no forwards set up (as it is the thing it is forwarding to). This is advantageous for res_corosync, as returning NULL would also imply an unrecoverable error. Returning a subscription in this case allows for easier handling of message types that are published directly to an aggregate topic that has forwarders. Review: https://reviewboard.asterisk.org/r/3486/ ASTERISK-22912 #close ASTERISK-22372 #close ........ Merged revisions 414330 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-21 22:24 +0000 [r414297] Richard Mudgett * /, main/core_unreal.c: core_unreal: Only block media frames when a generator is on both ends of an unreal channel. The fix for ASTERISK-12292 was a bit too aggressive. You could have generators pointed at each other on local channels but need to get other kinds of frames such as DTMF or CONNECTED_LINE frames accross. ........ Merged revisions 414269 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414270 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414272 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-21 19:08 +0000 [r414217] Scott Griepentrog * /, funcs/func_strings.c: pbx.c: prevent potential crash from recursive replace() Recurisve usage of replace() resulted in corruption of the temporary string storage and potential crash. By changing the string to be allocated separtely per instance, this is eliminated. ASTERISK-23650 #comment Reported by: Roel van Meer ASTERISK-23650 #close Review: https://reviewboard.asterisk.org/r/3539/ ........ Merged revisions 414214 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414215 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414216 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-19 19:52 +0000 [r414196] Paul Belanger * res/res_stasis_answer.c, /: Replace __ast_answer with ast_raw_answer in app_control_answer While load testing an ARI application, I noticed asterisk was returning HTTP 500 internal server errors on channels/:id/answer. After talking to #asterisk-dev, the issue appeared to be a lack of media flowing after __ast_answer() was called. So now, we call ast_raw_answer instead and no longer wait for media. ASTERISK-23758 #close Review: https://reviewboard.asterisk.org/r/3549/ ........ Merged revisions 414195 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-19 01:10 +0000 [r414123-414138] Matthew Jordan * include/asterisk/channel.h, bridges/bridge_native_rtp.c, main/bridge_channel.c, res/res_pjsip_refer.c, res/res_pjsip_session.c, main/channel.c, /, main/framehook.c: Undo r414123 The Test Suite caught a few problems, undoing until those are resolved * include/asterisk/channel.h, bridges/bridge_native_rtp.c, main/bridge_channel.c, res/res_pjsip_session.c, main/channel.c, /, main/framehook.c: bridge_native_rtp/bridge_channel: Fix direct media issues due to frame hook This patch fixes issues with direct media bridges that occur after a blind transfer. These issues were caught by the (currently failing) pjsip/transfers/blind_transfer/caller_direct_media test. The test currently fails primarily for two reasons: (1) When Bob and Charlie (the transfer target and the transfer destination) enter a bridge together, the framehook remains on the transfer target channel until both channels are in the bridge. As it consumes voice frames, the initial bridge type is a simple bridge. The framehook is removed when both channels are in the bridge; however, this does not currently cause the bridging framework to re-evaluate the bridge. This patch adds a AST_SOFTHANGUP_UNBRIDGE poke to the transfer target channel when a framehook is removed so the bridge can re-evaluate itself. (2) When a channel leaves a native RTP bridge, it may be leaving due to being hung up. Sending a re-INVITE to a channel that is about to be hung up is not nice - in fact, there's a good chance we'll send the BYE request before the channel has had a chance to send back a 200 OK. To be somewhat nicer, this patch adds a function to channel.h that allows the bridging framework to query for exactly why a channel is leaving a bridge via the channel's soft hangup flags. This allows it to only send the re-INVITE if there's a chance the channel will survive the native bridging experience. Review: https://reviewboard.asterisk.org/r/3535/ ........ Merged revisions 414122 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-16 20:06 +0000 [r413994-414070] Richard Mudgett * /, channels/chan_dahdi.c: chan_dahdi: Fix analog dialtone detection. * Check if waitingfordt (waitfordialtone) is enabled in dahdi_read() to allow the DSP to operate early enough to detect dialtone. * Made use the correct variable in my_check_waitingfordt(). ASTERISK-23709 #close Reported by: Steve Davies Patches: dialtone_detect_fix (license #5012) patch uploaded by Steve Davies Review: https://reviewboard.asterisk.org/r/3534/ ........ Merged revisions 414067 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 414068 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414069 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/sig_pri.c, /: sig_pri.c: Pull the pri_dchannel() PRI_EVENT_RING case into its own function. * Populate the CALLERID(ani2) value (and the special CALLINGANI2 channel variable) with the ANI2 value in addition to the PRI specific ANI2 channel variable. * Made complete snapshot staging with the channel lock held. All channel snapshots need to be done while the channel lock is held. ........ Merged revisions 414050 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 414051 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_meetme.c: app_meetme: Fix overwrite of DAHDI conference data structure. Starting a conference recording using the admin menu overwrites the DAHDI conference data structure used to modify the admin user's conference mute mode. * Made no longer pass the user's DAHDI conference data structure into the menu functions. The menu now uses its own DAHDI conference data structure to start the recording channel. * Moved the unlock conf->playlock to before playing the conf-full message. No sense keeping the lock while that prompt is playing. The user is never going to get into the conference at that point. ........ Merged revisions 413991 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413992 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413993 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-14 15:41 +0000 [r413897] Walter Doekes * /, res/res_musiconhold.c: res_musiconhold: Minor cleanup. Fix a few free()'s that should be ast_free()'s. Reverted an old workaround that isn't necessary. Reorder a tiny bit of code. Remove a bit of commented-out code. Review: https://reviewboard.asterisk.org/r/3536/ ........ Merged revisions 413894 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413895 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413896 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-13 18:09 +0000 [r413878] Jonathan Rose * main/netsock2.c, /, channels/chan_sip.c, include/asterisk/netsock2.h: chan_sip: Add TLS and SRTP status to CLI command 'sip show channel' ASTERISK-23564 #close Reported by: Patrick Laimbock Review: https://reviewboard.asterisk.org/r/3474/ ........ Merged revisions 413876 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413877 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-13 13:53 +0000 [r413790-413793] Walter Doekes * res/res_format_attr_h264.c, /: h264: Fix H264 SDP payload format. https://tools.ietf.org/html/rfc3984#section-8.1 says profile-level-id takes 3 bytes in base16 (6 hex digits). This fixes video setup in certain cases. ASTERISK-23664 #close ASTERISK-23664 #comment Patch r3530.patch uploaded by Guillaume Maudoux. Review: https://reviewboard.asterisk.org/r/3530/ ........ Merged revisions 413791 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413792 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/rtp_engine.c: rtp: Fix case typo in H263+ mime. http://tools.ietf.org/html/rfc3555#section-4.2.6 says the canonical mime subtype is "H263-1998", not "h263-1998". Original code was added in r183101 on 2009-03-19 02:26:50 +0100. This fixes issues with Polycom phones. ASTERISK-23665 #close ASTERISK-23665 #comment Patch r3529.patch uploaded by Guillaume Maudoux, backported by me. Review: https://reviewboard.asterisk.org/r/3529/ ........ Merged revisions 413787 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413788 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413789 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-13 00:35 +0000 [r413770-413772] Richard Mudgett * configure.ac, channels/sig_pri.c, /, configure, include/asterisk/autoconfig.h.in: chan_dahdi/sig_pri: Prevent unnecessary PROGRESS events when overlap dialing is enabled. When overlap dialing is enabled, the lack of inband audio available information in the SETUP_ACKNOWLEDGE events causes an interoperability problem with SIP. sig_pri doesn't know if there is dialtone present when a SETUP_ACKNOWLEDGE is received so it assumes it is there and posts an AST_CONTROL_PROGRESS frame. The SIP channel driver then sends out a 183 Session Progress and blocks the desired 180 Ringing message when the ALERTING message comes in. * Made the configure script detect if the installed version of libpri supports the SETUP_ACKNOWLEDGE enhancements. * Using the new API, made generate an AST_CONTROL_PROGRESS frame on an incoming SETUP_ACKNOWLEDGE message when the message indicates inband audio is present instead of assuming that dialtone is present. * Using the new API, made SETUP_ACKNOWLEDGE send out an inband audio available indication only if dialtone is expected. The change also makes the fallback behaviour of sending the PROGRESS message better by sending it only if dialtone is expected. * Changed receiving a PROCEEDING message to not generate an AST_CONTROL_PROGRESS frame if the progress indication ie indicates non-end-to-end-ISDN. This helps interoperability with SIP. * Changed sending a PROCEEDING message in response to an AST_CONTROL_PROCEEDING frame to not indicate inband audio available. It was silly to do so anyway because the channel driver doesn't know if inband audio is even available. This helps interoperability with SIP. This patch and a corresponding change in libpri work together to allow Asterisk to control the inband audio available progress indication ie on the SETUP_ACKNOWLEDGE message when dialtone is present. AST-1338 #close Reported by: Tyler Stewart Review: https://reviewboard.asterisk.org/r/3521/ ........ Merged revisions 413714 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413765 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413771 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/sig_pri.c: Fix compiler warning from GCC 4.10 fixup. ........ Merged revisions 413766 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-12 22:33 +0000 [r413713] Jonathan Rose * apps/app_chanspy.c, /: app_chanspy: Fix a test that was failing on account of r413551 ASTERISK-23381 #close ASTERISK-23381 #comment Reported by: Robert Moss Review: https://reviewboard.asterisk.org/r/3505/ ........ Merged revisions 413710 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413712 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-11 02:09 +0000 [r413651-413682] Joshua Colp * main/bridge_basic.c, include/asterisk/channel.h, bridges/bridge_native_rtp.c, include/asterisk/framehook.h, main/channel.c, /, main/framehook.c: framehooks: Add callback for determining if a hook is consuming frames of a specific type. In the past framehooks have had no capability to determine what frame types a hook is actually interested in consuming. This has meant that code has had to assume they want all frames, thus preventing native bridging. This change adds a callback which allows a framehook to be queried for whether it is consuming a frame of a specific type. The native RTP bridging module has also been updated to take advantange of this, allowing native bridging to occur when previously it would not. ASTERISK-23497 #comment Reported by: Etienne Lessard ASTERISK-23497 #close Review: https://reviewboard.asterisk.org/r/3522/ ........ Merged revisions 413681 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/channel.h, bridges/bridge_native_rtp.c, include/asterisk/framehook.h, main/channel.c, /, main/framehook.c, main/bridge_basic.c: Undoing framehook support. Issues were uncovered by Bamboo. * /, main/framehook.c, main/bridge_basic.c, include/asterisk/channel.h, bridges/bridge_native_rtp.c, include/asterisk/framehook.h, main/channel.c: framehooks: Add callback for determining if a hook is consuming frames of a specific type. In the past framehooks have had no capability to determine what frame types a hook is actually interested in consuming. This has meant that code has had to assume they want all frames, thus preventing native bridging. This change adds a callback which allows a framehook to be queried for whether it is consuming a frame of a specific type. The native RTP bridging module has also been updated to take advantange of this, allowing native bridging to occur when previously it would not. ASTERISK-23497 #comment Reported by: Etienne Lessard ASTERISK-23497 #close Review: https://reviewboard.asterisk.org/r/3522/ ........ Merged revisions 413650 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-09 23:18 +0000 [r413589-413599] Kinsey Moore * /, funcs/func_env.c: Fix 32bit build for func_env ........ Merged revisions 413592 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413595 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413597 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_festival.c, pbx/dundi-parser.c, apps/app_getcpeid.c, main/netsock.c, funcs/func_channel.c, main/audiohook.c, pbx/pbx_config.c, res/res_pjsip_registrar.c, main/xmldoc.c, channels/iax2/firmware.c, apps/app_voicemail.c, main/format.c, cel/cel_pgsql.c, main/rtp_engine.c, main/parking.c, main/bridge.c, res/res_jabber.c, res/res_http_websocket.c, main/config.c, res/res_format_attr_opus.c, main/loader.c, res/parking/parking_bridge.c, main/cdr.c, main/manager.c, include/asterisk/astobj.h, main/bucket.c, apps/app_dumpchan.c, main/app.c, res/res_pjsip/config_transport.c, res/res_pjsip_refer.c, channels/chan_mgcp.c, res/res_rtp_asterisk.c, main/slinfactory.c, main/core_unreal.c, res/res_pjsip_sdp_rtp.c, res/res_crypto.c, main/acl.c, channels/sig_pri.c, res/res_monitor.c, res/res_srtp.c, main/data.c, res/res_corosync.c, channels/sip/config_parser.c, res/res_fax_spandsp.c, apps/app_stack.c, main/asterisk.c, main/udptl.c, res/res_sorcery_config.c, main/security_events.c, res/res_timing_dahdi.c, res/res_pjsip_t38.c, res/res_musiconhold.c, main/taskprocessor.c, res/res_format_attr_h263.c, res/res_xmpp.c, res/res_pktccops.c, funcs/func_hangupcause.c, channels/chan_phone.c, main/manager_bridges.c, cel/cel_odbc.c, channels/chan_skinny.c, channels/chan_motif.c, res/res_agi.c, main/logger.c, funcs/func_srv.c, channels/chan_alsa.c, apps/app_confbridge.c, res/res_pjsip_pubsub.c, channels/sip/include/sip.h, main/sched.c, apps/app_adsiprog.c, main/pbx.c, channels/chan_sip.c, res/res_fax.c, main/aoc.c, res/res_calendar_ews.c, res/parking/parking_bridge_features.c, channels/iax2/parser.c, main/callerid.c, main/file.c, res/res_pjsip/pjsip_configuration.c, main/adsi.c, main/config_options.c, pbx/pbx_dundi.c, funcs/func_iconv.c, main/bridge_channel.c, res/res_odbc.c, channels/chan_pjsip.c, res/parking/parking_manager.c, res/res_calendar.c, /, funcs/func_sysinfo.c, main/utils.c, cdr/cdr_adaptive_odbc.c, res/res_calendar_caldav.c, res/res_stasis_snoop.c, res/res_format_attr_h264.c, main/channel.c, res/ael/pval.c, res/res_ari_model.c, channels/chan_dahdi.c, channels/sig_analog.c, funcs/func_frame_trace.c, res/res_format_attr_silk.c, main/manager_channels.c, apps/app_dial.c, res/res_calendar_icalendar.c, main/translate.c, apps/app_queue.c, channels/chan_jingle.c, res/res_stun_monitor.c, main/abstract_jb.c, res/res_stasis_recording.c, apps/app_sms.c, main/event.c, apps/app_verbose.c, main/dsp.c, channels/chan_unistim.c, main/frame.c, res/res_stasis_playback.c, main/ccss.c, funcs/func_env.c, main/devicestate.c, bridges/bridge_softmix.c, channels/chan_gtalk.c, channels/chan_iax2.c, main/enum.c, main/cli.c, res/res_format_attr_celt.c, apps/confbridge/conf_config_parser.c, main/io.c, channels/pjsip/dialplan_functions.c, res/res_config_odbc.c, res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, formats/format_pcm.c, apps/app_minivm.c, main/stdtime/localtime.c, main/stun.c: Allow Asterisk to compile under GCC 4.10 This resolves a large number of compiler warnings from GCC 4.10 which cause the build to fail under dev mode. The vast majority are signed/unsigned mismatches in printf-style format strings. ........ Merged revisions 413586 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413587 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413588 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-09 18:15 +0000 [r413572] Richard Mudgett * main/http.c: http.c: Remove dead code. 2014-05-09 17:03 +0000 [r413557] Jonathan Rose * apps/app_chanspy.c, /: app_chanspy: Fix a bug where Barge mode could fail If the barge audiohook was attached prior to the spyee and its peer actually being bridged, the audiohook would not be applied and the connected peer would not be able to hear audio from the spy when the spy is in barge mode. (closes issue ASTERISK-23381) Reported by: Robert Moss Review: https://reviewboard.asterisk.org/r/3505/ ........ Merged revisions 413551 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413556 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-08 00:36 +0000 [r413488] Joshua Colp * apps/app_queue.c, main/manager.c, /: app_queue: Extend documentation for various Manager actions and events. ........ Merged revisions 413485 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413486 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413487 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-07 21:58 +0000 [r413469] Mark Michelson * funcs/func_presencestate.c: Ensure that presence state is decoded properly on Asterisk startup. The CustomPresence provider callback will automatically base64 decode stored data if the 'e' option was present when the state was set. However, since the provider callback was bypassed on Asterisk startup, encoded presence subtypes and messages were being sent instead. This fix makes it so the provider callback is always used when providing presence state updates. 2014-05-07 20:59 +0000 [r413453-413455] Richard Mudgett * apps/app_confbridge.c, /: app_confbridge: Fixed "CBAnn" channels not going away. Fixed a ref leak in conf_handle_talker_cb() everytime the conference bridge was found to report a channel's talker status change. The resulting leak caused the "CBAnn" channels and the conference bridge to never be destroyed. Thanks to Richard Kenner on the asterisk-user's list for locating the problem. Reported by: Richard Kenner ........ Merged revisions 413454 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_confbridge.c, /: app_confbridge: Fix ref leak in CLI "confbridge kick" command. Fixed ref leak in the CLI "confbridge kick" command when the channel to be kicked was not in the conference. ........ Merged revisions 413451 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413452 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-07 17:56 +0000 [r413307-413399] Mark Michelson * res/res_config_odbc.c, /: Fix encoding of custom prepare extra data. Patches: res_config_odbc-take2.patch by John Hardin (License #6512) ........ Merged revisions 413396 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413397 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413398 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip/presence_xml.c, /, res/res_pjsip_pidf_digium_body_supplement.c: Improve XML sanitization in NOTIFYs, especially for presence subtypes and messages. Embedded carriage return line feed combinations may appear in presence subtypes and messages since they may be derived from user input in an instant messenger client. As such, they need to be properly escaped so that XML parsers do not vomit when the messages are received. ........ Merged revisions 413372 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_registrar.c, /: Check for an act on failures to update contacts during registration. There was an underlying issue in a realtime backend where database updates would fail. Since we were not checking for failure, we would end up in a strange state where the old database entry was still present but Asterisk thought that it had been updated. Now when an entry fails to update, we print a warning and delete the old contact from sorcery so there is no mismatch between foreground and backend state. Patches: res_pjsip_registrar.patch by John Hardin (License #6512) ........ Merged revisions 413358 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_config_odbc.c, /: Ensure that all parts of SQL UPDATEs and DELETEs are encoded. Patches: res_config_odbc.patch by John Hardin (License #6512) ........ Merged revisions 413304 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413305 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413306 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-02 20:28 +0000 [r413227-413263] Mark Michelson * /, res/res_config_odbc.c: Prevent crashes in res_config_odbc due to uninitialized string fields. Patches: odbc-crash.patch by John Hardin (License #6512) ........ Merged revisions 413241 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413251 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413258 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_config_pgsql.c, /: Return the number of rows affected by a SQL insert, rather than an object ID. The realtime API specifies that the store callback is supposed to return the number of rows affected. res_config_pgsql was instead returning an Oid cast as an int, which during any nominal execution would be cast to 0. Returning 0 when more than 0 rows were inserted causes problems to the function's callers. To give an idea of how strange code can be, this is the necessary code change to fix a device state issue reported against chan_pjsip in Asterisk 12+. The issue was that the registrar would attempt to insert contacts into the database. Because of the 0 return from res_config_pgsql, the registrar would think that the contact was not successfully inserted, even though it actually was. As such, even though the contact was query-able and it was possible to call the endpoint, Asterisk would "think" the endpoint was unregistered, meaning it would report the device state as UNAVAILABLE instead of NOT_INUSE. The necessary fix applies to all versions of Asterisk, so even though the bug reported only applies to Asterisk 12+, the code correction is being inserted into 1.8+. Closes issue ASTERISK-23707 Reported by Mark Michelson ........ Merged revisions 413224 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 413225 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413226 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-02 16:39 +0000 [r413211] Richard Mudgett * UPGRADE.txt, res/res_pjsip_refer.c, /, channels/chan_sip.c: res_pjsip_refer: Add Referred-By header on INVITE for blind transfers. Per rfc3892, the Referred-By header in a REFER must be copied into the referenced request (IE. The outgoing INVITE to the transfer target). * Automatically put the Referred-By header in the outgoing INVITE message if the SIPREFERREDBYHDR channel variable is defined with a value. * Made chan_sip.c:get_refer_info() set SIPREFERREDBYHDR for inheritance so chan_pjsip has a better chance to interoperate. * Fixed refer_blind_callback() and refer_incoming_refer_request() to not modify the data in the pointer returned by pjsip_msg_find_hdr_by_name(). It seems wrong to modify that data since the calling routine doesn't own the buffer. ASTERISK-23501 #close Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/3514/ ........ Merged revisions 413210 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-02 16:06 +0000 [r413197] Jonathan Rose * res/parking/res_parking.h, /, CHANGES, res/parking/parking_bridge_features.c, res/parking/parking_manager.c: Parking: Add 'AnnounceChannel' argument to manager action 'Park' (closes ASTERISK-23397) Reported by: Denis Review: https://reviewboard.asterisk.org/r/3446/ ........ Merged revisions 413196 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-01 16:21 +0000 [r413174-413183] Mark Michelson * funcs/func_presencestate.c: Make behavior of the PRESENCE_STATE 'e' option more consistent. When writing presence state, if 'e' is specified, then the presence state will be stored in the astdb encoded. However, consumers of presence state events or those that query for the presence state will be given decoded information. If base64 encoding is desired for consumers, then the information can be base64-encoded manually and the 'e' option can be omitted. closes issue ASTERISK-23671 Reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/3482 * res/res_pjsip_exten_state.c, /: Remove unnecessary repetition checks from res_pjsip_exten_state The PBX core already takes care of ensuring that repeated state changes are not communicated to exten state consumers. Because the check in res_pjsip_exten_state was incomplete, it was causing valid presence state changes not to be sent out. For instance, if the presence state did not change but the message or subtype did, then no presence-related NOTIFY request would be sent out. closes issue ASTERISK-23672 Reported by Mark Michelson ........ Merged revisions 413173 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-05-01 12:31 +0000 [r413160] Joshua Colp * res/res_pjsip/config_transport.c, /: res_pjsip: Add the ability to configure ciphers based on name. Previously this code would only accept the OpenSSL identifier instead of the documented name. ASTERISK-23498 #close ASTERISK-23498 #comment Reported by: Anthony Messina Review: https://reviewboard.asterisk.org/r/3491/ ........ Merged revisions 413159 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-30 21:03 +0000 [r413144] Richard Mudgett * main/message.c, /, channels/chan_sip.c, include/asterisk/message.h, res/res_pjsip_messaging.c: chan_sip.c: Fixed off-nominal message iterator ref count and alloc fail issues. * Fixed early exit in sip_msg_send() not destroying the message iterator. * Made ast_msg_var_iterator_next() and ast_msg_var_iterator_destroy() tolerant of a NULL iter parameter in case ast_msg_var_iterator_init() fails. * Made ast_msg_var_iterator_destroy() clean up any current message data ref. * Made struct ast_msg_var_iterator, ast_msg_var_iterator_init(), ast_msg_var_iterator_next(), ast_msg_var_unref_current(), and ast_msg_var_iterator_destroy() use iter instead of i. * Eliminated RAII_VAR usage in res_pjsip_messaging.c:vars_to_headers(). ........ Merged revisions 413139 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413142 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-30 20:39 +0000 [r413141] Joshua Colp * /, channels/chan_pjsip.c: chan_pjsip: Fix deadlock when retrieving call-id of channel. If a task was in-flight which required the channel or bridge lock it was possible for the synchronous task retrieving the call-id to deadlock as it holds those locks. After discussing with Mark Michelson the synchronous task was removed and the call-id accessed directly. This should be safe as each object involved is guaranteed to exist and the call-id will never change. ........ Merged revisions 413140 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-30 13:08 +0000 [r413125] Kinsey Moore * res/res_http_websocket.c, /: Websocket: Add session locking and delay close This resolves a race condition where data could be written to a NULL FILE pointer causing a crash as a websocket connection was in the process of shutting down by adding locking to websocket session writes and by deferring session teardown until session destruction. (closes issue ASTERISK-23605) Review: https://reviewboard.asterisk.org/r/3481/ Reported by: Matt Jordan ........ Merged revisions 413123 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413124 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-30 12:42 +0000 [r413118-413122] Joshua Colp * /, res/stasis/control.c: res_stasis: Add progress indications to operations which perform media. This change fixes operations which did not account for the fact that they may be executed on channels which have not been answered. These operations will now indicate progress when invoked. ASTERISK-23560 #close ASTERISk-23560 #comment Reported by: Jan Svoboda Review: https://reviewboard.asterisk.org/r/3495/ ........ Merged revisions 413121 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_sdp_rtp.c: res_pjsip_sdp_rtp: Fix issue where sending a hold SDP twice could cause an unhold. This change fixes a bug where if an SDP with media address and sendonly was received twice the underlying call would go off hold, instead of remaining on hold. This occured because the code did not properly take into account that the SDP may contain both a valid media address and the sendonly attribute. The code now examines the sendonly attribute and media address first, so if the SDP is received again no change will occur. ASTERISK-23558 #comment Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/3472/ ........ Merged revisions 413119 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_pjsip.c, res/res_pjsip_session.c, /: chan_pjsip: Add support for picking up calls in the configured pickup group. AST-1363 Review: https://reviewboard.asterisk.org/r/3478/ ........ Merged revisions 413117 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-29 15:10 +0000 [r413103] George Joseph * /, include/asterisk/spinlock.h: Add "destroy" implementation for spinlock. The original commit for spinlock was missing "destroy" implementations. Most of them are no-ops but phtread_spin and pthread_mutex do need their locks destroyed. ........ Merged revisions 413102 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-29 11:27 +0000 [r413089] Joshua Colp * channels/chan_pjsip.c, /: chan_pjsip: Implement core ability to get Call-ID of a channel. This changes implement the "get_pvt_uniqueid" which is used to return the technology specific unique identifier. In the case of SIP this is the Call-ID of the dialog. Review: https://reviewboard.asterisk.org/r/3480/ ........ Merged revisions 413088 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-28 20:07 +0000 [r413074] Kinsey Moore * /, main/bridge.c, main/bridge_basic.c: Bridging: Don't lock NULL bridges When bridge locking was added for bridge snapshot creation, some locations where bridge locking was added were not guaranteed to actually have a bridge and locking NULL AO2 objects tends to cause segfaults. This ensures that NULL bridges aren't locked. ........ Merged revisions 413073 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-28 14:40 +0000 [r413060] Mark Michelson * res/res_manager_presencestate.c (added), main/devicestate.c, CHANGES, main/presencestate.c, res/res_manager_devicestate.c (added): Add DeviceStateChanged and PresenceStateChanged AMI events. These events are controlled by two new modules, res_manager_devicestate and res_manager_presencestate. Review: https://reviewboard.asterisk.org/r/3417 2014-04-28 07:43 +0000 [r413048] Igor Goncharovskiy * UPGRADE.txt, CHANGES, channels/chan_unistim.c, configs/unistim.conf.sample: Introducing changes proposed to chan_unistim driver: 1) Added the unistim.conf variable dtmf_duration which can select the DTMF playback duration from 0ms to 150ms (0 is off and is the new default) 2) Enabled the transmission of month names, which are sent with the date and changed the dateformat variable to accept the values 0-3 as per the UNISTIM standard (2 & 3 match the previous 1 & 2 formats). 3) Enabled the "Mute" packet so muting microphone works as expected and microphone muted for all calls while LED light on 4) Changed Duree to Timer on i2004 display (closes issue ASTERISK-23592) 2014-04-27 19:29 +0000 [r413036] Olle Johansson * main/tcptls.c: tcptls.c : Log errors as ERROR, not warning or something else. 2014-04-25 19:26 +0000 [r413012] Matthew Jordan * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Add support for DTLS handshake retransmissions On congested networks, it is possible for the DTLS handshake messages to get lost. This patch adds a timer to res_rtp_asterisk that will periodically check to see if the handshake has succeeded. If not, it will retransmit the DTLS handshake. Review: https://reviewboard.asterisk.org/r/3337 ASTERISK-23649 #close Reported by: Nitesh Bansal patches: dtls_retransmission.patch uploaded by Nitesh Bansal (License 6418) ........ Merged revisions 413008 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 413009 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-24 14:37 +0000 [r412993] Kevin Harwell * /, contrib/ast-db-manage/config/versions/e96a0b8071c_increase_pjsip_column_size.py (added): pjsip realtime: increase the size of some columns The string lengths on certain columns created through alembic for PJSIP were too short. For instance, columns containing URIs are currently set to 40 characters, but this can be too small and result in truncated values. Added an alembic migration script that increases the size of these columns and a few others to 255. ASTERISK-23639 #close Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3475/ ........ Merged revisions 412992 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-23 20:13 +0000 [r412977] George Joseph * include/asterisk/spinlock.h (added), /, configure, include/asterisk/autoconfig.h.in, configure.ac: This patch adds support for spinlocks in Asterisk. There are cases in Asterisk where it might be desirable to lock a short critical code section but not incur the context switch and yield penalty of a mutex or rwlock. The primary spinlock implementations execute exclusively in userspace and therefore don't incur those penalties. Spinlocks are NOT meant to be a general replacement for mutexes. They should be used only for protecting short blocks of critical code such as simple compares and assignments. Operations that may block, hold a lock, or cause the thread to give up it's timeslice should NEVER be attempted in a spinlock. The first use case for spinlocks is in astobj2 - internal_ao2_ref. Currently the manipulation of the reference counter is done with an ast_atomic_fetchadd_int which works fine. When weak reference containers are introduced however, there's an additional comparison and assignment that'll need to be done while the lock is held. A mutex would be way too expensive here, hence the spinlock. Given that lock contention in this situation would be infrequent, the overhead of the spinlock is only a few more machine instructions than the current ast_atomic_fetchadd_int call. ASTERISK-23553 #close Review: https://reviewboard.asterisk.org/r/3405/ ........ Merged revisions 412976 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-23 18:03 +0000 [r412925] Richard Mudgett * /, main/http.c: http: Fix spurious ERROR message in responses with no content. Backport -r411687 and fix the fix because content_length is the length of out plus the length of the file controlled by fd. When a response has an out content length of 0, fwrite would be called to write a buffer with no data in it. This resulted in the following classic error message: [Apr 3 11:49:17] ERROR[26421] http.c: fwrite() failed: Success This patch makes it so that we only attempt to write the content of out if the out string is non-zero. ........ Merged revisions 412922 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412923 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412924 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-23 15:02 +0000 [r412910] Russell Bryant * res/res_monitor.c, funcs/func_periodic_hook.exports.in (added), main/asterisk.dynamics, funcs/func_periodic_hook.c: Fix error loading res_monitor. For some odd reason, loading app_mixmonitor was fine, but res_monitor was not. This patch fixes a set of issues related to func_periodic_hook exporting the beep functions that gets res_monitor working again. 2014-04-22 10:09 +0000 [r412883] Joshua Colp * /, res/stasis/app.c: res_stasis: Fix crash when handling a failed blind transfer message. This changes fixes a crash that occurs when stasis determines if it should send a message out to an application or not. The code incorrectly assumed that a bridge snapshot would always be present when in reality for failure cases it may not be. ASTERISK-23573 #close ........ Merged revisions 412882 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-21 17:56 +0000 [r412759-412824] Jonathan Rose * CHANGES, /: chan_sip: trust_id_outbound CHANGES message improvement (closes issue AST-1301) (closes issue ASTERISK-19465) Reported by: Krzysztof Chmielewski ........ Merged revisions 412821 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412822 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412823 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c, configs/sip.conf.sample, CHANGES, channels/sip/include/sip.h: chan_sip: Add sendrpid trust options In r411189, some behavior was changed which made sendrpid behavior act in a more trusting manner by sending full user data for peers set with private caller presence in P-Asserted-Identity headers. Since this changed long time expected behaviors, we decided to pull that patch when that was pointed out by the community. Instead, this patch provides a trust_id_outbound setting which will expose the data per RFC-3325 if set to 'yes' and simply not send the PAI/RPID headers at all if set to 'no'. By default trust_id_outbound will be set to 'legacy' which will preserve the behavior prior to these patches. Extra special thanks to Walter Doekes for providing advice and feedback. (closes issue AST-1301) (closes issue ASTERISK-19465) Reported by: Krzysztof Chmielewski Review: https://reviewboard.asterisk.org/r/3447/ ........ Merged revisions 412744 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412746 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412747 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-21 16:16 +0000 [r412729-412750] Kinsey Moore * main/http.c, main/manager.c, /: HTTP: Add TCP_NODELAY to accepted connections This adds the TCP_NODELAY option to accepted connections on the HTTP server built into Asterisk. This option disables the Nagle algorithm which controls queueing of outbound data and in some cases can cause delays on receipt of response by the client due to how the Nagle algorithm interacts with TCP delayed ACK. This option is already set on all non-HTTP AMI connections and this change would cover standard HTTP requests, manager HTTP connections, and ARI HTTP requests and websockets in Asterisk 12+ along with any future use of the HTTP server. Review: https://reviewboard.asterisk.org/r/3466/ ........ Merged revisions 412745 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412748 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412749 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_confbridge.c, /: Confbridge: Fix ConfbridgeKick AMI documentation This adds documentation for the "all" channel option for the ConfbridgeKick AMI action and adjusts AMI responses accordingly. (issue ASTERISK-23282) Reported by: Dorian Logan ........ Merged revisions 412730 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_confbridge.c: Confbridge: Add references for kick all option After the ability to kick all attendees from a conference was added, a rework removed the comment about that feature from the CLI documentation. This adds that documentation and adds "all" to the participant tab completion list for the confbridge kick command. (closes issue ASTERISK-23282) Reported by: Dorian Logan ........ Merged revisions 412728 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-21 08:36 +0000 [r412714] Igor Goncharovskiy * /, channels/chan_unistim.c: Fix wrong dialtone. The "modulation" should not be referenced for tone+tone as it refers to the on-off characteristic - this often resulted in a single tone rather than the multitone as in the UK. ........ Merged revisions 412712 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412713 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-19 02:14 +0000 [r412697-412699] Matthew Jordan * /, main/asterisk.c: main/asterisk: Fix startup sequence for realtime features When ASTERISK-23265/ASTERISK-23320 was fixed, it inadvertently led to realtime features breaking. This was due to features loading prior to realtime. This patch fixes this by loading features after loading dynamic modules. ASTERISK-23487 #close Reported by: Denis Tested by: Denis ........ Merged revisions 412698 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_sms.c: app_sms: Fix uninitialized values; hangup channel when REL is sent successfully This patch fixes two issues in app_sms: (1) Firstly, the 'flags' field on the stack in sms_exec() is uninitialised, causing it to use the wrong protocol in some cases. This patch correctly initializes the flags fields. (2) Secondly, when disconnect supervision is not working or inbanddisconnect=yes is set in chan_dahdi.conf, app_sms was failing to terminate the call after it sent the REL(ease) message and the peer stopped talking to it. This patch fixes the code to handle the 'bad stop bit' message more gracefully in that case, and hang up the call. Review: https://reviewboard.asterisk.org/r/1392/ ASTERISK-18331 #close Reported by: David Woodhouse patches: asterisk-fix-sms.patch uploaded by David Woodhouse (License 5754) ........ Merged revisions 412655 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412656 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412657 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-18 20:09 +0000 [r412641] Jonathan Rose * /, res/ari/resource_bridges.h, res/stasis/control.c, include/asterisk/stasis_app.h, res/stasis/control.h, res/ari/resource_channels.c, CHANGES, res/res_stasis.c, rest-api/api-docs/bridges.json, res/ari/resource_bridges.c, res/res_ari_bridges.c, res/res_stasis_playback.c: ARI: Make bridges/{bridgeID}/play queue sound files Previously multiple play actions against a bridge at one time would cause the sounds to play simultaneously on the bridge. Now if a sound is already playing, the play action will queue playback to occur after the completion of other sounds currently on the queue. (closes issue ASTERISK-22677) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/3379/ ........ Merged revisions 412639 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-18 17:17 +0000 [r412589] Rusty Newton * sounds/sounds.xml, sounds/Makefile, /: sounds: Fix Sounds Makefile and XML that didn't support new sound prompt sets In sounds/Makefile 1 Adds and moves some lines necessary for the en_GB core set. I'm just following how the other sets are defined here. 2 removes the ES extra sounds related lines as we don't have ES extra sound sets. In sounds/sounds.xml 3 Adds member definitons for EN_AU, EN_GB, IT for core sound sets, and EN_GB in extra sound sets ASTERISK-23550 #close Review: https://reviewboard.asterisk.org/r/3464/ ........ Merged revisions 412586 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412587 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-18 17:02 +0000 [r412584] Mark Michelson * /, res/res_pjsip/location.c: Allow for multiple contacts to be configured in a single contact= line. This is useful for configuring multiple permanent contacts for an AOR when using realtime AORs. Review: https://reviewboard.asterisk.org/r/3462 ........ Merged revisions 412582 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-18 16:44 +0000 [r412580-412583] Richard Mudgett * main/dial.c, main/pbx.c, /, apps/app_originate.c, include/asterisk/pbx.h: Originated calls: Fix several originate call problems. * Restore the reason value set by pbx_outgoing_attempt() to use AST_CONTROL_xxx values as all the consumers were expecting rather than cause codes. * Fixed the dial routines to set cause codes for more than just ast_request() so pbx_outgoing_attempt() reason codes will function. * Fix inconsistent locked_channel return status in pbx_outgoing_attempt(). The chanel may not have been locked or the channel may have been a stale pointer. * Fixed the OutgoingSpoolFailed channel to run dialplan whenever the dialing fails for an originate exten and 1 < synchronous. * Fix incorrect ast_cond_wait() usage in pbx_outgoing_attempt(). Indroduced by issue ASTERISK-22212 patch. * Made struct pbx_outgoing use the ao2 lock instead of its own lock for the cond wait mutex. No sense in having two locks associated with the same struct when only one is needed. Review: https://reviewboard.asterisk.org/r/3421/ ........ Merged revisions 412581 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_channels.c, apps/app_queue.c, apps/app_dial.c, /: app_dial and app_queue: Make lock the forwarding channel while taking the channel snapshot. * Fixed ast_channel_publish_dial_forward() not locking the forwarded channel when taking the channel snapshot. * Fixed app_dial.c:do_forward() using the wrong channel to get the original call forwarding string. * Removed unnecessary locking when calling ast_channel_publish_dial() and ast_channel_publish_dial_forward() in app_dial and app_queue. Holding channel locks when calling ast_channel_publish_dial_forward() with a forwarded channel could result in pausing the system while the stasis bus completes processsing a forwarded channel subscription. Review: https://reviewboard.asterisk.org/r/3451/ ........ Merged revisions 412579 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-18 14:25 +0000 [r412566] Kinsey Moore * res/ari/ari_websockets.c, res/res_ari.c, main/manager.c, /: ARI: Add debug logging for events and responses This adds DEBUG level logging for ARI websocket events and HTTP responses similar to what is available for AMI. Logging for ARI HTTP requests is already adequate for debugging purposes. ........ Merged revisions 412565 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-17 22:50 +0000 [r412552] Joshua Colp * /, res/res_pjsip/location.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c, res/res_pjsip_registrar.c: res_pjsip: Handle reloading when permanent contacts exist and qualify is configured. This change fixes a problem where permanent contacts being qualified were not being updated. This was caused by the permanent contacts getting a uuid and not a known identifier, causing an inability to look them up when updating in the qualify code. A bug also existed where the new configuration may not be available immediately when updating qualifies. (closes issue ASTERISK-23514) Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3448/ ........ Merged revisions 412551 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-17 22:42 +0000 [r412536-412550] Jonathan Rose * /, main/app.c: Fix a silly shadowed variable mistake that was missed from play tones patch ........ Merged revisions 412549 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/ari/resource_bridges.h, main/app.c, rest-api/api-docs/channels.json, CHANGES, rest-api/api-docs/bridges.json, res/ari/resource_channels.h, include/asterisk/app.h, res/res_stasis_playback.c: ARI: Add tones playback resource Adds a tones URI type to the playback resource. The tone can be specified by name (from indications.conf) or by a tone pattern. In addition, tonezone can be specified in the URI (by appending ;tonezone=). Tones must be stopped manually in order for a stasis control to move on from playback of the tone. Tones may be paused, resumed, restarted, and stopped. They may not be rewound or fast forwarded (tones can't be controlled in a way that lets you skip around from note to note and pausing and resuming will also restart the tone from the beginning). Tests are currently in development for this feature (https://reviewboard.asterisk.org/r/3428/). (closes issue ASTERISK-23433) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3427/ ........ Merged revisions 412535 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-17 20:25 +0000 [r412467-412484] Matthew Jordan * channels/chan_oss.c, /, main/Makefile: main/Makefile: Fix build failure on SmartOS/Illumos/SunOS This patch fixes two issues when building on SmartOS: - channels/chan_oss.c: it makes sure soundcard.h is found - main/Makefile: only use "-Wl,--version-script" when GNU LD is used as the Sun Linker doesn't support that. Similar checks are already used elswhere in the Makefile Review: https://reviewboard.asterisk.org/r/3426 ASTERISK-23576 #close Reported by: Sebastian Wiedenroth patches: fix-sunos.diff uploaded by Sebastian Wiedenroth (License 6597) ........ Merged revisions 412468 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412483 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/sip/include/sip.h, channels/chan_sip.c, CHANGES: chan_sip: Add SIPURIPHONECONTEXT channel variable for Request TEL URIs This patch is a continuation of https://reviewboard.asterisk.org/r/3349/, committed in r412303. It resolves a finding oej had that the phone-context be available in a channel variable separate from SIPDOMAIN. This patch adds that variable as SIPURIPHONECONTEXT. It also allows a local number (or global number specified in the TEL URI) to be used to look up as a peer. (issue ASTERISK-17179) Review: https://reviewboard.asterisk.org/r/3349/ 2014-04-17 15:17 +0000 [r412454] Kevin Harwell * res/res_pjsip_refer.c, /: res_pjsip_refer: Channel variable SIPREFERTOHDR not being set during blind transfer The SIPREFERTOHDR channel variable is not being set on any channel when performing a blind transfer using PJSIP. The 'refer->refer_to' was not being set during a blind transfer. Updated so the 'refer_to' is set to the target uri on a blind transfer. (closes issue ASTERISK-23502) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/3445/ ........ Merged revisions 412453 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-16 19:14 +0000 [r412440] Kinsey Moore * /, include/asterisk/stasis_app.h: Stasis: Add a usage note on stasis_app_get_bridge This function returns an ast_bridge without a refcount bump and the caller must increment the count if it intends to hold the pointer. (closes issue ASTERISK-23588) Review: https://reviewboard.asterisk.org/r/3450/ Reported by: Matt Jordan ........ Merged revisions 412439 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-15 23:21 +0000 [r412427] Russell Bryant * bridges/bridge_builtin_features.c, include/asterisk/monitor.h, CHANGES, apps/app_queue.c, funcs/func_periodic_hook.c, apps/app_mixmonitor.c, include/asterisk/beep.h (added), res/res_monitor.c: (mix)monitor: Add options to enable a periodic beep Add an option to enable a periodic beep to be played into a call if it is being recorded. If enabled, it uses the PERIODIC_HOOK() function internally to play the 'beep' prompt into the call at a specified interval. This option is provided for both Monitor() and MixMonitor(). Review: https://reviewboard.asterisk.org/r/3424/ 2014-04-15 18:30 +0000 [r412384-412414] Richard Mudgett * main/stasis_channels.c, main/features_config.c, res/res_parking.c, main/rtp_engine.c, /: Eliminate some more unnecessary RAII_VAR() uses. RAII_VAR() is not a hammer appropriate to pound all nails. ........ Merged revisions 412413 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_playback.c, /, res/stasis/app.c, res/res_fax.c, res/res_pjsip/security_events.c, res/parking/parking_applications.c, channels/chan_oss.c, main/stasis_bridges.c, res/res_pjsip_session.c, res/stasis_recording/stored.c, main/cdr.c, res/res_parking.c, channels/chan_skinny.c, res/res_pjsip/location.c, res/res_stasis_recording.c, main/stasis_channels.c, res/ari/resource_channels.c, res/parking/parking_manager.c, res/ari/resource_recordings.c, res/res_pjsip_refer.c, res/res_ari.c, main/pbx.c: Remove unused RAII_VAR() declarations. * Remove unused RAII_VAR() declarations. The compiler cannot catch these because the cleanup function "references" the unused variable. Some actually allocated and released resources that were never used. * Fixed some whitespace issues in stasis_bridges.c. ........ Merged revisions 412399 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/rtp_engine.h, main/rtp_engine.c, /, channels/chan_sip.c: chan_sip.c: Fix channel staging assertion failure. The failing assertion ensures that the final snapshot gets generated so CDR records can get finalized. The only place where a channel staging snapshot flag could be left set is in chan_sip.c:handle_request_bye(). The function could return before clearing the flag because the channel could dissappear while the function had to have the channel unlocked. * Fixed handle_request_bye() channel snapshot staging coverage area to not have a return in the middle of it and be unable to clear the staging flag. * Pushed the channel snapshot staging coverage area into ast_rtp_instance_set_stats_vars() to ensure that the staging is not interrutped. * Made callers of ast_rtp_instance_set_stats_vars() not call it with any channels or channel driver private locks held to eliminate the deadlock potential. The callers must hold references to the passed in channel and rtp objects. * Eliminated sip_hangup() trying to get the bridge peer. It is futile at this point because the channel could never be in a bridge. Review: https://reviewboard.asterisk.org/r/3431/ ........ Merged revisions 412385 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip.c: Moved some sip_pvt unrefs after their last use. * Moved sip_pvt unref in ast_hangup() and handle_request_do() to the end of the function. The unref needs to happen after the last use of the pointer. ........ Merged revisions 412348 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412383 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-15 16:13 +0000 [r412331] Jonathan Rose * configs/sip.conf.sample, /, channels/chan_sip.c: Reverting r411189 so that it can be put up for public review --- r411189 | jrose | 2014-03-26 10:50:48 -0500 (Wed, 26 Mar 2014) | 12 lines chan_sip: Send real CallerID information with P-Assserted-Identity (RFC-3325) Prior to this patch, the P-Asserted-Identity header would include anonymous caller id information which seems to go against the point of the P-Asserted-Identity header. Now the real caller ID information will be included in this header. Also, no privacy header would be included. This patch adds 'Privacy: id' to outgoing SIP messages that include the P-Asserted-Identity header. (closes issue AST-1301) --- ........ Merged revisions 412328 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412329 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412330 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-14 15:54 +0000 [r412307] Corey Farrell * main/autoservice.c, /: autoservice: fix reference leak of logger callid. autoservice acquires a local reference to the logger callid of each channel in a loop. This local reference was not released, causing the callid of every channel in autoservice to leak. This change moves the callid unref inside the loop. ASTERISK-23616 #close Reported by: ibercom ........ Merged revisions 412305 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412306 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-12 02:27 +0000 [r412292] Matthew Jordan * channels/sip/reqresp_parser.c, CHANGES, channels/chan_sip.c: chan_sip: Support RFC-3966 TEL URIs in inbound INVITE requests This patch adds support for handling TEL URIs in inbound INVITE requests. This includes the Request URI and the From URI. The number specified in the Request URI will be the destination of the inbound channel in the dialplan. The phone-context specified in the Request URI will be stored in the TELPHONECONTEXT channel variable. Review: https://reviewboard.asterisk.org/r/3349 ASTERISK-17179 #close Reported by: Geert Van Pamel Tested by: Geert Van Pamel patches: asterisk-12.0.0-chan_sip-RFC3966_patch.txt uploaded by Geert Van Pamel (License 6140) asterisk-12.0.0-reqresp_parser-RFC3966_patch.txt uploaded by Geert Van Pamel (License 6140) 2014-04-12 01:35 +0000 [r412279-412280] Russell Bryant * funcs/func_periodic_hook.c: func_periodic_hook: move module ref The previous code left one error path where the module would be unref'd twice instead of once. It was done once in the error handling block, and again inside of datastore destruction. Now the module ref is only released in the datastore destructor and only acquired when the datastore has been successfully allocated. * funcs/func_periodic_hook.c: func_periodic_hook: add module ref counting This module lacked necessary module ref count incrementing and decrementing when used. This patch adds it. There's already a datastore used, so doing the ref counting along with the lifetime of the datastore provides a convenient place to do it. 2014-04-11 21:43 +0000 [r412213-412228] Richard Mudgett * apps/app_stack.c, /: app_stack: Add missing unlock in off-nominal path of STACK_PEEK function. ASTERISK-23620 #close Reported by: Bradley Watkins Patches: ASTERISK-23620_unlock_oldlist.patch (license #5021) patch uploaded by Bradley Watkins ........ Merged revisions 412225 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412226 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412227 from http://svn.asterisk.org/svn/asterisk/branches/12 * utils/Makefile, utils: utils dir: Remove no longer needed traces of refcounter except in the clean make target. * Removed no longer needed files from the svn:ignore property to make them visible. 2014-04-11 12:43 +0000 [r412194] Kinsey Moore * /, main/bridge.c, main/bridge_basic.c, include/asterisk/stasis_bridges.h, tests/test_cel.c, apps/app_confbridge.c, res/ari/resource_bridges.c: bridging: Ensure locking during snapshot creation While the vast majority of bridge snapshot creation is locked properly, there are currently some instances that are not. This adds the missing locking to ensure bridge state is not malleable during snapshot creation. (closes issue ASTERISK-22904) Review: https://reviewboard.asterisk.org/r/3415/ Reported by: Matt Jordan ........ Merged revisions 412193 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-11 08:28 +0000 [r412168-412180] Olle Johansson * main/audiohook.c: Formatting: Remove invisible characters * main/audiohook.c: Formatting only. 2014-04-11 02:59 +0000 [r412154] Matthew Jordan * main/astobj2.c, contrib/scripts/refcounter.py (added), main/asterisk.c, utils/refcounter.c (removed), build_tools/cflags.xml, utils/utils.xml, /, channels/chan_sip.c, channels/sip/security_events.c, include/asterisk/astobj2.h, UPGRADE.txt: main/astobj2: Make REF_DEBUG a menuselect item; improve REF_DEBUG output This patch does the following: (1) It makes REF_DEBUG a meneselect item. Enabling REF_DEBUG now enables REF_DEBUG globally throughout Asterisk. (2) The ref debug log file is now created in the AST_LOG_DIR directory. Every run will now blow away the previous run (as large ref files sometimes caused issues). We now also no longer open/close the file on each write, instead relying on fflush to make sure data gets written to the file (in case the ao2 call being performed is about to cause a crash) (3) It goes with a comma delineated format for the ref debug file. This makes parsing much easier. This also now includes the thread ID of the thread that caused ref change. (4) A new python script instead for refcounting has been added in the contrib/scripts folder. (5) The old refcounter implementation in utils/ has been removed. Review: https://reviewboard.asterisk.org/r/3377/ ........ Merged revisions 412114 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 412115 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 412153 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-11 01:12 +0000 [r412102] Russell Bryant * res/res_monitor.c: monitor: use app options parsing helper code This app is pretty ancient, so it was never converted to use the option parsing helper code. I'd like to add an option to this app that takes an argument, and that's a pain to do when not using this helper, so start by doing this conversion. Review: https://reviewboard.asterisk.org/r/3429/ 2014-04-10 21:28 +0000 [r412089] Matthew Jordan * /, res/res_hep_pjsip.c: res_hep_pjsip: Use the channel name instead of the call ID when it is available During discussions with Alexandr Dubovikov at Kamailio World, it became apparent that while the SIP call ID is a useful identifier prior to an Asterisk channel being created, it is far more preferable to use the channel name (or some channel based identifier) when the channel is available. Homer is smart enough to tie the various messages together. This patch opts to use the channel name when it is available, falling back to the call ID otherwise. ........ Merged revisions 412088 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-10 21:10 +0000 [r412075] Kevin Harwell * /, res/res_pjsip_pubsub.c: res_pjsip_pubsub: Set the body generation result to 0 for a valid path The result of the "ast_sip_pubsub_generate_body_content" was not set/initialized. Consequently, the nominal path potentially returned an invalid value, thus not sending mwi notifications. ........ Merged revisions 412074 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-09 21:43 +0000 [r412050] Mark Michelson * /, CHANGES, apps/app_mixmonitor.c: Add a Command header to the AMI Mixmonitor action. This fixes a parsing error that occurred during the processing of the AMI action. The error did not result in MixMonitor itself misbehaving, but it could result in the AMI response not giving correct information back. The new header allows for one to specify a post-process command to run when recording finishes. Previously, in order to do this, the post-process command would have to be placed at the end of the Options: header. Patches: mixmonitor_command_2.patch by jhardin (License #6512) ........ Merged revisions 412048 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-09 18:17 +0000 [r412035] Kinsey Moore * /, res/res_stasis_answer.c: res_stasis_answer: Add missing newlines ........ Merged revisions 412034 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-08 21:25 +0000 [r411946-411990] Richard Mudgett * /, main/asterisk.c: Internal timing: Add notice that the -I and internal_timing option are no longer needed. Add notice messages during execution that the -I command line option and the astersik.conf internal_timing option are no longer needed. The internal timing functionality is now always enabled if there is a timing module loaded. NOTE: Since the command line options and the asterisk.conf config file are processed before the logging system is initialized, the messages are output to stderr. Change requested as a result of asterisk-dev list comments about the commit for ASTERISK-22846 that removed the -I and internal_timing options. Review: https://reviewboard.asterisk.org/r/3423/ ........ Merged revisions 411964 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411974 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411985 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/config.c, /: config: Fix CB_ADD_LEN() to work as originally intended. Fix a long standing bug in CB_ADD_LEN() behaving like CB_ADD(). ASTERISK-23546 #close Reported by: Walter Doekes ........ Merged revisions 411960 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411961 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411962 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/confbridge/conf_config_parser.c, /: app_confbridge: Fix confbridge.conf dsp_talking_threshold option setting wrong parameter. Fixed copy pasta error. ASTERISK-23545 #close Reported by: John Knott ........ Merged revisions 411944 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411945 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-08 14:49 +0000 [r411928] Joshua Colp * /, res/res_pjsip.c: res_pjsip: Ignore explicit transport configuration if a WebSocket transport is specified. This change makes it so if a transport is configured on an endpoint that is a WebSocket type the option will be ignored. In practice this is fine because the WebSocket transport can not create outgoing connections, it can only reuse existing ones. By ignoring the option the existing PJSIP logic for using the existing connection will be invoked and stuff will proceed. (closes issue ASTERISK-23584) Reported by: Rusty Newton ........ Merged revisions 411927 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-08 00:26 +0000 [r411897] Russell Bryant * funcs/func_periodic_hook.c: func_periodic_hook: List more modules as dependencies This module makes use of some existing Asterisk components. app_chanspy was already listed as a dependency. There are a few function modules used, as well, so list them. 2014-04-07 20:41 +0000 [r411884] Kinsey Moore * /, res/res_pjsip_pubsub.c: PJSIP: Ensure test event has new state The change that fixed the pubsub test event's use of a dangling pointer also changed when it was processed relative to the pjsip subscription state change processing. This change corrects the order of events while holding a reference to the pointer that was previously dangling. ........ Merged revisions 411883 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-07 16:15 +0000 [r411870] Jonathan Rose * main/manager_channels.c, /: AGI/Manager: Prevent multiple NewExten events during AGI application changes AGI applications would trigger NewExten events every time the state of the AGI application changed. This has historically not been the behavior and this behavior was introduced with a CDR patch. This patch corrects that. (closes issue ASTERISK-23390) Reported by: Benjamin Keith Ford Review: https://reviewboard.asterisk.org/r/3406/ ........ Merged revisions 411868 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-07 14:57 +0000 [r411812] Walter Doekes * apps/app_queue.c, /: app_queue: Re-add HoldTime to QueueCallerAbandon event (simple typo during ast12 refactor). Reported by: Ibrahim22 (on IRC) Tested by: Ibrahim22 ........ Merged revisions 411811 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-07 14:29 +0000 [r411791-411806] Kinsey Moore * /, res/res_stasis.c: Stasis: Fix Stasis() bridge refcount issue The Stasis() dialplan application monitors what bridge a channel is in and so necessarily holds on to a bridge pointer. This change ensures that it also holds on to a reference for that bridge to prevent the bridge pointer from becoming a dangling pointer. ........ Merged revisions 411804 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pubsub.c, /: PJSIP: Fix crash introduced in r411671 The test event introduced in revision 411671 uses a dangling pointer to access information about pubsub state changes. This moves the event to within the lifetime of the pointer. ........ Merged revisions 411790 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-05 13:06 +0000 [r411768] Russell Bryant * CHANGES, funcs/func_periodic_hook.c (added): func_periodic_hook: New function for periodic hooks. This commit introduces a new dialplan function, PERIODIC_HOOK(). It allows you run to a dialplan hook on a channel periodically. The original use case that inspired this was the ability to play a beep periodically into a call being recorded. The implementation is much more generic though and could be used for many other things. The implementation makes heavy use of existing Asterisk components. It uses a combination of Local channels and ChanSpy() to run some custom dialplan and inject any audio it generates into an active call. The other important bit of the implementation is how it figures out when to trigger the beep playback. This implementation uses the audiohook API, even though it's not actually touching the audio in any way. It's a convenient way to get a callback and check if it's time to kick off another beep. It would be nice if this was timer event based instead of polling based, but unfortunately I don't see a way to do it that won't interfere with other things. Review: https://reviewboard.asterisk.org/r/3362/ 2014-04-04 19:19 +0000 [r411702-411724] Richard Mudgett * include/asterisk/options.h, main/asterisk.c, main/channel.c, /, channels/chan_sip.c, configs/asterisk.conf.sample, UPGRADE.txt, include/asterisk/channel.h, utils/extconf.c: internal_timing: Remove the option and always make it enabled if a timing module is loaded. The masquerade supertest frequently fails because either the local channel chain doesn't completely optimize out or the DTMF handshake doesn't completely get accross. Local channel optimization requires frames flowing to trigger when optimization can happen. When optimization happens the media frame that triggered the optimization is dropped. Sending DTMF requires frames to flow in the other direction for timing purposes while sending nothing. If internal timing is not enabled when MOH is playing, Asterisk switches to received timing when an audio frame is received. With optimization dropping media frames and MOH not sending frames unless it receives frames, occasionaly there are no more frames being passed and the test fails. * The asterisk command line -I option and the asterisk.conf internal_timing option are removed. Asterisk now always uses internal timing when needed if any timing module is loaded. The issue ASTERISK-14861 did this quite awhile ago in v1.4 but effectively is broken if other internal timing modules besides DAHDI are used. The ast_read_generator_actions() now only does received timing if it has no choice for frame generators like MOH, silence, and playback streaming. * Cleaned up some code dealing with frame generators in ast_deactivate_generator(), generator_write_format_change(), ast_activate_generator(), and ast_channel_stop_silence_generator(). * Removed ast_internal_timing_enabled(), AST_OPT_FLAG_INTERNAL_TIMING, and ast_opt_internal_timing. ASTERISK-22846 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3414/ ........ Merged revisions 411715 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411716 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411717 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/utils.c, res/res_musiconhold.c, main/channel.c, main/stasis_cache.c, /: Add some asserts that were handy when looking for a stasis cache problem. * Assert if a channel is destroyed but has the snapshot staging flag set. In this case the final channel destruction snapshot would never get taken. * Assert if what we just got out of the stasis cache is not what we were looking for. This assert would have saved several days searching for a bug and a lot of my hair. * Assert if the music on hold message posts could not find the associated channel. A crash will happen later when manager tries to send the MOH AMI message. This assert catches the problem when the stasis message is posted instead of by the thread processing the defective message. * Always generate a backtrace when an ast_assert() fails. Review: https://reviewboard.asterisk.org/r/3411/ ........ Merged revisions 411701 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-04 15:13 +0000 [r411688] Matthew Jordan * /, main/http.c: http: Fix spurious ERROR message in responses with no content When a response has a content length of 0, fwrite would be called to write a buffer with no data in it. This resulted in the following classic error message: [Apr 3 11:49:17] ERROR[26421] http.c: fwrite() failed: Success This patch makes it so that we only attempt to write out the content if the calculated content_length is non-zero. ........ Merged revisions 411687 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-03 12:06 +0000 [r411671] Kinsey Moore * /, res/res_pjsip_pubsub.c: res_pjsip_pubsub: Add test event for state change This adds a test event when subscription state changes so that integration tests may trigger new actions at the appropriate times. Review: https://reviewboard.asterisk.org/r/3383/ ........ Merged revisions 411670 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-03 11:47 +0000 [r411669] Matthew Jordan * res/res_hep.c, /: res_hep: Fix crash when hep.conf not available Parts of res_hep properly checked for a valid configuration object before attempting to access the configuration. A check, however, was missed when a packet is sent. This patch fixes the crash caused by not checking if the configuration object is valid. ........ Merged revisions 411668 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-02 18:57 +0000 [r411656] Mark Michelson * main/sorcery.c, /, res/res_mwi_external.c, res/res_pjsip/config_system.c, configs/sorcery.conf.sample, main/bucket.c, include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c, tests/test_sorcery_astdb.c, tests/test_sorcery.c, tests/test_sorcery_realtime.c: Prevent duplicate sorcery wizards from being applied to sorcery object types. This commit contains several changes to sorcery: 1) Application of sorcery configuration based on module name is automatically performed when sorcery is opened for a module. 2) Sorcery will not attempt to apply the same wizard to an object type more than once. 3) Sorcery gives more exact results when attempting to apply a wizard, whether as the default or based on configuration. Sorcery unit tests still pass for me after making these changes. Review: https://reviewboard.asterisk.org/r/3326 ........ Merged revisions 411159 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-01 22:42 +0000 [r411637-411639] Richard Mudgett * res/parking/parking_bridge.c, /: res_parking: Minor tweaks. * Use ast_bridge_channel_lock()/ast_bridge_channel_unlock() instead of ao2_lock()/ao2_unlock() for struct ast_bridge_channel variables. * Use ast_copy_string() instead of inlining it. * Remove an already done TODO comment. * Some whitespace tweaks. ........ Merged revisions 411638 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_channels.c, /: stasis_channels.c: Eliminate another overuse of RAII_VAR(). ........ Merged revisions 411636 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-04-01 16:52 +0000 [r411587] Joshua Colp * /, apps/app_queue.c: app_queue: Fix a bug where realtime members would be deleted during reload causing waiting callers to get ejected. This patch causes realtime queue members to remain in queues during the reload process. Previously these members would be removed causing any waiting callers to be ejected from the queue with a reason of "EXITEMPTY". ASTERISK-23547 #close ASTERISK-23547 #comment Patch app_queue_fix_realtime_reload_1.8_trunk.patch submitted by Italo Rossi (license 6409) Review: https://reviewboard.asterisk.org/r/3404/ ........ Merged revisions 411584 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411585 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411586 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-28 18:32 +0000 [r411556] Matthew Jordan * include/asterisk/res_hep.h (added), res/res_hep_pjsip.c (added), res/res_hep.exports.in (added), configs/hep.conf.sample (added), CHANGES, res/res_hep.c (added), /: res_hep/res_hep_pjsip: Add a HEPv3 capture agent module and a logger for PJSIP This patch adds the following: (1) A new module, res_hep, which implements a generic packet capture agent for the Homer Encapsulation Protocol (HEP) version 3. Note that this code is based on a patch provided by Alexandr Dubovikov; I basically just wrapped it up, added configuration via the configuration framework, and threw in a taskprocessor. (2) A new module, res_hep_pjsip, which forwards all SIP message traffic that passes through the res_pjsip stack over to res_hep for encapsulation and transmission to a HEPv3 capture server. Much thanks to Alexandr for his Asterisk patch for this code and for a *lot* of patience waiting for me to port it to 12/trunk. Due to some dithering on my part, this has taken the better part of a year to port forward (I still blame CDRs for the delay). ASTERISK-23557 #close Review: https://reviewboard.asterisk.org/r/3207/ ........ Merged revisions 411534 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-28 18:00 +0000 [r411533] Alexandr Anikin * addons/ooh323c/src/ooh323.c, addons/ooh323c/src/ooGkClient.c, addons/chan_ooh323.c, /, addons/ooh323c/src/oochannels.c, addons/ooh323c/src/ooCmdChannel.c, addons/ooh323c/src/ooq931.c: process stack command even if gatekeeper client isn't register don't destroy gatekeeper client if it is not started don't destroy gatekeeper client in some sort of gatekeeper errors signal rtp create condition when call cleared before rtp structure created (closes issue ASTERISK-23460) Reported by: Dmitry Melekhov Patches: ASTERISK-23460-2.patch Tested by: Dmitry Melekhov ........ Merged revisions 411531 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411532 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-28 17:41 +0000 [r411515-411530] Matthew Jordan * rest-api/api-docs/channels.json, rest-api/api-docs/recordings.json, rest-api/api-docs/endpoints.json, rest-api/api-docs/events.json, /, rest-api/api-docs/playbacks.json, UPGRADE.txt, 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/deviceStates.json, rest-api/api-docs/mailboxes.json, rest-api/api-docs/asterisk.json, rest-api/api-docs/applications.json: Update API versions and UPGRADE/CHANGES for 12.2.0 This patch does the following: * It updates the AMI version to 2.2.0 to indicate backwards compatible changes have been made since the last release * It updates the ARI version to 1.2.0 to indicate backwards compatible changes have been made since the last release * It updates the UPGRADE/CHANGES files with changes that were not mentioned ........ Merged revisions 411529 from http://svn.asterisk.org/svn/asterisk/branches/12 * UPGRADE.txt, res/res_config_odbc.c: res_config_odbc: Fix for nullable integer columns and keyfield existence check in update_odbc. This patch fixes setting nullable integer columns to NULL instead of an empty string, which fails for PostgreSQL, for example. The current code is supposed to do so, but the check is broken. The patch also allows the first column in the list to be a nullable integer. Also, the check for existence of a mandatory column checked for the first column in the list instead of the key field lookup column. This patch fixes that issue as well. Finally, the compatibility option allow_empty_string_in_nontext, which was added to previous revisions to allow for some database backends with certain schemas to function, has been removed. Review: https://reviewboard.asterisk.org/r/3335 ASTERISK-23459 #close ASTERISK-23351 #close (closes issue ASTERISK-23459) Reported by: zvision patches: res_config_odbc.diff uploaded by zvision (License 5755) 2014-03-28 16:18 +0000 [r411469] Scott Griepentrog * main/tcptls.c, main/manager.c, /, main/http.c: http: response body often missing after specific request This patch works around a problem with the HTTP body being dropped from the response to a specific client and under specific circumstances: a) Client request comes from node.js user agent "Shred" via use of swagger-client library. b) Asterisk and Client are *not* on the same host or TCP/IP stack In testing this problem, it has been determined that the write of the HTTP body is lost, even if the data is written using low level write function. The only solution found is to instruct the TCP stack with the shutdown function to flush the last write and finish the transmission. See review for more details. ASTERISK-23548 #close (closes issue ASTERISK-23548) Reported by: Sam Galarneau Review: https://reviewboard.asterisk.org/r/3402/ ........ Merged revisions 411462 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411463 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411465 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-28 15:48 +0000 [r411375-411460] Matthew Jordan * UPGRADE.txt, /: UPGRADE: Note IAX2 compatibility issue between 1.4 and 1.8+ systems. ........ Merged revisions 411457 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411458 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411459 from http://svn.asterisk.org/svn/asterisk/branches/12 * contrib/realtime/mysql/voicemail_messages.sql (removed), contrib/realtime/postgresql/realtime.sql (removed), contrib/realtime/mysql/voicemail_data.sql (removed), contrib/realtime/mysql/musiconhold.sql (removed), contrib/realtime/mysql/queue_log.sql (removed), contrib/realtime/mysql/voicemail.sql (removed), contrib/realtime/mysql/sippeers.sql (removed), /, contrib/realtime/mysql/iaxfriends.sql (removed), contrib/realtime/mysql/meetme.sql (removed): contrib/realtime: Remove empty SQL script files Since the relatime scripts are now managed by Alembic, the previous realtime scripts were previously removed. However, the removal process messed up, as the files were still in the repository. The contents were just empty. This removes the files from the tree. ........ Merged revisions 411442 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/sip/include/sip.h: chan_sip: Add MESSAGE request to allowed methods The allowed methods advertised by chan_sip did not previously note the MESSAGE request. Even in Asterisk 1.8, we do accept in-dialog MESSAGE requests; we should advertise that we support MESSAGE requests. ASTERISK-23504 #close ASTERISK-23504 #comment Reported by: Martin Kontsek ASTERISK-23504 #comment Patch sip.h_patch.diff uploaded by Martin Kontsek (license 6587) Review: https://reviewboard.asterisk.org/r/3396/ ........ Merged revisions 411372 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411373 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411374 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-27 19:21 +0000 [r411312-411328] Corey Farrell * funcs/func_global.c, apps/app_speech_utils.c, apps/confbridge/conf_config_parser.c, funcs/func_callcompletion.c, funcs/func_frame_trace.c, funcs/func_callerid.c, main/message.c, /, res/res_mutestream.c, channels/pjsip/dialplan_functions.c, res/res_pjsip_header_funcs.c, funcs/func_pitchshift.c, funcs/func_groupcount.c, funcs/func_volume.c, funcs/func_odbc.c, funcs/func_channel.c, funcs/func_cdr.c, funcs/func_blacklist.c, apps/app_stack.c, apps/app_voicemail.c, res/res_calendar.c, apps/app_jack.c, funcs/func_dialplan.c, funcs/func_speex.c, channels/chan_sip.c, funcs/func_math.c, funcs/func_strings.c, funcs/func_jitterbuffer.c, res/res_xmpp.c, channels/chan_iax2.c, main/features_config.c, res/res_jabber.c: Fix dialplan function NULL channel safety issues (closes issue ASTERISK-23391) Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3386/ ........ Merged revisions 411313 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411314 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411315 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/format.c, include/asterisk.h, /: main/formats: Fix crash in ast_format_cmp during non-clean shutdown. * Update asterisk.h to reflect availability of ast_register_cleanup in 11.9. * Use ast_register_cleanup for format_attr_shutdown. (closes issue ASTERISK-23103) Reported by: JoshE ........ Merged revisions 411310 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411311 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-27 14:21 +0000 [r411296] Mark Michelson * main/sorcery.c, /: Give sorcery instances a reference to their wizards. On graceful shutdown, sorcery wizards are all killed off, but it is possible for sorcery instances to still have dangling pointers after this, possibly causing a crash. Giving the sorcery instances a reference to their wizards ensures that the wizard reference will remain valid for the lifetime of the sorcery instance. Review: https://reviewboard.asterisk.org/r/3401 ........ Merged revisions 411295 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-26 22:45 +0000 [r411246] Joshua Colp * /, main/say.c: say: Fix a bug where SayNumber in Polish tries to play incorrect sound. This change fixes a bug where calling SayNumber with a number divisible by 100 using the Polish language would cause the code to attempt to play a sound file with an empty name. (closes issue ASTERISK-23509) Reported by: zvision Review: https://reviewboard.asterisk.org/r/3378/ ........ Merged revisions 411243 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411244 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411245 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-26 16:15 +0000 [r411194] Jonathan Rose * /, channels/chan_sip.c, configs/sip.conf.sample: chan_sip: Send real CallerID information with P-Assserted-Identity (RFC-3325) Prior too this patch, the P-Asserted-Identity header would include anonymous caller id information which seems to go against the point of the P-Asserted-Identity header. Now the real caller ID information will be included in this header. Also, no privacy header would be included. This patch adds 'Privacy: id' to outgoing SIP messages that include the P-Asserted-Identity header. (closes issue AST-1301) ........ Merged revisions 411189 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411190 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411193 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-26 16:05 +0000 [r411192] Richard Mudgett * /, contrib/ast-db-manage/config/versions/4c573e7135bd_fix_tos_field_types.py: Fix 'alembic branches' merge conflict as described by the web page. ........ Merged revisions 411191 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 18:44 +0000 [r411174] Sean Bright * /, res/ari/config.c: ARI: Don't complain about missing ARI users when we aren't enabled Currently, if ARI is not enabled it will still complain that there are no configured users. This patch checks to see if ARI is enabled before logging and error or iterating the container to validate the users. Review: https://reviewboard.asterisk.org/r/3391/ ........ Merged revisions 411173 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 17:40 +0000 [r411158] Mark Michelson * /, res/res_pjsip/pjsip_configuration.c, UPGRADE.txt, res/res_pjsip_messaging.c, res/res_pjsip.c, include/asterisk/res_pjsip.h: Add a "message_context" option for PJSIP endpoints. ........ Merged revisions 411157 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 16:57 +0000 [r411142] Richard Mudgett * res/res_pjsip/pjsip_options.c, res/res_pjsip.c, include/asterisk/res_pjsip.h, /: res_pjsip: Fix contact authenticate_qualify endpoint lookup when qualifing a contact. * Fixed bad use of ao2_find() in on_endpoint(). * Replaced use of find_endpoints() with find_an_endpoint() since only the first found endpoint is ever needed. * Fixed qualify_contact_cb() to update the contact with the aor authenticate_qualify setting. Otherwise, permanent contacts in the aor type sections would have a config line order dependancy. * Fixed off nominal path contact ref leak in qualify_contact(). The comment saying the unref is not needed was wrong. * Fixed off nominal path use of the endpoint parameter if it is NULL in send_out_of_dialog_request(). * Added missing off nominal path unref of pjsip tdata in send_out_of_dialog_request(). * Fixed off nominal path failing to call the callback in send_request_cb() when the request is challenged for authentication. * Eliminated silly RAII_VAR() use in qualify_contact_cb(). * Updated ast_sip_send_request() doxygen to better reflect reality. (closes issue ASTERISK-23254) Reported by: rmudgett Review: https://reviewboard.asterisk.org/r/3381/ ........ Merged revisions 411141 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 16:06 +0000 [r411092] Kinsey Moore * /, channels/chan_sip.c: chan_sip: Fix incorrect use of timers If update_provisional_keepalive() is called while send_provisional_keepalive_full() is waiting on the PVT lock, then pvt->provisional_keepalive_sched_id will be changed to a new sched_id value by update_provisional_keepalive(), but that new sched_id then may be overwritten with -1 by send_provisional_keepalive_full(), killing the pvt's reference to a schedule and "leaking" the reference. (closes issue ASTERISK-22079) Review: https://reviewboard.asterisk.org/r/3368/ Reported by: Jamuel Starkey, Matteo, Leif Madsen, Steve Davies Patches: provisional_keepalive_fix.diff uploaded by Steve Davies (license 5012) ........ Merged revisions 411088 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411089 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411091 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 15:56 +0000 [r411090] Jonathan Rose * /, res/res_stasis.c: ARI: Resolve a subscription leak against implicit bridge subscriptions When a channel in a stasis application is joined to a bridge, a subscription for that bridge is created implicitly for the stasis application serving the channel. Prior to this patch, subsequent removals of the channel from the bridge would leave the subscription open. Review: https://reviewboard.asterisk.org/r/3380/ ........ Merged revisions 411086 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-25 15:47 +0000 [r411073-411087] Richard Mudgett * utils/conf2ael.c, main/lock.c, utils/ael_main.c: Revert -r411073. It didn't help and blew up the system. * utils/ael_main.c, utils/conf2ael.c, main/lock.c: locking: Add temporary sanity checks. Add some temporary sanity checks to hunt for locking problems with the masquerade supertest. 2014-03-24 21:39 +0000 [r411024] Joshua Colp * /, channels/chan_sip.c: chan_sip: Always use fromdomain if set for domain, even if callerid is set to restricted. (closes issue ASTERISK-20841) Reported by: Kelly Goedert ........ Merged revisions 411021 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 411022 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 411023 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-21 16:04 +0000 [r410996] Richard Mudgett * /, res/res_pjsip_registrar.c: res_pjsip_registrar.c: Miscellaneous cleanup in rx_task(). * Fix variable shadowing of 'updated' by renaming it to 'contact_update'. * Checked 'contact_update' for ast_sorcery_copy() failure. * Removed silly use of RAII_VAR() for 'contact_update'. ........ Merged revisions 410995 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-21 15:50 +0000 [r410981-410994] Sean Bright * res/ael/ael.flex, utils/Makefile, pbx/pbx_ael.c, res/ael/ael_lex.c: Make the AEL load process less chatty. Switched a bunch of LOG_NOTICEs to ast_debug. This time without breaking the build. * pbx/pbx_ael.c, res/ael/ael_lex.c, res/ael/ael.flex: Revert r410981. aelparse blew up. * main/config.c: Remove a LOG_NOTICE from ast_config_engine_register. There is enough indication from the CLI that we are loading a realtime engine as it is. * pbx/pbx_ael.c, res/ael/ael_lex.c, res/ael/ael.flex: Make the AEL load process less chatty. Switched a bunch of LOG_NOTICEs to ast_debug. 2014-03-20 23:02 +0000 [r410967] Jonathan Rose * apps/app_confbridge.c, /: app_confbridge: Fix bug - users with startmuted set don't start muted (closes issue ASTERISK-23461) Reported by: Chico Manobela Review: https://reviewboard.asterisk.org/r/3373/ ........ Merged revisions 410965 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410966 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-20 16:35 +0000 [r410950] Richard Mudgett * include/asterisk/rtp_engine.h, main/dial.c, main/manager.c, /, main/channel_internal_api.c, main/core_unreal.c, include/asterisk/channel.h, res/ari/resource_channels.c, res/res_stasis_snoop.c: assigned-uniqueids: Miscellaneous cleanup and fixes. * Fix memory leak in ast_unreal_new_channels(). Made it generate the ;2 uniqueid on a stack variable instead of mallocing it. * Made send error response to ARI and AMI requests instead of just logging excessive uniqueid length and allowing truncation. action_originate() and ari_channels_handle_originate_with_id(). * Fixed minor truncating uniqueid hole when generating the ;2 uniqueid string length. Created public and internal lengths of uniqueid. The internal length can handle a max public uniqueid plus an appended ;2. * free() and ast_free() are NULL tolerant so they don't need a NULL test before calling. * Made use better struct initialization format instead of the position dependent initialization format. Also anything not explicitly initialized in the struct is initialized to zero by the compiler. * Made ast_channel_internal_set_fake_ids() use the safer ast_copy_string() instead of strncpy(). Review: https://reviewboard.asterisk.org/r/3371/ ........ Merged revisions 410949 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-19 17:27 +0000 [r410934] Mark Michelson * /, res/res_pjsip_endpoint_identifier_ip.c: PJSIP: Allow for identify sections to be specified in sorcery.conf. "identify" is a special type of configuration object in PJSIP because unlike the other objects, it is not provided by the base res_pjsip module. Instead, it is provided by the res_pjsip_endpoint_identifier_ip module. If using the default sorcery wizard (config,criteria=type=identify) then things work because the module that applies the default wizard is the correct module. However, if attempting to use sorcery.conf to apply an alternate wizard, it was not possible. If you attempted to specify the identify object type in the res_pjsip section, then the object could not be registered since the object was undocumented for the res_pjsip module. There was no alternate configuration section defined for it, so you were out of luck if you wanted to override the default wizard. With this change, the identify section will properly have a sorcery.conf-based wizard applied when the identify definition is within the res_pjsip_endpoint_identifier_ip section. ........ Merged revisions 410933 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-19 14:25 +0000 [r410905-410919] Joshua Colp * res/res_stasis.c, /: res_stasis: Fix a bug where the default bridge type was not set. ........ Merged revisions 410918 from http://svn.asterisk.org/svn/asterisk/branches/12 * CHANGES, res/res_stasis.c, rest-api/api-docs/bridges.json, /, res/ari/resource_bridges.h: res_stasis: Extend bridge type to be a comma separated list of bridge attributes. This change turns the bridge type field into a comma separated list of attributes. These attributes include: mixing, holding, dtmf_events, and proxy_media. By setting the various attributes a user can control the type of bridge created with the behavior they need for their application. (closes issue ASTERISK-23437) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3359/ ........ Merged revisions 410904 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-19 02:33 +0000 [r410891] Matthew Jordan * res/res_ari.c, /: res_ari: Fix documentation schema error ........ Merged revisions 410890 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 23:32 +0000 [r410877] Rusty Newton * res/res_ari.c, /: res_ari: Add notes about Asterisk HTTP server to the "enabled" config option for the res_ari general section Added note and see-also reminding user to enable the HTTP server. (closes issue ASTERISK-22499) Reported by: Rusty Newton ........ Merged revisions 410876 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 15:45 +0000 [r410863] Scott Griepentrog * /, main/http.c: ARI: allow json content type with zero length body When a request was received with a Content-type of json, the body was sent for json parsing - even if it was zero length. This resulted in ARI requests failing that were valid, such as a channel DELETE with no parameters. The code has now been changed to skip json parsing with zero content length. (closes issue SWP-6748) Reported by: Samuel Galarneau Review: https://reviewboard.asterisk.org/r/3360/ ........ Merged revisions 410858 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 15:28 +0000 [r410862] Matthew Jordan * main/cdr.c, /: cdr: Add asserts for when we don't know about a CDR for a channel In the CDR core, every channel should either be filtered out (due to being an 'internal' channel used as an implementation detail, such as playing media back into a bridge) or it should get a CDR. Even if that CDR ends up being discarded, we still give the channel a CDR in case we end up needing it. If we hit a situation where a channel does not have a CDR, we should blow up in -dev-mode. Asserts are appropriate for that. This patch adds those asserts, as they would have quickly caught the error fixed by r410814. ........ Merged revisions 410861 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 12:45 +0000 [r410845] Joshua Colp * /, res/res_pjsip/config_system.c: res_pjsip: Fix memory leak of nameservers in off-nominal resolver creation failure. Thanks Walter Doekes! ........ Merged revisions 410844 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 11:52 +0000 [r410831] Sean Bright * res/res_fax_spandsp.c, /: res_fax_spandsp: Use g711_free() when available. Per Johann Steinwendtner on the asterisk-dev mailing list: http://lists.digium.com/pipermail/asterisk-dev/2014-March/066102.html g711_free() was introduced in spandsp 0.0.6pre4 and g711_release() became a noop. I opted not to remove the call to g711_release() since it is harmless and to call g711_free() if we have a sufficiently recent version of spandsp. (issue ASTERISK-20149) Reported by: Alexandr Gordeev ........ Merged revisions 410829 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410830 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-18 02:09 +0000 [r410814] Richard Mudgett * main/stasis_cache.c, /: stasis_cache: Use the right variable in the cache entry ao2 cmp function. ........ Merged revisions 410813 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-17 22:54 +0000 [r410794-410796] Joshua Colp * include/asterisk/dns.h, CHANGES, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip.c, main/dns.c, /, res/res_pjsip/config_system.c: res_pjsip: Enable PJSIP DNS client support. This change enables DNS client support within PJSIP. System nameservers are automatically discovered using res_init or res_ninit. If this fails then PJSIP will resort to using gethostbyname for resolution. By enabling this support we gain SRV support, failover, and weight support. (closes issue ASTERISK-23435) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3343/ ........ Merged revisions 410795 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_multihomed.c, /: res_pjsip_multihomed: Make address replacement less aggressive. This change makes the res_pjsip_multihomed module less aggressive when changing the address in messages. It will now only occur if the transport in use is bound to the any address OR if the system determined source address matches the bound address of the transport in use. Review: https://reviewboard.asterisk.org/r/3369/ ........ Merged revisions 410793 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-17 22:24 +0000 [r410775] Russ Meyerriecks * /, main/callerid.c: callerid: Logic error in checksum processing Callerid checksum-ing was being handled incorrectly here. When the checksum is calculated to be 0x00, it will perform 0x100-0x00 which results in 0x100. This value will then fail the otherwise correct callerid message. This patch changes the logic to simply add the calculated checksum to the transmitted 2's compliment checksum. Review: https://reviewboard.asterisk.org/r/3356/ (closes issue ASTERISK-23488) ........ This is a merge of merged revisions 410750 410747 from http://svn.asterisk.org/svn/asterisk/branches/12 I didn't want a broken patch to be comitted to trunk so I pre-merge merged them. 2014-03-17 19:35 +0000 [r410684-410699] Mark Michelson * res/res_mwi_external.c, res/res_pjsip/config_system.c, configs/sorcery.conf.sample, include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c, tests/test_sorcery_astdb.c, tests/test_sorcery.c, tests/test_sorcery_realtime.c, main/sorcery.c, /: Revert changes to sorcery that accidentally got committed. These changes were still up for review and have not been approved yet. I must have had the changes in my working copy when making a different change. ........ Merged revisions 410696 from http://svn.asterisk.org/svn/asterisk/branches/12 * bridges/bridge_softmix.c, tests/test_sorcery.c, main/channel.c, res/res_pjsip/config_system.c, res/res_mwi_external.c, include/asterisk/bridge_channel.h, funcs/func_frame_trace.c, configs/sorcery.conf.sample, res/res_pjsip/pjsip_configuration.c, include/asterisk/sorcery.h, tests/test_sorcery_astdb.c, include/asterisk/frame.h, main/bridge_channel.c, tests/test_sorcery_realtime.c, main/sorcery.c, res/res_stasis_playback.c, main/frame.c, /: Fix stuck channel in ARI through the introduction of synchronous bridge actions. Playing back a file to a channel in an ARI bridge would attempt to wait until the playback concluded before returning. The method used involved signaling the waiting thread in the ARI custom playback function. The problem with this is that there were some corner cases that were not accounted for: * If a bridge channel could not be found, then we never would attempt the playback but would still attempt to wait for the playback to complete. * If the bridge playfile action failed to queue, we would still attempt to wait for the playback to complete. * If the bridge playfile action were queued but some circumstance caused the playback not to occur (the bridge dies, the channel is removed from the bridge), then we would never be notified. The solution to this is to move the waiting logic into the bridge code. A new bridge API function is added to queue a synchronous action on a bridge. The waiting thread is notified when the queued frame has been freed, either due to an error occurring or due to successful playback. As a failsafe, the waiting thread has a 10 minute timeout just in case there is a frame leak somewhere. Review: https://reviewboard.asterisk.org/r/3338 ........ Merged revisions 410673 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-17 16:48 +0000 [r410672] Richard Mudgett * /, apps/confbridge/conf_chan_announce.c: app_confbridge: Add missing destructor call to announcer channel destructor. ........ Merged revisions 410671 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-16 20:27 +0000 [r410651] Matthew Jordan * /, res/stasis/app.c: stasis/app.c: Add some extra debugging for subscription counts Events are sent to a connected ARI application based on the things that ARI application cares about. These subscriptions can be set up implicitly - such as when that ARI application creates a new object - or explicitly, via the application resource's subscription operations. Debugging *why* something was being sent to an application - or why something was not being sent to an application - was a bit tricky, as there was no debug information for the subscriptions. This patch adds some debug level 3 statements that show the subscription counts for applications. (Level 3 was chosen as it matches the verbose level 3 statements elsewhere) ........ Merged revisions 410650 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-15 15:24 +0000 [r410639] Russell Bryant * include/asterisk/framehook.h: framehook.h: Fix some doc typos. There were a number of instances in this header file where "function all" was intended to be "function call". This patch fixes that up. 2014-03-14 21:56 +0000 [r410626] Mark Michelson * /, tests/test_sorcery_realtime.c: Fix failing realtime sorcery tests. The store realtime callback needs to return a positive value for sorcery to treat the store as a success. ........ Merged revisions 410625 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 21:36 +0000 [r410624] Jonathan Rose * main/manager.c, /: manager: fix memory leak in manager_add_filter function (closes issue ASTERISK-23420) Reported by: Etienne Lessard Patches: manager_eventfilter_leak uploaded by Etienne Lessard (license 6394) ........ Merged revisions 410609 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410623 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 20:55 +0000 [r410591-410608] Mark Michelson * /, main/db.c: Remove an extra ast_cond_wait() that slipped through the patch. ........ Merged revisions 410606 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410607 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/config.c, res/res_sorcery_realtime.c: Handle the return values of realtime updates and stores more accurately. Realtime backends' update and store callbacks return the number of rows affected, or -1 if there was a failure. There were a couple of issues: * The config API was treating 0 as a successful return, and positive values as a failure. Now the config API treats anything >= 0 as a success. * res_sorcery_realtime was treating 0 as a successful return from the store procedure, and any positive values as a failure. Now sorcery treats anything > 0 as a success. It still considers 0 a "failure" since there is no change to report to observers. Review: https://reviewboard.asterisk.org/r/3341 ........ Merged revisions 410592 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_mwi.c: Prevent conflicts regarding unsolicited and solicited MWI to an endpoint. If an endpoint is receiving unsolicited MWI for a mailbox and then attempts to subscribe to an AOR that provides MWI for the same mailbox, then the SUBSCRIBE is rejected with a 500 response. Review: https://reviewboard.asterisk.org/r/3345 ........ Merged revisions 410590 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 17:56 +0000 [r410589] Scott Griepentrog * /, CHANGES: uniqueid: Update CHANGES to reflect new features Note the new features provided by uniqueid in the CHANGES file. (issue ASTERISK-23120) Review: https://reviewboard.asterisk.org/r/3316/ ........ Merged revisions 410588 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 16:42 +0000 [r410575] Jonathan Rose * /, main/acl.c, res/res_pjsip/pjsip_configuration.c, contrib/ast-db-manage/config/versions/4c573e7135bd_fix_tos_field_types.py, CHANGES, res/res_pjsip/config_transport.c, include/asterisk/acl.h: PJSIP: TOS values should be represented as decimals in sorcery objects (closes issue ASTERISK-23235) Reported by: George Joseph Review: https://reviewboard.asterisk.org/r/3324/ ........ Merged revisions 410574 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 16:19 +0000 [r410567] Mark Michelson * /, main/db.c: Prevent delayed astdb syncs. The syncing thread sleeps for a second before waiting to be told to attempt to sync again. If a signal were sent during this sleeping period, we would end up having to wait until the next sync signal occurred in order to sync up the astdb. This code rearrangement also ensures that any pending transactions will be synced prior to Asterisk shutting down. Patches: db_sync.patch by John Hardin (License #6512) ........ Merged revisions 410556 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410559 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 16:17 +0000 [r410560] Jonathan Rose * res/ari/resource_bridges.c, /: ARI/bridges: Forward Playback/Recording Started/Finished to bridge topic (closes issue ASTERISK-23444) Reported by: Ben Merrills Review: https://reviewboard.asterisk.org/r/3340/ ........ Merged revisions 410558 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-14 16:01 +0000 [r410542-410557] Richard Mudgett * include/asterisk/app.h, /, res/res_mwi_external.c, main/app.c: res_mwi_external: Clear the stasis cache entry when the external MWI is deleted. One of the things missing when external MWI support was added was the ability to clear the stasis cache entry of deleted external MWI mailboxes. Review: https://reviewboard.asterisk.org/r/3325/ ........ Merged revisions 410555 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/cdr.c: cdr.c: Add missing aow_unlock(cdr) in off nominal path of handle_dial_message(). * Trivial common code hoisting in handle_bridge_leave_message(). * Some whitespace fixing. ........ Merged revisions 410541 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-13 19:33 +0000 [r410528] Kinsey Moore * res/stasis/control.h, res/res_stasis.c, /, res/stasis/control.c: ARI: Ensure managing application receives ChannelEnteredBridge messages This fixes an issue where a Stasis application running over ARI and subscribed to ari/events could miss the ChannelEnteredBridge event because it did not subscribe to the new bridge fast enough. To accomplish this, it subscribes the application controlling the channel to the new bridge before adding it to that bridge which required the stasis_app_control structure to maintain a reference to the stasis_app. (closes issue ASTERISK-23295) Review: https://reviewboard.asterisk.org/r/3336/ ........ Merged revisions 410527 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-13 13:25 +0000 [r410511] Joshua Colp * res/res_pjsip_multihomed.c, /: Multiple revisions 410509-410510 ........ r410509 | file | 2014-03-13 06:23:14 -0700 (Thu, 13 Mar 2014) | 2 lines res_pjsip_multihomed: Fix a bug where the 200 OK for a REGISTER would contain the wrong contact. ........ r410510 | file | 2014-03-13 06:24:17 -0700 (Thu, 13 Mar 2014) | 2 lines res_pjsip_multihomed: Remove change for testing fix. ........ Merged revisions 410509-410510 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-12 19:06 +0000 [r410492-410494] Richard Mudgett * res/res_musiconhold.c, main/channel.c, /: res_musiconhold.c: Generate MOH start/stop events whenever the MOH stream is started/stopped. * Made res_musiconhold.c always post the MusicOnHoldStart/MusicOnHoldStop events when it actually starts/stops the music streams. This allows the events to always happen when MOH starts/stops. The event posting code was moved to the MOH alloc/release routines. * Made channel_do_masquerade() stop any MOH on the original channel before masquerading so the original channel will get a stop event with correct information. * Cleaned up a couple odd codings in moh_files_alloc() and moh_alloc() dealing with the music state variable. (issue ASTERISK-23311) Reported by: Benjamin Keith Ford Review: https://reviewboard.asterisk.org/r/3306/ ........ Merged revisions 410493 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/confbridge/conf_state.c, apps/confbridge/conf_state_single.c, apps/confbridge/conf_state_inactive.c, apps/confbridge/conf_state_single_marked.c, /: app_confbridge: Make explicitly stop MOH if a user is kicked or hangs up while MOH is playing. When MOH is playing to a user in a conference and the user is kicked or hangs up from the conference then the AMI MusicOnHoldStop events didn't happen. (Asterisk v11 AMI event: MusicOnHold, state:Stop) (closes issue ASTERISK-23311) Reported by: Benjamin Keith Ford Review: https://reviewboard.asterisk.org/r/3306/ ........ Merged revisions 410490 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410491 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-12 12:51 +0000 [r410452-410472] Joshua Colp * res/res_pjsip_multihomed.c, /: res_pjsip_multihomed: Fix a bug where outgoing messages for TCP would go out using UDP. This change fixes a bug where the code which changes the transport did not check whether the message is going out over UDP or not before changing it. For TCP and TLS transports we don't need to change the transport as the correct one is already chosen. ........ Merged revisions 410471 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_multihomed.c (added), /: res_pjsip_multihomed: Add module which places the correct address within messages. Due to how messages are handled within PJSIP it is not until a message is actually sent that the destination is reliably known. This means that the addresses placed within the message may not be of the interface the message is being sent out on. This module determines what interface a message is being sent on and updates the message to contain the correct address if applicable. This module was tested by myself in a virtualized environment with multiple interfaces and also by Kinsey Moore in the following configuration: Networks: * 10.24.16.0/21 ** hard phone ** default gateway * 10.24.64.0/21 ** softphone with pjsip-based stack Transport details: bind address: 0.0.0.0 protocol: UDP All endpoints were tested with explicitly configured transports and unconfigured transports. This was tested with inbound and outbound calls, both of which were experiencing detrimental effects from incorrect IP addresses in SIP messages. These effects were only experienced by the soft phone on the 10.24.64.0 network since the messages to the hard phone on the 10.24.16.0 network had the correct IP address. (closes issue ASTERISK-23020) Reported by: xrobau Review: https://reviewboard.asterisk.org/r/3102/ ........ Merged revisions 410451 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-10 17:21 +0000 [r410395] Richard Mudgett * /, main/http.c: AST-2014-001: Stack overflow in HTTP processing of Cookie headers. Sending a HTTP request that is handled by Asterisk with a large number of Cookie headers could overflow the stack. Another vulnerability along similar lines is any HTTP request with a ridiculous number of headers in the request could exhaust system memory. (closes issue ASTERISK-23340) Reported by: Lucas Molas, researcher at Programa STIC, Fundacion; and Dr. Manuel Sadosky, Buenos Aires, Argentina ........ Merged revisions 410380 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 410381 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410383 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-10 16:33 +0000 [r410369] Scott Griepentrog * res/ari/resource_channels.c, main/manager.c, /: unqiueid: correct max uniqueid length test This patch adds null string test prior to checking for a max uniqueid value that was added in r410157. ........ Merged revisions 410368 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-10 13:30 +0000 [r410346] Kinsey Moore * /, channels/chan_sip.c: AST-2014-002: chan_sip: Exit early on bad session timers request This change allows chan_sip to avoid creation of the channel and consumption of associated file descriptors altogether if the inbound request is going to be rejected anyway. (closes issue ASTERISK-23373) Reported by: Corey Farrell Patches: chan_sip-earlier-st-1.8.patch uploaded by Corey Farrell (license 5909) chan_sip-earlier-st-11.patch uploaded by Corey Farrell (license 5909) ........ Merged revisions 410308 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 410311 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410329 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-10 12:53 +0000 [r410307] Joshua Colp * /, res/res_pjsip/pjsip_options.c, res/res_pjsip.c: AST-2014-003: res_pjsip: When handling 401/407 responses don't assume a request will have an endpoint. This change removes the assumption that an outgoing request will always have an endpoint and makes the authenticate_qualify option work once again. (closes issue ASTERISK-23210) Reported by: Joshua Colp ........ Merged revisions 410306 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-08 16:50 +0000 [r410288] George Joseph * res/res_pjsip/config_auth.c, /, res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, res/res_pjsip_endpoint_identifier_ip.c, include/asterisk/res_pjsip_cli.h, include/asterisk/sorcery.h, res/res_pjsip/pjsip_cli.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/config_transport.c, main/sorcery.c, include/asterisk/res_pjsip.h: pjsip_cli: Create pjsip show channel and contact, and general cli code cleanup. Created the 'pjsip show channel' and 'pjsip show contact' commands. Refactored out the hated ast_hashtab. Replaced with ao2_container. Cleaned up function naming. Internal only, no public name changes. Cleaned up whitespace and brace formatting in cli code. Changed some NULL checking from "if"s to ast_asserts. Fixed some register/unregister ordering to reduce deadlock potential. Fixed ast_sip_location_add_contact where the 'name' buffer was too short. Fixed some self-assignment issues in res_pjsip_outbound_registration. (closes issue ASTERISK-23276) Review: http://reviewboard.asterisk.org/r/3283/ ........ Merged revisions 410287 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-08 15:45 +0000 [r410275] Matthew Jordan * /, res/ari/resource_channels.c: resource_channels: Check if a passed in ID is NULL before checking its length Calling strlen on a NULL string is explosive. This patch checks whether or not the passed in string is NULL or zero length before checking to see if the string is too long. ........ Merged revisions 410274 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 22:56 +0000 [r410227] Corey Farrell * /, channels/chan_sip.c: chan_sip: Fix deadlock of monlock between unload_module and do_monitor Release monlock before calling pthread_join. This ensures do_monitor cannot freeze by locking monlock during module unload. (closes issue ASTERISK-21406) Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3284/ ........ Merged revisions 410224 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 410225 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410226 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 22:08 +0000 [r410212] Scott Griepentrog * /, include/asterisk/sorcery.h: sorcery: correct field register argument list This fixes mistakes I previously made in merging gtjoseph's changes with mine. ........ Merged revisions 410211 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 21:54 +0000 [r410208-410210] Matthew Jordan * /, main/config_options.c: config_options: Display the see-also information for CLI config option help The config option help information has always parsed the tags in the XML documentation. Unfortunately, it just never bothered displaying them on the CLI. With this patch, when you execute 'config show help [module] [obj] [option]', it will display what other options are useful to you. (closes issue ASTERISK-22008) Reported by: Richard Mudgett ........ Merged revisions 410209 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip.c, /: res_pjsip: Fix documentation for one touch recording see-also links The one touch recording options have several see-also links between the various configuration options. These were 'broken' by the snake casing of those options. This patch corrects the see-also links such that they reference the correct option names. ........ Merged revisions 410194 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 21:23 +0000 [r410207] Mark Michelson * main/sorcery.c, res/res_sorcery_realtime.c, /, include/asterisk/sorcery.h, tests/test_sorcery_realtime.c: Make res_sorcery_realtime filter unknown retrieved results. When retrieving data from a database or other realtime backend, it's quite possible to retrieve variables that Asterisk does not care about but that are legitimate to exist. Asterisk does not need to throw a hissy fit when these variables are encountered but rather just filter them out. Review: https://reviewboard.asterisk.org/r/3305 ........ Merged revisions 410187 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 21:11 +0000 [r410191] Scott Griepentrog * main/sorcery.c, /, include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c: pjsip: allow and disallow show same codecs In order to prevent confusion over the allow and disallow list of codecs being the same an option for registering a field as an alias is added. The alias field will be read from the configuration file, but afterwards is not listed as a known field. With disallow set as an alias, the CLI command pjsip show endpoint # will list the allow= field, but not the disallow field. (closes issue ASTERISK-23092) Review: https://reviewboard.asterisk.org/r/3193/ ........ Merged revisions 410190 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 20:41 +0000 [r410174-410185] Richard Mudgett * include/asterisk/devicestate.h, main/stasis_cache.c, main/stasis_message.c, /, tests/test_devicestate.c, include/asterisk/stasis.h, main/app.c, main/devicestate.c, tests/test_stasis.c: stasis cache: Enhance to keep track of an item from different entities. A stasis cache entry now contains more than a single message/snapshot. It contains messages/snapshots for the local entity as well as any remote entities that post to the cached item. In addition callbacks can be supplied when the cache is created to compute and post the aggregate message/snapshot representing all entities stored in the cache entry. * All stasis messages now have an eid to indicate what entity posted it. * The stasis cache enhancements allow device state to cache and aggregate the device states from local and remote entities in a single operation. The cached aggregate device state is available immediately after it is posted to the stasis bus. This improves performance by eliminating a cache dump and associated ao2 container traversals to calculate the aggregate state. (closes issue ASTERISK-23204) Reported by: Mark Michelson Review: https://reviewboard.asterisk.org/r/3281/ ........ Merged revisions 410184 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_cel.c, channels/sig_pri.c, channels/sig_ss7.c, include/asterisk/bridge.h, tests/test_cdr.c, channels/sig_pri.h, channels/chan_dahdi.c, channels/sig_ss7.h, /: uniqueid: Fix chan_dahdi, sig_pri, sig_ss7, test_cdr, and test_cel compiler errors. (issue ASTERISK-23120) ........ Merged revisions 410171 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 15:47 +0000 [r410158] Scott Griepentrog * tests/test_cdr.c, res/res_clioriginate.c, res/res_ari_bridges.c, tests/test_substitution.c, res/res_stasis_playback.c, channels/chan_multicast_rtp.c, apps/app_meetme.c, /, main/bridge_basic.c, include/asterisk/channel_internal.h, tests/test_app.c, apps/confbridge/conf_chan_record.c, main/core_unreal.c, channels/chan_gtalk.c, include/asterisk/stasis_app_playback.h, res/ari/resource_bridges.c, channels/chan_jingle.c, channels/chan_phone.c, pbx/pbx_spool.c, res/ari/resource_bridges.h, res/parking/parking_tests.c, channels/chan_motif.c, apps/app_confbridge.c, res/ari/resource_channels.c, include/asterisk/pbx.h, res/res_stasis.c, include/asterisk/bridge.h, apps/app_voicemail.c, res/ari/resource_channels.h, apps/app_dial.c, res/res_calendar_exchange.c, channels/chan_vpb.cc, apps/app_page.c, apps/app_chanisavail.c, include/asterisk/dial.h, main/core_local.c, res/parking/parking_bridge_features.c, tests/test_stasis_endpoints.c, res/parking/parking_bridge.c, channels/chan_skinny.c, include/asterisk/stasis_app_snoop.h, addons/chan_mobile.c, main/bridge_channel.c, channels/chan_pjsip.c, channels/chan_mgcp.c, channels/chan_unistim.c, main/pbx.c, res/res_calendar_icalendar.c, main/ccss.c, channels/chan_bridge_media.c, main/bridge.c, tests/test_stasis_channels.c, apps/app_bridgewait.c, apps/app_originate.c, res/res_calendar_caldav.c, include/asterisk/channel.h, res/parking/parking_applications.c, apps/app_followme.c, main/cel.c, apps/app_queue.c, res/res_ari_channels.c, res/res_calendar_ews.c, rest-api/api-docs/bridges.json, main/dial.c, channels/chan_dahdi.c, channels/chan_h323.c, tests/test_cel.c, rest-api/api-docs/channels.json, include/asterisk/bridge_internal.h, apps/confbridge/conf_chan_announce.c, res/res_calendar.c, include/asterisk/core_unreal.h, addons/chan_ooh323.c, res/stasis/control.c, channels/chan_sip.c, main/channel_internal_api.c, include/asterisk/stasis_app.h, res/res_stasis_snoop.c, channels/chan_console.c, channels/chan_iax2.c, channels/chan_oss.c, apps/app_agent_pool.c, main/channel.c, main/manager.c, channels/chan_misdn.c, tests/test_voicemail_api.c, channels/chan_alsa.c, channels/chan_nbs.c, main/message.c: uniqueid: channel linkedid, ami, ari object creation with id's Much needed was a way to assign id to objects on creation, and much change was necessary to accomplish it. Channel uniqueids and linkedids are split into separate string and creation time components without breaking linkedid propgation. This allowed the uniqueid to be specified by the user interface - and those values are now carried through to channel creation, adding the assignedids value to every function in the chain including the channel drivers. For local channels, the second channel can be specified or left to default to a ;2 suffix of first. In ARI, bridge, playback, and snoop objects can also be created with a specified uniqueid. Along the way, the args order to allocating channels was fixed in chan_mgcp and chan_gtalk, and linkedid is no longer lost as masquerade occurs. (closes issue ASTERISK-23120) Review: https://reviewboard.asterisk.org/r/3191/ ........ Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-07 05:04 +0000 [r410108] Matthew Jordan * /, channels/chan_sip.c: chan_sip: Allow static realtime members to be qualified during module load. When a static realtime peer with qualify=yes is loaded, Asterisk will fail to send an OPTIONS request due to the lastms being equal to 0. This results in the peer being unable to receive calls from Asterisk because the status is permanently UNKNOWN. This patch allows an OPTIONS request to be sent during module load by ignoring the lastms value on startup only. Review: https://reviewboard.asterisk.org/r/3294/ (closes issue ASTERISK-17523) Reported by: Maciej Krajewski Tested by: wushumasters patches: realtime_fix_11.7.0.txt uploaded by Trevor Peirce (license 6112) ........ Merged revisions 410105 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 410106 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410107 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 23:47 +0000 [r410092] Richard Mudgett * main/sorcery.c, /: sorcery.c: Fix off-nominal path ref and memory leak in ast_sorcery_objectset_json_create(). * Made exit a loop early on error in ast_sorcery_objectset_json_create(). * Removed some dead code in ast_sorcery_objectset_create2(). ........ Merged revisions 410089 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 23:43 +0000 [r410091] Russell Bryant * /, res/res_musiconhold.c: moh: fix a refcount error with realtime MOH I observed a crash in res_musiconhold on an Asterisk 11 system using realtime MOH. Investigation of the backtrace showed a corrupt mohclass, implying that it got destroyed before the code expected it to. I went looking for reference counting errors that could have caused this crash and this patch this result. It contains 2 changes. 1) Remove a usless block of code that was impossible to reach. There was even a comment indicating that it was impossible to reach. The conditional includes "!ast_test_flag(global_flags, MOH_CACHERTCLASSES)" and it's inside of an if block with the opposite check "ast_test_flag(global_flags, MOH_CACHERTCLASSES)". There's no good reason to keep it around. 2) A similar block to #1 contained a reference counting error. It stores state->class in the local variable mohclass without increasing its reference count. The reference count on mohclass is decremented at the end of the function. This block of code probably very rarely runs, which would help explain why this system was working fine for many months before experiencing a crash. Review: https://reviewboard.asterisk.org/r/3282/ ........ Merged revisions 410043 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 410044 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 410090 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 22:39 +0000 [r410042] George Joseph * res/res_pjsip/config_auth.c, funcs/func_sorcery.c (added), res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, main/bucket.c, res/res_pjsip_endpoint_identifier_ip.c, include/asterisk/config.h, include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c, res/res_pjsip_acl.c, CHANGES, tests/test_sorcery.c, res/res_pjsip/config_transport.c, main/config.c, main/sorcery.c: sorcery: Create AST_SORCERY dialplan function. This patch creates the AST_SORCERY dialplan function which allows someone to retrieve any value from a sorcery-based config file. It's similar to AST_CONFIG. The creation of the function itself was fairly straightforward but it required changes to the underlying sorcery infrastructure that rippled into individual sorcery objects. The changes stemmed from inconsistencies in how sorcery created ast_variable objectsets from sorcery objects and the inconsistency in how individual objects used that feature especially when it came to parameters that can be specified multiple times like contact in aor and match in identify. You can read more here... http://lists.digium.com/pipermail/asterisk-dev/2014-February/065202.html So, what this patch does, besides actually creating the AST_SORCERY function, is the following... * Creates ast_variable_list_append which is a helper to append one ast_variable list to another. * Modifies the ast_sorcery_object_field_register functions to accept the already-defined sorcery_fields_handler callback. * Modifies ast_sorcery_objectset_create to accept a parameter indicating return type preference...a single ast_variable with all values concatenated or an ast_variable list with multiple entries. Also fixed a few bugs. * Modifies individual sorcery object implementations to use the new function definition of the ast_sorcery_object_field_register functions. * Modifies location.c and res_pjsip_endpoint_identifier_ip.c to implement sorcery_fields_handler handlers so they return multiple occurrences as an ast_variable_list. * Added a whole bunch of tests to test_sorcery. (closes issue ASTERISK-22537) Review: http://reviewboard.asterisk.org/r/3254/ 2014-03-06 19:04 +0000 [r410029] Jonathan Rose * include/asterisk/acl.h, /, main/acl.c, res/res_pjsip/pjsip_configuration.c, UPGRADE.txt, contrib/ast-db-manage/config/versions/4c573e7135bd_fix_tos_field_types.py (added), res/res_pjsip/config_transport.c: pjsip configuration: Make transport TOS values consistent with endpoints Transport TOS values were interpreted as DSCP values without being documented as such. Endpoint TOS values (tos_audio/tos_video) behaved normally as TOS values have historically. This patch makes the transport TOS values behave as TOS values and makes all TOS values readable as string values (e.g. AF11). In addition, alembic scripts have been updated to use the proper field types for all TOS/COS values. (issue ASTERISK-23235) Reported by: George Joseph Review: https://reviewboard.asterisk.org/r/3304/ ........ Merged revisions 410028 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 18:20 +0000 [r410027] Joshua Colp * res/ari/resource_channels.c, CHANGES, res/ari/ari_model_validators.c, rest-api/api-docs/recordings.json, res/ari/resource_bridges.c, res/ari/ari_model_validators.h, /, include/asterisk/stasis_app_recording.h, res/res_stasis_recording.c: res_stasis_recording: Add a "target_uri" field to recording events. This change adds a target_uri field to the live recording object. It contains the URI of what is being recorded. (closes issue ASTERISK-23258) Reported by: Ben Merrills Review: https://reviewboard.asterisk.org/r/3299/ ........ Merged revisions 410025 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 15:58 +0000 [r410012] Mark Michelson * res/res_pjsip_mwi.c, /: Don't attempt to link in an aggregate MWI subscription if an endpoint does not aggregate MWI. Attempting to link a NULL object into an ao2 container had been benign previously, but since enabling DO_CRASH in the testsuite, this is now causing a crash. It's better to be right here anyway. ........ Merged revisions 410011 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 02:22 +0000 [r409996] Matthew Jordan * res/res_fax_spandsp.c, /: res_fax_spandsp: Fix crash when passing ulaw/alaw data to spandsp When acting as a T.38 fax gateway, res_fax_spandsp would at times cause a crash in libspandsp. This would occur when, during fax tone detection, a ulaw/alaw frame would be passed to modem_connect_tones_rx. That particular routine expects the data to be in slin format. This patch looks at the frame type and, if the data is ulaw/alaw, converts the format to slin before passing it to modem_connect_tones_rx. Review: https://reviewboard.asterisk.org/r/3296 (closes issue ASTERISK-20149) Reported by: Alexandr Gordeev Tested by: Michal Rybarik patches: spandsp_g711decode.diff uploaded by Michal Rybarik (license 6578) ........ Merged revisions 409990 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409991 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-06 00:33 +0000 [r409970-409977] Richard Mudgett * apps/confbridge/conf_state_multi.c, apps/confbridge/conf_state_inactive.c, /: app_confbridge: Remove some noop code. ........ Merged revisions 409976 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_musiconhold.c: res_musiconhold.c: Remove some unnecessary RAII_VAR() usage. * Made the moh_register() define use useful parameter names. ........ Merged revisions 409967 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 20:41 +0000 [r409904-409919] Kinsey Moore * main/config.c, /: config: Fix inverted test The test of the result of the stat() call was inverted such that its output was only used if the call failed. This inverts the test so that the output of stat() is used correctly. This was causing full reloads on unchanged files. (closes issue ASTERISK-23383) Reported by: David Woolley ........ Merged revisions 409916 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409917 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409918 from http://svn.asterisk.org/svn/asterisk/branches/12 * bridges/bridge_native_rtp.c, /: bridge_native_rtp: Fix crash involving masquerade It is possible for a channel to be masqueraded out of a bridge which means it may no longer have RTP glue to check upon leaving said bridge. If this situation occurred (it's possible at least during dial and call pickup) then Asterisk would crash. This change makes sure the glue is checked before use. (closes issue AST-1290) Reported by: John Bigelow ........ Merged revisions 409900 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 18:51 +0000 [r409889] Richard Mudgett * contrib/ast-db-manage/cdr/versions, contrib/ast-db-manage/cdr/versions/210693f3123d_create_cdr_table.py, /, contrib/ast-db-manage/config/versions/28887f25a46f_create_queue_tables.py (added), contrib/ast-db-manage/cdr.ini.sample (added), contrib/ast-db-manage/cdr/env.py, contrib/ast-db-manage/cdr (added), contrib/ast-db-manage/cdr/script.py.mako: alembic: Add missing queue and CDR table creation scripts. * Added the queues and queue_members tables to the config alembic scripts. * Added the CDR table alembic creation script. The CDR table is more of an example for new setups since the actual table can be fully customized in cdr_adaptive_odbc.conf. (closes issue ASTERISK-23233) Reported by: jmls Review: https://reviewboard.asterisk.org/r/3227/ ........ Merged revisions 409885 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 18:47 +0000 [r409888] Mark Michelson * funcs/func_presencestate.c, /: Fix documentation for PRESENCE_STATE to properly illustrate how to create a presence hint. There was a missing comma. This was discovered by Dan Kaplan. ........ Merged revisions 409886 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409887 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 16:58 +0000 [r409836] David M. Lee * main/config.c, /, configure, include/asterisk/autoconfig.h.in, configure.ac: Corrected cross-platform stat nanosecond code When nanosecond time resolution was added for identifying config file changes, it didn't cover all of the myriad of ways that one might obtain nanosecond time resolution off of struct stat. Rather than complicate the #if even further figuring out one system from the next, this patch directly tests for the three struct members I know about today, and #ifdef's accordingly. Review: https://reviewboard.asterisk.org/r/3273/ ........ Merged revisions 409833 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409834 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409835 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 16:26 +0000 [r409831-409832] Moises Silva * res/res_http_websocket.c: Fix res/res_http_websocket.c build failure in 32bit due to incorrect print format for uint64_t * res/res_http_websocket.c, /: Fix WebRTC over WSS not working Several fixes for the WebSockets implementation in res/res_http_websocket.c * Flush the websocket session FILE* as fwrite() may not actually guarantee sending the data to the network. If we do not flush, it seems that buffering on the SSL socket for outbound messages causes issues * Refactored ast_websocket_read to take into account that SSL file descriptors may be ready to read via fread() but poll() will not actually say so because the data was already read from the network buffers and is now in the libc buffers (closes issue ASTERISK-23099) (closes issue ASTERISK-21930) Review: https://reviewboard.asterisk.org/r/3248/ ........ Merged revisions 409681 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409697 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 12:06 +0000 [r409780] Sean Bright * contrib/scripts/astgenkey, contrib/scripts/astgenkey.8, /: Fix references to 'keys' CLI commands in astgenkey ........ Merged revisions 409777 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409778 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409779 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-05 06:17 +0000 [r409747] Igor Goncharovskiy * channels/chan_unistim.c: Add update_peer function to unistim_rtp_glue, improve other unistim_rtp_glue functions conforming to other channel drivers. Do not forget auto-detected and user-selected phone settings on 'unistim reload' ........ Merged revisions 409705 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409745 from http://svn.asterisk.org/svn/asterisk/branches/11 2014-03-05 01:05 +0000 [r409683] Richard Mudgett * /, include/asterisk/stasis_internal.h: stasis: Made internal_stasis_subscribe() prototype and definition match exactly. ........ Merged revisions 409682 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-04 19:34 +0000 [r409627] Michael L. Young * funcs/func_audiohookinherit.c, /: func_audiohookinheritance: Check If A Channel Was Specified This patch prevents a crash when using the function audiohookinheritance without setting the channel. (closes issue ASTERISK-23104) Reported by: Joel Vandal Tested by: Joel Vandal Patches: asterisk-23104_audiohook_inherit_no_channel-11.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/3272/ ........ Merged revisions 409623 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409625 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409626 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-04 17:22 +0000 [r409587] Jonathan Rose * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Fix one way audio problems with hold/unhold when using ICE ICE sessions will now be restarted if sessions are changed to use new sets of remote candidates. (closes issue ASTERISK-22911) Reported by: Vytis Valentinavičius Review: https://reviewboard.asterisk.org/r/3275/ ........ Merged revisions 409565 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409570 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-04 16:55 +0000 [r409569] Kinsey Moore * /, main/astobj2.c: AO2: Add an assert for bad objects This adds an assert that will only be active if Asterisk is compiled with DO_CRASH and allows the testsuite to fail tests that would otherwise require log file parsing. ........ Merged revisions 409566 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409567 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409568 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-04 14:55 +0000 [r409475] Sean Bright * /, channels/chan_sip.c: Minor whitespace change to 'sip show peers' output. (closes issue ASTERISK-23406) Reported by: ibercom Tested by: ibercom Patches: asterisk-11.patch uploaded by ibercom ........ Merged revisions 409472 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409473 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409474 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-03 19:44 +0000 [r409423] Joshua Colp * /, res/res_stasis_recording.c: res_stasis_recording: Fix memory leak of the absolute name. ........ Merged revisions 409422 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-03 02:08 +0000 [r409364] Matthew Jordan * main/asterisk.c, /: doxygen: Tweak the link back to ye olde Digium website ........ Merged revisions 409361 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409362 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409363 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-02 17:03 +0000 [r409350] Tzafrir Cohen * /, Makefile.rules: Makefile: replace -O6 with -O3 -O6 is not a legal option of gcc. Unofficially gcc considers it to be equivalent of -O3. clang chalks on it, though. This commit sets the default optimization flag to be -O3, like gcc actually considered it. Review: https://reviewboard.asterisk.org/r/3280/ ........ Merged revisions 409308 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409344 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409346 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-01 20:28 +0000 [r409288] Joshua Colp * res/res_pjsip_session.c, /: res_pjsip_session: Set options (100rel, timers) on incoming sessions. This change passes options to the UAS creation function. This in turn sets up 100rel and session timer properties on the incoming session. Reported by Julian Russell on asterisk-users mailing list. ........ Merged revisions 409287 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-03-01 00:05 +0000 [r409257-409275] Richard Mudgett * /, main/devicestate.c: devicestate.c: Simplified some logic in _ast_device_state(). ........ Merged revisions 409274 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_cache.c, /: stasis_cache.c: Remove some unnecessary RAII_VAR() usage. ........ Merged revisions 409272 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis.c, /: stasis.c: Misc code cleanups. * Remove some unnecessary RAII_VAR() usage. * Made the struct stasis_subscription ao2 object use the ao2 lock instead of a redundant join_lock in the struct for ast_cond_wait(). * Removed locks on some ao2 objects that don't need the lock. * Made the topic pool entries container use the ao2 template functions. * Add some missing allocation failure checks. * Add missing cleanup in off nominal path of dispatch_message(). ........ Merged revisions 409270 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip: Add precautionary p->owner checks. * Add precautionary p->owner checks in sip_hangup(), get_refer_info(), get_also_info(), and interpret_t38_parameters(). * Simplify some tangled logic in get_refer_info(), get_also_info(), and add_rpid(). * Removed some dead code in handle_request_invite(). (closes issue ASTERISK-23323) Reported by: Walter Doekes Patches: issueA23323-more_p_owner_checks-1.8.x.patch (license #5674) uploaded by wdoekes (modified) issueA23323-more_p_owner_checks-11.x.patch (license #5674) uploaded by wdoekes (modified) issueA23323-more_p_owner_checks-12.x.patch (license #5674) uploaded by wdoekes (modified) issueA23323-more_p_owner_checks-trunk.patch (license #5674) uploaded by wdoekes (modified) ........ Merged revisions 409207 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409255 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409256 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-28 21:24 +0000 [r409237] Kinsey Moore * apps/app_queue.c, /: app_queue: Fix documented AMI event name During the rewrite of AMI events to use the Stasis bus, the name of the QueueMemberPaused event was changed to QueueMemberPause. This corrects documentation to reflect that. ........ Merged revisions 409234 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-28 18:03 +0000 [r409159] Richard Mudgett * /, channels/chan_sip.c: chan_sip: Fix crash in ast_channel_hangupcause_set(). * Fix crash in ast_channel_hangupcause_set() because p->owner not checked before calling. Regression introduced by the fix for ASTERISK-22621. (closes issue ASTERISK-23135) Reported by: OK (issue ASTERISK-23323) Reported by: Walter Doekes ........ Merged revisions 409156 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409157 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409158 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-27 19:54 +0000 [r409132] Jonathan Rose * res/res_rtp_asterisk.c, /: Multiple revisions 409129-409130 ........ r409129 | jrose | 2014-02-27 13:19:02 -0600 (Thu, 27 Feb 2014) | 15 lines res_rtp_asterisk: Fix checklist creating problems in ICE sessions Prior to this patch, local candidate lists including SRFLX would fail to start properly when building ICE candidate check lists. This patch fixes that problem by making sure that each SRFLX candidate is associated with the proper base address so that the check list can create matches properly. This patch was written by jcolp. The issue will be left open to await testing by the issue participants. (issue ASTERISK-23213) Reported by: Andrea Suisani Review: https://reviewboard.asterisk.org/r/3256/ ........ r409130 | jrose | 2014-02-27 13:38:10 -0600 (Thu, 27 Feb 2014) | 8 lines res_rtp_asterisk: correct build error from r409129 Accidentally placed a declaration below functional code (issue ASTERISK-23213) Reported by: Andrea Suisani Review: https://reviewboard.asterisk.org/r/3256/ ........ Merged revisions 409129-409130 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409131 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-27 16:26 +0000 [r409091] David M. Lee * utils/astman.c, /: Fix memory stomping bug in astman. This memset complained in dev mod on my Ubuntu box. The memset is both unnecessary and dangerous. At this point, m hasn't been initialized yet, so the memset will write off to whatever address happens to be on the stack at the time. ........ Merged revisions 409077 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409083 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409087 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-27 16:08 +0000 [r409055] Corey Farrell * /, configs/res_fax.conf.sample: res_fax: Comment out default settings from res_fax.conf. Comment out many settings in res_fax.conf.sample. The defaults are set in res_fax.c, so setting the same value in sample config does nothing but make the sample config more fragile. (closes issue ASTERISK-23231) Reported by: David Brillert Review: https://reviewboard.asterisk.org/r/3261/ ........ Merged revisions 409052 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 409053 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 409054 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-27 12:29 +0000 [r409000] Matthew Jordan * /, res/res_pjsip_sdp_rtp.c: res_pjsip_sdp_rtp: Apply packetization rules on inbound SDP handling The setting 'use_ptime' is supposed to tell Asterisk to honour the ptime attribute in an offer, preferring it to whatever packetization preferences have been set internally. Currently, however, something rather quirky will happen: (1) The SDP answer will be constructed in create_outgoing_sdp_stream. This will use the preferences from the endpoint, such that the 200 OK response will add the packetization preferences from the endpoint, and not what was offered. (2) When the 200 response is issued, apply_negotiated_sdp_stream is called. This will call apply_packetization, which will use the ptime attribute from the offer internally. We end up telling the offerer to use the internal ptime attribute, but we end up using the offered ptime attribute. Hilarity ensues. This patch modifies the behaviour by calling apply_packetization from negotiate_incoming_sdp_stream, which is called prior to create_outgoing_sdp_stream. This causes the format preferences on the session's media object to be set to the inbound ptime value (if 'use_ptime' is enabled), such that the construction of the answer gets the right value immediately. Review: https://reviewboard.asterisk.org/r/3244/ ........ Merged revisions 408999 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-26 23:35 +0000 [r408984] Richard Mudgett * /, tests/test_stasis.c: test_stasis.c: Misc cleanups. * Make the consumer ao2 object use the ao2 lock instead of a redundant lock in the struct for ast_cond_wait(). * Fixed some curly brace placements. * Fixed use of malloc(0). malloc(0) has variant behavior. It is up to the implementation to determine if it returns NULL or a valid pointer that can be later passed to free(). ........ Merged revisions 408983 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-26 19:00 +0000 [r408971] Scott Griepentrog * channels/chan_pjsip.c, /: pjsip: avoid edge case potential crash in answer() When accidentally compiling against a wrong version of pjsip headers with a different pjsip_inv_session size, the invite_tsx structure could be null in the answer() function. This led to a crash because it attempted to send the session response with an uninitialized packet pointer. This patch presets packet to null and adds a diagnostic log message to explain why the call fails. Review: https://reviewboard.asterisk.org/r/3267/ ........ Merged revisions 408970 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-26 17:04 +0000 [r408958] Joshua Colp * res/res_ari.c, /: res_ari: Make some additional error responses consistent with the rest of the system. This change makes some error cases use ast_ari_response_error to construct their error responses instead of manually doing it. This ensures they are consistent with the other error responses. Based on the original patch as done by Paul Belanger on the associated review. Review: https://reviewboard.asterisk.org/r/2904/ ........ Merged revisions 408957 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-26 13:47 +0000 [r408942-408944] Kinsey Moore * include/asterisk/res_pjsip_session.h, /: PJSIP: Fix some bad spacing ........ Merged revisions 408943 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_refer.c: PJSIP: Prevent crash if channel has gone away It is currently possible for an ast_sip_session to exist without an associated channel as is the case when a new invite is coming in or just after a hangup is issued on a chan_pjsip channel. Part of the attended transfer code assumed the channel would be non-NULL and used it as such causing a crash. This bug was exposed thanks to the attended transfer ARI test in the test suite. (closes issue ASTERISK-23287) Reported by: Matt Jordan ........ Merged revisions 408941 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-26 08:57 +0000 [r408932] Igor Goncharovskiy * channels/chan_unistim.c: Implement functions handling keypress, display icons and text for i2004 KEM support. 2014-02-25 17:51 +0000 [r408881-408883] Kevin Harwell * res/res_pjsip_exten_state.c, /, res/res_pjsip_pidf_digium_body_supplement.c (added), include/asterisk/res_pjsip_body_generator_types.h: res_pjsip_exten_state: Presence for digium phones Added presence support for digium phones. Review: https://reviewboard.asterisk.org/r/3239/ ........ Merged revisions 408882 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_send_to_voicemail.c (added), res/res_pjsip_header_funcs.c: res_pjsip_send_to_voicemail: transferring to voicemail for digium phones Added the ability for transferring directly to voicemail on digium phones. Added a new module that checks for the presence of a custom header and/or diversion header within a sip REFER. If either is found and they specify a sending to voicemail action then variables are added to the channel allowing the user access to them in the dialplan. Dialplan can then be written that branches based upon these values allowing, for instace, for a single number to be used for dialing and/or accessing voicemail directly. Also fixed a problem where the PJSIP_HEADER function was allowing non pjsip channels through (checked to make sure it has the correct channel type before proceeding). Review: https://reviewboard.asterisk.org/r/3245/ ........ Merged revisions 408880 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-25 17:44 +0000 [r408879] Rusty Newton * configs/voicemail.conf.sample, /: configs/voicemail.conf.sample - Make mailcmd sample text more explicit Made the wording a bit more explicit. Didn't really change the meaning. ........ Merged revisions 408876 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408877 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408878 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-22 23:31 +0000 [r408859] Matthew Jordan * /, main/asterisk.c: main: Initialize dialplan providing core components prior to module pre-load It is possible to pre-load pbx_config. As a result, pbx_config - which will load and parse the dialplan - will attempt to use various dialplan components, such as device state providers and presence state providers, prior to them being initialized by the core. This would lead to a crash, as the components had not created their Stasis cache entries. This patch moves a number of core component initializations before the module pre-load. This guarantees that if someone does pre-load pbx_config - or other pbx modules - that the Stasis caches for the various core components are created. (closes issue ASTERISK-23320) Reported by: xrobau (closes issue ASTERISK-23265) Reported by: Andrew Nagy Tested by: Andrew Nagy, Rusty Newton ........ Merged revisions 408855 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-22 18:01 +0000 [r408840] Alexandr Anikin * addons/chan_ooh323.c, /: ignore AST_CONTROL_PVT_CAUSE_CODE without any messages (closes issue ASTERISK-23336) Reported by: Alexander Semych ........ Merged revisions 408838 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408839 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-22 02:31 +0000 [r408788] Corey Farrell * /, utils/extconf.c, utils/conf2ael.c, res/ael/pval.c, main/pbx.c: Remove extra defines of AST_PBX_MAX_STACK. * Ensure AST_PBX_MAX_STACK is only defined in extconf.h and pbx.h. * Fix incorrect function parameters in utils/extconf.c. (closes issue ASTERISK-23141) Reported by: Maxim Review: https://reviewboard.asterisk.org/r/3241/ ........ Merged revisions 408785 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408786 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408787 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-21 18:37 +0000 [r408731] Kevin Harwell * main/rtp_engine.c, /: rtp_engine: Dynamic payload change in rtp mapping not supported Asterisk didn't support the dynamic payload change in rtp mapping in the 200 OK response. Scenario: Asterisk sends the INVITE proposing alaw and telephone-event, it proposes rtpmap:101 for telephone-event. Peer responds with 2xx, it answers with alaw and telephone-event also, but it proposes a different rtpmap number (rtpmap:103) for telephone-event. Expected Behaviour: Asterisk should honour the rtpmapping in the response and send DTMF packets using 103 as payload type for DTMF. Actual Behaviour: Asterisk sends DTMF packets using payload type 101. With this patch asterisk now supports changes that can occur in the rtp mapping in the response. (closes issue ASTERISK-23279) Reported by: NITESH BANSAL Review: https://reviewboard.asterisk.org/r/3225/ Patches: dynamic_payload_change.patch uploaded by nbansal (license 6418) ........ Merged revisions 408729 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408730 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-21 18:19 +0000 [r408712-408723] Richard Mudgett * main/manager.c, /: manager: Fix AMI Status action of a single channel. Fixed use of uninitialized ao2 container iterator in an off-nominal condition. Either a memory allocation error or the requested channel is an internal channel not exposed to the outside. ........ Merged revisions 408715 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/sorcery.c, res/ari/resource_endpoints.c, /, apps/app_meetme.c, res/res_fax.c, res/res_stasis_recording.c, main/stasis_channels.c, res/res_sorcery_astdb.c, include/asterisk/json.h: json: Fix off-nominal json ref counting issues. * Fixed off-nominal json ref counting issue with using the following API calls: ast_json_object_set() and ast_json_array_append(). * Fixed off-nominal error reporting in ast_ari_endpoints_list(). * Fixed some miscellaneous off-nominal json ref counting issues in report_receive_fax_status() and dial_to_json(). ........ Merged revisions 408713 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/json.c, /: json: Fix json API wrapper code for json library versions earlier than 2.3.0. * Fixed json ref counting issue with json API wrapper code for ast_json_object_update_existing() and ast_json_object_update_missing() when the json library is earlier than version 2.3.0. ........ Merged revisions 408711 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-21 16:49 +0000 [r408699] Corey Farrell * channels/chan_sip.c: chan_sip: prevent add_route from adding empty header. Fix regression caused by ASTERISK-22582. Empty Route headers were added when the route had a single strict hop. (closes issue ASTERISK-23306) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3236/ 2014-02-21 16:27 +0000 [r408645-408652] Kevin Harwell * main/rtp_engine.c, /: rtp_engine: Output mixup in ${CHANNEL(rtpqos,audio,all)} Fixed the output of CHANNEL(rtpqos,audio,all) to use txjitter instead of rxjitter. (closes issue ASTERISK-23261) Reported by: rsw686 Patches: rtpqos.patch uploaded by rsw686 (license 5887) ........ Merged revisions 408646 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408647 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408649 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/channel.c, /: channel.c: MOH is not working for transferee after attended transfer Updated the code to check to see if MOH is playing on the transferor and if so then start it on the channel that replaces it during a masquerade. Example scenario of the problem: Alice calls Bob and then Bob begins the attended transfer process into a queue. Upon going on hold Alice hears music and so does Bob once he is in the queue. Bob then transfers Alice into the queue and then music for Alice stops even though she should be hearing it since has now replaced Bob in the queue. The problem that was occurring is that once the channel was masqueraded the app (queues, confbridge, etc...) had no way of knowing that the channel had just been swapped out thus it did not start music for the present channel. Credit to Olle Johansson for pointing me in the right direction on this issue. (closes issue ASTERISK-19499) Reported by: Timo Teräs Review: https://reviewboard.asterisk.org/r/3226/ ........ Merged revisions 408642 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408643 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408644 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-21 10:45 +0000 [r408592] Alexandr Anikin * /, addons/ooh323c/src/ooCalls.h: Fix type of roundTripDelay variables ........ Merged revisions 408589 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408590 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408591 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-21 00:50 +0000 [r408539] Michael L. Young * /, apps/app_chanspy.c: app_chanspy: Documentation Update To Clarify "x" Option When using the "x" option (specify a DTMF digit to exit the application), it is not obvious in the documentation that this only works when spying on a channel. If a channel being used to spy on other channels is waiting to connect to a channel or is no longer attached to a channel, the DTMF is ignored. As noted on the issue tracker, since there are workarounds available and this is a rarely used option we are opting for a documentation change here. (closes issue ASTERISK-22661) Reported by: Chris Hillman Patches: asterisk-22661-doc-clarify-chan_spy.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2990/ ........ Merged revisions 408536 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408537 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408538 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-20 21:12 +0000 [r408519-408523] George Joseph * /, res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c: pjsip_cli: Add pjsip commands 'show registrations' and 'show contacts'. Added 'show registrations' and 'show contacts' to pjsip cli to make things a little more consistent. The output is exactly the same as the list command. Just needed to add entries to their respective ast_cli_entry structures. (closes issue ASTERISK-23275) Review: http://reviewboard.asterisk.org/r/3210/ ........ Merged revisions 408522 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_cli.c, main/config.c: pjsip_cli: Fix memory leak in ast_sip_cli_print_sorcery_objectset. Fixed memory leaks in ast_sip_cli_print_sorcery_objectset and ast_variable_list_sort. (closes issue ASTERISK-23266) Review: http://reviewboard.asterisk.org/r/3200/ ........ Merged revisions 408520 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/sorcery.h, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip.c, tests/test_sorcery.c, main/sorcery.c, /, res/res_pjsip/config_system.c: sorcery: Create sorcery instance registry. In order to retrieve an arbitrary sorcery instance from a dialplan function (or any place else) there needs to be a registry of sorcery instances. ast_sorcery_init now creates a hashtab as a registry. ast_sorcery_open now checks the hashtab for an existing sorcery instance matching the caller's module name. If it finds one, it bumps the refcount and returns it. If not, it creates a new sorcery instance, adds it to the hashtab, then returns it. ast_sorcery_retrieve_by_module_name is a new function that does a hashtab lookup by module name. It can be called by the future dialplan function. res_pjsip/config_system needed a small change to share the main res_pjsip sorcery instance. tests/test_sorcery was updated to include a test for the registry. (closes issue ASTERISK-22537) Review: http://reviewboard.asterisk.org/r/3184/ ........ Merged revisions 408518 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-20 19:02 +0000 [r408503] Matthew Jordan * res/res_pjsip.c, /: res_pjsip: Update documentation for 'use_avpf' option When 'use_avpf' is set to True, inbound offers must use the AVPF/SAVPF RTP profile. However, when 'use_avpf' is set to False, Asterisk will accept both AVP/SAVP or AVPF/SAVPF RTP profiles in inbound offers. The documentation previously implied that Asterisk would reject AVPF/SAVPF if 'use_avpf' was set to False and a UA offered said profile in an INVITE request. ........ Merged revisions 408502 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-20 02:44 +0000 [r408450] Rusty Newton * /, apps/app_queue.c: apps/app_queue - Fix incorrect Macro parameter documentation Macro is executed on the called channel, not the calling channel. (closes issue ASTERISK-23069) Reported By: Bryan Anderson ........ Merged revisions 408447 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408448 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408449 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-19 19:09 +0000 [r408386-408390] Richard Mudgett * /, main/config.c: config: Add file size and nanosecond resolution fields to the cached modified config file information. Repeatedly modifying config files and reloading too fast sometimes fails to reload the configuration because the cached modification timestamp has one second resolution. * Added file size and nanosecond resolution fields to the cached config file modification timestamp information. Now if the file size changes or the file system supports nanosecond resolution the modified file has a better chance of being detected for reload. * Added a missing unlock in an off-nominal code path. (closes issue AST-1303) Review: https://reviewboard.asterisk.org/r/3235/ ........ Merged revisions 408387 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408388 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408389 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_sorcery_astdb.c: res_sorcery_astdb.c: Fix regex handling and keep simple prefix matching performance. The sorcery astDB wizzard does not handle regex correctly if the pattern begins with an anchor character. This patch attempts to convert the anchored regex pattern to a prefix pattern supported by astDB for performance reasons. If it is not able to convert the pattern it falls back to getting all astDB members of the family and doing a normal regex pattern matching on the retrieved records. Review: https://reviewboard.asterisk.org/r/3161/ ........ Merged revisions 408385 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-19 12:04 +0000 [r408315-408332] Alexandr Anikin * addons/ooh323c/src/ooCapability.c, /, addons/ooh323c/src/ooh245.c: process receiveAndTransmit user input remote caps instead of receive only send receiveAndTransmit user input our caps instead of receive only ........ Merged revisions 408328 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408330 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408331 from http://svn.asterisk.org/svn/asterisk/branches/12 * addons/ooh323c/src/ooh323.c, /: Allow different socket and signalling ip on h.323 connection if gk mode is active Reported by: Gabriele Odone Patches: ASTERISK-22738-1.patch Tested by: Gabriele Odone (closes issue ASTERISK-22738) ........ Merged revisions 408312 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408314 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-18 19:19 +0000 [r408299] Richard Mudgett * contrib/ast-db-manage/config/env.py, contrib/ast-db-manage/config/versions/4da0c5f79a9c_create_tables.py, contrib/ast-db-manage/config, contrib/ast-db-manage/voicemail/env.py, contrib/ast-db-manage/voicemail, contrib/ast-db-manage/config/versions/581a4264e537_adding_extensions.py, contrib/ast-db-manage/config/versions, contrib/ast-db-manage/config/versions/21e526ad3040_add_pjsip_debug_option.py, contrib/ast-db-manage/voicemail/versions/a2e9769475e_create_tables.py, contrib/ast-db-manage/voicemail/versions, contrib/ast-db-manage, /: alembic: Add svn:ignore *.pyc to directories and svn:executable to *.py files. ........ Merged revisions 408297 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-17 15:36 +0000 [r408272] Mark Michelson * /, res/res_pjsip/location.c, UPGRADE.txt, res/res_pjsip.c, res/res_pjsip_registrar.c, include/asterisk/res_pjsip.h: Store SIP User-Agent information in contacts. When an endpoint sends a REGISTER request to Asterisk, we now will associate the User-Agent header with all contacts that were bound in that REGISTER request. ........ Merged revisions 408270 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-16 03:25 +0000 [r408199-408227] Matthew Jordan * /, main/pbx.c: pbx: Handle a completely empty dialplan during a context merge It is highly unlikely, but - at least in Asterisk 12 - theoretically possible to load Asterisk with no dialplan whatsoever. If that occurs, and some other module (that is not a pbx module) attempts to merge its contexts into the dialplan, the existing merge routine will crash. This is because it is not insane, and rightly believes that you provided some sort of dialplan, somewhere. This patch will gracefully merge the contexts in such a case. Note that this is highly unlikely to occur in 1.8/11, as features will most likely provide some dialplan via parking. However, in Asterisk 12, parking is now provided by res_parking, and hence may create its dialplan later. (closes issue ASTERISK-23297) Reported by: CJ Oster Review: https://reviewboard.asterisk.org/r/3222 ........ Merged revisions 408200 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408201 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408220 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, Makefile: buildsystem: Unbreak the build (infloop) on Asterisk 11+ Apparently r408084 ( https://reviewboard.asterisk.org/r/3212/ ) broke the build. This patch fixes it by ignoring the .lastclean dependencies if the MENUSELECT_EMBED variable is not defined. patches: tmp.diff uploaded by wdoekes (License 5674) Review: https://reviewboard.asterisk.org/r/3228/ ........ Merged revisions 408193 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408194 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-14 21:44 +0000 [r408139-408141] Scott Griepentrog * main/stasis_endpoints.c, /: ARI: correct upper/lower case URI discrepancies URI's are supposed to be case sensitive and all lower case. In practice some portions of URI's in ARI are case insensitive and others are not, such as TECH, which in one instance would match a lower case name and in another would not. In this patch, the ast_endpoint_lastest_snapshot() function is modified to change the TECH portion to full upper case before lookup. This resolves the discrepancy noted by the reporter. However I chose to avoid forcing the /ari prefix of the URI's to be lower case for now. Except for the two cases here, all URI's should be lower case, unless they are part of a resource name or id. Review: https://reviewboard.asterisk.org/r/3211/ Reported by: Zane Conkle (closes issue ASTERISK-23125) ........ Merged revisions 408140 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/format.c, /: format.c: correct possible null pointer dereference In ast_format_sdp_parse and ast_format_sdp_generate the check checks for a valid interface and function were potentially confusing, and hid an error in the test of the presence of the function that is called later. This patch clears up and corrects the test. Review: https://reviewboard.asterisk.org/r/3208/ (closes issue ASTERISK-23098) Reported by: marcelloceschia Patches: main_format.patch uploaded by marcelloceschia (license 6036) ASTERISK-23098.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 408137 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408138 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-14 13:31 +0000 [r408086] Walter Doekes * Makefile, /: buildsystem: Don't force main to depend on everything else. Directory 'main' only needs to depend on embedded modules. If no module embedding is selected, the dependency is dropped. Review: https://reviewboard.asterisk.org/r/3212/ ........ Merged revisions 408083 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 408084 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 408085 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-14 12:41 +0000 [r408070] Matthew Jordan * /, channels/chan_sip.c: chnan_sip: Set SIP_DEFER_BYE_ON_TRANSFER prior to calling bridge blind transfer This patch moves setting SIP_DEFER_BY_ON_TRANSFER prior to calling ast_bridge_transfer_blind. This prevents a BYE from being sent prior to the NOTIFY request that informs the transferor if the transfer succeeded or failed. This patch also clears said flag from the off nominal NOTIFY paths in the local_attended_transfer code, as once we've sent the NOTIFY request it is safe to send by the BYE request. This was caught by the blind-transfer-accountcode test in the Asterisk Test Suite. (closes issue ASTERISK-23290) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3214/ ........ Merged revisions 408069 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-14 08:52 +0000 [r408059] Tzafrir Cohen * Makefile, build_tools/install_subst (added): install_subst: helper script for installing with path substitution A helper script to copy a source file substituting any __ASTERISK__DIR__ with the content of $ASTDIR. Review: https://reviewboard.asterisk.org/r/3202/ 2014-02-13 18:52 +0000 [r407990-408006] Mark Michelson * res/res_pjsip_pubsub.c, /, res/res_pjsip_mwi.c: Remove all PJSIP MWI-specific use from our MWI code. PJSIP has built-in MWI code that could be useful to some degree, but our utilization of the API actually made our code a bit more cluttered since we had to have special cases peppered throughout. With this change, we move to using the pjsip_evsub API instead, which streamlines the code by removing special cases. Review: https://reviewboard.asterisk.org/r/3205 ........ Merged revisions 408005 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/location.c: Fix crash in AMI PJSIPShowEndpoint action. If an AOR has no permanent contacts, then the permanent_contacts container is never allocated. This makes the code safe in the face of NULLs. I also changed the variable that counts contacts from "num" to "total_contacts" since there are now two variables that are indicate numbers of things. ........ Merged revisions 407988 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-13 15:51 +0000 [r407989] Kinsey Moore * main/logger.c, CHANGES: Logger: Add dynamic logger channels This adds the ability to dynamically add and remove logger channels from Asterisk via the CLI. (closes issue AST-1150) Review: https://reviewboard.asterisk.org/r/3185/ 2014-02-12 08:25 +0000 [r407970] Walter Doekes * /, main/config.c: realtime: Fix ast_update2_realtime() on raspberry pi. The old code depended on undefined va_arg behaviour: calling a function twice with the same va_list parameter and expecting it to continue where it left off. The changed code behaves like the manpage says it should. Also added a bunch of early returns to trap errors (e.g. OOM) instead of crashing. The problem was found by Julian Lyndon-Smith. The deviant behaviour on the raspberry PI also uncovered another bug (fixed in r407875) in the res_config_pgsql.so driver. Reported by: jmls Tested by: jmls Review: https://reviewboard.asterisk.org/r/3201/ ........ Merged revisions 407968 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-11 20:17 +0000 [r407958] Joshua Colp * main/sched.c: scheduler: Remove hashtab usage. This is a first stab at tweaking the performance profile of the scheduler. Removing the hashtab usage removes an extra memory allocation when scheduling something and makes it so rescheduling does not incur any memory allocation at all. Review: https://reviewboard.asterisk.org/r/3199/ 2014-02-11 03:18 +0000 [r407940] Matthew Jordan * res/ari/resource_channels.c, /: ari/resource_channels: Add channel variables earlier in the creation process This patch tweaks the behaviour of POST /channels with channel variables such that the variables are passed into the pbx.c routines that perform the origination. This allows the variables to be assigned to the newly created channels immediately upon their construction, as opposed to be assigned after the originate has completed. The upshot of this is that the variables are available on the channels if they execute in the dialplan, as opposed to only being available once the channels are answered. Review: https://reviewboard.asterisk.org/r/3183/ ........ Merged revisions 407937 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-10 18:28 +0000 [r407926] Corey Farrell * channels/sip/include/reqresp_parser.h, channels/sip/include/route.h (added), channels/chan_sip.c, channels/sip/route.c (added), channels/sip/include/sip.h: chan_sip: Isolate code that manages struct sip_route. * Move route code to sip/route.c + sip/include/route.h * Rename functions to sip_route_* * Replace ad-hoc list code with macro's from linkedlists.h * Create sip_route_process_header() to processes Path and Record-Route headers (previously done with different code in build_route and build_path) * Add use of const where possible * Move struct uriparams, struct contact and contactliststruct from sip.h to reqresp_parser.h. sip/route.c uses reqresp_parser.h but not sip.h, this was a problem. These moved declares are not used outside of reqresp_parser. * While modifying reqprep() the lack of {} caused me trouble. I added them. * Code outside route.c treats sip_route as an opaque structure, using macro's or procedures for all access. (closes issue ASTERISK-22582) Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/3173/ 2014-02-10 16:49 +0000 [r407876] Walter Doekes * res/res_config_pgsql.c, /: res_config_pgsql: Fix ast_update2_realtime calls. Fix so multiple updates from a single call works (add missing ','). Remove bogus ast_free's that weren't supposed to be there. Moved a few spaces for readability. Review: https://reviewboard.asterisk.org/r/3194/ ........ Merged revisions 407873 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407874 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407875 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-10 16:01 +0000 [r407859] Kinsey Moore * apps/app_confbridge.c, apps/confbridge/conf_state_multi_marked.c, apps/confbridge/conf_state_empty.c, apps/confbridge/conf_config_parser.c, configs/confbridge.conf.sample, /, apps/confbridge/include/confbridge.h, UPGRADE.txt: ConfBridge: Correct prompt playback target Currently, when the first marked user enters the conference that contains waitmarked users, a prompt is played indicating that the user is being placed into the conference. Unfortunately, this prompt is played to the marked user and not the waitmarked users which is not very helpful. This patch changes that behavior to play a prompt stating "The conference will now begin" to the entire conference after adding and unmuting the waitmarked users since the design of confbridge is not conducive to playing a prompt to a subset of users in a conference in an asynchronous manner. (closes issue PQ-1396) Review: https://reviewboard.asterisk.org/r/3155/ Reported by: Steve Pitts ........ Merged revisions 407857 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407858 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 20:52 +0000 [r407767] Richard Mudgett * /, channels/chan_iax2.c: chan_iax2: Add some more iaxs[] NULL checks to a routine already full of them. ........ Merged revisions 407764 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407765 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407766 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 20:17 +0000 [r407752] Matthew Jordan * /, main/security_events.c: security_events: Fix assertion failure in dev-mode on optional IE parsing When formatting an optional IE, the value is, of course, optional. As such, it is entirely appropriate for ast_json_object_get to return NULL. If that occurs, we now simply skip the IE that was requested, as it was not provided by the entity that raised the event. Thanks to George Joseph (gtjoseph) for catching this and reporting it in #asterisk-dev ........ Merged revisions 407750 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 20:01 +0000 [r407749] Joshua Colp * main/timing.c, res/res_timing_pthread.c, res/res_timing_dahdi.c, res/res_timing_timerfd.c, include/asterisk/timing.h, res/res_timing_kqueue.c: timing: Improve performance for most timing implementations. This change allows timing implementation data to be stored directly on the timer itself thus removing the requirement for many implementations to do a container lookup for the same information. This means that API calls into timing implementations can directly access the information they need instead of having to find it. Review: https://reviewboard.asterisk.org/r/3175/ 2014-02-07 19:40 +0000 [r407748] Matthew Jordan * /, funcs/func_cdr.c: funcs/func_cdr: Handle empty time values when extracting parsed values When extracting timestamps that are parsed, time stamp values that are not set (time values of 0.000000) should not actually result in a parsed string. The value should be skipped, and the result of the CDR function should be an empty string. Prior to this patch, the result was fed to the time formatting, which would result in an output of a date/time in 1969. ........ Merged revisions 407747 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 18:29 +0000 [r407731] Richard Mudgett * channels/chan_iax2.c, include/asterisk/frame.h, configs/iax.conf.sample, /: chan_iax2: Block unnecessary control frames to/from the wire. Establishing an IAX2 call between Asterisk v1.4 and v1.8 (or later) results in an unexpected call disconnect. The problem happens because newer values in the enum ast_control_frame_type are not consistent between the branch versions of Asterisk. For example: 1) v1.4 calls v1.8 (or later) using IAX2 2) v1.8 answers and sends a connected line update control frame. (on v1.8 AST_CONTROL_CONNECTED_LINE = 22) 3) v1.4 receives the control frame as an end-of-q (on v1.4 AST_CONTROL_END_OF_Q = 22) 4) v1.4 disconnects the call once the receive queue becomes empty. Several things are done by this patch to fix the problem and attempt to prevent it from happening again in the future: * Added a warning at the definition of enum ast_control_frame_type about how to add new control frame values. * Made block sending and receiving control frames that have no reason to go over the wire. * Extended the connectedline iax.conf parameter to also include the redirecting information updates. * Updated the connectedline iax.conf parameter documentation to include a notice that the parameter must be "no" when the peer is an Asterisk v1.4 instance. (closes issue AST-1302) Review: https://reviewboard.asterisk.org/r/3174/ ........ Merged revisions 407678 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407727 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407729 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 16:47 +0000 [r407677] Matthew Jordan * /, main/security_events.c: security_events: Fix error caused by DTD validation error The appdocsxml.dtd specifies that a "required" attribute in a parameter may have a value of yes, no, true, or false. On some systems, specifying "False" instead of "false" would cause a validation error. This patch fixes the casing to explicitly match the DTD. ........ Merged revisions 407676 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-07 13:15 +0000 [r407625] Tzafrir Cohen * /, configs/indications.conf.sample: indications.conf: add stutter tone; end properly * If the "stutter" (voicemail indication) tone is indeed a stutter tone, and it ends with a constant tone, make sure that it is the dial tone. This was done for India (in), Mexico (mx) and the Philippines (ph). * If no "stutter" tone exists for a country, provide one. This was done for Spain (es), Malaysia (my) and Venezuela (ve). Review: https://reviewboard.asterisk.org/r/3158/ ........ Merged revisions 407622 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407623 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407624 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-06 21:24 +0000 [r407602] Matthew Jordan * /, main/security_events.c, UPGRADE.txt, CHANGES: security_events: Add AMI documentation; output optional fields This patch adds documentation for the Security Events that are emited over AMI. It also notes these events in the UPGRADE/CHANGES file. ........ Merged revisions 407589 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-06 19:58 +0000 [r407588] Rusty Newton * /, configs/pjsip.conf.sample: configs/pjsip.conf.sample: Configuration section naming in pjsip.conf.sample needs a little clarification There is a bit of nuance to how you name things in pjsip.conf. This is a documentation patch to at least clear it up a little for users. Review: https://reviewboard.asterisk.org/r/3180/ ........ Merged revisions 407587 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-06 18:11 +0000 [r407574] Kevin Harwell * /, contrib/ast-db-manage/config/versions/2fc7930b41b3_add_pjsip_endpoint_options_for_12_1.py: pjsip realtime: already created enum failure for postgresql If an enum had been previously created the alembic script would attempt to re-create it and an error would be generated while running migrations for a postgresql server. The work around for this is to use the ENUM object type for postgres as opposed to the generic enum type used by sqlalchemy. Using this type in the script seems to work properly for both postgres and mysql. ........ Merged revisions 407572 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-06 17:55 +0000 [r407573] Richard Mudgett * res/res_pjsip_logger.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip/pjsip_options.c, res/res_pjsip/config_transport.c, include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, res/res_pjsip/config_auth.c, /, res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, res/res_pjsip_endpoint_identifier_ip.c, include/asterisk/res_pjsip_cli.h, res/res_pjsip/pjsip_cli.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/config_domain_aliases.c: res_pjsip: Updates and adds more PJSIP CLI commands. * Adds identify, transport, and registration support to the PJSIP CLI. * Creates three additional callbacks, one for an iterator, one for a comparator, and one for a container. This eliminates the link dependency from higher level modules to lower level ones. * Eliminates duplicate sorting in PJSIP CLI commands. * Cleans up PJSIP CLI output formatting. * Pushes CLI command registration down to the implementing source file. * Adds several ast_sip_destroy_sorcery functions to complement existing ast_sip_sorcery_initialize functions. The destroy functions unregister PJSIP CLI commands and PJSIP CLI formatters. Reported by: George Joseph Review: https://reviewboard.asterisk.org/r/3104/ ........ Merged revisions 407568 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 23:04 +0000 [r407514] Rusty Newton * /, formats/format_wav.c: formats/format_wav: enhancing log message "Not a wav file" to be clear on what is supported Modifying the log message to be more specific as to what is supported. Specifically it seems format_wav supports only PCM encoded versions with a lower-case '.wav' extension. (closes issues ASTERISK-22310) Reported by: Jim Credland Review: https://reviewboard.asterisk.org/r/3188/ ........ Merged revisions 407511 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407512 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407513 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 20:56 +0000 [r407462] Jonathan Rose * CHANGES, /: CHANGES: Improved description of Name/Creator changes to bridge ARI, adds AMI The changes log was written with language that was a little too internal Asterisk specific, so it's been changed to be more in the frame of reference of an ARI user. Also, previously the AMI event changes were omitted from the change log as well as the ability to include a bridge name in the ARI post bridges command. ........ Merged revisions 407461 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 20:43 +0000 [r407459] Kinsey Moore * main/logger.c, /: Logger: Fix handling of absolute paths This fixes path handling for log files so that an extra / is not appended to the file path when the path is absolute (begins with /). This would previously result in different but functionally equivalent paths in the output of 'logger show channels'. ........ Merged revisions 407455 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407456 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407458 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 19:42 +0000 [r407443] Kevin Harwell * res/res_pjsip/config_global.c, /: res_pjsip: When no global type the debug option defaults to "yes" If the global section was not specified in pjsip.conf then the configuration object does not exist in sorcery so when retrieving "debug" option it would return NULL. Then the NULL result was passed to ast_false utils function which would return false because it wasn't set to some representation of false, thus enabling sip debug logging. Made it so if the global config object does not exist then it will return a default of "no" for sip debugging. (issue ASTERISK-23038) Reported by: Rusty Newton ........ Merged revisions 407442 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 17:42 +0000 [r407422-407425] Jonathan Rose * CHANGES: CHANGES: Update changes log to include r403414 entry Adds note of additional 0 for operator option on app_record * CHANGES, /: CHANGES: Update changes log to include new bridge fields added in r404042 ........ Merged revisions 407419 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-05 15:29 +0000 [r407407] Matthew Jordan * rest-api/api-docs/playbacks.json, UPGRADE.txt, 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/deviceStates.json, rest-api/api-docs/mailboxes.json, rest-api/api-docs/asterisk.json, rest-api/api-docs/applications.json, rest-api/api-docs/channels.json, rest-api/api-docs/recordings.json, rest-api/api-docs/endpoints.json, rest-api/api-docs/events.json, /: ARI/AMI: Update versions; update UPGRADE/CHANGES notes for 12.1.0 changes Due to backwards compatible changes made to AMI/ARI, the version needs to be bumped to 1.1.0/2.1.0, respectively. ........ Merged revisions 407402 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-04 20:15 +0000 [r407275-407340] Richard Mudgett * include/asterisk/devicestate.h, /, main/devicestate.c: devicestate: Make ast_devstate_changed_literal() return value and doxygen consistent. Nothing actually cares about the value anyway. (closes issue ASTERISK-23178) Reported by: Jonathan Rose ........ Merged revisions 407337 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407338 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407339 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_configuration.c: res_pjsip: Fix assertion for pjsip.conf authorization list options. (closes issue ASTERISK-23168) Reported by: George Joseph Review: https://reviewboard.asterisk.org/r/3143/ ........ Merged revisions 407324 from http://svn.asterisk.org/svn/asterisk/branches/12 * configs/sip.conf.sample, main/tcptls.c, /: tcptls.c: Made TLS handle a certificate chain file. Thanks to Guillaume Martres for doing the necessary research to validate the change. (closes issue ASTERISK-17727) Reported by: LN Patches: use_certificate_chain.patch (license #5864) patch uploaded by st documente_certificate_chain.patch (license #6576) patch uploaded by Guillaume Martres ........ Merged revisions 407272 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407273 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407274 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-04 16:55 +0000 [r407260] Matthew Jordan * /, funcs/func_cdr.c: funcs/func_cdr: Fix non-epoch timestamps broken by improper char array deref Thanks to snuffy for pointing this issue out and fixing it. (closes issue ASTERISK-23250) Reported by: snuffy patches: func_cdr-fix.diff uploaded by snuffy (License 5024) ........ Merged revisions 407259 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-04 02:22 +0000 [r407217] Joshua Colp * res/res_clialiases.c, /: res_clialiases: Fix crash when reloading and re-aliasing an alias that is in use. The code assumed that unregistering the alias would always succeed while in practice this is not actually true. A common case is the "reload" command itself. If the cli_aliases.conf configuration file was changed and reload executed the command would fail to unregister and ultimately point to freed memory. The reload process now checks whether unregistering succeeded or not and if not the old CLI alias is retained. (closes issue ASTERISK-19773) Reported by: Joel Vandal (closes issue ASTERISK-22757) Reported by: Gareth Blades ........ Merged revisions 407205 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407210 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407213 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-04 02:07 +0000 [r407198] Damien Wedhorn * /, channels/chan_skinny.c: Skinny - Fix deadlock when pickup of no call. Locking issues in skinny when picking up a call that doesn't exist. Cleaned up sub locking by fully removing and using the chan lock instead. Also changed ast_call_pickup to check whether chan was masq'd. (closes issue ASTERISK-23249) Reported by: wedhorn Tested by: snuffy, myself Patches: skinny-locking01.diff uploaded by wedhorn (license 5019) ........ Merged revisions 407197 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-03 01:31 +0000 [r407169] Matthew Jordan * main/cdr.c, /: cdrs: Check for applications to lock onto during dial begin handling This patch brings CDR processing further in line with r407085. During some dial operations, the application would not be locked to the Dial application and would instead continue to show the previously known application. In particular, this would occur when a Parked call would time out. This was due to a previous snapshot already locking the application to Park - processing this in a Dial Begin allows the Dial application to reassert its rightful place. (CDRs. Ugh.) But hooray for the Parked Call tests for catching this in the Asterisk Test Suite. ........ Merged revisions 407166 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-01 16:26 +0000 [r407154] Joshua Colp * res/ari/ari_model_validators.h, rest-api/api-docs/events.json, /, res/stasis/app.c, res/ari/ari_model_validators.c, res/res_stasis.c, main/stasis_bridges.c: res_stasis: Enable transfers and provide events when they occur. This change enables transfers within ARI created bridges and adds events for when they occur. Unlike other events these will be received if *any* subscribed object is involved in the transfer. (closes issue ASTERISK-22984) Reported by: David M. Lee Review: https://reviewboard.asterisk.org/r/3120/ ........ Merged revisions 407153 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-02-01 00:25 +0000 [r407105] Corey Farrell * apps/app_stack.c, /: app_stack: protect against missing parameters to STACK_PEEK and LOCAL_PEEK STACK_PEEK requires 2 parameters and LOCAL_PEEK requires 1 parameter. This protects against situations where those parameters are blank or missing by logging an error and returning. (closes issue ASTERISK-23220) Reported by: James Sharp ........ Merged revisions 407100 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407103 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407104 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 23:40 +0000 [r407083-407085] Matthew Jordan * apps/app_dial.c, main/cdr.c, main/pbx.c, /, main/bridge_after.c, UPGRADE.txt, main/manager_channels.c: CDRs: fix a variety of dial status problems, h/hangup handler creating CDRs This patch fixes a number of small-ish problems that were noticed when witnessing the records that the FreePBX dialplan produces: (1) Mid-call events (as well as privacy options) have the ability to change the overall state of the Dial operation after the called party answers. This means that publishing the DialEnd event when the called party is premature; we have to wait for the execution of these subroutines to complete before we can signal the overall status of the DialEnd. This patch moves that publication and adds handlers for the mid-call events. (2) The AST_FLAG_OUTGOING channel flag is cleared if an after bridge goto datastore is detected. This flag was preventing CDRs from being recorded for all outbound channels that had a 'continue' option enabled on them by the Dial application. (3) The CDR engine now locks the 'Dial' application as being the CDR application if it detects that the current CDR has entered that app. This is similar to the logic that is done for Parking. In general, if we entered into Dial, then we want that CDR to record the application as such - this prevents pre-dial handlers, mid-call handlers, and other shenaniganry from changing the application value. (4) The CDR engine now checks for the AST_SOFTHANGUP_HANGUP_EXEC in more places to determine if the channel is in hangup logic or dead. In either case, we don't want to record changes in the channel. (5) The default option for "endbeforehexten" has been changed to "yes". In general, you don't want to see CDRs in the 'h' exten or in hangup logic. Since the semantics of that option changed in 12, it made sense to update the default value as well. (6) Finally, because we now have the ability to synchronize on the messages published to the CDR topic, on shutdown the CDR engine will now synchronize to the messages currently in flight. This helps to ensure that all in-flight CDRs are written before shutting down. (closes issue ASTERISK-23164) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3154 ........ Merged revisions 407084 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_dial.c, /: app_dial: Allow macro/gosub pre-bridge execution to occur on priorities The parsing for the destination of the macro/gosub uses the '^' character to separate out context, extension, and priority. However, the logic for the macro/gosub execution was written such that it would only do the actual macro/gosub jump if a '^' character existed. This doesn't apply when the macro/gosub jump occurs in a priority/priority label. This patch changes the logic so that the parsing still occurs, but the jump will occur even for priorities/priority labels. (issue ASTERISK-23164) Review: https://reviewboard.asterisk.org/r/3154 ........ Merged revisions 407041 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 407074 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 407082 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 23:15 +0000 [r407035-407037] Kevin Harwell * res/res_pjsip_logger.c, CHANGES, res/res_pjsip.c, include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, contrib/ast-db-manage/config/versions/21e526ad3040_add_pjsip_debug_option.py (added), /, configs/pjsip.conf.sample, UPGRADE.txt: res_pjsip: Config option to enable PJSIP logger at load time. Added a "debug" configuration option for res_pjsip that when set to "yes" enables SIP messages to be logged. It is specified under the "system" type. Also added an alembic script to add the option to realtime. (closes issue ASTERISK-23038) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/3148/ ........ Merged revisions 407036 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_exten_state.c, /: res_pjsip_exten_state: Exporting global symbols caused load order issues Removed the exportation of global symbols from the module as it is no longer needed and it could potentially cause load problems as on some systems it would try to load before res_pjsip_pubsub ........ Merged revisions 407034 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 23:04 +0000 [r407033] Richard Mudgett * CHANGES, apps/app_chanspy.c: ChanSpy: Add ability to specify channel uniqueids as well as channel names. * Made ChanSpy accept a channel uniqueid or a fully specified channel name as the chanprefix parameter if the 'u' option is specified. (closes issue AFS-42) Review: https://reviewboard.asterisk.org/r/3160/ 2014-01-31 22:39 +0000 [r407030-407032] Mark Michelson * include/asterisk/res_pjsip_presence_xml.h (added), /: Add file that apparently got missed in the merge. ........ Merged revisions 407031 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pidf_body_generator.c (added), include/asterisk/res_pjsip_exten_state.h (removed), res/res_pjsip_pubsub.exports.in, /, include/asterisk/res_pjsip_body_generator_types.h (added), res/res_pjsip_mwi.c, res/res_pjsip_xpidf_body_generator.c (added), res/res_pjsip_mwi_body_generator.c (added), res/res_pjsip_pubsub.c, res/res_pjsip_pidf.c (removed), res/res_pjsip_pidf_eyebeam_body_supplement.c (added), res/res_pjsip_exten_state.c, res/res_pjsip/presence_xml.c (added), include/asterisk/res_pjsip_pubsub.h: Decouple subscription handling from NOTIFY/PUBLISH body generation. When the PJSIP pubsub framework was created, subscription handlers were required to state what event they handled along with what body types they knew how to generate. While this serves well when implementing a base RFC, it has problems when trying to extend the body to support non-standard or proprietary body elements. The code also was NOTIFY-specific, meaning that when the time comes that we start writing code to send out PUBLISH requests with MWI or presence bodies, we would likely find ourselves duplicating code that had previously been written. This changeset introduces the concept of body generators and body supplements. A body generator is responsible for allocating a native structure for a given body type, providing the primary body content, converting the native structure to a string, and deallocating resources. A body supplement takes the primary body content (the native structure, not a string) generated by the body generator and adds nonstandard elements to the body. With these elements living in their own module, it becomes easy to extend our support for body types and to re-use resources when sending a PUBLISH request. Body generators and body supplements register themselves with the pubsub core, similar to how subscription and publish handlers had done. Now, subscription handlers do not need to know what type of body content they generate, but they still need to inform the pubsub core about what the default body type for a given event package is. The pubsub core keeps track of what body generators and body supplements have been registered. When a SUBSCRIBE arrives, the pubsub core will check that there is a subscription handler for the event in the SUBSCRIBE, then it will check that there is a body generator that can provide the content specified in the Accept header(s). Because of the nature of body generators and supplements, it means res_pjsip_exten_state and res_pjsip_mwi have been completely gutted. They no longer worry about body types, instead calling ast_sip_pubsub_generate_body_content() when they need to generate a NOTIFY body. Review: https://reviewboard.asterisk.org/r/3150 ........ Merged revisions 407016 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 22:23 +0000 [r407015-407029] Kevin Harwell * contrib/ast-db-manage/config/versions/581a4264e537_adding_extensions.py, contrib/ast-db-manage/config/versions/2fc7930b41b3_add_pjsip_endpoint_options_for_12_1.py, /, UPGRADE.txt: alembic: script modifications due to errors A couple of the scripts had errors that would not allow a full migration to take place. The extensions table needed to make its 'id' column a primary key in order to work with mysql. The other script ...add_endpoints... was missing tables that it was trying to add columns to. Added the primary key on id for extensions and added the tables in for the missing pjsip configuration options. While it is not ideal to modify already released scripts this was a case where it had to be done due to errors in the script and lacking a better alternative. Review: https://reviewboard.asterisk.org/r/3167/ ........ Merged revisions 407019 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_mwi.c: res_pjsip_mwi: Subscribe fails when missing aor name When subscribing to MWI (res_pjsip_mwi) and the sip uri did not contain a name (ex: sip:) then the subscription would fail since it would be unable to locate an associated aor. This patch makes it so that when a subscribe comes with no aor name then it will subscribe to all aors on the located endpoint. (closes issue ASTERISK-23072) Reported by: Bob M Review: https://reviewboard.asterisk.org/r/3164/ ........ Merged revisions 407014 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 15:08 +0000 [r407001] Kinsey Moore * res/res_pjsip_nat.c, /: PJSIP: Fix address for ACK in NAT situations In NAT scenarios where a call is placed to a Grandstream phone, res_pjsip will sometimes send the ACK to a 200 OK to the private address of the device behind the NAT instead of the address of the NAT device. This corrects that behavior by rewriting the address in the Contact header in the incoming 200 OK and the dialog's target address if necessary (since it has already been rewritten to the incorrect private address). (closes issue ASTERISK-23106) Review: https://reviewboard.asterisk.org/r/3168/ Reported by: Matt Jordan ........ Merged revisions 407000 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-31 05:31 +0000 [r406988] Damien Wedhorn * /, channels/chan_skinny.c: Skinny: fix up possible double unlock of chan. Return before chan is possibly unlocked a second time when hanging up a channel in SUBSTATE_OFFHOOK. ........ Merged revisions 406987 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-30 20:36 +0000 [r406936] Corey Farrell * main/udptl.c, res/res_rtp_asterisk.c, /: res_rtp_asterisk & udptl: fix port selection to work with SELinux restrictions ast_bind to a port reserved for another program by SELinux causes errno == EACCES. This caused random failures when binding rtp or udptl sockets. Treat EACCES as a non-fatal error, try next port. (closes issue ASTERISK-23134) Reported by: Corey Farrell ........ Merged revisions 406933 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406934 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406935 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-30 17:35 +0000 [r406920] Sean Bright * main/manager.c, /: Make a NOTICE about an invalid channel name more useful. ........ Merged revisions 406918 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406919 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-29 00:44 +0000 [r406863] Russell Bryant * /, configs/queues.conf.sample: queues.conf.sample Fix documented default for persistentmembers Closes issue ASTERISK-22662 ........ Merged revisions 406860 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406861 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406862 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-28 23:40 +0000 [r406789-406848] Kevin Harwell * res/res_pjsip_pubsub.c, /: res_pjsip_pubsub: potential crash on timeout What seems to be happening is if a subscription has been terminated and the subscription timeout/expires is less than the time it takes for all pending transactions (currently on the subscription) to end then the subscription timer will not have been canceled yet and sub will be null. Since the subscription has already been canceled nothing needs to be done so a null check in the asterisk code is sufficient in working around this problem. (closes issue ASTERISK-23129) Reported by: Dan Jenkins ........ Merged revisions 406847 from http://svn.asterisk.org/svn/asterisk/branches/12 * cdr/cdr_radius.c, cel/cel_radius.c, /, configure, include/asterisk/autoconfig.h.in, configure.ac: cdr_radius, cel_radius: build agains libfreeradius-client Asterisk's RADIUS module currently build against libradiusclient-ng, but this project has been superseeded by libfreeradius-client. The API is 99% compatible except that the header name has changed, the library name has changed, and the configuration file location has changed. (closes issue ASTERISK-22980) Reported by: Jeremy Lainé Patches: freeradius-client.patch uploaded by sharky (license 6561) ........ Merged revisions 406801 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406802 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406803 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip/include/res_pjsip_private.h, /, include/asterisk/compat.h: res_pjsip,compat: INFINITY and NAN undefined On some systems the values for INFINITY and NAN are not defined thus causing a build error on those systems. Added definitions for those if they had not previously been defined. (closes issue ASTERISK-23056) Reported by: capouch Patches: inf-nan-patch.txt uploaded by capouch (license 6564) ........ Merged revisions 406788 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-28 19:19 +0000 [r406778] Kinsey Moore * /, res/res_stasis_device_state.c: ARI: Make double subscribe respond with success Currently, attempting to subscribe an application to a device state that it has already subscribed to will generate a 500 error response. This will now be treated as a subscription refresh even though ARI subscriptions don't currently support lifetimes and will respond with the normal response for a successful subscription (200 OK). (closes issue ASTERISK-23143) Reported by: Matt Jordan ........ Merged revisions 406775 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-28 16:43 +0000 [r406724] Scott Griepentrog * main/rtp_engine.c, /: rtp_engine: improved handling of get_rtp_info failure In ast_rtp_instance_make_compatible(), after a failure of channel tech call get_rtp_info() to return peer_instance, the null pointer would be passed to ao2_ref, producing an error that looked like a refernce counting problem but is not. This patch corrects that and adds helpful LOG_ERROR messages to indicate which failure path occurred. (issue AST-1276) Review: https://reviewboard.asterisk.org/r/3156/ ........ Merged revisions 406721 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406722 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406723 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-28 00:20 +0000 [r406710] Richard Mudgett * /, tests/test_cel.c, tests/test_cdr.c: test_cdr.c, test_cel.c: Correctly destroy created bridges. * Fixed the test_cel_attended_transfer_bridges_link unit test to also account for the local channel link being destroyed now that the bridges are actually destroyed. * Made CDR unit test use its own version of do_sleep() from the CEL unit tests. ........ Merged revisions 406707 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-27 22:54 +0000 [r406647-406696] Kevin Harwell * CHANGES: manager: ExtensionStatus event status human readable Added a note in the changes file about the new 'StatusText' field that was added to the 'ExtensionStatus' event. (issue ASTERISK-23154) Reported by: Jonathan Rose * main/manager.c: manager: ExtensionStatus event status human readable When an 'ExtensionStatus' event was raised it included the status as a numerical value, but did not include a text description of the status. Added a 'StatusText' field to the event which is a string representation of the extension status. Also added this to the 'Extension State' command response. (closes issue ASTERISK-23154) Reported by: Jonathan Rose 2014-01-27 20:38 +0000 [r406646] Russell Bryant * main/config.c, /: Allow nested #includes in extconfig.conf extconfig.conf was hard-coded to not allow nested includes for some reason. The code has been this way since a patch was merged for ASTERISK-3333 (revision 4889), which was a significant update to this code ("Merge config updates"). I can't figure out any good reason why this should be limited. This patch just removes the limit and uses the default nesting depth limit. Closes issue ASTERISK-17837 Review: https://reviewboard.asterisk.org/r/3159/ ........ Merged revisions 406643 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406644 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406645 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-27 08:17 +0000 [r406618] Walter Doekes * main/manager.c, UPGRADE.txt, configs/manager.conf.sample: manager: The eventfilter= option now takes an extended regex. In pre-trunk versions (...12) it accepts a basic regex, which is confusing because all other regexes in asterisk are of the extended kind. Review: https://reviewboard.asterisk.org/r/3147/ 2014-01-27 01:25 +0000 [r406595] Russell Bryant * main/file.c, include/asterisk/channel.h, main/channel.c, /: Protect ast_filestream object when on a channel The ast_filestream object gets tacked on to a channel via chan->timingdata. It's a reference counted object, but the reference count isn't used when putting it on a channel. It's theoretically possible for another thread to interfere with the channel while it's unlocked and cause the filestream to get destroyed. Use the astobj2 reference count to make sure that as long as this code path is holding on the ast_filestream and passing it into the file.c playback code, that it knows it's valid. Bug reported by Leif Madsen. Review: https://reviewboard.asterisk.org/r/3135/ ........ Merged revisions 406566 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406567 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406574 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-26 23:04 +0000 [r406517] Richard Mudgett * /, main/tcptls.c: tcptls.c: Add missing cleanup on off nominal path. ........ Merged revisions 406514 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406515 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406516 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-26 14:19 +0000 [r406503] Tzafrir Cohen * contrib/scripts/live_ast: live_ast: run wrapped programs with exec live_ast can be used as a wrapper script to run asterisk, gdb or valgrind. In those cases it runs them and returns the result. It is more useful to use 'exec' to avoid having another odd process in the chain. Review: https://reviewboard.asterisk.org/r/3110/ 2014-01-26 02:11 +0000 [r406490] Joshua Colp * res/res_pjsip_session.c, /: res_pjsip_session: Be less strict with core requested outgoing capabilities. The core may (depending on circumstances) request a single codec on outgoing calls. Many channel drivers ignore or treat this as a suggestion while still including configured codecs. The res_pjsip_session logic treated this as an explicit request, leaving out other configured codecs. This change makes res_pjsip_session behave like other channel driver and simply adds the requested codec to the list. (closes issue ASTERISK-23082) Reported by: xrobau Review: https://reviewboard.asterisk.org/r/3140/ ........ Merged revisions 406489 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-24 23:33 +0000 [r406466] Richard Mudgett * /, main/cel.c: CEL: Protect data structures during reload and shutdown. The CEL data structures need to be protected during a configuration reload and shutdown. Asterisk crashed during a shutdown because CEL events were still in flight and the CEL data structures were already destroyed. * Protected the cel_backends, cel_dialstatus_store, and cel_linkedids ao2 containers with a global ao2 object wrapper. * Added NULL checks before use of the cel_backends, cel_dialstatus_store, and cel_linkedids ao2 containers in case the CEL module is already shutdown. * Fixed overloading of the cel_linkedids held objects reference count. During shutdown any held objects would be leaked. * Fixed memory leak of cel_linkedids held objects if the LINKEDID_END is not being tracked. The objects in the cel_linkedids container were not removed if the LINKEDID_END event is not used. * Added access protection to the cel_backends container during the CLI "cel show status" command. * Made cel_backends, cel_dialstatus_store, and cel_linkedids use the standard ao2 callback templates for the hash and cmp functions. * Eliminated unnecessary uses of RAII_VAR(). * Made ast_cel_engine_init() cleanup alocated resources on failure. (closes issue AST-1253) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/3128/ ........ Merged revisions 406417 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406418 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406465 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-24 22:34 +0000 [r406416] Jonathan Rose * main/utils.c, CHANGES: Thread Debugging: Add LWP to core show locks output This patch adds the LWP to core show locks output if it is available. Review: https://reviewboard.asterisk.org/r/3142/ 2014-01-24 22:18 +0000 [r406407] Richard Mudgett * main/manager.c, /: manager: Register atexit shutdown routine only once. * Made register atexit shutdown routine only once in __init_manager(). * Fixed some initial load failure conditions in __init_manager(). * Made reset options to defaults on reload when the reload will actually happen. * Removed unnecessary container traversals of the white/black filters during manager_free_user(). * ast_free() does not need a NULL check before calling. ........ Merged revisions 406359 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406400 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406401 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-24 21:46 +0000 [r406399] Jonathan Rose * res/res_config_pgsql.c, /: res_config_pgsql: Fix a memory leak and use RAII_VAR for cleanup when practical Review: https://reviewboard.asterisk.org/r/3141/ ........ Merged revisions 406360 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406361 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406389 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-24 18:13 +0000 [r406343] Richard Mudgett * main/manager.c, /: manager: Protect data structures during shutdown. Occasionally, the manager module would get an "INTERNAL_OBJ: bad magic number" error on a "core restart gracefully" command if an AMI connection is established. * Added ao2_global_obj protection to the sessions global container. * Fixed the order of unreferencing a session object in session_destroy(). * Removed unnecessary container traversals of the white/black filters during session_destructor(). (closes issue AST-1242) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/3144/ ........ Merged revisions 406341 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406342 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-23 23:43 +0000 [r406328] Mark Michelson * /: Today is not my day for writing code that compiles. ........ Merged revisions 406327 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-23 22:56 +0000 [r406312] Michael L. Young * /, addons/res_config_mysql.c: res_config_mysql: Fix Setting The Column Name Incorrectly When support for a realtime sorcery module was added in revision 386731, the wrong property was accidentally used for setting the column name to be updated in the database table. This patch fixes the typo. (closes issue ASTERISK-23177) Reported by: Denis Tested by: Denis Patches: asterisk-23177-use-field-name.diff by Michael L. Young (license 5026) ........ Merged revisions 406311 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-23 21:18 +0000 [r406298] Mark Michelson * res/res_pjsip_pidf.c, /: Multiple revisions 406294-406295 ........ r406294 | mmichelson | 2014-01-23 15:00:24 -0600 (Thu, 23 Jan 2014) | 11 lines Fix presence body errors found during testing: * PIDF bodies were reporting an "open" state in many cases where it should have been reporting "closed" * XPIDF bodies had XML nodes placed incorrectly within the hierarchy. * SIP URIs in XPIDF bodies did not go through XML sanitization * XML sanitization had some errors: * Right angle bracket was being replaced with "&rt;" instead of ">" * Double quote, apostrophe, and ampersand were not being escaped. ........ r406295 | mmichelson | 2014-01-23 15:09:35 -0600 (Thu, 23 Jan 2014) | 11 lines Fix presence body errors found during testing: * PIDF bodies were reporting an "open" state in many cases where it should have been reporting "closed" * XPIDF bodies had XML nodes placed incorrectly within the hierarchy. * SIP URIs in XPIDF bodies did not go through XML sanitization * XML sanitization had some errors: * Right angle bracket was being replaced with "&rt;" instead of ">" * Double quote, apostrophe, and ampersand were not being escaped. ........ Merged revisions 406294-406295 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-22 22:24 +0000 [r406269] Scott Griepentrog * main/pbx.c, /, utils/extconf.c: pbx.c: Pre-initialize timezone to avoid crash on destroy In ast_build_timing, initialize the timezone value to NULL in order to avoid deferencing an uninitialized value later when calling ast_destroy_timing. The timezone value could be uninitialized if ast_build_timing were to fail due to a zero length time string. (closes issue ASTERISK-22861) Reported by: Sebastian Murray-Roberts Review: https://reviewboard.asterisk.org/r/3134/ Patches: ast_build_timing-initialize-timezone.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 406241 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406245 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406264 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-22 19:36 +0000 [r406153-406224] Kinsey Moore * /, apps/app_confbridge.c: ConfBridge: Fix channel parameter documentation Confbridge AMI and CLI commands for mute, unmute, and setting the single video source can accept channel prefixes in lieu of a full channel name, but documentation states only that it is required and is a channel name. This corrects the documentation. (closes issue PQ-1397) Reported by: Steve Pitts ........ Merged revisions 406217 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406223 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: chan_sip: Decline image streams on unsupported transports This change allows chan_sip to decline individual image streams over unsupported transports in the SDP of the 200 response. Previously, an image stream offer with RTP/AVP as the transport would cause chan_sip to respond with a 488. (closes issue ASTERISK-22988) Reported by: adomjan Original patch by: adomjan ........ Merged revisions 406170 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406171 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406172 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_playback.c, /: res_stasis_playback: Correct error argument order Several of the playback error messages for invalid media input in res_stasis_playback.c had the media name and channel name reversed. They now correctly identify the channel name and media name. Reported by: skrusty ........ Merged revisions 406152 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-21 21:48 +0000 [r406134] Rusty Newton * /, res/res_pjsip.c: res_pjsip: Documentation improvement for Endpoint and AOR mailbox options. Making the help text for both more explicit regarding the format of mailbox identifiers. i.e. clarifying the format for app_voicemail mailboxes vs mailboxes from external MWI sources through modules such as res_external_mwi. ........ Merged revisions 406133 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-21 21:08 +0000 [r406082] Walter Doekes * main/manager.c, /, configs/manager.conf.sample: manager: Clarify eventfilter documentation. Textual changes only. Review: https://reviewboard.asterisk.org/r/3133/ ........ Merged revisions 406079 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406080 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406081 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-21 20:28 +0000 [r406006-406078] Kinsey Moore * channels/chan_mgcp.c, /: chan_mgcp: Enforce locking for oseq This restricts direct usage of global oseq so that all accesses are locked and threads are not racing to get oseq values that they did not claim. This also fixes a build error in res_pktccops under dev mode. (closes issue ASTERISK-23100) Reported by: adomjan Patch by: adomjan ........ Merged revisions 406037 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 406038 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 406049 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_outbound_registration.c, res/res_pjsip.c: PJSIP: Handle headers in a list appropriately The PJSIP header parsing function (pjsip_parse_hdr) can generate more than one header instance from a single header field. These header instances exist as a list attached to the returned header and must be handled appropriately when they are added to a message or else only the first header instance will be used. This changes the linked list functions used in outbound proxy code to merge the lists properly. ........ Merged revisions 406020 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_sounds.h, res/ari/resource_bridges.h, res/ari/resource_device_states.h, res/ari/resource_mailboxes.h, res/ari/resource_asterisk.h, rest-api/api-docs/channels.json, res/ari/resource_applications.h, res/ari/resource_channels.c, res/res_ari_playbacks.c, res/res_ari_sounds.c, rest-api-templates/asterisk_processor.py, res/ari/resource_channels.h, res/res_ari_bridges.c, /, res/res_ari_device_states.c, rest-api-templates/ari_resource.h.mustache, res/res_ari_mailboxes.c, res/res_ari_asterisk.c, res/res_ari_applications.c, rest-api-templates/res_ari_resource.c.mustache, rest-api-templates/body_parsing.mustache (added), res/res_ari_channels.c, res/ari/resource_playbacks.h, rest-api-templates/param_parsing.mustache: ARI: Support channel variables in originate This adds back in support for specifying channel variables during an originate without compromising the ability to specify query parameters in the JSON body. This was accomplished by generating the body-parsing code in a separate function instead of being integrated with the URI query parameter parsing code such that it could be called by paths with body parameters. This is transparent to the user of the API and prevents manual duplication of code or data structures. (closes issue ASTERISK-23051) Review: https://reviewboard.asterisk.org/r/3122/ Reported by: Matt Jordan ........ Merged revisions 406003 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-20 23:25 +0000 [r405985] Damien Wedhorn * /, channels/chan_skinny.c: Skinny: fix up handling of fragmented packets. Bad offset in reading second or more fragment of skinny packets. Fixed to offset by char (single byte) rather than size of req. ........ Merged revisions 405982 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-20 22:23 +0000 [r405947] Richard Mudgett * channels/sig_pri.c, /: chan_dahdi/PRI: Suppress CONNECTED_LINE updates when nothing in the udpate is valid. * Also simplified some subddress handling code. (closes issue ASTERISK-23008) Reported by: Michael Cargile ........ Merged revisions 405926 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405927 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405928 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-20 21:56 +0000 [r405925] Damien Wedhorn * /, channels/chan_skinny.c: Skinny: fix up session logging. Logging from the skinny session loop was providing some incorrect reasons for exiting the loop. Cleaned up messages and handling so correct reason displayed. ........ Merged revisions 405924 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-20 18:18 +0000 [r405910] Jonathan Rose * channels/chan_pjsip.c, /: chan_pjsip: Provide a means for tracking device state when holding/unholding Previously PJSIP did not track hold/unhold and it would always simply be 'inuse'. This patch fixes that. review: https://reviewboard.asterisk.org/r/3129/ ........ Merged revisions 405908 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-19 00:01 +0000 [r405894] Damien Wedhorn * /, channels/chan_skinny.c: Skinny: fix reversed device reset from CLI. Existing code would do a full device restart when "skinny reset device" was entered at the CLI and do a reset when "skinny reset device restart" entered. ........ Merged revisions 405893 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-17 22:09 +0000 [r405878] Sean Bright * /, channels/chan_sip.c: Make sure the maxptime attribute is added to the correct offers. ........ Merged revisions 405877 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-17 21:33 +0000 [r405862-405876] Scott Griepentrog * main/format_pref.c, main/sorcery.c, main/frame.c, /, include/asterisk/format_pref.h, res/res_pjsip_sdp_rtp.c: pjsip: fix support for allow=all This change adds improvements to support for allow=all in pjsip.conf so that it functions as intended. Previously, the allow/disallow socery configuration would set & clear codecs from the media.codecs and media.prefs list, but if all was specified the prefs list was not updated. Then a call would fail when create_outgoing_sdp_stream() created an SDP with no audio codecs. A new function ast_codec_pref_append_all() is provided to add all codecs to the prefs list - only those not already on the list. This enables the configuration to specify a codec preference, but still add all codecs, and even then remove some codecs, as shown in this example: allow = ulaw, alaw, all, !g729, !g723 Also, the display order of allow in cli output is updated to match the configuration by using prefs instead of caps when generating a human readable string. Finally, a change to create_outgoing_sdp_stream() skips a codec when it does not have a payload code instead of the call failing. (closes issue ASTERISK-23018) Reported by: xrobau Review: https://reviewboard.asterisk.org/r/3131/ ........ Merged revisions 405875 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/http.c: http: supported chunked Transfer-Encoding This change implements support for HTTP Transfer-Encoding chunked in both JSON and Form (post vars) body content. A new function ast_http_get_contents() handles both regular and chunked mode body, returning after the entire body is received. (closes issue ASTERISK-23068) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3125/ ........ Merged revisions 405861 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-17 18:55 +0000 [r405778-405844] Rusty Newton * res/res_pjsip.c, /: Fixing some XML syntax issues with my previous commit at r405777 for ASTERISK-23071 ........ Merged revisions 405843 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c, doc/asterisk.8, main/features.c, configs/sip.conf.sample, apps/app_queue.c, apps/app_transfer.c, channels/chan_iax2.c: Documentation: doc fixes across various parts of the code for ASTERISK issues 23061,23028,23046,23027 Fixes typos of "transfered" instead of "transferred" in various code. Fixes incorrect gosub param help text for app_queue. Fixes Asterisk man pages containing unquoted minus signs. Adds note about the "textsupport" option in sip.conf.sample. (issue ASTERISK-23061) (issue ASTERISK-23028) (issue ASTERISK-23046) (issue ASTERISK-23027) (closes issue ASTERISK-23061) (closes issue ASTERISK-23028) (closes issue ASTERISK-23046) (closes issue ASTERISK-23027) Reported by: Eugene, Jeremy Laine, Denis Pantsyrev Patches: transferred.patch uploaded by Jeremy Laine (license 6561) hyphen.patch uploaded by Jeremy Laine (license 6561) sip.conf.sample.patch uploaded by Eugene (license 6360) ........ Merged revisions 405791 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405792 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405829 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip.c, /: res_pjsip: enhance documentation for mailboxes options, for both endpoints and aors Made documentation more explicit as to the use of the both options. (issue ASTERISK-23071) (closes issue ASTERISK-23071) Reported by: Matt Jordan ........ Merged revisions 405777 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-17 14:17 +0000 [r405766] Walter Doekes * res/res_musiconhold.c, CHANGES: Enable wide band audio in musiconhold streams. Review: https://reviewboard.asterisk.org/r/3112/ 2014-01-16 20:06 +0000 [r405747-405749] Kevin Harwell * res/res_pjsip/pjsip_options.c, /: res_pjsip: AOR option qualify_frequency not respected on startup If an endpoint had previously dynamically registered a contact and the contact information was successfully stored in astdb then upon restart the qualify notifications would not be sent out if the qualify_frequency was set. This was due to the fact that only permanent contacts were being checked and scheduled for qualifies on startup. Modified the code to check and schedule all registered contacts at startup. (closes issue ASTERISK-23062) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/3124/ ........ Merged revisions 405748 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: manager: Originate doesn't abort on failed format_cap allocation action_originate responds to the remote system with an error when cap==NULL, but doesn't return (abort the originate). Patched to return. (closes issue ASTERISK-23034) Reported by: Corey Farrell Patches: ASTERISK-23034.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 405745 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405746 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-16 19:33 +0000 [r405744] Kinsey Moore * /, res/res_pjsip.c: PJSIP: Fix outbound OPTIONS support When path support was added and contacts were made available during request creation and transmission, the code path used by outbound qualify support was not modified correctly and was causing request creation to fail. This ensures that outbound request creation with only a contact and no dialog, endpoint, or uri can succeed which restores qualify support. Reported by: gtjoseph Reported by: kharwell ........ Merged revisions 405743 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-16 19:13 +0000 [r405644-405695] Kevin Harwell * /, res/res_fax.c, configs/res_fax.conf.sample: res_fax: check_modem_rate() returned incorrect rate for V.27 According to the new standard for V.27 and V.32 they are able to transmit at a bit rate of 4,800 or 9,600. The check_mode_rate function needed to be updated to reflect this. Also, because of this change the default 'minrate' value was updated to be 4800. (closes issue ASTERISK-22790) Reported by: Paolo Compagnini Patches: res_fax.txt uploaded by looserouting (license 6548) ........ Merged revisions 405656 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405693 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405694 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_pjsip.c: chan_pjsip: initial device state on endpoints is INVALID When endpoints get loaded their device state gets set to 'INVALID' because the channel driver has not been loaded yet. Fixed by updating the device state for every endpoint upon load of the channel driver. (closes issue ASTERISK-23065) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/3123/ ........ Merged revisions 405643 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-15 16:51 +0000 [r405586-405589] Jonathan Rose * CHANGES: Make 12 - 12.1 CHANGES log the same as in 12 * CHANGES, /: Include CHANGES info for r405553 ........ Merged revisions 405585 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-15 16:36 +0000 [r405584] Joshua Colp * /, cel/cel_manager.c: cel_manager: Don't crash if configuration file is invalid. The cel_manager module did not properly handle the case where the configuration file was invalid. The module will now output a warning message and disable itself if this occurs. Reported by: Bryan Walters ........ Merged revisions 405581 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405582 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405583 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-15 13:16 +0000 [r405566] Kinsey Moore * res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, res/res_pjsip_path.c (added), res/res_pjsip_mwi.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip_diversion.c, channels/chan_pjsip.c, res/res_pjsip_registrar.c, res/res_pjsip_refer.c, include/asterisk/res_pjsip.h, include/asterisk/res_pjsip_session.h, res/res_pjsip_notify.c, /, res/res_pjsip_messaging.c, res/res_pjsip_caller_id.c, res/res_pjsip_t38.c, res/res_pjsip.c, res/res_pjsip/pjsip_options.c, res/res_pjsip_nat.c, res/res_pjsip_session.c, contrib/ast-db-manage/config/versions/2fc7930b41b3_add_pjsip_endpoint_options_for_12_1.py (added), res/res_pjsip_header_funcs.c: PJSIP: Add Path header support This adds Path support to chan_pjsip in res_pjsip_path.c with minimal additions in res_pjsip_registrar.c to store the path and additions in res_pjsip_outbound_registration.c to enable advertisement of path support to registrars and intervening proxies. Path information is stored on contacts and is enabled via Address of Record (AoRs) and Registration configuration sections. While adding path support, it became necessary to be able to add SIP supplements that handled messages outside of sessions, so a framework for handling these types of hooks was added in parallel to the already-existing session supplements and several senders of out-of-dialog requests were refactored as a result. (closes issue ASTERISK-21084) Review: https://reviewboard.asterisk.org/r/3050/ ........ Merged revisions 405565 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-14 23:44 +0000 [r405554] Jonathan Rose * res/res_stasis_mailbox.exports.in (added), res/ari/ari_model_validators.h, rest-api/api-docs/mailboxes.json (added), include/asterisk/stasis_app_mailbox.h (added), res/ari/resource_mailboxes.c (added), /, res/ari.make, res/res_ari_mailboxes.c (added), res/ari/resource_mailboxes.h (added), res/res_stasis_mailbox.c (added), rest-api/resources.json, res/ari/ari_model_validators.c: ARI: Add mailboxes resource for controlling and polling external MWI Adds the following AMI commands: PUT mailboxes/mailboxName modifies mailbox state and implicitly creates new mailboxes GET mailboxes/mailboxName retrieves a JSON representation of a single mailbox if it exists GET mailboxes retrieves a JSON array of all mailboxes DELETE mailbox/mailboxName deletes a mailbox Note that res_mwi_external must be loaded for these functions to actually do anything. Review: https://reviewboard.asterisk.org/r/3117/ ........ Merged revisions 405553 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-14 21:46 +0000 [r405542] Richard Mudgett * main/strings.c, /: string container: Remove unnecessary RAII_VAR usage and string object lock. ........ Merged revisions 405541 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-14 18:15 +0000 [r405437] Scott Griepentrog * /, channels/chan_sip.c: chan_sip: fix Local From tag on outbound register regression In ASTERISK-12117, an improvement to insure consistant local from tags on outbound registrations resulted in an undesirable behavior - caused by leftover unexpired sip_pvt dialogs (with the previous cseq number), resulting in many uncessary REGISTER requests. Instead of significant rework of transmit_register(), this change deletes the dialogs after a 200 OK response indiciating a successful registration, keeping the old dialogs from interfering with normal operation. (closes issue ASTERISK-22946) Reported by: Stephan Eisvogel Review: https://reviewboard.asterisk.org/r/3109/ ........ Merged revisions 405433 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405434 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405435 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-14 18:14 +0000 [r405436] Richard Mudgett * apps/app_verbose.c, main/asterisk.c, configs/logger.conf.sample, main/cli.c, include/asterisk/logger.h, main/pbx.c, main/manager.c, /, funcs/func_timeout.c, apps/app_dumpchan.c, main/logger.c, UPGRADE.txt: verbosity: Fix performance of console verbose messages. The per console verbose level feature as previously implemented caused a large performance penalty. The fix required some minor incompatibilities if the new rasterisk is used to connect to an earlier version. If the new rasterisk connects to an older Asterisk version then the root console verbose level is always affected by the "core set verbose" command of the remote console even though it may appear to only affect the current console. If an older version of rasterisk connects to the new version then the "core set verbose" command will have no effect. * Fixed the verbose performance by not generating a verbose message if nothing is going to use it and then filtered any generated verbose messages before actually sending them to the remote consoles. * Split the "core set debug" and "core set verbose" CLI commands to remove the per module verbose support that cannot work with the per console verbose level. * Added a silent option to the "core set verbose" command. * Fixed "core set debug off" tab completion. * Made "core show settings" list the current console verbosity in addition to the root console verbosity. * Changed the default verbose level of the 'verbose' setting in the logger.conf [logfiles] section. The default is now to once again follow the current root console level. As a result, using the AMI Command action with "core set verbose" could again set the root console verbose level and affect the verbose level logged. (closes issue AST-1252) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/3114/ ........ Merged revisions 405431 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405432 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-14 16:43 +0000 [r405420] Mark Michelson * res/res_pjsip/pjsip_distributor.c: Fix erroneous behavior when sending auth rejection to artificial endpoint. We were not including an authentication challenge when sending a 401 response to unmatched endpoints. This was due to the conversion to use a vector for authentication section names on an endpoint. The vector for artificial endpoints was empty, resulting in the challenge being sent back containing no challenges. This is worked around by placing a bogus value in the artificial endpoint's auth vector. This value is never looked up by anything, since they instead will directly call ast_sip_get_artificial_auth(). 2014-01-14 03:27 +0000 [r405369] Damien Wedhorn * /, channels/chan_skinny.c: Skinny: do not add call to missed calls list if answered elsewhere. Patch updates skinny devices with a SKINNY_CONNECTED callstate if an inbound ringing or callwaiting call is answered elsewhere. ........ Merged revisions 405367 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-13 13:34 +0000 [r405339] Kinsey Moore * /, res/res_pjsip/pjsip_cli.c: res_pjsip: Fix CLI tab completion issues This fixes several issues with the new res_pjsip CLI tab completion such as output of headers during tab completion and being able to tab-complete more items than the code actually handled (further items would simply be ignored). (closes issue ASTERISK-23081) Review: https://reviewboard.asterisk.org/r/3115/ Reported by: xrobau ........ Merged revisions 405338 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-12 22:24 +0000 [r405326] Joshua Colp * res/ari/resource_playbacks.c, res/ari/resource_channels.c, include/asterisk/ari.h, res/ari/resource_bridges.c, res/ari/resource_recordings.c, res/ari/resource_device_states.c, res/res_ari.c, res/ari/resource_endpoints.c, /, res/ari/resource_applications.c: res_ari: Fix various memory leaks. This change fixes a few memory leaks that were found based on a mailing list post. 1. Some JSON response messages were never freed. This was caused by the documentation stating that message references were stolen when in reality they were not. The code now follows the documentation and usage has been updated. 2. HTTP response headers were never freed. 3. The variable list for wildcards paths was never freed. (closes issue ASTERISK-23128) Reported by: Kenneth Watson (on list) Review: https://reviewboard.asterisk.org/r/3119/ ........ Merged revisions 405325 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-12 22:13 +0000 [r405313-405314] Matthew Jordan * apps/app_forkcdr.c, /, funcs/func_cdr.c, include/asterisk/cdr.h, apps/app_cdr.c, main/cdr.c: CDRs: Synchronize dialplan applications that manipulate CDRs with the engine In https://reviewboard.asterisk.org/r/3057/, applications and functions that manipulate CDRs were made to interact over Stasis. This was done to synchronize manipulations of CDRs from the dialplan with the updates the engine itself receives over the message bus. This change rested on a faulty premise: that messages published to the CDR topic or to a topic that forwards to the CDR topic are synchronized with the messages handled by the CDR topic subscription in the CDR engine. This is not the case. There is no ordering guaranteed for two messages published to the same topic; ordering is only guaranteed if a message is published to the same subscriber. Stasis was modified in r405311 to allow a publisher to synchronize on the subscriber. This patch uses that API to synchronize the CDR publishers with the CDR engine message router, which maintains the overall topic subscription. (closes issue ASTERISK-22884) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3099/ ........ Merged revisions 405312 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis.c, main/stasis_message_router.c, /, include/asterisk/stasis.h, include/asterisk/stasis_message_router.h, tests/test_stasis.c: stasis: Add methods to allow for synchronous publishing to subscriber This patch adds an API call to Stasis that allows a publisher to publish a stasis message that will not return until a specific subscriber handles the message. Since a subscriber can have their own forwarding topic which orders messages from many topics, this allows a publisher who knows of that subscriber to synchronize to that subscriber regardless of the forwarding relationships between topics. This is of particular use for dialplan applications that need to synchronize on a particular subscriber's handling of a message. (issue ASTERISK-22884) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3099/ ........ Merged revisions 405311 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-10 20:00 +0000 [r405299] Mark Michelson * /, res/res_pjsip/security_events.c: Print "" for artificial endpoint in PJSIP security events. Previously, this printed a UUID, which was not very clear when dealing with an artificial endpoint. Review: https://reviewboard.asterisk.org/r/3113 ........ Merged revisions 405298 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-10 18:17 +0000 [r405284] Richard Mudgett * /, main/logger.c: Logging callid: Fix some sizeof() references per coding guidelines. ........ Merged revisions 405281 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405282 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 23:52 +0000 [r405270] Jonathan Rose * res/res_pjsip_session.c: PJSIP: Add unhold on reinvite without SDP behavior Review: https://reviewboard.asterisk.org/r/3106/ 2014-01-09 23:50 +0000 [r405269] Damien Wedhorn * channels/chan_dahdi.c, /: Fix chan_dahdi copile issue in dev-mode. Error "unused variable i in dahdi_create_channel_range" when compiling in dev-mode. Small restructure to dahdi_create_channel_range to move the for(x) loop and int i,x to a block within the IFDEF. ........ Merged revisions 405268 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 23:39 +0000 [r405267] Kevin Harwell * res/res_pjsip.c, /, res/res_pjsip_messaging.c: res_pjsip_messaging: potential for field values in from/to headers to be missing Added in ability to specify display name format ("name" ) for a given URI and made sure it was fully propagated to the outgoing message. Also made it so outoing messages in res_pjsip always send as "sip:". (closes issue ASTERISK-22924) Reported by: Anthony Messina Review: https://reviewboard.asterisk.org/r/3094/ ........ Merged revisions 405266 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 20:34 +0000 [r405254] Kinsey Moore * main/astobj2.c, res/res_pjsip_session.c, /, include/asterisk/astobj2.h: astobj2: Correct ao2_iterator opacity violations This corrects the ao2_iterator opacity violations in res_pjsip_session.c by adding a global function to get the number of elements inside the container hidden behind the iterator. (closes issue ASTERISK-23053) Review: https://reviewboard.asterisk.org/r/3111/ Reported by: Richard Mudgett ........ Merged revisions 405253 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 16:52 +0000 [r405236] Kevin Harwell * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fails to resume WebRTC call from hold In ast_rtp_ice_start if the ice session create check list failed, start check was never initiated and ice_started was never set to true. Upon re-entering the function (for instance, [un]hold) it would try to create the check list again with duplicate remote candidates. Fixed so that if the create check list fails the necessary data structures are properly re-initialized for any subsequent retries. Note, it was decided to not stop ice support (by calling ast_rtp_ice_stop) on a check list failure because it possible things might still work. However, a debug message was added to help with any future troubleshooting. (closes issue ASTERISK-22911) Reported by: Vytis Valentinavičius Patches: works_on_my_machine.patch uploaded by xytis (license 6558) ........ Merged revisions 405234 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405235 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 15:50 +0000 [r405217] Matthew Jordan * /, apps/app_confbridge.c, apps/confbridge/conf_state_multi_marked.c: app_confbridge: Fix crash caused when waitmarked/marked users leave together When waitmarked users join a ConfBridge, the conference state is transitioned from EMPTY -> INACTIVE. In this state, the users are maintined in a waiting users list. When a marked user joins, the ConfBridge conference transitions from INACTIVE -> MULTI_MARKED, and all users are put onto the active list of users. This process works correctly. When the marked user leaves, if they are the last marked user, the MULTI_MARKED state does the following: (1) It plays back a message to the bridge stating that the leader has left the conference. This requires an unlocking of the bridge. (2) It moves waitmarked users back to the waiting list (3) It transitions to the appropriate state: in this case, INACTIVE However, because it plays the prompt back to the bridge before moving the users and before finishing the state transition, this creates a race condition: with the bridge unlocked, waitmarked users who leave the conference (or are kicked from it) can cause a state transition of the bridge to another state before the conference is transitioned to the INACTIVE state. This causes the state machine to get a bit wonky, often leading to a crash when the MULTI_MARKED state attempts to conclude its processing. This patch fixes this problem: (1) It prevents kicked users from being kicked again. That's just a nicety. (2) More importantly, it fixes the race condition by only playing the prompt once the state has transitioned correctly to INACTIVE. If waitmarked users sneak out during the prompt being played, no harm no foul. Review: https://reviewboard.asterisk.org/r/3108/ Note that the patch committed here is essentially the same as uploaded by Simon Moxon on ASTERISK-22740, with the addition of the double kick prevention. (closes issue AST-1258) Reported by: Steve Pitts (closes issue ASTERISK-22740) Reported by: Simon Moxon patches: ASTERISK-22740.diff uploaded by Simon Moxon (license 6546) ........ Merged revisions 405215 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405216 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-09 14:15 +0000 [r405163] Walter Doekes * /, apps/app_dumpchan.c: "Minimun" typo. ........ Merged revisions 405160 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405161 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405162 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-08 17:23 +0000 [r405144] Mark Michelson * /, res/res_pjsip/security_events.c: Use proper case for checking if digest authentication is used. ........ Merged revisions 405131 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-08 16:34 +0000 [r405129-405130] Kinsey Moore * /, configure, configure.ac, pbx/pbx_lua.c: pbx_lua: Add support for Lua 5.2 This adds support for Lua 5.2 in pbx_lua which is available on newer operating systems. (closes issue ASTERISK-23011) Review: https://reviewboard.asterisk.org/r/3075/ Reported by: George Joseph Patch by: George Joseph ........ Merged revisions 405090 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405091 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405124 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: Add the missing part of r400140 When the patch to add retry-on-forbidden-response was committed, part of the patch for chan_sip was not committed which caused the feature to be entirely nonfunctional. This corrects the code in question. (closes issue ASTERISK-17138) Review: https://reviewboard.asterisk.org/r/2874 ........ Merged revisions 405033 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 405081 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 405083 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-07 19:56 +0000 [r405020-405035] Joshua Colp * /, res/res_pjsip_acl.c: res_pjsip_acl: Fix another case of assuming a contact will always contain a URI. ........ Merged revisions 405034 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_nat.c: res_pjsip_nat: Don't assume a Contact header will always contain a URI. If the 'rewrite_contact' option was enabled and a Contact header was received which contained a '*' a crash would occur. This change makes the res_pjsip_nat module ignore the Contact header if it contains only a '*'. (closes issue ASTERISK-23101) Reported by: Matt Jordan ........ Merged revisions 405019 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-06 21:55 +0000 [r404953-405007] Richard Mudgett * apps/app_voicemail.c, /: app_voicemail: Explicitly set defaultenabled=yes ........ Merged revisions 405006 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_mwi_external_ami.c (added): External MWI AMI support. The external MWI AMI interface provides a thin wrapper around the core external MWI resource. The resource adds the following AMI actions: MWIGet, MWIDelete, and MWIUpdate. (closes issue AFS-46) Review: https://reviewboard.asterisk.org/r/3061/ ........ Merged revisions 404954 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_mwi_external.c (added), configs/sorcery.conf.sample, include/asterisk/res_mwi_external.h (added), res/res_mwi_external.exports.in (added), apps/app_voicemail.c: External MWI core support. * The core external MWI resource provides for MWI message counts persistence using sorcery. With sorcery, the user is able to configure which sorcery wizzard backend to use if the default astdb is not desired. * The core external MWI resoruce provides some debugging CLI commands enabled by defining MWI_DEBUG_CLI. The debugging CLI commands are: "mwi delete all", "mwi delete like ", "mwi delete mailbox ", "mwi list all", "mwi list like ", "mwi show mailbox ", and "mwi update mailbox [ []]". (closes issue AFS-43) Review: https://reviewboard.asterisk.org/r/3061/ ........ Merged revisions 404952 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-05 16:01 +0000 [r404924-404936] Joshua Colp * /, res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Don't assume that a registration client will always exist. ........ Merged revisions 404935 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Create registration client in pj thread. Depending on which threading was loading the outbound registration it was possible for the registration client to be allocated outside of a pj thread. This change moves the creation inside the synchronous task where it is guaranteed it will occur in a pj thread. Reported by: Rob Thomas ........ Merged revisions 404923 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-04 10:52 +0000 [r404912] Tzafrir Cohen * main/asterisk.c, /: asterisk.c: suppress live_dangerously warning on rasterisk Even since the fixes of AST-2013-007, Asterisk prints the following warning on startup if the user decided to live dangerously: Privilege escalation protection disabled! See https://wiki.asterisk.org/wiki/x/1gKfAQ for more details. This message is intended for the logs and interactive startup. No need for it to appear on a remote console. This commit removes it from there. (closes issue ASTERISK-23084) Review: https://reviewboard.asterisk.org/r/3101/ ........ Merged revisions 404861 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404888 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404911 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 22:00 +0000 [r404860] Kevin Harwell * cel/cel_pgsql.c, /: cel_pgsql: module not correctly reloading Upon reload the module unconditionally "unloaded" the module (freeing memory and setting pointers to NULL) and then when attempting a "load" if the config file had not changed then nothing would be reinitialized. By moving the "unload" to occur conditionally (reload only) after an attempted configuration load, but before module "loading" alleviates the issue. The module now loads/unloads/reloads correctly. (closes issue ASTERISK-22871) Reported by: Matteo ........ Merged revisions 404857 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404858 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404859 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 21:45 +0000 [r404844-404856] Matthew Jordan * /, res/res_pjsip_logger.c: res_pjsip_logger: Add the ASTERISK_FILE_VERSION macro Registering yourself with the Asterisk core is the nice thing to do, even when you're a logging module. ........ Merged revisions 404855 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_authenticator_digest.c, tests/test_utils.c: res_pjsip_authenticator_digest: Fix md5 hash buffer An md5 hash is 32 bytes long. The char buffer must be at least 33 bytes to avoid clobbering of the stack. This patch also fixes a potential clobbering in test_utils.c. Thanks to Andrew Nagy for reporting and testing this out in #asterisk-dev Reported by: Andrew Nagy Tested by: Andrew Nagy ........ Merged revisions 404843 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 20:02 +0000 [r404787-404832] Kevin Harwell * main/manager.c: manager: UserEvent including action on output AMI action UserEvent event response would include the action header in its keyvalue pairs list. Adjusted the start of the header loop to skip over the action part. (closes issue ASTERISK-22899) Reported by: outtolunc Patches: svn_manager.c.skip_action.diff.txt uploaded by outtolunc (license 5198) * channels/chan_dahdi.c, /: chan_dahdi: dahdi show channels slices PRI channel dnid on output dahdi show channels output slices the callerid (which is dnid copied over on PRI channels). If the channel naming structures look like: 'DAHDI/i1/1408409XXXX-6' then the output slices 1408409XXXX down to 1408409XXX. This patch just opens it up to 15 chars so you can see the whole thing. (closes issue ASTERISK-22918) Reported by: outtolunc Patches: svn_chan_dahdi.c.format12_15.diff.txt uploaded by outtolunc (license 5198) ........ Merged revisions 404784 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404785 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404786 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 18:33 +0000 [r404783] Richard Mudgett * tests/test_stasis.c, /: test_stasis.c: Fix ref leak in normal execution path. ........ Merged revisions 404764 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 18:31 +0000 [r404782] Kevin Harwell * /, apps/app_meetme.c: app_meetme: compiler warning Fixed a compiler warning (errors in 'dev-mode') given by gcc version 4.8.1. The one in app_meetme involved the 'sizeof-pointer-memaccess' (see: http://gcc.gnu.org/gcc-4.8/porting_to.html) warning. Fixed so it would no longer issue a warning and can compile again in 'dev-mode'. Review: https://reviewboard.asterisk.org/r/3098/ ........ Merged revisions 404742 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404773 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404781 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-03 17:27 +0000 [r404726-404738] Joshua Colp * res/res_pjsip/pjsip_configuration.c, /, res/res_pjsip/location.c: res_pjsip: Ensure more URI validation happens in pj threads. ........ Merged revisions 404737 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_outbound_registration.c: res_pjsip_outbound_registration: Ensure URI validation happens in a pjlib thread. This change moves outbound registration URI validation into the task executed within a pjlib thread. Reported by: Andrew Nagy ........ Merged revisions 404725 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-02 19:38 +0000 [r404677] Scott Griepentrog * /, funcs/func_strings.c: func_strings: use memmove to prevent overlapping memory on strcpy When calling REPLACE() with an empty replace-char argument, strcpy is used to overwrite the the matching . However as the src and dest arguments to strcpy must not overlap, it causes other parts of the string to be overwritten with adjacent characters and the result is mangled. Patch replaces call to strcpy with memmove and adds a test suite case for REPLACE. (closes issue ASTERISK-22910) Reported by: Gareth Palmer Review: https://reviewboard.asterisk.org/r/3083/ Patches: func_strings.patch uploaded by Gareth Palmer (license 5169) ........ Merged revisions 404674 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404675 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404676 from http://svn.asterisk.org/svn/asterisk/branches/12 2014-01-02 19:08 +0000 [r404664] Kevin Harwell * channels/chan_pjsip.c, include/asterisk/res_pjsip.h, /, configs/pjsip.conf.sample, res/res_pjsip/pjsip_configuration.c, CHANGES, res/res_pjsip.c: res_pjsip: add 'set_var' support on endpoints Added a new 'set_var' option for ast_sip_endpoint(s). For each variable specified that variable gets set upon creation of a pjsip channel involving the endpoint. (closes issue ASTERISK-22868) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/3095/ ........ Merged revisions 404663 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-31 22:51 +0000 [r404620-404653] Joshua Colp * channels/chan_pjsip.c, res/res_pjsip_session.c, /: chan_pjsip: Handle hanging up before calling. Channel creation in Asterisk is broken up into two steps: requesting and calling. In some cases a channel may be requested but never called. This happens in the ChanIsAvail dialplan application for determining if something is reachable or not. The PJSIP channel driver did not take this situation into account and attempted to end a session that was never called out on. The code now checks the session state to determine if the session has been called out on and if not terminates it instead of ending it. (closes issue ASTERISK-23074) Reported by: Kilburn ........ Merged revisions 404652 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_endpoint_identifier_ip.c: res_pjsip_endpoint_identifier_ip: Accept hostnames in the 'match' field. Hostnames specified in the 'match' field will be resolved and all addresses returned. Each address will be added to the endpoint identifier for the matching process. Reported by: Rob Thomas ........ Merged revisions 404613 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-31 21:39 +0000 [r404606] Kevin Harwell * cel/cel_pgsql.c, /: cel_pgsql: deadlock on unload and core_event_dispatcher A deadlock can happen between a thread unloading or reloading the cel_pgsql module and the core_event_dispatcher taskprocessor thread. Description of what is happening: Thread 1 (for example, a netconsole thread): a "module reload cel_pgsql" is launched the thread enter the "my_unload_module" function (cel_pgsql.c) the thread acquire the write lock on psql_columns the thread enter the "ast_event_unsubscribe" function (event.c) the thread try to acquire the write lock on ast_event_subs[sub->type] Thread 2 (core_event_dispatcher taskprocessor thread): the taskprocessor pop a CEL event the thread enter the "handle_event" function (event.c) the thread acquire the read lock on ast_event_subs[sub->type] the thread callback the "pgsql_log" function (cel_pgsql.c), since it's a subscriber of CEL events the thread try to acquire a read lock on psql_columns (closes issue ASTERISK-22854) Reported by: Etienne Lessard Patches: cel_pgsql_fix_deadlock_event.patch uploaded by hexanol (license 6394) ........ Merged revisions 404603 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404604 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404605 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-31 20:27 +0000 [r404593] Joshua Colp * res/res_pjsip_outbound_registration.c, /: res_pjsip_outbound_registration: Add validation for 'server_uri' and 'client_uri'. When applying configuration for outbound registrations the 'server_uri' and 'client_uri' fields were not validated. The code will now confirm that they exist and that they contain parseable SIP URIs. Reported by: Andrew Nagy ........ Merged revisions 404592 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-30 23:25 +0000 [r404582] Kevin Harwell * main/channel.c, /: channels.c: core show channeltypes slicing 'core show channeltypes' type column is being sliced, resulting in incomplete type names. (closes issue ASTERISK-22919) Reported by: outtolunc Patches: svn_channel.c.format_15.diff.txt uploaded by outtolunc (license 5198) ........ Merged revisions 404579 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404581 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-24 17:12 +0000 [r404567-404569] David M. Lee * UPGRADE-12.txt, /: Added note to UPGRADE.txt about the default value of live_dangerously changing ........ Merged revisions 404568 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/http.c: http: Properly reject requests with Transfer-Encoding set Asterisk does not support any of the transfer encodings specified in HTTP/1.1, other than the default "identity" encoding. According to RFC 2616: A server which receives an entity-body with a transfer-coding it does not understand SHOULD return 501 (Unimplemented), and close the connection. A server MUST NOT send transfer-codings to an HTTP/1.0 client. This patch adds the 501 Unimplemented response, instead of the hard work of actually implementing other recordings. This behavior is especially problematic for Node.js clients, which use chunked encoding by default. (closes issue ASTERISK-22486) Review: https://reviewboard.asterisk.org/r/3092/ ........ Merged revisions 404565 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-24 02:20 +0000 [r404554] Joshua Colp * /, res/res_pjsip_pubsub.c: res_pjsip_pubsub: Ensure dialog manipulation happens on proper thread. When destroying a subscription we remove the serializer from its dialog and decrease its reference count. Depending on which thread dropped the subscription reference count to 0 it was possible for this to occur in a thread where it is not possible. (closes issue ASTERISK-22952) Reported by: Matt Jordan ........ Merged revisions 404553 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-23 16:38 +0000 [r404542] Tzafrir Cohen * channels/chan_dahdi.c, configs/chan_dahdi.conf.sample, UPGRADE-12.txt: chan_dahdi: enable ignore_failed_channels by default If ignore_failed_channels is set to "true" for a channel, the channel will continue to be configured even if configuring it has failed. This allows Asterisk to start before all the DAHDI initialization is done and thus not force the starting order dahdi -> asterisk. Review: https://reviewboard.asterisk.org/r/3063/ 2013-12-21 03:35 +0000 [r404532] Matthew Jordan * /, res/res_pjsip/pjsip_cli.c: res_pjsip/pjsip_cli: fix compilation error caused by passing ast_free When wanting to pass *free as a function pointer, ast_free_ptr has to be used instead of ast_free. This allows it to be compiled with MALLOC_DEBUG enabled. ........ Merged revisions 404531 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 22:04 +0000 [r404511-404512] David M. Lee * rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, /, rest-api/api-docs/applications.json: ari: Remove support for specifying channel vars during origination. When we added support for specifying channel variables for an origination, we didn't consider how that would interact with another feature, namely specifying request parameters in a JSON request body. The method of specifying channel variables (as a flat JSON object passed in the JSON body) interferes with parsing parameters out of the request body. Unfortunately, fixing this would be a backward incompatible change. In the interest of keeping the API sane and keeping our release schedule, we're dropping the feature for specifying channel variables in the origination request. We will bring the feature back soon, as a backward compatible addition to the API. (closes issue ASTERISK-23051) Review: https://reviewboard.asterisk.org/r/3088 ........ Merged revisions 404509 from http://svn.asterisk.org/svn/asterisk/branches/12 * /: Remove automerge properties ........ Merged revisions 404488 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 21:32 +0000 [r404507] Matthew Jordan * include/asterisk/config.h, main/config.c, main/channel.c, res/res_pjsip/location.c, include/asterisk/res_pjsip_cli.h (added), res/res_pjsip/pjsip_cli.c (added), include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip_registrar.c, main/sorcery.c, include/asterisk/res_pjsip.h, CREDITS, res/res_pjsip/config_auth.c, /, res/res_pjsip_endpoint_identifier_ip.c: res_pjsip: Add PJSIP CLI commands Implements the following cli commands: pjsip list aors pjsip list auths pjsip list channels pjsip list contacts pjsip list endpoints pjsip show aor(s) pjsip show auth(s) pjsip show channels pjsip show endpoint(s) Also... Minor modifications made to the AMI command implementations to facilitate reuse. New function ast_variable_list_sort added to config.c and config.h to implement variable list sorting. (issue ASTERISK-22610) patches: pjsip_cli_v2.patch uploaded by george.joseph (License 6322) ........ Merged revisions 404480 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 21:18 +0000 [r404461] Scott Griepentrog * /, main/say.c: say.c: correct time for polish In ast_say_date_with_format_pl(), change ast_say_number() to use tm_sec instead of tm_mn. (closes issue ASTERISK-22856) Reported by: Robert Mordec Review: https://reviewboard.asterisk.org/r/3082/ Patches: say.c.patch uploaded by veilen (license 6555) ........ Merged revisions 404456 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404457 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404458 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 20:28 +0000 [r404452] Mark Michelson * /, res/res_pjsip_refer.c: Fix issue where PJSIP blind transferer dialog may not complete as planned. When transferring to a dialplan extension that will not place any outbound calls, the only control frames that the PJSIP REFER framehook will receive are inconsequential (such as unhold or srcchange). As such, we shouldn't allow for the reception of those types of frames prevent us from signaling to the transferring party that the transfer has completed successfully once voice frames are read. Thanks to Jonathan Rose for pointing this out. ........ Merged revisions 404439 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 20:05 +0000 [r404438] Matthew Jordan * /, res/ari/resource_applications.h, res/res_stasis_device_state.c: res_stasis_device_state: Set resource type for subscriptions to deviceState The documentation for ARI already specifies that the device state resource when used for subscribing for events is "deviceState", not "device_state". The code, however, used "device_state"; although this was inconsistent as well in doxygen comments in resource_applications. Because the actual resource being subscribed to is /deviceStates/{device}/, it makes sense for the resource type specifier to be deviceState. Note that the key value in the events is still "device_state". ........ Merged revisions 404437 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 20:00 +0000 [r404436] Richard Mudgett * res/ari/resource_channels.c, tests/test_scoped_lock.c, tests/test_stasis.c, res/parking/parking_manager.c, res/ari/resource_bridges.c, res/ari/resource_endpoints.c, /, res/res_pjsip/location.c, tests/test_cel.c: ao2_iterator: Mini-audit of the ao2_iterator loops in the new code files. * Fixed several places where ao2_iterator_destroy() was not called. * Fixed several iterator loop object variable reference problems. * Fixed res_parking AMI actions returning non-zero. Only the AMI logoff action can return non-zero. Review: https://reviewboard.asterisk.org/r/3087/ ........ Merged revisions 404434 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 19:25 +0000 [r404433] Matthew Jordan * include/asterisk/manager.h, /: manager: bump version to 2.0.0 AMI has received substantial updates over the past year. Not only has the syntax been vastly improved and made consistent (which entails many event changes), but the underlying things that those events convey have changed substantially as well. After some conversation in #asterisk-dev, it was agreed that this is a good time to jump to 2. At the same time, since ARI will most likely use semantic versioning, we might as well use that for AMI as well. That also affords us greater meaning for the AMI version. ........ Merged revisions 404421 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 19:06 +0000 [r404420] Richard Mudgett * /, main/sounds_index.c: Whitespace fixes. ........ Merged revisions 404419 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-20 17:22 +0000 [r404406] Rusty Newton * /, configs/pjsip.conf.sample: Documentation: Updates for info about NAT-related settings and fixes for pjsip.conf.sample Added another NAT example to pjsip.conf.sample. We had a few mentions of NAT configuration throughout the sample, but I added another for a little bit more clarity. Additionally many pjsip options were affected by the change to snake case, so I fixed any instances of those options in pjsip.conf. I regenerated the config option list (at the bottom of the file) from a new xml config doc dump, so all the snake case changes should be reflected there, as well as any other changes to those options. (issue ASTERISK-23004) (closes issue ASTERISK-23004) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3086/ ........ Merged revisions 404405 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 20:48 +0000 [r404387] Scott Griepentrog * main/security_events.c: security_events: log events with descriptive names This patch updates the log messages to include descriptive names for event types. This is an improvement over having only cryptic type numbers. (closes issue ASTERISK-22909) Reported by: outtolunc Review: https://reviewboard.asterisk.org/r/3081/ Patches: svn_security_events.c.names.diff.txt uploaded by outtolunc (license 5198) 2013-12-19 18:16 +0000 [r404376] Richard Mudgett * /, CHANGES: Put notice in CHANGES as well as UPGRADE.txt. ........ Merged revisions 404375 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 18:00 +0000 [r404370-404372] Joshua Colp * res/res_pjsip/pjsip_outbound_auth.c, /: res_pjsip: Ignore 401/407 responses for transactions and dialogs we don't know about. Under normal conditions it is unlikely we will ever receive a response for a transaction or dialog we don't know about but if any are received ignore them. ........ Merged revisions 404371 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_session.c: res_pjsip_session: Fix SDP negotiation when resending an INVITE with authentication. The process for resending an INVITE with authentication involves restarting the UAC session. We were incorrectly passing in that a new offer is being sent, causing the SDP negotiation to get into a (technically speaking) funky state. ........ Merged revisions 404369 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 17:45 +0000 [r404368] Mark Michelson * include/asterisk/channel.h, res/res_pjsip.c, main/channel.c, /, include/asterisk/autochan.h: Fix a deadlock that occurred due to a conflict of masquerades. For the explanation, here is a copy-paste of the review board explanation: Initially, it was discovered that performing an attended transfer of a multiparty bridge with a PJSIP channel would cause a deadlock. A PBX thread started a masquerade and reached the point where it was calling the fixup() callback on the "original" channel. For chan_pjsip, this involves pushing a synchronous task to the session's serializer. The problem was that a task ahead of the fixup task was also attempting to perform a channel masquerade. However, since masquerades are designed in a way to only allow for one to occur at a time, the task ahead of the fixup could not continue until the masquerade already in progress had completed. And of course, the masquerade in progress could not complete until the task ahead of the fixup task had completed. Deadlock. The initial fix was to change the fixup task to be asynchronous. While this prevented the deadlock from occurring, it had the frightful side effect of potentially allowing for tasks in the session's serializer to operate on a zombie channel. Taking a step back from this particular deadlock, it became clear that the problem was not really this one particular issue but that masquerades themselves needed to be addressed. A PJSIP attended transfer operation calls ast_channel_move(), which attempts to both set up and execute a masquerade. The problem was that after it had set up the masquerade, the PBX thread had swooped in and tried to actually perform the masquerade. Looking at changes that had been made to Asterisk 12, it became clear that there never is any time now that anyone ever wants to set up a masquerade and allow for the channel thread to actually perform the masquerade. Everyone always is calling ast_channel_move(), performs the masquerade itself before returning. In this patch, I have removed all blocks of code from channel.c that will attempt to perform a masquerade if ast_channel_masq() returns true. Now, there is no distinction between setting up a masquerade and performing the masquerade. It is one operation. The only remaining checks for ast_channel_masq() and ast_channel_masqr() are in ast_hangup() since we do not want to interrupt a masquerade by hanging up the channel. Instead, now ast_hangup() will wait for a masquerade to complete before moving forward with its operation. The ast_channel_move() function has been modified to basically in-line the logic that used to be in ast_channel_masquerade(). ast_channel_masquerade() has been killed off for real. ast_channel_move() now has a lock associated with it that is used to prevent any simultaneous moves from occurring at once. This means there is no need to make sure that ast_channel_masq() or ast_channel_masqr() are already set on a channel when ast_channel_move() is called. It also means the channel container lock is not pulling double duty by both keeping the container locked and preventing multiple masquerades from occurring simultaneously. The ast_do_masquerade() function has been renamed to do_channel_masquerade() and is now internal to channel.c. The function now takes explicit arguments of which channels are involved in the masquerade instead of a single channel. While it probably is possible to do some further refactoring of this method, I feel that I would be treading dangerously. Instead, all I did was change some comments that no longer are true after this changeset. The other more minor change introduced in this patch is to res_pjsip.c to make ast_sip_push_task_synchronous() run the task in-place if we are already a SIP servant thread. This is related to this patch because even when we isolate the channel masquerade to only running in the SIP servant thread, we would still deadlock when the fixup() callback is reached since we would essentially be waiting forever for ourselves to finish before actually running the fixup. This makes it so the fixup is run without having to push a task into a serializer at all. (closes issue ASTERISK-22936) Reported by Jonathan Rose Review: https://reviewboard.asterisk.org/r/3069 ........ Merged revisions 404356 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 17:13 +0000 [r404355] Richard Mudgett * main/udptl.c, addons/chan_ooh323.c, /, channels/chan_sip.c, include/asterisk/udptl.h: udptl: Dead code elimination. ast_udptl_bridge was not used. Removing dead code starting with ast_udptl_bridge() eliminated the code in this change. Note: This code has actually been dead since Asterisk v1.4 when it was first put in. Review: https://reviewboard.asterisk.org/r/3079/ ........ Merged revisions 404354 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 17:03 +0000 [r404353] Scott Griepentrog * /, res/res_fax.c: res_fax.c: crash on framehook with no dsp in fax detect In fax_detect_framehook() a null pointer reference can occur where a voice frame is processed but no dsp is attached to the fax detection structure. The code block that rejects frames that detection cannot be processed on is checking for dsp but falls through when it should instead return, as this change implements. (closes issue ASTERISK-22942) Reported by: adomjan Review: https://reviewboard.asterisk.org/r/3076/ ........ Merged revisions 404351 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404352 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 16:52 +0000 [r404350] Richard Mudgett * configs/skinny.conf.sample, res/res_xmpp.c, res/res_jabber.c, CHANGES, channels/chan_iax2.c, channels/sig_pri.c, channels/h323/chan_h323.h, configs/iax.conf.sample, channels/sig_pri.h, channels/chan_dahdi.c, include/asterisk/app.h, channels/chan_skinny.c, channels/chan_dahdi.h, channels/chan_h323.c, main/app.c, UPGRADE-12.txt, configs/sip.conf.sample, channels/sip/include/sip.h, channels/chan_mgcp.c, apps/app_voicemail.c, channels/chan_unistim.c, configs/chan_dahdi.conf.sample, /, channels/chan_sip.c, configs/voicemail.conf.sample, funcs/func_vmcount.c: Voicemail: Remove mailbox identifier format (box@context) assumptions in the system. This change is in preparation for external MWI support. Removed code from the system for normal mailbox handling that appends @default to the mailbox identifier if it does not have a context. The only exception is the legacy hasvoicemail users.conf option. The legacy option will only work for app_voicemail mailboxes. The system cannot make any assumptions about the format of the mailbox identifer used by app_voicemail. chan_sip and chan_dahdi/sig_pri had the most changes because they both tried to interpret the mailbox identifier. chan_sip just stored and compared the two components. chan_dahdi actually used the box information. The ISDN MWI support configuration options had to be reworked because chan_dahdi was parsing the box@context format to get the box number. As a result the mwi_vm_boxes chan_dahdi.conf option was added and is documented in the chan_dahdi.conf.sample file. Review: https://reviewboard.asterisk.org/r/3072/ ........ Merged revisions 404348 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 16:33 +0000 [r404346] Scott Griepentrog * main/db.c, /: astdb: crash in sqlite3 during shutdown When Asterisk is shut down, the astdb_atexit() function releases (finalize) the previously initiated (prepared) SQL statements in sqlite3. Another thread making a subsequent request can cause a crash in sqlite3. This patch eliminates that issue by resetting the statement pointer after it is released/cleared. The sqlite3 code detects the null pointer, and aborts the operation cleanly. (closes issue AST-1265) Reported by: Alexander Hömig (closes issue ASTERISK-22350) Reported by: Birger "WIMPy" Harzenetter Review: https://reviewboard.asterisk.org/r/3078/ ........ Merged revisions 404344 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404345 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 12:18 +0000 [r404333] Joshua Colp * main/channel.c, /: channel: Add a missing ast_channel_unlock when allocating a Surrogate channel. ........ Merged revisions 404332 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 08:35 +0000 [r404321] Alexandr Anikin * addons/ooh323c/src/oochannels.c, addons/ooh323c/src/ooGkClient.c, addons/chan_ooh323.c, /, addons/ooh323c/src/ooGkClient.h: Handle temporary failures on gk registration Introduce new 'stopped' state for gk client and restart gk client on failures Remove ooh323 stack command lock as it is not need now. (closes issue ASTERISK-21960) Reported by: Dmitry Melekhov Patches: ASTERISK-21960.patch ASTERISK-21960-stacklockup-2.patch Tested by: Dmitry Melekhov ........ Merged revisions 404318 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404320 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 02:59 +0000 [r404307] Damien Wedhorn * /, channels/chan_skinny.c: Fixup some skinny bugs causing Fracks and ao2 cleanup issues. Moved channel locking into setsubstate so that a process can complete working on a sub before another starts changing it. The existing code was causing some Fracks with schedule deletion. Removed multiple rtp cleanup. Now only cleansup up once, fixing ao2 object cleanup issues. ........ Merged revisions 404306 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 00:50 +0000 [r404295] Matthew Jordan * include/asterisk/cdr.h, CHANGES, apps/app_cdr.c, main/cdr.c, apps/app_forkcdr.c, main/pbx.c, /, funcs/func_cdr.c, apps/app_disa.c, UPGRADE-12.txt: app_cdr,app_forkcdr,func_cdr: Synchronize with engine when manipulating state When doing the rework of the CDR engine that pushed all of the logic into cdr.c and made it respond to changes in channel state over Stasis, we knew that accessing the CDR engine from the dialplan would be "slightly" non-deterministic. Dialplan threads would be accessing CDRs while Stasis threads would be updating the state of said CDRs - whereas in the past, everything happened on the dialplan threads. Tests have shown that "slightly" is in reality "very". This patch synchronizes things by making the dialplan applications/functions that manipulate CDRs do so over Stasis. ForkCDR, NoCDR, ResetCDR, CDR, and CDR_PROP now all use Stasis to send their requests over to the CDR engine, and synchronize on the channel Stasis topic via a subscription so that they return their values/control to the dialplan at the appropriate time. While going through this, the following changes were also made: * DISA, which can reset the CDR when a user successfully authenticates, now just uses the ResetCDR app to do this. This prevents having to duplicate the same Stasis synchronization logic in that application. * Answer no longer disables CDRs. It actually didn't work anyway - calling DISABLE on the channel's CDR doesn't stop the CDR from getting the Answer time - it just kills all CDRs on that channel, which isn't what the caller would intend. (closes issue ASTERISK-22884) (closes issue ASTERISK-22886) Review: https://reviewboard.asterisk.org/r/3057/ ........ Merged revisions 404294 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-19 00:32 +0000 [r404293] Damien Wedhorn * /, channels/chan_skinny.c: Fixup skinny registration following network issues. On session registration, if device is already reporting that it is connected to a device, an innocuous packet (update time) is sent to the already connected device. If the tcp connection is down, the device will be unregistered and the new connection allowed. Without this patch, network issues can see a situation where a device can not reregister until after 3*timeout. ........ Merged revisions 404292 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 23:00 +0000 [r404280] Jason Parker * main/manager.c, /: Add AMI event for presence state. Review: https://reviewboard.asterisk.org/r/3039/ ........ Merged revisions 404275 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404279 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 21:12 +0000 [r404264] Richard Mudgett * addons/ooh323c/src/ooTimer.c, /: ooh323c: Fix gcc 4.6.3 compiler warnings. ........ Merged revisions 404212 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404219 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404263 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 20:48 +0000 [r404260-404262] Kevin Harwell * channels/chan_oss.c, /: chan_oss.c: channel being locked twice and unlocked once Removed channel lock as it is now being down in ast_channel_alloc ........ Merged revisions 404261 from http://svn.asterisk.org/svn/asterisk/branches/12 * pbx/pbx_realtime.c, channels/chan_alsa.c, main/stasis_channels.c, addons/chan_mobile.c, main/bridge_channel.c, tests/test_cdr.c, channels/chan_pjsip.c, res/parking/parking_manager.c, channels/chan_mgcp.c, channels/chan_unistim.c, main/pbx.c, funcs/func_timeout.c, /, apps/app_meetme.c, main/bridge.c, tests/test_stasis_channels.c, include/asterisk/channel.h, channels/chan_gtalk.c, channels/sig_pri.c, apps/app_queue.c, main/cel.c, main/stasis_bridges.c, channels/chan_jingle.c, channels/chan_phone.c, channels/chan_dahdi.c, main/dial.c, channels/sig_analog.c, include/asterisk/stasis_channels.h, res/res_agi.c, channels/chan_motif.c, tests/test_cel.c, apps/app_confbridge.c, res/res_stasis.c, res/res_pjsip_refer.c, apps/app_voicemail.c, apps/app_dial.c, channels/chan_vpb.cc, addons/chan_ooh323.c, main/pickup.c, include/asterisk/aoc.h, include/asterisk/stasis_bridges.h, apps/app_userevent.c, apps/app_disa.c, channels/chan_console.c, include/asterisk/channelstate.h, main/core_local.c, channels/chan_iax2.c, main/endpoints.c, channels/chan_oss.c, res/parking/parking_bridge_features.c, apps/app_agent_pool.c, main/channel.c, channels/chan_misdn.c, channels/chan_skinny.c: channel locking: Add locking for channel snapshot creation Original commit message by mmichelson (asterisk 12 r403311): "This adds channel locks around calls to create channel snapshots as well as other functions which operate on a channel and then end up creating a channel snapshot. Functions that expect the channel to be locked prior to being called have had their documentation updated to indicate such." The above was initially committed and then reverted at r403398. The problem was found to be in core_local.c in the publish_local_bridge_message function. The ast_unreal_lock_all function locks and adds a reference to the returned channels and while they were being unlocked they were not being unreffed when no longer needed. Fixed by unreffing the channels. Also in bridge.c a lock was obtained on "other->chan", but then an attempt was made to unlock "other" and not the previously locked channel. Fixed by unlocking "other->chan" (closes issue ASTERISK-22709) Reported by: John Bigelow ........ Merged revisions 404237 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 19:36 +0000 [r404211] Alexandr Anikin * addons/chan_ooh323.c, configs/ooh323.conf.sample: Introduce new config option 'aniasdni'. If yes then asterisk set dialed number as own id back to the caller on incoming h.323 calls. Option can be set globally or per user section. (closes issue ASTERISK-22020) Reported by: Ross Beer 2013-12-18 19:28 +0000 [r404210] Joshua Colp * channels/chan_mgcp.c, main/pbx.c, channels/chan_sip.c, apps/confbridge/conf_chan_record.c, tests/test_app.c, tests/test_stasis_channels.c, main/core_unreal.c, include/asterisk/channel.h, channels/chan_console.c, channels/chan_oss.c, channels/chan_jingle.c, channels/chan_misdn.c, channels/chan_h323.c, tests/test_cel.c, channels/chan_nbs.c, channels/chan_pjsip.c, res/res_calendar.c, apps/app_voicemail.c, channels/chan_unistim.c, tests/test_substitution.c, channels/chan_vpb.cc, addons/chan_ooh323.c, channels/chan_multicast_rtp.c, /, apps/app_meetme.c, res/res_stasis_snoop.c, channels/chan_gtalk.c, channels/chan_iax2.c, main/channel.c, channels/chan_dahdi.c, channels/chan_phone.c, channels/chan_skinny.c, res/parking/parking_tests.c, channels/chan_motif.c, tests/test_voicemail_api.c, channels/chan_alsa.c, main/message.c, addons/chan_mobile.c, tests/test_cdr.c: channels: Return allocated channels locked. This change makes ast_channel_alloc return allocated channels locked. By doing so no other thread can acquire, lock, and manipulate the channel before it is completely set up. (closes issue AST-1256) Review: https://reviewboard.asterisk.org/r/3067/ ........ Merged revisions 404204 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 19:10 +0000 [r404198] Alexandr Anikin * addons/chan_ooh323.c: Implement module reload command for chan_ooh323 (close issue ASTERISK-22817) Patches: ooh323_module_reload.patch 2013-12-18 12:46 +0000 [r404185] Matthew Jordan * rest-api/api-docs/applications.json, rest-api/api-docs/playbacks.json, rest-api/api-docs/channels.json, rest-api/api-docs/sounds.json, rest-api/resources.json, 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/events.json, /, rest-api/api-docs/asterisk.json: ari: Bump the version of ARI to 1.0.0 (closes issue ASTERISK-23007) ........ Merged revisions 404184 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 12:01 +0000 [r404138] Joshua Colp * res/res_calendar.c, /: res_calendar: Protect channel when adding datastore. This change adds a missing channel lock when adding a datastore to a channel. ........ Merged revisions 404135 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404136 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404137 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 00:36 +0000 [r404100] Rusty Newton * /, funcs/func_strings.c: func_strings: Documentation fix for QUOTE() Example output was inaccurate. (issue ASTERISK-22970) (closes issue ASTERISK-22970) Reported by: Gareth Palmer Patches: func_strings.patch uploaded by Gareth Palmer (license 5169) ........ Merged revisions 404081 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 404087 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 404099 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-18 00:17 +0000 [r404051] Matthew Jordan * /, LICENSE: LICENSE: Update language to include ARI ........ Merged revisions 404050 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 23:57 +0000 [r404049] Jonathan Rose * /, tests/test_cel.c, tests/test_cdr.c: tests: fix ast_bridge_base_new calls not using the additional arguments r404042 gave ast_bridge_base_new two new arguments for setting a bridge creator and name. Unfortunately since a couple test modules aren't compiled by default, I missed the fact that this change impacted those tests and caused compilation failures against them. ........ Merged revisions 404048 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 23:38 +0000 [r404047] Rusty Newton * include/asterisk/test.h, main/channel.c, main/rtp_engine.c, /, channels/chan_iax2.c, apps/app_chanspy.c, apps/app_mixmonitor.c: Several components: fixing Typos in comments and code, "avaliable" instead of "available" (issue ASTERISK-23021) (closes issue ASTERISK-23021) Reported by: Jeremy Lainé Tested by: Rusty Newton Patches: available.patch uploaded by Jeremy Lainé (license 6561) ........ Merged revisions 404046 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 23:25 +0000 [r404043] Jonathan Rose * apps/app_bridgewait.c, res/ari/ari_model_validators.c, doc/appdocsxml.xslt, main/stasis_bridges.c, rest-api/api-docs/bridges.json, res/ari/resource_bridges.c, apps/app_agent_pool.c, res/parking/parking_bridge.c, res/ari/ari_model_validators.h, main/manager_bridges.c, res/ari/resource_bridges.h, include/asterisk/bridge_internal.h, apps/app_confbridge.c, res/res_stasis.c, include/asterisk/bridge.h, res/res_ari_bridges.c, /, main/bridge.c, main/bridge_basic.c, include/asterisk/stasis_bridges.h, include/asterisk/stasis_app.h: bridging: Give bridges a name and a known creator Bridges have two new optional properties, a creator and a name. Certain consumers of bridges will automatically provide bridges that they create with these properties. Examples include app_bridgewait, res_parking, app_confbridge, and app_agent_pool. In addition, a name may now be provided as an argument to the POST function for creating new bridges via ARI. (closes issue AFS-47) Review: https://reviewboard.asterisk.org/r/3070/ ........ Merged revisions 404042 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 18:35 +0000 [r404028-404030] Joshua Colp * res/res_sorcery_config.c, /: res_sorcery_config: Output an error message when an object can't be created. If object creation fails an error message will now be output with the id, type, and configuration file. ........ Merged revisions 404029 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/framehook.c: framehooks: Re-iterate if framehook provides different frame. Framehooks can be used in a reactive manner to execute specific logic when a frame is received with a certain type and payload. Since it is possible for framehooks to provide frames it was possible for this reactive framehook to be unaware of frames it is looking for. This change makes it so that when framehooks return a modified frame the code will now re-iterate (from the beginning) and call any previous framehooks that have not provided a modified frame themselves. Review: https://reviewboard.asterisk.org/r/3046/ ........ Merged revisions 404027 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 14:41 +0000 [r404008-404009] David M. Lee * /, configs/asterisk.conf.sample, main/asterisk.c: Changed the default for live_dangerously to no ........ Merged revisions 404006 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/pjsip, /: Setting svn:ignore ........ Merged revisions 403748 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-17 12:59 +0000 [r403994] Matthew Jordan * /, res/ari/resource_channels.c: ari/resource_channels: When creating a channel, specify a default format (SLIN) When creating channels via ARI, the current code fails to provide any default format capabilities. For non-virtual channels this isn't really a problem - the channels typically receive their capabilities as a result of the underlying channel driver configuration. For virtual channels (such as Local channels), the lack of any format capabilities causes the Asterisk core to make some 'odd' choices with respect to the translation paths. The issue reporter had some paths that had 3 hops on each channel leg, causing multiple transcodings and some really crappy audio/performance. By specifying a baseline of SLIN, we prevent that from occurring. Note that this is what AMI does when it performs an Originate, as does res_clioriginate. Review: https://reviewboard.asterisk.org/r/3068/ (issue ASTERISK-22962) Reported by: Matt DiMeo ........ Merged revisions 403993 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-16 19:11 +0000 [r403960] David M. Lee * include/asterisk/pbx.h, main/asterisk.c, funcs/func_realtime.c, main/pbx.c, main/tcptls.c, funcs/func_db.c, /, README-SERIOUSLY.bestpractices.txt, configs/asterisk.conf.sample, funcs/func_shell.c, funcs/func_env.c, funcs/func_lock.c, UPGRADE-12.txt: security: Inhibit execution of privilege escalating functions This patch allows individual dialplan functions to be marked as 'dangerous', to inhibit their execution from external sources. A 'dangerous' function is one which results in a privilege escalation. For example, if one were to read the channel variable SHELL(rm -rf /) Bad Things(TM) could happen; even if the external source has only read permissions. Execution from external sources may be enabled by setting 'live_dangerously' to 'yes' in the [options] section of asterisk.conf. Although doing so is not recommended. Also, the ABI was changed to something more reasonable, since Asterisk 12 does not yet have a public release. (closes issue ASTERISK-22905) Review: http://reviewboard.digium.internal/r/432/ ........ Merged revisions 403913 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 403917 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403959 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-16 18:31 +0000 [r403958] Jonathan Rose * /, main/bridge.c: transfers: Fix bug setting both BLINDTRANSFER and ATTENDEDTRANSFER The ast_bridge_set_transfer_variables function is supposed to wipe whichever variable isn't being set. Instead it was setting both to the new value. Oops. (issue AFS-24) ........ Merged revisions 403957 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-16 16:12 +0000 [r403857-403865] Scott Griepentrog * main/pbx.c, /: pbx.c: put copy of ast_exten.data on stack to prevent memory corruption During dialplan execution in pbx_extension_helper(), the contexts global read lock prevents link list corruption, but was released with a pointer to the ast_exten and data later used in variable substitution. Instead, this patch removes pbx_substitute_variables() and locates a copy of the ast_exten data on the stack before releasing the lock, where ast_exten could get free'd by another thread performing a module reload. (issue AST-1179) Reported by: Thomas Arimont (issue AST-1246) Reported by: Alexander Hömig Review: https://reviewboard.asterisk.org/r/3055/ ........ Merged revisions 403862 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 403863 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403864 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_sms.c: app_sms: BufferOverflow when receiving odd length 16 bit message This patch prevents an infinite loop overwriting memory when a message is received into the unpacksms16() function, where the length of the message is an odd number of bytes. (closes issue ASTERISK-22590) Reported by: Jan Juergens Tested by: Jan Juergens ........ Merged revisions 403856 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-15 01:39 +0000 [r403824] Matthew Jordan * channels/pjsip/dialplan_functions.c, /: pjsip/dialplan_functions: Use the right buffer length when printing URIs While entertaining, sizeof(buflen) is not the same as buflen. Doh. ........ Merged revisions 403823 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-14 17:28 +0000 [r403810-403812] Joshua Colp * include/asterisk/res_pjsip.h, /, res/res_pjsip/location.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c: res_pjsip: Apply outbound proxy to all SIP requests. Objects which are involved in SIP request creation and sending now allow an outbound proxy to be specified. For cases where an endpoint is used the outbound proxy specified there will be applied. (closes issue ASTERISK-22673) Reported by: Antti Yrjola Review: https://reviewboard.asterisk.org/r/3022/ ........ Merged revisions 403811 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_channels.c, apps/app_queue.c, res/ari/ari_model_validators.c, apps/app_dial.c, res/ari/ari_model_validators.h, main/dial.c, include/asterisk/stasis_channels.h, rest-api/api-docs/events.json, /, res/stasis/app.c: res_stasis: Expose event for call forwarding and follow forwarded channel. This change adds an event for when an originated call is redirected to another target. This event contains the original channel and the newly created channel. If a stasis subscription exists on the original originated channel for a stasis application then a new subscription will also be created on the stasis application to the redirected channel. This allows the application to follow the call path completely. (closes issue ASTERISK-22719) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/3054/ ........ Merged revisions 403808 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 21:35 +0000 [r403797] Jonathan Rose * /, res/res_pjsip_messaging.c, main/message.c: documentation: Add PJSIP technology to messaging documentation ........ Merged revisions 403796 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 20:17 +0000 [r403784] Richard Mudgett * /, main/test.c: test.c: Fix too sticky unit test failed status. Rerunning a failed unit test after loading any required modules should allow the test to report a pass status if it now passes. ........ Merged revisions 403782 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 20:13 +0000 [r403783] Jonathan Rose * /, main/bridge.c, main/bridge_basic.c, include/asterisk/bridge.h, res/parking/parking_bridge_features.c, res/parking/parking_manager.c: Transfers: Make Asterisk set ATTENDEDTRANSFER/BLINDTRANSFER more reliably There were still a few cases in which ATTENDEDTRANSFER and BLINDTRANSFER wouldn't be set on channels involved with blind and attended transfers. This would happen with features that were initialized by channel driver specific mechanisms in multiparty calls. This patch resolves those cases while attempted to keep the behavior for setting those variables as consistent as possible. (closes issue AFS-24) Review: https://reviewboard.asterisk.org/r/3040/ ........ Merged revisions 403781 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 18:33 +0000 [r403750-403768] Kevin Harwell * main/channel.c, /, channels/chan_sip.c, include/asterisk/channel.h, bridges/bridge_native_rtp.c, channels/chan_pjsip.c: bridge_native_rtp: Deadlock during 4-way conference creation The change contains a slightly adjusted patch that was on the issue (submitted by kmoore). A fix was made by adding in a bridge lock while calling bridge_start/stop from the framehook callback. Since the framehook callback is not called from the bridging core the bridge is not locked, but needs to be before calling bridge_start. (closes issue ASTERISK-22749) Reported by: Kinsey Moore Review: https://reviewboard.asterisk.org/r/3066/ Patches: lock_inversion.diff uploaded by kmoore (license 6273) ........ Merged revisions 403767 from http://svn.asterisk.org/svn/asterisk/branches/12 * rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, /, main/http.c: ARI: Allow specifying channel variables during a POST /channels Added the ability to specify channel variables when creating/originating a channel in ARI. The variables are sent in the body of the request and should be formatted as a single level JSON object. No nested objects allowed. For example: {"variable1": "foo", "variable2": "bar"}. (closes issue ASTERISK-22872) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3052/ ........ Merged revisions 403752 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_answer.c, rest-api/api-docs/bridges.json, res/ari/resource_bridges.c, res/res_ari_bridges.c, res/stasis/command.c, res/res_stasis_playback.c, /, res/stasis/control.c, res/stasis/command.h, include/asterisk/stasis_app.h, include/asterisk/stasis_app_impl.h, res/res_stasis_recording.c: ARI: Adding a channel to a bridge while a live recording is active blocks Added the ability to have rules that are checked when adding and/or removing channels to/from a bridge. In this case, if a channel is currently recording and someone attempts to add it to a bridge an "is recording" rule is checked, fails, and a 409 conflict is returned. Also command functions now return an integer value that can be descriptive of what kind of problems, if any, occurred before or during execution. (closes issue ASTERISK-22624) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2947/ ........ Merged revisions 403749 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 05:00 +0000 [r403737] Matthew Jordan * /, channels/Makefile: channels/Makefile: clean pjsip directory ........ Merged revisions 403736 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-13 00:40 +0000 [r403726] Richard Mudgett * include/asterisk/app.h, tests/test_voicemail_api.c, main/app.c: test_voicemail_api: Add check for a registered voicemail provider before tests. It is much nicer diagnosing a test failure if app_voicemail is actually loaded. 2013-12-12 19:46 +0000 [r403714] Scott Griepentrog * contrib/ast-db-manage/config/versions/581a4264e537_adding_extensions.py (added), /: realtime: Create extensions in alembic ast-db-manage contribution When the alembic scripts were written for creating Asterisk realtime databases the extensions table for dialplan wasn't included. This update creates the extensions table. (closes issue ASTERISK-22815) Reported by: Zone Conkle Review: https://reviewboard.asterisk.org/r/3064/ ........ Merged revisions 403713 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-12 19:18 +0000 [r403707] Jonathan Rose * /, channels/chan_pjsip.c: chan_pjsip: Revert r403587 This patch was intended to eliminate a deadlock that occurs when masquerades occur in pjsip channels, but has some potential side effects. Mark Michelson is currently working on addressing this problem from another angle. (issue ASTERISK-22936) Reported by: Jonathan Rose ........ Merged revisions 403705 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-11 20:24 +0000 [r403687] Kevin Harwell * include/asterisk/res_pjsip.h, res/res_pjsip/config_global.c, /, configs/pjsip.conf.sample, res/res_pjsip/pjsip_configuration.c, res/res_pjsip_messaging.c, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip.c: res_pjsip_messaging: send message to a default outbound endpoint In some cases messages need to be sent to a direct URI (sip:). This patch adds in that support by using a default outbound endpoint. When sending messages, if no endpoint can be found then the default one is used. To facilitate this a new default_outbound_endpoint option was added to the globals section for pjsip.conf. Review: https://reviewboard.asterisk.org/r/2944/ ........ Merged revisions 403680 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-11 19:22 +0000 [r403652] Russell Bryant * /, channels/chan_sip.c: Reset peer outboundproxy on sip.conf reload If you set a peer's outboundproxy and then removed it from the config, this would not get picked up in a config reload. This patch fixes that by resetting it in set_peer_defaults(). Closes ASTERISK-19454 Review: https://reviewboard.asterisk.org/r/3065/ ........ Merged revisions 403634 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 403635 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403639 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-11 19:19 +0000 [r403643] Richard Mudgett * apps/app_voicemail.c, include/asterisk/app.h, include/asterisk/doxyref.h, main/app.c: app_voicemail: Voicemail callback registration/unregistration function improvements. * The voicemail registration/unregistration functions now take a struct of callbacks instead of a lengthy parameter list of callbacks. * The voicemail registration/unregistration functions now prevent a competing module from interfering with an already registered callback supplying module. 2013-12-11 13:06 +0000 [r403617-403619] Matthew Jordan * channels/pjsip/dialplan_functions.c, include/asterisk/res_pjsip_session.h, channels/pjsip (added), /, funcs/func_channel.c, channels/pjsip/include, channels/pjsip/include/dialplan_functions.h, res/res_pjsip_t38.c, channels/pjsip/include/chan_pjsip.h, channels/Makefile, channels/chan_pjsip.c, main/xmldoc.c: func_channel, chan_pjsip: Add CHANNEL read function support for chan_pjsip This patch adds CHANNEL read support for chan_pjsip. This allows the dialplan to use the CHANNEL function on a chan_pjsip channel to obtain run-time information about the channel from the PJSIP channel driver and the PJSIP stack. This includes: * RTP information, including source/destination media addresses, whether or not the media is secure, held, and other properties. * RTCP information. This includes sets of parseable information, as well as individual statistic attriutes. * PJSIP information. This includes URIs, local/remote signalling addresses, whether or not the signalling is secure, and other properties. * The endpoint name. This can be used in conjunction with the PJSIP_ENDPOINT function to obtain more detailed endpoint information. Review: https://reviewboard.asterisk.org/r/3038/ ........ Merged revisions 403618 from http://svn.asterisk.org/svn/asterisk/branches/12 * Makefile, funcs/func_pjsip_endpoint.c (added), doc/snapshots.xslt (removed), /, doc/appdocsxml.xslt (added), doc/appdocsxml.dtd, main/sorcery.c: func_pjsip_endpoint: Add PJSIP_ENDPOINT function for querying endpoint details This patch adds a new function, PJSIP_ENDPOINT, which lets the dialplan query, for any endpoint, any property configured on an endpoint. This function is a companion to the CHANNEL function, which can be used to extract the endpoint name for a channel. Review: https://reviewboard.asterisk.org/r/3035 ........ Merged revisions 403616 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-10 15:15 +0000 [r403605] Mark Michelson * res/res_pjsip_authenticator_digest.c: Fix correct authentication behavior for artificial endpoint. When switching to using a vector for authentication, I initialized the vector for the artificial endpoint to be of size 1. However, this does not result in AST_VECTOR_SIZE() returning 1 since there isn't actually anything in the vector. Rather than trifle with the vector by putting unnecessary elements in, I simply changed the callback in res_pjsip_authenticator_digest.c to explicitly report that the artificial endpoint requires authentication. Thanks to Joshua Colp for pointing this out. 2013-12-09 22:59 +0000 [r403576-403588] Jonathan Rose * /, channels/chan_pjsip.c: chan_pjsip: Fix a sticking channel lock caused by channel masquerades (closes issue ASTERISK-22936) Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/3042/ ........ Merged revisions 403587 from http://svn.asterisk.org/svn/asterisk/branches/12 * CHANGES, main/dial.c, apps/app_page.c, include/asterisk/dial.h: app_page: Add predial handlers for app_page. (closes issue AFS-14) Review: https://reviewboard.asterisk.org/r/3045/ 2013-12-09 19:24 +0000 [r403544-403560] Richard Mudgett * /, res/res_sorcery_astdb.c: Reverting regex part of -r403545 at request of file. res_sorcery_astdb.c: Fix get multiple records by regex. * Fix sorcery_astdb_retrieve_regex() pattern matching. Let the regexec() function match the stored key values instead of having astdb prefilter them. Previoiusly you could only use a simple regex pattern when the pattern began with '^'. ........ Merged revisions 403559 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_sorcery_astdb.c: res_sorcery_astdb.c: Fix get multiple records by regex. * Fix sorcery_astdb_retrieve_regex() pattern matching. Let the regexec() function match the stored key values instead of having astdb prefilter them. Previoiusly you could only use a simple regex pattern when the pattern began with '^'. * Fix off nominal memory leak in sorcery_astdb_retrieve_regex(). ........ Merged revisions 403545 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/sorcery.c, /: sorcery: Eliminate shadowing a varaible that caused confusion. * Eliminated shadowing of the __ast_sorcery_apply_config() name parameter causing confusion. * Fix potential crash from sorcery.conf user input in __ast_sorcery_apply_config() if the user supplied a malformed config line that is missing the sorcery object type name. * Remove redundant test in __ast_sorcery_apply_config(). !config and config == CONFIGS_STATUS_FILEMISSING are identical. ........ Merged revisions 403541 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-09 18:32 +0000 [r403543] Joshua Colp * /, main/endpoints.c: endpoints: Keep a reference to channel ids when creating snapshot. The snapshot process for endpoints uses the channel ids present on the endpoint itself. Without keeping a reference it was possible for the strings to be freed underneath any consumer of an endpoint snapshot. A reference is now held by the snapshot to the channel ids and released when the snapshot is destroyed. (issue ASTERISK-22801) Reported by: Matt Jordan ........ Merged revisions 403542 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-09 18:14 +0000 [r403528] Richard Mudgett * main/sorcery.c, /: sorcery: Whitespace You would think that a new file would start off without any whitespace oddities. ........ Merged revisions 403527 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-09 17:29 +0000 [r403512-403526] Mark Michelson * apps/app_confbridge.c, CHANGES, apps/confbridge/conf_state_multi_marked.c: Add a CONFBRIDGE_RESULT channel variable to discern why a channel left a ConfBridge. Review: https://reviewboard.asterisk.org/r/3009 * CHANGES, apps/app_mixmonitor.c: Create function for retrieving Mixmonitor instance data. For the time, this is only useful for retrieving the filename. The purpose of this function is to better facilitate multiple mixmonitors per channel. Setting a MIXMONITOR_FILENAME channel variable is not conducive to such behavior, so allowing finer grained access to individual mixmonitor properties improves the situation. The MIXMONITOR_FILENAME channel variable is still set, though, so there is no worry about backwards compatibility. Review: https://reviewboard.asterisk.org/r/3023 2013-12-09 16:41 +0000 [r403511] Joshua Colp * res/res_pjsip_nat.c, /: res_pjsip_nat: Add NAT module to session dialogs. Due to the way pjproject internally works it was possible for the NAT module to not be invoked on messages with-in a session dialog. This means that the various parts of the message would not get rewritten with the source IP address and port. This change uses a session supplement to add the NAT module to the dialog on the first incoming or outgoing INVITE. (closes issue ASTERISK-22941) Reported by: Leif Madsen ........ Merged revisions 403510 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-09 16:10 +0000 [r403499] Mark Michelson * res/res_pjsip/config_auth.c, res/res_pjsip_outbound_authenticator_digest.c, res/res_pjsip_authenticator_digest.c, res/res_pjsip_outbound_registration.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip/pjsip_distributor.c, res/res_pjsip.c, include/asterisk/res_pjsip.h: Switch PJSIP auth to use a vector. Since Asterisk has a vector API now, places where arrays are manually resized don't really make sense any more. Since the auth work in PJSIP was freshly-written, it was easy to reform it to use a vector. Review: https://reviewboard.asterisk.org/r/3044 2013-12-09 03:21 +0000 [r403436-403466] Matthew Jordan * /, res/res_fax_spandsp.c: res_fax_spandsp: Always init T.38 session to avoid crashes during state change Prior to this patch, res_fax_spandsp was conservative with how it initialized the spandsp T.38 context. It would only initialize it if the driver thought the current state was a T.38 fax. While this works fine in nominal situations, in certain off nominal situations, res_fax_spandsp can believe that a T.38 fax will not occur when in fact one has started. In particular, this was discovered when res_fax would fall back to audio after timing out on a T.38 upgrade. The SIP channel driver would continue to retry the re-INVITE and - if the remote end responded after res_fax timed out with a 200 OK - a T.38 frame would be delivered to the res_fax stack when it no longer expected it. As it turns out, there does not appear to be any downside to always initializing the T.38 context, other than the actual memory allocation. Since that avoids this off nominal situation (and others which are equally likely hard to predict), this is the safest way to avoid this problem. Much thanks to Torrey as well for providing a scenario that reproduces this issue. (closes issue ASTERISK-21242) Reported by: Ashley Winters Tested by: Torrey Searle patches: always-init-t38.patch uploaded by awinters (License 6477) A_PARTY.xml uploaded by tsearle (License 5334) ........ Merged revisions 403449 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 403450 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403458 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_config_sqlite.c: res_config_sqlite: Check for CDR unregistration failures If the CDR unregistration fails due to an inflight CDR, the res_config_sqlite module needs to bail on unloading itself. Otherwise, the config could be unloaded (including the CDR table name) while the CDR engine posts a CDR to the still registered backend, resulting in a crash. ........ Merged revisions 403435 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-05 23:40 +0000 [r403414] Jonathan Rose * apps/app_record.c: app_record: Add an option that allows DTMF '0' to act as an additional terminator Using this terminator when active results in ${RECORD_STATUS} being set to 'OPERATOR' instead of 'DTMF' (closes issue AFS-7) Review: https://reviewboard.asterisk.org/r/3041/ 2013-12-05 22:10 +0000 [r403402-403404] David M. Lee * addons/chan_mobile.c, main/bridge_channel.c, tests/test_cdr.c, channels/chan_pjsip.c, res/parking/parking_manager.c, channels/chan_mgcp.c, channels/chan_unistim.c, main/pbx.c, /, apps/app_meetme.c, funcs/func_timeout.c, main/bridge.c, tests/test_stasis_channels.c, main/core_unreal.c, include/asterisk/channel.h, channels/chan_gtalk.c, main/cel.c, apps/app_queue.c, channels/sig_pri.c, main/stasis_bridges.c, channels/chan_jingle.c, channels/chan_phone.c, channels/chan_dahdi.c, main/dial.c, channels/sig_analog.c, include/asterisk/stasis_channels.h, res/res_agi.c, channels/chan_motif.c, channels/chan_h323.c, tests/test_cel.c, apps/app_confbridge.c, res/res_stasis.c, res/res_pjsip_refer.c, apps/app_voicemail.c, apps/app_dial.c, channels/chan_vpb.cc, addons/chan_ooh323.c, channels/chan_sip.c, main/pickup.c, include/asterisk/aoc.h, include/asterisk/stasis_bridges.h, apps/app_userevent.c, apps/app_disa.c, main/core_local.c, include/asterisk/channelstate.h, channels/chan_console.c, channels/chan_iax2.c, main/endpoints.c, channels/chan_oss.c, res/parking/parking_bridge_features.c, apps/app_agent_pool.c, main/channel.c, channels/chan_misdn.c, channels/chan_skinny.c, pbx/pbx_realtime.c, channels/chan_alsa.c, main/stasis_channels.c, channels/chan_nbs.c: Reverting r403311. It's causing ARI tests to hang. ........ Merged revisions 403398 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/stasis/control.c: ari: Fix deadlock problem with functions that use autoservice. The code for getting channel variables from ARI assumed that you needed to lock the channel in order to properly execute functions and read channel variables. Apparently, this is not the case, since any dialplan function that puts the channel into autoservice deadlocks when attempting to remove the channel from autoservice. ........ Merged revisions 403342 from http://svn.asterisk.org/svn/asterisk/branches/12 * /: Multiple revisions 403304,403310 ........ r403304 | dlee | 2013-12-02 12:34:50 -0600 (Mon, 02 Dec 2013) | 1 line Fixed the filename for the ari.conf docs ........ r403310 | file | 2013-12-03 10:32:12 -0600 (Tue, 03 Dec 2013) | 5 lines Revert revision 403304: Fixed the filename for the ari.conf docs The changed value refers to the name of the module. The name of the configuration file is specified in the configFile section. ........ Merged revisions 403304,403310 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-04 21:42 +0000 [r403378] Kevin Harwell * /, res/res_pjsip_registrar.c: res_pjsip_registrar: undefined function pointer symbol Used a static wrapper around the offending function to alleviate the issue. Reported by: rmudgett ........ Merged revisions 403377 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-04 20:54 +0000 [r403365] Joshua Colp * res/res_pjsip_t38.c, /: res_pjsip_t38: Don't pass T.38 control frames through to other hooks. This crept up during gateway testing where the gateway would receive the request to negotiate and assume it came from the remote side, causing the gateway state machine to go a little, to a use a technical term, "wonky". ........ Merged revisions 403364 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-04 18:41 +0000 [r403350] Mark Michelson * /, res/res_pjsip.c: Initialize the hash value argument to pj_hash_get() to 0. Passing a non-zero value causes PJLIB to use the given input as the hash value. Passing zero causes the parameter to become an output parameter that receives the hash value that was computed based on the given key. This change essentially makes ast_sip_dict_get() properly retrieve the desired value. ........ Merged revisions 403349 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-03 18:01 +0000 [r403330] Joshua Colp * /, configure, include/asterisk/autoconfig.h.in, configure.ac, res/res_pjsip_session.c: res_pjsip_session: Add support for PJMEDIA_SDP_NEG_ALLOW_MEDIA_CHANGE flag. Newer versions of PJSIP have changed to using a flag for the PJMEDIA_SDP_NEG_ALLOW_MEDIA_CHANGE instead of a define. This adds a configure check to detect the presence of the flag and use it if found. ........ Merged revisions 403329 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-03 17:35 +0000 [r403327] Richard Mudgett * include/asterisk/sorcery.h, res/res_pjsip/pjsip_configuration.c, res/res_pjsip_registrar_expire.c, res/res_pjsip/pjsip_options.c, tests/test_sorcery.c, include/asterisk/bucket.h, main/sorcery.c, /, main/bucket.c: sorcery, bucket: Change observer remove calls to take const callbacks struct. * Make ast_sorcery_observer_remove() accept a const callbacks struct. * Make ast_sorcery_observer_remove() tolerant of the sorcery parameter being NULL. Now it can be called within a module unload routine if the sorcery initialization fails. * Fix ast_sorcery_observer_add() to fail if the container link fails. ........ Merged revisions 403324 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-03 17:07 +0000 [r403314] Mark Michelson * channels/chan_nbs.c, main/bridge_channel.c, res/res_stasis.c, channels/chan_pjsip.c, res/parking/parking_manager.c, apps/app_voicemail.c, channels/chan_unistim.c, channels/chan_vpb.cc, addons/chan_ooh323.c, /, include/asterisk/aoc.h, apps/app_meetme.c, main/bridge.c, apps/app_userevent.c, channels/chan_gtalk.c, channels/chan_iax2.c, main/endpoints.c, main/stasis_bridges.c, main/channel.c, channels/chan_phone.c, channels/chan_dahdi.c, main/dial.c, channels/sig_analog.c, channels/chan_skinny.c, res/res_agi.c, channels/chan_motif.c, pbx/pbx_realtime.c, channels/chan_alsa.c, main/stasis_channels.c, apps/app_confbridge.c, addons/chan_mobile.c, tests/test_cdr.c, res/res_pjsip_refer.c, channels/chan_mgcp.c, apps/app_dial.c, main/pbx.c, channels/chan_sip.c, main/pickup.c, funcs/func_timeout.c, tests/test_stasis_channels.c, main/core_unreal.c, include/asterisk/stasis_bridges.h, apps/app_disa.c, include/asterisk/channel.h, main/core_local.c, include/asterisk/channelstate.h, channels/chan_console.c, main/cel.c, apps/app_queue.c, channels/sig_pri.c, channels/chan_oss.c, res/parking/parking_bridge_features.c, apps/app_agent_pool.c, channels/chan_jingle.c, channels/chan_misdn.c, include/asterisk/stasis_channels.h, channels/chan_h323.c, tests/test_cel.c: Add channel locking for channel snapshot creation. This adds channel locks around calls to create channel snapshots as well as other functions which operate on a channel and then end up creating a channel snapshot. Functions that expect the channel to be locked prior to being called have had their documentation updated to indicate such. ........ Merged revisions 403311 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-03 16:39 +0000 [r403313] Joshua Colp * main/media_index.c, /: media_index: Make media indexing tolerable of bad symlinks. Media indexing will now skip over files and directories that stat will not return information about. This can occur under normal conditions when a symbolic link points to a location that no longer exists. ........ Merged revisions 403312 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-02 18:12 +0000 [r403292] Alexandr Anikin * addons/chan_ooh323.c, /: Check and reject non-digits e164 values on peers and general sections in ooh323.conf Regenerate e164 endpoint list on reload ooh323 (issue ASTERISK-22901) Reported by: Cyril CONSTANTIN Patches: ASTERISK-22901.patch ........ Merged revisions 403288 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403290 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-12-01 21:13 +0000 [r403257-403272] Joshua Colp * /, res/res_pjsip_session.c: res_pjsip_session: Apply fromuser and fromdomain to all requests as documented. ........ Merged revisions 403271 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_t38.c, /: res_pjsip_t38: Add the framehook to the channel only on first INVITE. The check for determining whether the T.38 framehook should be added to the channel or not has now been changed to guarantee adding only occurs on the first incoming or outgoing INVITE. ........ Merged revisions 403258 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip/security_events.c, res/res_pjsip/pjsip_options.c, res/res_pjsip.c, res/res_pjsip_transport_websocket.c, include/asterisk/res_pjsip.h, /, res/res_pjsip/location.c: res_pjsip_transport_websocket: Fix security events and simplify implementation. Transport type determination for security events has been simplified to use the type present on the message itself instead of searching through configured transports to find the transport used. The actual WebSocket transport has also been simplified. It now leverages the existing PJSIP transport manager for finding the active WebSocket transport for outgoing messages. This removes the need for res_pjsip_transport_websocket to store a mapping itself. (closes issue ASTERISK-22897) Reported by: Max E. Reyes Vera J. Review: https://reviewboard.asterisk.org/r/3036/ ........ Merged revisions 403256 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-30 14:12 +0000 [r403241] Joshua Colp * res/ari/ari_model_validators.h, rest-api/api-docs/events.json, /, res/ari/ari_model_validators.c: res_ari: Add Recording events to the validator. ........ Merged revisions 403240 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-28 02:12 +0000 [r403208-403224] Joshua Colp * res/res_pjsip_sdp_rtp.c, /: res_pjsip_sdp_rtp: Don't produce an invalid media stream with no formats. Depending on configuration it was possible for a media stream to be created without any media formats. The produced SDP would fail internal validation and cause a crash. The code will now no longer add media streams with no formats to the SDP, allowing it to pass validation and work. (closes issue ASTERISK-22858) Reported by: Anthony Messina ........ Merged revisions 403223 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_header_funcs.c, /: res_pjsip_header_funcs: Don't add headers to re-INVITEs. When sending a re-INVITE to an endpoint it was possible for received headers to be added as well (since they are stored for retrieval using the PJSIP_HEADER dialplan function). This caused a broken (and potentially large) SIP INVITE to be produced and sent. This changes the module so it will no longer add headers to re-INVITEs. (closes issue ASTERISK-22882) Reported by: David M. Lee ........ Merged revisions 403221 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_playback.c, /: res_stasis_playback: Add 'number', 'digits', and 'characters' URI scheme implementations. This change adds new URI scheme implementations for playing numbers, digits, and characters. This is done as part of the normal playback mechanism and can be used with queueing to create a combined sentence. Review: https://reviewboard.asterisk.org/r/3028/ ........ Merged revisions 403209 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_configuration.c, res/res_pjsip.c, res/res_pjsip_session.c, include/asterisk/res_pjsip.h: res_pjsip_session: Add configurable behavior for redirects. The action taken when a redirect occurs is now configurable on a per-endpoint basis. The redirect can either be treated as a redirect to a local extension, to a URI that is dialed through the Asterisk core, or to a URI that is dialed within PJSIP itself. (closes issue ASTERISK-21710) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2963/ ........ Merged revisions 403207 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-27 17:32 +0000 [r403192] Richard Mudgett * include/asterisk/astdb.h: astdb: Tweak some doxygen comments. 2013-11-27 16:12 +0000 [r403180] Joshua Colp * /, res/res_pjsip/pjsip_configuration.c: res_pjsip: Fix crash when reloading certain configurations. Certain options available that specify a SIP URI perform validation on the provided URI using the PJSIP URI parser. This operation requires that the thread executing it be registered with the PJLIB library. During reloads this was done on a thread which was NOT registered with it. This fixes the problem by creating a task which reloads the configuration on a PJSIP thread. (closes issue ASTERISK-22923) Reported by: Anthony Messina ........ Merged revisions 403179 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-27 15:48 +0000 [r403177] David M. Lee * res/res_ari_channels.c, include/asterisk/ari.h, rest-api-templates/param_parsing.mustache, include/asterisk/http.h, res/res_ari_recordings.c, res/res_ari_endpoints.c, main/http.c, rest-api-templates/swagger_model.py, res/res_ari_playbacks.c, res/res_ari_sounds.c, rest-api-templates/asterisk_processor.py, res/res_ari_bridges.c, tests/test_ari.c, res/res_ari.c, /, res/res_ari_device_states.c, res/res_ari_asterisk.c, rest-api-templates/res_ari_resource.c.mustache, res/res_ari_applications.c: ari:Add application/json parameter support The patch allows ARI to parse request parameters from an incoming JSON request body, instead of requiring the request to come in as query parameters (which is just weird for POST and DELETE) or form parameters (which is okay, but a bit asymmetric given that all of our responses are JSON). For any operation that does _not_ have a parameter defined of type body (i.e. "paramType": "body" in the API declaration), if a request provides a request body with a Content type of "application/json", the provided JSON document is parsed and searched for parameters. The expected fields in the provided JSON document should match the query parameters defined for the operation. If the parameter has 'allowMultiple' set, then the field in the JSON document may optionally be an array of values. (closes issue ASTERISK-22685) Review: https://reviewboard.asterisk.org/r/2994/ 2013-11-27 15:31 +0000 [r403161-403174] Joshua Colp * /, res/res_pjsip/pjsip_configuration.c: res_pjsip: Update handling of some options to work with new option names. Some options (such as call_group and pickup_group) share the same configuration handler and decide what logic to use based on the name of the option. These handlers were not updated to check for the new option names and were treating the options as invalid. This change simply updates the handlers with the proper names of the options. (closes issue ASTERISK-22922) Reported by: Anthony Messina ........ Merged revisions 403173 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, configure, include/asterisk/autoconfig.h.in, configure.ac: Fix a configure issue with PJSIP transaction group lock detection. The configure check did not use the provided paths for pjproject if provided when looking for transaction group lock support. ........ Merged revisions 403160 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-23 17:48 +0000 [r403133-403135] Kevin Harwell * res/ari.make, rest-api/api-docs/applications.json, res/ari/resource_device_states.h (added), include/asterisk/stasis_app_device_state.h (added), res/ari/resource_applications.h, res/res_stasis.c, include/asterisk/devicestate.h, rest-api/api-docs/events.json, res/res_stasis_device_state.exports.in (added), res/stasis/app.c, res/res_ari_device_states.c (added), /, include/asterisk/stasis_app.h, main/devicestate.c, res/stasis/app.h, rest-api/resources.json, res/res_stasis_device_state.c (added), res/ari/ari_model_validators.c, res/ari/ari_model_validators.h, res/ari/resource_device_states.c (added), rest-api/api-docs/deviceStates.json (added), rest-api-templates/ari.make.mustache: ARI: Implement device state API Created a data model and implemented functionality for an ARI device state resource. The following operations have been added that allow a user to manipulate an ARI controlled device: Create/Change the state of an ARI controlled device PUT /deviceStates/{deviceName}&{deviceState} Retrieve all ARI controlled devices GET /deviceStates Retrieve the current state of a device GET /deviceStates/{deviceName} Destroy a device-state controlled by ARI DELETE /deviceStates/{deviceName} The ARI controlled device must begin with 'Stasis:'. An example controlled device name would be Stasis:Example. A 'DeviceStateChanged' event has also been added so that an application can subscribe and receive device change events. Any device state, ARI controlled or not, can be subscribed to. While adding the event, the underlying subscription control mechanism was refactored so that all current and future resource subscriptions would be the same. Each event resource must now register itself in order to be able to properly handle [un]subscribes. (issue ASTERISK-22838) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3025/ ........ Merged revisions 403134 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_registrar.c, main/sorcery.c, include/asterisk/res_pjsip.h, include/asterisk/acl.h, res/res_pjsip/config_auth.c, include/asterisk/utils.h, res/res_pjsip.exports.in, /, res/res_pjsip_endpoint_identifier_ip.c, main/acl.c, main/utils.c, res/res_pjsip.c, res/res_pjsip_exten_state.c, include/asterisk/res_pjsip_pubsub.h, res/res_pjsip/location.c, res/res_pjsip_outbound_registration.c, res/res_pjsip_mwi.c, res/res_pjsip/pjsip_configuration.c, include/asterisk/sorcery.h, include/asterisk/strings.h, res/res_pjsip/include/res_pjsip_private.h, res/res_pjsip_pubsub.c, res/res_pjsip/config_transport.c: res_pjsip: AMI commands and events. Created the following AMI commands and corresponding events for res_pjsip: PJSIPShowEndpoints - Provides a listing of all pjsip endpoints and a few select attributes on each. Events: EndpointList - for each endpoint a few attributes. EndpointlistComplete - after all endpoints have been listed. PJSIPShowEndpoint - Provides a detail list of attributes for a specified endpoint. Events: EndpointDetail - attributes on an endpoint. AorDetail - raised for each AOR on an endpoint. AuthDetail - raised for each associated inbound and outbound auth TransportDetail - transport attributes. IdentifyDetail - attributes for the identify object associated with the endpoint. EndpointDetailComplete - last event raised after all detail events. PJSIPShowRegistrationsInbound - Provides a detail listing of all inbound registrations. Events: InboundRegistrationDetail - inbound registration attributes for each registration. InboundRegistrationDetailComplete - raised after all detail records have been listed. PJSIPShowRegistrationsOutbound - Provides a detail listing of all outbound registrations. Events: OutboundRegistrationDetail - outbound registration attributes for each registration. OutboundRegistrationDetailComplete - raised after all detail records have been listed. PJSIPShowSubscriptionsInbound - A detail listing of all inbound subscriptions and their attributes. Events: SubscriptionDetail - on each subscription detailed attributes SubscriptionDetailComplete - raised after all detail records have been listed. PJSIPShowSubscriptionsOutbound - A detail listing of all outboundbound subscriptions and their attributes. Events: SubscriptionDetail - on each subscription detailed attributes SubscriptionDetailComplete - raised after all detail records have been listed. (issue ASTERISK-22609) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2959/ ........ Merged revisions 403131 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-23 12:52 +0000 [r403118-403120] Joshua Colp * res/res_stasis_playback.c, rest-api/api-docs/events.json, /, res/res_stasis_recording.c, res/ari/ari_model_validators.c, rest-api/api-docs/recordings.json, res/ari/ari_model_validators.h: ari: Add events for playback and recording. While there were events defined for playback and recording these were not actually sent. This change implements the to_json handlers which produces them. (closes issue ASTERISK-22710) Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/3026/ ........ Merged revisions 403119 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_snoop.exports.in (added), /, include/asterisk/stasis_app_snoop.h (added), rest-api/api-docs/channels.json, res/res_stasis_snoop.c (added), main/audiohook.c, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h: ari: Add Snoop operation for spying/whispering on channels. The Snoop operation can be invoked on a channel to spy or whisper on it. It returns a channel that any channel operations can then be invoked on (such as record to do monitoring). (closes issue ASTERISK-22780) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3003/ ........ Merged revisions 403117 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-23 00:22 +0000 [r403106] Rusty Newton * apps/app_voicemail.c: app_voicemail: when forwarding a message, play vm-msgforwarded instead of vm-msgsaved In the last release of sounds, 1.4.25 we added a vm-msgforwarded prompt for various core languages. Now we use that prompt. (issue ASTERISK-21413) (closes issue ASTERISK-21413) Reported by: netwrkr Tested by: newtonr 2013-11-22 23:57 +0000 [r403095] Kinsey Moore * tests/test_stasis.c, /, tests/test_stasis_channels.c: Make sure unit tests compile This fixes the unit tests that were broken by r403069 and several functions requiring a new parameter for sanitization of JSON messages generated from object snapshots. ........ Merged revisions 403094 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-22 22:37 +0000 [r403083] Kevin Harwell * /, contrib/ast-db-manage/config/versions/43956d550a44_add_tables_for_pjsip.py, res/res_pjsip/pjsip_configuration.c: res_pjsip: convert configuration settings names to snake case some more Updated the alembic script for pjsip. Also, the dtls config parsing stuff was expecting strings with no underscores, so removed the underscores from the option name before passing it to the parser. ........ Merged revisions 403082 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-22 20:10 +0000 [r403070] Kinsey Moore * res/res_stasis.c, main/stasis_endpoints.c, res/ari/resource_endpoints.c, main/rtp_engine.c, /, res/stasis/app.c, include/asterisk/stasis_bridges.h, include/asterisk/stasis.h, include/asterisk/stasis_app.h, main/stasis_bridges.c, res/ari/resource_bridges.c, main/json.c, main/stasis_message.c, include/asterisk/stasis_channels.h, main/stasis_channels.c, res/ari/resource_channels.c, include/asterisk/stasis_endpoints.h: ARI: Don't leak implementation details This change prevents channels used as implementation details from leaking out to ARI. It does this by preventing creation of JSON blobs of channel snapshots created from those channels and sanitizing JSON blobs of bridge snapshots as they are created. This introduces a framework for excluding information from output targeted at Stasis applications on a consumer-by-consumer basis using channel sanitization callbacks which could be extended to bridges or endpoints if necessary. This prevents unhelpful error messages from being generated by ast_json_pack. This also corrects a bug where BridgeCreated events would not be created. (closes issue ASTERISK-22744) Review: https://reviewboard.asterisk.org/r/2987/ Reported by: David M. Lee ........ Merged revisions 403069 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-22 17:27 +0000 [r403051] Kevin Harwell * res/res_pjsip_acl.c, res/res_pjsip.c, res/res_pjsip/config_transport.c, res/res_pjsip/config_global.c, /, configs/pjsip.conf.sample, res/res_pjsip/config_system.c, contrib/scripts/sip_to_pjsip/sip_to_pjsip.py, res/res_pjsip/pjsip_configuration.c: res_pjsip: convert configuration settings names to snake case Renamed, where appropriate, the configuration options for chan/res_pjsip to use snake case (compound words separated by an underscore). For example, faxdetect will become fax_detect, recordofffeature will become record_off_feature, etc... Review: https://reviewboard.asterisk.org/r/3002/ ........ Merged revisions 403022 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-22 17:12 +0000 [r403017] Joshua Colp * /, main/translate.c: translate: Move freeing of frame to after it is used. When translating from one format to another it is possible to inform the translation function that the source frame should be freed. This was previously done immediately but shortly afterwards the frame that was freed was accessed and used again. This change moves code around a bit so that the frame is now freed after it has been completely used. (closes issue ASTERISK-22788) Reported by: Corey Farrell Patches: translate-access-after-free-11up.patch uploaded by coreyfarrell (license 5909) translate-access-after-free-1.8.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 403014 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 403015 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 403016 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-22 16:43 +0000 [r403013] Richard Mudgett * apps/app_directed_pickup.c, CHANGES: PickupChan: Add ability to specify channel uniqueids as well as channel names. * Made PickupChan() search by channel uniqueids if the search could not find a channel by name. * Ensured PickupChan() never considers the picking channel for pickup. * Made PickupChan() option p use a common search by name routine. The original search was erroneously case sensitive. (issue AFS-42) Review: https://reviewboard.asterisk.org/r/3017/ 2013-11-21 22:38 +0000 [r402995] Jonathan Rose * CHANGES, apps/app_directory.c: app_directory: Set variable indicating reason directory exited By the time the directory application exits, a channel variable DIRECTORY_RESULT will be set for the channel that invoked it which can be used to determine the reason for exit. The changes log and the app_directory documentation contain specific details about each of the possible values for DIRECTORY_RESULT. Review: https://reviewboard.asterisk.org/r/3016/ 2013-11-21 22:36 +0000 [r402982-402994] David M. Lee * rest-api-templates/ari_resource.c.mustache, /, rest-api-templates/res_ari_resource.c.mustache: ari: Fix #include to match generated headers for snakeCase resource files ........ Merged revisions 402993 from http://svn.asterisk.org/svn/asterisk/branches/12 * rest-api-templates/make_ari_stubs.py, /: ari: Fix generators for resources with camelCase names. For the new deviceState resource, we need to properly generate device_state.[ch] files. ........ Merged revisions 402981 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-21 19:22 +0000 [r402969] Matthew Jordan * res/res_pjsip_session.c, /: res_pjsip_session: Fix memory leak of direct media format capabilities The direct media format capabilities are always allocated in ast_sip_session_alloc and were not freed in the session destructor. Whoops. (This being the third whoops caught by Scott and Nitesh's valgrind work for the Asterisk Test Suite. Nifty!) ........ Merged revisions 402968 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-21 19:09 +0000 [r402945-402957] Richard Mudgett * include/asterisk/app.h, /: voicemail: Fixup some doxygen comments. ........ Merged revisions 402956 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/bucket.c: bucket: Fix scheme ref leak in __ast_bucket_scheme_register(). ........ Merged revisions 402944 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-21 17:53 +0000 [r402942-402943] Matthew Jordan * res/res_pjsip_sdp_rtp.c, /: res_pjsip_sdp_rtp: Fix use of uninitialized value in PJSIP In PJMEDIA, pjmedia_sdp_rtpmap_to_attr will attempt to use the string rtpmap.param regardless of its length value. Simply setting the length to 0 does not prevent the garbage on the stack in rtpmap.param.ptr from being formatted in a sprintf call. This patch initializes the string to NULL so that at the very least, something is provided to the function that is predictable. ........ Merged revisions 402941 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_mwi.c: res_pjsip_mwi: Fix memory leak of MWI subscriptions container This patch fixes a reference counting memory leak on the ao2_container created as part of create_mwi_subscriptions. When we create the container in this routine, the intent is to hand lifetime ownership over to the global container unsolicited_mwi. When ao2_global_obj_replace_unref is called, the reference count on mwi_subscriptions (the container) will be bumped by 1; however, the function does not decrement the reference count on mwi_subscriptions when this occurs. This will prevent the container from being fully disposed of when Asterisk exits (or on any subsequent call to this operation, such as during a reload). ........ Merged revisions 402940 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-21 15:57 +0000 [r402928-402929] David M. Lee * res/res_stasis.c, /: stasis: Fixed scoping problem with bridge tracking. ........ Merged revisions 402817 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, /, res/stasis/control.c, include/asterisk/stasis_app.h, rest-api/api-docs/channels.json: ari: Add silence generator controls This patch adds the ability to start a silence generator on a channel via ARI. This generator will play silence on the channel (avoiding audio timeouts on the peer) until it is stopped, or some other media operation is started (like playing media, starting music on hold, etc.). (closes issue ASTERISK-22514) Review: https://reviewboard.asterisk.org/r/3019/ ........ Merged revisions 402926 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-19 23:17 +0000 [r402892] Joshua Colp * /, res/res_pjsip_caller_id.c: res_pjsip_caller_id: Don't overwrite user portion of the From header when fromuser is set. The fromuser option is used to explicitly set the user within the From header. The res_pjsip_caller_id module did not take this setting into account when determining if the From header could be modified or not. (closes issue ASTERISK-22866) Reported by: Anthony Messina ........ Merged revisions 402891 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-16 13:51 +0000 [r402865] Joshua Colp * res/res_pjsip/pjsip_distributor.c, /, configure, include/asterisk/autoconfig.h.in, configure.ac: res_pjsip: Add support for building against pjproject with SIP transaction group lock support. SIP transaction group lock support has been backported into our pjproject. Since the code now internally uses a group lock the code is now changed to unlock it if present. Note that the act of finding the transaction is what actually returns it locked. For further information about group locks check out the wiki page at: http://trac.pjsip.org/repos/wiki/Group_Lock (issue ASTERISK-22818) Reported by: Matt Jordan ........ Merged revisions 402864 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-15 22:38 +0000 [r402854] Jonathan Rose * apps/app_confbridge.c, CHANGES, apps/confbridge/conf_config_parser.c, configs/confbridge.conf.sample, apps/confbridge/include/confbridge.h: Confbridge: Add option to review the recording similar to announce_join_leave Review: https://reviewboard.asterisk.org/r/3008/ 2013-11-15 14:37 +0000 [r402839] Kinsey Moore * /, main/cel.c: CEL: Fix crash when using CELGenUserEvent This fixes a crash when CELGenUserEvent is called from the dialplan while CEL is disabled. Currently, CEL does not create its topics and forwards if it is not enabled and external entities may depend on these topics blindly since they should always be available. This patch breaks up route creation and topic/forward creation such that the CEL topics and forwards will always exist while the router and its associated routes will be torn down and recreated as necessary. (closes issue ASTERISK-22799) Review: https://reviewboard.asterisk.org/r/3010/ Reported by: Matt Jordan ........ Merged revisions 402838 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-14 21:36 +0000 [r402820-402829] Richard Mudgett * apps/app_directed_pickup.c: Pickup: Pickup() and PickupChan() parameter parsing improvements. * Made Pickup() and PickupChan() tollerate empty pickup values. i.e., You can now have Pickup(&&exten@context). * Made PickupChan() use the standard option flag parsing code. * apps/app_directed_pickup.c: Pickup: Ensure using PICKUPMARK never considers the picking channel. 2013-11-14 20:32 +0000 [r402819] Jonathan Rose * CHANGES, main/pbx.c, apps/app_sayunixtime.c: Say: If SAY_DTMF_INTERRUPT is set to an ast_true value, jump on DTMF Similar to how background works, if a say application is called with this variable set to 'true', 'yes', 'on', etc. then using DTMF while the say action is in progress will result in the channel jumping to that extension in the dialplan. Review: https://reviewboard.asterisk.org/r/3011/ 2013-11-13 23:11 +0000 [r402805] Joshua Colp * rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, /, res/stasis/control.c, include/asterisk/stasis_app.h: res_ari_channels: Add the ability to stop locally generated ringing on a channel. Using the 'ring' operation it is possible to start locally generated ringback if the channel is answered. This change adds the ability to stop it by using DELETE. ........ Merged revisions 402804 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 23:17 +0000 [r402788-402795] Kevin Harwell * res/ari/resource_endpoints.c, /: ari endpoints: GET /ari/endpoints/{invalid-tech} should return a 404 Was returning a 404 on a valid technology with an empty list of endpoints. Now checking against the channel tech to make sure the tech itself is valid and not just an empty list of endpoints. (issue ASTERISK-22803) Reported by: David M. Lee ........ Merged revisions 402793 from http://svn.asterisk.org/svn/asterisk/branches/12 * rest-api/api-docs/endpoints.json, res/ari/resource_endpoints.c, /, res/res_ari_endpoints.c: ari endpoints: GET /ari/endpoints/{invalid-tech} should return a 404 Implementation listing endpoints by technology returned an empty array if no matching endpoints were found. Fixed so a "404 Not Found" will be returned instead. (closes issue ASTERISK-22803) Reported by: David M. Lee ........ Merged revisions 402787 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 19:38 +0000 [r402768-402778] Mark Michelson * /, main/channel.c: Switch to a scoped lock to avoid missing unlocks in failure returns. ........ Merged revisions 402769 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/channel.c, /: Move a NULL check to a place that makes more sense. Two variables were being checked for NULLity immediately after being declared NULL. I moved the NULL check until after the variables are allocated. This allows for the "channelvars" option in manager.conf to work as intended again. ........ Merged revisions 402767 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 16:49 +0000 [r402758] Kevin Harwell * res/res_pjsip_messaging.c, res/res_pjsip_header_funcs.c, /: pjsip_messaging, pjsip_header_funcs: Crashes due to NULL pointer dereferences Both res_pjsip_messaging and res_pjsip_header_funcs were causing asterisk to crash because they were trying to dereference a NULL pointer. In the case of res_pjsip_messaging it was attempting to "print" a contact header that did not exist. In fact contact headers should not be part of a SIP MESSAGE, so the offending code was simply removed. In the case of res_pjsip_header_funcs a null private channel tech was being passed to the function and then later dereferenced. Added null checks (and error logging) to the read/write function handlers to guard against crashing. (closes issue ASTERISK-22821) Reported by: Anthony Messina ........ Merged revisions 402757 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 16:34 +0000 [r402756] Kinsey Moore * /, apps/app_celgenuserevent.c: CELGenUserEvent: Fix error message from ast_json_pack This prevents NULL from being passed into an ast_json_pack call when no extra information is passed to the application which prevents an error message about NULL arguments from being generated. ........ Merged revisions 402755 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 15:27 +0000 [r402741] David M. Lee * res/ari/ari_model_validators.h, rest-api/api-docs/events.json, /: Fixed a typ. ........ Merged revisions 402738 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-12 15:03 +0000 [r402711] Kinsey Moore * channels/chan_dahdi.c, /: chan_dahdi: Fix crash during caller ID read Asterisk will sometimes core dump during caller id read on analog channels due to a negative return value from the read() in my_get_callerid that slips through as a negative length argument to callerid_feed() if the errno returned by DAHDI is ELAST. This change ensures that the negative return is treated properly even when it is ELAST. (closes issue ASTERISK-22746) Reported by: Michael Walton Patches: chan_dahdi_cid_crash_fix.r401410.patch uploaded by Michael Walton (License 6502) ........ Merged revisions 402708 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402709 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402710 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-11 20:28 +0000 [r402698] Jonathan Rose * apps/app_confbridge.c: Confbridge: add test events for dynamic menus test Adds a couple of test events for conference menu actions so that it's easy to discern when those menu actions have been triggered. (issue ASTERISK-22760) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2999/ 2013-11-11 19:31 +0000 [r402688] Mark Michelson * apps/app_confbridge.c, /: Get rid of some inaccurate comments. I'm doing some unrelated work in app_confbridge and finding these "invalid pin" comments to be annoying. Get out! ........ Merged revisions 402686 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402687 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-11 15:37 +0000 [r402648] Kinsey Moore * /, apps/app_queue.c: app_queue: Honor penalty limits of 0 In the current app_queue code from 1.8 up to trunk the upper and lower penalties can be set to 0 but the value is interpreted to be disabled instead of actually setting limits. This is especially evident if min and max limits are set to 0 and members with penalties of 0 and 1 are in the queue since the member with penalty 1 will still receive calls. This patch adjusts the special disabled value to be INT_MAX instead of 0. (closes issue ASTERISK-20862) Review: https://reviewboard.asterisk.org/r/2995/ Reported by: Schmooze Com ........ Merged revisions 402645 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402646 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402647 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 23:07 +0000 [r402607] Scott Griepentrog * /, channels/chan_sip.c, channels/sip/include/sip.h: chan_sip: keep same local (from) tag for outgoing register requests For outbound register requests the tag on the From line was updated every 20 seconds prior to a successful registration and also once for each registration renewal. That behavior can possibly cause the registration to be denied because of the different tag, and is not aligned with the intention of RFC 3261 8.1.3.5 "... request constitutes a new transaction and SHOULD have the same value of the Call-ID, To, and From of the previous request...". This updates chan_sip to have a field to keep the local tag in the registration structure and use that tag for registration requests where the callid is also unchanged. (closes issue ASTERISK-12117) Reported by: Pawel Pierscionek Review: https://reviewboard.asterisk.org/r/2988/ ........ Merged revisions 402604 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402605 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402606 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 20:37 +0000 [r402595] Richard Mudgett * /, res/res_stasis.c: res_stasis.c: Fix locking issues with the app_bridge_moh container. * Fix unlinking from the app_bridges_moh container in remove_bridge_moh() without a lock under normal circumstances. * Made check ast_bridge_set_after_callback() return value in bridge_moh_create() to handle failure. * Fixed SCOPED_AO2LOCK() locking over too much scope in stasis_app_bridge_moh_channel() and stasis_app_bridge_moh_stop(). * Fixed unusual usage of ao2_unlink_flag() in control_unlink(). * Fixed orphaned bridge from off nominal path in stasis_app_bridge_create(). * Fixed strange construct in stasis_app_unsubscribe(). From a bad merge? * Made load_module() cleanup on failure. Review: https://reviewboard.asterisk.org/r/2962/ ........ Merged revisions 402593 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 19:33 +0000 [r402585] Jonathan Rose * /, main/security_events.c, configs/manager.conf.sample, CHANGES, include/asterisk/manager.h, main/manager.c: security_events: Push out security events over AMI events Security Events will now be written to any listener of the new 'security' class Review: https://reviewboard.asterisk.org/r/2998/ ........ Merged revisions 402584 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 19:22 +0000 [r402583] Mark Michelson * res/res_pjsip.c, /: Clarify an ambiguous error message. ........ Merged revisions 402582 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 18:53 +0000 [r402571-402572] David M. Lee * /, res/res_pjsip/config_system.c: res_pjsip: Print a helpful error message if sorcery registration fails ........ Merged revisions 402570 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_playbacks.h, /: Changes from make ari-stubs after r402560 ........ Merged revisions 402561 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 17:59 +0000 [r402562] Kevin Harwell * rest-api/resources.json, res/ari/resource_playback.h (removed), res/res_ari_playbacks.c (added), res/ari/resource_playbacks.h (added), /, res/ari.make, rest-api/api-docs/playback.json (removed), res/ari/resource_playback.c (removed), res/res_ari_playback.c (removed), rest-api/api-docs/playbacks.json (added), res/ari/resource_playbacks.c (added): ARI playback: Rename ARI Playback to Playbacks Before playback was the only non plural resource. It has been renamed to playbacks for consistency. (closes issue ASTERISK-22737) Reported by: Paul Belanger ........ Merged revisions 402560 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 17:29 +0000 [r402557] David M. Lee * res/res_ari.c, main/manager.c, /, main/http.c: ari: Add application/x-www-form-urlencoded parameter support ARI POST calls only accept parameters via the URL's query string. While this works, it's atypical for HTTP API's in general, and specifically frowned upon with RESTful API's. This patch adds parsing for application/x-www-form-urlencoded request bodies if they are sent in with the request. Any variables parsed this way are prepended to the variable list supplied by the query string. (closes issue ASTERISK-22743) Review: https://reviewboard.asterisk.org/r/2986/ ........ Merged revisions 402555 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-08 14:58 +0000 [r402546] Kevin Harwell * apps/app_dahdiras.c, utils/extconf.c, main/asterisk.c: app_dahdiras: Use waitpid instead of wait4. Several places in the code were using wait4 while other places were using waitpid. This change makes all places use waitpid in order to make things more consistent and since the 'rusage' object passed in/out of wait4 was never used. (closes issue ASTERISK-22557) Reported by: YvesGael Patches: asterisk-11.5.1-wait4.patch uploaded by hurdman (license 6537) 2013-11-07 23:42 +0000 [r402538] Jonathan Rose * res/res_pjsip_authenticator_digest.c, /: PJSIP: Improve error handling in digest authenticator Previously, regardless of whether failure to authenticate was due to lacking any authentication or actually failing authentication, the Digest Authenticator would simply return that a challenge was still needed. It will continue to do that when no authentication information is in the received SIP digest, but when authentication information is present and does not pass authentication, that will be treated as an authentication error. This is to ensure that PJSIP will issue security events indicated failed auths. ........ Merged revisions 402537 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-07 21:10 +0000 [r402529] David M. Lee * res/ari/resource_applications.c, res/ari/resource_playback.c, rest-api/api-docs/channels.json, res/ari/resource_applications.h, res/ari/resource_channels.c, res/ari/resource_playback.h, rest-api/api-docs/recordings.json, res/ari/resource_recordings.c, rest-api-templates/ari_resource.c.mustache, rest-api-templates/asterisk_processor.py, res/ari/resource_channels.h, rest-api/api-docs/endpoints.json, res/ari/resource_endpoints.c, res/ari/resource_recordings.h, res/ari/resource_events.c, res/res_ari_playback.c, res/res_ari_applications.c, res/ari/resource_endpoints.h, res/ari/resource_events.h, rest-api/api-docs/sounds.json, res/ari/resource_sounds.c, res/res_ari_channels.c, rest-api/api-docs/bridges.json, res/ari/resource_bridges.c, res/ari/resource_sounds.h, res/res_ari_recordings.c, res/ari/resource_bridges.h, rest-api/api-docs/asterisk.json, res/ari/resource_asterisk.c, res/res_ari_endpoints.c, rest-api/api-docs/applications.json, rest-api/api-docs/playback.json, res/res_ari_events.c, res/ari/resource_asterisk.h, rest-api-templates/swagger_model.py, res/res_ari_sounds.c, res/res_ari_bridges.c, /, rest-api-templates/ari_resource.h.mustache, rest-api-templates/rest_handler.mustache, res/res_ari_asterisk.c, rest-api-templates/res_ari_resource.c.mustache: ari: User better nicknames for ARI operations While working on building client libraries from the Swagger API, I noticed a problem with the nicknames. channel.deleteChannel() channel.answerChannel() channel.muteChannel() Etc. We put the object name in the nickname (since we were generating C code), but it makes OO generators redundant. This patch makes the nicknames more OO friendly. This resulted in a lot of name changing within the res_ari_*.so modules, but not much else. There were a couple of other fixed I made in the process. * When reversible operations (POST /hold, POST /unhold) were made more RESTful (POST /hold, DELETE /unhold), the path for the second operation was left in the API declaration. This worked, but really the two operations should have been on the same API. * The POST /unmute operation had still not been REST-ified. Review: https://reviewboard.asterisk.org/r/2940/ ........ Merged revisions 402528 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-06 21:58 +0000 [r402518] Kevin Harwell * /, apps/app_queue.c: app_queue: crash if first agent is "busy" If the first agent/member (via CLI "queue show") in a queue is "busy" (dnd, circuit busy, etc...) and no agents answered then app_queue would crash. This occurred because while the calling of agent(s) remained valid the channel on "busy" agent would be set to NULL and then later dereferenced upon a second "rna" function call. The original intention of the code is to have only valid "call attempt" objects (channels != NULL) checked while attempting to call agent(s). It does this by building a "call_next" list of valid "call attempt" objects. In the case of the "busy" agent subsequent builds of the valid "call attempt" list would sometimes include (the case mentioned above) an invalid "call attempt" object. The fix was to make sure the "call attempt" list was appropriately built on every iteration. A NULL sanity check was also added at the original offending spot of the crash just in case another one slipped by somehow. (closes issue ASTERISK-22644) Reported by: Marco Signorini Review: https://reviewboard.asterisk.org/r/2983/ ........ Merged revisions 402517 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-05 21:17 +0000 [r402502-402508] Matthew Jordan * /, channels/chan_sip.c: chan_sip: Use AST_AF* defined constant when calling ast_get_ip While the structure passed to ast_get_ip should be set memset to 0, thus initializing the ss_family member to 0, explicitly setting it to AST_AF_UNSPEC is more portable. ........ Merged revisions 402507 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Fix incorrect usage of ast_get_ip involving uninitialized struct This started off as a fix for the failing IAX2 acl_call test in the Asterisk Test Suite. When inspecting why that test was failing, it became clear that all attempts to bind to any local loopback address was failing: [Nov 2 15:56:28] VERBOSE[15787] chan_iax2.c: == Binding IAX2 to address 127.0.0.1:4569 [Nov 2 15:56:28] DEBUG[15787] netsock2.c: Splitting '127.0.0.1' into... [Nov 2 15:56:28] DEBUG[15787] netsock2.c: ...host '127.0.0.1' and port ''. [Nov 2 15:56:28] ERROR[15787] netsock2.c: getaddrinfo("127.0.0.1", "(null)", ...): ai_family not supported [Nov 2 15:56:28] WARNING[15787] acl.c: Unable to lookup '127.0.0.1' While there's conceivably other ways for getaddrino to return EAI_FAMILY, the most common way is if AF_INET, AF_INET6, or AF_UNSPEC is not provided as the desired family. The culprit was the call to ast_get_ip, defined in acl.h. This function uses the family from the passed in addr object (which it will also populate when it returns!) when it eventually calls getaddrinfo. This patch fixes the use of ast_get_ip that were not specifying the family in chan_iax2. This prevents uninitialized use of the structure, so that the addresses resolve correctly. Review: https://reviewboard.asterisk.org/r/2991 ........ Merged revisions 402505 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/acl.h, /, include/asterisk/netsock2.h: netsock2: Define AST_AF_* enum constants to their AF_* equivalents This patch explicitly defines AST_AF_* enum constants to their sys/socket.h defined equivalents. It is certainly unclear why these constants actually have to exist, given that netsock2.h includes sys/socket.h; however, since the code base is already liberally sprinkled with the usage of AST_AF_* (as well as with direct calls to AF_*), this will at least keep the semantics consistent between their usage across systems. ........ Merged revisions 402503 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_channels.c, /: stasis_channels: Don't give preference to ANI info in channel snapshots When publishing channel snapshots, we currently compute the caller ID name and number by giving preference first to ani.{name|number}, then to id.{name|number}. However, when a channel driver (such as chan_sip) updates the caller ID, it typically only updates the caller ID stored in id.{name|number}. This means that we are currently giving preference to stale information. When looking at the rest of the code base, the only other place where we appear to use this same logic is in app_amd. Everywhere else, we treat the party information in ani as being separate to the party information in id. This patch publishes only the caller ID name and number in the snapshot field for caller_name and caller_num. Note that the information in ANI is still available in caller_ani. Review: https://reviewboard.asterisk.org/r/2992/ ........ Merged revisions 402501 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-04 21:02 +0000 [r402453] Kevin Harwell * /, channels/chan_sip.c: chan_sip: notify dialog info ignores presentation indicator in callerid The presentation indicator in a callerid (e.g. set by dialplan function Set(CALLERID(name-pres)= ...)) is not checked when SIP Dialog Info Notifies are generated during extension monitoring. Added a check to make sure the name and/or number presentations on the callee (remote identity) are set to allow. If they are restricted then "anonymous" is used instead. (closes issue AST-1175) Reported by: Thomas Arimont Review: https://reviewboard.asterisk.org/r/2976/ ........ Merged revisions 402450 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402452 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-02 04:30 +0000 [r402406-402439] Richard Mudgett * main/stasis.c, main/stasis_message_router.c, /, include/asterisk/vector.h: vector: Uppercase API to follow C convention. C does not support templates like C++. ........ Merged revisions 402438 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/lock.h, main/stasis.c, main/stasis_message_router.c, /, include/asterisk/vector.h: vector: Update API to be more flexible. Made the vector macro API be more like linked lists. 1) Added a name parameter to ast_vector() to name the vector struct. 2) Made the API take a pointer to the vector struct instead of the struct itself. 3) Added an element cleanup macro/function parameter when removing an element from the vector for ast_vector_remove_cmp_unordered() and ast_vector_remove_elem_unordered(). 4) Added ast_vector_get_addr() in case the vector element is not a simple pointer. * Converted an inline vector usage in stasis_message_router to use the vector API. It needed the API improvements so it could be converted. * Fixed topic reference leak in router_dtor() when the stasis_message_router is destroyed. * Fixed deadlock potential in stasis_forward_all() and stasis_forward_cancel(). Locking two topics at the same time requires deadlock avoidance. * Made internal_stasis_subscribe() tolerant of a NULL topic. * Made stasis_message_router_add(), stasis_message_router_add_cache_update(), stasis_message_router_remove(), and stasis_message_router_remove_cache_update() tolerant of a NULL message_type. * Promoted a LOG_DEBUG message to LOG_ERROR as intended in dispatch_message(). Review: https://reviewboard.asterisk.org/r/2903/ ........ Merged revisions 402429 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/confbridge/conf_state_single.c, apps/confbridge/conf_state_inactive.c, apps/confbridge/conf_state_single_marked.c, /, apps/confbridge/include/confbridge.h, apps/confbridge/conf_state_multi.c, apps/app_confbridge.c, apps/confbridge/conf_state_multi_marked.c, apps/confbridge/conf_state.c: confbridge: Separate user muting from system muting overrides. The system overrides the user muting requests when MOH is playing or a waitmarked user is waiting for a marked user to join. System muting overrides interfere with what the user may wish the muting to be when the system override ends. * User muting requests are now independent of the system muting overrides. The effective muting is now the logical or of the user request and system override. * Added a Muted flag to the CLI "confbridge list " command. * Added a Muted header to the AMI ConfbridgeList action ConfbridgeList event. (closes issue AST-1102) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/2960/ ........ Merged revisions 402425 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402427 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/config.c, apps/confbridge/conf_config_parser.c, configs/confbridge.conf.sample, /: config: Allow ConfBridge DTMF menus to have '#' as the first digit. ConfBridge allows custom DTMF menus to be created in the confbridge.conf file by assigning a DTMF key sequence to a sequence of actions as follows: DTMF-sequence = action,action... Unfortunately, the normal config file processing code interprets an initial '#' character as starting a directive such as #include. * Add the ability to escape the first non-blank character in a config line so the '#' character can be used without triggering the directive processing code. (closes issue AFS-2) (closes issue ASTERISK-22478) Reported by: Nicolas Tanski Patches: jira_asterisk_22478_v11.patch (license #5621) patch uploaded by rmudgett (modified) Review: https://reviewboard.asterisk.org/r/2969/ ........ Merged revisions 402407 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402416 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/app.h, /, main/app.c: voicemail: Simplify callback pointer declarations and add doxygen. * Typedefed and added doxegen for the voicemail callback functions. * Simplified the prototypes for ast_install_vm_functions() and ast_install_vm_test_functions() to use the new function typedefs. * Simplified the voicemail callback function pointer variable declarations to use the new function typedefs. ........ Merged revisions 402398 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-01 22:48 +0000 [r402397] Jonathan Rose * apps/confbridge/conf_config_parser.c, apps/confbridge/include/confbridge.h, apps/app_confbridge.c, CHANGES: app_confbridge: Make the CONFBRIDGE function be able to create dynamic menus Also adds the ability to clear all profile items and makes behavior more consistent with documentation as when choosing whether to use CONFBRIDGE datastore profiles or the application arguments to the confbridge application. (closes issue ASTERISK-22760) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2971/ 2013-11-01 21:51 +0000 [r402388] Scott Griepentrog * main/manager_bridges.c, /, main/bridge.c, include/asterisk/bridge.h: Manager: Add equivalent AMI actions for the bridge CLI commands. Adds the following AMI events, closely following their CLI counterparts: BridgeDestroy BridgeKick BridgeTechnologyList BridgeTechnologySuspend BridgeTechnologyUnsuspend BridgeDestroy kicks an entire bridge, where BridgeKick kicks just one channel off the bridge. When kicking a channel, specifying the bridge also (optional) insures it is not removed from the wrong bridge. The BridgeTechnology events allow viewing and changing suspension status, which affects only subsequent not active bridging. (closes ASTERISK-22356) Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/2973/ ........ Merged revisions 402387 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-01 16:31 +0000 [r402368] David M. Lee * /, rest-api-templates/api.wiki.mustache: ari wiki docs: add notes about allowMultiple parameters. This patch adds a note to any parameter that has 'allowMultiple' set in the Swagger documentation. (closes issue ASTERISK-22704) ........ Merged revisions 402367 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-01 14:38 +0000 [r402359] Joshua Colp * include/asterisk/stasis_app.h, rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, res/res_stasis_playback.c, /, res/stasis/control.c: res_ari_channels: Add ring operation, dtmf operation, hangup reasons, and tweak early media. The ring operation sends ringing to the specified channel it is invoked on. The dtmf operation can be used to send DTMF digits to the specified channel of a specific length with a wait time in between. Finally hangup reasons allow you to specify why a channel is being hung up (busy, congestion). Early media behavior has also been tweaked slightly. When playing media to a channel it will no longer automatically answer. If it has not been answered a progress indication is sent instead. (closes issue ASTERISK-22701) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2916/ ........ Merged revisions 402358 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-01 12:40 +0000 [r402349] Kinsey Moore * res/res_rtp_asterisk.c, /, channels/chan_sip.c, include/asterisk/rtp_engine.h: chan_sip: Fix RTCP port for SRFLX ICE candidates This corrects one-way audio between Asterisk and Chrome/jssip as a result of Asterisk inserting the incorrect RTCP port into RTCP SRFLX ICE candidates. This also exposes an ICE component enumeration to extract further details from candidates. (closes issue ASTERISK-21383) Reported by: Shaun Clark Review: https://reviewboard.asterisk.org/r/2967/ ........ Merged revisions 402345 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402348 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-11-01 12:33 +0000 [r402337-402347] Joshua Colp * /, include/asterisk/stasis_app.h, res/ari/resource_channels.c: res_ari_channels: Fix a deadlock when originating multiple channels close to eachother. If a Stasis application is specified an implicit subscription is done on the originated channel. This was previously done with the channel lock held which is dangerous as the underlying code locks the container and iterates items. This change releases the lock on the originated channel before subscribing occurs. (closes issue ASTERISK-22768) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2979/ ........ Merged revisions 402346 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/stasis/control.c: res_stasis: Ensure the channel is always departed from the bridge when it leaves. This change adds a command to the command queue to explicitly depart the channel from the bridge when it is told it has left. If the channel has already been departed or has entered a different bridge this command will become a no-op. (closes issue ASTERISK-22703) Reported by: John Bigelow (closes issue ASTERISK-22634) Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/2965/ ........ Merged revisions 402336 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-31 22:09 +0000 [r402328] Mark Michelson * /, contrib/scripts/sip_to_pjsip/sip_to_pjsip.py, contrib/scripts/sip_to_res_sip (removed), contrib/scripts/sip_to_pjsip (added), contrib/scripts/sip_to_pjsip/astconfigparser.py, contrib/scripts/sip_to_pjsip/astdicts.py: Update the conversion script from sip.conf to pjsip.conf (closes issue ASTERISK-22374) Reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/2846 ........ Merged revisions 402327 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-31 16:06 +0000 [r402286-402290] Matthew Jordan * main/loader.c, /: core/loader: Don't call dlclose in a while loop For awhile now, we've noticed continuous integration builds hanging on CentOS 6 64-bit build agents. After resolving a number of problems with symbols, strange locks, and other shenanigans, the problem has persisted. In all cases, gdb shows the Asterisk process stuck in loader.c on one of the infinite while loops that calls dlclose repeatedly until success. The documentation of dlclose states that it returns 0 on success; any other value on error. It does not state that repeatedly calling it will eventually clear those errors. Most likely, the repeated calls to dlclose was to force a close by exhausting the references on the library; however, that will never succeed if: (a) There is some fundamental error at work in the loaded library that precludes unloading it (b) Some other loaded module is referencing a symbol in the currently loaded module This results in Asterisk sitting forever. Since we have matching pairs of dlopen/dlclose, this patch opts to only call dlclose once, and log out as an ERROR if dlclose fails to return success. If nothing else, this might help to determine why on the CentOS 6 64-bit build agent things are not closing successfully. Review: https://reviewboard.asterisk.org/r/2970 ........ Merged revisions 402287 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402288 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402289 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/media_index.c, /: medix_index: Display errors when library calls fail Based on feedback from ipengineer in #asterisk, when the media indexer cannot access a sound file on the system (or otherwise fails) Asterisk displays a "Cannot frob file" error but fails to tell you why. This is especially problematic as the media_indexer failing will rpevent Asterisk from starting, as it is in the core. We now display the errno error messages so folks can figure out what they've done wrong. ........ Merged revisions 402285 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-31 14:45 +0000 [r402277] David M. Lee * /, res/stasis/app.c: stasis: add functions embarrassingly missing from r400522 I neglected to implement two of the endpoint subscription functions when I did the work. Normally, you'll only hit that when you unsubscribe from a specific endpoint. ........ Merged revisions 402276 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-30 17:54 +0000 [r402266] Kevin Harwell * channels/chan_pjsip.c, /, res/res_pjsip_messaging.c: pjsip_messaging: Added debug for in dialog messaging (issue ASTERISK-22777) Reported by: Matt Jordan ........ Merged revisions 402265 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-29 23:43 +0000 [r402227] Rusty Newton * /, sounds/Makefile: Updates for 1.4.25 core sounds and 1.4.14 extra sounds, plus new en_GB language set The new sound packages relate to issues: ASTERISK-22544, ASTERISK-22411, ASTERISK-21413, ASTERISK-20782 Modified sounds/Makefile for the new sound versions and to account for the new en_GB language set. (issue ASTERISK-22659) (closes issue ASTERISK-22659) (closes issue ASTERISK-22411) (closes issue ASTERISK-22544) ........ Merged revisions 402224 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402225 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402226 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-29 12:57 +0000 [r402155] Matthew Jordan * main/xmldoc.c, main/channel.c, main/pbx.c, /, main/translate.c: Remove some spammy debug messages; improve clarity of others Debug messages aren't free. Even when the debug level is sufficiently low such that the messages are never evaluated, there is a cost to having to parse Asterisk logs that contain debug messages that (a) fail to convey sufficient information or (b) occur so frequently as to be next to meaningless. Based on having to stare at lots of DEBUG messages, this patch makes the following changes: * channel.c: When copying variables from a parent channel to a child channel, specify the channels involved. Do not log anything for a variable that is not inherited; the fact that it doesn't have an _ or __ already signifies that it won't be inherited. * pbx.c: Specify what function evaluation has occurred that created the result. * translate.c: Bump up the translator path messages to 10. I've never once had to use these debug messages, and for each format that is registered (on startup) and unregistered (on shutdown) the entire f^2 matrix is logged out. For short tests in the Asterisk Test Suite, this should make finding the actual test much easier. * xmldoc.c: The debug message that 'blah' is not found in the tree is expected. Often, description elements - which are not required - are not provided. This debug message adds no additional value, as it is not indicative of an error or helpful in debugging which element did not contain a 'blah' element as a child. If an element is supposed to contain a child element, then that XML tree should have failed validation in the first place. Review: https://reviewboard.asterisk.org/r/2966/ ........ Merged revisions 402150 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 402151 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402154 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-29 12:51 +0000 [r402149-402153] Kinsey Moore * rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, res/ari/resource_channels.h, /: ARI: Remove channels/{channelId}/dial This removes the /ari/channels/{channelId}/dial URI since it is redundant, overly complex, is likely to become more externally complex over time, and is too high-level compared with other ARI operations. See the following for further information: http://lists.digium.com/pipermail/asterisk-app-dev/2013-October/000002.html (closes issue ASTERISK-22784) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2968/ ........ Merged revisions 402152 from http://svn.asterisk.org/svn/asterisk/branches/12 * bridges/bridge_native_rtp.c, /: bridge_native_rtp: Ensure bridge is torn down When a bridge transitions away from one tech to another, the tech going away is provided a dummy bridge with no channels in it to tear down. Currently this means that the teardown code exits prematurely and does not tear anything down. This change tears down RTP bridging for the channel provided in the leave bridge tech callback. This also reverts the majority of r400403 since it is now redundant. (closes issue ASTERISK-22628) (closes issue ASTERISK-22676) Reported by: John Bigelow Reported by: Kevin Harwell Tested by: John Bigelow Review: https://reviewboard.asterisk.org/r/2905/ Patches: native_rtp_fix.diff uploaded by Kinsey Moore (License 6273) ........ Merged revisions 402148 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-29 11:15 +0000 [r402140] Joshua Colp * /, rest-api/api-docs/playback.json, res/res_ari_playback.c: res_ari_playback: Add missing 404 error response for GET and DELETE. (closes issue ASTERISK-22722) Reported by: Richard Mudgett ........ Merged revisions 402139 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-28 22:10 +0000 [r402128-402130] David M. Lee * /, doc: Ignore full docs ........ Merged revisions 402127 from http://svn.asterisk.org/svn/asterisk/branches/12 * /: Put back several merge revisions that were lost in r402054 * /: Put back several merge revisions that were lost in r401962 2013-10-28 15:08 +0000 [r402113-402117] Michael L. Young * /, UPGRADE-11.txt, UPGRADE-12.txt: Fix UPGRADE.txt Due To Merging From Branch 11 When merging in the patch for ASTERISK-22728, the UPGRADE.txt file was changed incorrectly. That change should have gone into ASTERISK-11.txt. This commit is to fix that. Also, another comment in the UPGRADE-11.txt was missing and this commit adds that as well. ........ Merged revisions 402115 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c, UPGRADE-12.txt: chan_sip: Clarify 'Forcerport' Setting Displayed When Running "sip show peers" While looking at ASTERISK-22236, Walter Doekes pointed out that when running "sip show peers", the setting being displayed can be confusing. The display of "N" used to mean NAT (i.e. yes). The NAT setting has gone through many different changes resulting in the display of different characters to try and convey what the current setting is for 'Forcerport' (A for Auto and Forcerport is currently on, a for Auto but Forcerport is off, Y for yes, and N for no). During the initial code review to try and clarify these settings (especially since "N" no longer meant what it used to mean in prior versions of Asterisk), Mark Michelson suggested using the full space available to display the settings which helped to make the settings very clear. That was a great suggestion. Therefore, this patch does the following: * The column for 'Forcerport' now will show: Auto (Yes), Auto (No), Yes, or No. * A column for the 'Comedia' setting has been added. It too will display the setting in a non-cryptic way: Auto (Yes), Auto (No), Yes, or No. * UPGRADE.txt has been updated to document this change. (closes issue ASTERISK-22728) Reported by: Walter Doekes Tested by: Michael L. Young Patches: asterisk-forcerport-display-clarification_v3.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2941 ........ Merged revisions 402111 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402112 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-27 23:22 +0000 [r402073-402091] Matthew Jordan * main/cdr.c, /: Filter out internal channels from dial message handling Surrogate channels would pop up from time to time in dial message handling. This would cause a WARNING message to appear, indicating that the Surrogate channel had no CDR. This patch filters out those channels that have the internal implementation flag set, such that the WARNING message isn't displayed. ........ Merged revisions 402090 from http://svn.asterisk.org/svn/asterisk/branches/12 * cdr/cdr_sqlite3_custom.c, /, cdr/cdr_syslog.c, cdr/cdr_sqlite.c, cdr/cdr_adaptive_odbc.c, addons/cdr_mysql.c, include/asterisk/cdr.h, cdr/cdr_pgsql.c, cdr/cdr_odbc.c, cdr/cdr_radius.c, cdr/cdr_custom.c, cdr/cdr_manager.c, cdr/cdr_tds.c, cdr/cdr_csv.c, main/cdr.c: Prevent CDR backends from unregistering while billing data is in flight This patch makes it so that CDR backends cannot be unregistered while active CDR records exist. This helps to prevent billing data from being lost during restarts and shutdowns. Review: https://reviewboard.asterisk.org/r/2880/ ........ Merged revisions 402081 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, contrib/ast-db-manage/config/env.py, contrib/ast-db-manage/config/versions/4da0c5f79a9c_create_tables.py, contrib/ast-db-manage/voicemail/env.py: Update Alembic database scripts for external scripting and PostgreSQL, Oracle This patch does the following: 1) The env scripts have been updated to be tolerant of a NULL configuration file. This occurs when configuration is provided by an external script, such that the actual config.ini file is not used. 2) Enum types have all been given names. This is needed for PostgreSQL script generation. 3) The identifier meetme_confno_starttime_endtime is greater than 30 characters, and hence invalid for Oracle databases. This has been truncated down to meetme_confno_start_end. ........ Merged revisions 400383 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-26 12:56 +0000 [r402065] Joshua Colp * channels/chan_pjsip.c, include/asterisk/res_pjsip_session.h, /: chan_pjsip: Fix a crash when direct media is enabled and an ACK is received after the channel is hung up. (closes issue ASTERISK-22731) Reported by: Kinsey Moore ........ Merged revisions 402064 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-26 00:36 +0000 [r402056] Richard Mudgett * res/res_stasis.c, /: res_stasis.c: Made use the ao2_container callback templates. * Made res_stasis.c use the OBJ_SEARCH_XXX defines. ........ Merged revisions 402055 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-26 00:27 +0000 [r402054] Scott Griepentrog * main/rtp_engine.c, /, include/asterisk/rtp_engine.h: rtp_engine: fix rtp payloads copy and improve argument names In function ast_rtp_instance_early _bridge_make_compatible the use of instance 0/1 as arguments doesn't clearly communicate a direction that the copying of payloads from the source channel to the destination channel will occur, making it more probable to have the arguments to ast_rtp_codecs_payloads_copy() put in the reverse order. This patch renames the arguments with _dst and _src suffixes and corrects the copy direction. (closes issue ASTERISK-21464) Reported by: Kevin Stewart Review: https://reviewboard.asterisk.org/r/2894/ ........ Merged revisions 402000 from http://svn.asterisk.org/svn/asterisk/branches/1.8 Test shows rtpmap:119 being copied per this change, but is not in sip invite ........ Merged revisions 402042 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 402043 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 23:58 +0000 [r402004-402045] Richard Mudgett * /, main/taskprocessor.c: taskprocessor: Made use pthread_equal() to compare thread ids. * Removed another silly use of RAII_VAR(). RAII_VAR() and SCOPED_LOCK() are not silver bullets that allow you to turn off your brain. ........ Merged revisions 402044 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/stasis/app.c: You'd think that new files would be free of whitespace issues. But you would be wrong. ........ Merged revisions 402003 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 22:01 +0000 [r401999-402002] Jonathan Rose * res/ari/resource_bridges.c, res/res_ari_bridges.c, /, rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c, rest-api/api-docs/bridges.json: ARI: channel/bridge recording errors when invalid format specified Asterisk will now issue 422 if recording is requested against channels or bridges with an unknown format (closes issue ASTERISK-22626) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2939/ ........ Merged revisions 402001 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_recording.c, rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/ari/ari_model_validators.c, res/res_ari_channels.c, rest-api/api-docs/bridges.json, rest-api/api-docs/recordings.json, res/ari/resource_bridges.c, res/ari/ari_model_validators.h, res/res_ari_bridges.c, rest-api/api-docs/events.json, /: ARI recordings: Issue HTTP failures for recording requests with file conflicts If a file already exists in the recordings directory with the same name as what we would record, issue a 422 instead of relying on the internal failure and issuing success. (closes issue ASTERISK-22623) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2922/ ........ Merged revisions 401973 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 20:51 +0000 [r401962] Scott Griepentrog * include/asterisk/pbx.h, main/pbx.c, /: pbx.c: fix confused match caller id that deleted exten still in hash This fixes a bug where a zero length callerid match adjacent to a no match callerid extension entry would be deleted together, which then resulted in hashtable references to free'd memory. A third state of the matchcid value has been added to indicate match to any extension which allows enforcing comparison of matchcid on/off without errors. (closes issue AST-1235) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/2930/ ........ Merged revisions 401959 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401960 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401961 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 17:41 +0000 [r401898-401939] Jonathan Rose * /, res/res_pjsip/pjsip_distributor.c, res/res_pjsip_endpoint_identifier_user.c: PJSIP: Add log messages when requests are received for non-existent endpoints (closes issue ASTERISK-22552) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/2934/ ........ Merged revisions 401938 from http://svn.asterisk.org/svn/asterisk/branches/12 * utils/clicompat.c, utils/refcounter.c, /: Put clicompat-r2.patch back in We've figured out how to resolve the problems this was causing in 12/trunk, so this can go back in now. (issue ASTERISK-22467) Reported by: Corey Farrell Patches: clicompat-r2.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401914 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401935 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401936 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, utils/clicompat.c: revert clicompat-r2.patch from r401704 Patch caused the following build errors against testsuite https://bamboo.asterisk.org/bamboo/browse/AST-ATRUNKBUILD4-244 (issue ASTERISK-22467) Reported by: Corey Farrell ........ Merged revisions 401895 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401896 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401897 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 16:09 +0000 [r401886] Kevin Harwell * /, channels/chan_sip.c: chan_sip: Allow a sip peer to accept both AVP and AVPF calls Adapts the behaviour of avpf to only impact the format of outgoing calls. For inbound calls, both AVP and AVPF calls will be accepted regardless of the value of avpf in the configuration. (closes issue ASTERISK-22005) Reported by: Torrey Searle Patches: optional_avpf_trunk.patch uploaded by tsearle (license 5334) ........ Merged revisions 401884 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401885 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-25 13:49 +0000 [r401873] David M. Lee * tests/test_json.c, /: test_json: Fix deprecation warnings After a series of upgrades over recent weeks, I've discovered that test_json.c won't compile in dev mode any more for me. One of gcc-4.8.2, OS X Mavericks or Xcode 5 has decided to deprecate tempnam. Which, in general, is a good thing. But for test code that just needs a temporary file, it's just annoying. This patch replaces usage of tempname with mkstemp, avoiding the deprecation warning. It also removes the temporary files when the test is complete, which apparently we weren't doing before (oops). Review: https://reviewboard.asterisk.org/r/2957/ ........ Merged revisions 401872 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-24 21:06 +0000 [r401836] Kevin Harwell * /, main/logger.c: Logging: Logging types ignored after specifying a verbose level If one specified a verbose level within a logging facility in logger.conf then any component after it was ignored. Fixed so all values are correctly read. (closes issue ASTERISK-22456) Reported by: Kevin Harwell ........ Merged revisions 401833 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401835 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-24 20:48 +0000 [r401834] David M. Lee * rest-api-templates/models.wiki.mustache, rest-api/api-docs/events.json, /, rest-api-templates/swagger_model.py, rest-api-templates/ari_model_validators.c.mustache: The Swagger 1.2 specification for type extension ended up being slightly different than my proposal. Instead of putting an 'extends' field on the subtype, the base type has a 'subTypes' field, which is a list of the subTypes. Given that its a messaging model and not an object model, kinda makes sense. This patch changes the events.json api-doc, and the python translators to take the new format into account. Other changes that are in Swagger 1.2 were not adopted, since the spec is still in flux, and could change before it's finalized. A summary of changes to the Swagger-1.2 spec can be found at https://github.com/wordnik/swagger-core/wiki/1.2-transition. (closes issue ASTERISK-22440) Review: https://reviewboard.asterisk.org/r/2909/ ........ Merged revisions 401701 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-24 20:34 +0000 [r401622-401832] Jonathan Rose * /, main/utils.c: utils: Fix memory leaks and missed unregistration of CLI commands on shutdown Final set of patches in a series of memory leak/cleanup patches by Corey Farrell (closes issue ASTERISK-22467) Reported by: Corey Farrell Patches: main-utils-1.8.patch uploaded by coreyfarrell (license 5909) main-utils-11.patch uploaded by coreyfarrell (license 5909) main-utils-12up.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401829 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401830 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401831 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, tests/test_linkedlists.c: test_linkedlists: Fix memory leak (issue ASTERISK-22467) Reported by: Corey Farrell Patches: test_linkedlists-1.8.patch uploaded by coreyfarrell (license 5909) test_linkedlists-11up.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401790 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401791 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401792 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/jitterbuf.c: jitterbuf: Fix memory leak on jitter buffer reset (issue ASTERISK-22467) Reported by: Corey Farrell Patches: jitterbuf-jb_reset-leak-1.8.patch jitterbuf-jb_reset-leak-11up.patch ........ Merged revisions 401786 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401787 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401788 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/astobj2.c, /: astobj2: Unregister debug CLI commands at exit (issue ASTERISK-22467) Reported by: Corey Farrell Patches: astobj2-clean-debug-cli-1.8-11.patch uploaded by coreyfarrell (license 5909) astobj2-clean-debug-cli-12up.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401781 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401783 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401784 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_voicemail.c, /: app_voicemail: Memory Leaks against tests (issue ASTERISK-22467) Reported by: Corey Farrell Patches: app_voicemail-1.8.patch uploaded by coreyfarrell (license 5909) app_voicemail-11up.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401743 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401744 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401745 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/app.c, main/asterisk.c, utils/clicompat.c, channels/chan_dahdi.c, codecs/ilbc/doCPLC.c, main/data.c, /: memory leaks: Memory leak cleanup patch by Corey Farrell (second set) Also covers ast_app_parse_timelen-fail-zero-length.patch, but the patch was replaced with one of my own. (issue ASTERISK-22467) Reported by: Corey Farrell Patches: chan_dahdi-cleanup_push.patch uploaded by coreyfarrell (license 5909) clicompat-r2.patch uploaded by coreyfarrell (license 5909) codecs-ilbc-doCPLC.patch uploaded by coreyfarrell (license 5909) data-cleanup-test-registration.patch uploaded by coreyfarrell (license 5909) main-asterisk-kill-listener.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401704 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401705 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401706 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, tests/test_dlinklists.c, funcs/func_math.c, channels/sip/reqresp_parser.c, main/test.c, main/editline/readline.c: memory leaks: Memory leak cleanup patch by Corey Farrell (first set) (issue ASTERSIK-22467) Reported by: Corey Farrell Patches: chan_sip-parse_contact_header_test-free-contacts.patch uploaded by coreyfarrell (license 5909) cli-filename-completion-leak.patch uploaded by coreyfarrell (license 5909) func_math.patch uploaded by corefarrell (license 5909) main-test-cleanup.patch uploaded by coreyfarrell (license 5909) test_dlinklists.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 401660 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401661 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401662 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/translate.c, res/res_rtp_asterisk.c: res_rtp_asterisk: Address jittery DTMF events in RTP streams (closes issue ASTERISK-21170) Reported by: NITESH BANSAL Patches: dtmf-timestamp.patch uploaded by NITESH BANSAL (license 6418) Review: https://reviewboard.asterisk.org/r/2938/ ........ Merged revisions 401619 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401620 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401621 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-23 16:52 +0000 [r401582] Richard Mudgett * /, cdr/cdr_adaptive_odbc.c: cdr_adaptive_odbc: Also apply a filter when the CDR value is empty. Extra CDR records are written if a filtered CDR value is empty because the filter is not checked. (closes issue ASTERISK-22272) Reported by: Jordi Llull Chavarria ........ Merged revisions 401577 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401579 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401581 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-23 16:48 +0000 [r401580] John Bigelow * /, main/bridge_channel.c: Add a test suite event to indicate when the atxfer 3-way feature is detected This adds a test suite event that indicates to tests when the attended transfer three-way call feature is detected. Review: https://reviewboard.asterisk.org/r/2912/ ........ Merged revisions 401578 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-23 15:23 +0000 [r401540] Kinsey Moore * channels/chan_mgcp.c, /: chan_mgcp: Properly handle malformed media lines This corrects a situation in which a media line was not parsed properly and resulted in a crash. (closes issue ASTERISK-21190) Reported by: adomjan Patches: chan_mgcp.c-sscnaf_fix uploaded by adomjan (License 5448) ........ Merged revisions 401537 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401538 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401539 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-23 11:16 +0000 [r401500] Joshua Colp * /, channels/chan_sip.c: chan_sip: Fix an issue where an incompatible audio format may be added to SDP. If preferred codecs included any non-audio format the code would mistakenly add the audio format, even if it was not a joint capability with the remote side. (closes issue ASTERISK-21131) Reported by: nbougues Patches: patch_unsupported_codec_1.8.patch uploaded by nbougues (license 6470) ........ Merged revisions 401497 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401498 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401499 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-23 02:36 +0000 [r401489] Michael L. Young * channels/chan_iax2.c, configs/iax.conf.sample, /: chan_iax2: Fix Binding To Multiple Addresses Again When reworking chan_iax2 for IPv6, the ability to bind to multiple addresses was removed by mistake. This patch restores this functionality and adds notes about IPv6 addresses in the sample config. (closes issue ASTERISK-22741) Reported by: Joshua Colp Tested by: Michael L. Young Patches: asterisk-22741-fix-binding-multiple-addr.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2945/ ........ Merged revisions 401488 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-22 23:10 +0000 [r401450] Matthew Jordan * /, res/res_rtp_asterisk.c: res_rtp_asterisk: Fix crash when RTCP is not available during SSRC change In r400089, a patch was put in to correct erroneous RTCP statistic resets. Unfortunately, ast_rtp_read can be called on an RTP instance that does not have RTCP information. This patch prevents that crash by only resetting the statistics if we do actually have an RTCP instance. (issue AST-1174) (closes issue ASTERISK-22667) Reported by: John Bigelow ........ Merged revisions 401445 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401446 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401447 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-22 19:04 +0000 [r401421-401435] Richard Mudgett * apps/app_queue.c, /: app_queue: Fix CLI "queue remove member" queue_log entry. The queue_log entry resulting from CLI "queue remove member" when log_membername_as_agent is enabled is wrong. It always uses the interface name instead of the member name in the queue_log entry. * Get the queue member before removing it from the queue so the member name is available for the queue_log entry. (closes issue ASTERISK-21826) Reported by: Oscar Esteve Patches: fix_membername.diff (license #6505) patch uploaded by Oscar Esteve (modified to fix potential ref leak) ........ Merged revisions 401433 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401434 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/bridge_channel.c, include/asterisk/bridge_channel_internal.h, /, main/bridge.c: Bridging: Fix orphaned bridge if neither of the joining channels can join. The original issue noted that the bridge is orphaned when res_parking.so is not loaded and a call uses the dial kK flags. A similar issue happens when only one of the park flags is used. In this case you have the bridge with one or the other channel left in it. The channel and bridge will stay around until the channel hangs up. * Fixed the initial bridge channel push failure to act as if the channel were kicked out of the bridge. The bridge then decides if it needs to be dissolved. (closes issue ASTERISK-22629) Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/2928/ ........ Merged revisions 401424 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/parking/parking_bridge_features.c, res/parking/parking_bridge.c, /: res_parking: Give parking timeout comebacktoorigin channel DTMF features. Parking timeouts did not set any DTMF features for the channel calling the parker back. * Added code to set the parkedcalltransfers, parkedcallreparking, parkedcallhangup, and parkedcallrecording options appropriately for the channels when a parking timeout occurs. The recall channel DTMF options are set using the BRIDGE_FEATURES channel variable to allow the other timeout options to have the DTMF features available. (closes issue ASTERISK-22630) Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/2942/ ........ Merged revisions 401422 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_parking.c: res_parking: Update XML documention for DTMF features after parking timeout. * Updated the XML documentation to indicate that the parkedcalltransfers, parkedcallreparking, parkedcallhangup, and parkedcallrecording configuration options also apply to parking timeouts. (issue ASTERISK-22630) Reported by: Kevin Harwell Review: https://reviewboard.asterisk.org/r/2942/ ........ Merged revisions 401420 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-22 15:17 +0000 [r401411] Joshua Colp * apps/app_dial.c: Add an 'R' option to Dial which sends ringing until early media has been received. (closes issue ASTERISK-10487) Reported by: Gaspar Zoltan Patches: 10487.patch uploaded by n8ideas (license 6075) 2013-10-21 21:06 +0000 [r401365] Mark Michelson * /, main/bridge_channel.c: Remove a noisy debug message from bridging code. This particular debug message, during a stress test, was logged so often that it appeared that there may be a memory leak in the logger code. In actuality, there was no memory leak, but the logger thread was having a hard time keeping up with the demands of the rest of the system. Since this debug message has no value at all, the best way to fix the problem was to just remove the message. (closes issue AST-1225) reported by John Bigelow Patches: spammy_log.diff uploaded by Mark Michelson (License #5049) ........ Merged revisions 401364 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-21 19:50 +0000 [r401328] Kevin Harwell * /, main/editline/term.c: Segfault in LIBEDIT_INTERNAL after tgetstr(), when libncurses5-dev isn't installed Include the appropriate declarations when not using termcap, but term+curses and [n]curses do not exist. (closes issue ASTERISK-22351) Reported by: A. Iglesias Patches: issueA22351_libedit_internal_without_ncurses_dev.patch uploaded by wdoekes (license 5674) ........ Merged revisions 401325 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401326 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401327 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-21 18:59 +0000 [r401316-401317] David M. Lee * rest-api/api-docs/channels.json, /: Fixing r401281; the model name is Channel, with a capital C ........ Merged revisions 401315 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_ari.c, /: Fixed malformed Access-Control-Allow-Methods header. Was causing Safari to barf on POST and DELETE. ........ Merged revisions 401106 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-19 21:57 +0000 [r401292] Kinsey Moore * /, channels/chan_iax2.c: Fix IAX2 incoming call address lookups This fixes address lookup for incoming calls without a peer definition. The address family was unset instead of being set to AST_AF_UNSPEC which was causing lookup failures on "127.0.0.1". This is one of the causes of the current failure of the app_page integration test. Review: https://reviewboard.asterisk.org/r/2933/ ........ Merged revisions 401291 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-19 14:45 +0000 [r401282] Joshua Colp * res/ari/resource_channels.h, main/pbx.c, /, rest-api/api-docs/channels.json, res/ari/resource_channels.c, res/res_ari_channels.c: Return a channel snapshot when originating using ARI, and subscribe the Stasis application to it. This change allows a user of ARI to know what channel it has originated and also follow any progress. If a Stasis application is provided it will be automatically subscribed to the originated channel immediately. (closes issue ASTERISK-22485) Reported by: David Lee Review: https://reviewboard.asterisk.org/r/2910/ ........ Merged revisions 401281 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 22:52 +0000 [r401272] Richard Mudgett * /, res/parking/parking_controller.c: res_parking: Remove setting useless flag. ........ Merged revisions 401271 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 21:51 +0000 [r401263] David M. Lee * contrib/scripts/get_swagger_ui.sh (added), Makefile, /, static-http: This is just a quick script for dumping swagger-ui into static-http, so that it can be served by the Asterisk web server. I had to change the Makefile in order to recursively install content from the static-http directory, hence the code review instead of just putting it in. Review: https://reviewboard.asterisk.org/r/2924/ ........ Merged revisions 401261 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 18:44 +0000 [r401249] Mark Michelson * main/sorcery.c, main/cli.c, main/manager.c, /, main/bridge.c, main/bucket.c: Resolve some memory leaks due to incorrect for loop / ao2 ref usage. A common idiom in Asterisk is to due something like: for (ao2_obj = list_beginning; ao2_obj = next_item; ao2_ref(ao2_obj, -1)) { ...do stuff... } This is nice because it automatically takes care of the object references for you. However, there is a pitfall here. If a break statement is in the for loop, then the current reference is not cleaned up. In some cases, this is on purpose, but in others there is a leak. This commit fixes the leak cases. ........ Merged revisions 401248 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 16:59 +0000 [r401233-401240] Richard Mudgett * /, res/res_fax.c, include/asterisk/channel.h, apps/app_dial.c, main/channel.c: Add channel lock protection around translation path setup. Most callers of ast_channel_make_compatible() happen before the channels enter a two party bridge. With the new bridging framework, two party bridging technologies may also call ast_channel_make_compatible() when there is more than one thread involved with the two channels. * Added channel lock protection in set_format() and ast_channel_make_compatible_helper() when dealing with the channel's native formats while setting up a translation path. * Fixed best_src_fmt and best_dst_fmt usage consistency in ast_channel_make_compatible_helper(). The call to ast_translator_best_choice() got them backwards. * Updated some callers of ast_channel_make_compatible() and the function documentation. There is actually a difference between the two channels passed in. * Fixed the deadlock potential in res_fax.c dealing with ast_channel_make_compatible(). The deadlock potential was already there anyway because res_fax called ast_channel_make_compatible() with chan locked. (closes issue ASTERISK-22542) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2915/ ........ Merged revisions 401239 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, include/asterisk/bridge.h: Tweak ast_bridge_depart() doxygen. ........ Merged revisions 401232 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 16:06 +0000 [r401216-401224] Mark Michelson * include/asterisk/bridge.h, /: Remove the bit about requiring ast_bridge_depart() to be called before ast_bridge_destroy(). ........ Merged revisions 401223 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/bridge.h, /: Clarify in ast_bridge_destroy() about how departable channels must be handled. ........ Merged revisions 401212 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 15:14 +0000 [r401184] Michael L. Young * /, channels/chan_sip.c: Remove Port Restriction When Checking For NAT When trying to determine if a peer is behind NAT, we should not be using the ports when comparing addresses. This patch removes the port from being checked and just useds the addresses now. (closes issue ASTERISK-22729) Reported by: Michael L. Young Tested by: Michael L. Young Patches: asterisk-remove-using-port-for-nat-check.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2927/ ........ Merged revisions 401182 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401183 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-18 14:50 +0000 [r401181] Walter Doekes * main/channel.c, /: Properly copy/remove the device state cache flag over a masquerade. In r378303 the AST_FLAG_DISABLE_DEVSTATE_CACHE flag was added that tells the devstate system to not cache states for non-real devices. However, when optimizing away channels (ast_do_masquerade), that flag wasn't copied. In my case, using Local devices as queue members created a situation where the endpoint was considered in use, but the state change of the device being available again was ignored (not cached). The endpoint channel was optimized into the (previously) Local channel, but kept the do-not-cache flag. The end result being that the queue member apparently stayed in use forever. (closes issue ASTERISK-22718) Reported by: Walter Doekes Review: https://reviewboard.asterisk.org/r/2925/ ........ Merged revisions 401178 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401179 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401180 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-17 20:39 +0000 [r401169] Michael L. Young * /, channels/chan_sip.c: Fix Setting A chan_sip Dialog's SIP_NAT_FORCE_RPORT Flag A condition was added in a commit to fix ASTERISK-21374, that, if the SIP_PAGE3_NAT_AUTO_RPORT flag was set, to then copy a peer's SIP_NAT_FORCE_RPORT flag to the dialog. This condition should not have been there since it assumed that if Asterisk is in an environment where NAT is involved, that the auto_* nat settings or force_rport setting would be on in the global settings. If the nat setting in the global setting is set to 'nat=no' and then turned on for peers (which is not quite the recommended way, although it is allowed) this flag is never copied to the dialog resulting in problems like, REGISTER replies going to the wrong port. This patch removes this conditional check and will now always use the peer's flag which by this point in the code the checks on whether the peer is behind NAT or not (if using auto_force_rport) have already been run. (closes issue ASTERISK-22236) Reported by: Filip Frank Tested by: Michael L. Young Patches: asterisk-2236-always-set-rport.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2919/ ........ Merged revisions 401167 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401168 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-17 18:25 +0000 [r401159] Jonathan Rose * res/res_parking.c, /: res_parking: Fix bug where reloading immediately wipes new parkpos extensions (closes issue ASTERISK-22631) Reported by: Kevin Harwell ........ Merged revisions 401158 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-17 15:41 +0000 [r401122] Kinsey Moore * /, res/res_xmpp.c, res/res_jabber.c: Reduce log level of a non-pubsub error message Drop an error log message to debug level 1 since distributed device state functions correctly when receiving this message and it spams the logs. (closes issue ASTERISK-22410) Reported by: abelbeck Patches: asterisk-1.8-res_jabber-log-nonpubsub-error-to-debug.patch uploaded by abelbeck (License 5903) asterisk-11-res_xmpp-log-nonpubsub-error-to-debug.patch uploaded by abelbeck (License 5903) ........ Merged revisions 401119 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401120 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401121 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-16 21:22 +0000 [r401108] Richard Mudgett * /, res/ari/resource_playback.c: ARI: Fix crash when POST /playback/{id}/control does not have an operation parameter. (closes issue ASTERISK-22680) Reported by: John Bigelow ........ Merged revisions 401107 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-16 17:01 +0000 [r401097] David M. Lee * rest-api/resources.json, /: Oops. Leftover /stasis reference ........ Merged revisions 401096 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-16 14:02 +0000 [r401088] Kinsey Moore * rest-api/api-docs/bridges.json, res/ari/resource_channels.h, /, res/ari/resource_bridges.h, rest-api/api-docs/channels.json: Clarify documentation for channel and bridge list This makes it clear that the ARI API calls for listing channels and bridges will list all channels or bridges in the system and not just those that are in or are controlled by a Stasis application. (closes issue ASTERISK-22635) Reported by: Kevin Harwell ........ Merged revisions 401087 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-16 12:19 +0000 [r401079] Walter Doekes * /, apps/app_queue.c: Don't check all realtime queues when doing "queue show some_queue". When using realtime queues, queues have to be fetched from the database every now and then to see if any info has been changed or to see if the queue has been removed. When fetching info for an individual queue, the pruning of other queues is unnecessarily costly. Review: https://reviewboard.asterisk.org/r/2907/ ........ Merged revisions 401049 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 401076 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401077 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-16 00:12 +0000 [r401041] Paul Belanger * /, rest-api/api-docs/bridges.json, res/res_ari_bridges.c: Use POST / DELETE to toggle ARI bridge moh Review: https://reviewboard.asterisk.org/r/2911/ ........ Merged revisions 401040 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-15 23:44 +0000 [r401020-401039] Richard Mudgett * main/translate.c: translate.c: Some minor code tweaks. * Consistently compare format2index() return value so matrix_get() cannot get passed negative values. * Optimize ast_translator_best_choice() to defer initializing things until needed. Also cached the matrix_get() return value rather than repeatedly calling it. * /, channels/dahdi/bridge_native_dahdi.c: bridge_native_dahdi: Return channel join failure if could not make the channels compatible. ........ Merged revisions 401030 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_iax2.c: chan_iax2: Fix channel left locked in off nominal code path. ........ Merged revisions 401016 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 401017 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-15 20:03 +0000 [r401019] Kinsey Moore * rest-api/api-docs/bridges.json, res/res_ari_bridges.c, /: Ensure bridge record error responses validate This adds the list of expected errors to the /bridges/{bridgeId}/record ARI documentation so that outbound 4xx errors validate properly. Previously, this would result in a response validation failure. (closes issue ASTERISK-22627) Reported by: Joshua Colp ........ Merged revisions 401018 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-15 15:30 +0000 [r401007] Paul Belanger * rest-api/api-docs/channels.json, res/res_ari_channels.c, /: Use POST / DELETE to toggle hold / moh for ARI channels This change updates how we handle toggle events, rather then create two different function names, we'll just use POST / DELETE from HTTP to handle it. Review: https://reviewboard.asterisk.org/r/2906/ ........ Merged revisions 400999 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-15 15:26 +0000 [r400998] Mark Michelson * /, channels/chan_sip.c: Prevent chan_sip from sending duplicate BYEs. When a 200 OK for an initial INVITE is received, we were doing the right thing by ACKing and sending an immediate BYE. However, we also were doing the wrong thing and queuing an answer frame, thus causing the call to be answered. This would cause the call to be hung up by the channel thread, thus resulting in a second BYE being sent out. In this fix, I also have set the hangupcause to be correct since the initial BYE being sent by Asterisk had an unknown hangup cause. I have changed to using "Bearer capabilty not available" since the call was hung up due to an SDP offer/answer error. (closes issue ASTERISK-22621) reported by Kinsey Moore ........ Merged revisions 400970 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400971 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400984 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-15 13:44 +0000 [r400959] David M. Lee * /, rest-api-templates/asterisk_processor.py: My doc correction in r400842 had a silly bug. Because I added a wiki_description to models and not their properties, the rendered wiki page had the model description instead of the property descriptions, which looks very silly indeed. (closes issue ASTERISK-22705) ........ Merged revisions 400958 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-14 22:52 +0000 [r400913-400950] Richard Mudgett * channels/chan_dahdi.c, configs/chan_dahdi.conf.sample, channels/chan_dahdi.h: chan_dahdi: Add config support for hwgain settings. * Add hwtxgain and hwrxgain config options to chan_dahdi.conf with documentation in chan_dahdi.conf.sample. (closes issue ASTERISK-22429) Reported by: Jaco Kroon Patches: jira_asterisk_22429_hwgain_trunk.patch (license #5621) patch uploaded by rmudgett * channels/chan_dahdi.c, /, channels/chan_dahdi.h: chan_dahdi: Reflect the set software gain in the CLI "dahdi show channel" output. * Remember the swgain setting from CLI "dahdi set swgain" command so the CLI "dahdi show channel" output will reflect the current setting. * Updated CLI "dahdi set hwgain" and "dahdi set swgain" documentation. (issue ASTERISK-22429) Reported by: Jaco Kroon Patches: jira_asterisk_22429_v1.8_v2.patch (license #5621) patch uploaded by rmudgett ........ Merged revisions 400907 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400909 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400911 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-14 22:03 +0000 [r400912] Mark Michelson * /, channels/chan_sip.c: chan_sip: Do not increment the SDP version between 183 and 200 responses. Bumping the SDP version number can cause interoperability problems since receivers of the responses will expect that a 200 SDP will be identical to a previous 183 SDP. (closes issue ASTERISK-21204) reported by NITESH BANSAL Patches: dont-increment-session-version-in-2xx-after-183.patch uploaded by NITESH BANSAL (License #6418) ........ Merged revisions 400906 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400908 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400910 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-14 15:54 +0000 [r400891] Kevin Harwell * /, res/res_pjsip_outbound_registration.c: pjsip outbound registration: Log message says received a 408 when we didn't If the server didn't exist that we are trying to register to the log message would say that a 408 was received from that server when in reality one wasn't. Added log messages stating no response was received if the response does not exist. (closes issue ASTERISK-22554) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/2893/ ........ Merged revisions 400890 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-14 15:01 +0000 [r400882] Matthew Jordan * res/res_pjsip_mwi.c, /: Remove duplicate module info block The module info block was repeated twice. Once is sufficient. ........ Merged revisions 400881 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-13 15:42 +0000 [r400873] Joshua Colp * res/res_pjsip_session.c, /: Fix a race condition in res_pjsip_session with rapidly terminating the session. The INVITE session state callback wrongly assumes that a session will always exist, but when rapidly terminating the session this assumption goes out the window. As all handler code for the INVITE session state callback requires the session it will now just exit immediately if no session exists. (closes issue ASTERISK-22668) Reported by: John Bigelow ........ Merged revisions 400872 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-12 16:53 +0000 [r400864] Kinsey Moore * /, res/res_pjsip_outbound_authenticator_digest.c: Fix realm comparison for outbound auth When generating the list of authentication credentials to pass to PJSIP, Asterisk was using the raw pointer of a pj_str_t which is not always NULL-terminated. This sometimes resulted in incorrect text for the realm and a failure to match the realm for authentication purposes which was causing the outbound nominal auth pjsip basic call test to bounce. This now uses the pj_str_t that contains the realm instead of generating a new one. Thanks to John Bigelow for helping to narrow this down. ........ Merged revisions 400863 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-11 17:05 +0000 [r400855] Richard Mudgett * include/asterisk/channel.h, /: channel.h: whitespace changes. ........ Merged revisions 400854 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-11 16:36 +0000 [r400851-400852] David M. Lee * /, res/ari/resource_bridges.h, rest-api/api-docs/playback.json, rest-api-templates/api.wiki.mustache, res/res_ari_playback.c, rest-api/api-docs/channels.json, res/ari/resource_playback.h, rest-api/api-docs/bridges.json, rest-api-templates/asterisk_processor.py, res/ari/resource_channels.h, rest-api-templates/models.wiki.mustache: Multiple revisions 400508,400842-400843,400848 ........ r400508 | dlee | 2013-10-03 23:54:51 -0500 (Thu, 03 Oct 2013) | 1 line Corrected response class for stopPlayback ........ r400842 | dlee | 2013-10-10 14:23:24 -0500 (Thu, 10 Oct 2013) | 1 line Correct some ARI wiki rendering errors ........ r400843 | dlee | 2013-10-10 14:26:19 -0500 (Thu, 10 Oct 2013) | 1 line Updated /play resource docs. The playback of http: resources isn't implemented... yet ........ r400848 | dlee | 2013-10-11 11:18:46 -0500 (Fri, 11 Oct 2013) | 5 lines Fix a stupid copy/paste error in ARI docs. Patches: ari-doc-patch.txt uploaded by jbigelow (license 5091) ........ Merged revisions 400508,400842-400843,400848 from http://svn.asterisk.org/svn/asterisk/branches/12 * /: Fixed merge tracking for r400360, which was somehow lost 2013-10-11 16:28 +0000 [r400850] Richard Mudgett * bridges/bridge_softmix.c, /: Softmix: Fix crash when switching from softmix to another bridge technology. The crash is caused by a race condition when switching between native RTP and softmix bridging technologies. In this situation, the bridging technology is switched from native RTP to softmix, and then back to native RTP fast enough that the softmix private data gets destroyed before the softmix mixing thread gets started. Thanks to Kinsey Moore for the crash analysis. * Fix race condition when starting the softmix mixing thread and switching to another bridge technology. (closes issue ASTERISK-22678) Reported by: John Bigelow Patches: jira_asterisk_22678_v12.patch (license #5621) patch uploaded by rmudgett Tested by: John Bigelow ........ Merged revisions 400849 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-10 18:21 +0000 [r400825-400834] Joshua Colp * /, res/res_pjsip/location.c: Perform validation of permanent contacts on AORs in res_pjsip. ........ Merged revisions 400833 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_configuration.c, res/res_pjsip.c: Fix an assertion in res_pjsip when specifying an invalid outbound proxy. This change fixes two issues when setting an outbound proxy: 1. The outbound proxy URI was not parsed and validated during configuration. 2. If an outgoing dialog was created and the outbound proxy could not be set an assertion would occur because the usage count on the dialog was not decremented. The documentation has also been updated to specify that a full URI must be specified for the outbound proxy. (closes issue ASTERISK-22672) Reported by: Antti Yrjola ........ Merged revisions 400824 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-09 11:02 +0000 [r400772-400813] Matthew Jordan * res/res_pjsip_header_funcs.c, /: Use 'z' as the format specifier for size_t Using 'lu' will produce a compiler warning for some versions of gcc and on some architectures. 'z' should be portable as a format specifier for size_t. ........ Merged revisions 400812 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_header_funcs.c (added), /: Add PJSIP_HEADER function for manipulation of SIP headers in the PJSIP stack This patch adds support to the PJSIP stack in Asterisk for SIP header manipulation. Note that this is analagous to SIPAddHeader/SIPRemoveHeader. For PJSIP_HEADER, an incoming supplemental session callback is registered that takes the pjsip_hdrs from the incoming session and stores them in a linked list in the session datastore. Calls to PJSIP_HEADER traverse over the list and return the nth matching header where 'n' is the 'number' argument to the function. When adding a header, the first call creates a datastore and linked list and adds the datastore to the session. The header is then created as a pjsip_hdr and added to the list. An outgoing supplemental session callback then traverses the list and adds the headers to the outgoing pjsip_msg. When removing a header, the list created with PJSIP_HEADER(add,...) is traversed and all matching entries are removed. (closes issue ASTERISK-22498) Reported by: George Joseph patch: res_pjsip_header_funcs_v1.patch uploaded by george.joseph (License 6322) ........ Merged revisions 400771 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 22:33 +0000 [r400770] Kinsey Moore * /, configure, configure.ac: Add warning when compiling with iODBC support When running configure, libiodbc2 development headers will fulfill the requirement for ODBC development headers, but will not function properly. This adds a warning when libiodbc2 development headers are detected instead of unixodbc development headers. (closes issue ASTERISK-22459) Reported by: Patrick Maille Tested by: Walter Doekes Patches: issueA22459_warn_when_using_iodbc.patch uploaded by Walter Doekes (License 5674) ........ Merged revisions 400767 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400768 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400769 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 21:20 +0000 [r400759] Richard Mudgett * apps/app_agent_pool.c, /: app_agent_pool: Fix AMI/CLI AgentLogoff soft preventing agents from logging back in. * Clear the deferred_logoff flag when an agent logs in. (closes issue ASTERISK-22669) Reported by: John Bigelow ........ Merged revisions 400754 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 20:52 +0000 [r400750] Mark Michelson * /, res/res_pjsip.c, res/res_pjsip/config_transport.c: Switch from using pjsip_strerror to pj_strerror. pjsip_strerror is only aware of PJSIP-specific error codes. pj_strerror() is aware of all PJProject error codes and OS-specific error codes. This specifically fixes an oft-seen error in transport configuration code where EADDRINUSE would result in "Unknown PJSIP error 120098" instead of a useful message. ........ Merged revisions 400749 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 20:18 +0000 [r400728-400744] Richard Mudgett * configs/confbridge.conf.sample, /, apps/confbridge/include/confbridge.h, apps/app_confbridge.c, CHANGES, apps/confbridge/conf_config_parser.c: app_confbridge: Can now set the language used for announcements to the conference. ConfBridge now has the ability to set the language of announcements to the conference. The language can be set on a bridge profile in confbridge.conf or by the dialplan function CONFBRIDGE(bridge,language)=en. (closes issue ASTERISK-19983) Reported by: Jonathan White Patches: M19983_rev2.diff (license #5138) patch uploaded by junky (modified) Tested by: rmudgett ........ Merged revisions 400741 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400742 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/confbridge/conf_config_parser.c, /: app_confbridge: Fix duplicate default_user profile. * Fixed looking in the wrong profiles container to see if the default_user profile is already created in verify_default_profiles(). The bridge profile container is never going to hold user profiles. :) ........ Merged revisions 400723 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400724 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 18:19 +0000 [r400684-400704] Kinsey Moore * funcs/func_config.c, /: Fix func_config list entry allocation The AST_CONFIG dialplan function defined in func_config.c allocates its config file list entries using ast_malloc. List entry allocations destined for use with Asterisk's linked list API must be ast_calloc()d or otherwise initialized so that list pointers are set to NULL. These uses of ast_malloc have been replaced by ast_calloc to prevent dereferencing of uninitialized pointer values when traversing the list. (closes issue ASTERISK-22483) Reported by: Brian Scott ........ Merged revisions 400694 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400697 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400701 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: Fix STUN crash when using IPv6 any address Ensure that when chan_sip binds to the IPv6 any address ([::]), IPv4 candidates are also added. (closes issue ASTERISK-21917) Reported by: Torrey Searle Patches: 0023_ipv6_stun_crash.patch uploaded by Torrey Searle (License 5334) ........ Merged revisions 400681 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400682 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 15:44 +0000 [r400683] Mark Michelson * res/res_pjsip/pjsip_options.c, /: Push CLI qualify into the threadpool. If you run Asterisk in the background and then connect to it through a separate console, the thread that runs CLI commands is not registered with PJLIB. Thus PJLIB does not like it when you attempt to send OPTIONS requests from that thread. So now we push the task into the threadpool, which we know to be registered with PJLIB. Thanks to Antti Yrjola for reporting this. ........ Merged revisions 400680 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-08 15:12 +0000 [r400662-400672] Richard Mudgett * /, res/res_agi.c, apps/app_queue.c: Make app_queue and res_agi independent of AMI being enabled. The https://reviewboard.asterisk.org/r/2888/ review changes manager to not subscribe to stasis when it is disabled for performance reasons. When manager is disabled app_queue and res_agi decline to load and fail to clean up what they have already allocated. * Made app_queue and res_agi clean up allocated resources when they decline to load. * Made app_queue and res_agi use their own subscriptions to the stasis topics instead of borrowing manager's message router structure inappropriately. (closes issue ASTERISK-22604) Reported by: rmudgett Review: https://reviewboard.asterisk.org/r/2902/ ........ Merged revisions 400671 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, include/asterisk/stasis.h, apps/app_queue.c, include/asterisk/manager.h: Miscellaneous stand alone comment cleanups. ........ Merged revisions 400661 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-06 17:13 +0000 [r400625] Michael L. Young * /, apps/app_queue.c: app_queue: Fix Queuelog EXITWITHKEY only logging two of four fields Commit r62462 added two extra fields for logging "the original position the caller entered the queue at, and the amount of time the caller was waiting in the queue." But when r75969 was merged from 1.4 into trunk (r75977), these two fields disappeared. Those two extra fields were not logged in 1.4 and when the patch was merged, those fields went away. Therefore, this is a regression and was caught by the reporter because he was reading the awesome "Asterisk: The Definitive Guide" book. (closes issue ASTERISK-22197) Reported by: Dalius M. Tested by: Dalius M. Patches: asterisk-22197-q-log-exitwithkey.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2901/ ........ Merged revisions 400622 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400623 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400624 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-05 00:59 +0000 [r400593] Richard Mudgett * /, channels/iax2/include/parser.h: chan_iax2: Fix compile error. ........ Merged revisions 400588 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-04 21:41 +0000 [r400568] Michael L. Young * main/acl.c, include/asterisk/netsock2.h, CHANGES, channels/chan_iax2.c, channels/iax2/parser.c, main/netsock.c, main/netsock2.c, /, channels/iax2/include/parser.h: Add IPv6 Support To chan_iax2 This patch adds IPv6 support to chan_iax2. Yay! (closes issue ASTERISK-22025) Patches: iax2-ipv6-v5-reviewboard.diff by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2660/ ........ Merged revisions 400567 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-04 19:32 +0000 [r400553] David M. Lee * rest-api/api-docs/applications.json (added), /: Added missing file from r400522 ........ Merged revisions 400552 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-04 19:11 +0000 [r400533-400543] Jonathan Rose * res/res_pjsip_logger.c, /: chan_pjsip: Make logger togglable without loading/unloading This patch makes the res_pjsip_logger do a few things... First, it will be built and installed by default now, so end users won't need to enable it in menuselect. Second, while it is loaded, it no longer will immediately issue log messages. Upon loading, it is in the disabled state and must be turned on with the new CLI command. The CLI command 'pjsip set logger has been added and can be used to do the following: pjsip set logger on: Enables logger for all PJSIP traffic pjsip set logger off: Disables logger for all PJSIP traffic pjsip set logger host : Enables logger for the specific host Review: https://reviewboard.asterisk.org/r/2900/ ........ Merged revisions 400542 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, contrib/ast-db-manage/config/versions/43956d550a44_add_tables_for_pjsip.py (added), configs/extconfig.conf.sample, configs/sorcery.conf.sample, contrib/ast-db-manage/config/versions/4da0c5f79a9c_create_tables.py: chan_pjsip: Add alembic scripts for generating db tables for PJSIP Also updates sample configurations for sorcery and extconfig to demonstrate how to use databases created by that alembic script. (closes issue ASTERISK-22133) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2892/ ........ Merged revisions 400532 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-04 16:01 +0000 [r400523] Matthew Jordan * res/res_stasis.c, main/asterisk.c, rest-api/api-docs/endpoints.json, rest-api/api-docs/events.json, res/stasis/app.c, /, rest-api-templates/ari_model_validators.h.mustache, include/asterisk/endpoints.h, res/res_ari_applications.c (added), res/ari/resource_endpoints.h, include/asterisk/stasis_app.h, res/stasis/app.h, rest-api/resources.json, include/asterisk/_private.h, res/ari/ari_model_validators.c, main/endpoints.c, res/ari/ari_model_validators.h, main/json.c, res/res_ari_model.c, res/ari.make, res/ari/resource_applications.c (added), res/ari/resource_applications.h (added): ARI: Add subscription support This patch adds an /applications API to ARI, allowing explicit management of Stasis applications. * GET /applications - list current applications * GET /applications/{applicationName} - get details of a specific application * POST /applications/{applicationName}/subscription - explicitly subscribe to a channel, bridge or endpoint * DELETE /applications/{applicationName}/subscription - explicitly unsubscribe from a channel, bridge or endpoint Subscriptions work by a reference counting mechanism: if you subscript to an event source X number of times, you must unsubscribe X number of times to stop receiveing events for that event source. Review: https://reviewboard.asterisk.org/r/2862 (issue ASTERISK-22451) Reported by: Matt Jordan ........ Merged revisions 400522 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-04 15:49 +0000 [r400511-400521] Joshua Colp * /, res/res_pjsip.c: Enclose the To URI and update its user portion if a request user has been specified. ........ Merged revisions 400520 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_session.c, /: Replace the connection address at the SDP level if altering the SDP with the external media address. ........ Merged revisions 400510 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 23:20 +0000 [r400482] Jonathan Rose * /, channels/chan_sip.c: chan_sip: Don't ignore expires value in contact header if it lacks semicolon (closes issue ASTERISK-22574) Reported by: Filip Jenicek Patches: chan_sip_expires.patch uploaded by Filip Jenicek (license 6277) ........ Merged revisions 400469 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400470 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400471 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 21:46 +0000 [r400461] Matthew Jordan * /, main/channel_internal_api.c: Remove publication of a channel snapshot when the technology is set This patch removes said publication for a few reasons: (1) It is unnecessary. Association of the channel technology with a specific channel is an implementation detail that should be assumed to "just happen", and consumers of Stasis don't need to be informed about it. (2) Publication of said message can now cause crashes, as the actual creation of a channel in normal locations now stages its messages. As a result, things that create dummy channels (such as the SIP RTP QOS unit test) and associate them with a channel technology were now crashing, as the channel itself was not known by Stasis. ........ Merged revisions 400460 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 20:22 +0000 [r400452] Mark Michelson * bridges/bridge_native_rtp.c, /, include/asterisk/bridge_technology.h: Fix assumption in bridge_native_rtp.c regarding number of participants in a bridge. When a party leaves a bridge, there may be more participants in the bridge than expected. As such, it is important not to make assumptions regarding the list of channels in a bridge. This change makes it so that when a party leaves a native RTP bridge, we unbridge it and the party it was bridged with. Previously, the first and last channels in the list were unbridged since it was assumed that these were the two channels that had been bridged. As previously stated, a new party had been inserted into the bridge, so this logic did not work properly. (closes issue ASTERISK-22615) reported by Matt Jordan Review: https://reviewboard.asterisk.org/r/2899 ........ Merged revisions 400403 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 19:32 +0000 [r400443] Joshua Colp * /, main/cdr.c: When serializing CDR variables (like for "core show channels") don't output an error if CDRs aren't enabled. ........ Merged revisions 400442 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 19:30 +0000 [r400441] Kinsey Moore * /, main/security_events.c: Fix security events for AMI invalid password In r337595, additional security events were added for chan_sip authentication failures. The new IEs added to the existing invalid password event were defined as required IEs, but existing users of the event did not set the new IEs and could not since they didn't apply to existing uses. They are now marked as optional IEs. (closes issue ASTERISK-22578) Reported by: Matt Jordan ........ Merged revisions 400421 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400440 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 19:06 +0000 [r400402] Joshua Colp * res/ari/resource_channels.c, /: Fix a crash caused by muting and unmuting a channel in ARI without specifying a direction. (closes issue ASTERISK-22637) Reported by: Scott Griepentrog Patch by Matt Jordan, whose office I have taken over in the name of Canada. ........ Merged revisions 400401 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 18:51 +0000 [r400399] Richard Mudgett * /, main/cel.c: cel: Some whitespace cleanups ........ Merged revisions 400398 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 18:32 +0000 [r400385-400397] Kinsey Moore * res/res_rtp_multicast.c, /: res_rtp_multicast: Ensure SSRC is set properly This fixes a bug where the SSRC field on multicast RTP can be stuck at 0 which can cause problems for endpoints trying to make sense of incoming streams. (closes issue ASTERISK-22567) Reported by: Simone Camporeale Patches: 22567_res_mulitcast_ssrc.patch uploaded by Simone Camporeale (License 6536) ........ Merged revisions 400393 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400394 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400395 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, configure, include/asterisk/autoconfig.h.in, configure.ac, main/xml.c: Detect and use xsltCleanupGlobals when available This introduces usage of an additional libxslt cleanup function, xsltCleanupGlobals, when the configure script detects that it is available. Early versions of the library did not include this function. (closes issue ASTERISK-22570) Reported by: Corey Farrell Patches: xsltCleanupGlobals.patch uploaded by Corey Farrell (License 5909) ........ Merged revisions 400384 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 16:28 +0000 [r400374] Richard Mudgett * channels/chan_vpb.cc, /: chan_vpb: Make compile again. ........ Merged revisions 400373 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 14:59 +0000 [r400363-400364] Mark Michelson * tests/test_cel.c, /: Get rid of uses of stasis_topic_wait() ........ Merged revisions 400362 from http://svn.asterisk.org/svn/asterisk/branches/12 * pbx/pbx_spool.c, main/manager.c, main/format_cap.c, channels/chan_skinny.c, res/res_agi.c, channels/chan_motif.c, channels/chan_alsa.c, apps/app_confbridge.c, addons/chan_mobile.c, channels/chan_mgcp.c, res/res_clioriginate.c, channels/chan_bridge_media.c, channels/chan_sip.c, tests/test_format_api.c, res/res_pjsip_sdp_rtp.c, bridges/bridge_simple.c, apps/app_originate.c, res/parking/parking_applications.c, main/core_local.c, channels/chan_console.c, channels/chan_oss.c, include/asterisk/format_cap.h, res/res_pjsip_session.c, res/ari/resource_bridges.c, channels/chan_jingle.c, channels/chan_misdn.c, channels/dahdi/bridge_native_dahdi.c, res/res_pjsip/pjsip_configuration.c, main/file.c, channels/chan_h323.c, channels/chan_nbs.c, bridges/bridge_native_rtp.c, tests/test_config.c, res/res_stasis.c, channels/chan_pjsip.c, channels/chan_unistim.c, channels/chan_multicast_rtp.c, addons/chan_ooh323.c, main/rtp_engine.c, /, main/ccss.c, apps/app_meetme.c, bridges/bridge_holding.c, main/bridge_basic.c, bridges/bridge_softmix.c, channels/chan_gtalk.c, channels/chan_iax2.c, main/media_index.c, main/channel.c, channels/chan_phone.c, channels/chan_dahdi.c, main/dial.c: Cache string values of formats on ast_format_cap() to save processing. Channel snapshots have string representations of the channel's native formats. Prior to this change, the format strings were re-created on ever channel snapshot creation. Since channel native formats rarely change, this was very wasteful. Now, string representations of formats may optionally be stored on the ast_format_cap for cases where string representations may be requested frequently. When formats are altered, the string cache is marked as invalid. When strings are requested, the cache validity is checked. If the cache is valid, then the cached strings are copied. If the cache is invalid, then the string cache is rebuilt and copied, and the cache is marked as being valid again. Review: https://reviewboard.asterisk.org/r/2879 ........ Merged revisions 400356 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-03 14:52 +0000 [r400361] Joshua Colp * res/res_pjsip_sdp_rtp.c, res/res_pjsip_t38.c, /: Fix crashes in res_pjsip_sdp_rtp and res_pjsip_t38 when a stream is rejected and external_media_address is set. The callback function for changing the media address in streams wrongly assumes that a connection line will always be present. This is false as no line is present if a stream has been rejected. (closes issue ASTERISK-22645) Reported by: Rusty Newton ........ Merged revisions 400360 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 22:22 +0000 [r400335] Mark Michelson * main/stasis_wait.c (removed), res/ari/resource_endpoints.c, /, include/asterisk/stasis.h, tests/test_cel.c, include/asterisk/stasis_endpoints.h, channels/chan_pjsip.c, main/stasis.c, main/stasis_endpoints.c: Multiple revisions 400318-400319 ........ r400318 | mmichelson | 2013-10-02 17:08:49 -0500 (Wed, 02 Oct 2013) | 12 lines Remove unnecessary waits from stasis. Since caches are updated on publisher threads, there is no need to wait for the cache updates to occur after a stasis message is published. In the case of chan_pjsip device state changes, this set of changes caused an improvement to performance. Review: https://reviewboard.asterisk.org/r/2890 ........ r400319 | mmichelson | 2013-10-02 17:10:54 -0500 (Wed, 02 Oct 2013) | 3 lines Remove svn:mergeinfo property. ........ Merged revisions 400318-400319 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 21:33 +0000 [r400317] Michael L. Young * channels/chan_iax2.c, /: Cast Integer Argument To Unsigned Char The member reg in the peercnt structure is an unsigned char and peercnt_modify() is expecting an unsigned char argument which gets assigned to peercnt->reg. This patch fixes that by casting the integer argument being passed to peercnt_modify to unsigned char. ........ Merged revisions 400314 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400315 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400316 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 21:26 +0000 [r400313] Matthew Jordan * main/cdr.c, main/manager.c, /, main/cel.c: Only create Stasis subscriptions when enabled Subscribing to Stasis isn't free. As such, this patch makes AMI, CDR, and CEL - the "big 3" - only subscribe when enabled. Toggling their availability via a .conf file will unsubscribe/subscribe as appropriate. Review: https://reviewboard.asterisk.org/r/2888/ ........ Merged revisions 400312 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 20:31 +0000 [r400304] Richard Mudgett * main/pbx.c, /: Originate: Make setting caller id on outgoing call use either name or number. Previous code was requiring both name and number to be available. Also restored a comment block on why caller id is also set on an outgoing call leg in addition to connected line from earlier versions of Asterisk. ........ Merged revisions 400303 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 19:20 +0000 [r400295] Kinsey Moore * /, rest-api/api-docs/asterisk.json: Correct allowable values for ARI general information filter ........ Merged revisions 400291 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 19:17 +0000 [r400287] Matthew Jordan * main/cdr.c, /: Fix the CDR CLI command 'cdr show active {channel}' When the switch from channel names to channel unique IDs happened, the poor CLI command got left in the dust. This fixes the command so that users can once again see how Asterisk is messing up your billing information. ........ Merged revisions 400286 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 18:44 +0000 [r400285] Joshua Colp * /, res/res_pjsip_t38.c: Fix a crash in res_pjsip_t38 caused by the wrong assumption that a session will always have a channel. When starting up or shutting down this assumption is false. ........ Merged revisions 400284 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 18:28 +0000 [r400282] Tzafrir Cohen * Makefile, doc/astdb2sqlite3.8 (added), /, doc/astdb2bdb.8 (added): man pages for astdb2bdb and astdb2sqlite3 Review: https://reviewboard.asterisk.org/r/2898/ ........ Merged revisions 400279 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400281 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 17:12 +0000 [r400269-400271] Richard Mudgett * apps/app_stack.c, res/stasis_recording/stored.c, main/json.c, main/stasis_cache.c, res/res_ari.c, /, main/utils.c: MALLOC_DEBUG: Fix some misuses of free() when MALLOC_DEBUG is enabled. * There were several places in ARI where an external library was mallocing memory that must always be released with free(). When MALLOC_DEBUG is enabled, free() is redirected to the MALLOC_DEBUG version. Since the external library call still uses the normal malloc(), MALLOC_DEBUG complains that the freed memory block is not registered and will not free it. These cases must use ast_std_free(). * Changed calls to asprintf() and vasprintf() to the equivalent ast_asprintf() and ast_vasprintf() versions respectively. ........ Merged revisions 400270 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/sig_ss7.c, /: sig_ss7: Fix compiler warnings. ........ Merged revisions 400268 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-02 16:23 +0000 [r400246-400266] Joshua Colp * channels/chan_alsa.c, main/stasis_channels.c, channels/sig_ss7.c, channels/chan_pjsip.c, channels/chan_mgcp.c, channels/chan_unistim.c, apps/app_dial.c, main/pbx.c, /, channels/chan_sip.c, main/bridge.c, include/asterisk/channel.h, channels/chan_gtalk.c, channels/chan_console.c, channels/sig_pri.c, channels/chan_iax2.c, channels/chan_jingle.c, main/channel.c, channels/chan_dahdi.c, main/dial.c, include/asterisk/stasis_channels.h, channels/chan_skinny.c, channels/chan_motif.c: Reduce channel snapshot creation and publishing by up to 50%. This change introduces the ability to stage channel snapshot creation and publishing by suppressing the implicit creation and publishing that some functions have. Once all operations are executed the staging is marked as done and a single snapshot is created and published. Review: https://reviewboard.asterisk.org/r/2889/ ........ Merged revisions 400265 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_session.c, /: Fix a random one way audio issue in PJSIP. Due to the asynchronous design of the PJMEDIA SDP negotiator it was possible for the SDP to be negotiated *after* a channel was created and after it was being wait on by an application. It is only after negotiation occurs that the file descriptors for RTP are placed on the channel. Since the channel was already being waited on these file descriptors were not monitored, causing incoming media to never be read. This change wakes up any application waiting on the channel so that added file descriptors end up being monitored. (closes issue AST-1227) Reported by: John Bigelow ........ Merged revisions 400256 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/stasis/control.c, include/asterisk/stasis_app.h, res/ari/resource_channels.c: Allow specifying a channel to dial an extension and context in an ARI dial operation. (issue ASTERISK-22625) Reported by: Scott Griepentrog ........ Merged revisions 400254 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip_session.c: Retrieve and store the hostname only once so multiple threads do not potentially initialize it at the same time. ........ Merged revisions 400245 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-01 21:19 +0000 [r400228-400237] Richard Mudgett * channels/chan_dahdi.c, channels/sig_analog.c, /: chan_dahdi: Fix analog parking using flash-hook. Transferring an analog call using a flash-hook to parking would fail to park the call and result in an invalid ao2 object unref. * Park the correct bridged channel. ........ Merged revisions 400236 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/features_config.c, /: Features: Rearm the parking config options have moved warning for each reload. ........ Merged revisions 400227 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-10-01 15:54 +0000 [r400218] Matthew Jordan * main/cdr.c, /: Filter out internal channels for bridge leave messages and parked call messages Granted, if you manage to park a Conference announcer channel, something has gone horrifically wrong. ........ Merged revisions 400217 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-30 21:40 +0000 [r400206] Jonathan Rose * configs/features.conf.sample, /, configs/res_parking.conf.sample: configuration samples: Pull all parking related stuff out of features.conf This patch also adds documentation for parking from features.conf to res_parking.conf ........ Merged revisions 400205 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-30 19:58 +0000 [r400195-400197] Matthew Jordan * /, funcs/func_cdr.c: Parse arguments passed to the CDR_PROP function correctly I can only blame this on a bad merge, because this in no way worked properly the way it was written. Mea culpa. The function should now parse its arguments correctly and function properly. (Note that the API used by the CDR_PROP function has working unit tests... this was merely bad coding of the actual registered function) (closes issue ASTERISK-22613) Reported by: Private Name ........ Merged revisions 400196 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: Remove spurious event raised when CDRs are reloaded The Reload event is now raised by the module loading core. As such, the Reload event in the CDR engine was a duplicate and not needed. ........ Merged revisions 400194 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-30 18:55 +0000 [r400186] David M. Lee * tests/test_devicestate.c, include/asterisk/sem.h (added), tests/test_taskprocessor.c, res/res_pjsip_mwi.c, res/res_pjsip/include/res_pjsip_private.h, tests/test_stasis.c, res/parking/parking_manager.c, res/res_security_log.c, channels/chan_mgcp.c, main/stasis_cache_pattern.c, main/pbx.c, include/asterisk/vector.h (added), /, main/ccss.c, apps/app_meetme.c, include/asterisk/taskprocessor.h, configs/stasis.conf.sample (removed), configure.ac, res/parking/parking_applications.c, channels/sig_pri.c, apps/app_queue.c, main/cel.c, main/stasis.c, channels/chan_dahdi.c, funcs/func_presencestate.c, main/stasis_message_router.c, configure, apps/confbridge/confbridge_manager.c, res/res_agi.c, main/manager_system.c, res/res_stasis_test.c, main/sem.c (added), main/manager_channels.c, res/res_pjsip_refer.c, main/manager_mwi.c, apps/app_voicemail.c, main/stasis_cache.c, main/stasis_wait.c, main/stasis_config.c (removed), include/asterisk/stasis_internal.h, res/stasis/app.c, channels/chan_sip.c, include/asterisk/autoconfig.h.in, main/manager_endpoints.c, main/channel_internal_api.c, include/asterisk/stasis.h, main/devicestate.c, main/taskprocessor.c, res/res_xmpp.c, main/sounds_index.c, include/asterisk/stasis_message_router.h, channels/chan_iax2.c, res/res_jabber.c, main/endpoints.c, main/astobj2.c, res/res_chan_stats.c, res/parking/parking_bridge_features.c, tests/test_stasis_endpoints.c, main/cdr.c, main/channel.c, main/manager_bridges.c, main/manager.c, channels/chan_skinny.c: Multiple revisions 399887,400138,400178,400180-400181 ........ r399887 | dlee | 2013-09-26 10:41:47 -0500 (Thu, 26 Sep 2013) | 1 line Minor performance bump by not allocate manager variable struct if we don't need it ........ r400138 | dlee | 2013-09-30 10:24:00 -0500 (Mon, 30 Sep 2013) | 23 lines Stasis performance improvements This patch addresses several performance problems that were found in the initial performance testing of Asterisk 12. The Stasis dispatch object was allocated as an AO2 object, even though it has a very confined lifecycle. This was replaced with a straight ast_malloc(). The Stasis message router was spending an inordinate amount of time searching hash tables. In this case, most of our routers had 6 or fewer routes in them to begin with. This was replaced with an array that's searched linearly for the route. We more heavily rely on AO2 objects in Asterisk 12, and the memset() in ao2_ref() actually became noticeable on the profile. This was #ifdef'ed to only run when AO2_DEBUG was enabled. After being misled by an erroneous comment in taskprocessor.c during profiling, the wrong comment was removed. Review: https://reviewboard.asterisk.org/r/2873/ ........ r400178 | dlee | 2013-09-30 13:26:27 -0500 (Mon, 30 Sep 2013) | 24 lines Taskprocessor optimization; switch Stasis to use taskprocessors This patch optimizes taskprocessor to use a semaphore for signaling, which the OS can do a better job at managing contention and waiting that we can with a mutex and condition. The taskprocessor execution was also slightly optimized to reduce the number of locks taken. The only observable difference in the taskprocessor implementation is that when the final reference to the taskprocessor goes away, it will execute all tasks to completion instead of discarding the unexecuted tasks. For systems where unnamed semaphores are not supported, a really simple semaphore implementation is provided. (Which gives identical performance as the original taskprocessor implementation). The way we ended up implementing Stasis caused the threadpool to be a burden instead of a boost to performance. This was switched to just use taskprocessors directly for subscriptions. Review: https://reviewboard.asterisk.org/r/2881/ ........ r400180 | dlee | 2013-09-30 13:39:34 -0500 (Mon, 30 Sep 2013) | 28 lines Optimize how Stasis forwards are dispatched This patch optimizes how forwards are dispatched in Stasis. Originally, forwards were dispatched as subscriptions that are invoked on the publishing thread. This did not account for the vast number of forwards we would end up having in the system, and the amount of work it would take to walk though the forward subscriptions. This patch modifies Stasis so that rather than walking the tree of forwards on every dispatch, when forwards and subscriptions are changed, the subscriber list for every topic in the tree is changed. This has a couple of benefits. First, this reduces the workload of dispatching messages. It also reduces contention when dispatching to different topics that happen to forward to the same aggregation topic (as happens with all of the channel, bridge and endpoint topics). Since forwards are no longer subscriptions, the bulk of this patch is simply changing stasis_subscription objects to stasis_forward objects (which, admittedly, I should have done in the first place.) Since this required me to yet again put in a growing array, I finally abstracted that out into a set of ast_vector macros in asterisk/vector.h. Review: https://reviewboard.asterisk.org/r/2883/ ........ r400181 | dlee | 2013-09-30 13:48:57 -0500 (Mon, 30 Sep 2013) | 28 lines Remove dispatch object allocation from Stasis publishing While looking for areas for performance improvement, I realized that an unused feature in Stasis was negatively impacting performance. When a message is sent to a subscriber, a dispatch object is allocated for the dispatch, containing the topic the message was published to, the subscriber the message is being sent to, and the message itself. The topic is actually unused by any subscriber in Asterisk today. And the subscriber is associated with the taskprocessor the message is being dispatched to. First, this patch removes the unused topic parameter from Stasis subscription callbacks. Second, this patch introduces the concept of taskprocessor local data, data that may be set on a taskprocessor and provided along with the data pointer when a task is pushed using the ast_taskprocessor_push_local() call. This allows the task to have both data specific to that taskprocessor, in addition to data specific to that invocation. With those two changes, the dispatch object can be removed completely, and the message is simply refcounted and sent directly to the taskprocessor. Review: https://reviewboard.asterisk.org/r/2884/ ........ Merged revisions 399887,400138,400178,400180-400181 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-30 15:57 +0000 [r400142] Kinsey Moore * /, channels/chan_sip.c, configs/pjsip.conf.sample, res/res_pjsip_outbound_registration.c, configs/sip.conf.sample, CHANGES: chan_sip: Allow Asterisk to retry after 403 on register This adds a global option in chan_sip to allow it to continue attempting registration if a 403 is received, clearing the cached nonce and treating it as a non-fatal response. Normally, this would cause registration attempts to that endpoint to stop. This also adds a similar per-outbound-registration option to chan_pjsip which allows the retry interval to be altered for 403 responses to REGISTER requests. (closes issue ASTERISK-17138) Review: https://reviewboard.asterisk.org/r/2874/ Reported by: Rudi ........ Merged revisions 400137 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400140 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400141 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-28 22:57 +0000 [r400059-400122] Matthew Jordan * /, res/res_pjsip_notify.c, configs/pjsip_notify.conf.sample (added): res_pjsip_notify: Add documentation We forgot to add documentation for res_pjsip_notify, which would prevent it from being loaded. Whoops. This patch also updates res_pjsip_notify to use pjsip_notify.conf, which now has its own sample file in the configs directory as well. Review: https://reviewboard.asterisk.org/r/2835/ ........ Merged revisions 400121 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Correct erroneous lost packet information in RTCP reports RTCP's calculation of the number of lost packets in an RTP stream is based on that stream's sequence number count, the number of received packets, and how many packets we expect to receive. When the SSRC for an RTP stream changes, there can - and almost always will be - a large jump in the next packet's timestamp and sequence number. If we don't reset the number of received packets, sequence number count, and other metrics used by RTCP, the next RR/SR report will use the previous SSRC's values to calculate the lost packet count for the new SSRC - resulting in a very large number of lost packets. This patch modifies res_rtp_asterisk such that, if it detects a SSRC change, it will reset the various values used by the RTCP calculations. From the perspective of RTCP, this appears as a new media stream - which is what it is. Review: https://reviewboard.asterisk.org/r/2886/ (closes issue AST-1174) Reported by: Thomas Arimont ........ Merged revisions 400089 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400093 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400108 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, configure, configure.ac: Add check for openSUSE when detecting bfd library In ASTERISK-17842, some additional library checks were added to the configure script so that the bfd library could be found on CentOS and Fedora systems. As it turns out, openSUSE requires an additional library. This patch adds another check to the configure script for openSUSE that will add that library. Review: https://reviewboard.asterisk.org/r/2885/ (closes issue AST-1169) Reported by: Guenther Kelleter ........ Merged revisions 400073 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400075 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400077 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: CDR: Improve handling of parking; resolve assertion when originating into park This patch covers two problems: 1) Currently, when a call is transferred into a parking lot from a bridge (using either the blind transfer or one touch parking mechanisms), the application fails to be set to "Park" in the resulting CDR record for the parked channel. This is due to the ParkedCall message arriving before the BridgeEnter for the channel entering the parking bridge. The ParkedCall message isn't handled as the CDR for the channel has already been finalized (due to the channel having left its two party bridge), and the BridgeEnter - which creates the new CDR - doesn't have the parking information. This patch modifies the behavior so that reception of a ParkedCall message will - if not handled by a CDR chain - cause a new CDR to be created and put into the Parking state. 2) It fixes a FRACK that occurred when a channel is originated into a parking space. The DialedPending state - which occurs for both Dialed and Originated channels - assumed that it couldn't handle the parking transitions due to it having a Party B; however, Originated channels don't have a Party B. As such, the existing CDR needs to transition into the parking state - this patch does that. Review: https://reviewboard.asterisk.org/r/2877/ (closes issue ASTERISK-22482) Reported by: Richard Mudgett ........ Merged revisions 400062 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_queue.c: app_queue: Make manager events tolerant of Local channel shenanigans app_queue currently attempts to handle Local channel optimizations in an effort to provide accurate information in Stasis messages (and their corresponding AMI events) as well as the Queue log. Sometimes, however, things don't go as planned. Consider the following scenario: SIP/foo <-> L;1 <-> L;2 <-> SIP/agent SIP/agent answers, triggering a Local channel optimization. app_queue will normally do the following: * Listen for the Local optimization events and update our agent accordingly to SIP/agent in the queue log and messages * When we get a hangup, publish the AgentComplete event based on our information (SIP/foo and SIP/agent) However, as with all things that depend on sanity from something as capricious as Local channels, things can go wrong: (1) SIP/agent immediately hangs up upon answering. This triggers a race condition between termination messages coming from SIP/agent and the ongoing Local channel optimization messages. (Note that this can also occur with SIP/foo) (2) In a race condition, Asterisk can (rarely) deliver the hangup messages prior to the Local channel optimization. In that case, the messages *may* arrive to app_queue in the following order: * Hangup SIP/Agent * Hangup SIP/foo * Optimize L;1/L;2 * Hangup L;2 * Hangup L;1 When app_queue receives the hangup of the agent or the caller, it will attempt to publish the AgentComplete event. However, it now has a problem - it thinks its agent is the ;1 side of the Local channel, as it never received the optimization event. At the same time, that channel is already gone. This results in getting NULL from the Stasis cache. What's more, we can't really wait for the optimization message, as we are currently handling the hangup of the channel that the optimization event would tell us to use. This patch modifies the behavior in app_queue such that, since we still have a lot of pertinent queue information (interface, queue name, etc.), we now raise the event with what information we know. The channels involved now may or may not be present. Users will still at least get the "AgentComplete" event, which "completes" the known Agent information. Review: https://reviewboard.asterisk.org/r/2878/ (closes issue ASTERISK-22507) Reported by: Richard Mudgett ........ Merged revisions 400060 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/manager.c, /: manager: Fix crash when appending a manager channel variable In r399887, a minor performance improvement was introduced by not allocating the manager variable struct if it wasn't used. Unfortunately, when directly accessing an ast_channel struct, manager assumed that the struct was always allocated. Since this was no longer the case, things got a bit crashy. This fixes that problem by simply bypassing appending variables if the manager channel variable struct isn't there. ........ Merged revisions 400058 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 21:58 +0000 [r400016-400021] Richard Mudgett * apps/app_cdr.c, res/res_parking.c, /: app_cdr and res_parking: Fix some resource leaks. * app_cdr left the ResetCDR application registered. * res_parking leaked a ref to config global. (closes issue ASTERISK-22566) Reported by: Corey Farrell Patches: ASTERISK-22566-r2.patch (license #5909) patch uploaded by Corey Farrell ........ Merged revisions 400020 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/sip/reqresp_parser.c, /, channels/chan_sip.c: chan_sip: Increase some scratch buffer sizes dealing with caller id. * Eliminated an unnecessary initialization in check_user_full(). (closes issue ASTERISK-22477) Reported by: Michael Shepelev ........ Merged revisions 400013 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 400014 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 400015 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 19:18 +0000 [r400000] Sean Bright * configs/sip.conf.sample: Remove some trailing whitespace and steal revision 400000. 2013-09-27 18:28 +0000 [r399991] Kevin Harwell * /, res/res_pjsip.c, res/res_pjsip_session.c, include/asterisk/res_pjsip.h, res/res_pjsip.exports.in: res_pjsip: crash when using localnet and external_signaling_address options There was a collision of mod_data use on the transaction between using a nat hook and an session response callback. During state change it was assumed what was in the mod_data was nothing or the response callback. However, it was possible for it to also contain a nat hook thus resulting in a bad cast and a crash. Added the ability to store multiple data elements in mod_data via a hash table. In this instance, mod_data now stores a hash table of the two values that can be retrieved using an associated string key. (closes issue ASTERISK-22394) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/2843/ ........ Merged revisions 399990 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 17:46 +0000 [r399978] Jonathan Rose * channels/sip/include/sip.h, /, channels/chan_sip.c: chan_sip: Reject calls on 200 OKs if no SDP has been received When Asterisk receives a 200 OK in response to an invite, that peer should have sent an SDP at some point by then. If the channel has never received an SDP, media won't have been set and the remote address won't be known. Endpoints in general should not be doing this. This patch makes it so that Asterisk will simply hang up a call if it sends a 200 OK at this point. So far this odd behavior for endpoints has only been observed in tests which involved manually created SIP transactions in SIPp. (closes issue ASTERISK-22424) Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/2827/ ........ Merged revisions 399939 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399962 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399976 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 17:11 +0000 [r399938] Richard Mudgett * include/asterisk/astobj2.h, tests/test_astobj2.c, main/astobj2.c, /: astobj2: Remove OBJ_CONTINUE support. OBJ_CONTINUE was a strange feature that came into the world under suspicious circumstances to support an abuse of the ao2_container by chan_iax2. Since chan_iax2 no longer uses OBJ_CONTINUE, it is safe to remove it. The simplified code should help performance slightly and make understanding the code easier. Review: https://reviewboard.asterisk.org/r/2887/ ........ Merged revisions 399937 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 14:35 +0000 [r399925] Mark Michelson * /, bridges/bridge_native_rtp.c: Fix refleaks of ast_rtp_instance structures. These refleaks were causing bridged calls not to close their RTP ports. Thus a call would leave open 4 ports (RTP for party A, RTCP for party A, RTP for party B, and RTCP for party B). This led to an eventual depletion of available RTP ports. ........ Merged revisions 399924 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-27 14:08 +0000 [r399913] Kinsey Moore * tests/test_cel.c, main/cel.c, /, include/asterisk/cel.h: Restore usefulness of the CEL Peer field This change makes the CEL peer field useful again for BRIDGE_ENTER and BRIDGE_EXIT events and fills the field with a comma-separated list of all channels in the bridge other than the channel that is entering or exiting the bridge. Review: https://reviewboard.asterisk.org/r/2840/ (closes issue ASTERISK-22393) ........ Merged revisions 399912 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-26 18:51 +0000 [r399898] Kevin Harwell * res/res_pjsip_registrar.c, include/asterisk/res_pjsip.h, res/res_pjsip.exports.in, /, res/res_pjsip/security_events.c: pjsip: race condition in registrar While handling a registration request a race condition could occur if/when two+ clients registered at the same time. This happened when one request obtained a copy of the current contacts for an AOR and another request did the same before the first request updated. Thus the second would update and overwrite the first (or vice-versa depending on which actually updated first). In the case of it being the same contact two "add" events would be raised. pjsip registration handling is now serialized to alleviate this issue. (closes issue AST-1213) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/2860/ ........ Merged revisions 399897 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-26 14:13 +0000 [r399875] Rusty Newton * /, apps/app_dial.c: Adding a few words to the Dial option 'r' help text to clarify its tone argument description ........ Merged revisions 399874 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-25 20:38 +0000 [r399844] Richard Mudgett * channels/sig_ss7.c, channels/chan_dahdi.c, /: chan_dahdi: CLI "core stop gracefully" has needless delay for PRI and SS7. The PRI and SS7 link control threads are not stopped correctly when the chan_dahdi.so module is unloaded. The link control threads pri_dchannel() and ss7_linkset() are not awakened from a poll() to cancel the thread. * Added a SIGURG signal after requesting the thread cancel to break the link control thread poll() immediately. For SS7 it was slightly worse, the link poll() timeout would always be whatever was the last libss7 scheduled event time used. If no libss7 scheduled event was pending, the thread could run more often than necessary. * Set nextms to 60 seconds for the ss7_linkset() poll() if there is no other libss7 scheduled event. ........ Merged revisions 399818 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399834 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399842 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-25 19:43 +0000 [r399799] Rusty Newton * /, res/res_pjsip.c: Broke the build - Fixing XML DTD violation added in r399782, missing tags inside a ........ Merged revisions 399798 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-25 19:29 +0000 [r399797] Michael L. Young * /, channels/chan_sip.c: chan_sip: Fix Realtime Peer Update Problem When Un-registering And Expires Header In 200ok 1st Issue When a realtime peer sends an un-REGISTER request, Asterisk un-registers the peer but the database table record still has regseconds and fullcontact for the peer. This results in calls attempting to be routed to the peer which is no longer registered. The expected behavior is to get busy/congested when attempting to call an un-registered peer through the dialplan. What was discovered is that we are clearing out the peer's registration in the database in parse_register_contact() when calling expire_register() but then upon returning from parse_register_contact(), update_peer() is run which stores back in the database table regseconds and fullcontact. 2nd Issue The reporter pointed out that the 200 ok being returned by Asterisk after un-registering a peer contains a Contact header with ;expires= and the Expires header is not set to 0. This is actually a regression. Tests were created for this second issue (ASTERISK-22548). The tests have been reviewed and a Ship It! was received on those tests. This patch does the following: * Do not ignore the Expires header value even when it is set to 0. The patch sets the pvt->expiry earlier on in the function so that it is set properly and used. * If pvt->expiry is 0, do not call update_peer since that means the peer has already been un-registered and there is no need to update the database record again since nothing has changed. (closes issue ASTERISK-22428) Reported by: Ben Smithurst Tested by: Ben Smithurst, Michael L. Young Patches: asterisk-22428-rt-peer-update-and-expires-header.diff by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2869/ ........ Merged revisions 399794 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399795 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399796 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-25 18:38 +0000 [r399782] Rusty Newton * /, res/res_pjsip.c: Fixing documentation for the configOption "external_media_address" of both Endpoints and Transports Re-using some of Mark Michelson's text from an E-mail discussion for: * Modifying synopsis for both options * Adding description to both options * Changing name of "external_media_address" for Endpoint configuration to "media_address" in anticipation of the option name being changed. (As it is not really specific to external destinations) (issue ASTERISK-22405) (closes issue ASTERISK-22405) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/2850/ ........ Merged revisions 399781 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-24 22:55 +0000 [r399737-399750] Richard Mudgett * /, main/astobj2.c: astobj2: Made use OBJ_SEARCH_xxx identifiers as field enum values internally. * Made ao2_unlink to protect itself from stray OBJ_SEARCH_xxx values passed in. ........ Merged revisions 399749 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Prevent some needless breaking of the native IAX2 bridge. * Clean up some twisted code in the iax2_bridge() loop. * Add AST_CONTROL_VIDUPDATE and AST_CONTROL_SRCCHANGE to a list of frames to prevent the native bridge loop from breaking. * Passing the AST_CONTROL_T38_PARAMETERS frame should also allow FAX over a native IAX2 bridge. (issue ABE-2912) Review: https://reviewboard.asterisk.org/r/2870/ ........ Merged revisions 399697 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399708 from http://svn.asterisk.org/svn/asterisk/branches/11 For v12 and above this is really just documentation until IAX2 native bridging is restored. ........ Merged revisions 399736 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-24 19:22 +0000 [r399667-399696] Matthew Jordan * apps/app_queue.c, /: app_queue: Don't be quite so aggressive in initializing the array We only need the first character. ........ Merged revisions 399695 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_queue.c, /: app_queue: Initialize array holding MixMonitor exec options If the channel variable MONITOR_EXEC is set, app_queue will pass the specified execution parameters to the MixMonitor application when a queue is recorded. If that channel variable is not set, the buffer that holds the escaped value was not being initialized to NULL, and so would be passed to the MixMonitor application with garbage. Hilarity ensued as app_mixmonitor attempted to execute gobeldy-gook. ........ Merged revisions 399681 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/stasis_bridges.c, tests/test_cdr.c, main/cdr.c, /: Fix a performance problem CDRs There is a large performance price currently in the CDR engine. We currently perform two ao2_callback calls on a container that has an entry for every channel in the system. This is done to create matching pairs between channels in a bridge. As such, the portion of the CDR logic that this patch deals with is how we make pairings when a channel enters a mixing bridge. In general, when a channel enters such a bridge, we need to do two things: (1) Figure out if anyone in the bridge can be this channel's Party B. (2) Make pairings with every other channel in the bridge that is not already our Party B. This is a two step process. In the first step, we look through everyone in the bridge and see if they can be our Party B (single_state_process_bridge_enter). If they can - yay! We mark our CDR as having gotten a Party B. If not, we keep searching. If we don't find one, we wait until someone joins who can be our Party B. Step 2 is where we changed the logic (handle_bridge_pairings and bridge_candidate_process). Previously, we would first find candidates - those channels in the bridge with us - from the active_cdrs_by_channel container. Because a channel could be a candidate if it was Party B to an item in the container, the code implemented multiple ao2_container callbacks to get all the candidates. We also had to store them in another container with some other meta information. This was rather complex and costly, particularly if you have 300 Local channels (600 channels!) going at once. Luckily, none of it is needed: when a channel enters a bridge (which is when we're figuring all this stuff out), the bridge snapshot tells us the unique IDs of everyone already in the bridge. All we need to do is: For all channels in the bridge: If the channel is us or our Party B that we got in step 1, skip it Compare us and the candidate to figure out who is Party A (based on some specific rules) If we are Party A: Make a new CDR for us, append it to our chain, and set the candidate as Party B If they are Party A: If they don't have a Party B: Make a new CDR for them, append us to their chain, and us as Party B Otherwise: Copy us over as Party B on their existing CDR. This patch does that. Because we now use channel unique IDs to find the candidates during bridging, active_cdrs_by_channel now looks up things using uniqueid instead of channel name. This makes the more complex code simpler; it does, however, have the drawback that dialplan applications and functions will be slightly slower as they have to iterate through the container looking for the CDR by name. That's a small price to pay however as the bridging code will be called a lot more often. This patch also does two other minor changes: (1) It reduces the container size of the channels in a bridge snapshot to 1. In order to be predictable for multi-party bridges, the order of the channels in the container must be stable; that is, it must always devolve to a linked list. (2) CDRs and the multi-party test was updated to show the relationship between two dialed channels. You still want to know if they talked - previously, dialed channels were always ignored, which is wrong when they have managed to get a Party B. (closes issue ASTERISK-22488) Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/2861/ ........ Merged revisions 399666 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-23 12:03 +0000 [r399625] Joshua Colp * res/res_pjsip.c, res/res_pjsip_session.c, /: Fix crash in res_pjsip on load if error occurs, and prevent unloading of res_pjsip and res_pjsip_session. During load time in res_pjsip if an error occurred the operation would attempt to rollback all operations done during load. This is not permitted by PJSIP as it will assert if the operation has not been done. This fix changes the code so it will only rollback what has been initialized already. Further changes also prevent res_pjsip and res_pjsip_session from being unloaded. This is due to limitations within PJSIP itself. The library environment can only be changed to a certain extent and does not provide the ability, currently, to deinitialize certain required functionality. (closes issue ASTERISK-22474) Reported by: Corey Farrell ........ Merged revisions 399624 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-21 04:49 +0000 [r399578-399608] Richard Mudgett * res/res_rtp_asterisk.c, /: res_rtp_asterisk: Fix ref leaks in ast_rtcp_read(). Moved rtcp_report RAII_VAR declaration into the loop so it is unref'ed after every loop. Moved message_blob to loop and switched it to a regular variable. The regular variable was used since message_blob is used in a very contained way. (closes issue ASTERISK-22565) Reported by: Corey Farrell Patches: rtcp_report-leak.patch (license #5909) patch uploaded by Corey Farrell Tested by: Corey Farrell ........ Merged revisions 399607 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/media_index.c: media_index: Fix process_description_file() memory leak of file_id_persist. ........ Merged revisions 399596 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/features_config.c: features_config: Fix config ref leak of parkinglots. This leak happend for just about every channel created. ........ Merged revisions 399585 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, apps/app_queue.c: app_queue: Fix json blob ref leak. The json ref from queue_member_blob_create() was never released. ........ Merged revisions 399583 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/json.c, /: json: Make it obvious that ast_json_unref() is NULL safe. It looked like the safety check was done after the NULL pointer was used. ........ Merged revisions 399576 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-20 22:44 +0000 [r399566] Kinsey Moore * main/config_options.c, /: Ensure global types in the config framework are initialized If a config object was allocated but one of its global objects was never encountered, then the global object's defaults were never applied. Ensure that global objects are initialized properly upon allocation instead of on configuration. Review: https://reviewboard.asterisk.org/r/2866/ ........ Merged revisions 399564 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399565 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-20 22:06 +0000 [r399554] Jonathan Rose * main/dial.c, /: originate/call forwarding: Fix a crash when forwarding a call from originate (closes issue ASTERISK-22487) Reported by: David M. Lee Review: https://reviewboard.asterisk.org/r/2868/ ........ Merged revisions 399553 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-20 16:18 +0000 [r399533] Joshua Colp * /, channels/chan_pjsip.c: Add a missing session supplement unregistration in chan_pjsip for ACKs. (closes issue ASTERISK-22453) Reported by: Corey Farrell Patches: chan_pjsip_session_unregister_supplement.patch uploaded by Corey Farrell (license 5909) ........ Merged revisions 399531 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-20 14:26 +0000 [r399515] Kevin Harwell * /, main/logger.c: Fix memory leak in logger. Fixed a memory leak discovered in the logger where a temporary string buffer was not being freed. (closes issue ASTERISK-22540) Reported by: John Hardin ........ Merged revisions 399513 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399514 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-19 23:20 +0000 [r399503] Richard Mudgett * /, main/optional_api.c: optional_api: Make always use the standard malloc functions even with MALLOC_DEBUG. ........ Merged revisions 399501 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-19 17:01 +0000 [r399459] Jonathan Rose * /, channels/chan_sip.c: chan_sip: Make direct media reinvites for T38 put Asterisk in the media path Prior to this patch, Asterisk would incorrectly use the previous endpoint addresses in SDP in spite of providing its own port. T38 is never meant to be done through directmedia and Asterisk should always be in the media path for these streams. (closes issue ASTERISK-17273) Reported by: Kevin Stewart (closes issue ASTERISK-18706) Reported by: Jeremy Kister Review: https://reviewboard.asterisk.org/r/2853/ ........ Merged revisions 399456 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399457 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399458 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-18 20:04 +0000 [r399405] Kinsey Moore * /, main/abstract_jb.c: Fix jitter buffer log file creation This adjusts '/'-to-'#' replacement to replace all instances of '/' instead of just the first to ensure that the jitter buffer log file gets the correct name as per Richard Kenner's suggestion. (closes issue ASTERISK-21036) Reported by: Richard Kenner ........ Merged revisions 399402 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399403 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399404 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-18 17:23 +0000 [r399368-399378] Matthew Jordan * /, build_tools/prep_tarball: Update prep_tarball with new documentation files on the Asterisk wiki This will now pull both a command reference for the version being prepared, as well as an Admin Guide that applies to all versions of Asterisk. (issue ASTERISK-22439) Reported by: Olle Johansson ........ Merged revisions 399351 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399373 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399376 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, bridges/bridge_softmix.c: Add a WARNING in bridge_softmix when a timing module isn't loaded If bridge_softmix fails to be created because no timing source is present in Asterisk, this will currently fail gracefully but with (most likely) a generic error message by whatever module tried to create the softmix bridge. This patch adds a more explicit warning so you can actually diagnose and fix the problem. Review: https://reviewboard.asterisk.org/r/2857/ ........ Merged revisions 399353 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399365 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-18 17:15 +0000 [r399352] Richard Mudgett * main/config_options.c: Make config framework able to reload module configs with multiple config files. The config framework is supposed to be able to load configs that come from multiple config files. The principle example is chan_sip's sip.conf and users.conf. Unfortunately, it only does this correctly on initial load. This patch causes the module's config to be reloaded entirely if any of the config files change. (closes issue ASTERISK-22009) Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/2859/ 2013-09-18 14:56 +0000 [r399340] Kevin Harwell * res/res_pjsip_messaging.c, /: res_pjsip_messaging: Register message technology as pjsip pjsip's message technology was being registered as 'sip', which was causing it to not load due it conflicting with chan_sip's registered 'sip' technology for messaging. It now registers as 'pjsip'. However, due to this change the "to" field for outgoing pjsip messages need to be prefixed with 'pjsip:' instead of 'sip:'. Incoming messages to res_pjsip_messaging will automatically have their "to" fields altered in order to accommodate the change. Outgoing messages also handle changing it back to 'sip' before being sent so the pjsip library will properly handle it. (closes issue ASTERISK-22445) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2833/ ........ Merged revisions 399339 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-18 00:13 +0000 [r399295] Michael L. Young * /, main/features_config.c: Fix Segfault In features-config.c When Application Has No Arguments Some applications do not require arguments. Therefore, when parsing application maps in features.conf, it is possible that app_data will be set to NULL. * This patch sets app_data to "" if it is NULL. Review: https://reviewboard.asterisk.org/r/2804 ........ Merged revisions 399294 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-17 23:10 +0000 [r399284] Mark Michelson * res/res_pjsip_sdp_rtp.c, res/res_pjsip/pjsip_configuration.c, res/res_pjsip_t38.c, include/asterisk/res_pjsip.h, /: Change the "external_media_address" PJSIP endpoint option to "media_address". The endpoint option does not apply to communication with external entities. Rather, the option is applied to all communications with the endpoint. The external_media_address transport configuration option may override the endpoint option if it turns out that we are going to be communicating with an external entity. Two things of note: 1) I have not updated the XML documentation. This is being taken care of by Rusty as part of his work on issue ASTERISK-22405 2) This commit is likely to cause testsuite failures since there are tests that use the external_media_address endpoint option, and they will need to be changed over. Well, I'm planning to get that updated ASAP after this commit. (closes issue ASTERISK-22528) reported by Rusty Newton ........ Merged revisions 399283 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-17 18:44 +0000 [r399269] Kevin Harwell * main/logger.c, main/asterisk.c, /: Remote console: more output discrepancies The remote console continued to have issues with its output. In this case CLI command output would either not show up (if verbose level = 0) or would contain verbose prefixes (if verbose level > 0) once log messages were sent to the remote console. The fix now now adds verbose prefix data to all new lines contained in a verbose log string. (closes issue ASTERISK-22450) Reported by: David Brillert (closes issue AST-1193) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/2825/ ........ Merged revisions 399267 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399268 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-17 17:55 +0000 [r399258] Richard Mudgett * /, include/asterisk/features_config.h: Fix doxygen to use correct units of features.conf options. ........ Merged revisions 399257 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-17 17:10 +0000 [r399238-399248] Mark Michelson * main/bridge_basic.c, main/features_config.c, /: Fix other timeouts (atxferloopdelay and atxfernoanswertimeout) to use seconds instead of milliseconds. Thanks to Richard Mudgett for pointing this out. ........ Merged revisions 399247 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/features_config.c, /, include/asterisk/features_config.h, main/bridge_basic.c: Switch transferdigittimeout to be configured as seconds instead of milliseconds. This was an unintentional consequence of the update of features.conf to use the config framework in Asterisk 12. Thanks to Marco Signorini on the Asterisk developers list for pointing out the problem. ........ Merged revisions 399237 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-17 14:58 +0000 [r399226] Kevin Harwell * apps/confbridge/conf_state_multi_marked.c, /: Confbridge: empty conference not being torn down Confbridge would not properly tear down an empty conference bridge when all users were kicked via end_marked=yes and at least one user was also set to wait_marked. This occurred because while end_marked users were being kicked and at least one was also set to wait_marked then the leave wait_marked handler would be called on that user, but there would be no waiting user (still considered active). The waiting users would decrement and now be negative. The conference would remain, but be put into an inactive state. The solution was to move from the active list to the wait list, those users with wait_marked set right before kicking. This allows both the active and wait users to decrement correctly and the confbridge to tear down properly. A crashed also occurred when trying to list the specific conference from the CLI. This happened because the conference specified was invalid. Since the conference properly tears down now there is no way to reference it thus alleviating the crash as well. (closes issue ASTERISK-21859) Reported by: Chris Gentle Review: https://reviewboard.asterisk.org/r/2848/ ........ Merged revisions 399222 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399225 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-16 18:36 +0000 [r399161-399208] Richard Mudgett * tests/test_ari_model.c, /: Fix module load errors for test_ari_model.so. You cannot use a function pointer variable with an external function from another dynamically loaded module because data variables are always resolved even with RTLD_LAZY. * Added wrapper functions for ast_ari_validate_int() and ast_ari_validate_string() to use instead for the function pointer variable. (closes issue ASTERISK-22457) Reported by: David M. Lee ........ Merged revisions 399207 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_speech_utils.c, /, res/res_speech.exports.in: app_speech_utils: Fix unresolved symbol ast_speech_get_setting(). Fixes regression introduced by -r374096. * Made res_speech.export.in export ast_* symbols instead of specific functions. * Made app_speech_utils.c declare that it is dependent upon res_speech. (issue ASTERISK-17136) Reported by: Richard Kenner ........ Merged revisions 399197 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Fix saving the wrong expiry time in astdb. When a new IAX2 client registers, the astdb database is updated with the value of minregexpire defined in iax.conf instead of using the expiry time that is provided by the client. The provided expiry time of the client is updated after inserting the astdb entry. As a consequence, restarting or reloading asterisk creates clients whose registration may expire before they reregister. The clients are therefore unavailable after minregexpire seconds until they reregister. * Move updating of the expiry time to before inserting into the astdb. (closes issue ASTERISK-22504) Reported by: Stefan Wachtler Patches: chan_iax2.c.patch (license #6533) patch uploaded by Stefan Wachtler ........ Merged revisions 399158 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399159 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399160 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-16 02:37 +0000 [r399147] Matthew Jordan * main/cdr.c, /: Filter internal channels out of bridge enter/leave message handling Some channels exist merely as an implementation detail in Asterisk, such as ConfBridge's announcer/recorder channels. These channels should never be exposed to the outside world, or to interfaces that report on Asterisk. We already filter out such channels in snapshot processing; however, we failed to filter out bridge related messages that involved these channels. This patch filters out bridge related messages that are for such channels. This prevents a spurious WARNING message from being displayed when those channels move in and out of bridges. ........ Merged revisions 399146 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 22:19 +0000 [r399138] Richard Mudgett * res/parking/parking_bridge_features.c, apps/app_agent_pool.c, include/asterisk/features.h, main/channel.c, res/parking/parking_tests.c, include/asterisk/bridge_channel.h, main/features.c, tests/test_cel.c, main/bridge_channel.c, tests/test_cdr.c, apps/confbridge/conf_chan_announce.c, include/asterisk/bridge.h, res/res_pjsip_refer.c, /, channels/chan_sip.c, res/stasis/control.c, main/bridge.c, main/bridge_basic.c, main/core_unreal.c, res/parking/parking_applications.c, main/core_local.c: Restore Dial, Queue, and FollowMe 'I' option support. The Dial, Queue, and FollowMe applications need to inhibit the bridging initial connected line exchange in order to support the 'I' option. * Replaced the pass_reference flag on ast_bridge_join() with a flags parameter to pass other flags defined by enum ast_bridge_join_flags. * Replaced the independent flag on ast_bridge_impart() with a flags parameter to pass other flags defined by enum ast_bridge_impart_flags. * Since the Dial, Queue, and FollowMe applications are now the only callers of ast_bridge_call() and ast_bridge_call_with_flags(), changed the calling contract to require the initial COLP exchange to already have been done by the caller. * Made all callers of ast_bridge_impart() check the return value. It is important. As a precaution, I also made the compiler complain now if it is not checked. * Did some cleanup in parking_tests.c as a result of checking the ast_bridge_impart() return value. An independent, but associated change is: * Reduce stack usage in ast_indicate_data() and add a dropping redundant connected line verbose message. (closes issue ASTERISK-22072) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2845/ ........ Merged revisions 399136 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 20:55 +0000 [r399101] David M. Lee * /, main/astobj2.c: Don't write to /tmp/refs when REF_DEBUG is not defined. If MALLOC_DEBUG is enabled, then the debug destructor for the container is used, which would erroneously write to /tmp/refs. This patch only uses the debug destructor if ref_debug is used. (closes issue ASTERISK-22536) ........ Merged revisions 399098 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399099 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399100 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 14:50 +0000 [r399082-399084] Mark Michelson * res/res_pjsip.c, res/res_pjsip_pubsub.c, res/res_pjsip_session.c, include/asterisk/res_pjsip.h, res/res_pjsip.exports.in, /: Create more accurate Contact headers for dialogs when we are the UAS. (closes issue AST-1207) reported by John Bigelow Review: https://reviewboard.asterisk.org/r/2842 ........ Merged revisions 399083 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip/config_auth.c, /, res/res_pjsip_outbound_authenticator_digest.c, res/res_pjsip_authenticator_digest.c: Change how realms are handled for outbound authentication. With this change, if no realm is specified in an outbound auth section, then we will simply match the realm that was present in the 401/407 challenge. (closes issue ASTERISK-22471) Reported by George Joseph (closes issue ASTERISK-22386) Reported by Rusty Newton Patches: outbound_auth_realm_v4.patch uploaded by George Joseph (License #6322) ........ Merged revisions 399059 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 14:43 +0000 [r399080-399081] David M. Lee * /: Recorded merge of revisions 399035,399049 from http://svn.asterisk.org/svn/asterisk/branches/12 These were lost in r399071 * /: Put merge tracking for r399039 back. 2013-09-13 14:27 +0000 [r399071] Rusty Newton * /, res/res_pjsip_endpoint_identifier_ip.c: Broke the build! Forgot para tags within my description. https://bamboo.asterisk.org/bamboo/browse/AST-ATRUNKBUILD-304 ........ Merged revisions 399064 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 14:22 +0000 [r399042-399051] David M. Lee * res/res_pjsip_log_forwarder.c (added), res/res_pjsip_logger.c, res/res_rtp_asterisk.c, /: res_pjsip: Forward PJSIP logging to Asterisk logging This patch uses PJSIP's pj_log_set_log_func() to forward PJSIP's log messages to Asterisk's logger. This is done in a new module: res_pjsip_log_forwarder.so. This patch sets defaultenabled on the existing res_pjsip_logger.so to no, since logging every SIP packet seems a bit odd to do by default, and is (hopefully) less necessary with regular PJSIP logging. It also removes res_rtp_asterisk's disabling of PJSIP logging. (closes issue ASTERISK-22360) Reported by: Joshua Colp Review: https://reviewboard.asterisk.org/r/2830/ ........ Merged revisions 399049 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_http_websocket.c: ARI: Fix WebSocket response when subprotocol isn't specified When I moved the ARI WebSocket from /ws to /ari/events, I added code to allow a WebSocket to connect without specifying the subprotocol if there's only one subprotocol handler registered for the WebSocket. Naively, I coded it to always respond with the subprotocol in use. Unfortunately, according to RFC 6455, if the server's response includes a subprotocol header field that "indicates the use of a subprotocol that was not present in the client's handshake [...], the client MUST _Fail the WebSocket Connection_.", emphasis theirs. This patch correctly omits the Sec-WebSocket-Protocol if one is not specified by the client. (closes issue ASTERISK-22441) Review: https://reviewboard.asterisk.org/r/2828/ ........ Merged revisions 399039 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 14:17 +0000 [r399036] Kinsey Moore * /, apps/app_meetme.c: Fix several crashes in MeetMeAdmin This change ensures that MeetMeAdmin commands requiring a user actually get a user and fixes another issue where an extra dereference could occur for a last-entered user being ejected if a user identifier was also provided. (closes issue ASTERISK-21907) Reported by: Alex Epshteyn Review: https://reviewboard.asterisk.org/r/2844/ ........ Merged revisions 399033 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 399034 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 399035 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-13 13:28 +0000 [r399032] Rusty Newton * /, res/res_pjsip_endpoint_identifier_ip.c: 'identify' configObject doesn't have a synopsis Add a straightforward synopsis and description to the identify config object in XML documentation. (issue ASTERISK-22311) (closes issue ASTERISK-22311) Reported By: Rusty Newton ........ Merged revisions 399031 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 23:42 +0000 [r399020-399022] Richard Mudgett * /, main/bridge.c: CLI bridge: Fix "bridge destroy " and "bridge kick " tab completion. These two commands must deal with the live bridges container for tab completion and not the stasis cache. ........ Merged revisions 399021 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/bridge.c, /: astobj2: Register the bridges container for debug inspection. ........ Merged revisions 399019 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 23:23 +0000 [r399018] Rusty Newton * /, res/res_pjsip_acl.c: Documentation fix and improvements to XML configuration help res_pjsip_acl * One bug fix. Made the synopsis for "type" to accurate. * changing the usage of "IP-domains" to "IP addresses" * clarifying the usage for the options, by adding a relevant description for each * modified other areas of the XML help for clarity, such as the module description and a few synopsis changes here and there. See the patch. (issue ASTERISK-22458) (closes issue ASTERISK-22458) Reported By: Rusty Newton Review: https://reviewboard.asterisk.org/r/2823/ ........ Merged revisions 399017 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 20:27 +0000 [r399006] Jonathan Rose * channels/sip/include/sip.h, /, channels/chan_sip.c: chan_sip: Revert r398835 due to failing tests involving originate (issue ASTERISK-22424) Reported by: Jonathan Rose ........ Merged revisions 398977 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398986 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398991 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 16:44 +0000 [r398939] Richard Mudgett * main/core_unreal.c, /: core_local: Fix memory corruption race condition. The masquerade super test is failing on v12 with high fence violations and crashing. The fence violations are showing that party id allocated memory strings are somehow getting corrupted in the bridge_reconfigured_connected_line_update() function. The invalid string values happen to be the freed memory fill pattern. After much puzzling, I deduced that the bridge_reconfigured_connected_line_update() is copying a string out of the source channel's caller party id struct just as another thread is updating it with a new value. The copying thread is using the old string pointer being freed by the updating thread. A search of the code found the unreal_colp_redirect_indicate() routine updating the caller party id's without holding the channel lock. A latent bug in v1.8 and v11 hatched in v12 because of the bridging and connected line changes. :) (issue ASTERISK-22221) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2839/ ........ Merged revisions 398938 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 15:23 +0000 [r398928] David M. Lee * res/res_pjsip.c, /: Fix symbol collision with pjsua. We shouldn't be exporting any symbols that start with pjsip_. ........ Merged revisions 398927 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-12 00:04 +0000 [r398883-398887] Rusty Newton * /, apps/app_queue.c: 'queue add member' help text correction You are adding dial strings to the queue, not channels. An aribitrary string could be used, but you are typically referencing a channel. Correcting the command help text. (issue ASTERISK-22263) (closes issue ASTERISK-22263) Reported By: Rusty Newton ........ Merged revisions 398884 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398885 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398886 from http://svn.asterisk.org/svn/asterisk/branches/12 * configs/chan_dahdi.conf.sample, /: Documentation fix - waitfordialtone is not boolean, it's time in milliseconds Changing text in chan_dahdi.conf sample to be accurate. (issue ASTERISK-22308) (closes issue ASTERISK-22308) Reported By: Malcolm Davenport ........ Merged revisions 398880 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398881 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398882 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-11 20:03 +0000 [r398838] Jonathan Rose * /, channels/chan_sip.c, channels/sip/include/sip.h: chan_sip: Reject calls without prior SDP on 200 OK If we receive a 200 OK without SDP, we will now check to see if the remote address has been established for that channel's RTP session and if the to tag for that channel has changed from the most recent to tag in a response less than 200. If either a change has been made since the last to-tag was received or the remote address is unset, then we will drop the call. (closes issue ASTERISK-22424) Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/2827/diff/#index_header ........ Merged revisions 398835 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398836 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398837 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-11 18:03 +0000 [r398822] Russell Bryant * configs/confbridge.conf.sample, /: Fix typo in confbridge.conf.sample The denoise filter requires func_speex, not codec_speex. Fix this in the description of the denoise=yes option in confbridge.conf. ........ Merged revisions 398820 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398821 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-11 14:23 +0000 [r398808] Kevin Harwell * res/res_pjsip_caller_id.c, channels/chan_pjsip.c, /: pjsip: reinvite for connected line updates occurs when it should not Connected line updates are now only sent out if an actual update needs to occur. This happens under the following conditions: 1. The endpoint we are sending to is trusted. 2. Either a P-Asserted-Identity or Remote Party-ID header needs to be added/sent. 3. The connected id's number and name are valid. Also added an SDP when an update is sent out. (closes issue AST-1212) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/2831/ ........ Merged revisions 398806 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-10 18:05 +0000 [r398760] Richard Mudgett * main/event.c, res/res_musiconhold.c, main/indications.c, main/asterisk.c, main/xmldoc.c, main/cli.c, /, funcs/func_dialgroup.c, main/heap.c, res/res_pjsip/pjsip_configuration.c: Fix incorrect usages of ast_realloc(). There are several locations in the code base where this is done: buf = ast_realloc(buf, new_size); This is going to leak the original buf contents if the realloc fails. Review: https://reviewboard.asterisk.org/r/2832/ ........ Merged revisions 398757 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398758 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398759 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-10 17:50 +0000 [r398751-398755] David M. Lee * utils/check_expr.c, /: Fixed utils directory breakage from r398748, this time with extra hate. ........ Merged revisions 398752 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398753 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398754 from http://svn.asterisk.org/svn/asterisk/branches/12 * utils/check_expr.c, /, utils/ael_main.c, utils/conf2ael.c: Fixed utils directory breakage from r398648 ........ Merged revisions 398748 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398749 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398750 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-09 23:29 +0000 [r398732] Richard Mudgett * main/astmm.c, /: MALLOC_DEBUG: Change fence magic number to be completely different from the freed magic number. Race conditions between freeing a nul terminated string and ast_strdup()'ing it are more likely to be detected if the fence and freed magic numbers are completely different. ........ Merged revisions 398703 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398721 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398726 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-09 22:00 +0000 [r398695] Mark Michelson * res/res_pjsip_endpoint_identifier_ip.c, /: Add extra debugging to res_pjsip_endpoint_identifier_ip ........ Merged revisions 398694 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-09 20:13 +0000 [r398641-398652] David M. Lee * /, main/utils.c, include/asterisk/lock.h, main/lock.c: Fix DEBUG_THREADS when lock is acquired in __constructor__ This patch fixes some long-standing bugs in debug threads that were exacerbated with recent Optional API work in Asterisk 12. With debug threads enabled, on some systems, there's a lock ordering problem between our mutex and glibc's mutex protecting its module list (Ubuntu Lucid, glibc 2.11.1 in this instance). In one thread, the module list will be locked before acquiring our mutex. In another thread, our mutex will be locked before locking the module list (which happens in the depths of calling backtrace()). This patch fixes this issue by moving backtrace() calls outside of critical sections that have the mutex acquired. The bigger change was to reentrancy tracking for ast_cond_{timed,}wait, which wrongly assumed that waiting on the mutex was equivalent to a single unlock (it actually suspends all recursive locks on the mutex). (closes issue ASTERISK-22455) Review: https://reviewboard.asterisk.org/r/2824/ ........ Merged revisions 398648 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398649 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398651 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/ari/resource_channels.h, /, rest-api/api-docs/channels.json: Multiple revisions 398638-398639 ........ r398638 | dlee | 2013-09-09 14:01:54 -0500 (Mon, 09 Sep 2013) | 1 line Added note about expected behavior of originate ........ r398639 | dlee | 2013-09-09 14:02:27 -0500 (Mon, 09 Sep 2013) | 1 line Added note about expected behavior of originate (the rest of the commit) ........ Merged revisions 398638-398639 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-08 23:30 +0000 [r398629] Matthew Jordan * tests/test_cdr.c, /: Update CDR Unit tests to reflect container changes in r398579 When a channel joins a multi-party bridge, the ordering of the CDRs that is created is determined by the ordering of the channels who happen to be in that bridge. When r398579 changed the number of buckets in the container to something sensible, it changed the ordering that the CDRs was created in, causing one of the multiparty tests to fail. This fixes the test with the now expected ordering. ........ Merged revisions 398628 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-07 01:03 +0000 [r398603-398620] Kinsey Moore * /, res/res_xmpp.c: Prevent XMPP timeout on blank responses Sometimes the Google Voice servers have a bad habit of sending out 1 byte replies to the xmpp resource. When a blank 1 byte reply is received from the socket the buffer attempts to wait (endlessly) for the rest of the reply from google which effectively blocks the socket and google voice calls will no longer come into the server. This patch allows the xmpp module to correctly detect empty packets and send out ping replies to google. It also sets a socket timeout on the default socket which prevents the xmpp socket from closing and preventing future google voice calls from coming into the server. Furthermore instead of sending an empty reply back to google we send a proper xmpp ping reply back. This also adds several more socket messages. (closes issue ASTERISK-22347) Reported by: Andrew Nagy Review: https://reviewboard.asterisk.org/r/2771 Patches: xmpp_fix_1.diff uploaded by Andrew Nagy (License #6524) ........ Merged revisions 398618 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398619 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_xmpp.c, res/res_jabber.c: Multiple revisions 398558,398577 ........ r398558 | kmoore | 2013-09-06 14:28:16 -0500 (Fri, 06 Sep 2013) | 17 lines Fix Jabber/XMPP distributed MWI The mailbox and context are swapped on the receiving end for all users of Jabber and XMPP distributed MWI in Asterisk 1.8 and all more recent versions. This swaps those values to be correct when publishing to the internal event system from Jabber/XMPP distributed MWI state. (closes issue ASTERISK-22435) Reported by: abelbeck Tested by: Michael Keuter Patches: asterisk-1.8-res_jabber-aji_handle_pubsub_event.patch uploaded by abelbeck asterisk-11-res_xmpp-xmpp_pubsub_handle_event.patch uploaded by abelbeck ........ Merged revisions 398523 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ r398577 | kmoore | 2013-09-06 16:00:56 -0500 (Fri, 06 Sep 2013) | 10 lines Commit the remainder of r398523 This is a missing part of the commit in revision 398523 that corrects the name of a variable. (issue ASTERISK-22435) ........ Merged revisions 398576 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398558,398577 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398580 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-06 21:17 +0000 [r398557-398583] Richard Mudgett * main/cdr.c, /: cdr: Change the number of container buckets to be similar to the channels container. * Fix the temporary cdr candidate containers to use a prime number of buckets. ........ Merged revisions 398579 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/core_local.c, /: core_local: Fix LocalOptimizationBegin AMI event missing Source channel snapshot. * Fix the LocalOptimizationBegin AMI event by eliminating an artificial buffer size limitation that is too small anyway. ........ Merged revisions 398572 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: cdr: Fix some ref leaks. * Added missing unregister of the cdr container in cdr_engine_shutdown(). * Fixed ref leak in off nominal path of cdr_object_alloc(). * Removed some unnecessary NULL checks in cdr_object_dtor(). ........ Merged revisions 398562 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/astobj2.h, main/cel.c, main/features_config.c, apps/app_agent_pool.c, main/cdr.c, main/udptl.c, /, main/parking.c, main/stasis_config.c: astobj2: Add warn unused attribute to some functions. * Fixed resulting warnings with improper use of ao2_global_obj_replace(). * Made a couple uses of ao2_global_obj_replace_unref(x, NULL) into the equivalent and more appropriate ao2_global_obj_release() call. ........ Merged revisions 398533 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-06 18:53 +0000 [r398512-398522] Kinsey Moore * main/http.c, /, res/stasis/app.c: Fix build warnings When AST_DEVMODE is not defined, ast_asserts are not compiled into the binary. In some cases, this means variables are not referenced or are set but unused which causes warnings to show up. (closes issue ASTERISK-22446) Reported by: Jason Parker (qwell) ........ Merged revisions 398521 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_h323.c: Fix chan_h323 compilation This fixes the things in chan_h323 that were missed or ignored in the great channel opaquification and gets chan_h323 back into a compiling state. (closes issue ASTERISK-22365) Reported by: Dmitry Melekhov Patches: chan_h323.patch uploaded by Dmitry Melekhov ........ Merged revisions 398510 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398511 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-05 21:48 +0000 [r398384-398499] Richard Mudgett * /, main/astobj2.c: astobj2: Only define ao2_bt() once. * Make ao2_bt() not use single char variable names. * Fix ao2_bt() formatting. ........ Merged revisions 398498 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Reduce indentation in __attempt_transmit(). * Reduce indentation in __attempt_transmit(). * Don't update the static last error time variable every time in __schedule_action() and socket_read(). ........ Merged revisions 398456 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398457 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398458 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Fix stray reference to worker thread idle_list. * Fix stray reference to idle_list in cleanup_thread_list(). This may be the reason for the note in iax2_process_thread() about threads not being removed from the task lists. * Move cleanup_thread_list(&idle_list) to after the other lists are cleaned up. ........ Merged revisions 398416 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398417 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398418 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/chan_iax2.c, /: chan_iax2: Fix bridgecallno deadlock avoidance. * Fix bridgecallno deadlock avoidance. When doing deadlock avoidance, you need to retest the status of values for each loop to see if you still need the lock for bridgecallno. * As a safety check, after acquiring the bridgecallno lock you should check if iaxs[bridgecallno] is NULL just like the current callno checks. * Move setting thread->iostate to IAX_IOSTATE_IDLE to after processing any deferred frames to ensure that the iostate is IDLE when it is placed back into the idle list. defer_full_frame() tries to ensure iax2_process_thread() wakes up to process the frame. ........ Merged revisions 398379 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398380 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398381 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-05 14:10 +0000 [r398369] Mark Michelson * /, res/res_pjsip_outbound_registration.c: Clarify server_uri and client_uri registration settings. Used some of Rusty's suggested language plus also included more SIPesque descriptions of where the URIs are actually used in an outgoing REGISTER. (closes issue ASTERISK-22390) reported by Rusty Newton ........ Merged revisions 398368 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-04 23:07 +0000 [r398304] Richard Mudgett * channels/iax2/parser.c, /: chan_iax2: Add missing control frame names to debug frame decode output. ........ Merged revisions 398301 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398302 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398303 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-04 22:49 +0000 [r398300] Mark Michelson * /, res/res_pjsip_outbound_authenticator_digest.c: Give more detail regarding failures to create request with auth credentials. (issue ASTERISK-22386) ........ Merged revisions 398299 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-04 21:37 +0000 [r398284-398287] Jonathan Rose * /, tests/test_voicemail_api.c: unit tests: test_voicemail_api leaks stringfields from snapshots (closes issue ASTERISK-22414) Reported by: Corey Farrell Patches: test_voicemail_api-leaks-11.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398285 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398286 from http://svn.asterisk.org/svn/asterisk/branches/12 * apps/app_voicemail.c, /: app_voicemail: Fix leaking config objects when msg_id doesn't match (issues ASTERISK-22414) Reported by: Corey Farrell Patch: test_voicemail_api-leaks-11.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398281 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398283 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-04 16:03 +0000 [r398238] Richard Mudgett * channels/chan_misdn.c, /: chan_misdn: Fix misdn debug output printed with arbitrary verbose levels. Fix the misdn debug output to remote consoles. chan_misdn uses ast_console_puts() which doesn't know about verbose levels. Better to use ast_verbose() instead. Without this patch the misdn debug messages are appended to the verbose level which ever was set by the message sent to the console before, i.e. any undefined level. (closes issue AST-1218) Reported by: Guenther Kelleter Patches: misdnlog.patch (license #6372) patch uploaded by Guenther Kelleter ........ Merged revisions 398235 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398236 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398237 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-04 14:32 +0000 [r398227] Kevin Harwell * /, res/res_pjsip_outbound_registration.c: Debug messages for pjsip outbound registration Added debug messages indicating that an outbound registration attempt was made and it was successful in pjsip. (closes issue ASTERISK-22388) Reported by: Rusty Newton ........ Merged revisions 398226 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-03 20:28 +0000 [r398217] Alexandr Anikin * /, addons/ooh323c/src/ooh245.c: Fix remote tcs sequence handling on empty tcs received ........ Merged revisions 398214 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398215 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-03 18:09 +0000 [r398207] Kinsey Moore * res/res_pjsip_dtmf_info.c, /: Prevent a crash in res_pjsip_dtmf_info.c This change makes sure that a content type header exists before checking the contents of the header against known SIP INFO DTMF content types. ........ Merged revisions 398206 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-03 17:19 +0000 [r398205] David M. Lee * Makefile, /: Fixed 'make clean' for wiki docs ........ Merged revisions 398198 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-09-03 14:29 +0000 [r398197] Walter Doekes * /, cel/cel_custom.c: Be a little more verbose when loading cel_custom.conf. Review: https://reviewboard.asterisk.org/r/2805/ ........ Merged revisions 398167 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398168 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398196 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 20:58 +0000 [r398150] David M. Lee * main/asterisk.c, include/asterisk/optional_api.h, /, main/optional_api.c: Fix graceful shutdown crash. The cleanup code for optional_api needs to happen after all of the optional API users and providers have unused/unprovided. Unfortunately, regsitering the atexit() handler at the beginning of main() isn't soon enough, since module destructors run after that. ........ Merged revisions 398149 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 20:37 +0000 [r398148] Rusty Newton * /, configs/pjsip.conf.sample: New pjsip.conf.sample (issue ASTERISK-22145) (closes issue ASTERISK-22145) Reported By: Matt Jordan Review: https://reviewboard.asterisk.org/r/2811/ ........ Merged revisions 398147 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 19:55 +0000 [r398124-398140] Kevin Harwell * /, res/res_pjsip_outbound_registration.c, include/asterisk/sorcery.h, res/res_pjsip.c, res/res_pjsip/config_transport.c, main/sorcery.c: Add a reloadable option for sorcery type objects Some configuration objects currently won't place nice if reloaded. Specifically, in this case the pjsip transport objects. Now when registering an object in sorcery one may specify that the object is allowed to be reloaded or not. If the object is set to not reload then upon reloading of the configuration the objects of that type will not be reloaded. The initially loaded objects of that type however will remain. While the transport objects will not longer be reloaded it is still possible for a user to configure an endpoint to an invalid transport. A couple of log messages were added to help diagnose this problem if it occurs. (closes issue ASTERISK-22382) Reported by: Rusty Newton (closes issue ASTERISK-22384) Reported by: Rusty Newton Review: https://reviewboard.asterisk.org/r/2807/ ........ Merged revisions 398139 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/config.c, res/res_security_log.c, /, channels/chan_sip.c, main/translate.c, main/named_acl.c, main/indications.c: Fix various memory leaks main/config.c - cleanup cache fie includes res/res_security_log.c - unregister logger level channesl/chan_sip.c - cleanup io context and notify_types main/translator.c - cleanup at shutdown main/named_acl.c - cleanup cli commands main/indications.c - ast_get_indication_tone() unref default_tone_zone if used (closes issues ASTERISK-22378) Reported by: Corey Farrell Patches: config_shutdown.patch uploaded by coreyfarrell (license 5909) res_security_log.patch uploaded by coreyfarrell (license 5909) chan_sip-11.patch uploaded by coreyfarrell (license 5909) indications_refleak.patch uploaded by coreyfarrell (license 5909) named_acl-cli_unreg-trunk.patch uploaded by coreyfarrell (license 5909) translate_shutdown.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398102 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398103 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398116 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 18:38 +0000 [r398101] Matthew Jordan * /, UPGRADE-12.txt (added), UPGRADE.txt: Update UPGRADE.txt file for Asterisk 12 This simply pulls in the changes that were breaking from the CHANGES file and updates a few other areas accordingly. It also removes the 10 => 11 notes, which are traditionally removed from each major version and stored in the appropriate UPGRADE-X.txt file. ........ Merged revisions 398100 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 18:30 +0000 [r398064-398099] Jonathan Rose * main/features_config.c, /, main/config_options.c: features_config: Ignore parkinglots in features.conf instead of failing to load Parkinglots are defined in res_features.conf now, but this patch fixes features_config so that features don't fail to load when parkinglots are present in features.conf Review: https://reviewboard.asterisk.org/r/2801/ ........ Merged revisions 398068 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/features_config.c, main/udptl.c, /: features_config: Don't require features.conf to be present for Asterisk to load (closes issue ASTERISK-22426) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2806/ ........ Merged revisions 398020 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 17:59 +0000 [r398063] Kevin Harwell * main/manager.c, /, res/res_agi.c: Memory leak fix ast_xmldoc_printable returns an allocated block that must be freed by the caller. Fixed manager.c and res_agi.c to stop leaking these results. (closes issue ASTERISK-22395) Reported by: Corey Farrell Patches: manager-leaks-12.patch uploaded by coreyfarrell (license 5909) res_agi-xmldoc-leaks.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398060 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398061 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398062 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 17:11 +0000 [r398024-398026] Richard Mudgett * tests/test_substitution.c, /: test_substitution: Fix failing test. Revert the -r392190 change. The original test was correct. The CDR code was actually returning an unititialized buffer. ........ Merged revisions 398025 from http://svn.asterisk.org/svn/asterisk/branches/12 * tests/test_substitution.c, /: test_substituition: Fix failed test reporting to actually report failure. You cannot put the "Testing pass/fail" on a single line before actually performing the test. Now any additional failure information is logged before the test pass/fail announcement. * Added an additional CDR(answer,u) test. ........ Merged revisions 398018 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398019 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398023 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 16:27 +0000 [r398003-398017] Kevin Harwell * /, apps/app_mixmonitor.c: Fix memory leaks (closes issue ASTERISK-22368) Reported by: Corey Farrell Patches: issueA22368_mixmonitor_free_filename.patch uploaded by wdoekes (license 5674) ........ Merged revisions 398004 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 398011 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398016 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/asterisk.c, /: Check return value on fwrite ........ Merged revisions 398000 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 398002 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 13:40 +0000 [r397987-397990] David M. Lee * rest-api-templates/swagger_model.py, res/ari/ari_websockets.c, channels/sip/include/sip.h, main/asterisk.c, res/res_ari.c, tests/test_optional_api.c (added), /, channels/chan_sip.c, include/asterisk/autoconfig.h.in, configure.ac, rest-api-templates/res_ari_resource.c.mustache, res/ari/internal.h, res/res_http_websocket.c, CHANGES, include/asterisk/compiler.h, include/asterisk/ari.h, main/loader.c, include/asterisk/optional_api.h, build_tools/cflags.xml, configure, res/res_ari_events.c, include/asterisk/http_websocket.h, main/optional_api.c (added): optional_api: Fix linking problems between modules that export global symbols With the new work in Asterisk 12, there are some uses of the optional_api that are prone to failure. The details are rather involved, and captured on [the wiki][1]. This patch addresses the issue by removing almost all of the magic from the optional API implementation. Instead of relying on weak symbol resolution, a new optional_api.c module was added to Asterisk core. For modules providing an optional API, the pointer to the implementation function is registered with the core. For modules that use an optional API, a pointer to a stub function, along with a optional_ref function pointer are registered with the core. The optional_ref function pointers is set to the implementation function when it's provided, or the stub function when it's now. Since the implementation no longer relies on magic, it is now supported on all platforms. In the spirit of choice, an OPTIONAL_API flag was added, so we can disable the optional_api if needed (maybe it's buggy on some bizarre platform I haven't tested on) The AST_OPTIONAL_API*() macros themselves remained unchanged, so existing code could remain unchanged. But to help with debugging the optional_api, the patch limits the #include of optional API's to just the modules using the API. This also reduces resource waste maintaining optional_ref pointers that aren't used. Other changes made as a part of this patch: * The stubs for http_websocket that wrap system calls set errno to ENOSYS. * res_http_websocket now properly increments module use count. * In loader.c, the while() wrappers around dlclose() were removed. The while(!dlclose()) is actually an anti-pattern, which can lead to infinite loops if the module you're attempting to unload exports a symbol that was directly linked to. * The special handling of nonoptreq on systems without weak symbol support was removed, since we no longer rely on weak symbols for optional_api. [1]: https://wiki.asterisk.org/wiki/x/wACUAQ (closes issue ASTERISK-22296) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2797/ ........ Merged revisions 397989 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_stasis_playback.c, /, include/asterisk/stasis_app_recording.h, res/ari/resource_recordings.h, res/res_stasis_recording.c, res/Makefile, res/ari/ari_model_validators.c, rest-api/api-docs/recordings.json, res/stasis_recording (added), res/ari/resource_recordings.c, res/ari/ari_model_validators.h, res/res_ari_recordings.c: ARI: Implement /recordings/stored API's his patch implements the ARI API's for stored recordings. While the original task only specified deleting a recording, it was simple enough to implement the GET for all recordings, and for an individual recording. The recording playback operation was modified to use the same code for accessing the recording as the REST API, so that they will behave consistently. There were several problems with the api-docs that were also fixed, bringing the ARI spec in line with the implementation. There were some 'wishful thinking' fields on the stored recording model (duration and timestamp) that were removed, because I ended up not implementing a metadata file to go along with the recording to store such information. The GET /recordings/live operation was removed, since it's not really that useful to get a list of all recordings that are currently going on in the system. (At least, if we did that, we'd probably want to also list all of the current playbacks. Which seems weird.) (closes issue ASTERISK-21582) Review: https://reviewboard.asterisk.org/r/2693/ ........ Merged revisions 397985 from http://svn.asterisk.org/svn/asterisk/branches/12 * /: Multiple revisions 397975-397976 ........ r397975 | rmudgett | 2013-08-29 20:00:00 -0500 (Thu, 29 Aug 2013) | 1 line pbx.c: Make ast_str_substitute_variables_full() not mask variables. ........ r397976 | rmudgett | 2013-08-29 20:00:41 -0500 (Thu, 29 Aug 2013) | 1 line Revert last commit. ........ Merged revisions 397975-397976 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 01:20 +0000 [r397978] Richard Mudgett * main/pbx.c, /: pbx.c: Make pbx_substitute_variables_helper_full() not mask variables. ........ Merged revisions 397977 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-30 00:11 +0000 [r397962-397969] Mark Michelson * res/res_pjsip_pidf.c, /: Sanitize XML output for PIDF bodies. PJSIP's PIDF API does not replace angle brackets with their appropriate counterparts for XML. So we have to do it ourself. In this particular case, the problem had to do with attempting to place an unsanitized SIP URI into an XML node. Now we don't get a 488 from recipients of our PIDF NOTIFYs. ........ Merged revisions 397968 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_pidf.c, /: Fix method for creating activities string in PIDF bodies. The previous method did not allocate enough space to create the entire string, but adjusted the string's slen value to be larger than the actual allocation. This resulted in garbled text in NOTIFY requests from Asterisk. This method allocates the proper amount of space first and then writes the content into the buffer. ........ Merged revisions 397960 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 22:49 +0000 [r397959] Kevin Harwell * apps/app_dumpchan.c, main/logger.c, apps/app_verbose.c, main/asterisk.c, channels/chan_misdn.c, /: Verbose logging discrepancies Refactored cases where a combination of ast_verbose/options_verbose were present. Also in general tried to eliminate, in as many places as possible, where the options_verbose global variable was being used. Refactored the way local and remote consoles handle verbose message logging in an attempt to solve the various discrepancies that sometimes would show between the two. (closes issue AST-1193) Reported by: Guenther Kelleter Review: https://reviewboard.asterisk.org/r/2798/ ........ Merged revisions 397948 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 397958 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 22:26 +0000 [r397956-397957] Mark Michelson * /, res/res_pjsip_pubsub.c: Fix when the subscription_terminated callback is called for subscription handlers. The previous placement would result in the resubscribe() callback called instead of the subscription_terminated() callback being called when a subscription was ended via a SUBSCRIBE request. This would result in confusing PJSIP and having it throw an assertion. ........ Merged revisions 397955 from http://svn.asterisk.org/svn/asterisk/branches/12 * res/res_pjsip_session.c, /: Fix a race condition where a canceled call was answered. RFC 5407 section 3.1.2 details a scenario where a UAC sends a CANCEL at the same time that a UAS sends a 200 OK for the INVITE that the UAC is canceling. When this occurs, it is the role of the UAC to immediately send a BYE to terminate the call. This scenario was reproducible by have a Digium phone with two lines place a call to a second phone that forwarded the call to the second line on the original phone. The Digium phone, upon realizing that it was connecting to itself, would attempt to cancel the call. The timing of this happened to trigger the aforementioned race condition about 80% of the time. Asterisk was not doing its job of sending a BYE when receiving a 200 OK on a cancelled INVITE. The result was that the ast_channel structure was destroyed but the underlying SIP session, as well as the PJSIP inv_session and dialog, were still alive. Attempting to perform an action such as a transfer, once in this state, would result in Asterisk crashing. The circumstances are now detected properly and the session is ended as recommended in RFC 5407. (closes issue AST-1209) reported by John Bigelow ........ Merged revisions 397945 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 21:37 +0000 [r397947] Kevin Harwell * main/file.c, main/app.c, main/config_options.c, main/cel.c, main/asterisk.c, main/cdr.c, main/manager.c, /, main/stasis_config.c: Memory leaks fix (closes ASTERISK-22376) Reported by: John Hardin Patches: memleak.patch uploaded by jhardin (license 6512) memleak2.patch uploaded by jhardin (license 6512) ........ Merged revisions 397946 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 20:22 +0000 [r397939] Matthew Jordan * configs/safe_asterisk.conf.sample (removed), /, CHANGES, contrib/scripts/safe_asterisk, Makefile: Revert r394939 due to (numerous) objections The patch from ASTERISK-21965 was committed perhaps a bit too hastily. Walter and Tzafrir have pointed out numerous issues with the approach and have propsed an alternative in r/2757. Since it's not a time critical issue and is not worth holding up the release of 12 for it, I've gone ahead and reverted r394939 from 12/trunk and re-opened ASTERISK-21965. ........ Merged revisions 397938 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 16:21 +0000 [r397932] David M. Lee * rest-api-templates/make_ari_stubs.py, /, rest-api-templates/api.wiki.mustache, rest-api-templates/asterisk_processor.py: Account for {} in Swagger notes ........ Merged revisions 397927 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 16:05 +0000 [r397925] Matthew Jordan * Makefile, /: Recursively search for '.c' files when making documentation with 'make full' Without this, documentation defined in sub-folders is ignored. Since having properly generated documentation is especially important in Asterisk 12 - not having it can cause a module to not load - 'make full' needs to look in all .c files. ........ Merged revisions 397924 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 15:43 +0000 [r397923] Mark Michelson * /, apps/app_queue.c, main/cel.c, main/stasis_bridges.c: Multiple revisions 397921-397922 ........ r397921 | mmichelson | 2013-08-29 10:42:10 -0500 (Thu, 29 Aug 2013) | 6 lines Resolve assumptions that bridge snapshots would be non-NULL for transfer stasis events. Attempting to transfer an unbridged call would result in crashes in either CEL code or in the conversion to AMI messages. ........ r397922 | mmichelson | 2013-08-29 10:42:29 -0500 (Thu, 29 Aug 2013) | 3 lines Remove extra debug message. ........ Merged revisions 397921-397922 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-29 12:30 +0000 [r397912] Matthew Jordan * contrib/ast-db-manage/config, contrib/ast-db-manage/config/script.py.mako, contrib/ast-db-manage/voicemail.ini.sample, contrib/ast-db-manage/voicemail/env.py, contrib/ast-db-manage/voicemail, contrib/ast-db-manage/voicemail/script.py.mako, contrib/ast-db-manage/README.md, contrib/ast-db-manage/config/versions, contrib/ast-db-manage/voicemail/versions/a2e9769475e_create_tables.py, contrib/ast-db-manage (added), contrib/ast-db-manage/voicemail/versions, /, contrib/ast-db-manage/config.ini.sample, contrib/ast-db-manage/config/env.py, contrib/ast-db-manage/config/versions/4da0c5f79a9c_create_tables.py: Actually *add* the database schema management utilities In r397874, the scripts were removed... but not replaced. Thanks to Michael Young for noticing this! ........ Merged revisions 397911 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-28 23:15 +0000 [r397886-397903] Richard Mudgett * main/cdr.c, /, funcs/func_cdr.c, main/stdtime/localtime.c: Fix some uninitialized buffers for CDR handling valgrind found. * Made ast_strftime_locale() ensure that the output buffer is initialized. The std library strftime() returns 0 and does not touch the buffer if it has an error. However, the function can also return 0 without an error. (closes issue ASTERISK-22412) Reported by: rmudgett ........ Merged revisions 397902 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: Fixed problems with ast_cdr_serialize_variables(). * Fixed return value of ast_cdr_serialize_variables() on error. It needs to return 0 indicating no CDR variables found. * Made ast_cdr_serialize_variables() check the return value of cdr_object_format_property() and assert if nonzero. A member of the cdr_readonly_vars[] was not handled. * Removed unused elements from cdr_readonly_vars[]: total_duration, total_billsec, first_start, and first_answer. ........ Merged revisions 397900 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: Made the on/off in CLI "cdr set debug [on|off]" case insensitive. ........ Merged revisions 397898 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/cdr.c, /: Make CDR variable name chandling consistently case insensitive. ........ Merged revisions 397896 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, main/cdr.c: Make CDR code deal with channel names case insensitively. ........ Merged revisions 397894 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, funcs/func_cdr.c, main/cdr.c: Some CDR code optimization. ........ Merged revisions 397892 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, funcs/func_cdr.c: Whitespace and curly braces. ........ Merged revisions 397885 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-28 21:09 +0000 [r397877] Mark Michelson * /, res/res_pjsip_refer.c: Improve detection of answer on SIP blind transfer. A problem encountered during testing was that res_pjsip_refer would not ever send a NOTIFY with a 200 OK sipfrag. This is because the framehook that was supposed to send the NOTIFY would never be told that an answer had occurred. This happened for two reasons: 1) The transferee channel on which the framehook was on was already up. 2) Answers are rarely if ever written to channels. Rather, the ast_answer() or ast_raw_answer() function is used to answer channels. Thanks to a suggestion by Matt Jordan, the best way to detect that the call had been answered was to find out when the transferee channel joined a bridge. With stasis this is an easy task. So now, in addition to the framehook logic, there is a stasis subscription used to determine when the transferee has entered a bridge. Once it has entered, an appropriate NOTIFY is sent. ........ Merged revisions 397876 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-28 20:55 +0000 [r397872-397875] Matthew Jordan * contrib/realtime/mysql/queue_log.sql, contrib/realtime/mysql/voicemail.sql, contrib/realtime/mysql/sippeers.sql, /, contrib/realtime/mysql/iaxfriends.sql, contrib/realtime/mysql/meetme.sql, contrib/realtime/mysql/voicemail_messages.sql, contrib/realtime/postgresql/realtime.sql, contrib/realtime/mysql/voicemail_data.sql, CHANGES, contrib/realtime/mysql/musiconhold.sql: Add database schema management using Alembic This patch replaces contrib/realtime/ with a new setup for managing the database schema required for database integration with Asterisk. In addition to initializing a database with the proper schema, alembic can do a database migration to assist with upgrading Asterisk in the future. Hopefully this helps make setting up and operating Asterisk with a database easier. With this the schema only needs to be maintained in one place instead of once per database. The schemas I have added here have a bit of improvement over the examples that were there before (some added consistency and added some missing indexes). Managing the schema in one place here also applies to all databases supported by SQLAlchemy. See contrib/ast-db-manage/README.md for more details. Review: https://reviewboard.asterisk.org/r/2731 patch by Russell Bryant (license 6300) ........ Merged revisions 397874 from http://svn.asterisk.org/svn/asterisk/branches/12 * CHANGES, /: Update CHANGES file for Asterisk 12 This updates the Asterisk 12 CHANGES file with the things that were missed during the development cycle. Review: https://reviewboard.asterisk.org/r/2795/ ........ Merged revisions 397870 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-28 16:13 +0000 [r397857-397860] Richard Mudgett * /, main/pbx.c: pbx.c: Make ast_str_substitute_variables_full() not mask variables. ........ Merged revisions 397859 from http://svn.asterisk.org/svn/asterisk/branches/12 * main/chanvars.c: ast_free() is null tollerant. * include/asterisk/threadstorage.h, /: Match use of ast_free() with ast_calloc() and add some curly braces. ........ Merged revisions 397856 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-28 15:43 +0000 [r397855] Mark Michelson * res/res_pjsip/pjsip_distributor.c, /: Fix dialog matching in the SIP distributor. Dialog matching is performed in the distributor for the sole purpose of retrieving an associated serializer so the request may be serialized. This patch fixes two problems. First, incoming CANCEL requests that had no to-tag (which really should be *all* CANCEL requests) would not match with a dialog. An earlier bug fix to deal with early CANCEL requests would result in the CANCEL being replied to with a 481. The fix for this is to find the matching INVITE transaction and get the dialog from that transaction. Second, no SIP responses were matching dialogs. This is because we were inverting the tags that we were passing into PJSIP's dialog finding function. This logic has been corrected by setting local and remote tag variables based on whether the incoming message is a request or response. ........ Merged revisions 397854 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-27 19:19 +0000 [r397820] David M. Lee * rest-api-templates/param_parsing.mustache, res/res_ari_bridges.c, /, res/stasis/app.c, res/res_ari_events.c, res/res_ari_asterisk.c, rest-api-templates/res_ari_resource.c.mustache, res/stasis/app.h, res/res_stasis.c, main/stasis_bridges.c: ARI: WebSocket event cleanup Stasis events (which get distributed over the ARI WebSocket) are created by subscribing to the channel_all_cached and bridge_all_cached topics, filtering out events for channels/bridges currently subscribed to. There are two issues with that. First was a race condition, where messages in-flight to the master subscribe-to-all-things topic would get sent out, even though the events happened before the channel was put into Stasis. Secondly, as the number of channels and bridges grow in the system, the work spent filtering messages becomes excessive. Since r395954, individual channels and bridges have caching topics, and can be subscribed to individually. This patch takes advantage, so that channels and bridges are subscribed to on demand, instead of filtering the global topics. The one case where filtering is still required is handling BridgeMerge messages, which are published directly to the bridge_all topic. Other than the change to how subscriptions work, this patch mostly just moves code around. Most of the work generating JSON objects from messages was moved to .to_json handlers on the message types. The callback functions handling app subscriptions were moved from res_stasis (b/c they were global to the model) to stasis/app.c (b/c they are local to the app now). (closes issue ASTERISK-21969) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2754/ ........ Merged revisions 397816 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-27 18:52 +0000 [r397811] Richard Mudgett * /, main/astmm.c: Made MALLOC_DEBUG less CPU intensive by default. Storing a backtrace for each allocation in anticipation of a memory management problem is very CPU intensive. * Added the CLI "memory backtrace {on|off}" command to request that the backtrace be gathered only on request. The backtrace is off by default. (issue ASTERISK-22221) Reported by: Matt Jordan ........ Merged revisions 397809 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-27 18:10 +0000 [r397753-397760] Matthew Jordan * /, channels/chan_sip.c: AST-2013-005: Fix crash caused by invalid SDP If the SIP channel driver processes an invalid SDP that defines media descriptions before connection information, it may attempt to reference the socket address information even though that information has not yet been set. This will cause a crash. This patch adds checks when handling the various media descriptions that ensures the media descriptions are handled only if we have connection information suitable for that media. Thanks to Walter Doekes, OSSO B.V., for reporting, testing, and providing the solution to this problem. (closes issue ASTERISK-22007) Reported by: wdoekes Tested by: wdoekes patches: issueA22007_sdp_without_c_death.patch uploaded by wdoekes (License 5674) ........ Merged revisions 397756 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 397757 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 397758 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 397759 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, channels/chan_sip.c: AST-2013-004: Fix crash when handling ACK on dialog that has no channel A remote exploitable crash vulnerability exists in the SIP channel driver if an ACK with SDP is received after the channel has been terminated. The handling code incorrectly assumed that the channel would always be present. This patch adds a check such that the SDP will only be parsed and applied if Asterisk has a channel present that is associated with the dialog. Note that the patch being applied was modified only slightly from the patch provided by Walter Doekes of OSSO B.V. (closes issue ASTERISK-21064) Reported by: Colin Cuthbertson Tested by: wdoekes, Colin Cutherbertson patches: issueA21064_fix.patch uploaded by wdoekes (License 5674) ........ Merged revisions 397710 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 397711 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 397712 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 397713 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-27 16:51 +0000 [r397746] Richard Mudgett * channels/chan_iax2.c, channels/sig_pri.c, channels/sig_ss7.c, channels/chan_dahdi.c, channels/sig_analog.c, /, channels/chan_sip.c, channels/chan_motif.c: Fix uninitialized value in struct ast_control_pvt_cause_code usage. ........ Merged revisions 397744 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 397745 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-26 23:48 +0000 [r397691] Matthew Jordan * /, main/bridge_channel.c: Better handle clearing the OUTGOING flag when a channel leaves a bridge When a channel with the OUTGOING flag leaves a bridge, and it will survive being pulled from the bridge (either because it will execute dialplan, go into another bridge, or live in a friendly autoloop), we have to clear the OUTGOING flag. This is the signal to the CDR engine that this channel is no longer a second class citizen, i.e., it is not "dialed". The soft hangup flags are only half the picture. If a channel is being moved from one bridge to another, the soft hangup flags aren't set; however, the state of the bridge_channel will not be hung up. Since the channel does not have one of the two hang up states, that implies that the channel is still technically alive. This patch modifies the check so that it checks both the soft hangup flags as well as the bridge_channel state. If either suggests that the channel is going to persist, we clear the OUTGOING flag. ........ Merged revisions 397690 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-26 21:32 +0000 [r397674] David M. Lee * /, main/bucket.c: Fixed bucket.c for systems where tv_usec is not an unsigned long. ........ Merged revisions 397673 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-26 16:25 +0000 [r397644-397651] Richard Mudgett * /, include/asterisk/bridge_channel.h, main/bridge_channel.c: bridging: Fix a livelock with local channel optimization. Use a better means of waking up the bridge channel thread. ........ Merged revisions 397650 from http://svn.asterisk.org/svn/asterisk/branches/12 * channels/Makefile, /: chan_dahdi: Add some missing build cleanup. ........ Merged revisions 397643 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-25 18:12 +0000 [r397622-397631] Matthew Jordan * tests/test_bucket.c, /: Fix bucket unit tests After the review for buckets was completed (r2715), the handling of names in the bucket core was deferred to the wizards. As such, the bucket unit tests cannot expect that passing a URI with a scheme specified but no actual resource name will automatically fail. The tests have been updated to not make this check. ........ Merged revisions 397630 from http://svn.asterisk.org/svn/asterisk/branches/12 * include/asterisk/config_options.h, /, main/config_options.c, tests/test_config.c: Fix the config_options_test The config options test requires the entire configuration item to be transparent from the documentation system. So we let it do that too. As an aside, please do not use this power for evil. Documentation is your friend, and you really should document your configurations. Hiding your module's configuration information from the system attempting to enforce some sanity in the universe is something only a Bond villain would contemplate. ........ Merged revisions 397628 from http://svn.asterisk.org/svn/asterisk/branches/12 * /, res/res_pjsip/pjsip_configuration.c: Add rtpengine configuration parameter The rtpengine configuration parameter was documented in the XML documentation, but it was not actually registered with the sorcery object. This adds the parameter with a default of "asterisk", such that res_rtp_asterisk is chosen as the default RTP implementation. (closes issue ASTERISK-22380) Reported by: Rusty Newton Tested by: Rusty Newton ........ Merged revisions 397621 from http://svn.asterisk.org/svn/asterisk/branches/12 2013-08-23 22:40 +0000 [r397615] Matthew Jordan * /: Set new merge properties on 12 2013-08-23 22:20 +0000 [r397613] Joshua Colp * main/bucket.c: Fix building of trunk. Note: This is why I commit on the weekend.