summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-12-04bridges/bridge_t38: Add a bridging module for managing T.38 stateMatt Jordan
When 4875e5ac32 was merged, it fixed several issues with a direct media bridge transitioning to handling a T.38 fax. However, it uncovered a race condition caused by the bridging core. When a channel involved in a T.38 fax leaves a bridge, the frame queued by the channel driver that should inform the far side that it is no longer in a T.38 fax may not make it across the bridge. The bridging framework is *extremely* aggressive in tearing down the bridge, and control frames that are currently in flight *may* get dropped. This patch adds a new module to the bridging framework, bridge_t38. This module maintains some notion of the T.38 state for the two channels in a bridge. When the bridge detects that it is being torn down or when one of the two channels leaves, it informs the respective channel(s) that they should stop faxing. This ensures that channels switch back to audio if they survive and are ejected out of a bridge while faxing. ASTERISK-25582 Change-Id: If5b0bb478eb01c4607c9f4a7fc17c7957d260ea0
2015-12-03Merge "res_pjsip: Use a MD5 hash for static Contact IDs"Joshua Colp
2015-12-03Merge "res_pjsip: Update logging to show contact->uri in messages"Joshua Colp
2015-12-03Merge "app_queue: Show reason of pause on CLI"Joshua Colp
2015-12-03Merge "codec_resample: Increase buffer for Opus Codec."Joshua Colp
2015-12-03res_pjsip: Use a MD5 hash for static Contact IDsGeorge Joseph
When 90d9a70789 was merged, it mostly tested dynamic contacts created as a result of registering a PJSIP endpoint. Contacts generated in this fashion typically have a long alphanumeric string as their object identifier, which maps reasonably well for StatsD. Unfortunately, this doesn't work in the general case. StatsD treats both '.' and ':' characters as special characters. In particular, having a ':' appear in the middle of a StatsD metric will result in the metric being rejected. This causes some obvious issues with SIP URIs. The StatsD API should not be responsible for escaping the metric name passed to it. The metric is treated as a single long string, and it would be challenging to know what to escape in the string passed to the function. Likewise, we don't want to escape the metric in PJSIP, as that involves overhead that is wasted when either res_statsd isn't loaded or enabled. This patch takes an alternative approach. The Contact ID has been changed to be "aor@@uri_hash" instead of "aor@@uri". This (a) won't contain any of the aforementioned special characters, (b) can be done on Contact creation, which has minimal impact on run-time performance, and (c) also conforms to an earlier commit that changed the ID for dynamic contacts. The downside of this is that StatsD users will have to map SHA1 hashes back to the Contacts that are emitting the statistics. To that end, the CLI commands have been updated to include the first 10 characters of the MD5 hash, which should be enough to match what is shown in Graphite (or some other StatsD backend). ASTERISK-25595 #close Change-Id: Ic674a3307280365b4a45864a3571c295b48a01e2 Reported-by: Matt Jordan Tested-by: George Joseph
2015-12-03Merge "Build System: Support include-what-you-use."Joshua Colp
2015-12-03Merge "res_sorcery_memory_cache.c: Fix off nominal ref leak."Joshua Colp
2015-12-03Merge "sched.c: Make not return a sched id of 0."Joshua Colp
2015-12-03Merge "Audit improper usage of scheduler exposed by 5c713fdf18f. (v13 ↵Joshua Colp
additions)"
2015-12-03Merge "Audit improper usage of scheduler exposed by 5c713fdf18f."Joshua Colp
2015-12-02res_pjsip: Update logging to show contact->uri in messagesGeorge Joseph
An earlier commit changed the id of dynamic contacts to contain a hash instead of the uri. This patch updates status change logging to show the aor/uri instead of the id. This required adding the aor id to contact and contact_status and adding uri to contact_status. The aor id gets added to contact and contact_status in their allocators and the uri gets added to contact_status in pjsip_options when the contact_status is created or updated. ASTERISK-25598 #close Reported-by: George Joseph Tested-by: George Joseph Change-Id: I56cbec1d2ddbe8461367dd8b6da8a6f47f6fe511
2015-12-01Unset BRIDGEPEER when leaving a bridgeJonathan Rose
Currently if a channel is transferred out of a bridge, the BRIDGEPEER variable (also BRIDGEPVTCALLID) remain set even once the channel is out of the bridge. This patch removes these variables when leaving the bridge. ASTERISK-25600 #close Reported by: Mark Michelson Change-Id: I753ead2fffbfc65427ed4e9244c7066610e546da
2015-12-01res_sorcery_memory_cache.c: Fix off nominal ref leak.Richard Mudgett
Change-Id: If83d63cf11cbc6df9b15251848b01feb570ade49
2015-12-01sched.c: Make not return a sched id of 0.Richard Mudgett
According to the API doxygen a sched ID of 0 is valid. Unfortunately, 0 was never returned historically and several users incorrectly coded usage of the returned sched ID assuming that 0 was invalid. ASTERISK-25476 Change-Id: Ib19c7ebb44ec9fd393ef6646dea806d4f34e3a20
2015-12-01Audit improper usage of scheduler exposed by 5c713fdf18f. (v13 additions)Richard Mudgett
chan_sip.c: * Initialize mwi subscription scheduler ids earlier because of ASTOBJ to ao2 conversion. * Initialize register scheduler ids earlier because of ASTOBJ to ao2 conversion. chan_skinny.c: * Fix more scheduler usage for the valid 0 id value. ASTERISK-25476 Change-Id: If9f0e5d99638b2f9d102d1ebc9c5a14b2d706e95
2015-12-01Audit improper usage of scheduler exposed by 5c713fdf18f.Richard Mudgett
channels/chan_iax2.c: * Initialize struct chan_iax2_pvt scheduler ids earlier because of iax2_destroy_helper(). channels/chan_sip.c: channels/sip/config_parser.c: * Fix initialization of scheduler id struct members. Some off nominal paths had 0 as a scheduler id to be destroyed when it was never started. chan_skinny.c: * Fix some scheduler id comparisons that excluded the valid 0 id. channel.c: * Fix channel initialization of the video stream scheduler id. pbx_dundi.c: * Fix channel initialization of the packet retransmission scheduler id. ASTERISK-25476 Change-Id: I07a3449f728f671d326a22fcbd071f150ba2e8c8
2015-12-01codec_resample: Increase buffer for Opus Codec.Alexander Traud
ASTERISK-25599 #close Change-Id: I1f88a88c59fb4e1e62bbdbb100c7152d48e73f10
2015-11-30dns: Change lookup failures from LOG_ERROR to debug 1.George Joseph
dns.c and dns_system_resolver.c were spitting out errors for lookup failures for things like not finding a SRV record even though there was an A record. Those have been changed to debug messages. Logging not finding ANY record is left to the higher level caller. Also, dns_system_resolver was using Windows line endings so I converted them to Unix style. The actual log changes are on lines 156 and 159. Change-Id: I65be16ea15304b96f9dcb4d289dbd3e2286fc094
2015-11-30Build System: Support include-what-you-use.Alexander Traud
ASTERISK-25591 #close Change-Id: I8d3efa0826142ece9cbed2fd0d46f3b607fee6ae
2015-11-28app_queue: Show reason of pause on CLIRodrigo Ramírez Norambuena
Add value of pause reason when is paused on CLI command "queue show" ASTERISK-25581 #close Report by: Rodrigo Ramírez Norambuena Change-Id: I887028a40cd97b350da9a3bb2719616b7fec9864
2015-11-27CHANGES: Fix a typoNiklas Larsson
Change-Id: Iceb3d9bb78140c376174a7bee197dfcf8ef9cda7
2015-11-25Merge "fastagi: record file closed after sending result"Matt Jordan
2015-11-25Merge "main: Slight refactor of main. Improve color situation."Matt Jordan
2015-11-25fastagi: record file closed after sending resultKevin Harwell
The fastagi record-file testsuite test sometimes fails reporting an empty recorded file. This was happening because Asterisk was sending the agi result notification prior to actually closing the file and the data, being buffered, had not been written to the file yet when the test attempts to check the file size. This patch makes it so the record file stream is closed prior to sending the agi result notification. ASTERISK-25593 #close Change-Id: I6b2b3be3ae37f7c7b18e672c419a89b3b8513cde
2015-11-25main: Slight refactor of main. Improve color situation.Walter Doekes
Several issues are addressed here: - main() is large, and half of it is only used if we're not rasterisk; fixed by spliting up the daemon part into a separate function. - Call ast_term_init from rasterisk as well. - Remove duplicate code reading/writing asterisk history file. - Attempt to tackle background color issues and color changes that occur. Tested by starting asterisk -c until the colors stopped changing at odd locations. - Remove unused term_prep() and term_prompt() functions. ASTERISK-25585 #close Change-Id: Ib641a0964c59ef9fe6f59efa8ccb481a9580c52f
2015-11-24Merge "Fixed some typos"Matt Jordan
2015-11-24Fixed some typosDavid M. Lee
Fixes some minor typos in the CHANGES file, plus an embarrasing typo in the StatsD API. Change-Id: I9ca4858c64a4a07d2643b81baa64baebb27a4eb7
2015-11-24res_pjsip_notify: Fix CLI usage infoCorey Farrell
The usage info for 'pjsip send notify' previously referenced the chan_sip configuration sip_notify.conf. Fix this to reference the correct configuration pjsip_notify.conf. ASTERISK-25590 #close Change-Id: I3898271a8e8a8b1db201741e790ebe2c6bf5cdea
2015-11-24Merge "translate: Provide translation modules the result of SDP negotiation."Joshua Colp
2015-11-23Merge "res/res_endpoint_stats: Add module to emit endpoint StatsD statistics"Matt Jordan
2015-11-23res/res_endpoint_stats: Add module to emit endpoint StatsD statisticsMatt Jordan
This patch adds a module that emits StatsD statistics about Asterisk endpoints. This includes: * A GAUGE statistic for endpoint states, tracking how many endpoints are in a particular state. * A GAUGE statistic for each endpoint, counting the number of channels currently associated with an endpoint. ASTERISK-25572 Change-Id: If7e1333c5aeda8d136850b30c2101c0ee1c97305
2015-11-23res_sorcery_realtime.c: Fix crash from NULL sorcery object type.Richard Mudgett
If the sorcery object type is not found a NULL is returned. Unfortunately, sorcery_realtime_filter_objectset() will crash after complaining about not finding the object type and saying to expect errors. * Use ao2_cleanup() instead of ao2_ref() to prevent the crash. ASTERISK-25165 Reported by Corey Farrell Change-Id: Ic3b64453ea3058cb68d5c26d97d4fe7b8eea2e97
2015-11-23Merge "chan_pjsip: Handle T.38 faxes with direct media bridges"Matt Jordan
2015-11-23Merge "res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contacts"Matt Jordan
2015-11-23res_pjsip/pjsip_options: Add StatsD statistics for PJSIP contactsMatt Jordan
This patch adds the ability to send StatsD statistics related to the state of PJSIP contacts. This includes: * A GUAGE statistic measuring the count of contacts in a particular state. This measures how many contacts are reachable, unreachable, etc. * The RTT time for each contact, if those contacts are qualified. This provides StatsD engines useful time-based data about each contact. ASTERISK-25571 Change-Id: Ib8378d73afedfc622be0643b87c542557e0b332c
2015-11-23res/res_pjsip_outbound_registration: Add registration statistics for StatsDMatt Jordan
This patch adds outbound registration statistics for StatsD. This includes the following: * A GUAGE metric for the overall count of outbound registrations. * A GUAGE metric for each state an outbound registration can be in. As the outbound registrations change state, the overall count of how many outbound registrations are in the particular state is changed. These statistics are particularly useful for systems with a large number of SIP trunks, and where measuring the change in state of the trunks is useful for monitoring. ASTERISK-25571 Change-Id: Iba6ff248f5d1c1e01acbb63e9f0da1901692eb37
2015-11-22res_statsd: Add functions that support variable argumentsMatt Jordan
Often, the metric names of statistics we are generating for StatsD have some dynamic component to them. This can be the name of a particular resource, or some internal status label in Asterisk. With the current set of functions, callers of the statsd API must first build the metric name themselves, then pass this to the API functions. This results in a large amount of boilerplate code and usage of either fixed length static buffers or dynamic memory allocation, neither of which is desireable. This patch adds two new functions to the StatsD API that support a printf style format specifier for constructing the metric name. A dynamic string, allocated in threadstorage, is used to build the metric name. This eases the burden on users of the StatsD API. Change-Id: If533c72d1afa26d807508ea48b4d8c7b32f414ea
2015-11-22chan_pjsip: Handle T.38 faxes with direct media bridgesMatt Jordan
When a channel is in a direct media bridge, a re-INVITE may arrive that forces Asterisk to re-negotiate the media to a T.38 fax. When this occurs, the bridge must change its technology to a simple bridge, and re-INVITE the media back to Asterisk. Generally, this logic mostly already exists in Asterisk. However, prior to this patch, there were a few bugs: (1) The T.38 framehook currently prevents a channel capable of T.38 faxes from ever entering into a direct media bridge. This applies even when the only media being passed over the channel is audio. This patch fixes this bug by having the framehook specify that it defers caring about any frame type. This allows the channels to enter into a direct media bridge, which will be broken when a re-INVITE is received. (2) When a re-INVITE is received, nothing instructed the bridging layer to re-inspect the allowed bridging technology. This now occurs when either a re-INVITE is received from a peer, or when a response is received from the far end (that is, when the T.38 state changes to either T38_PEER_REINVITE or T38_LOCAL_REINVITE). (3) chan_pjsip needs to do a small amount of work to prevent a direct media bridge from being chosen when a T.38 session is in progress. When a T.38 session supplement has a t38 datastore - which is added when we detect we should start thinking about T.38 on a channel - we now refuse a native RTP bridge. (4) When a BYE request is received, we don't terminate the T.38 session. If the other side of a T.38 fax survives the hangup (due to the 'g' flag in Dial, for example), we don't currently re-INVITE the media on the other channel back to audio. This patch now has res_pjsip_t38 intercept BYE requests and inform the far side that the T.38 session is terminated. This naturally causes the correct re-INVITEs to be sent. ASTERISK-25582 Change-Id: Iabd6aa578e633d16e6b9f342091264e4324a79eb
2015-11-21Merge "main/cli: Use proper string methods to check existence of ↵Joshua Colp
context/exten/app"
2015-11-21Merge "res/res_pjsip_t38: Add debug statements"Joshua Colp
2015-11-21Merge "res_pjsip_outbound_registration.c: Be tolerant of short registration ↵Matt Jordan
timeouts."
2015-11-20main/cli: Use proper string methods to check existence of context/exten/appMatt Jordan
Because the context, extension, and application are stored in stringfields, checking for them being NULL doesn't work so well. This patch uses the appropriate string library call, ast_strlen_zero, to see if there is a value in the context/exten/app values. Change-Id: Ie09623bfdf35f5a8d3b23dd596647fe3c97b9a23
2015-11-20res/res_pjsip_t38: Add debug statementsMatt Jordan
This patch adds some debug statements to res_pjsip_t38. These statements help to determine which SDP negotiation callbacks are being executed, and, when a particular callback exits, why a callback may not have applied its logic to the local or remote SDP. Change-Id: I61b3fb9183b7ebbb5da8e9f48b59a5d9d7042d77
2015-11-20Merge "res_pjsip_outbound_registration.c: Fix 423 response handling."Mark Michelson
2015-11-20Merge "res_format_attr_h264: Do not reset string buffer."Joshua Colp
2015-11-20Merge "res/res_pjsip_outbound_registration: Apply configuration on object ↵Matt Jordan
type load"
2015-11-19Merge "StatsD: Add sample rate compatibility"Joshua Colp
2015-11-19res/res_pjsip_outbound_registration: Apply configuration on object type loadMatt Jordan
When Asterisk is configured to use a dynamic sorcery backend (such as res_sorcery_astdb) with 'registration' objects, it will fail to create the internal state objects associated with the registration objects on module load. This is due to nothing actually querying for the specific objects and calling their sorcery apply handler during module load. This patch fixes that by calling get_registrations in the sorcery observer's object_type_loaded handler. Doing this causes the sorcery backends to be asked for the current state of all registration objects, which causes the apply handler to be called and the internal run-time state to be created. ASTERISK-25575 #close Change-Id: Ie9306e797098c6d4da7bcf4a5434a15891508b23
2015-11-19translate: Provide translation modules the result of SDP negotiation.Alexander Traud
Previously, a trancoding module did not have access to the joint but cached format. Therefore, the module did not have access to the attributes negotiated via SDP (line fmtp). Now, a translation module receives the joint format. ASTERISK-25545 #close Change-Id: Id6878a989b50573298dab115d3371ea369e1a718