aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-26 18:28:29 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-26 18:28:29 +0000
commit73c450c843ae79f23add8ce4e337a106ee7bd5d8 (patch)
treeaecb85aec65340cf2c212bbfdc474c5465518d5d /apps
parent16a7a7bc6fdad1e2685ad7c779cb8f4ad3c3e33b (diff)
Fix some codec negotiation problems when CallerID support is not enabled in SLA.
(issue #9308, reported by twilson) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@59215 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_meetme.c43
1 files changed, 40 insertions, 3 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index e9f74b936..f430921b2 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -3476,6 +3476,8 @@ static int sla_ring_station(struct sla_ringing_trunk *ringing_trunk, struct sla_
char *tech, *tech_data;
struct ast_dial *dial;
struct sla_ringing_station *ringing_station;
+ const char *cid_name = NULL, *cid_num = NULL;
+ enum ast_dial_result res;
if (!(dial = ast_dial_create()))
return -1;
@@ -3489,8 +3491,25 @@ static int sla_ring_station(struct sla_ringing_trunk *ringing_trunk, struct sla_
return -1;
}
- if (ast_dial_run(dial, sla.attempt_callerid ? ringing_trunk->trunk->chan : NULL, 1)
- != AST_DIAL_RESULT_TRYING) {
+ if (!sla.attempt_callerid && !ast_strlen_zero(ringing_trunk->trunk->chan->cid.cid_name)) {
+ cid_name = ast_strdupa(ringing_trunk->trunk->chan->cid.cid_name);
+ free(ringing_trunk->trunk->chan->cid.cid_name);
+ ringing_trunk->trunk->chan->cid.cid_name = NULL;
+ }
+ if (!sla.attempt_callerid && !ast_strlen_zero(ringing_trunk->trunk->chan->cid.cid_num)) {
+ cid_num = ast_strdupa(ringing_trunk->trunk->chan->cid.cid_num);
+ free(ringing_trunk->trunk->chan->cid.cid_num);
+ ringing_trunk->trunk->chan->cid.cid_num = NULL;
+ }
+
+ res = ast_dial_run(dial, ringing_trunk->trunk->chan, 1);
+
+ if (cid_name)
+ ringing_trunk->trunk->chan->cid.cid_name = ast_strdup(cid_name);
+ if (cid_num)
+ ringing_trunk->trunk->chan->cid.cid_num = ast_strdup(cid_num);
+
+ if (res != AST_DIAL_RESULT_TRYING) {
struct sla_failed_station *failed_station;
ast_dial_destroy(dial);
if (!(failed_station = ast_calloc(1, sizeof(*failed_station))))
@@ -3932,6 +3951,7 @@ static void *dial_trunk(void *data)
struct ast_conference *conf;
struct ast_flags conf_flags = { 0 };
struct sla_trunk_ref *trunk_ref = args->trunk_ref;
+ const char *cid_name = NULL, *cid_num = NULL;
if (!(dial = ast_dial_create())) {
ast_mutex_lock(args->cond_lock);
@@ -3950,7 +3970,24 @@ static void *dial_trunk(void *data)
return NULL;
}
- dial_res = ast_dial_run(dial, sla.attempt_callerid ? trunk_ref->chan : NULL, 1);
+ if (!sla.attempt_callerid && !ast_strlen_zero(trunk_ref->chan->cid.cid_name)) {
+ cid_name = ast_strdupa(trunk_ref->chan->cid.cid_name);
+ free(trunk_ref->chan->cid.cid_name);
+ trunk_ref->chan->cid.cid_name = NULL;
+ }
+ if (!sla.attempt_callerid && !ast_strlen_zero(trunk_ref->chan->cid.cid_num)) {
+ cid_num = ast_strdupa(trunk_ref->chan->cid.cid_num);
+ free(trunk_ref->chan->cid.cid_num);
+ trunk_ref->chan->cid.cid_num = NULL;
+ }
+
+ dial_res = ast_dial_run(dial, trunk_ref->chan, 1);
+
+ if (cid_name)
+ trunk_ref->chan->cid.cid_name = ast_strdup(cid_name);
+ if (cid_num)
+ trunk_ref->chan->cid.cid_num = ast_strdup(cid_num);
+
if (dial_res != AST_DIAL_RESULT_TRYING) {
ast_mutex_lock(args->cond_lock);
ast_cond_signal(args->cond);