--- channel.c.orig 2006-04-18 17:43:24.307687164 -0500 +++ channel.c 2006-04-18 17:49:22.854347443 -0500 @@ -1810,6 +1810,15 @@ return 0; /* Time is up */ } +static void send_dtmf_event(const char *channel_name, const char digit) +{ + manager_event(EVENT_FLAG_CALL, "DTMF", + "Channel: %s\r\n" + "Digit: %c\r\n", + channel_name, digit + ); +} + static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) { struct ast_frame *f = NULL; /* the return value */ @@ -1952,6 +1961,7 @@ break; case AST_FRAME_DTMF: ast_log(LOG_DTMF, "DTMF '%c' received on %s\n", f->subclass, chan->name); + send_dtmf_event(chan->name, f->subclass); if (ast_test_flag(chan, AST_FLAG_DEFER_DTMF)) { if (strlen(chan->dtmfq) < sizeof(chan->dtmfq) - 2) chan->dtmfq[strlen(chan->dtmfq)] = f->subclass; @@ -1962,9 +1972,11 @@ break; case AST_FRAME_DTMF_BEGIN: ast_log(LOG_DTMF, "DTMF begin '%c' received on %s\n", f->subclass, chan->name); + send_dtmf_event(chan->name, f->subclass); break; case AST_FRAME_DTMF_END: ast_log(LOG_DTMF, "DTMF end '%c' received on %s\n", f->subclass, chan->name); + send_dtmf_event(chan->name, f->subclass); break; case AST_FRAME_VOICE: if (dropaudio) {