Index: channels/chan_skinny.c =================================================================== --- channels/chan_skinny.c (revision 247762) +++ channels/chan_skinny.c (working copy) @@ -4500,6 +4500,7 @@ } else { /* big assumption we have two channels, lets transfer */ skinny_transfer(sub); + transmit_callstate(d, l->instance, SKINNY_ONHOOK, sub->callid); } } } @@ -5788,6 +5789,25 @@ case SOFTKEY_TRNSFER: if (skinnydebug) ast_verb(1, "Received Softkey Event: Transfer(%d/%d)\n", instance, callreference); + + if (!sub || !sub->owner) { + c = skinny_new(l, AST_STATE_DOWN); + } else { + c = sub->owner; + } + + if (!c) { + ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name); + } else { + sub = c->tech_pvt; + l->activesub = sub; + if (l->hookstate == SKINNY_ONHOOK) { + l->hookstate = SKINNY_OFFHOOK; + transmit_speaker_mode(d, SKINNY_SPEAKERON); + transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid); + } + } + if (l->transfer) handle_transfer_button(sub); else