Index: channels/chan_skinny.c =================================================================== --- channels/chan_skinny.c (revision 68158) +++ channels/chan_skinny.c (working copy) @@ -598,10 +615,8 @@ }; static const uint8_t soft_key_default_ringout[] = { + SOFTKEY_NONE, SOFTKEY_ENDCALL, - SOFTKEY_TRNSFER, - SOFTKEY_CFWDALL, - SOFTKEY_CFWDBUSY, }; static const uint8_t soft_key_default_offhookwithfeat[] = { @@ -3152,6 +3193,14 @@ if (skinnydebug) ast_verbose("Received Stimulus: Redial(%d)\n", instance); + if (ast_strlen_zero(l->lastnumberdialed)) { + ast_log(LOG_WARNING, "Attempted redial, but no previously dialed number found.\n"); + l->hookstate = SKINNY_ONHOOK; + transmit_speaker_mode(s, SKINNY_SPEAKEROFF); + transmit_callstate(s, l->instance, SKINNY_ONHOOK, instance); + break; + } + c = skinny_new(l, AST_STATE_DOWN); if (!c) { ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name); @@ -3166,11 +3215,8 @@ ast_verbose("Attempting to Clear display on Skinny %s@%s\n", l->name, d->name); transmit_displaymessage(s, NULL); /* clear display */ transmit_tone(s, SKINNY_DIALTONE); + transmit_selectsoftkeys(s, l->instance, sub->callid, KEYDEF_RINGOUT); - if (ast_strlen_zero(l->lastnumberdialed)) { - ast_log(LOG_WARNING, "Attempted redial, but no previously dialed number found.\n"); - return 0; - } if (!ast_ignore_pattern(c->context, l->lastnumberdialed)) { transmit_tone(s, SKINNY_SILENCE); } @@ -3209,6 +3255,7 @@ ast_verbose("Attempting to Clear display on Skinny %s@%s\n", l->name, d->name); transmit_displaymessage(s, NULL); /* clear display */ transmit_tone(s, SKINNY_DIALTONE); + transmit_selectsoftkeys(s, l->instance, sub->callid, KEYDEF_RINGOUT); if (!ast_ignore_pattern(c->context, sd->exten)) { transmit_tone(s, SKINNY_SILENCE); @@ -3279,6 +3326,7 @@ transmit_displaymessage(s, NULL); /* clear display */ transmit_tone(s, SKINNY_DIALTONE); + transmit_selectsoftkeys(s, l->instance, sub->callid, KEYDEF_RINGOUT); if (!ast_ignore_pattern(c->context, vmexten)) { transmit_tone(s, SKINNY_SILENCE); @@ -3978,6 +4077,14 @@ if (skinnydebug) ast_verbose("Received Softkey Event: Redial(%d)\n", instance); + if (ast_strlen_zero(l->lastnumberdialed)) { + ast_log(LOG_WARNING, "Attempted redial, but no previously dialed number found.\n"); + l->hookstate = SKINNY_ONHOOK; + transmit_speaker_mode(s, SKINNY_SPEAKEROFF); + transmit_callstate(s, l->instance, SKINNY_ONHOOK, instance); + break; + } + if (!sub || !sub->owner) { c = skinny_new(l, AST_STATE_DOWN); } else { @@ -3997,11 +4104,8 @@ ast_verbose("Attempting to Clear display on Skinny %s@%s\n", l->name, d->name); transmit_displaymessage(s, NULL); /* clear display */ transmit_tone(s, SKINNY_DIALTONE); + transmit_selectsoftkeys(s, l->instance, sub->callid, KEYDEF_RINGOUT); - if (ast_strlen_zero(l->lastnumberdialed)) { - ast_log(LOG_WARNING, "Attempted redial, but no previously dialed number found.\n"); - break; - } if (!ast_ignore_pattern(c->context, l->lastnumberdialed)) { transmit_tone(s, SKINNY_SILENCE); }