From 9270819c8d40815c4d0301535da797f27bce57c8 Mon Sep 17 00:00:00 2001 From: mattf Date: Mon, 13 Aug 2007 18:48:23 +0000 Subject: [PATCH] Added instructions and patch for new meetme DTMF passthru function backported to Asterisk 1.2.23 from Asterisk 1.4 tree. git-svn-id: svn://192.168.202.10@667 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt | 15 +++- .../extras/meetme_DTMF_passthru-1.2.23.patch | 79 +++++++++++++++++++ 2 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 agc_2-X/trunk/extras/meetme_DTMF_passthru-1.2.23.patch diff --git a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt index 0f3549de..d11a44a2 100644 --- a/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt +++ b/agc_2-X/trunk/docs/REQUIRED_APPS_INSTALL.txt @@ -330,6 +330,13 @@ vi Makefile wget http://www.eflo.net/files/amd2.conf mkdir /etc/asterisk mv amd2.conf /etc/asterisk/amd.conf +wget http://www.eflo.net/files/meetme_DTMF_passthru-1.2.23.patch +patch -p1 < ./meetme_DTMF_passthru-1.2.23.patch + + + - File to patch: app_meetme.c + + wget http://www.eflo.net/files/meetme_volume_control_1.2.16.patch patch -p1 < ./meetme_volume_control_1.2.16.patch @@ -362,11 +369,11 @@ make install mkdir /usr/src/asterisk-1.4 cd /usr/src/asterisk-1.4 -wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.4.9.tar.gz +wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.4.10.tar.gz wget http://ftp.digium.com/pub/zaptel/releases/zaptel-1.4.4.tar.gz wget http://ftp.digium.com/pub/libpri/releases/libpri-1.4.1.tar.gz -gunzip asterisk-1.4.9.tar.gz -tar xvf asterisk-1.4.9.tar +gunzip asterisk-1.4.10.tar.gz +tar xvf asterisk-1.4.10.tar gunzip zaptel-1.4.4.tar.gz tar xvf zaptel-1.4.4.tar gunzip libpri-1.4.1.tar.gz @@ -379,7 +386,7 @@ cd ../libpri-1.4.1 make clean make make install -cd ../asterisk-1.4.9 +cd ../asterisk-1.4.10 wget http://www.eflo.net/files/enter.h wget http://www.eflo.net/files/leave.h mv -f enter.h apps/enter.h diff --git a/agc_2-X/trunk/extras/meetme_DTMF_passthru-1.2.23.patch b/agc_2-X/trunk/extras/meetme_DTMF_passthru-1.2.23.patch new file mode 100644 index 00000000..e44ef5df --- /dev/null +++ b/agc_2-X/trunk/extras/meetme_DTMF_passthru-1.2.23.patch @@ -0,0 +1,79 @@ +--- app_meetme-orig.c 2007-08-13 12:34:41.000000000 -0400 ++++ app_meetme.c 2007-08-13 13:18:21.000000000 -0400 +@@ -85,6 +85,7 @@ + " 'D' -- dynamically add conference, prompting for a PIN\n" + " 'e' -- select an empty conference\n" + " 'E' -- select an empty pinless conference\n" ++" 'F' -- Pass DTMF through the conference.\n" + " 'i' -- announce user join/leave\n" + " 'm' -- set monitor only mode (Listen only, no talking)\n" + " 'M' -- enable music on hold when the conference has a single caller\n" +@@ -229,6 +230,7 @@ + #define CONFFLAG_EMPTY (1 << 19) + #define CONFFLAG_EMPTYNOPIN (1 << 20) + #define CONFFLAG_ALWAYSPROMPT (1 << 21) ++#define CONFFLAG_PASS_DTMF (1 << 22) + + enum { + OPT_ARG_WAITMARKED = 0, +@@ -257,6 +259,7 @@ + AST_APP_OPTION('e', CONFFLAG_EMPTY ), + AST_APP_OPTION('E', CONFFLAG_EMPTYNOPIN ), + AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ), ++ AST_APP_OPTION('F', CONFFLAG_PASS_DTMF ), + }); + + static char *istalking(int x) +@@ -797,6 +800,18 @@ + return 0; + } + ++static void conf_queue_dtmf(const struct ast_conference *conf, ++ const struct ast_conf_user *sender, struct ast_frame *f) ++{ ++ struct ast_conf_user *user; ++ ++ AST_LIST_TRAVERSE(&conf->userlist, user, list) { ++ if (user == sender) ++ continue; ++ if (ast_write(user->chan, f) < 0) ++ ast_log(LOG_WARNING, "Error writing frame to channel %s\n", user->chan->name); ++ } ++} + /* Decrement reference counts, as incremented by find_conf() */ + static int dispose_conf(struct ast_conference *conf) + { +@@ -1363,6 +1378,9 @@ + } else if ((f->frametype == AST_FRAME_DTMF) && (confflags & CONFFLAG_EXIT_CONTEXT)) { + char tmp[2]; + ++ if (confflags & CONFFLAG_PASS_DTMF) ++ conf_queue_dtmf(conf, user, f); ++ + tmp[0] = f->subclass; + tmp[1] = '\0'; + if (!ast_goto_if_exists(chan, exitcontext, tmp, 1)) { +@@ -1372,10 +1390,14 @@ + } else if (option_debug > 1) + ast_log(LOG_DEBUG, "Exit by single digit did not work in meetme. Extension %s does not exist in context %s\n", tmp, exitcontext); + } else if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#') && (confflags & CONFFLAG_POUNDEXIT)) { ++ if (confflags & CONFFLAG_PASS_DTMF) ++ conf_queue_dtmf(conf, user, f); + ret = 0; + ast_frfree(f); + break; + } else if (((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*') && (confflags & CONFFLAG_STARMENU)) || ((f->frametype == AST_FRAME_DTMF) && menu_active)) { ++ if (confflags & CONFFLAG_PASS_DTMF) ++ conf_queue_dtmf(conf, user, f); + if (ioctl(fd, ZT_SETCONF, &ztc_empty)) { + ast_log(LOG_WARNING, "Error setting conference\n"); + close(fd); +@@ -1542,6 +1564,8 @@ + } + + conf_flush(fd, chan); ++ } else if ((f->frametype == AST_FRAME_DTMF) && confflags & CONFFLAG_PASS_DTMF) { ++ conf_queue_dtmf(conf, user, f); + } else if (option_debug) { + ast_log(LOG_DEBUG, + "Got unrecognized frame on channel %s, f->frametype=%d,f->subclass=%d\n",