diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 8 | ||||
-rw-r--r-- | main/dial.c | 4 | ||||
-rw-r--r-- | main/features.c | 2 | ||||
-rw-r--r-- | main/pbx.c | 2 |
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; } |