aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2011-01-20 20:31:20 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2011-01-20 20:31:20 +0000
commit3d697a24e326651d41c6268a645c32f833a85963 (patch)
tree977c494f6df50688debca147ce4de26d9be0f24f /main
parentd6394447f897bb4e5e38a58142fdb59e28a7940f (diff)
Merged revision 303098 from
https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier .......... r303098 | rmudgett | 2011-01-20 12:11:45 -0600 (Thu, 20 Jan 2011) | 15 lines CC_INTERFACES does not get built correctly with local channels. If local channels are used with CCSS, CC_INTERFACES gets garbage prepended to it so the CC recall fails. Also CC_INTERFACES gets "&(null)" appended to it. * Initialize the buffer to eliminate the prepended garbage. * Filter out the empty interface strings to eliminate the latter. * Added a diagnostic message if the CC_INTERFACES is ever empty. JIRA ABE-2740 JIRA SWP-2848 .......... git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@303153 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/ccss.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/main/ccss.c b/main/ccss.c
index 4dcacd360..2fb6c6cce 100644
--- a/main/ccss.c
+++ b/main/ccss.c
@@ -3186,10 +3186,14 @@ struct ast_cc_monitor *ast_cc_get_monitor_by_recall_core_id(const int core_id, c
* \param dialstring A new dialstring to add
* \retval void
*/
-static void cc_unique_append(struct ast_str *str, const char * const dialstring)
+static void cc_unique_append(struct ast_str *str, const char *dialstring)
{
char dialstring_search[AST_CHANNEL_NAME];
+ if (ast_strlen_zero(dialstring)) {
+ /* No dialstring to append. */
+ return;
+ }
snprintf(dialstring_search, sizeof(dialstring_search), "%s%c", dialstring, '&');
if (strstr(ast_str_buffer(str), dialstring_search)) {
return;
@@ -3218,6 +3222,10 @@ static void build_cc_interfaces_chanvar(struct ast_cc_monitor *starting_point, s
struct extension_child_dialstring *child_dialstring;
struct ast_cc_monitor *monitor_iter = starting_point;
int top_level_id = starting_point->id;
+ size_t length;
+
+ /* Init to an empty string. */
+ ast_str_truncate(str, 0);
/* First we need to take all of the is_valid child_dialstrings from
* the extension monitor we found and add them to the CC_INTERFACES
@@ -3240,7 +3248,15 @@ static void build_cc_interfaces_chanvar(struct ast_cc_monitor *starting_point, s
/* str will have an extra '&' tacked onto the end of it, so we need
* to get rid of that.
*/
- ast_str_truncate(str, ast_str_strlen(str) - 1);
+ length = ast_str_strlen(str);
+ if (length) {
+ ast_str_truncate(str, length - 1);
+ }
+ if (length <= 1) {
+ /* Nothing to recall? This should not happen. */
+ ast_log(LOG_ERROR, "CC_INTERFACES is empty. starting device_name:'%s'\n",
+ starting_point->interface->device_name);
+ }
}
int ast_cc_agent_set_interfaces_chanvar(struct ast_channel *chan)