Index: channels/chan_local.c =================================================================== --- channels/chan_local.c (revision 245684) +++ channels/chan_local.c (working copy) @@ -257,6 +257,38 @@ } if (other) { + if (f->frametype == AST_FRAME_CONTROL) { + switch (f->subclass.integer) { + 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: + break; + } + } ast_queue_frame(other, f); ast_channel_unlock(other); }