Index: channels/chan_skinny.c =================================================================== --- channels/chan_skinny.c (revision 76979) +++ channels/chan_skinny.c (working copy) @@ -2727,6 +2738,7 @@ struct skinny_line *l = sub->parent; struct skinny_device *d = l->parent; struct skinnysession *s = d->session; + char exten[AST_MAX_EXTENSION] = ""; sub->cxmode = SKINNY_CX_SENDRECV; if (!sub->rtp) { @@ -2738,11 +2750,15 @@ ast_setstate(ast, AST_STATE_UP); } /* order matters here... for some reason, transmit_callinfo must be before transmit_callstate, or you won't get keypad messages in some situations. */ - transmit_callinfo(s, ast->cid.cid_name, ast->cid.cid_num, ast->exten, ast->exten, l->instance, sub->callid, 2); + if (ast_strlen_zero(ast->macroexten)) /* Use the original exten if we are in a macro */ + ast_copy_string(exten, ast->exten, sizeof(exten)); + else + ast_copy_string(exten, ast->macroexten, sizeof(exten)); + transmit_callinfo(s, ast->cid.cid_name, ast->cid.cid_num, exten, exten, l->instance, sub->callid, 2); transmit_callstate(s, l->instance, SKINNY_CONNECTED, sub->callid); transmit_selectsoftkeys(s, l->instance, sub->callid, KEYDEF_CONNECTED); transmit_displaypromptstatus(s, "Connected", 0, l->instance, sub->callid); @@ -2921,6 +2937,7 @@ struct skinny_line *l = sub->parent; struct skinny_device *d = l->parent; struct skinnysession *s = d->session; + char exten[AST_MAX_EXTENSION] = ""; if (skinnydebug) ast_verbose(VERBOSE_PREFIX_3 "Asked to indicate '%s' condition on channel %s\n", control2str(ind), ast->name); @@ -2928,11 +2945,16 @@ case AST_CONTROL_RINGING: if (ast->_state != AST_STATE_UP) { if (!sub->progress) { transmit_callstate(s, l->instance, SKINNY_RINGOUT, sub->callid); transmit_dialednumber(s, ast->exten, l->instance, sub->callid); transmit_displaypromptstatus(s, "Ring Out", 0, l->instance, sub->callid); - transmit_callinfo(s, ast->cid.cid_name, ast->cid.cid_num, ast->exten, ast->exten, l->instance, sub->callid, 2); /* 2 = outgoing from phone */ + /* Use the original exten if we are in a macro */ + if (ast_strlen_zero(ast->macroexten)) + ast_copy_string(exten, ast->exten, sizeof(exten)); + else + ast_copy_string(exten, ast->macroexten, sizeof(exten)); + transmit_callinfo(s, ast->cid.cid_name, ast->cid.cid_num, exten, exten, l->instance, sub->callid, 2); /* 2 = outgoing from phone */ sub->ringing = 1; break; }