summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/channel.c8
-rw-r--r--main/dial.c4
-rw-r--r--main/features.c2
-rw-r--r--main/pbx.c2
4 files changed, 16 insertions, 0 deletions
diff --git a/main/channel.c b/main/channel.c
index 8f4d37c8f..5275f9ec3 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4347,6 +4347,7 @@ static int attribute_const is_visible_indication(enum ast_control_frame_type con
case AST_CONTROL_MCID:
break;
+ case AST_CONTROL_INCOMPLETE:
case AST_CONTROL_CONGESTION:
case AST_CONTROL_BUSY:
case AST_CONTROL_RINGING:
@@ -4503,6 +4504,7 @@ int ast_indicate_data(struct ast_channel *chan, int _condition,
case AST_CONTROL_BUSY:
ts = ast_get_indication_tone(chan->zone, "busy");
break;
+ case AST_CONTROL_INCOMPLETE:
case AST_CONTROL_CONGESTION:
ts = ast_get_indication_tone(chan->zone, "congestion");
break;
@@ -5538,6 +5540,12 @@ struct ast_channel *__ast_request_and_dial(const char *type, struct ast_format_c
timeout = 0;
break;
+ case AST_CONTROL_INCOMPLETE:
+ ast_cdr_failed(chan->cdr);
+ *outstate = AST_CONTROL_CONGESTION;
+ timeout = 0;
+ break;
+
case AST_CONTROL_CONGESTION:
ast_cdr_failed(chan->cdr);
*outstate = f->subclass.integer;
diff --git a/main/dial.c b/main/dial.c
index 5c30e287d..6faf8f5d5 100644
--- a/main/dial.c
+++ b/main/dial.c
@@ -412,6 +412,10 @@ static void handle_frame(struct ast_dial *dial, struct ast_dial_channel *channel
ast_hangup(channel->owner);
channel->owner = NULL;
break;
+ case AST_CONTROL_INCOMPLETE:
+ ast_verb(3, "%s dialed Incomplete extension %s\n", channel->owner->name, channel->owner->exten);
+ ast_indicate(chan, AST_CONTROL_INCOMPLETE);
+ break;
case AST_CONTROL_RINGING:
ast_verb(3, "%s is ringing\n", channel->owner->name);
if (!dial->options[AST_DIAL_OPTION_MUSIC])
diff --git a/main/features.c b/main/features.c
index 819b67fb0..ac41a358c 100644
--- a/main/features.c
+++ b/main/features.c
@@ -3423,6 +3423,8 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
ast_indicate(caller, AST_CONTROL_BUSY);
ast_frfree(f);
break;
+ } else if (f->subclass.integer == AST_CONTROL_INCOMPLETE) {
+ ast_verb(3, "%s dialed incomplete extension %s; ignoring\n", chan->name, chan->exten);
} else if (f->subclass.integer == AST_CONTROL_CONGESTION) {
state = f->subclass.integer;
ast_verb(3, "%s is congested\n", chan->name);
diff --git a/main/pbx.c b/main/pbx.c
index 90f6d5a89..5b33f3a72 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -9395,6 +9395,8 @@ static int pbx_builtin_incomplete(struct ast_channel *chan, const char *data)
__ast_answer(chan, 0, 1);
}
+ ast_indicate(chan, AST_CONTROL_INCOMPLETE);
+
return AST_PBX_INCOMPLETE;
}