From 45107ed763b6ee3322f73d525109a8257d5dccf9 Mon Sep 17 00:00:00 2001 From: Matt O'Gorman <mogorman@digium.com> Date: Tue, 23 May 2006 18:23:05 +0000 Subject: [PATCH] allows for configurable answer timeout on attended transfer patch 0006763 with minor changes. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@29766 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CREDITS | 2 ++ configs/features.conf.sample | 1 + res/res_features.c | 12 +++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CREDITS b/CREDITS index a63285e90e..84440be9af 100644 --- a/CREDITS +++ b/CREDITS @@ -79,6 +79,8 @@ Constantine Filin - major contributions to the Asterisk Realtime Architecture Steve Murphy - privacy support, $[ ] parser upgrade, AEL2 parser upgrade Claude Patry - bug fixes, feature enhancements, and bug marshalling cpatry@gmail.com +Miroslav Nachev, miro@space-comm.com COSMOS Software Enterprises, Ltd. + - for Variable for No Answer Timeout for Attended Transfer === OTHER CONTRIBUTIONS === John Todd - Monkey sounds and associated teletorture prompt diff --git a/configs/features.conf.sample b/configs/features.conf.sample index db99c4c820..a0cc636000 100644 --- a/configs/features.conf.sample +++ b/configs/features.conf.sample @@ -26,6 +26,7 @@ context => parkedcalls ; Which context parked calls are in ;pickupexten = *8 ; Configure the pickup extension. (default is *8) ;featuredigittimeout = 500 ; Max time (ms) between digits for ; feature activation (default is 500 ms) +;atxfernoanswertimeout = 15 ; Timeout for answer on attended transfer default is 15 seconds. [featuremap] ;blindxfer => #1 ; Blind transfer (default is #) diff --git a/res/res_features.c b/res/res_features.c index 54c9a4c3bc..35c2034515 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -70,6 +70,7 @@ static void FREE(void *ptr) #define DEFAULT_PARK_TIME 45000 #define DEFAULT_TRANSFER_DIGIT_TIMEOUT 3000 #define DEFAULT_FEATURE_DIGIT_TIMEOUT 500 +#define DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER 15000 #define AST_MAX_WATCHERS 256 @@ -96,6 +97,8 @@ static int adsipark; static int transferdigittimeout; static int featuredigittimeout; +static int atxfernoanswertimeout; + static char *registrar = "res_features"; /*!< Registrar for operations */ /* module and CLI command definitions */ @@ -722,7 +725,7 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st l = strlen(xferto); snprintf(xferto + l, sizeof(xferto) - l, "@%s/n", transferer_real_context); /* append context */ newchan = ast_feature_request_and_dial(transferer, "Local", ast_best_codec(transferer->nativeformats), - xferto, 15000, &outstate, transferer->cid.cid_num, transferer->cid.cid_name); + xferto, atxfernoanswertimeout, &outstate, transferer->cid.cid_num, transferer->cid.cid_name); ast_indicate(transferer, -1); if (!newchan) { finishup(transferee); @@ -1986,6 +1989,7 @@ static int load_config(void) transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT; featuredigittimeout = DEFAULT_FEATURE_DIGIT_TIMEOUT; + atxfernoanswertimeout = DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER; cfg = ast_config_load("features.conf"); if (cfg) { @@ -2022,6 +2026,12 @@ static int load_config(void) ast_log(LOG_WARNING, "%s is not a valid featuredigittimeout\n", var->value); featuredigittimeout = DEFAULT_FEATURE_DIGIT_TIMEOUT; } + } else if (!strcasecmp(var->name, "atxfernoanswertimeout")) { + if ((sscanf(var->value, "%d", &atxfernoanswertimeout) != 1) || (atxfernoanswertimeout < 1)) { + ast_log(LOG_WARNING, "%s is not a valid atxfernoanswertimeout\n", var->value); + atxfernoanswertimeout = DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER; + } else + atxfernoanswertimeout = atxfernoanswertimeout * 1000; } else if (!strcasecmp(var->name, "courtesytone")) { ast_copy_string(courtesytone, var->value, sizeof(courtesytone)); } else if (!strcasecmp(var->name, "parkedplay")) { -- GitLab