summaryrefslogtreecommitdiff
path: root/main/ccss.c
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2012-02-27 16:50:19 +0000
committerKinsey Moore <kmoore@digium.com>2012-02-27 16:50:19 +0000
commit1fac2fba4b8f3decd83d738e974280aa92b50bcc (patch)
tree114ec337f0210035993f29b81d1c704ff1ad7242 /main/ccss.c
parent3cf09f40f749c8889de7d2b1aadf05d122ccba4f (diff)
Deprecated macro usage for connected line, redirecting, and CCSS
This commit adds GoSub alternatives to connected line, redirecting, and CCSS macro hooks so that macro can finally be deprecated. This also adds deprecation warnings for those features when used and in documentation. Review: https://reviewboard.asterisk.org/r/1760/ (closes issue SWP-4256) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@357013 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/ccss.c')
-rw-r--r--main/ccss.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/main/ccss.c b/main/ccss.c
index f1965986d..ad3e82ec0 100644
--- a/main/ccss.c
+++ b/main/ccss.c
@@ -156,6 +156,7 @@ struct ast_cc_config_params {
unsigned int cc_max_agents;
unsigned int cc_max_monitors;
char cc_callback_macro[AST_MAX_EXTENSION];
+ char cc_callback_sub[AST_MAX_EXTENSION];
char cc_agent_dialstring[AST_MAX_EXTENSION];
};
@@ -654,6 +655,7 @@ static const struct ast_cc_config_params cc_default_params = {
.cc_max_agents = CC_MAX_AGENTS_DEFAULT,
.cc_max_monitors = CC_MAX_MONITORS_DEFAULT,
.cc_callback_macro = "",
+ .cc_callback_sub = "",
.cc_agent_dialstring = "",
};
@@ -751,6 +753,8 @@ int ast_cc_get_param(struct ast_cc_config_params *params, const char * const nam
if (!strcasecmp(name, "cc_callback_macro")) {
value = ast_get_cc_callback_macro(params);
+ } else if (!strcasecmp(name, "cc_callback_sub")) {
+ value = ast_get_cc_callback_sub(params);
} else if (!strcasecmp(name, "cc_agent_policy")) {
value = agent_policy_to_str(ast_get_cc_agent_policy(params));
} else if (!strcasecmp(name, "cc_monitor_policy")) {
@@ -800,6 +804,9 @@ int ast_cc_set_param(struct ast_cc_config_params *params, const char * const nam
} else if (!strcasecmp(name, "cc_callback_macro")) {
ast_set_cc_callback_macro(params, value);
return 0;
+ } else if (!strcasecmp(name, "cc_callback_sub")) {
+ ast_set_cc_callback_sub(params, value);
+ return 0;
}
if (!sscanf(value, "%30u", &value_as_uint) == 1) {
@@ -836,6 +843,7 @@ int ast_cc_is_config_param(const char * const name)
!strcasecmp(name, "cc_max_agents") ||
!strcasecmp(name, "cc_max_monitors") ||
!strcasecmp(name, "cc_callback_macro") ||
+ !strcasecmp(name, "cc_callback_sub") ||
!strcasecmp(name, "cc_agent_dialstring") ||
!strcasecmp(name, "cc_recall_timer"));
}
@@ -978,8 +986,14 @@ const char *ast_get_cc_callback_macro(struct ast_cc_config_params *config)
return config->cc_callback_macro;
}
+const char *ast_get_cc_callback_sub(struct ast_cc_config_params *config)
+{
+ return config->cc_callback_sub;
+}
+
void ast_set_cc_callback_macro(struct ast_cc_config_params *config, const char * const value)
{
+ ast_log(LOG_WARNING, "Usage of cc_callback_macro is deprecated. Please use cc_callback_sub instead.\n");
if (ast_strlen_zero(value)) {
config->cc_callback_macro[0] = '\0';
} else {
@@ -987,6 +1001,15 @@ void ast_set_cc_callback_macro(struct ast_cc_config_params *config, const char *
}
}
+void ast_set_cc_callback_sub(struct ast_cc_config_params *config, const char * const value)
+{
+ if (ast_strlen_zero(value)) {
+ config->cc_callback_sub[0] = '\0';
+ } else {
+ ast_copy_string(config->cc_callback_sub, value, sizeof(config->cc_callback_sub));
+ }
+}
+
struct cc_monitor_backend {
AST_LIST_ENTRY(cc_monitor_backend) next;
const struct ast_cc_monitor_callbacks *callbacks;
@@ -2651,6 +2674,7 @@ static void *generic_recall(void *data)
int reason;
struct ast_channel *chan;
const char *callback_macro = ast_get_cc_callback_macro(agent->cc_params);
+ const char *callback_sub = ast_get_cc_callback_sub(agent->cc_params);
unsigned int recall_timer = ast_get_cc_recall_timer(agent->cc_params) * 1000;
struct ast_format tmp_fmt;
struct ast_format_cap *tmp_cap = ast_format_cap_alloc_nolock();
@@ -2700,6 +2724,16 @@ static void *generic_recall(void *data)
return NULL;
}
}
+
+ if (!ast_strlen_zero(callback_sub)) {
+ ast_log_dynamic_level(cc_logger_level, "Core %d: There's a callback subroutine configured for agent %s\n",
+ agent->core_id, agent->device_name);
+ if (ast_app_run_sub(NULL, chan, callback_sub, NULL)) {
+ ast_cc_failed(agent->core_id, "Callback subroutine to %s failed. Maybe a hangup?", agent->device_name);
+ ast_hangup(chan);
+ return NULL;
+ }
+ }
ast_cc_agent_recalling(agent->core_id, "Generic agent %s is recalling", agent->device_name);
ast_pbx_start(chan);
return NULL;