Index: apps/app_dial.c =================================================================== --- apps/app_dial.c (revision 400823) +++ apps/app_dial.c (working copy) @@ -1015,6 +1015,17 @@ } } +static void generate_ringtone(struct ast_channel *chan) { + struct ast_tone_zone_sound *ts; + ts = ast_get_indication_tone(ast_channel_zone(chan), "ring"); + + if (ts) { + ast_playtones_start(chan, 0, ts->data, 1); + ast_verb(3, "generating ringing on channel %s\n", ast_channel_name(chan)); + ts = ast_tone_zone_sound_unref(ts); + } +} + /* argument used for some functions. */ struct privacy_args { int sentringing; @@ -1353,6 +1364,11 @@ } if (!(pa->sentringing) && !ast_test_flag64(outgoing, OPT_MUSICBACK) && ast_strlen_zero(opt_args[OPT_ARG_RINGBACK])) { ast_indicate(in, AST_CONTROL_RINGING); + + if (single || (!single && !pa->sentringing)) { + generate_ringtone(in); + } + pa->sentringing++; } } @@ -1366,6 +1382,7 @@ } if (!ast_test_flag64(outgoing, OPT_RINGBACK)) { if (single || (!single && !pa->sentringing)) { + ast_verb(3, "indicating progress from %s\n", ast_channel_name(c)); ast_indicate(in, AST_CONTROL_PROGRESS); } } @@ -1490,9 +1507,12 @@ } /* Fall through */ case AST_FRAME_TEXT: - if (single && ast_write(in, f)) { - ast_log(LOG_WARNING, "Unable to write frametype: %d\n", - f->frametype); + { + int currently_single = (1 == numlines - (num.busy + num.congestion + num.nochan)); + if (currently_single && ast_write(in, f)) { + ast_log(LOG_WARNING, "Unable to write frametype: %d\n", + f->frametype); + } } break; case AST_FRAME_HTML: