2018-12-26 18:43 +0000 Asterisk Development Team * asterisk 15.7.1 Released. 2018-12-26 10:25 +0000 [58041fc9c8] George Joseph * Revert "stasis_cache: Stop caching stasis subscription change messages" This reverts commit ad961fd7c3313f989d6fa16ba2fc9b138cee4cb5. This commit caused issues with polling when combined with the revert commit "Revert "app_voicemail: Remove need to subscribe to stasis" ASTERISK-28222 Reported by: abelbeck Change-Id: I582534ef730923b16e137021e24f6f87dad0d2b4 2018-12-11 20:06 +0000 Asterisk Development Team * asterisk 15.7.0 Released. 2018-12-03 23:17 +0000 Asterisk Development Team * asterisk 15.7.0-rc1 Released. 2018-10-25 10:25 +0000 [e5a59484bf] 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-10-02 17:15 +0000 [dd35905c23] 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 08:59 +0000 [4371743ba2] Sean Bright * CI: Use bindport instead of port in test http.conf Change-Id: Ife9a6879da63a56e5b8348a2024eeed4e7b1615b 2018-10-03 07:56 +0000 [53fe191708] 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 [fa08aed784] 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 16:15 +0000 [a2b6bbfc9e] 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-09-13 13:03 +0000 [f8b71fadab] Corey Farrell * Resolve warning about duplicate 'dialplan' CLI. Change-Id: I029db1b4a32ccfb38374d6fe944dc430866f4b30 2018-10-02 01:28 +0000 [2c43e5bad4] 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-25 16:19 +0000 [633ac0e928] 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 [078459b3f2] 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-09-28 13:55 +0000 [308c3f9cf6] 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-09-25 17:33 +0000 [625b329f4e] 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 [288bf43eed] Corey Farrell * jansson-bundled: Add patches to improve json_pack error reporting. Change-Id: I045e420d5e73e60639079246e810da6ae21ae22b 2018-09-27 19:32 +0000 [1ffbec4672] 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 [48cf548654] 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 [4afcd37d15] Corey Farrell * astobj2: Reduce memory overhead. Reduce options to 2-bit field, magic to 30 bit field. Move ref_counter next to options 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 [066cade82b] 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 [427c3e3152] 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 [fc842169d4] 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 [dfa926337c] 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 [166c130eac] 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 [d03661bcaf] 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 [4927be3523] 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 [f3539d1d07] 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 [4c636f5377] 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-07-16 22:55 +0000 [86ae100016] 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-09-24 12:43 +0000 [af090e4fad] 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-09-17 15:35 +0000 [720f76def0] 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 [47214d4de1] 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 [670fbbd702] 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 [21f472355e] 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 [65f63bd678] 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 [4181fa6772] 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 [fd87b8e49c] 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 [80cc691252] 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-20 04:48 +0000 [87bac2057e] 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 [f43463d0d3] 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 [03c759d91a] Richard Mudgett * pjproject: Update initial 2.8 patches to apply cleanly. ASTERISK-28059 Change-Id: I027472f2753391646dde594a709a75f14422db93 2018-09-14 15:48 +0000 [a966a23023] 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 [b5959113f6] 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 [36ce08fa7d] 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 [82f9f2db6b] 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 [5626b8ecae] 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 [5713fc0b49] Sean Bright * autoconf: Check for srtp_get_version_string() before using it Change-Id: Id2a916ff9448706090e72ff2c7fb3f5ba24a05df 2018-09-17 07:10 +0000 [cb19ca981d] George Joseph * CI: Fix typo in testsuite git checkout Change-Id: I30024515e5b00a5044fd39fbff27d818f016b719 2018-09-16 06:08 +0000 [644f7ef413] Sean Bright * res_srtp.c: Show linked version of libsrtp on module init Change-Id: Ib0a645d6985de5757cc4399ed2524b2d02c4f342 2018-09-07 09:40 +0000 [5f6bef4e5b] 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 [07d6e2bf16] 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 [ad961fd7c3] 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 [a2b76625aa] 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:18 +0000 [4616c6508a] 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-12 07:18 +0000 [b4cb51ca63] 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 [214b1545b1] 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-09-03 09:55 +0000 [cb197d76e4] 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-08-30 03:42 +0000 [d22c4d1999] 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 [86e079fab9] 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-08-28 08:42 +0000 [9624cbff4f] 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-09-03 06:28 +0000 [feb9e72b04] 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-30 13:08 +0000 [21ea7c870c] 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 [dc307a67d8] 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 [ce99f0c692] 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 [bf530e032d] 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 [781e78fe0e] 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 [4f30cd4b52] Richard Mudgett * res_pjsip: Fix mwi_subscribe_replaces_unsolicited type mismatch ASTERISK-27988 Change-Id: Iccafdd0552ea8aaed647620fb14499f1bf341843 2018-08-16 09:04 +0000 [0dab630533] 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 [58968366fc] 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 [7ec4f0cb6a] 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 [588e4ecf50] 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-23 06:57 +0000 [40416ccaa7] 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: I4e5cfa3318da98deff223d613f82ffc92c9c387c 2018-08-28 19:19 +0000 Asterisk Development Team * asterisk 15.6.0-rc1 Released. 2018-08-21 07:59 +0000 [b4e1a2c8fe] 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 [e30c1c0f76] 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 [4dff996e88] 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 [e2ca78cdea] 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-21 13:50 +0000 [b022c81434] 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-21 18:45 +0000 [de40ba0e02] Alec Davis * chan_sip: remove unnecessary ast_channel_unlock(peer) as RAII looks after it Otherwise console output (get_refer_info): mutex 'peer' freed more times than we've locked! (get_refer_info): Error releasing mutex: Operation not permitted or (get_refer_info): attempted unlock mutex 'peer' without owning it! (__ast_read): 'peer' was locked here. ...dump_backtrace (get_refer_info): Error releasing mutex: Operation not permitted (__ast_read): mutex 'chan' freed more times than we've locked! ASTERISK-28011 #close Change-Id: I6e45f2764ba4f3273a943300f91ac9b461ac2893 2018-08-20 11:23 +0000 [4253d387a7] Richard Mudgett * AMI: Remove docs for nonexistent AMI ContactStatus event headers Change-Id: I5736965c64c44338f7330e85a24bb46818607f19 2018-08-10 19:28 +0000 [49c06adc9d] 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 [3f98f49e43] 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-08-15 21:31 +0000 [050d12514a] 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 [f10feed7d5] Richard Mudgett * pbx_dundi.c: Handle thread shutdown better. Change-Id: Id52f99bd6a948fe6dd82acc0a28b2447a224fe87 2018-08-15 18:14 +0000 [60d61a42f8] 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 [66ffda284b] Richard Mudgett * pbx_dundi: Update sample config documentation. Change-Id: I33d0ad0611c2124ca3440f0f811fa0f45e4e2849 2018-08-15 14:44 +0000 [ef9ef0f856] 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 [8e9fc3710c] George Joseph * CI: Fixup for non-13 branches Change-Id: I5e1d4a09e58b92b541bc8ed6f9e10e54c4e5101f 2018-08-16 13:28 +0000 [0f1b3e68b9] George Joseph * CI: Final version of setting correct gerrit creds Change-Id: I7729ecceedceb12f52bf18dae259846aa1d993b3 2018-08-16 12:08 +0000 [ee4b07f66f] 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 [81938082ae] 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 [ce04e2ce92] Corey Farrell * res_resolver_unbound: Fix leak of config nameserver strings. Change-Id: I3f396316bb40d1ae6e91f5f688042420f1a540ed 2018-08-15 13:51 +0000 [0057cd8933] Corey Farrell * res_pjsip: Resolve transport management leak at shutdown. Cleanup idle check scheduled events at shutdown. Change-Id: I61bfbb56bac69fe840c3242927d31ff3593be461 2018-08-15 11:44 +0000 [7b1fda5a42] Corey Farrell * CI: Disable res_odbc if REF_DEBUG is requested. This is for 13/15 only, res_odbc never unloads so it is impossible to do REF_DEBUG testing with that module. Change-Id: I2c1e32b80564e8fb08b6b5900ede6b5d304ebd10 2018-08-15 11:12 +0000 [f4dc473261] 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-14 11:55 +0000 [aa163aecee] Richard Mudgett * contrib/scripts: Make astgenkey executable Change-Id: I11641d65592536dea9cbca5aa94a24c25d24dd5f 2018-08-14 07:29 +0000 [614c143134] 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-08-07 10:57 +0000 [905fc67d10] 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 [1560e4e65f] 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 [32d631de0e] 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-07-19 22:28 +0000 [c28c77c8bb] 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-06 12:19 +0000 [45aeb08ada] Richard Mudgett * res_pjsip.h: Fix doxygen comments. Change-Id: I9cf97bdc756012d1f552ab007f4aa85e0ddb4e62 2018-08-06 06:36 +0000 [78e6192262] 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 [09398c26d2] 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 [7e78539136] 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 [d6edff4c52] 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 [d0058ebd21] 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 [0b8bb3a3ac] 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 [ed4c017952] 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 [c5ed5fbb7d] 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 [f040269d00] George Joseph * CI: Add optional uninstall step before installing asterisk Change-Id: I7dedf1e925eafc3a0adf01dd9dfbe44eb642aab7 2018-07-28 11:49 +0000 [fe541b5379] 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:08 +0000 [7fa8708460] 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 conditionally PKG_PROG_PKG_CONFIG must be used. Because that check happens earlier than Jansson, it must be placed in front of that. The script configure does some pre-checks for the script configure of the Asterisk internal NetBSD Editline library. 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. ASTERISK-27991 Change-Id: I69ea0f379f87a50049654b2487c76ee1c04fa53a 2018-07-28 08:00 +0000 [961202b658] Joshua Colp * res_pjsip_pubsub: Use ast_true for "prune_on_boot". Change-Id: Iedec4e7390b3e821987681da24d0298632b9873d 2018-07-24 13:44 +0000 [26e4d304d7] 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 [9165735a7d] 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 [613ebfd718] 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 [0cc68a3505] George Joseph * CI: Fix placement of job summary statments Change-Id: Iace19e718f4e8fb48eb7dc9f98af53b115cc45f3 2018-07-18 09:32 +0000 [0860f70c79] 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 [d301dca07f] George Joseph * CI: Add docker info to job summary Change-Id: I45d52005a9b692ad303c11792f226ace1e449901 2018-07-23 13:49 +0000 [86e93c537c] 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 [f2d19f7250] 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 [c52c915d7f] 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 [64d6b1de4f] George Joseph * CI: Explicitly pass BRANCH_NAME to buildAsterisk and installAsterisk Change-Id: I652f4a0ea5107c778e27a78bccb67b18b0c4e087 2018-07-24 13:29 +0000 [a56b1321d3] George Joseph * CI: Add options to initialize and cleanup database to runTestsuite.sh Change-Id: I352333233bab5377723bf37d490ba84fc55bc853 2018-07-25 09:07 +0000 [72122d9963] Corey Farrell * CI: Do not `mkdir 2`. Change-Id: Ib7377d26a6c98b38bad463f47c84f1875ac84eb7 2018-07-25 07:34 +0000 [5e7f00eb51] Corey Farrell * Build System: Silence build of bundled jansson. Change-Id: I7392c79c0173057f5378010bf1fe65e300e8fc56 2018-07-25 07:13 +0000 [bdbce573b2] George Joseph * CI: RefDebug: Fix reference to testsuite URL Change-Id: I0ee41d95a87f0d97b01f2757012b846bcfe6443d 2018-07-24 14:28 +0000 [c0c0e16fd7] 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 05:39 +0000 [c1d4d595eb] George Joseph * CI: Add --privileged flag to docker options Change-Id: If92d55f15306e55dd7091ac3c47b13ebbbb03488 2018-07-24 05:22 +0000 [1ccf7e806f] George Joseph * CI: Set correct user:group when publishing docs Change-Id: Ibabeb9ac730d9755cf54318d0da74771c939b86b 2018-07-24 04:57 +0000 [3286280835] 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-23 10:23 +0000 [837c63f834] 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-21 11:58 +0000 [6fd6a4b60e] Corey Farrell * CI: Fix mkdir CACHE_DIR. Change-Id: Ic9f9a61e230047836c836206731f8ff7eb3538c9 2018-07-21 11:22 +0000 [1bab2d0b77] 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 [4fb3b1b090] 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-16 15:08 +0000 [8cc8c0178d] Corey Farrell * Enable bundling of jansson. Change-Id: Ib3111b151d37cbda40768cf2a8a9c6cf6c5c7cbd 2018-07-20 09:25 +0000 [c8cf690b0d] Corey Farrell * CI: Fix logger.conf for unit tests. Change-Id: Idea59d60eab20105de50b34f0f0d506e6ef55d5c 2018-07-19 10:34 +0000 [3585d7206b] George Joseph * CI: Add wiki doc publish to periodics Change-Id: I29ba26134e5083bc6788ede235f1a5d4383c148a 2018-07-20 06:54 +0000 [1859967e8b] 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-20 06:20 +0000 [9283685939] 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-19 16:17 +0000 [1888633669] Richard Mudgett * res_pjsip: Update endpoint transport option documentation. Change-Id: I5394fdff6a296efc8e1695a156e616acd932ae52 2018-07-19 13:27 +0000 [d4b6900a22] 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 [a4f0fc38de] Corey Farrell * contrib: Update systemd README.txt. Mention need to compile Asterisk with systemd development package installed. ASTERISK-27968 Change-Id: Ib3a973be403c61cbe09572b0f912fb1aa1bff026 2018-05-29 09:31 +0000 [9925c3f7f0] 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 [4048e25194] 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 [c40f1f14aa] 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-18 11:34 +0000 [cf63a4b0c7] 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 [5fa6d19c76] 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 [47eb309257] George Joseph * CI: Fix merge strategy Change-Id: I5e3fb6adfa6cbf694c0deecf02e3879297b0c12e 2018-07-17 10:41 +0000 [bd8011f1aa] George Joseph * CI: Fix regex in daily and ref_debug jobs Change-Id: Icf2e67818b2155a158d2390b138613e1f653ea92 2018-07-17 09:09 +0000 [c590931ca5] 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 [5e4e384ea4] George Joseph * CI: Add pre-build merge back in as RECURSIVE Change-Id: I0ff1730ef4a4f0ac9f18ccc9bc0dfe7a782f57a8 2018-07-17 09:01 +0000 [ca37fcd54c] George Joseph * CI: Remove pre-build merge from gates and checks Change-Id: Ibc151f63dcec4db847915c2f3cbe5b467dd59574 2018-07-17 07:13 +0000 [4cecc158f4] George Joseph * CI: Fix logic inversion in runTestsuite Change-Id: I56399aa384468f45494c2c3650420563a0b6efe1 2018-07-17 04:03 +0000 [6858d8e48e] George Joseph * CI: Add teardownRealtime Change-Id: I2fe55c38607eaec2fbf69ef23a5019e0c443a64b 2018-07-16 13:30 +0000 [2d91dbedd0] George Joseph * CI: Prevent Jenkins from triggering jobs back to itself Change-Id: I9cae8bb3d1a2cea335d3ccd88d471832549666fd 2018-07-13 18:26 +0000 [e1635adf8e] 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 [c3e7a50e9a] George Joseph * CI: runUnittests: loop a few times on waitfullybooted Change-Id: Icebc0d013896f3b2a7214945cac60647435c1651 2018-07-16 10:49 +0000 [3cc4fc6d2f] George Joseph * CI: Add realtime checks to dailies Change-Id: I6dc8ab1679b3505c6dde1d47e1b9276df47814f8 2018-07-16 09:13 +0000 [a1959dfb33] George Joseph * CI: Add weekly REF_DEBUG testsuite run Change-Id: I5b581d0a0d1d1bb9b38961d40b112fb448355037 2018-07-16 08:44 +0000 [97f111ebbb] George Joseph * CI: Fix bad reporting of status by the verification pub Change-Id: I6f31a130b3ba0187149aaaa2ce94195a79e0f6a6 2018-07-16 07:16 +0000 [521582c2a8] George Joseph * CI: Make build tag an acceptable docker name Change-Id: I3a4b8a4a9c488ddabf9daf651dc1334222056f38 2018-07-13 22:44 +0000 [57b4d2f668] 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-13 06:56 +0000 [b75b798a0f] George Joseph * CI: Add daily periodics to CI Change-Id: I26933e73928e091ae72e838c02f4f2ec7c3983d6 2018-07-09 04:42 +0000 [7aef73bbc8] 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 [16777edefc] George Joseph * CI: Add Asterisk Gates Change-Id: I7e2467f9120812551238d8005deb97f965279205 2018-07-11 15:55 +0000 [ce4c29fc40] George Joseph * CI: Remove duplicate checkout Change-Id: If5f925b4c4ed7000b153f3ed8386ce2140c886f8 2018-07-11 15:09 +0000 [40a5bd599e] George Joseph * CI: Update cleanup steps and permissions Change-Id: I7ca92935979d94845af8e1caf4468cbd6209b7de 2018-07-11 14:54 +0000 [3cad286426] George Joseph * CI: Fix log artifact paths Change-Id: I55136de8f4d9c3b56bd4d054306a187bb04a4b7d 2018-07-11 14:45 +0000 [e2dc13223e] George Joseph * CI: Remove CleanBeforeCheckout option for testsuite Change-Id: I510231c9087f7be5272b8ef3f3223eadaaffb754 2018-07-11 14:00 +0000 [4ac963284f] George Joseph * CI: Move gates into source repo Change-Id: If028ede5f3b127fa274c63ce166bc04ad7c1e5db 2018-07-11 11:57 +0000 [6cf7f1b9da] 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-11 06:14 +0000 [c89b8ded35] 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-10 13:28 +0000 [b459ce235d] 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-06-23 01:33 +0000 [50cb993c77] 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 [d9312aaa4f] 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 [ec0e185274] 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 [092f40dcfd] 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 [4a23f39e3a] 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 [c7ee75ced4] 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 [c53a382e50] 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 [b34a7c54d4] 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-06-23 04:50 +0000 [5a34170f6e] Alexander Traud * bridge_softmix_binaural: Enable FFTW3 in Solaris 11. ASTERISK-27939 Change-Id: Ice5640e08385a64a0a6555deaccd91e86bca154f 2018-06-29 18:28 +0000 [d37bfd56db] 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-03 18:15 +0000 Asterisk Development Team * asterisk 15.5.0-rc1 Released. 2018-07-02 18:44 +0000 [c333eef78e] 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-07-01 13:54 +0000 [6b66ce99cf] 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 [9855842432] 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-28 12:07 +0000 [7b63f32649] 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 15:42 +0000 [9149bb498f] 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-25 07:37 +0000 [71ca965a56] 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-21 00:28 +0000 [e1502f400b] 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-18 21:22 +0000 [541d343c20] 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-25 22:08 +0000 [e0e9552985] 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-21 11:45 +0000 [54a3340e3a] Alexander Traud * uuid: Enable UUID in Solaris 11. ASTERISK-27933 Reported by: bautsche Change-Id: I9b8362824efbfb2a16981e46e85f7c8322908c49 2018-06-21 16:39 +0000 [8274c0fa28] 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 [cbe7ec8d98] 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 [72a13883b7] 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 [437516c5e7] Alexander Traud * res_http_post: Enable GMime in Solaris 11. Change-Id: Ie434541f18f894c751d2e44bcb3efb3cac626019 2018-06-21 05:08 +0000 [f068dc1230] 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 [370edfc8ca] 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 [16838b544e] Alexander Traud * func_env: Compile in Solaris 11. Change-Id: Idc9b36720f3d29c90a35a6a1ae79a7f9e1aaf50e 2018-06-21 05:01 +0000 [c200547230] 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 [d13e6f77e2] Alexander Traud * BuildSystem: Enable ./configure in Solaris 11. ASTERISK-27931 Change-Id: If298ce7f03be227a3687b9c20d382c9c55a72404 2018-06-20 13:24 +0000 [f00f097eeb] 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 [4d598931ba] 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-12 14:09 +0000 [f82d0a9380] 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 [da2f32bd85] 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-13 16:41 +0000 [437fe5ac76] 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 [cf56ec739d] 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-18 16:07 +0000 [84fa1b9c36] 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 [ce2aad08ee] Richard Mudgett * Fix some doxygen and curly placement. Change-Id: I9a784a7c804120a8fa826c2a4cb9957e4b0b2fc8 2018-06-15 15:21 +0000 [c53fcc7650] 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-18 13:17 +0000 [f0ebfa45b5] 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 [917cb28a35] Richard Mudgett * channel: Fix some more unprotected channel flag setting. Change-Id: I34c3b1201b1de539945bcfdcb264fff30332d48c 2018-06-12 09:30 +0000 [b51c4a0438] 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 [5cc428f840] Alexander Traud * tests/test_utils: Repair ./configure --with-ssl=PATH. ASTERISK-27914 Change-Id: Ibcab8f556ee77776f203cff8b06d776a673b7bc4 2018-05-31 16:22 +0000 [8d08b115c5] 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 [d7beaafdd9] 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-04 20:31 +0000 [cdeac34dbe] 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-04-30 17:38 +0000 [f597032e83] 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 [4b25cde9b3] 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 [40074487d8] Alexander Traud * crypto.h: Repair ./configure --with-ssl=PATH. ASTERISK-27908 Change-Id: Iac49d9f82faeb8a4611c6805906bd6d650b1b1d8 2018-06-08 04:03 +0000 [016070fd3a] 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 [218ac8e9b2] Alexander Traud * res_srtp: Repair ./configure --with-ssl=PATH. ASTERISK-27905 Change-Id: Ibb7dc148a0048f4f9c3b12937ba4240dff0d15e2 2018-05-31 10:25 +0000 [614d5a5645] 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 [117141ad3d] 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 [ce8c34c3d1] Alexander Traud * ooh323c: GCC 8.1 warned about output truncated before terminating nul. ASTERISK-27901 Change-Id: I5a8e894f4924ef52e3094f6870656a559d67f3d7 2018-05-22 16:21 +0000 [5ddca1a4a8] 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-23 16:20 +0000 [02ea0fde0b] 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-30 01:12 +0000 [1958c9e158] 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-05 04:36 +0000 [4359a386e5] 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-06-04 09:50 +0000 [89fdbc67c9] 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 [350da8f21d] 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 [88ff525ffc] 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 [60242e1418] 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 [cef08821e8] 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 [5ffdf896d8] 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 [789f042ad8] 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 [30da5cfba8] 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 [d94dd27667] 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 [9c9f91c909] 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 16:45 +0000 [0896d5db95] 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-20 06:36 +0000 [f2971d5eb3] 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 [ae2afa73a2] 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 [61a48ef5f0] 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 [08f7650ab6] 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 [5157f46a5d] 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 [9b85b30e57] 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 [8d22e7e6cf] 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 2018-05-11 12:49 +0000 [4f60585de1] 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 [d3985ee99a] 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 [62b80c0d3a] Alexander Traud * rtp_engine: Avoid a typo error in Doxygen for ast_rtp_codecs_find_payload_code. Change-Id: Ica089d4507a27ddfc4ce3a88d697ffbef378de48 2018-05-07 10:25 +0000 [d4e69edbdd] 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 [a36d45bdcb] 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-04 16:07 +0000 [61fc7e452b] 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-05-09 09:30 +0000 [c9c0656d59] Corey Farrell * git: Ignore *.orig. This prevents accidental commit of files created by patch. Change-Id: I68380db61f0f9d620046f719ccd978811d0e9964 2018-04-18 02:27 +0000 [2c53d72da1] 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 [62e507888c] Corey Farrell * makeopts.in: Remove unused/undefined AST_MARCH_NATIVE. Change-Id: I617a96ebb83ec99f5d3176bbbee2d2a272ccb203 2018-04-16 14:13 +0000 [380b5ae0a1] 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-05-08 04:59 +0000 [30c710ee23] 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 [c60c019511] 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-04-20 18:12 +0000 [0ad4d2301c] 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-05-03 06:34 +0000 [975d277377] 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 [0295559c4a] Sean Bright * iostreams: Add some documentation for the ast_iostream_* functions Change-Id: Id71b87637f0a484eb5a1cd26c3d1c7c15c7dcf26 2018-05-02 07:43 +0000 [5d75737b97] 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 [0c849b723e] Richard Mudgett * res_pjsip/pjsip_distributor.c: Add missing off-nominal request response. Change-Id: I389579b39c523d1d1e8ce020ef549a8bb5781c9b 2018-04-30 17:20 +0000 [d4b7030b05] Richard Mudgett * res_pjsip/pjsip_distributor.c: Pull some assignments out of if tests. Change-Id: I3d30d638b53a4bbe9bf9aad853c649d583894112 2018-04-30 09:38 +0000 [e143134a68] 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 2017-12-11 12:34 +0000 [228bc1890b] 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 2018-04-18 15:59 +0000 [2f9e92f859] 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 [9ef3a79397] 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 [930df240c3] 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-20 07:13 +0000 [75d306f6c3] Alexander Traud * BuildSystem: Enable IMAP storage on FreeBSD and DragonFly BSD. ASTERISK-27639 Change-Id: I1347f3f2f3737010d0a80a5c30b5aaf71cf3ccb0 2018-04-20 05:50 +0000 [cabe201515] Alexander Traud * BuildSystem: Add DragonFly BSD. ASTERISK-27820 Change-Id: I310896143e94d65da1c2be3bb448204a8b86d557 2018-04-20 05:40 +0000 [216c9c952c] 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 [79c82ef29a] Alexander Traud * install_prereq: Add DragonFly BSD. ASTERISK-27820 Change-Id: I718ddb000fe5184b1bdc7759da67a370a7520144 2018-04-19 13:44 +0000 [0238240520] 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-18 11:41 +0000 [3543bb83bd] 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 16:24 +0000 [66ea6dd5f9] Corey Farrell * res_pjsip: Fix initialization of extended stringfields. It is possible for initialization of extended stringfields to fail. Add checks for this failure. Change-Id: I062e09852db3d37ceefaf6c2048958fa0118304f 2018-04-18 15:40 +0000 [4a1cb8cfc7] 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 [9e2b44115d] 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-18 05:32 +0000 [9fc8da866c] 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-10 16:09 +0000 [50b133e133] 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 [8cca1501a6] 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 05:27 +0000 [b62d4dc122] 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-13 15:14 +0000 [471be2b2c6] 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-19 18:45 +0000 Asterisk Development Team * asterisk 15.4.0-rc1 Released. 2018-04-19 13:34 +0000 [fb193a12b0] Chris Savinovich * Update for 15.4.0-rc1 2018-04-04 13:12 +0000 [5c2120f5f5] 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-17 07:13 +0000 [0d9f42eb8e] Alexander Traud * utils/pval: Add -lBlocksRuntime for compiler clang conditionally. ASTERISK-27809 Change-Id: I930b364a33d54cc08dedfcd5bb45f7e83242f134 2018-04-09 17:09 +0000 [8eb0622971] 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-13 15:17 +0000 [00bdee4e62] 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 [972b6e140f] 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 [a7770fabd7] 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 [571ccf92b2] 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 [10f4c68f70] 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 [54a6bb5f8a] 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 [dca6a4e774] 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 [b21fabc73b] 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 [e8b3da8896] 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 [6b9933fe44] 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 [ae9c8d999d] 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 [49aa0da75f] 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 [2fb12dcbc0] 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 [a5db8c47d6] 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 [01cc0731d0] 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 [8dd7ba31e9] 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 [be75004852] Richard Mudgett * res_pjsip: Update authenticate_qualify documentation. Change-Id: I3811de0014b1ffe96d4a3b49cddd5d4ca02ee5d4 2018-04-02 16:49 +0000 [1790ffb390] Richard Mudgett * app_agent_pool.c: Fix off nominal ref leak. Change-Id: Ib427ffc2c802620eaafb08b1c2a17dddd8fb8eb6 2018-04-04 10:02 +0000 [c3ecb39406] 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 [c7f4aaf4c1] 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 [132fd2abdb] 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-03-29 17:07 +0000 [f044ae1804] 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 [71b3a72c32] 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 [fdabd5726d] 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 [77b6f8c44e] 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 [42abd6d3d8] 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 22:00 +0000 [9348e05585] 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 08:52 +0000 [ad3a8dc497] 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-26 07:42 +0000 [35ebe3376d] 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-01-02 07:54 +0000 [8d76f678b2] 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 [ce2ea9e6aa] 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 [9f1be1554c] 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-23 13:15 +0000 [57066f2035] Alexander Traud * install_prereq: Add Slackware (somehow). ASTERISK-27770 Change-Id: Ib87e0483c785542238cfe34c1e884d5a31edfaab 2018-03-23 09:13 +0000 [28694bc0a4] Alexander Traud * install_prereq: Add Gentoo Linux. ASTERISK-27769 Change-Id: Ieb13293cd67481f3a33f58f6f7c8c3ee1e338e7a 2018-03-17 01:02 +0000 [6a847614b6] Corey Farrell * main/indications: Use ast_cli_completion_add for all completions. Change-Id: I371be01f178fb542a9fbe8d97e7ae21aa4d82c36 2018-03-22 07:27 +0000 [406d5784a5] 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 [eb5b74b71f] Alexander Traud * BuildSystem: With external editline, do not require libs for internal editline. ASTERISK-27761 Change-Id: Ib17a7415297a210cfcdbf149e4df9b6edadbfab6 2018-03-21 19:25 +0000 [f48a6519e2] 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 96cbfc0d45d3ed9c4a96791f863f267630f9928a. Change-Id: I5c53d091518d0d6767da0e77958ef163d9c8d771 2018-03-20 15:28 +0000 [fb0f2adf84] 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 09:58 +0000 [cb6bc25632] 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:53 +0000 [d076eedf28] 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-17 20:03 +0000 [3abb3bb834] 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 [f164537553] Corey Farrell * named_acl: Use ast_cli_completion_add. Change-Id: I317a82de976bbdbfe4352c243e32a7bb8f66c377 2018-03-17 01:58 +0000 [ebf9ec0948] Corey Farrell * main/sounds: Use ast_cli_completion_add. Change-Id: I140e1137906bbfcdb61c0c6304159be459ad873e 2018-03-17 01:09 +0000 [b3736ed54b] Corey Farrell * manager: Use ast_cli_completion_add for completion generators. Change-Id: I658141c6ec490a3e866b02d2afea757928ceaabf 2018-03-17 02:16 +0000 [0a944dcdcc] Corey Farrell * main/test: Use ast_cli_completion_add. Change-Id: I5133ff2ba4e030f9733fb3d050c863d72a22ae6b 2018-03-16 10:19 +0000 [5de4dae6dd] 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-18 10:16 +0000 [dfb2ebe72e] 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 02:25 +0000 [7e9ce160b1] Corey Farrell * main/translate: Use ast_cli_completion_add. Change-Id: I0e2402660e54d91f74ab0804c62a5b1925577413 2018-03-17 02:00 +0000 [78201f654d] Corey Farrell * main/taskprocessor: Use ast_cli_completion_add. Change-Id: Ie5f812a988ed811fd11967151932de62bc131b48 2018-03-17 00:51 +0000 [459fd5900c] 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 [691fc3346c] Corey Farrell * main/config: Use ast_cli_completion_add for reload completion. Change-Id: Ia3fa4c03f2285a1ec8814bbe7f4624ead9111ad1 2018-03-17 04:31 +0000 [bf43977b25] Corey Farrell * main/bridge: Use ast_cli_completion_add. Change-Id: I3775a696d6a57139fdf09651ecb786bcf1774509 2018-03-17 16:41 +0000 [9af4df6a9e] 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 [ffefb56b3f] 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 [f93d3fd45f] 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 [57ed69dcd4] 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-02-27 03:01 +0000 [a316cb78b7] 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 [96cbfc0d45] Alexander Traud * BuildSystem: In NetBSD, the Python Programming Language is python-X.Y. ASTERISK-27717 Change-Id: If90ddf9c396c32e7402a894f42dce215c30049d1 2018-03-16 09:53 +0000 [a4f5fa9a2b] 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 [f121e2c01b] 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 [2ef947555b] 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 [a4f2081beb] Corey Farrell * main/cdr: Use ast_cli_completion_add for CDR channel completion. Change-Id: Ie81830647a23aad61c1162583b6d50adbe6e7822 2018-03-15 08:19 +0000 [ff04a20a11] Corey Farrell * main/ccss: Use ast_cli_completion_add for core id. Change-Id: I44b25d6d24c7d9bc1bb38a50774b38883162f98f 2018-03-12 10:20 +0000 [31b7d5ca8b] Alexander Traud * install_prereq: Add Arch Linux. ASTERISK-27738 Change-Id: I7ca620e3c4dfb4b064a19382c4915aeb42a2a09f 2018-03-15 04:49 +0000 [5be16ef66e] 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 [8fa4b19b0d] Corey Farrell * astobj2_container: Use ast_cli_completion_add for container names. Change-Id: I4f0fc09e820eb8d8da2354a177dbcf503c56ddd1 2017-12-09 04:52 +0000 [ea8f9c69c4] Corey Farrell * main/channel: Use ast_cli_completion_add for channeltypes. Change-Id: Ia845fae6a84801cc7d9996767b99efb2753cbb48 2018-03-14 12:38 +0000 [73885c6055] 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 [7b8c67741a] Ross Beer * res_pjsip_rfc3326.c: Account for more than one 'Reason' header ASTERISK-27741 Change-Id: I0aa59a54735c6d20b95c54db1bd095dbf93e7adf 2018-03-12 08:05 +0000 [a797309e21] Alexander Traud * install_prereq: Add SUSE. ASTERISK-27736 Change-Id: I4cafc8973349d50a7cb7919ddf0bb1aaef4bfc3e 2018-03-12 05:19 +0000 [ca57964165] Alexander Traud * BuildSystem: Enable IMAP storage on openSUSE and Arch Linux. ASTERISK-27734 Change-Id: I8d6e6a1c08c031649764f5277fbbb85e57c3a9d4 2018-03-13 15:53 +0000 [472b2835c9] 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-10 03:33 +0000 [06e84e1c42] 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 [2998be1de8] 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 [8e2ae473fe] 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 [2fe303b2b9] 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 [818a00cf60] 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 [e7a75a1478] Alexander Traud * BuildSystem: Enable dladdr on non-Linux platforms like FreeBSD. ASTERISK-27641 Change-Id: I587e8ba0123c70fc10cfd8b0ac3299551f61d84b 2018-03-07 13:50 +0000 [de79500412] 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 [1055f807ac] Alexander Traud * install_prereq: Add NetBSD. ASTERISK-27729 Change-Id: I7a706d51375d54cf5e36d32397bfe09a48670804 2018-03-08 09:04 +0000 [da38f5f81f] 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 [9350fc0b6d] 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 [2231e1a04d] 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 [852ef63964] 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 [68429e95f4] 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 [80113ec68d] Sungtae Kim * voicemail: Fixed wrong voicemail message count Fixed wrong voicemail mailbox reference for Action: VoicemailUsersList. ASTERISK-27703 Change-Id: I99bfec14bd4ae475b0fa1fac5a7992f3e2e8d64a 2018-03-06 13:31 +0000 [5eddeddf10] Ross Beer * res_pjsip_rfc3326: Order of 'Reason' headers break many endpoints ASTERISK-27554 Change-Id: If61c7faab7d2fa1031c056ed6268fe928e2391cf 2018-03-07 09:32 +0000 [4a972d24c9] 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-02-20 11:48 +0000 [2c0529916c] 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 [80a0ad1c76] 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 [95354e3996] Alexander Traud * BuildSystem: Depend not implicitly but explicitly on external libraries. ASTERISK-27722 Change-Id: Ie7b8c30d86cb00a54d6ac4e09e6f28f42d2bd52c 2018-03-05 08:15 +0000 [4c1f1ee43f] Alexander Traud * res_http_post: Enable GMime in NetBSD. ASTERISK-27719 Change-Id: I230c5f9f316b2e9465c093c13580f72ebbaf67a7 2018-03-05 04:16 +0000 [b59355e3f9] Alexander Traud * BuildSystem: Enable autotools in NetBSD. ASTERISK-27716 Change-Id: I52525e35e1620341272219911d054a1e3d3ec01e 2018-03-05 03:42 +0000 [dba0ab5e06] 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 [a9a61cb909] 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 [7ec3020668] Alexander Traud * BuildSystem: Cast any intptr_t explicitly to its proposed type. ASTERISK-27713 Change-Id: I90c769e3c7f8c26de8a3af11335862cec15a1b22 2018-03-03 06:56 +0000 [e30f075f48] 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 [a65fa8ed77] Alexander Traud * BuildSystem: Avoid re-defining of pthread_* on NetBSD. ASTERISK-27711 Change-Id: Idc9194035b2958b99f6b01eb5b438d45a074565b 2018-03-02 07:05 +0000 [1028ccc3dc] Alexander Traud * BuildSystem: Install init scripts on openSUSE Tumbleweed. ASTERISK-27710 Change-Id: I4c777e41b31d4415bbe21cb435ad47b43ebb5467 2018-03-02 05:12 +0000 [5012d436fb] Alexander Traud * BuildSystem: Avoid == for comparison in ./configure. ASTERISK-27709 Reported by: John Nemeth Change-Id: I11b1ae8fd404c04066f1458f5d71f9536359d58d 2018-02-27 15:40 +0000 [f6d5bf99f2] 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 [e16228be30] Corey Farrell * gitreview: Reorder and add padding. Change-Id: I459dc320a8c9452a01eed6f403d786741587c890 2018-02-23 21:24 +0000 [66da3570fe] 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 [86e73210fb] 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 [8d707d33ab] 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 [213cd59412] 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 [b666b4c14d] 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 [8eff97cf72] 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 [9d60fc6298] Sean Bright * modules: Set deprecated modules to not build by default Change-Id: I09090f70224866aead6b3207fa784cfefea7d539 2018-02-20 10:33 +0000 [3bca5cfc31] 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-19 04:21 +0000 [a6b655dca9] 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-14 07:33 +0000 [bcc2da7f83] 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 2017-12-04 05:27 +0000 [15873d6c0b] 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 2018-02-22 23:31 +0000 Asterisk Development Team * asterisk 15.3.0-rc1 Released. 2018-02-22 11:15 +0000 [483c5f7add] Kevin Harwell * AMI: Bumping AMI non-breaking number for Asterisk 15.3.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: I583817e2f3d782aeb4300665250362ef7b59a375 2018-02-21 12:52 +0000 [0571da9932] Richard Mudgett * manager.c: Fix lseek() parameter order. ASTERISK-27659 Change-Id: I04a2705d2cb7df250769967bc59e2b397a49b797 2018-02-20 13:11 +0000 [0fda987ead] 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 [f1a4691741] 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 [d669ca9c71] 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 [f98419c68c] 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 [14de1c16a5] 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 [180715bd20] 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 [c8add33919] 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 [4a1b8ca6d7] 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 [dec428faf3] 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 [932bb3b98b] Richard Mudgett * channel.c: Fix typo. Change-Id: I4eeedf89085697e81c354eb92d546686c67b0b5b 2018-02-20 04:31 +0000 [6bdfa32be8] 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 [bb1bc55f76] Sean Bright * res_http_websocket: Don't leak memory on read failure Change-Id: Ic449ea832bc81a1671c0e910c5fbe8c683e3da89 2018-02-19 03:57 +0000 [4ca9cecf96] 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 [95dd78688f] 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 [68036355b9] 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 [9b9ee53a06] 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 [4452656588] 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 [a77c8ce375] 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 [e560529ad7] 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 [70d18a38bc] Alexander Traud * BuildSystem: Allow newer autotools on OpenBSD. ASTERISK-27683 Change-Id: I5ec9dafbb0c16b6f2740c641980bc2eaaf995624 2017-10-16 07:36 +0000 [6d097e6c79] 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 [b895e636df] 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 [1c9adea8ce] Alexander Traud * BuildSystem: Enable IMAP storage on OpenBSD. ASTERISK-27681 Reported by: Stuart Henderson Change-Id: Ifb6b614acb251b695b9417d76510e73eb335b679 2018-02-16 05:58 +0000 [0993f6e765] Alexander Traud * res_calendar: Specialized calendars depend on symbols of general calendar. ASTERISK-27680 Change-Id: Ifb77912e424fe3710a025c18526fada673ec0b79 2018-02-16 05:02 +0000 [f854e5c12c] Alexander Traud * BuildSystem: Enable system provided libedit on OpenBSD. ASTERISK-27677 Change-Id: I0854e3616d1361ae9b6907d3d3444a02784ac62b 2018-02-15 14:30 +0000 [a03660f4f2] 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 [1680deb9e6] 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 [226b70c711] Alexander Traud * BuildSystem: Remove chan_h323 leftovers. ASTERISK-27670 Change-Id: I07a8ef8bbd6001e25711fa1bff152eb6c9efa729 2018-01-17 08:17 +0000 [bbff402be6] 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 [e83d16f3c2] Alexander Traud * BuildSystem: Do not warn when bash is not installed. ASTERISK-27631 Change-Id: Iefdf268b0b98c3e7d8089ba87cf78136ac1d785b 2018-02-12 22:15 +0000 [d5bab6d242] Corey Farrell * main/asterisk.c: Remove silly usage of RAII_VAR. Change-Id: I7e2996397fbd3c3a6a69dd805c38448ddfc34ae9 2018-02-11 15:27 +0000 [c1d1d30bf5] 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 [6ac8fa5007] 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 [8423ea954d] 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 [4bbaa104ac] 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 [86cb22999a] 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 [aebd72d328] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Idc36e91db30c0163c560d04c5a82bca5d6ce92a8 2018-02-09 12:06 +0000 [09575b3f62] 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 [bb5cf86f2b] 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 [53afe4660a] 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 [c2684729a5] 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 [a0ec3fcbaa] Richard Mudgett * app_confbridge: Add the Muted header to ConfbridgeJoin AMI event. ASTERISK-27651 Change-Id: Idef2ca54d242d1b894efd3fc7b360bc6fd5bdc34 2018-02-02 17:35 +0000 [c3916cbc0e] 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 [3cc4cb9c68] Richard Mudgett * res_pjsip.c: Fix documentation typos. Change-Id: I82ae0b92bfa2ece84a5c684efd9eefdc83ebd068 2018-02-02 15:43 +0000 [cda2c914b6] Richard Mudgett * res_sorcery_realtime.c: Fix ref leak if object failed to apply. Change-Id: I3c7106ff77009754725cee790eadf5da44154ab6 2018-01-24 19:58 +0000 [50d9364bc3] 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 [296711a446] Joshua Elson * res_pjsip_mwi.c: Fix null pointer crash ASTERISK-27652 #close Change-Id: I78a0d38bfd8d0d82830f3d53da04872d6b67284d 2018-02-01 15:03 +0000 [84a101f0ed] Sean Bright * appdocsxml.xslt: Add Language to channel snapshot transformation Change-Id: I8f494b0c895a69b8bc94656d0c6ceebecb0394d8 2018-01-31 15:40 +0000 [edc64d6aa3] 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 [6063a42e19] 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 15:15 +0000 [2a05a05038] 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 [5b3cb98a62] 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 [447fc8cc0a] 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 [5dce58ea94] 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 [0b97170588] 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-28 10:10 +0000 [af2fedb6ba] 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 [7bc91d06df] 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 [a8ee14ca0e] 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 [0126c0eeb3] 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 [454cea5ac2] 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 [94b1189bbd] 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 [f1975769a7] 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 [6d5092dbff] 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 [45accf7e22] 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 [83dfe4d160] 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 [43834bb227] Richard Mudgett * Update sounds release to fix siren7 and siren14 files. ASTERISK-16172 Change-Id: I2fb564258cd4db0f35952ad48b8687355c2dcad3 2018-01-15 11:08 +0000 [ddc6e6d878] 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 [c6c8e0514d] Alexander Traud * install_prereq: Download latest Jansson. ASTERISK-27603 Change-Id: I65c587534c0ae364f063d68da1bed40bb3d5e8aa 2018-01-18 20:19 +0000 [7db4606235] 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 [6710515bf1] Alexander Traud * res_config_mysql: Avoid the header mysql_version.h. ASTERISK-27607 Change-Id: I23d00ded955c4afd5f2c3c9dc96dcb48b3f74eec 2018-01-05 14:46 +0000 [a3282f9e2d] 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 [02bf7beb56] Alexander Traud * BuildSystem: Remove AC_CONFIG_AUX_DIR. ASTERISK-27602 Change-Id: I9f4d3d2bc1481748e39ad1e2b0a364d38e38978b 2018-01-19 12:21 +0000 [81e4c50985] Alexander Traud * BuildSystem: Remove orphaned .PHONY targets. Change-Id: Ic44d75141b9bf99e7d72fcc82ee111b5cf6989d2 2018-01-19 12:14 +0000 [2cb27d4238] Alexander Traud * BuildSystem: Allow make clean all again. ASTERISK-27600 Reported by: Hamid R. Hashmi Change-Id: I683d14d024650be04074b037b6300464519409f4 2018-01-19 06:16 +0000 [f930994529] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: Ieb41b0cbf968af12882b39454b819ebb48b9ea46 2018-01-19 04:46 +0000 [a467fefa82] 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 [1275acfe69] 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 [0361a073fe] Sean Bright * res_pjsip: Document tlsv1_1 and tlsv1_2 methods Change-Id: I67ed9039bf3f132fb20ee7a750e0aef0f704d7d3 2018-01-08 23:50 +0000 [87b1ec7159] 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 [d4e9985b27] 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 [618028a27c] 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 [4da81adf9b] 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 [e1f07b1118] Alexander Traud * BuildSystem: Invoke install not in GNU but POSIX style. ASTERISK-27594 Change-Id: Iaaa6a19d2fe031dffcba441d0502a7ea65c93cb3 2018-01-17 06:47 +0000 [91e53376e0] Alexander Traud * BuildSystem: In OpenBSD, xmlstarlet is xml. ASTERISK-27593 Change-Id: I1c7087f7f7582e40b3312c690d912c9a86466805 2018-01-17 02:51 +0000 [3229301b2f] 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 [5c589522df] 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 [392f279bf4] 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 [a36444c047] 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 [14b681ac66] 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 10:57 +0000 [2cd0ee7a49] Alexander Traud * BuildSystem: Resolve resolv.h not via Generic but Particular Header-Check. ASTERISK-27585 Change-Id: I27c67563788e6f67eeda5fb51a741823a50a95e2 2017-12-12 22:42 +0000 [6de1379fad] 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 (cherry picked from commit cb249b2419fa6120a94a3556b6d443f6677d362b) 2018-01-13 13:49 +0000 [176a09e3f3] 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 [deebabfdb1] 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 [e7d130bef6] Corey Farrell * menuselect: Remove unused dev-mode option TRACE_FRAMES. ASTERISK-27575 #close Change-Id: Ica3a522892afed7a96816a5ecf140e1671f46ad4 2018-01-12 03:50 +0000 [45d2c913f4] 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 [366a548229] 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 [e6837e2123] 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 [25d304ec52] 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 [38f7d468a6] Alexander Traud * install_prereq: Update Debian/Ubuntu libraries. ASTERISK-27555 Change-Id: I0818b6e42631be1b69237e2b41d3415275693e53 2017-12-22 19:50 +0000 [821b718a96] 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 12:05 +0000 [9e78015909] 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 [cdfa69a025] 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 [e73f1ec3a8] Corey Farrell * stasis: Remove silly usage of RAII_VAR. Change-Id: Ib11193531e797bcb16bba560a408eab155f706d1 2018-01-09 11:09 +0000 [f9f00876dc] Corey Farrell * stasis_cache_pattern: Remove silly usage of RAII_VAR. Change-Id: Ic98a51f555062cd863b6db3f8d76065943a9dea3 2018-01-09 11:16 +0000 [470ca3479a] Corey Farrell * stasis_bridges: Remove silly usage of RAII_VAR. Change-Id: I0fa7ab05454f183dc4ff10e26d18776d2b0fcf1f 2018-01-09 11:10 +0000 [d7f863e694] Corey Farrell * stasis_cache: Remove silly usage of RAII_VAR. Change-Id: Ifa95e5801c949df296c7e4376347730fb0ed52ef 2018-01-09 10:57 +0000 [c8f4195136] Corey Farrell * stasis_endpoints: Remove silly usage of RAII_VAR. Change-Id: Ic099dc552f36c353c89783a4bcfd09f010432733 2018-01-09 10:55 +0000 [10b0b6583f] Corey Farrell * stasis_message_router: Remove silly usage of RAII_VAR. Change-Id: I50d6ae230920e0b878ed9cc8f79eef746e06701d 2018-01-09 10:53 +0000 [bfd3e572c0] Corey Farrell * stasis_system: Remove silly usage of RAII_VAR. Change-Id: Iedbe5656cee68cd3a96a953558764aa02d4a0c3b 2018-01-03 17:26 +0000 [6d9482267b] 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 [74ba8398fe] 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 [3a4e949a0e] 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 [2b24d941b9] 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 [6226635956] 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 [15381d2310] Sean Bright * Revert "codec_opus: Make libcurl a dependency in menuselect" This reverts commit 028f4320de60a204e457ad606ab0a3318493b431. Change-Id: Ieb91f825cb55202a937f5361c01d356e7662b70c 2018-01-08 20:25 +0000 [a7c8fb8bcb] 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 [7abf373139] 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 [b18c4d2de6] 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-08 10:54 +0000 [5b2a65ea8b] 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-07 21:38 +0000 [9876bb993c] 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 [db72046e1f] 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 [7b20a86c7d] 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 [427c469023] 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 [c33da7be98] 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 [925c5f345e] 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 [4a80a94284] 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 [701815199b] 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 [ca63534faf] 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 [cb41d16827] 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 [b25a1a36da] 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 [68df3debd1] Alexander Traud * chan_ooh323: Limit outgoinglimit to positive values as intended. ASTERISK-27552 Change-Id: Ifbf9d51e7374ca2e8b27ec568f6770050fc1a854 2018-01-05 06:19 +0000 [452b9b2144] Alexander Traud * ooh323cDriver: Fix typo in header guard. ASTERISK-27551 Change-Id: I39ff66031e3373e895e2bc47b23a5e860ea4e012 2018-01-05 03:36 +0000 [8ae974378f] Alexander Traud * BuildSystem: Avoid obsolete warning with HELP_STRING on autoconf. ASTERISK-26046 Change-Id: I48f05698c235f709225b92bec5aa260fb57d69d1 2018-01-04 15:37 +0000 [e453e883b8] 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 09:39 +0000 [e0319bde79] Corey Farrell * rtp_engine: Add missing unlock. Change-Id: I380c31a255e060309f4916da11176e0d00813215 2018-01-04 09:30 +0000 [1341210ee2] Corey Farrell * res_pjsip_history: Add missing unlock to CLI command. Change-Id: I872060a30543776a176a316309602d924a23eb29 2018-01-04 09:27 +0000 [f92187ed12] Corey Farrell * aco: Fix NULL dereference in error path. Change-Id: Id505167cf0f9414a3c144fa2c1e181a2cf288694 2018-01-03 19:07 +0000 [3eb72a857b] Corey Farrell * func_odbc: Add missing unlock's to acf_odbc_read. Change-Id: I828329ecbd252ae8f27a369a046d2b03102b07c6 2018-01-03 10:41 +0000 [02452ef4d1] 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 [b0f1486cff] Tzafrir Cohen * cdr: submit: fix logic of test for batch mode ASTERISK-27539 #close Change-Id: I33cdf329d2bb4486dcae975c450f6aae94c515f7 2018-01-02 00:26 +0000 [57833b657a] Corey Farrell * aco: Add missing aco_option_type_string for OPT_TIMELEN_T. ASTERISK-27117 Change-Id: I8f6c34bb30830be9f7a40823723eb4dcaaa91c61 2017-12-29 22:59 +0000 [ef06ec2225] 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-31 10:26 +0000 [9a332027d4] 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 [94b4bf1d2a] 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 [cc633e64f8] 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 [691225d293] 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 [6d7304495f] 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 [3d63a783b2] 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 [03a73a2e94] 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 [fe13c69b00] 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 [3fd1d1524d] 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 [8ad67dbe5e] 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 [6d994c8223] 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 13:11 +0000 [b53d1ce03e] Richard Mudgett * core: Remove unused/incomplete SDP modules from released branches. Change-Id: Icc28fbdc46f58e54a21554e6fe8b078f841b1f86 2017-12-22 08:21 +0000 [b64c02e414] Sean Bright * Remove as much trailing whitespace as possible. Change-Id: I873c1c6d00f447269bd841494459efccdd2c19c0 2017-12-21 09:51 +0000 [0cb13d92b3] 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 [57af855ef2] 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 [199c43ad00] Sean Bright * docs: Remove old API changes documentation Change-Id: I1bc7957121cc7ae27dca04acc3613f4e1858476a 2017-12-20 11:14 +0000 [70cd4430a4] 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 00:53 +0000 [e90470700b] Corey Farrell * app_festival: Fix fd leak on connection failure. Change-Id: If5efaddcf735ff7d17e55c36cc1388946cee9e0f 2017-12-20 10:23 +0000 [b18c69edfa] 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 [f5e1116255] 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 20:39 +0000 Asterisk Development Team * asterisk 15.2.0-rc1 Released. 2017-12-20 11:30 +0000 [5c6a217d61] Richard Mudgett * manager.h: Bump AMI version Change-Id: I62e6ddeb261ef012687e1fb6734c554e2499b6bf 2017-12-18 20:12 +0000 [60213f0351] 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 06:14 +0000 [63b6339bd6] 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 [d370af4208] 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 22:48 +0000 [09e697c8fa] 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 [a2ee3b827f] 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 [1cb6b3b1a5] 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 [2239e80bf2] 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 [1bfa85447f] 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 19:47 +0000 [7d37a17ce9] 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 [5ae6098f7e] 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 [c18eebcc11] 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 [c2713ac132] 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 [6cdaecc2ac] Corey Farrell * bridge_softmix: Fix memory leaks. Change-Id: Ifaf3e93b398595d21d07f535330fef77ff15a80c 2017-12-18 18:04 +0000 [a2a1425ed6] 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 [4c1e041074] Richard Mudgett * ast_json_pack(): Use safer json ref mechanism. Change-Id: I49204db2e57ae96eee43909c18ed007c09ac817e 2015-11-11 16:52 +0000 [0074307c61] Richard Mudgett * rtp_engine.c: Eliminate rtcp_report_to_json() RAII_VAR usage. Change-Id: I58a22c2ca82e91d7537409b7b3af2d735827a54d 2017-12-18 12:23 +0000 [18c8dda843] 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 [20a1a5632d] 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 [9ff63ef7fa] 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 [267a7dd0dd] 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 [28517edba6] 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 [dc236b13c5] Corey Farrell * loader: Use vector to build apha sorted module lists. Change-Id: I9c519f4dec3cda98b2f34d314255a31d49a6a467 2017-11-21 00:28 +0000 [77af356e30] 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 [5295c4685a] 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 [69b82113fa] 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 [fc43371c0e] 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 [957709e1e8] 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 [5d49e2e329] 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 [044ed1c5d8] 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 [1ae46df1ef] 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 [e41bed3713] 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 [39c8d566ad] 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 [9d63832e28] 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 [4d4f43f2a0] 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 [2ef67d2d31] 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 [a150e88e72] 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 [1f9317b9df] 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 [4166f9e007] 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 [6b3bbba6dd] 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 [272594a70a] 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 [a6f4edf032] 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 [61362f247e] 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 [b82e216f5d] 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 [d22bccef95] Sean Bright * 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 [cc1e215812] 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 [c0822c32ac] 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 [02bd461c9e] 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 [bb4fdd3890] Sean Bright * res_pjsip: Assign support levels to a few modules Change-Id: I51f6945c4023cb93fc7b87be5ab4c50e9e6ee27d 2017-12-09 00:35 +0000 [c6e137ee16] 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 [0384e49a6e] Richard Mudgett * stasis_channels.c: Don't set channel snapshot caller_dnid twice. Change-Id: Ib8d45bbdfbda81e65045f6dff874d189b74e5471 2017-12-11 09:45 +0000 [c8480b68cd] Sean Bright * codec_opus: Make libcurl a dependency in menuselect ASTERISK-27475 #close Change-Id: If7384bc6ed002ef140dec69798d14c52b7cfd800 2017-12-08 12:48 +0000 [a419bf0b1e] 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 [d9843c84ef] 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 [bc20130683] 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 [9b705dee74] Sean Bright * pjsip_configuration: Add correct file header Change-Id: I25348c386a222bb704aff07f54375108a6402906 2017-12-07 09:52 +0000 [f9c6f69205] 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 [95a90bdca1] 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 [6d8d754258] 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 [845a0d8de3] 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 [b8a063f4bf] 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 [14bb88a97a] Corey Farrell * translate: Skip matrix_rebuild during shutdown. Change-Id: I1e5eef4029cba56e33d786c5a5ade8091e531a1e 2017-12-06 14:49 +0000 [c35613d257] 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 [48fce66bcf] 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 [cf741d5de3] 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 [d5b5879157] 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 [14774a0377] 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 [04f7a58f67] 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 [30db6bb1a0] 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 [8543582bbd] 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 [19de8a71b5] 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-03 18:49 +0000 [31e9e31ea5] 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 [569578050c] 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 21:24 +0000 [1c56c542e0] 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 [8f5dff543e] 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 [ef26edd554] 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 [3af6c1b4bc] 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 [ff8e0f78ef] 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 [615fff70f8] Corey Farrell * autoconf: Use m4 conditionals where possible. Change-Id: I530c0a72f965437acef6a9a4fbfe5c487f078b65 2017-11-17 09:15 +0000 [ada498a025] 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 [a0654e40e3] 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 [338e8c0f0f] 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 [e2027b41e6] 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 [c12437273e] Richard Mudgett * features.conf.sample: Clarify ActivatedBy documentation wording. Change-Id: Id2899331fe05d1909a862ea879742879d086bc64 2017-11-22 18:43 +0000 [c75a1d2fe7] 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 18:37 +0000 [5ca2b36510] 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 10:42 +0000 [260ade8be8] 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 [73a9b88110] 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 [c784dd2b96] 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-17 21:33 +0000 [ce5fb5b149] 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 [d643fbda49] Corey Farrell * CLI: Finish conversion of completion handling to vectors. Change-Id: Ib81318f4ee52a5e73b003316e13fe9be1dd897a1 2017-11-07 15:34 +0000 [7c9d73615c] 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 [b8a735e9f4] 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 [0ca507ba67] 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 [6748f690f5] 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 [369e77d68b] 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 [c4f07a9bd4] Alexander Traud * chan_sip: ICE contained square brackets around IPv6 addresses. ASTERISK-27434 Change-Id: Iaeed89b4fa05d94c5f0ec2d3b7cd6e93d2d5a8f7 2017-11-19 21:23 +0000 [50e0e000c6] 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 [69e3fb73d0] Corey Farrell * cli: Remove silly usage of RAII_VAR. Change-Id: I81aacfee7cd26e4fc5eef07bca582700c2975bd7 2017-11-16 13:19 +0000 [9f460c8efd] Corey Farrell * ccss: Remove silly usage of RAII_VAR. Change-Id: I5ce40035e0a940e4e56f6322c1dcd47fbd509b98 2017-11-16 12:51 +0000 [f893822a8b] Corey Farrell * app: Remove silly usage of RAII_VAR. Change-Id: Ideb594f7aae134974fb78d5477ba0853b97b8625 2017-11-16 12:19 +0000 [93d979d520] Corey Farrell * aoc: Remove silly usage of RAII_VAR. Change-Id: I07907f833b81aeb0128bc9442a2abb52679c7511 2017-11-16 12:55 +0000 [3c3c0140a3] Corey Farrell * abstract_jb: Remove silly usage of RAII_VAR. Change-Id: I9d56175369363d1dc735504cf78a3a5577069f49 2017-11-20 13:08 +0000 [e8c9cb6c40] 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 [0e2385581b] 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 [43dad7f669] Alexander Traud * BuildSystem: pjsip_evsub_set_uas_timeout was not used. ASTERISK-27435 Change-Id: Id318a7ae6d7d69b53f911d30bf3eece64852f15c 2017-11-19 09:57 +0000 [1346e1e758] 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 [0b4fe4a0c7] 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 [65ff827751] 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 [ef4dc43a75] 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 [85f468cd64] 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 [85d675b14c] 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 [9da69ac6c1] 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 [19ba25dd96] 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 [6c4ba373ca] 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 [78847fb3ba] 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 [5a59c6b444] 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 [3f24d38f6a] 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 [6a5a19a2bc] 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 [9029b94c7a] 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-07 17:07 +0000 [2849538b8e] 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 [d3ada56562] 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 [60d3dbdf84] 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 [b447c65050] 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 [4b5ccddd09] 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 [22197e1161] 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 [fcec0fc644] 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 [89997cc003] 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 [c1a82bcb8c] 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 [b4ef463685] 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 [bb0d22edaa] Corey Farrell * alertpipe: Correct documented return of ast_alertpipe_write. Change-Id: I4ea49c441890a81384144479dc93ab5a3989486d 2017-11-13 16:20 +0000 [45b8f444ab] 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-09 08:21 +0000 [2e01b779cc] 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-10 10:37 +0000 [24e7f61d14] 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 [c6be57b545] 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-07 14:00 +0000 [f84b2cc417] 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 [a3a20e9528] 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 [f053360998] 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 [cb63ade611] 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 [f66a8d6b97] Richard Mudgett * frame.c: Make ast_frame_free()/ast_frfree() NULL tolerant Change-Id: Ic49d821ef88ada38a31bdd835b9531443c55d793 2017-11-10 07:06 +0000 [56c11b0e79] 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 [09afc76a8a] Corey Farrell * core: Remove disabled code. handle_quit has been disabled since 2003, remove it. Change-Id: Idc3aaa6c81676160547078f9b71e8aa43de2db18 2017-11-09 13:24 +0000 [066d1ab82e] 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 [80c88d9b30] Richard Mudgett * chan_pjsip.c: Fix uninitialized cause value on failure. Change-Id: I3f9dd3c31bd582e54a30381500077de2319d8cc3 2017-11-07 11:49 +0000 [28e50b77a8] 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 [1fe507a237] 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 [5f501b339e] 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 [a1f21934b7] 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 [a7d21fec65] Corey Farrell * res_pjsip_pubsub: Fix multiple leaks on failure to append vectors. Change-Id: I68ece0073ea79667ca41eb10405f516f1d30d482 2017-11-06 18:12 +0000 [a03f200358] Corey Farrell * res_pjsip_history: Fix multiple leaks on vector append failure. Change-Id: I41e8d5183ace284095cc721f3b1fb32ade3f940f 2017-11-06 18:01 +0000 [31244fc277] 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-06 16:37 +0000 [de656d8c66] 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 [17136aacc0] 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 [dd73524bf6] Corey Farrell * res_pjsip_t38: Better error checking for t38_create_media_state. Change-Id: I81b2587427c6982aa3e2a3f9ad69cce8d316eb10 2017-11-06 15:38 +0000 [9284ed1df1] 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 [e876c47fac] 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 [4c4772472e] 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 [abb77faae7] Richard Mudgett * res_pjproject.c: Fix ast_strdup() alloc failure. Change-Id: I74688038e7afe3a279359cce53aadb28ade51ead 2017-11-06 17:55 +0000 [0e147cbf9e] Corey Farrell * res_pjsip_outbound_registration: Fix leak on vector add failure. Change-Id: I774b88b3c9da41edd4dc8d78f095481f52f2bd46 2017-11-06 17:48 +0000 [032c657ee9] 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 [c88bacaa0d] 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 [a8d6d8b4c1] 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 [4ca1cdfd49] 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 [849d49d91c] Corey Farrell * res_pjsip: Fix leak on error in ast_sip_auth_vector_init. Change-Id: Ib0fc7a18f3135ca8990c3984c9e15f6d26e556e8 2017-11-06 17:17 +0000 [df6a2d3760] Corey Farrell * res_pjproject: Handle error from adding to the buildopts vector. Change-Id: I076c7bd207c7989a23005395ce1735392657be65 2017-11-06 17:11 +0000 [67ac6812ee] 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 [595e60cc27] Corey Farrell * stasis: Release object if vector append fails. Change-Id: I3e5cc669169aab6175ddfaf7486edeaeb4fdcfb1 2017-11-06 15:20 +0000 [ba3ef46847] 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 [a85b762894] 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 [66d7c8495a] 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 [c27df36f11] 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 [448400b953] Corey Farrell * stasis: Remove silly use of RAII_VAR in stasis_forward_all. Change-Id: I46de4c968d40144d5b049966304ff66c1469fb65 2017-11-06 12:51 +0000 [841aff7900] 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 [e913ceedde] Richard Mudgett * stasis_bridges.c: Fix off-nominal json memory leaks. Change-Id: Ib1181a36b317c86bff1ef2e44a17a0b1c73cfdc8 2017-11-03 17:43 +0000 [80b77afdd5] Richard Mudgett * stasis_channels.c: Remove a very silly RAII_VAR(). Change-Id: I28b458b3c1a442c4ef0be7b4986a95ea4149e14f 2017-11-06 10:29 +0000 [2a50fdbf99] 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 [6bec8fdd72] 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 [be08bb6076] 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 [e3f25899ec] 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 [ddb8fd6124] 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 [54ed81a679] 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 [f7762b208a] 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 [22454bf849] 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 [b5ee0087de] Richard Mudgett * Stasis/ARI: Fix off-nominal path json memory leaks. Change-Id: Id569c624c426e3b22a99936473c730592d8b83fb 2017-11-02 11:38 +0000 [79f326e5c4] Richard Mudgett * AOC: Fix AOC-S json memory leak. Change-Id: I3a1d40a41a8a7d00fa4a187de6a343a79155d3ef 2017-11-01 18:04 +0000 [cb266f31fe] 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 [9021fb87d1] Richard Mudgett * res_stasis_mailbox.c: Fix leak of mailbox container. Change-Id: I7d33c1635713047e7d1597c9d882f7dc006d94b4 2017-11-03 10:35 +0000 [23bece8e69] 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 [5b13290522] 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 [af2947c013] 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 05:34 +0000 [e9b53dcd9b] 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 02:08 +0000 [9897675b35] 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 [a54313a87a] 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 [ec92451748] 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 [65c718ab50] Sean Bright * pjsip_message_filter: Only do interface lookup for wildcard addresses. Change-Id: Ie083987e69dc43b6861671c218cacacc11b2072f 2017-10-31 15:08 +0000 [ed1d77c481] 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 [906e0ef860] 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 [046c250199] 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 [9834111f8b] 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 [6325b73d26] 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 [57f5335278] 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 [8dfedbf3b1] 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 [4b7a565dc5] 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 [abf1e0709c] Richard Mudgett * app_voicemail.c: Fix compiler warning with IMAP build. ASTERISK-27181 Change-Id: Ic4468b49860bd7f67e922baf4c9e96828c184d17 2017-10-25 14:38 +0000 [a510cda254] 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 [e77bee9fb5] 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 [c552e94d7c] 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 [373a1a9797] 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 [ddcf98c0d3] 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-24 09:43 +0000 [c75a7351bd] 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 [24ed38129c] 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 [62c5a263b3] 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 13:44 +0000 [a9ee06b497] Corey Farrell * main/Makefile: Remove rule for non-existant testexpr2. Change-Id: Ibb3e47f27a395d74d8c5263db015b05434f5969b 2017-10-23 12:42 +0000 [ddce3ddab5] 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 [942f5ab2c2] 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 [b148657526] Richard Mudgett * app_agent_pool.c: Fix online documentation typo. Change-Id: Ib0bc95fd0ec288c78c313823254d7a84ebfc4429 2017-10-22 17:32 +0000 [0efeb7885a] 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 [3eeb37b6fd] 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 [0f3dcb250a] 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 [f2c95fb7e4] 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 [e89a0a7770] 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 [91d02bdcfc] 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-18 03:30 +0000 [4865a05d4e] 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-06 10:51 +0000 [312a338531] 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-14 14:41 +0000 [fe9406e02d] 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 [0b66442350] 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 [7920708ffd] 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 [e682580df4] 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-10 07:42 +0000 [ed7c6b3975] 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-14 04:11 +0000 [c78afba71f] 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 [39c83d30d1] 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 [0014a98cc9] 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 [09301ddc4f] 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 [5ef8377334] 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 [a18ece1c45] 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 [4cc4884144] 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 [6fdb992d12] 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 [bd16bcb77c] 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-13 18:19 +0000 Asterisk Development Team * asterisk 15.1.0-rc1 Released. 2017-10-13 12:12 +0000 [f1b646805e] 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 [eadea6f55b] 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 [a7d977d986] 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 [3a692949b7] 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 [21e981982f] 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 [f8da683a16] 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 [4d518dd748] 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-09 21:00 +0000 [cd521f166f] Corey Farrell * sorcery: Use ao2_weakproxy to hold list of instances. Store weak proxy objects in instances container. Change-Id: I5a150a4e13cee319d46b5a4654f95a4623a978f8 2017-10-09 21:55 +0000 [d0a49d84ac] Corey Farrell * named_locks: Use ao2_weakproxy_find. Change-Id: I0ce8a1b7101b6caac6a19f83a89f00eaba1e9d9c 2017-10-09 17:51 +0000 [e54238388d] 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 [0727a8e524] 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 [9acfcefbd3] 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 [7155055b9f] 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 [a22ac5eee1] Richard Mudgett * cdr.c: Eliminated simple RAII_VAR usages. Change-Id: I150505db307249a962987e7b941bdd369bb91f35 2017-10-09 22:51 +0000 [d106e63258] Corey Farrell * res_pjproject: Fix cleanup of buildopts vector. ASTERISK-27306 Change-Id: I3bed0edf3f55b1d4adcbabb25ec14f11dc766c72 2017-10-03 16:09 +0000 [038759c320] 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 [b48eeff44c] Richard Mudgett * cdr.c: Replace inlined code with ao2_t_replace() Change-Id: I9f424f5282ca7d833592f958d95f1b2bafb549b0 2017-09-29 12:07 +0000 [58c898aa3f] Richard Mudgett * cdr.c: Use current ao2 flag names Change-Id: Ib59d7d2f2a4a822754628f2c48a308d6791a6e6e 2017-09-29 12:31 +0000 [4ad4c5679b] Richard Mudgett * cdr.h: Fix doxygen comments. * Also some misc formatting in cdr.c. Change-Id: Ied89a28802a662c37c43326a1aafdce596e0df4a 2017-09-20 18:36 +0000 [6014a8743d] 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 [737624316d] Sean Bright * res_config_sqlite: Don't enable SQLite CDRs when running 'make samples' Change-Id: I65a5190b2732b2246d67472db70dd37db64ddad4 2017-10-08 14:05 +0000 [335c46185a] 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 [3240ba9336] 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 [10d0ffb0e0] Corey Farrell * res_pjsip_session: Fix format_cap leak. ASTERISK-27306 Change-Id: I2c8d3fc148f9f53715c958314e1146f9611741f3 2017-10-05 16:26 +0000 [0c0f6da482] 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 [baf331f4bc] 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 19:55 +0000 [70efaf8f3e] Corey Farrell * res_sdp_translator_pjmedia: Fix test unregistration. ASTERISK-27306 Change-Id: Ib3ed47167cb697ab7bd0a56cab589893f491651b 2017-10-05 15:54 +0000 [4ad9ddfc75] 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-06 02:39 +0000 [bc419d2a9c] Nathan Bruning * app_queue.c: clear moh field in init_queue ASTERISK-27301 #close Change-Id: Ic31361f34e2de3b6470e68fc37205a7711082eba 2017-10-05 20:23 +0000 [622a1de0f0] 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-02 07:48 +0000 [ba37dd65d3] 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:46 +0000 [9293d85f70] 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 [2e1424363a] 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 [3344fe4ff9] 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 [ade7253c9d] Richard Mudgett * heap.c: No need to calloc heap pointer array. Change-Id: I5ae2f316229f336eb90d99c7af7ed07a33097e68 2017-09-27 13:45 +0000 [d7e47c88b2] 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 [ce08a5b3f6] 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 [7192cacfea] 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 [ab15481553] 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 [1eb84bdb8a] 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 [a3583cabbd] 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 [a89f14f2d6] 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 [c96317c138] Sean Bright * pjproject: Patch to correct STUN FINGERPRINT usage Change-Id: I0e453253dff1388b0186b36c754457c1d0d12db6 2017-09-25 12:30 +0000 [3d658e3be4] 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 [1728e439e8] Richard Mudgett * channel.c: Fix invalid reference in conditionaled out code. ASTERISK-27289 Change-Id: I7a415948116493050614d9f4fa91ffbe0c21ec4c 2017-09-25 07:25 +0000 [1fad858934] George Joseph * build: A few gcc 7 error fixes Change-Id: I7b5300fbf1af7d88d47129db13ad6dbdc9b553ec 2017-09-15 02:59 +0000 [d0d4b139fc] 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 [f353df0326] 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 [d80b7e1604] 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 [08440df3e3] 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 [9eefce503d] Sean Bright * res_pjsip: Use ast_sip_is_content_type() where appropriate Change-Id: If3ab0d73d79ac4623308bd48508af2bfd554937d 2017-09-21 09:47 +0000 [962865d4ee] 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-16 09:19 +0000 [693c06f8a3] 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-19 05:22 +0000 [365003a444] 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-20 10:45 +0000 [40de3a12e0] 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-15 09:43 +0000 [90b68dd54b] 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 [86b897f877] 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 [47b41bd3ae] 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 [f5ef14597b] 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 09:34 +0000 [9644f68627] 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 14:28 +0000 [c67ce8ae2d] 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-08-25 17:01 +0000 [a9d6a55ffb] 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-19 10:38 +0000 [fbbc4d2433] 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 07:53 +0000 [2dc1b2f6d9] 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-13 14:14 +0000 [855746fb75] 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 [513e0dbb5a] alex * cdr_mysql.c: Apply cdrzone to start and answer Change-Id: I7de0a5adc89824a5f2b696fc22c80fc22dff36b0 2017-09-13 16:23 +0000 [40722149d7] 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 [7fa11842d8] 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 [31370dc0bd] 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 [cca5deb2e5] 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 [752f0533dd] 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 [9b8957ed8a] Richard Mudgett * res_rtp_asterisk.c: Add doxygen to RTCP payload types. Change-Id: I3f20ce428777cc4ce9c13b2f808d29ff8c873998 2017-09-11 05:52 +0000 [3552cb511d] 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 [1d2e58705e] 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 [9620a2bd20] 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-06 10:50 +0000 [4418fae58b] 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 [6dd4ee8926] 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 [55b0dad30a] Richard Mudgett * stasis/control.c: Fix set_interval_hook() ref leak. Change-Id: Ia0edb7dc0dbbb879c079ff7000f1b722d86ce7dc 2017-09-01 05:17 +0000 [a824fcc8e8] 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 [07e62b4e0e] 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 [2d9aac9f28] George Joseph * alembic: Fix enum creation for dtls_fingerprint Change-Id: Ic061c5066a146616a68376881c7e4cf6d6e7e7db 2017-09-05 07:31 +0000 [64f8445c0b] 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-05 11:08 +0000 [e5985c9abe] 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 [3a418b7ca2] 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 [b7d4a2e32e] 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 [46bd1290a0] 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 [329e111947] 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 [11d013a9df] 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 [3c8b1f40fa] George Joseph * res_calendar*, res_smdi: Move to "extended" support Change-Id: I31eee8be30c6b0fc3dadb31111dd47742da8892d 2017-09-05 05:23 +0000 [9cc4620376] 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 [1d33757aa0] 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 [1a4c58d1d9] Sean Bright * chan_ooh323: Fix confusing indentation warning ASTERISK-27177 #close Reported by: Tzafrir Cohen Change-Id: I40311c404edb2302a7543ad5ca7a06b2a38f2d97 2017-09-01 09:51 +0000 [2872cdfce6] 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 [5180e2ba27] 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 [0372157a48] 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 [222d655a2e] 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 [6c2c74492d] 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 [033087ba1c] 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 [2ec26dc635] 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 [9af11c6acd] 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 [6baf2c26f3] 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 [66388de98c] 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 [ffb2a781f6] 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 [5b91992c27] 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 [c5b89a390c] 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 [6d5e5d0520] 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 [f18f81cac7] 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 [e65b4d6525] Sean Bright * res_smdi: Clean up memory leak Change-Id: I1e33290929e1aa7c5b9cb513f8254f2884974de8 2017-08-18 17:37 +0000 [02044e6470] 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 [3e9cd53b5c] 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 [6c555891eb] 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 [efa6262814] 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 [0f832afb05] 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 [b5987fa191] Richard Mudgett * bridge_softmix.c: Restored softmix_bridge_leave() shortcut exit. Change-Id: I13026cd90954e0265eab94a0faf635a3e11f0e35 2017-08-17 17:07 +0000 [51bcfab4c6] Richard Mudgett * app_confbridge: Document sfu video_mode value. Change-Id: I26e17df2c93f3933b23f78070603adbcc84ba204 2017-08-17 17:06 +0000 [a689fcb39f] Richard Mudgett * confbridge.h: Fix doxygen comments. Change-Id: I16133166a85fdb557c66ffcbfe8128d0b4725b0e 2017-08-11 11:40 +0000 [8f707ba8c7] Richard Mudgett * bridge_softmix.c: Remove always true test. Change-Id: I26238df2ff0d0f6dfe95c3aa35da588f1ee71727 2017-08-17 16:46 +0000 [069ed905b4] 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 [ac6a905bb2] 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 [07c3608c6c] 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 [44f23dcae0] 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 [f919adac8d] 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 [7d1e1287b6] 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 [d0f6892dff] 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 [4e11c2192f] 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 [89a92b1f75] 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 [aef38f07d3] 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 [b9f6697f06] 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-27 15:36 +0000 [fe630930c9] Richard Mudgett * res_pjsip_transport_management.c: Rename some variables. * Use monitored instead of the misleading keepalive name. Change-Id: I9e5bcbb4ab2b82d49bcd0f06dfe85d15e0b552b6 2017-07-28 18:26 +0000 [0de033c9c6] 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-08-09 15:24 +0000 [d0bc274f54] Richard Mudgett * UPGRADE notes: Fixup for the 15 branch Change-Id: I4ca2f07ed62d77f1fdd10c3b216f6a28dd75720c 2017-08-10 09:09 +0000 [9d2844fd24] 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 [4873e5ff33] 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 [be8cb75dd2] 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 [82f8c19a58] 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 [9685a704a6] 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-08-06 11:15 +0000 [0e352ec510] 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 [3dbb1b9f48] 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 [09995fae53] 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-02 16:08 +0000 [418e062ce5] Corey Farrell * app_privacy: remove unused header asterisk/image.h Change-Id: I56ed530633a642633b18383821069e806c92ae82 2017-08-03 13:13 +0000 [0cbfb95b7f] 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-03 20:58 +0000 [1a3e08326e] 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 [563264c9b5] Richard Mudgett * res_pjsip_transport_websocket.c: Fix serializer ref leak. Change-Id: Ib5a19bfd597f63d9021baeb645fc11153b3afa57 2017-08-02 18:41 +0000 [347e148aa0] 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 [db6b883087] Richard Mudgett * res_pjsip_nat.c: Remove unnecessary CMP_STOP. Change-Id: I6279b0d723bc3b75b8d65e81e02da9ea9bc0c3da 2017-07-31 14:20 +0000 [2cd7bec061] 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-02 09:43 +0000 [b0c016cf6e] 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-08-02 14:16 +0000 [cd79a15b2f] 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 16:36 +0000 [6edefc9480] George Joseph * Revert "res_pjsip_session: Release media resources on session end quicker." This reverts commit 6c374d863c420d2519a52fffba3de5f935a30cdb. Change-Id: Ia89836005df66ef540885afd6f171886de0db442 2017-07-26 11:39 +0000 [8f51443a08] 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 [ef39998169] 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 [448317ddc7] 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 [7c3cdc81f7] 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 [1078d4f7f6] 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 [63224d5d9c] 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 [c24cdbf4ae] 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-09-01 19:29 +0000 Asterisk Development Team * asterisk 15.0.0-rc1 Released. 2017-07-24 10:48 +0000 [35c8fb1590] 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 [231ee5e6c6] 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 [ba2c8f1458] 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 [663fe3e31f] 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-24 11:45 +0000 [dab0389e24] 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-14 12:20 +0000 [0a0ef8a1b1] 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-18 17:37 +0000 [00b10fa1e1] 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 [6acc945533] 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 [efbf0aa8df] 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 [6bad253669] 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-17 17:07 +0000 [40faa22ce8] Richard Mudgett * app_confbridge: Document sfu video_mode value. Change-Id: I26e17df2c93f3933b23f78070603adbcc84ba204 2017-08-16 15:43 +0000 [e52f9b041a] 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 [d7b04f22de] 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 [44d316ef4a] 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-09 15:24 +0000 [012391920c] Richard Mudgett * UPGRADE notes: Fixup for the 15 branch Change-Id: I4ca2f07ed62d77f1fdd10c3b216f6a28dd75720c 2017-08-04 16:47 +0000 [4d3e66eabc] 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-06 11:15 +0000 [71d0424ed5] 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 (cherry picked from commit 0e352ec5100331c6a32008acc88d69d0fc58ccdd) 2017-08-08 13:33 +0000 [84600e2682] 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 14:43 +0000 [afd7875e82] 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 (cherry picked from commit 3dbb1b9f48b0fa23cec2d8e3f94173004da320a4) 2017-08-02 14:16 +0000 [53bba12340] 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 (cherry picked from commit cd79a15b2f9411c6e77f0f6594ff0c46f0ece080) 2017-08-02 09:43 +0000 [c042ad8343] 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 (cherry picked from commit b0c016cf6e0bcbe743f4f8286fb9b5ded830ccf7) 2017-08-02 11:44 +0000 Asterisk Development Team * asterisk 15.0.0-beta1 Released. 2017-07-27 20:58 +0000 [aba08692df] 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 [64edb4ed21] 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 Gilmore Patch-by: Ian Gilmore (pjproject-2.6.patch License 6889) Updated-by: George Joseph and Sauw Ming (Teluu) Merged to upstream pjproject on 7/27/2017 (commit 5631) Change-Id: I23844ca0c68ef1ee550f14d46f6dae57d33b7bd2 2017-07-25 15:17 +0000 [d056f6b2fe] Sean Bright * res_rtp_asterisk: Fix mapping of pjsip's ICE roles to ours Change-Id: Ia578ede1a55b21014581793992a429441903278b 2017-07-26 08:48 +0000 [11cd3be506] 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-26 09:27 +0000 [76270c0f78] 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-06-26 07:52 +0000 [154e74eced] 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-17 11:01 +0000 [451d86d62e] 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-20 08:08 +0000 [2128dc7c87] 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 [927fc6bbd9] 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 [9aa4942a49] 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-23 18:34 +0000 [0219d25e4e] 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-19 18:11 +0000 [85c631294a] 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 [e0ad75ec2a] 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-14 13:47 +0000 [715d79b60d] 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-06-18 19:24 +0000 [eea9da2f42] 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-07-21 11:24 +0000 [94de9d3eea] George Joseph * Restore the incorrectly deleted spandspflow2pcap.log Change-Id: Iafe78cf0fb1e7064223d4dea279eeb776c8fa8e5 2017-07-21 07:56 +0000 [6239203628] George Joseph * Update make_ari_stubs to correct version Change-Id: I18575b46db48d62edc72f37dc23b4ab22b43a8b1 2017-07-20 09:57 +0000 [6650ae43e1] 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-20 13:06 +0000 [b172474728] George Joseph * Update MAINLINE_BRANCH to 15 Change-Id: I425d542b600ceabeef2342e9adfeb68c484a043d 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-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] 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 [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-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] 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-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] 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-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] Kevin Harwell * 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] 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 [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] 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-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] 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-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] 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 [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] 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 [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] Sebastien Duthil * 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] Alexander Traud * 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] Joshua Colp * 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] Alexander Traud * 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] Kevin Harwell * 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-17 07:43 +0000 [d56fc3b36b] Alexander Traud * translate: Enables native Packet-Loss Concealment (PLC) for supporting codecs. ASTERISK-25629 #close Change-Id: I66c0086e6c17764b8141ec60a3e2aaefe088eb78 2016-09-19 14:18 +0000 Asterisk Development Team * asterisk 14.0.0-rc1 Released. 2016-09-19 09:17 +0000 [a23b33576f] Joshua Colp * Release summaries: Add summaries for 14.0.0-rc1 2016-09-19 09:17 +0000 [e11354b864] Joshua Colp * Release summaries: Remove previous versions 2016-09-19 09:17 +0000 [24fac2271a] Joshua Colp * .version: Update for 14.0.0-rc1 2016-09-19 09:17 +0000 [52c101d441] Joshua Colp * .lastclean: Update for 14.0.0-rc1 2016-09-19 09:17 +0000 [edae56dc65] Joshua Colp * realtime: Add database scripts for 14.0.0-rc1 2016-09-14 09:51 +0000 [205e2ea351] Joshua Colp * res_pjsip_transport_management: Convert time in log message to seconds. ASTERISK-26375 #close Change-Id: I46496af5cae41413e76d44d2068a7431279f09dc 2016-09-13 06:08 +0000 [bc085bba24] 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-09 05:39 +0000 [9a800b24ac] 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-16 15:34 +0000 [137aa2f13c] 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 [f877e62cc9] 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 15:25 +0000 [b17ee86148] 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-29 12:30 +0000 Asterisk Development Team * asterisk 14.0.0-beta2 Released. 2016-08-29 07:29 +0000 [9cdf44668d] Joshua Colp * Release summaries: Add summaries for 14.0.0-beta2 2016-08-29 07:29 +0000 [73d39f2029] Joshua Colp * Release summaries: Remove previous versions 2016-08-29 07:29 +0000 [e8a97775ee] Joshua Colp * .version: Update for 14.0.0-beta2 2016-08-29 07:29 +0000 [345409825a] Joshua Colp * .lastclean: Update for 14.0.0-beta2 2016-08-29 07:29 +0000 [105c1168f7] Joshua Colp * realtime: Add database scripts for 14.0.0-beta2 2016-08-29 06:31 +0000 [8927b52634] Joshua Colp * alembic: Fix downgrade path. The 3772f8f828da version was referencing a previous version that did not exist in the 14.0 branch. It has been fixed to reference the correct previous version. Change-Id: I004d0fcfdfe1d1bb6f01c6dac2b69f6b1f40ae51 2016-08-11 12:18 +0000 [9a95c6dea3] 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-11 11:24 +0000 [aaee8160bc] 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:01 +0000 [7af0eac02a] gtjoseph * 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-11 10:50 +0000 [ef0bf47bb3] 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 [a1d6b14c40] 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-09 12:07 +0000 [a783e1e60d] 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 [9c56f798f6] gtjoseph * 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-01 16:13 +0000 [1ad00c1c30] gtjoseph * menuselect: Add an opaque "member_data" string to the acceptable xml Change-Id: Id5ac43b95c8d7395f3be37f983632169db3d1afe 2016-07-17 18:28 +0000 [815b6f72f8] gtjoseph * pjproject_bundled: Update for pjproject 2.5.5 Add more --disable-* switches to Makefile.rules including --disable-opus which was causing bundled pjproject to fail with "undefined reference" errors in libasteriskpj. Changed PJ_ENABLE_EXTRA_CHECK to 1. Removed 2 obsolete patches and added a new one. The new one was merged by Teluu on 6/27/2016. ASTERISK-26148 #close Change-Id: Ib8af6c6a9d31f7238ce65b336134c2efdc855063 (cherry picked from commit 4cf02b5584ce33bb0a64408c27bf20c19bc4ce13) 2016-07-29 13:13 +0000 [c95b611a73] 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-27 12:36 +0000 [bc94ccbcdd] 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-26 23:19 +0000 Asterisk Development Team * asterisk 14.0.0-beta1 Released. 2016-07-26 17:22 +0000 [a7233fbf3e] Mark Michelson * Release summaries: Add summaries for 14.0.0-beta1 2016-07-26 16:24 +0000 [c327430ea0] Mark Michelson * Release summaries: Remove previous versions 2016-07-26 16:24 +0000 [763a18bc9d] Mark Michelson * .version: Update for 14.0.0-beta1 2016-07-26 16:24 +0000 [ce6898bd3c] Mark Michelson * .lastclean: Update for 14.0.0-beta1 2016-07-26 16:24 +0000 [ebc477aa5d] Mark Michelson * realtime: Add database scripts for 14.0.0-beta1 2016-07-26 16:00 +0000 [1838b283aa] Mark Michelson * ChangeLog: Updated for 14.0.0 2016-07-26 15:02 +0000 [f196cf975d] Mark Michelson * Release summaries: Add summaries for 14.0.0 2016-07-26 14:01 +0000 [699a7390eb] Mark Michelson * .version: Update for 14.0.0 2016-07-26 14:01 +0000 [4b17a11d7d] Mark Michelson * .lastclean: Update for 14.0.0 2016-07-26 14:01 +0000 [bb9dcae98c] Mark Michelson * realtime: Add database scripts for 14.0.0 2016-07-24 18:27 +0000 [90f445729d] 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 2016-07-24 16:51 +0000 [f75401b1e3] 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 [58759bd77c] 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-07-22 14:44 +0000 [46b4e673ae] 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 07:01 +0000 [633c34c411] gtjoseph * build_tools: Update make_version for 14 Also remove svn stuff Change-Id: I95d762f7cbbe5eb01117bde8779515d51a0bb06a 2016-07-19 13:39 +0000 [c82f24f36a] 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 [6e2e3915c8] Richard Mudgett * res_pjsip: Whitespace and comment cleanup. Change-Id: I11139a4a95df34e223ba622aa6227e33ab8f6c38 2016-07-19 13:18 +0000 [5efb5b38e8] 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 [a1d36c89e0] 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 [4dfadcb025] 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 [964ae54ecf] 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 [c3462adeb8] 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 [c03e27c1c8] 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 [d11731ac2f] 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-21 10:28 +0000 [56b4112659] 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-21 09:05 +0000 [52cbdf2393] 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-13 05:24 +0000 [2103ad1fec] Alexander Traud * res_srtp: Enable AES-256 and AES-GCM. ASTERISK-26190 #close Change-Id: I11326d80edd656524a51a19450e586c583aa0a0b 2016-07-18 22:46 +0000 [05cfe1a76e] 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-15 19:28 +0000 [0c88fb460f] 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-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-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] gtjoseph * 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] 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 [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] 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 [651290a809] 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 [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] 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 [c7309a5254] 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: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] 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-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] 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 [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] gtjoseph * 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] 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-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] 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-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] 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 [7fa5766752] 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 [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