From bdc00dae0e9ffa8288f1b7e91fd5375a55a2eaf0 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Wed, 15 Sep 2004 19:49:33 +0000 Subject: [PATCH] Merge ADSI parking announcement (bug #2211) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3787 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- configs/features.conf.sample | 1 + res/res_features.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/configs/features.conf.sample b/configs/features.conf.sample index 6d3181932b..0b037e249a 100755 --- a/configs/features.conf.sample +++ b/configs/features.conf.sample @@ -11,3 +11,4 @@ context => parkedcalls ; Which context parked calls are in ;transferdigittimeout => 3 ; Number of seconds to wait between digits when transfering a call ;courtesytone = beep ; Sound file to play to the parked caller ; when someone dials a parked call +;adsipark = yes ; if you want ADSI parking announcements diff --git a/res/res_features.c b/res/res_features.c index e9cb7e7c3e..5daa0b5e26 100755 --- a/res/res_features.c +++ b/res/res_features.c @@ -27,6 +27,7 @@ #include <asterisk/cli.h> #include <asterisk/manager.h> #include <asterisk/utils.h> +#include <asterisk/adsi.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> @@ -59,6 +60,8 @@ static int parking_start = 701; /* Last available extension for parking */ static int parking_stop = 750; +static int adsipark = 0; + static int transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT; /* Default courtesy tone played when party joins conference */ @@ -120,6 +123,22 @@ char *ast_pickup_ext(void) return pickup_ext; } +static int adsi_announce_park(struct ast_channel *chan, int parkingnum) +{ + int res; + int justify[5] = {ADSI_JUST_CENT, ADSI_JUST_CENT, ADSI_JUST_CENT, ADSI_JUST_CENT}; + char tmp[256] = ""; + char *message[5] = {NULL, NULL, NULL, NULL, NULL}; + + snprintf(tmp, sizeof(tmp), "Parked on %d", parkingnum); + message[0] = tmp; + res = adsi_load_session(chan, NULL, 0, 1); + if (res == -1) { + return res; + } + return adsi_print(chan, message, justify, 1); +} + int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeout, int *extout) { /* We put the user in the parking list, then wake up the parking thread to be sure it looks @@ -194,7 +213,13 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou ); if (peer) { + if (adsipark && adsi_available(peer)) { + adsi_announce_park(peer, pu->parkingnum); + } ast_say_digits(peer, pu->parkingnum, "", peer->language); + if (adsipark && adsi_available(peer)) { + adsi_unload_session(peer); + } if (pu->notquiteyet) { /* Wake up parking thread if we're really done */ ast_moh_start(pu->chan, NULL); @@ -862,6 +887,8 @@ int load_module(void) parking_start = start; parking_stop = end; } + } else if (!strcasecmp(var->name, "adsipark")) { + adsipark = ast_true(var->value); } else if(!strcasecmp(var->name, "transferdigittimeout")) { if ((sscanf(var->value, "%d", &transferdigittimeout) != 1) || (transferdigittimeout < 1)) { ast_log(LOG_WARNING, "%s is not a valid transferdigittimeout\n", var->value); -- GitLab