--- app_meetme.c.orig 2007-10-05 09:50:06.000000000 -0300 +++ app_meetme.c 2007-10-05 10:38:46.000000000 -0300 @@ -79,7 +79,8 @@ enum { ADMINFLAG_MUTED = (1 << 1), /*!< User is muted */ ADMINFLAG_SELFMUTED = (1 << 2), /*!< User muted self */ - ADMINFLAG_KICKME = (1 << 3) /*!< User has been kicked */ + ADMINFLAG_KICKME = (1 << 3), /*!< User has been kicked */ + ADMINFLAG_T_REQUEST = (1 << 4) /*!jointime) % 3600) / 60; sec = (now - user->jointime) % 60; if ( !concise ) - ast_cli(a->fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s %02d:%02d:%02d\n", + ast_cli(a->fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s %s %02d:%02d:%02d\n", user->user_no, S_OR(user->chan->cid.cid_num, ""), S_OR(user->chan->cid.cid_name, ""), @@ -1042,9 +1043,10 @@ user->userflags & CONFFLAG_ADMIN ? "(Admin)" : "", user->userflags & CONFFLAG_MONITOR ? "(Listen only)" : "", user->adminflags & ADMINFLAG_MUTED ? "(Admin Muted)" : user->adminflags & ADMINFLAG_SELFMUTED ? "(Muted)" : "", + user->adminflags & ADMINFLAG_T_REQUEST ? "(Request to Talk)" : "", istalking(user->talking), hr, min, sec); else - ast_cli(a->fd, "%d!%s!%s!%s!%s!%s!%s!%d!%02d:%02d:%02d\n", + ast_cli(a->fd, "%d!%s!%s!%s!%s!%s!%s!%s!%d!%02d:%02d:%02d\n", user->user_no, S_OR(user->chan->cid.cid_num, ""), S_OR(user->chan->cid.cid_name, ""), @@ -1052,6 +1054,7 @@ user->userflags & CONFFLAG_ADMIN ? "1" : "", user->userflags & CONFFLAG_MONITOR ? "1" : "", user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED) ? "1" : "", + user->adminflags & ADMINFLAG_T_REQUEST ? "1" : "", user->talking, hr, min, sec); } @@ -1429,6 +1432,7 @@ int ret = -1; int x; int menu_active = 0; + int talkreq_manager = 0; int using_pseudo = 0; int duration=20; int hr, min, sec; @@ -1928,7 +1932,31 @@ "Status: off\r\n", chan->name, chan->uniqueid, conf->confno, user->user_no); } + + if ((user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED)) && (user->adminflags & ADMINFLAG_TALKREQUEST) && !(talkreq_manager)) { + talkreq_manager = 1; + + manager_event(EVENT_FLAG_CALL, "MeetmeTalkRequest", + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "Meetme: %s\r\n" + "Usernum: %i\r\n" + "Status: on\r\n", + chan->name, chan->uniqueid, conf->confno, user->user_no); + } + + if (!(user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED)) && !(user->adminflags & ADMINFLAG_TALKREQUEST) && (talkreq_manager)) { + talkreq_manager = 0; + manager_event(EVENT_FLAG_CALL, "MeetmeTalkRequest", + "Channel: %s\r\n" + "Uniqueid: %s\r\n" + "Meetme: %s\r\n" + "Usernum: %i\r\n" + "Status: off\r\n", + chan->name, chan->uniqueid, conf->confno, user->user_no); + } + /* If I have been kicked, exit the conference */ if (user->adminflags & ADMINFLAG_KICKME) { //You have been kicked. @@ -2164,6 +2192,15 @@ ast_waitstream(chan, ""); } break; + case '2': + menu_active = 0; + if (user->adminflags & (ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED)) + user->adminflags |= ADMINFLAG_T_REQUEST; + + if (user->adminflags & ADMINFLAG_T_REQUEST) + if (!ast_streamfile(chan, "beep", chan->language)) + ast_waitstream(chan, ""); + break; case '4': tweak_listen_volume(user, VOL_DOWN); break; @@ -2891,13 +2928,13 @@ break; case 109: /* m: Unmute */ if (user) { - user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED); + user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED | ADMINFLAG_T_REQUEST); } else ast_log(LOG_NOTICE, "Specified User not found!\n"); break; case 110: /* n: Unmute all users */ AST_LIST_TRAVERSE(&cnf->userlist, user, list) - user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED); + user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED | ADMINFLAG_T_REQUEST); break; case 107: /* k: Kick user */ if (user) @@ -3079,7 +3116,7 @@ if (mute) user->adminflags |= ADMINFLAG_MUTED; /* request user muting */ else - user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED); /* request user unmuting */ + user->adminflags &= ~(ADMINFLAG_MUTED | ADMINFLAG_SELFMUTED | ADMINFLAG_T_REQUEST); /* request user unmuting */ AST_LIST_UNLOCK(&confs);