mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
Merged revisions 331265 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r331265 | rmudgett | 2011-08-09 18:12:49 -0500 (Tue, 09 Aug 2011) | 22 lines Merged revisions 331248 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r331248 | rmudgett | 2011-08-09 17:12:59 -0500 (Tue, 09 Aug 2011) | 15 lines Misc minor items found in code. * Add some reentrancy protection in pbx.c when creating the contexts_table hash table. * Fix inverted test in chan_sip.c conditional code. * Fix uninitialized variable and use of the wrong variable in chan_iax2.c. * Fix test of return value in app_parkandannounce.c. Explicitly testing for -1 is bad if the function does not actually return that value when it fails. * Fixup some comments and add some curly braces in features.c. ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@331266 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -669,7 +669,8 @@ static int parkinglot_hash_cb(const void *obj, const int flags)
|
||||
|
||||
static int parkinglot_cmp_cb(void *obj, void *arg, int flags)
|
||||
{
|
||||
struct ast_parkinglot *parkinglot = obj, *parkinglot2 = arg;
|
||||
struct ast_parkinglot *parkinglot = obj;
|
||||
struct ast_parkinglot *parkinglot2 = arg;
|
||||
|
||||
return !strcasecmp(parkinglot->name, parkinglot2->name) ? CMP_MATCH | CMP_STOP : 0;
|
||||
}
|
||||
@@ -994,14 +995,14 @@ static struct parkeduser *park_space_reserve(struct ast_channel *chan, struct as
|
||||
* limitation here. If extout was not numeric, we could permit
|
||||
* arbitrary non-numeric extensions.
|
||||
*/
|
||||
if (sscanf(parkingexten, "%30d", &parking_space) != 1 || parking_space < 0) {
|
||||
if (sscanf(parkingexten, "%30d", &parking_space) != 1 || parking_space < 0) {
|
||||
AST_LIST_UNLOCK(&parkinglot->parkings);
|
||||
parkinglot_unref(parkinglot);
|
||||
free(pu);
|
||||
ast_log(LOG_WARNING, "PARKINGEXTEN does not indicate a valid parking slot: '%s'.\n", parkingexten);
|
||||
return NULL;
|
||||
}
|
||||
snprintf(pu->parkingexten, sizeof(pu->parkingexten), "%d", parking_space);
|
||||
free(pu);
|
||||
ast_log(LOG_WARNING, "PARKINGEXTEN does not indicate a valid parking slot: '%s'.\n", parkingexten);
|
||||
return NULL;
|
||||
}
|
||||
snprintf(pu->parkingexten, sizeof(pu->parkingexten), "%d", parking_space);
|
||||
|
||||
if (ast_exists_extension(NULL, parkinglot->parking_con, pu->parkingexten, 1, NULL)) {
|
||||
ast_log(LOG_WARNING, "Requested parking extension already exists: %s@%s\n", parkingexten, parkinglot->parking_con);
|
||||
@@ -1323,7 +1324,7 @@ static struct ast_channel *create_test_channel(const struct ast_channel_tech *fa
|
||||
struct ast_channel *test_channel1;
|
||||
struct ast_format tmp_fmt;
|
||||
if (!(test_channel1 = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL,
|
||||
NULL, NULL, 0, 0, "TestChannel1"))) {
|
||||
NULL, NULL, 0, 0, "TestChannel1"))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2260,6 +2261,7 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st
|
||||
if (newchan || ast_check_hangup(transferee)) {
|
||||
break;
|
||||
}
|
||||
|
||||
++tries;
|
||||
if (atxfercallbackretries <= tries) {
|
||||
/* No more callback tries remaining. */
|
||||
@@ -3155,6 +3157,7 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
|
||||
}
|
||||
} else if (chan == active_channel) {
|
||||
if (!ast_strlen_zero(chan->call_forward)) {
|
||||
state = 0;
|
||||
chan = ast_call_forward(caller, chan, NULL, tmp_cap, NULL, &state);
|
||||
if (!chan) {
|
||||
break;
|
||||
@@ -3438,14 +3441,17 @@ static void clear_dialed_interfaces(struct ast_channel *chan)
|
||||
|
||||
/*!
|
||||
* \brief bridge the call and set CDR
|
||||
* \param chan,peer,config
|
||||
*
|
||||
*
|
||||
* \param chan The bridge considers this channel the caller.
|
||||
* \param peer The bridge considers this channel the callee.
|
||||
* \param config Configuration for this bridge.
|
||||
*
|
||||
* Set start time, check for two channels,check if monitor on
|
||||
* check for feature activation, create new CDR
|
||||
* \retval res on success.
|
||||
* \retval -1 on failure to bridge.
|
||||
*/
|
||||
int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast_bridge_config *config)
|
||||
int ast_bridge_call(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config)
|
||||
{
|
||||
/* Copy voice back and forth between the two channels. Give the peer
|
||||
the ability to transfer calls with '#<extension' syntax. */
|
||||
@@ -4357,8 +4363,8 @@ static void *do_parking_thread(void *ignore)
|
||||
struct ao2_iterator iter;
|
||||
struct ast_parkinglot *curlot;
|
||||
int ms = -1; /* poll2 timeout, uninitialized */
|
||||
iter = ao2_iterator_init(parkinglots, 0);
|
||||
|
||||
iter = ao2_iterator_init(parkinglots, 0);
|
||||
while ((curlot = ao2_iterator_next(&iter))) {
|
||||
manage_parkinglot(curlot, pfds, nfds, &new_pfds, &new_nfds, &ms);
|
||||
ao2_ref(curlot, -1);
|
||||
@@ -5078,8 +5084,9 @@ static int load_config(void)
|
||||
if ((sscanf(var->value, "%30d", &transferdigittimeout) != 1) || (transferdigittimeout < 1)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid transferdigittimeout\n", var->value);
|
||||
transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT;
|
||||
} else
|
||||
} else {
|
||||
transferdigittimeout = transferdigittimeout * 1000;
|
||||
}
|
||||
} else if (!strcasecmp(var->name, "featuredigittimeout")) {
|
||||
if ((sscanf(var->value, "%30d", &featuredigittimeout) != 1) || (featuredigittimeout < 1)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid featuredigittimeout\n", var->value);
|
||||
@@ -5089,14 +5096,16 @@ static int load_config(void)
|
||||
if ((sscanf(var->value, "%30d", &atxfernoanswertimeout) != 1) || (atxfernoanswertimeout < 1)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid atxfernoanswertimeout\n", var->value);
|
||||
atxfernoanswertimeout = DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER;
|
||||
} else
|
||||
} else {
|
||||
atxfernoanswertimeout = atxfernoanswertimeout * 1000;
|
||||
}
|
||||
} else if (!strcasecmp(var->name, "atxferloopdelay")) {
|
||||
if ((sscanf(var->value, "%30u", &atxferloopdelay) != 1)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid atxferloopdelay\n", var->value);
|
||||
atxferloopdelay = DEFAULT_ATXFER_LOOP_DELAY;
|
||||
} else
|
||||
} else {
|
||||
atxferloopdelay *= 1000;
|
||||
}
|
||||
} else if (!strcasecmp(var->name, "atxferdropcall")) {
|
||||
atxferdropcall = ast_true(var->value);
|
||||
} else if (!strcasecmp(var->name, "atxfercallbackretries")) {
|
||||
@@ -5107,12 +5116,13 @@ static int load_config(void)
|
||||
} else if (!strcasecmp(var->name, "courtesytone")) {
|
||||
ast_copy_string(courtesytone, var->value, sizeof(courtesytone));
|
||||
} else if (!strcasecmp(var->name, "parkedplay")) {
|
||||
if (!strcasecmp(var->value, "both"))
|
||||
if (!strcasecmp(var->value, "both")) {
|
||||
parkedplay = 2;
|
||||
else if (!strcasecmp(var->value, "parked"))
|
||||
} else if (!strcasecmp(var->value, "parked")) {
|
||||
parkedplay = 1;
|
||||
else
|
||||
} else {
|
||||
parkedplay = 0;
|
||||
}
|
||||
} else if (!strcasecmp(var->name, "xfersound")) {
|
||||
ast_copy_string(xfersound, var->value, sizeof(xfersound));
|
||||
} else if (!strcasecmp(var->name, "xferfailsound")) {
|
||||
@@ -5132,11 +5142,12 @@ static int load_config(void)
|
||||
|
||||
unmap_features();
|
||||
for (var = ast_variable_browse(cfg, "featuremap"); var; var = var->next) {
|
||||
if (remap_feature(var->name, var->value))
|
||||
if (remap_feature(var->name, var->value)) {
|
||||
ast_log(LOG_NOTICE, "Unknown feature '%s'\n", var->name);
|
||||
}
|
||||
}
|
||||
|
||||
/* Map a key combination to an application*/
|
||||
/* Map a key combination to an application */
|
||||
ast_unregister_features();
|
||||
for (var = ast_variable_browse(cfg, "applicationmap"); var; var = var->next) {
|
||||
char *tmp_val = ast_strdupa(var->value);
|
||||
@@ -5236,23 +5247,27 @@ static int load_config(void)
|
||||
/* Is this a parkinglot definition ? */
|
||||
if (!strncasecmp(ctg, "parkinglot_", strlen("parkinglot_"))) {
|
||||
ast_debug(2, "Found configuration section %s, assume parking context\n", ctg);
|
||||
if(!build_parkinglot(ctg, ast_variable_browse(cfg, ctg)))
|
||||
if (!build_parkinglot(ctg, ast_variable_browse(cfg, ctg))) {
|
||||
ast_log(LOG_ERROR, "Could not build parking lot %s. Configuration error.\n", ctg);
|
||||
else
|
||||
} else {
|
||||
ast_debug(1, "Configured parking context %s\n", ctg);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* No, check if it's a group */
|
||||
for (i = 0; i < ARRAY_LEN(categories); i++) {
|
||||
if (!strcasecmp(categories[i], ctg))
|
||||
if (!strcasecmp(categories[i], ctg)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i < ARRAY_LEN(categories)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i < ARRAY_LEN(categories))
|
||||
continue;
|
||||
|
||||
if (!(fg = register_group(ctg)))
|
||||
if (!(fg = register_group(ctg))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (var = ast_variable_browse(cfg, ctg); var; var = var->next) {
|
||||
struct ast_call_feature *feature;
|
||||
@@ -5993,18 +6008,20 @@ int ast_bridge_timelimit(struct ast_channel *chan, struct ast_bridge_config *con
|
||||
} else if ( (delta = config->play_warning - config->timelimit) > 0) {
|
||||
int w = config->warning_freq;
|
||||
|
||||
/* If the first warning is requested _after_ the entire call would end,
|
||||
and no warning frequency is requested, then turn off the warning. If
|
||||
a warning frequency is requested, reduce the 'first warning' time by
|
||||
that frequency until it falls within the call's total time limit.
|
||||
Graphically:
|
||||
timelim->| delta |<-playwarning
|
||||
0__________________|_________________|
|
||||
| w | | | |
|
||||
|
||||
so the number of intervals to cut is 1+(delta-1)/w
|
||||
*/
|
||||
|
||||
/*
|
||||
* If the first warning is requested _after_ the entire call
|
||||
* would end, and no warning frequency is requested, then turn
|
||||
* off the warning. If a warning frequency is requested, reduce
|
||||
* the 'first warning' time by that frequency until it falls
|
||||
* within the call's total time limit.
|
||||
*
|
||||
* Graphically:
|
||||
* timelim->| delta |<-playwarning
|
||||
* 0__________________|_________________|
|
||||
* | w | | | |
|
||||
*
|
||||
* so the number of intervals to cut is 1+(delta-1)/w
|
||||
*/
|
||||
if (w == 0) {
|
||||
config->play_warning = 0;
|
||||
} else {
|
||||
@@ -6261,9 +6278,9 @@ int ast_features_init(void)
|
||||
}
|
||||
|
||||
res |= ast_devstate_prov_add("Park", metermaidstate);
|
||||
#ifdef TEST_FRAMEWORK
|
||||
#if defined(TEST_FRAMEWORK)
|
||||
res |= AST_TEST_REGISTER(features_test);
|
||||
#endif
|
||||
#endif /* defined(TEST_FRAMEWORK) */
|
||||
|
||||
return res;
|
||||
}
|
||||
|
Reference in New Issue
Block a user