diff -urN asterisk-1.6.2.7-rc2_orig/main/dsp.c asterisk-1.6.2.7-rc2/main/dsp.c --- asterisk-1.6.2.7-rc2_orig/main/dsp.c 2010-04-23 13:49:35.000000000 +0200 +++ asterisk-1.6.2.7-rc2/main/dsp.c 2010-04-23 16:43:26.000000000 +0200 @@ -392,6 +392,7 @@ int digitmode; int faxmode; int dtmf_began; + struct timeval dtmf_tv; int display_inband_dtmf_warning; float genergy; int mute_fragments; @@ -1394,6 +1395,7 @@ if (dsp->digit_state.current_digits) { int event = 0; char event_digit = 0; + long event_len = 0; if (!dsp->dtmf_began) { /* We have not reported DTMF_BEGIN for anything yet */ @@ -1401,6 +1403,7 @@ if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { event = AST_FRAME_DTMF_BEGIN; event_digit = dsp->digit_state.digits[0]; + dsp->dtmf_tv = ast_tvnow(); } dsp->dtmf_began = 1; @@ -1409,6 +1412,7 @@ if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { event = AST_FRAME_DTMF_END; event_digit = dsp->digit_state.digits[0]; + if (dsp->dtmf_began) event_len = ast_tvdiff_ms(ast_tvnow(), dsp->dtmf_tv); } memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits); dsp->digit_state.current_digits--; @@ -1426,6 +1430,7 @@ memset(&dsp->f, 0, sizeof(dsp->f)); dsp->f.frametype = event; dsp->f.subclass = event_digit; + dsp->f.len = event_len; outf = &dsp->f; goto done; }