aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_local.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/channels/chan_local.c b/channels/chan_local.c
index 7c8aa8d75..1dc41bd59 100644
--- a/channels/chan_local.c
+++ b/channels/chan_local.c
@@ -217,6 +217,42 @@ static int local_queue_frame(struct local_pvt *p, int isoutbound, struct ast_fra
}
if (other) {
+ if (f->frametype == AST_FRAME_CONTROL) {
+ switch (f->subclass) {
+ case AST_CONTROL_RINGING:
+ ast_setstate(other, AST_STATE_RINGING);
+ break;
+ case AST_CONTROL_ANSWER:
+ ast_setstate(other, AST_STATE_UP);
+ break;
+ case AST_CONTROL_BUSY:
+ ast_setstate(other, AST_STATE_BUSY);
+ break;
+
+ /* not going to handle these */
+ case AST_CONTROL_HANGUP:
+ case AST_CONTROL_RING:
+ case AST_CONTROL_TAKEOFFHOOK:
+ case AST_CONTROL_OFFHOOK:
+ case AST_CONTROL_CONGESTION:
+ case AST_CONTROL_FLASH:
+ case AST_CONTROL_WINK:
+ case AST_CONTROL_OPTION:
+ case AST_CONTROL_RADIO_KEY:
+ case AST_CONTROL_RADIO_UNKEY:
+ case AST_CONTROL_PROGRESS:
+ case AST_CONTROL_PROCEEDING:
+ case AST_CONTROL_HOLD:
+ case AST_CONTROL_UNHOLD:
+ case AST_CONTROL_VIDUPDATE:
+ case AST_CONTROL_SRCUPDATE:
+ case AST_CONTROL_T38_PARAMETERS:
+ break;
+ default:
+ /* since we're switching on an int, we can't rely on the compiler */
+ ast_log(LOG_WARNING, "New unhandled control frame added!!!\n");
+ }
+ }
ast_queue_frame(other, f);
ast_channel_unlock(other);
}