- Nov 05, 2020
-
-
Kevin Harwell authored
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 (cherry picked from commit 6baa4b53)
-
Ben Ford authored
If Asterisk sends out and INVITE and receives a challenge with a different nonce value each time, it will continually send out INVITEs, even if the call is hung up. The endpoint must be configured for outbound authentication in order 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
-
- Nov 03, 2020
-
-
Alexander Traud authored
ASTERISK-29146 Change-Id: Ib04bdad87d729f805f5fc620ef9952f58ea96d41
-
- Oct 28, 2020
-
-
Kevin Harwell authored
This patch initializes a couple of local variables to some default values. Interestingly, in the 'pj_status_t dlg_status' case the value not being initialized caused memory to grow, and not be recovered, in the off nominal path (at least on my machine). Change-Id: I22ee65e1e1bff8efacea8a167c6c8428898523f7
-
Nick French authored
Commit 44bb0858 ("debugging: Add enough to choke a mule") accidentally removed calls to ast_sip_message_apply_transport when it was attempting to just add debugging code. The kiss of death was saying that there were no functional changes in the commit comment. This makes outbound calls that use the 'flow' transport mechanism fail, since this call is used to relay headers into the outbound INVITE requests. ASTERISK-29124 #close Change-Id: I0f3e32c2e8ac415e30b1d29966d75a1546f0526a
-
- Oct 13, 2020
-
-
Joshua C. Colp authored
This changes the outgoing offer call preference default option to match the behavior of previous versions of Asterisk. The additional advanced codec negotiation options have also been removed from the sample configuration and marked as reserved for future functionality in XML documentation. The codec preference options have also been fixed to enforce local codec configuration. ASTERISK-29109 Change-Id: Iad19347bd5f3d89900c15ecddfebf5e20950a1c2
-
- Oct 05, 2020
-
-
Jean Aunis authored
When handling a send_message request to a non-existing endpoint, the response's body is overriden and not properly freed. ASTERISK-29108 Change-Id: Ie1d3d70065f80793445b60f5e4a7eb31b4b9c5c8
-
- Oct 02, 2020
-
-
Kevin Harwell authored
Added debug logging categories that allow a user to output debug information based on a specified category. This lets the user limit, and filter debug output to data relevant to a particular context, or topic. For instance the following categories are now available for debug logging purposes: dtls, dtls_packet, ice, rtcp, rtcp_packet, rtp, rtp_packet, stun, stun_packet These debug categories can be enable/disable via an Asterisk CLI command. While this overrides, and outputs debug data, core system debugging is not affected by this patch. Statements still output at their appropriate debug level. As well backwards compatibility has been maintained with past debug groups that could be enabled using the CLI (e.g. rtpdebug, stundebug, etc.). ASTERISK-29054 #close Change-Id: I6e6cb247bb1f01dbf34750b2cd98e5b5b41a1849
-
Sean Bright authored
In the event that the desired extension already exists, ast_add_extension2_lockopt() will free the 'data' it is passed before returning an error, so we should not be freeing it ourselves. Additionally, there were two places where ast_add_extension2_lockopt() could return an error without also freeing the 'data' pointer, so we add that. ASTERISK-29097 #close Change-Id: I904707aae55169feda050a5ed7c6793b53fe6eae
-
- Oct 01, 2020
-
-
Holger Hans Peter Freyther authored
Stop advertising RFC2833 support on the rtp_engine when DTMF mode is auto but no tel_event was found inside SDP file. On an incoming call create_rtp will be called and when session->dtmf is set to AST_SIP_DTMF_AUTO, the AST_RTP_PROPERTY_DTMF will be set without looking at the SDP file. Once get_codecs gets called we move the DTMF mode from RFC2833 to INBAND but continued to advertise RFC2833 support. This meant the native_rtp bridge would falsely consider the two channels as compatible. In addition to changing the DTMF mode we now set or remove the AST_RTP_PROPERTY_DTMF. The property is checked in ast_rtp_dtmf_compatible and called by native_rtp_bridge_compatible. ASTERISK-29051 #close Change-Id: I1e0c1e324598a437932c0b7836bcb626aba8e287
-
- Sep 30, 2020
-
-
lvl authored
ASTERISK-29099 Change-Id: I45636679c0fb5a5f59114c8741626631a604e8a6
-
- Sep 29, 2020
-
-
Torrey Searle authored
Arming response to both AST_SIP_SESSION_BEFORE_REDIRECTING and AST_SIP_SESSION_BEFORE_MEDIA causes 302 to to be handled twice, resulting in to 181 being generated. Change-Id: I866e5461564644ffb8a5e12b6f1330b50a7b63ab
-
- Sep 28, 2020
-
-
Sean Bright authored
Change-Id: I41e77a04e4a523f4ed61a7a20b738ffd42be441e
-
- Sep 23, 2020
-
-
Joshua C. Colp authored
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
-
Sean Bright authored
Only track our sample offset if we are playing a non-announcement file, otherwise we will skip that number of samples when we start playing the first MoH file. ASTERISK-24329 #close Change-Id: Ib6b3c84fcaa1063889ab38ba7e7fc50050a3ccfc
-
Joshua C. Colp authored
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
-
Michal Hajek authored
Sometimes not play MOH on bridge. ASTERISK-29081 Reported-by:
Michal Hajek <michal.hajek@daktela.com> Change-Id: I760c73e0c9be1d340303b5d1c18a00c4759e8232
-
- Sep 22, 2020
-
-
Sean Bright authored
The module description needs to be on the same line as the AST_MODULE_INFO or it is not parsed correctly. Change-Id: I9ba11df1415369790e8656fcb527bb2749373c21
-
- Sep 16, 2020
-
-
Sean Bright authored
Change-Id: Id4852c26e9c412af8e37b5dd3c15da9453ad3276
-
Torrey Searle authored
Implemention of History-Info capable of interworking with Diversion Header following RFC7544 ASTERISK-29027 #close Change-Id: I2296369582d4b295c5ea1e60bec391dd1d318fa6
-
- Sep 14, 2020
-
-
George Joseph authored
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
-
George Joseph authored
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
-
George Joseph authored
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
-
- Sep 10, 2020
-
-
Sungtae Kim authored
Currently, it was not possible to create bridge with video_mode single. This made hard to put the bridge in a vidoe_single mode. So, added video_single option for Bridge creation using the ARI. This allows create a bridge with video_mode single. ASTERISK-29055 Change-Id: I43e720e5c83fc75fafe10fe22808ae7f055da2ae
-
- Sep 03, 2020
-
-
Patrick Verzele authored
Building on ASTERISK-25854. When the device requests hold by sending SDP with attribute recvonly, asterisk places the session in sendonly mode. When the device later requests to resume the call by using a re-INVITE excluding SDP, asterisk needs to change the sendonly mode to sendrecv again. Change-Id: I60341ce3d87f95869f3bc6dc358bd3e8286477a6
-
- Aug 31, 2020
-
-
Joshua C. Colp authored
When fixing issues uncovered by GCC10 a copy of the parker UUID was removed accidentally. This change restores it so that the subscription has the data it needs. ASTERISK-29042 Change-Id: I7d396a14ea648bd26d3c363dd78e78bd386b544a
-
- Aug 27, 2020
-
-
Nickolay Shmyrev authored
Properly bump reference on format object to avoid memory corruption on double free ASTERISK-29040 #close Change-Id: Ic5a7faabfe2ef965ddb024186e1de7ca4542e2a3
-
Torrey Searle authored
Adapt the response handler so it also called when 181 is received. In the case 181 is received, also generate the 181 response. ASTERISK-29001 #close Change-Id: I73cfee46a8ca85371280ebdb38674f8fde7510df
-
- Aug 25, 2020
-
-
Joshua C. Colp authored
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
-
Sean Bright authored
Two changes of note in this patch: * Use ast_file_read_dir instead of opendir/readdir/closedir * If the files list should be sorted, do that at the end rather than as we go which improves performance for large lists Change-Id: Ic7e9c913c0f85754c99c74c9cf6dd3514b1b941f
-
- Aug 11, 2020
-
-
Sean Bright authored
The MoH class internal file vector is potentially being manipulated by multiple threads at the same time without sufficient locking. Switch to a reference counted list and operate on copies where necessary. ASTERISK-28927 #close Change-Id: I479c5dcf88db670956e8cac177b5826c986b0217
-
Joshua C. Colp authored
When reading in a codec preference configuration option the value would be set on the respective option before applying any default adjustments, resulting in the configuration not being as expected. This was exposed by the REST API push configuration as it used the configuration returned by Asterisk to then do a modification. In the case of codec preferences one of the options had a transcode value of "unspecified" when the defaults should have ensured it would be "allow" instead. This also renames the options in other places that were missed. Change-Id: I4ad42e74fdf181be2e17bc75901c62591d403964
-
- Aug 06, 2020
-
-
George Joseph authored
This change renames the codec preference endpoint options. incoming_offer_codec_prefs becomes codec_prefs_incoming_offer to keep the options together when showing an endpoint. Change-Id: I6202965b4723777f22a83afcbbafcdafb1d11c8d
-
- Aug 04, 2020
-
-
Ben Ford authored
Fixed a memory allocation that was not passing in the correct size for the struct in curl.c. Change-Id: I5fb92fbbe84b075fa6aefa2423786df80e114c3a
-
- Jul 28, 2020
-
-
George Joseph authored
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
-
Joshua C. Colp authored
Statically configured contacts on an AOR don't have an expiration time so when adding them to the resulting 200 OK if an endpoint registers ensure they are marked as such. ASTERISK-28995 Change-Id: I9f0e45eb2ccdedc9a0df5358634a19ccab0ad596
-
- Jul 24, 2020
-
-
sungtae kim authored
Currently, if the bridge has created by the ARI, the video_mode parameter was not shown in the BridgeCreated event correctly. Fixed it and added video_mode shown in the 'bridge show <bridge id>' cli. ASTERISK-28987 Change-Id: I8c205126724e34c2bdab9380f523eb62478e4295
-
- Jul 23, 2020
-
-
Joshua C. Colp authored
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
-
- Jul 13, 2020
-
-
Nickolay Shmyrev authored
We read beyond the end of the buffer when copying the string out of the buffer when we used ast_copy_string() because the original string was not null terminated. Instead switch to ast_strndup() which does not exhibit the same behavior. ASTERISK-28975 #close Change-Id: Ib4a75cffeb1eb8cf01136ef30306bd623e531a2a
-
- Jul 10, 2020
-
-
Ben Ford authored
Added a new configuration option for PJSIP endpoints - stir_shaken. If set to yes, then STIR/SHAKEN support will be added to inbound and outbound INVITEs. The default is no. Alembic has been updated to include this option. Previously the dialplan function was not trimming the whitespace from the parameters it recieved. Now it does. Also added a conditional that, when TEST_FRAMEWORK is enabled, the timestamp in the identity header will be overlooked. This is just for testing, since the testsuite will rely on a SIPp scenario with a preset identity header to trigger the MISMATCH result. Change-Id: I43d67f1489b8c1c5729ed3ca8d71e35ddf438df1
-