From de3ce178ab0282445cf25161b49f3737ac2d20ff Mon Sep 17 00:00:00 2001 From: Mike Bradeen Date: Mon, 14 Nov 2022 12:44:09 -0700 Subject: [PATCH] chan_alsa: Remove deprecated module. ASTERISK-30298 Change-Id: I5c8afb781528afdf55d237e3bffa5e4a862ae8c7 --- agi/jukebox.agi | 3 +- build_tools/menuselect-deps.in | 1 - channels/chan_alsa.c | 1047 --------------------- channels/chan_console.c | 8 +- configs/samples/alsa.conf.sample | 77 -- configs/samples/modules.conf.sample | 3 +- configure | 126 --- configure.ac | 3 - contrib/scripts/install_prereq | 14 +- doc/UPGRADE-staging/chan_alsa_removal.txt | 6 + include/asterisk/autoconfig.h.in | 3 - include/asterisk/doxygen/licensing.h | 9 +- makeopts.in | 3 - menuselect/example_menuselect-tree | 3 - menuselect/test/menuselect-tree | 3 - tests/CI/buildAsterisk.sh | 2 +- 16 files changed, 20 insertions(+), 1291 deletions(-) delete mode 100644 channels/chan_alsa.c delete mode 100644 configs/samples/alsa.conf.sample create mode 100644 doc/UPGRADE-staging/chan_alsa_removal.txt diff --git a/agi/jukebox.agi b/agi/jukebox.agi index 43d8978743..3e83110382 100755 --- a/agi/jukebox.agi +++ b/agi/jukebox.agi @@ -51,8 +51,7 @@ # going to http://www.mpg123.de/cgi-bin/sitexplorer.cgi?/mpg123/ # Be sure to download mpg123-0.59r.tar.gz because it is known to # work with Asterisk and hopefully isn't the release with that -# awful security problem. If you're using Fedora Core 3 with -# Alsa like me, make linux-alsa isn't going to work. Do make +# awful security problem. If you're using Fedora Core 3 do make # linux-devel and you're peachy keen. # # - You won't get nifty STDERR debug messages if you're using a diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in index 9a07214e5b..f616f64279 100644 --- a/build_tools/menuselect-deps.in +++ b/build_tools/menuselect-deps.in @@ -1,4 +1,3 @@ -ALSA=@PBX_ALSA@ BLUETOOTH=@PBX_BLUETOOTH@ BEANSTALK=@PBX_BEANSTALK@ COROSYNC=@PBX_COROSYNC@ diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c deleted file mode 100644 index 35bb34bd24..0000000000 --- a/channels/chan_alsa.c +++ /dev/null @@ -1,1047 +0,0 @@ -/* - * Asterisk -- An open source telephony toolkit. - * - * Copyright (C) 1999 - 2005, Digium, Inc. - * - * By Matthew Fredrickson - * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. - * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. - */ - -/*! \file - * \brief ALSA sound card channel driver - * - * \author Matthew Fredrickson - * - * \ingroup channel_drivers - */ - -/*! \li \ref chan_alsa.c uses the configuration file \ref alsa.conf - * \addtogroup configuration_file - */ - -/*! \page alsa.conf alsa.conf - * \verbinclude alsa.conf.sample - */ - -/*** MODULEINFO - alsa - no - deprecated - chan_console - 19 - 21 - ***/ - -#include "asterisk.h" - -#include -#ifndef ESTRPIPE -#define ESTRPIPE EPIPE -#endif -#include -#include -#include - -#define ALSA_PCM_NEW_HW_PARAMS_API -#define ALSA_PCM_NEW_SW_PARAMS_API -#include - -#include "asterisk/frame.h" -#include "asterisk/channel.h" -#include "asterisk/module.h" -#include "asterisk/pbx.h" -#include "asterisk/config.h" -#include "asterisk/cli.h" -#include "asterisk/utils.h" -#include "asterisk/causes.h" -#include "asterisk/endian.h" -#include "asterisk/stringfields.h" -#include "asterisk/abstract_jb.h" -#include "asterisk/musiconhold.h" -#include "asterisk/poll-compat.h" -#include "asterisk/stasis_channels.h" -#include "asterisk/format_cache.h" - -/*! Global jitterbuffer configuration - by default, jb is disabled - * \note Values shown here match the defaults shown in alsa.conf.sample */ -static struct ast_jb_conf default_jbconf = { - .flags = 0, - .max_size = 200, - .resync_threshold = 1000, - .impl = "fixed", - .target_extra = 40, -}; -static struct ast_jb_conf global_jbconf; - -#define DEBUG 0 -/* Which device to use */ -#define ALSA_INDEV "default" -#define ALSA_OUTDEV "default" -#define DESIRED_RATE 8000 - -/* Lets use 160 sample frames, just like GSM. */ -#define FRAME_SIZE 160 -#define PERIOD_FRAMES 80 /* 80 Frames, at 2 bytes each */ - -/* When you set the frame size, you have to come up with - the right buffer format as well. */ -/* 5 64-byte frames = one frame */ -#define BUFFER_FMT ((buffersize * 10) << 16) | (0x0006); - -/* Don't switch between read/write modes faster than every 300 ms */ -#define MIN_SWITCH_TIME 600 - -#if __BYTE_ORDER == __LITTLE_ENDIAN -static snd_pcm_format_t format = SND_PCM_FORMAT_S16_LE; -#else -static snd_pcm_format_t format = SND_PCM_FORMAT_S16_BE; -#endif - -static char indevname[50] = ALSA_INDEV; -static char outdevname[50] = ALSA_OUTDEV; - -static int silencesuppression = 0; -static int silencethreshold = 1000; - -AST_MUTEX_DEFINE_STATIC(alsalock); - -static const char tdesc[] = "ALSA Console Channel Driver"; -static const char config[] = "alsa.conf"; - -static char context[AST_MAX_CONTEXT] = "default"; -static char language[MAX_LANGUAGE] = ""; -static char exten[AST_MAX_EXTENSION] = "s"; -static char mohinterpret[MAX_MUSICCLASS]; - -static int hookstate = 0; - -static struct chan_alsa_pvt { - /* We only have one ALSA structure -- near sighted perhaps, but it - keeps this driver as simple as possible -- as it should be. */ - struct ast_channel *owner; - char exten[AST_MAX_EXTENSION]; - char context[AST_MAX_CONTEXT]; - snd_pcm_t *icard, *ocard; - -} alsa; - -/* Number of buffers... Each is FRAMESIZE/8 ms long. For example - with 160 sample frames, and a buffer size of 3, we have a 60ms buffer, - usually plenty. */ - -#define MAX_BUFFER_SIZE 100 - -/* File descriptors for sound device */ -static int readdev = -1; -static int writedev = -1; - -static int autoanswer = 1; -static int mute = 0; -static int noaudiocapture = 0; - -static struct ast_channel *alsa_request(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause); -static int alsa_digit(struct ast_channel *c, char digit, unsigned int duration); -static int alsa_text(struct ast_channel *c, const char *text); -static int alsa_hangup(struct ast_channel *c); -static int alsa_answer(struct ast_channel *c); -static struct ast_frame *alsa_read(struct ast_channel *chan); -static int alsa_call(struct ast_channel *c, const char *dest, int timeout); -static int alsa_write(struct ast_channel *chan, struct ast_frame *f); -static int alsa_indicate(struct ast_channel *chan, int cond, const void *data, size_t datalen); -static int alsa_fixup(struct ast_channel *oldchan, struct ast_channel *newchan); - -static struct ast_channel_tech alsa_tech = { - .type = "Console", - .description = tdesc, - .requester = alsa_request, - .send_digit_end = alsa_digit, - .send_text = alsa_text, - .hangup = alsa_hangup, - .answer = alsa_answer, - .read = alsa_read, - .call = alsa_call, - .write = alsa_write, - .indicate = alsa_indicate, - .fixup = alsa_fixup, -}; - -static snd_pcm_t *alsa_card_init(char *dev, snd_pcm_stream_t stream) -{ - int err; - int direction; - snd_pcm_t *handle = NULL; - snd_pcm_hw_params_t *hwparams = NULL; - snd_pcm_sw_params_t *swparams = NULL; - struct pollfd pfd; - snd_pcm_uframes_t period_size = PERIOD_FRAMES * 4; - snd_pcm_uframes_t buffer_size = 0; - unsigned int rate = DESIRED_RATE; - snd_pcm_uframes_t start_threshold, stop_threshold; - - err = snd_pcm_open(&handle, dev, stream, SND_PCM_NONBLOCK); - if (err < 0) { - ast_log(LOG_ERROR, "snd_pcm_open failed: %s\n", snd_strerror(err)); - return NULL; - } else { - ast_debug(1, "Opening device %s in %s mode\n", dev, (stream == SND_PCM_STREAM_CAPTURE) ? "read" : "write"); - } - - hwparams = ast_alloca(snd_pcm_hw_params_sizeof()); - memset(hwparams, 0, snd_pcm_hw_params_sizeof()); - snd_pcm_hw_params_any(handle, hwparams); - - err = snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); - if (err < 0) - ast_log(LOG_ERROR, "set_access failed: %s\n", snd_strerror(err)); - - err = snd_pcm_hw_params_set_format(handle, hwparams, format); - if (err < 0) - ast_log(LOG_ERROR, "set_format failed: %s\n", snd_strerror(err)); - - err = snd_pcm_hw_params_set_channels(handle, hwparams, 1); - if (err < 0) - ast_log(LOG_ERROR, "set_channels failed: %s\n", snd_strerror(err)); - - direction = 0; - err = snd_pcm_hw_params_set_rate_near(handle, hwparams, &rate, &direction); - if (rate != DESIRED_RATE) - ast_log(LOG_WARNING, "Rate not correct, requested %d, got %u\n", DESIRED_RATE, rate); - - direction = 0; - err = snd_pcm_hw_params_set_period_size_near(handle, hwparams, &period_size, &direction); - if (err < 0) - ast_log(LOG_ERROR, "period_size(%lu frames) is bad: %s\n", period_size, snd_strerror(err)); - else { - ast_debug(1, "Period size is %d\n", err); - } - - buffer_size = 4096 * 2; /* period_size * 16; */ - err = snd_pcm_hw_params_set_buffer_size_near(handle, hwparams, &buffer_size); - if (err < 0) - ast_log(LOG_WARNING, "Problem setting buffer size of %lu: %s\n", buffer_size, snd_strerror(err)); - else { - ast_debug(1, "Buffer size is set to %d frames\n", err); - } - - err = snd_pcm_hw_params(handle, hwparams); - if (err < 0) - ast_log(LOG_ERROR, "Couldn't set the new hw params: %s\n", snd_strerror(err)); - - swparams = ast_alloca(snd_pcm_sw_params_sizeof()); - memset(swparams, 0, snd_pcm_sw_params_sizeof()); - snd_pcm_sw_params_current(handle, swparams); - - if (stream == SND_PCM_STREAM_PLAYBACK) - start_threshold = period_size; - else - start_threshold = 1; - - err = snd_pcm_sw_params_set_start_threshold(handle, swparams, start_threshold); - if (err < 0) - ast_log(LOG_ERROR, "start threshold: %s\n", snd_strerror(err)); - - if (stream == SND_PCM_STREAM_PLAYBACK) - stop_threshold = buffer_size; - else - stop_threshold = buffer_size; - - err = snd_pcm_sw_params_set_stop_threshold(handle, swparams, stop_threshold); - if (err < 0) - ast_log(LOG_ERROR, "stop threshold: %s\n", snd_strerror(err)); - - err = snd_pcm_sw_params(handle, swparams); - if (err < 0) - ast_log(LOG_ERROR, "sw_params: %s\n", snd_strerror(err)); - - err = snd_pcm_poll_descriptors_count(handle); - if (err <= 0) - ast_log(LOG_ERROR, "Unable to get a poll descriptors count, error is %s\n", snd_strerror(err)); - if (err != 1) { - ast_debug(1, "Can't handle more than one device\n"); - } - - snd_pcm_poll_descriptors(handle, &pfd, err); - ast_debug(1, "Acquired fd %d from the poll descriptor\n", pfd.fd); - - if (stream == SND_PCM_STREAM_CAPTURE) - readdev = pfd.fd; - else - writedev = pfd.fd; - - return handle; -} - -static int soundcard_init(void) -{ - if (!noaudiocapture) { - alsa.icard = alsa_card_init(indevname, SND_PCM_STREAM_CAPTURE); - if (!alsa.icard) { - ast_log(LOG_ERROR, "Problem opening alsa capture device\n"); - return -1; - } - } - - alsa.ocard = alsa_card_init(outdevname, SND_PCM_STREAM_PLAYBACK); - - if (!alsa.ocard) { - ast_log(LOG_ERROR, "Problem opening ALSA playback device\n"); - return -1; - } - - return writedev; -} - -static int alsa_digit(struct ast_channel *c, char digit, unsigned int duration) -{ - ast_mutex_lock(&alsalock); - ast_verbose(" << Console Received digit %c of duration %u ms >> \n", - digit, duration); - ast_mutex_unlock(&alsalock); - - return 0; -} - -static int alsa_text(struct ast_channel *c, const char *text) -{ - ast_mutex_lock(&alsalock); - ast_verbose(" << Console Received text %s >> \n", text); - ast_mutex_unlock(&alsalock); - - return 0; -} - -static void grab_owner(void) -{ - while (alsa.owner && ast_channel_trylock(alsa.owner)) { - DEADLOCK_AVOIDANCE(&alsalock); - } -} - -static int alsa_call(struct ast_channel *c, const char *dest, int timeout) -{ - struct ast_frame f = { AST_FRAME_CONTROL }; - - ast_mutex_lock(&alsalock); - ast_verbose(" << Call placed to '%s' on console >> \n", dest); - if (autoanswer) { - ast_verbose(" << Auto-answered >> \n"); - if (mute) { - ast_verbose( " << Muted >> \n" ); - } - grab_owner(); - if (alsa.owner) { - f.subclass.integer = AST_CONTROL_ANSWER; - ast_queue_frame(alsa.owner, &f); - ast_channel_unlock(alsa.owner); - } - } else { - ast_verbose(" << Type 'answer' to answer, or use 'autoanswer' for future calls >> \n"); - grab_owner(); - if (alsa.owner) { - f.subclass.integer = AST_CONTROL_RINGING; - ast_queue_frame(alsa.owner, &f); - ast_channel_unlock(alsa.owner); - ast_indicate(alsa.owner, AST_CONTROL_RINGING); - } - } - if (!noaudiocapture) { - snd_pcm_prepare(alsa.icard); - snd_pcm_start(alsa.icard); - } - ast_mutex_unlock(&alsalock); - - return 0; -} - -static int alsa_answer(struct ast_channel *c) -{ - ast_mutex_lock(&alsalock); - ast_verbose(" << Console call has been answered >> \n"); - ast_setstate(c, AST_STATE_UP); - if (!noaudiocapture) { - snd_pcm_prepare(alsa.icard); - snd_pcm_start(alsa.icard); - } - ast_mutex_unlock(&alsalock); - - return 0; -} - -static int alsa_hangup(struct ast_channel *c) -{ - ast_mutex_lock(&alsalock); - ast_channel_tech_pvt_set(c, NULL); - alsa.owner = NULL; - ast_verbose(" << Hangup on console >> \n"); - ast_module_unref(ast_module_info->self); - hookstate = 0; - if (!noaudiocapture) { - snd_pcm_drop(alsa.icard); - } - ast_mutex_unlock(&alsalock); - - return 0; -} - -static int alsa_write(struct ast_channel *chan, struct ast_frame *f) -{ - static char sizbuf[8000]; - static int sizpos = 0; - int len = sizpos; - int res = 0; - /* size_t frames = 0; */ - snd_pcm_state_t state; - - ast_mutex_lock(&alsalock); - - /* We have to digest the frame in 160-byte portions */ - if (f->datalen > sizeof(sizbuf) - sizpos) { - ast_log(LOG_WARNING, "Frame too large\n"); - res = -1; - } else { - memcpy(sizbuf + sizpos, f->data.ptr, f->datalen); - len += f->datalen; - state = snd_pcm_state(alsa.ocard); - if (state == SND_PCM_STATE_XRUN) - snd_pcm_prepare(alsa.ocard); - while ((res = snd_pcm_writei(alsa.ocard, sizbuf, len / 2)) == -EAGAIN) { - usleep(1); - } - if (res == -EPIPE) { -#if DEBUG - ast_debug(1, "XRUN write\n"); -#endif - snd_pcm_prepare(alsa.ocard); - while ((res = snd_pcm_writei(alsa.ocard, sizbuf, len / 2)) == -EAGAIN) { - usleep(1); - } - if (res != len / 2) { - ast_log(LOG_ERROR, "Write error: %s\n", snd_strerror(res)); - res = -1; - } else if (res < 0) { - ast_log(LOG_ERROR, "Write error %s\n", snd_strerror(res)); - res = -1; - } - } else { - if (res == -ESTRPIPE) - ast_log(LOG_ERROR, "You've got some big problems\n"); - else if (res < 0) - ast_log(LOG_NOTICE, "Error %d on write\n", res); - } - } - ast_mutex_unlock(&alsalock); - - return res >= 0 ? 0 : res; -} - - -static struct ast_frame *alsa_read(struct ast_channel *chan) -{ - static struct ast_frame f; - static short __buf[FRAME_SIZE + AST_FRIENDLY_OFFSET / 2]; - short *buf; - static int readpos = 0; - static int left = FRAME_SIZE; - snd_pcm_state_t state; - int r = 0; - - ast_mutex_lock(&alsalock); - f.frametype = AST_FRAME_NULL; - f.subclass.integer = 0; - f.samples = 0; - f.datalen = 0; - f.data.ptr = NULL; - f.offset = 0; - f.src = "Console"; - f.mallocd = 0; - f.delivery.tv_sec = 0; - f.delivery.tv_usec = 0; - - if (noaudiocapture) { - /* Return null frame to asterisk*/ - ast_mutex_unlock(&alsalock); - return &f; - } - - state = snd_pcm_state(alsa.icard); - if ((state != SND_PCM_STATE_PREPARED) && (state != SND_PCM_STATE_RUNNING)) { - snd_pcm_prepare(alsa.icard); - } - - buf = __buf + AST_FRIENDLY_OFFSET / 2; - - r = snd_pcm_readi(alsa.icard, buf + readpos, left); - if (r == -EPIPE) { -#if DEBUG - ast_log(LOG_ERROR, "XRUN read\n"); -#endif - snd_pcm_prepare(alsa.icard); - } else if (r == -ESTRPIPE) { - ast_log(LOG_ERROR, "-ESTRPIPE\n"); - snd_pcm_prepare(alsa.icard); - } else if (r < 0) { - ast_log(LOG_ERROR, "Read error: %s\n", snd_strerror(r)); - } - - /* Return NULL frame on error */ - if (r < 0) { - ast_mutex_unlock(&alsalock); - return &f; - } - - /* Update positions */ - readpos += r; - left -= r; - - if (readpos >= FRAME_SIZE) { - /* A real frame */ - readpos = 0; - left = FRAME_SIZE; - if (ast_channel_state(chan) != AST_STATE_UP) { - /* Don't transmit unless it's up */ - ast_mutex_unlock(&alsalock); - return &f; - } - if (mute) { - /* Don't transmit if muted */ - ast_mutex_unlock(&alsalock); - return &f; - } - - f.frametype = AST_FRAME_VOICE; - f.subclass.format = ast_format_slin; - f.samples = FRAME_SIZE; - f.datalen = FRAME_SIZE * 2; - f.data.ptr = buf; - f.offset = AST_FRIENDLY_OFFSET; - f.src = "Console"; - f.mallocd = 0; - - } - ast_mutex_unlock(&alsalock); - - return &f; -} - -static int alsa_fixup(struct ast_channel *oldchan, struct ast_channel *newchan) -{ - struct chan_alsa_pvt *p = ast_channel_tech_pvt(newchan); - - ast_mutex_lock(&alsalock); - p->owner = newchan; - ast_mutex_unlock(&alsalock); - - return 0; -} - -static int alsa_indicate(struct ast_channel *chan, int cond, const void *data, size_t datalen) -{ - int res = 0; - - ast_mutex_lock(&alsalock); - - switch (cond) { - case AST_CONTROL_BUSY: - case AST_CONTROL_CONGESTION: - case AST_CONTROL_RINGING: - case AST_CONTROL_INCOMPLETE: - case AST_CONTROL_PVT_CAUSE_CODE: - case -1: - res = -1; /* Ask for inband indications */ - break; - case AST_CONTROL_PROGRESS: - case AST_CONTROL_PROCEEDING: - case AST_CONTROL_VIDUPDATE: - case AST_CONTROL_SRCUPDATE: - break; - case AST_CONTROL_HOLD: - ast_verbose(" << Console Has Been Placed on Hold >> \n"); - ast_moh_start(chan, data, mohinterpret); - break; - case AST_CONTROL_UNHOLD: - ast_verbose(" << Console Has Been Retrieved from Hold >> \n"); - ast_moh_stop(chan); - break; - default: - ast_log(LOG_WARNING, "Don't know how to display condition %d on %s\n", cond, ast_channel_name(chan)); - res = -1; - } - - ast_mutex_unlock(&alsalock); - - return res; -} - -static struct ast_channel *alsa_new(struct chan_alsa_pvt *p, int state, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor) -{ - struct ast_channel *tmp = NULL; - - if (!(tmp = ast_channel_alloc(1, state, 0, 0, "", p->exten, p->context, assignedids, requestor, 0, "ALSA/%s", indevname))) - return NULL; - - ast_channel_stage_snapshot(tmp); - - ast_channel_tech_set(tmp, &alsa_tech); - ast_channel_set_fd(tmp, 0, readdev); - ast_channel_set_readformat(tmp, ast_format_slin); - ast_channel_set_writeformat(tmp, ast_format_slin); - ast_channel_nativeformats_set(tmp, alsa_tech.capabilities); - - ast_channel_tech_pvt_set(tmp, p); - if (!ast_strlen_zero(p->context)) - ast_channel_context_set(tmp, p->context); - if (!ast_strlen_zero(p->exten)) - ast_channel_exten_set(tmp, p->exten); - if (!ast_strlen_zero(language)) - ast_channel_language_set(tmp, language); - p->owner = tmp; - ast_module_ref(ast_module_info->self); - ast_jb_configure(tmp, &global_jbconf); - - ast_channel_stage_snapshot_done(tmp); - ast_channel_unlock(tmp); - - if (state != AST_STATE_DOWN) { - if (ast_pbx_start(tmp)) { - ast_log(LOG_WARNING, "Unable to start PBX on %s\n", ast_channel_name(tmp)); - ast_hangup(tmp); - tmp = NULL; - } - } - - return tmp; -} - -static struct ast_channel *alsa_request(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause) -{ - struct ast_channel *tmp = NULL; - - if (ast_format_cap_iscompatible_format(cap, ast_format_slin) == AST_FORMAT_CMP_NOT_EQUAL) { - struct ast_str *codec_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN); - ast_log(LOG_NOTICE, "Asked to get a channel of format '%s'\n", ast_format_cap_get_names(cap, &codec_buf)); - return NULL; - } - - ast_mutex_lock(&alsalock); - - if (alsa.owner) { - ast_log(LOG_NOTICE, "Already have a call on the ALSA channel\n"); - *cause = AST_CAUSE_BUSY; - } else if (!(tmp = alsa_new(&alsa, AST_STATE_DOWN, assignedids, requestor))) { - ast_log(LOG_WARNING, "Unable to create new ALSA channel\n"); - } - - ast_mutex_unlock(&alsalock); - - return tmp; -} - -static char *console_autoanswer(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console autoanswer [on|off]"; - e->usage = - "Usage: console autoanswer [on|off]\n" - " Enables or disables autoanswer feature. If used without\n" - " argument, displays the current on/off status of autoanswer.\n" - " The default value of autoanswer is in 'alsa.conf'.\n"; - return NULL; - case CLI_GENERATE: - return NULL; - } - - if ((a->argc != 2) && (a->argc != 3)) - return CLI_SHOWUSAGE; - - ast_mutex_lock(&alsalock); - if (a->argc == 2) { - ast_cli(a->fd, "Auto answer is %s.\n", autoanswer ? "on" : "off"); - } else { - if (!strcasecmp(a->argv[2], "on")) - autoanswer = -1; - else if (!strcasecmp(a->argv[2], "off")) - autoanswer = 0; - else - res = CLI_SHOWUSAGE; - } - ast_mutex_unlock(&alsalock); - - return res; -} - -static char *console_answer(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console answer"; - e->usage = - "Usage: console answer\n" - " Answers an incoming call on the console (ALSA) channel.\n"; - - return NULL; - case CLI_GENERATE: - return NULL; - } - - if (a->argc != 2) - return CLI_SHOWUSAGE; - - ast_mutex_lock(&alsalock); - - if (!alsa.owner) { - ast_cli(a->fd, "No one is calling us\n"); - res = CLI_FAILURE; - } else { - if (mute) { - ast_verbose( " << Muted >> \n" ); - } - hookstate = 1; - grab_owner(); - if (alsa.owner) { - ast_queue_control(alsa.owner, AST_CONTROL_ANSWER); - ast_channel_unlock(alsa.owner); - } - } - - if (!noaudiocapture) { - snd_pcm_prepare(alsa.icard); - snd_pcm_start(alsa.icard); - } - - ast_mutex_unlock(&alsalock); - - return res; -} - -static char *console_sendtext(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - int tmparg = 3; - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console send text"; - e->usage = - "Usage: console send text \n" - " Sends a text message for display on the remote terminal.\n"; - return NULL; - case CLI_GENERATE: - return NULL; - } - - if (a->argc < 3) - return CLI_SHOWUSAGE; - - ast_mutex_lock(&alsalock); - - if (!alsa.owner) { - ast_cli(a->fd, "No channel active\n"); - res = CLI_FAILURE; - } else { - struct ast_frame f = { AST_FRAME_TEXT }; - char text2send[256] = ""; - - while (tmparg < a->argc) { - strncat(text2send, a->argv[tmparg++], sizeof(text2send) - strlen(text2send) - 1); - strncat(text2send, " ", sizeof(text2send) - strlen(text2send) - 1); - } - - text2send[strlen(text2send) - 1] = '\n'; - f.data.ptr = text2send; - f.datalen = strlen(text2send) + 1; - grab_owner(); - if (alsa.owner) { - ast_queue_frame(alsa.owner, &f); - ast_queue_control(alsa.owner, AST_CONTROL_ANSWER); - ast_channel_unlock(alsa.owner); - } - } - - ast_mutex_unlock(&alsalock); - - return res; -} - -static char *console_hangup(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console hangup"; - e->usage = - "Usage: console hangup\n" - " Hangs up any call currently placed on the console.\n"; - return NULL; - case CLI_GENERATE: - return NULL; - } - - - if (a->argc != 2) - return CLI_SHOWUSAGE; - - ast_mutex_lock(&alsalock); - - if (!alsa.owner && !hookstate) { - ast_cli(a->fd, "No call to hangup\n"); - res = CLI_FAILURE; - } else { - hookstate = 0; - grab_owner(); - if (alsa.owner) { - ast_queue_hangup_with_cause(alsa.owner, AST_CAUSE_NORMAL_CLEARING); - ast_channel_unlock(alsa.owner); - } - } - - ast_mutex_unlock(&alsalock); - - return res; -} - -static char *console_dial(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - char tmp[256], *tmp2; - char *mye, *myc; - const char *d; - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console dial"; - e->usage = - "Usage: console dial [extension[@context]]\n" - " Dials a given extension (and context if specified)\n"; - return NULL; - case CLI_GENERATE: - return NULL; - } - - if ((a->argc != 2) && (a->argc != 3)) - return CLI_SHOWUSAGE; - - ast_mutex_lock(&alsalock); - - if (alsa.owner) { - if (a->argc == 3) { - if (alsa.owner) { - for (d = a->argv[2]; *d; d++) { - struct ast_frame f = { .frametype = AST_FRAME_DTMF, .subclass.integer = *d }; - - ast_queue_frame(alsa.owner, &f); - } - } - } else { - ast_cli(a->fd, "You're already in a call. You can use this only to dial digits until you hangup\n"); - res = CLI_FAILURE; - } - } else { - mye = exten; - myc = context; - if (a->argc == 3) { - char *stringp = NULL; - - ast_copy_string(tmp, a->argv[2], sizeof(tmp)); - stringp = tmp; - strsep(&stringp, "@"); - tmp2 = strsep(&stringp, "@"); - if (!ast_strlen_zero(tmp)) - mye = tmp; - if (!ast_strlen_zero(tmp2)) - myc = tmp2; - } - if (ast_exists_extension(NULL, myc, mye, 1, NULL)) { - ast_copy_string(alsa.exten, mye, sizeof(alsa.exten)); - ast_copy_string(alsa.context, myc, sizeof(alsa.context)); - hookstate = 1; - alsa_new(&alsa, AST_STATE_RINGING, NULL, NULL); - } else - ast_cli(a->fd, "No such extension '%s' in context '%s'\n", mye, myc); - } - - ast_mutex_unlock(&alsalock); - - return res; -} - -static char *console_mute(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) -{ - int toggle = 0; - char *res = CLI_SUCCESS; - - switch (cmd) { - case CLI_INIT: - e->command = "console {mute|unmute} [toggle]"; - e->usage = - "Usage: console {mute|unmute} [toggle]\n" - " Mute/unmute the microphone.\n"; - return NULL; - case CLI_GENERATE: - return NULL; - } - - - if (a->argc > 3) { - return CLI_SHOWUSAGE; - } - - if (a->argc == 3) { - if (strcasecmp(a->argv[2], "toggle")) - return CLI_SHOWUSAGE; - toggle = 1; - } - - if (a->argc < 2) { - return CLI_SHOWUSAGE; - } - - if (!strcasecmp(a->argv[1], "mute")) { - mute = toggle ? !mute : 1; - } else if (!strcasecmp(a->argv[1], "unmute")) { - mute = toggle ? !mute : 0; - } else { - return CLI_SHOWUSAGE; - } - - ast_cli(a->fd, "Console mic is %s\n", mute ? "off" : "on"); - - return res; -} - -static struct ast_cli_entry cli_alsa[] = { - AST_CLI_DEFINE(console_answer, "Answer an incoming console call"), - AST_CLI_DEFINE(console_hangup, "Hangup a call on the console"), - AST_CLI_DEFINE(console_dial, "Dial an extension on the console"), - AST_CLI_DEFINE(console_sendtext, "Send text to the remote device"), - AST_CLI_DEFINE(console_autoanswer, "Sets/displays autoanswer"), - AST_CLI_DEFINE(console_mute, "Disable/Enable mic input"), -}; - -static int unload_module(void) -{ - ast_channel_unregister(&alsa_tech); - ast_cli_unregister_multiple(cli_alsa, ARRAY_LEN(cli_alsa)); - - if (alsa.icard) - snd_pcm_close(alsa.icard); - if (alsa.ocard) - snd_pcm_close(alsa.ocard); - if (alsa.owner) - ast_softhangup(alsa.owner, AST_SOFTHANGUP_APPUNLOAD); - if (alsa.owner) - return -1; - - ao2_cleanup(alsa_tech.capabilities); - alsa_tech.capabilities = NULL; - - return 0; -} - -/*! - * \brief Load the module - * - * Module loading including tests for configuration or dependencies. - * This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE, - * or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails - * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the - * configuration file or other non-critical problem return - * AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS. - */ -static int load_module(void) -{ - struct ast_config *cfg; - struct ast_variable *v; - struct ast_flags config_flags = { 0 }; - - if (!(alsa_tech.capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) { - return AST_MODULE_LOAD_DECLINE; - } - ast_format_cap_append(alsa_tech.capabilities, ast_format_slin, 0); - - /* Copy the default jb config over global_jbconf */ - memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf)); - - strcpy(mohinterpret, "default"); - - if (!(cfg = ast_config_load(config, config_flags))) { - ast_log(LOG_ERROR, "Unable to read ALSA configuration file %s. Aborting.\n", config); - return AST_MODULE_LOAD_DECLINE; - } else if (cfg == CONFIG_STATUS_FILEINVALID) { - ast_log(LOG_ERROR, "%s is in an invalid format. Aborting.\n", config); - return AST_MODULE_LOAD_DECLINE; - } - - v = ast_variable_browse(cfg, "general"); - for (; v; v = v->next) { - /* handle jb conf */ - if (!ast_jb_read_conf(&global_jbconf, v->name, v->value)) { - continue; - } - - if (!strcasecmp(v->name, "autoanswer")) { - autoanswer = ast_true(v->value); - } else if (!strcasecmp(v->name, "mute")) { - mute = ast_true(v->value); - } else if (!strcasecmp(v->name, "noaudiocapture")) { - noaudiocapture = ast_true(v->value); - } else if (!strcasecmp(v->name, "silencesuppression")) { - silencesuppression = ast_true(v->value); - } else if (!strcasecmp(v->name, "silencethreshold")) { - silencethreshold = atoi(v->value); - } else if (!strcasecmp(v->name, "context")) { - ast_copy_string(context, v->value, sizeof(context)); - } else if (!strcasecmp(v->name, "language")) { - ast_copy_string(language, v->value, sizeof(language)); - } else if (!strcasecmp(v->name, "extension")) { - ast_copy_string(exten, v->value, sizeof(exten)); - } else if (!strcasecmp(v->name, "input_device")) { - ast_copy_string(indevname, v->value, sizeof(indevname)); - } else if (!strcasecmp(v->name, "output_device")) { - ast_copy_string(outdevname, v->value, sizeof(outdevname)); - } else if (!strcasecmp(v->name, "mohinterpret")) { - ast_copy_string(mohinterpret, v->value, sizeof(mohinterpret)); - } - } - ast_config_destroy(cfg); - - if (soundcard_init() < 0) { - ast_verb(2, "No sound card detected -- console channel will be unavailable\n"); - ast_verb(2, "Turn off ALSA support by adding 'noload=chan_alsa.so' in /etc/asterisk/modules.conf\n"); - unload_module(); - - return AST_MODULE_LOAD_DECLINE; - } - - if (ast_channel_register(&alsa_tech)) { - ast_log(LOG_ERROR, "Unable to register channel class 'Console'\n"); - unload_module(); - - return AST_MODULE_LOAD_DECLINE; - } - - ast_cli_register_multiple(cli_alsa, ARRAY_LEN(cli_alsa)); - - return AST_MODULE_LOAD_SUCCESS; -} - -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ALSA Console Channel Driver", - .support_level = AST_MODULE_SUPPORT_DEPRECATED, - .load = load_module, - .unload = unload_module, - .load_pri = AST_MODPRI_CHANNEL_DRIVER, -); diff --git a/channels/chan_console.c b/channels/chan_console.c index 1d1d94cb92..5189212344 100644 --- a/channels/chan_console.c +++ b/channels/chan_console.c @@ -35,11 +35,9 @@ * - svn co https://www.portaudio.com/repos/portaudio/branches/v19-devel * * \note Since this works with any audio system that libportaudio supports, - * including ALSA and OSS, this may someday deprecate chan_alsa and chan_oss. - * However, before that can be done, it needs to *at least* have all of the - * features that these other channel drivers have. The features implemented - * in at least one of the other console channel drivers that are not yet - * implemented here are: + * including ALSA and OSS, it has come to replace the deprecated chan_alsa and + * chan_oss. However, the following features *at least* need to be implemented + * here for this to be a full replacement: * * - Set Auto-answer from the dialplan * - transfer CLI command diff --git a/configs/samples/alsa.conf.sample b/configs/samples/alsa.conf.sample deleted file mode 100644 index 3e617104d8..0000000000 --- a/configs/samples/alsa.conf.sample +++ /dev/null @@ -1,77 +0,0 @@ -; -; Open Sound System Console Driver Configuration File -; -[general] -; -; Automatically answer incoming calls on the console? Choose yes if -; for example you want to use this as an intercom. -; -autoanswer=yes -; -; Default context (is overridden with @context syntax) -; -context=local -; -; Default extension to call -; -extension=s -; -; Default language -; -;language=en -; -; Default Music on Hold class to use when this channel is placed on hold in -; the case that the music class is not set on the channel with -; Set(CHANNEL(musicclass)=whatever) in the dialplan and the peer channel -; putting this one on hold did not suggest a class to use. -; -;mohinterpret=default -; -; Silence suppression can be enabled when sound is over a certain threshold. -; The value for the threshold should probably be between 500 and 2000 or so, -; but your mileage may vary. Use the echo test to evaluate the best setting. -;silencesuppression = yes -;silencethreshold = 1000 -; -; To set which ALSA device to use, change this parameter -;input_device=hw:0,0 -;output_device=hw:0,0 - -; -; Default mute state (can also be toggled via CLI) -;mute=true - -; -; If enabled, no audio capture device will be opened. This is useful on -; systems where there will be no return audio path, such as overhead pagers. -;noaudiocapture=true - -; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- -; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of an - ; ALSA channel. Defaults to "no". An enabled jitterbuffer will - ; be used only if the sending side can create and the receiving - ; side can not accept jitter. The ALSA channel can't accept jitter, - ; thus an enabled jitterbuffer on the receive ALSA side will always - ; be used if the sending side can create jitter. - -; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. - -; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is - ; resynchronized. Useful to improve the quality of the voice, with - ; big jumps in/broken timestamps, usually sent from exotic devices - ; and programs. Defaults to 1000. - -; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP - ; channel. Two implementations are currently available - "fixed" - ; (with size always equals to jbmax-size) and "adaptive" (with - ; variable size, actually the new jb of IAX2). Defaults to fixed. - -; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. - ; The option represents the number of milliseconds by which the new - ; jitter buffer will pad its size. the default is 40, so without - ; modification, the new jitter buffer will set its size to the jitter - ; value plus 40 milliseconds. increasing this value may help if your - ; network normally has low jitter, but occasionally has spikes. - -; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". -; ---------------------------------------------------------------------------------- diff --git a/configs/samples/modules.conf.sample b/configs/samples/modules.conf.sample index 2ab16d1fd0..41cf9056ef 100644 --- a/configs/samples/modules.conf.sample +++ b/configs/samples/modules.conf.sample @@ -31,10 +31,9 @@ autoload=yes ; ;load = res_musiconhold.so ; -; Load one of: alsa, or console (portaudio). +; Load one of: console (portaudio). ; By default, load chan_console only (automatically). ; -noload = chan_alsa.so ;noload = chan_console.so ; ; Do not load res_hep and kin unless you are using HEP monitoring diff --git a/configure b/configure index 38bfc20d0c..09abe0c41b 100755 --- a/configure +++ b/configure @@ -1179,10 +1179,6 @@ PBX_BFD BFD_DIR BFD_INCLUDE BFD_LIB -PBX_ALSA -ALSA_DIR -ALSA_INCLUDE -ALSA_LIB PJPROJECT_INCLUDE PJPROJECT_LIB PBX_PJPROJECT @@ -11116,32 +11112,6 @@ printf "%s\n" "yes" >&6; } # to make things easier for the users. - ALSA_DESCRIP="Advanced Linux Sound Architecture" - ALSA_OPTION="asound" - PBX_ALSA=0 - -# Check whether --with-asound was given. -if test ${with_asound+y} -then : - withval=$with_asound; - case ${withval} in - n|no) - USE_ALSA=no - # -1 is a magic value used by menuselect to know that the package - # was disabled, other than 'not found' - PBX_ALSA=-1 - ;; - y|ye|yes) - ac_mandatory_list="${ac_mandatory_list} ALSA" - ;; - *) - ALSA_DIR="${withval}" - ac_mandatory_list="${ac_mandatory_list} ALSA" - ;; - esac - -fi - @@ -21874,102 +21844,6 @@ fi # do the package library checks now -if test "x${PBX_ALSA}" != "x1" -a "${USE_ALSA}" != "no"; then - pbxlibdir="" - # if --with-ALSA=DIR has been specified, use it. - if test "x${ALSA_DIR}" != "x"; then - if test -d ${ALSA_DIR}/lib; then - pbxlibdir="-L${ALSA_DIR}/lib" - else - pbxlibdir="-L${ALSA_DIR}" - fi - fi - - ast_ext_lib_check_save_CFLAGS="${CFLAGS}" - CFLAGS="${CFLAGS} " - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for snd_pcm_open in -lasound" >&5 -printf %s "checking for snd_pcm_open in -lasound... " >&6; } -if test ${ac_cv_lib_asound_snd_pcm_open+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound ${pbxlibdir} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char snd_pcm_open (); -int -main (void) -{ -return snd_pcm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_asound_snd_pcm_open=yes -else $as_nop - ac_cv_lib_asound_snd_pcm_open=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_pcm_open" >&5 -printf "%s\n" "$ac_cv_lib_asound_snd_pcm_open" >&6; } -if test "x$ac_cv_lib_asound_snd_pcm_open" = xyes -then : - AST_ALSA_FOUND=yes -else $as_nop - AST_ALSA_FOUND=no -fi - - CFLAGS="${ast_ext_lib_check_save_CFLAGS}" - - - # now check for the header. - if test "${AST_ALSA_FOUND}" = "yes"; then - ALSA_LIB="${pbxlibdir} -lasound " - # if --with-ALSA=DIR has been specified, use it. - if test "x${ALSA_DIR}" != "x"; then - ALSA_INCLUDE="-I${ALSA_DIR}/include" - fi - ALSA_INCLUDE="${ALSA_INCLUDE} " - - # check for the header - ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}" - CPPFLAGS="${CPPFLAGS} ${ALSA_INCLUDE}" - ac_fn_c_check_header_compile "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" -if test "x$ac_cv_header_alsa_asoundlib_h" = xyes -then : - ALSA_HEADER_FOUND=1 -else $as_nop - ALSA_HEADER_FOUND=0 -fi - - CPPFLAGS="${ast_ext_lib_check_saved_CPPFLAGS}" - - if test "x${ALSA_HEADER_FOUND}" = "x0" ; then - ALSA_LIB="" - ALSA_INCLUDE="" - else - - PBX_ALSA=1 - cat >>confdefs.h <<_ACEOF -#define HAVE_ALSA 1 -_ACEOF - - fi - fi -fi - - - if test "x${PBX_BFD}" != "x1" -a "${USE_BFD}" != "no"; then pbxlibdir="" diff --git a/configure.ac b/configure.ac index af4e316715..846d311b66 100644 --- a/configure.ac +++ b/configure.ac @@ -521,7 +521,6 @@ THIRD_PARTY_CONFIGURE() # by the --with option name (the third field), # to make things easier for the users. -AST_EXT_LIB_SETUP([ALSA], [Advanced Linux Sound Architecture], [asound]) AST_EXT_LIB_SETUP([BFD], [Debug symbol decoding], [bfd]) # BKTR is used for backtrace support on platforms that do not @@ -1610,8 +1609,6 @@ fi # do the package library checks now -AST_EXT_LIB_CHECK([ALSA], [asound], [snd_pcm_open], [alsa/asoundlib.h]) - AST_EXT_LIB_CHECK([BFD], [bfd], [bfd_openr], [bfd.h]) # Fedora/RedHat/CentOS require extra libraries AST_EXT_LIB_CHECK([BFD], [bfd], [bfd_openr], [bfd.h], [-ldl -liberty]) diff --git a/contrib/scripts/install_prereq b/contrib/scripts/install_prereq index 590ada5418..58438538f9 100755 --- a/contrib/scripts/install_prereq +++ b/contrib/scripts/install_prereq @@ -39,7 +39,7 @@ PACKAGES_RH="make gcc gcc-c++ pkgconfig" # Asterisk: basic requirements: PACKAGES_RH="$PACKAGES_RH libedit-devel jansson-devel libuuid-devel sqlite-devel libxml2-devel" # Asterisk: for addons: -PACKAGES_RH="$PACKAGES_RH speex-devel speexdsp-devel libogg-devel libvorbis-devel alsa-lib-devel portaudio-devel libcurl-devel xmlstarlet bison flex" +PACKAGES_RH="$PACKAGES_RH speex-devel speexdsp-devel libogg-devel libvorbis-devel portaudio-devel libcurl-devel xmlstarlet bison flex" PACKAGES_RH="$PACKAGES_RH postgresql-devel unixODBC-devel neon-devel gmime-devel lua-devel uriparser-devel libxslt-devel openssl-devel" PACKAGES_RH="$PACKAGES_RH mysql-devel bluez-libs-devel radcli-devel freetds-devel jack-audio-connection-kit-devel bash libcap-devel" PACKAGES_RH="$PACKAGES_RH net-snmp-devel iksemel-devel corosynclib-devel newt-devel popt-devel libical-devel spandsp-devel" @@ -55,7 +55,7 @@ PACKAGES_SUSE="make gcc gcc-c++ pkg-config" # Asterisk: basic requirements: PACKAGES_SUSE="$PACKAGES_SUSE libedit-devel libjansson-devel libuuid-devel sqlite3-devel libxml2-devel" # Asterisk: for addons: -PACKAGES_SUSE="$PACKAGES_SUSE speex-devel speexdsp-devel libogg-devel libvorbis-devel alsa-devel portaudio-devel libcurl-devel xmlstarlet bison flex" +PACKAGES_SUSE="$PACKAGES_SUSE speex-devel speexdsp-devel libogg-devel libvorbis-devel portaudio-devel libcurl-devel xmlstarlet bison flex" PACKAGES_SUSE="$PACKAGES_SUSE postgresql-devel unixODBC-devel libneon-devel gmime-devel lua-devel liburiparser-devel libxslt-devel libopenssl-devel" PACKAGES_SUSE="$PACKAGES_SUSE libmysqlclient-devel bluez-devel freeradius-client-devel freetds-devel bash libcap-devel" PACKAGES_SUSE="$PACKAGES_SUSE net-snmp-devel iksemel-devel libcorosync-devel newt-devel popt-devel libical-devel spandsp-devel" @@ -71,7 +71,7 @@ PACKAGES_ARCH="make gcc pkg-config" # Asterisk: basic requirements: PACKAGES_ARCH="$PACKAGES_ARCH libedit jansson libutil-linux libxml2 sqlite" # Asterisk: for addons: -PACKAGES_ARCH="$PACKAGES_ARCH speex speexdsp libogg libvorbis alsa-lib portaudio curl xmlstarlet bison flex" +PACKAGES_ARCH="$PACKAGES_ARCH speex speexdsp libogg libvorbis portaudio curl xmlstarlet bison flex" PACKAGES_ARCH="$PACKAGES_ARCH postgresql-libs unixodbc neon gmime lua uriparser libxslt openssl" PACKAGES_ARCH="$PACKAGES_ARCH libmariadbclient bluez-libs radcli freetds bash libcap" PACKAGES_ARCH="$PACKAGES_ARCH net-snmp libnewt popt libical spandsp" @@ -87,7 +87,7 @@ PACKAGES_GENTOO="sys-devel/make sys-devel/gcc dev-util/pkgconfig" # Asterisk: basic requirements: PACKAGES_GENTOO="$PACKAGES_GENTOO dev-libs/libedit dev-libs/jansson sys-libs/e2fsprogs-libs dev-libs/libxml2 dev-db/sqlite" # Asterisk: for addons: -PACKAGES_GENTOO="$PACKAGES_GENTOO media-libs/speex media-libs/speexdsp media-libs/libogg media-libs/libvorbis media-libs/alsa-lib media-libs/portaudio net-misc/curl app-text/xmlstarlet sys-devel/bison sys-devel/flex" +PACKAGES_GENTOO="$PACKAGES_GENTOO media-libs/speex media-libs/speexdsp media-libs/libogg media-libs/libvorbis media-libs/portaudio net-misc/curl app-text/xmlstarlet sys-devel/bison sys-devel/flex" PACKAGES_GENTOO="$PACKAGES_GENTOO dev-db/postgresql dev-db/unixODBC net-libs/neon dev-libs/gmime dev-lang/lua dev-libs/uriparser dev-libs/libxslt dev-libs/openssl" PACKAGES_GENTOO="$PACKAGES_GENTOO virtual/libmysqlclient net-wireless/bluez net-dialup/radiusclient-ng dev-db/freetds app-shells/bash sys-libs/libcap" PACKAGES_GENTOO="$PACKAGES_GENTOO net-analyzer/net-snmp dev-libs/iksemel sys-cluster/corosync dev-libs/newt dev-libs/popt dev-libs/libical media-libs/spandsp" @@ -103,7 +103,7 @@ PACKAGES_NBSD="gmake pkg-config" # Asterisk: basic requirements: PACKAGES_NBSD="$PACKAGES_NBSD editline jansson sqlite3 libuuid libxml2" # Asterisk: for addons: -PACKAGES_NBSD="$PACKAGES_NBSD speex speexdsp libogg libvorbis alsa-lib portaudio-devel curl bison flex" +PACKAGES_NBSD="$PACKAGES_NBSD speex speexdsp libogg libvorbis portaudio-devel curl bison flex" PACKAGES_NBSD="$PACKAGES_NBSD postgresql10-client unixodbc neon gmime lua52 uriparser libxslt openssl" PACKAGES_NBSD="$PACKAGES_NBSD mysql-client radiusclient-ng freetds bash" PACKAGES_NBSD="$PACKAGES_NBSD net-snmp iksemel popt libical spandsp" @@ -135,7 +135,7 @@ PACKAGES_FBSD="gmake pkgconf" # Asterisk: basic requirements: PACKAGES_FBSD="$PACKAGES_FBSD libedit jansson e2fsprogs-libuuid sqlite3 libxml2" # Asterisk: for addons: -PACKAGES_FBSD="$PACKAGES_FBSD speex speexdsp libogg libvorbis alsa-lib portaudio curl xmlstarlet bison flex" +PACKAGES_FBSD="$PACKAGES_FBSD speex speexdsp libogg libvorbis portaudio curl xmlstarlet bison flex" PACKAGES_FBSD="$PACKAGES_FBSD postgresql10-client unixODBC neon gmime26 lua52 uriparser libxslt openssl" PACKAGES_FBSD="$PACKAGES_FBSD mysql57-client radcli freetds" PACKAGES_FBSD="$PACKAGES_FBSD net-snmp iksemel corosync newt popt libical spandsp" @@ -151,7 +151,7 @@ PACKAGES_DBSD="gmake pkgconf" # Asterisk: basic requirements: PACKAGES_DBSD="$PACKAGES_DBSD libedit jansson e2fsprogs-libuuid sqlite3 libxml2" # Asterisk: for addons: -PACKAGES_DBSD="$PACKAGES_DBSD speex speexdsp libogg libvorbis alsa-lib portaudio curl xmlstarlet bison flex" +PACKAGES_DBSD="$PACKAGES_DBSD speex speexdsp libogg libvorbis portaudio curl xmlstarlet bison flex" PACKAGES_DBSD="$PACKAGES_DBSD postgresql10-client unixODBC neon gmime26 lua52 uriparser libxslt libressl" PACKAGES_DBSD="$PACKAGES_DBSD mariadb101-client radcli freetds" PACKAGES_DBSD="$PACKAGES_DBSD net-snmp iksemel corosync newt popt libical spandsp" diff --git a/doc/UPGRADE-staging/chan_alsa_removal.txt b/doc/UPGRADE-staging/chan_alsa_removal.txt new file mode 100644 index 0000000000..baf91af5eb --- /dev/null +++ b/doc/UPGRADE-staging/chan_alsa_removal.txt @@ -0,0 +1,6 @@ +Subject: chan_alsa +Master-Only: True + +This module was deprecated in Asterisk 19 +and is now being removed in accordance with +the Asterisk Module Deprecation policy. diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index a86d1686b2..f336b22a66 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -44,9 +44,6 @@ /* Define to 1 if works. */ #undef HAVE_ALLOCA_H -/* Define to 1 if you have the Advanced Linux Sound Architecture library. */ -#undef HAVE_ALSA - /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H diff --git a/include/asterisk/doxygen/licensing.h b/include/asterisk/doxygen/licensing.h index fa9e73e27f..99d70e0560 100644 --- a/include/asterisk/doxygen/licensing.h +++ b/include/asterisk/doxygen/licensing.h @@ -29,12 +29,6 @@ * This section contains a (not yet complete) list of libraries that are used * by various parts of Asterisk, including related licensing information. * - * \subsection alsa_lib ALSA Library - * \arg Library: libasound - * \arg Website: http://www.alsa-project.org - * \arg Used by: chan_alsa - * \arg License: LGPL - * * \subsection openssl_lib OpenSSL * \arg Library: libcrypto, libssl * \arg Website: http://www.openssl.org @@ -57,8 +51,7 @@ * \arg Note: Even though PortAudio is licensed under a BSD style * license, PortAudio will make use of some audio interface, * depending on how it was built. That audio interface may - * introduce additional licensing restrictions. On Linux, - * this would most commonly be ALSA: \ref alsa_lib. + * introduce additional licensing restrictions. * * \subsection rawlist Raw list of libraries that used by any part of Asterisk * \li c-client.a (app_voicemail with IMAP support) diff --git a/makeopts.in b/makeopts.in index 0f6cb91f2c..50fc8eb7a1 100644 --- a/makeopts.in +++ b/makeopts.in @@ -130,9 +130,6 @@ C_COMPILER_FAMILY=@AST_C_COMPILER_FAMILY@ AST_RPATH=@AST_RPATH@ AST_FORTIFY_SOURCE=@AST_FORTIFY_SOURCE@ -ALSA_INCLUDE=@ALSA_INCLUDE@ -ALSA_LIB=@ALSA_LIB@ - BFD_INCLUDE=@BFD_INCLUDE@ BFD_LIB=@BFD_LIB@ diff --git a/menuselect/example_menuselect-tree b/menuselect/example_menuselect-tree index 624a658231..81c436a888 100644 --- a/menuselect/example_menuselect-tree +++ b/menuselect/example_menuselect-tree @@ -182,9 +182,6 @@ - - - asound diff --git a/menuselect/test/menuselect-tree b/menuselect/test/menuselect-tree index 73c78bcd55..6bad4cab0c 100644 --- a/menuselect/test/menuselect-tree +++ b/menuselect/test/menuselect-tree @@ -193,9 +193,6 @@ chan_local - - asound - portaudio diff --git a/tests/CI/buildAsterisk.sh b/tests/CI/buildAsterisk.sh index 75beb4b8f1..9e3cb661a2 100755 --- a/tests/CI/buildAsterisk.sh +++ b/tests/CI/buildAsterisk.sh @@ -156,7 +156,7 @@ if [ $NO_MENUSELECT -eq 0 ] ; then mod_disables+=" cdr_adaptive_odbc cdr_custom cdr_manager cdr_odbc cdr_pgsql cdr_radius" mod_disables+=" cdr_tds" mod_disables+=" cel_odbc cel_pgsql cel_radius cel_sqlite3_custom cel_tds" - mod_disables+=" chan_alsa chan_console chan_motif chan_rtp chan_unistim" + mod_disables+=" chan_console chan_motif chan_rtp chan_unistim" mod_disables+=" func_frame_trace func_pitchshift func_speex func_volume func_dialgroup" mod_disables+=" func_periodic_hook func_sprintf func_enum func_extstate func_sysinfo func_iconv" mod_disables+=" func_callcompletion func_version func_rand func_sha1 func_module func_md5"