aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-11-08 21:32:51 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-11-08 21:32:51 +0000
commit28133cd31b175ba7fd6524accef381b86daa2148 (patch)
treea988ba1b06e4f25d015e3fd413033d339770cfd0 /apps
parentb3f0f77145e134060970e6140436ab556478b437 (diff)
whitepace cleanup and various minor fixes
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7032 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rwxr-xr-xapps/app_meetme.c483
1 files changed, 246 insertions, 237 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index e9f52a707..55313c353 100755
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -128,22 +128,22 @@ LOCAL_USER_DECL;
static struct ast_conference {
char confno[AST_MAX_EXTENSION]; /* Conference */
- struct ast_channel *chan; /* Announcements channel */
- int fd; /* Announcements fd */
- int zapconf; /* Zaptel Conf # */
- int users; /* Number of active users */
- int markedusers; /* Number of marked users */
- struct ast_conf_user *firstuser; /* Pointer to the first user struct */
- struct ast_conf_user *lastuser; /* Pointer to the last user struct */
- time_t start; /* Start time (s) */
- int recording; /* recording status */
- int isdynamic; /* Created on the fly? */
- int locked; /* Is the conference locked? */
- pthread_t recordthread; /* thread for recording */
- pthread_attr_t attr; /* thread attribute */
- char *recordingfilename; /* Filename to record the Conference into */
- char *recordingformat; /* Format to record the Conference in */
- char pin[AST_MAX_EXTENSION]; /* If protected by a PIN */
+ struct ast_channel *chan; /* Announcements channel */
+ int fd; /* Announcements fd */
+ int zapconf; /* Zaptel Conf # */
+ int users; /* Number of active users */
+ int markedusers; /* Number of marked users */
+ struct ast_conf_user *firstuser; /* Pointer to the first user struct */
+ struct ast_conf_user *lastuser; /* Pointer to the last user struct */
+ time_t start; /* Start time (s) */
+ int recording; /* recording status */
+ int isdynamic; /* Created on the fly? */
+ int locked; /* Is the conference locked? */
+ pthread_t recordthread; /* thread for recording */
+ pthread_attr_t attr; /* thread attribute */
+ char *recordingfilename; /* Filename to record the Conference into */
+ char *recordingformat; /* Format to record the Conference in */
+ char pin[AST_MAX_EXTENSION]; /* If protected by a PIN */
char pinadmin[AST_MAX_EXTENSION]; /* If protected by a admin PIN */
struct ast_conference *next;
} *confs;
@@ -197,28 +197,28 @@ static void *recordthread(void *args);
#define CONF_SIZE 320
-#define CONFFLAG_ADMIN (1 << 1) /* If set the user has admin access on the conference */
-#define CONFFLAG_MONITOR (1 << 2) /* If set the user can only receive audio from the conference */
-#define CONFFLAG_POUNDEXIT (1 << 3) /* If set asterisk will exit conference when '#' is pressed */
-#define CONFFLAG_STARMENU (1 << 4) /* If set asterisk will provide a menu to the user what '*' is pressed */
-#define CONFFLAG_TALKER (1 << 5) /* If set the use can only send audio to the conference */
-#define CONFFLAG_QUIET (1 << 6) /* If set there will be no enter or leave sounds */
-#define CONFFLAG_VIDEO (1 << 7) /* Set to enable video mode */
-#define CONFFLAG_AGI (1 << 8) /* Set to run AGI Script in Background */
-#define CONFFLAG_MOH (1 << 9) /* Set to have music on hold when user is alone in conference */
-#define CONFFLAG_MARKEDEXIT (1 << 10) /* If set the MeetMe will return if all marked with this flag left */
-#define CONFFLAG_WAITMARKED (1 << 11) /* If set, the MeetMe will wait until a marked user enters */
-#define CONFFLAG_EXIT_CONTEXT (1 << 12) /* If set, the MeetMe will exit to the specified context */
-#define CONFFLAG_MARKEDUSER (1 << 13) /* If set, the user will be marked */
-#define CONFFLAG_INTROUSER (1 << 14) /* If set, user will be ask record name on entry of conference */
-#define CONFFLAG_RECORDCONF (1<< 15) /* If set, the MeetMe will be recorded */
-#define CONFFLAG_MONITORTALKER (1 << 16) /* If set, the user will be monitored if the user is talking or not */
+#define CONFFLAG_ADMIN (1 << 1) /* If set the user has admin access on the conference */
+#define CONFFLAG_MONITOR (1 << 2) /* If set the user can only receive audio from the conference */
+#define CONFFLAG_POUNDEXIT (1 << 3) /* If set asterisk will exit conference when '#' is pressed */
+#define CONFFLAG_STARMENU (1 << 4) /* If set asterisk will provide a menu to the user when '*' is pressed */
+#define CONFFLAG_TALKER (1 << 5) /* If set the use can only send audio to the conference */
+#define CONFFLAG_QUIET (1 << 6) /* If set there will be no enter or leave sounds */
+#define CONFFLAG_VIDEO (1 << 7) /* Set to enable video mode */
+#define CONFFLAG_AGI (1 << 8) /* Set to run AGI Script in Background */
+#define CONFFLAG_MOH (1 << 9) /* Set to have music on hold when user is alone in conference */
+#define CONFFLAG_MARKEDEXIT (1 << 10) /* If set the MeetMe will return if all marked with this flag left */
+#define CONFFLAG_WAITMARKED (1 << 11) /* If set, the MeetMe will wait until a marked user enters */
+#define CONFFLAG_EXIT_CONTEXT (1 << 12) /* If set, the MeetMe will exit to the specified context */
+#define CONFFLAG_MARKEDUSER (1 << 13) /* If set, the user will be marked */
+#define CONFFLAG_INTROUSER (1 << 14) /* If set, user will be ask record name on entry of conference */
+#define CONFFLAG_RECORDCONF (1<< 15) /* If set, the MeetMe will be recorded */
+#define CONFFLAG_MONITORTALKER (1 << 16) /* If set, the user will be monitored if the user is talking or not */
#define CONFFLAG_DYNAMIC (1 << 17)
#define CONFFLAG_DYNAMICPIN (1 << 18)
#define CONFFLAG_EMPTY (1 << 19)
#define CONFFLAG_EMPTYNOPIN (1 << 20)
#define CONFFLAG_ALWAYSPROMPT (1 << 21)
-#define CONFFLAG_ANNOUNCEUSERCOUNT (1 << 22) /* If set, when user joins the conference, they will be told the number of users that are already in */
+#define CONFFLAG_ANNOUNCEUSERCOUNT (1 << 22) /* If set, when user joins the conference, they will be told the number of users that are already in */
AST_APP_OPTIONS(meetme_opts, {
@@ -259,7 +259,8 @@ static int careful_write(int fd, unsigned char *data, int len)
{
int res;
int x;
- while(len) {
+
+ while (len) {
x = ZT_IOMUX_WRITE | ZT_IOMUX_SIGEVENT;
res = ioctl(fd, ZT_IOMUX, &x);
if (res >= 0)
@@ -274,6 +275,7 @@ static int careful_write(int fd, unsigned char *data, int len)
len -= res;
data += res;
}
+
return 0;
}
@@ -305,6 +307,7 @@ static int set_talk_volume(struct ast_conf_user *user, int volume)
if successful, don't adjust in the frame reading routine
*/
gain_adjust = gain_map[volume + 5];
+
return ast_channel_setoption(user->chan, AST_OPTION_RXGAIN, &gain_adjust, sizeof(gain_adjust), 0);
}
@@ -316,6 +319,7 @@ static int set_listen_volume(struct ast_conf_user *user, int volume)
if successful, don't adjust in the frame reading routine
*/
gain_adjust = gain_map[volume + 5];
+
return ast_channel_setoption(user->chan, AST_OPTION_TXGAIN, &gain_adjust, sizeof(gain_adjust), 0);
}
@@ -390,10 +394,13 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int
{
unsigned char *data;
int len;
- int res=-1;
+ int res = -1;
+
if (!chan->_softhangup)
res = ast_autoservice_start(chan);
+
ast_mutex_lock(&conflock);
+
switch(sound) {
case ENTER:
data = enter;
@@ -409,7 +416,9 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int
}
if (data)
careful_write(conf->fd, data, len);
+
ast_mutex_unlock(&conflock);
+
if (!res)
ast_autoservice_stop(chan);
}
@@ -418,18 +427,18 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
{
struct ast_conference *cnf;
struct zt_confinfo ztc;
+
ast_mutex_lock(&conflock);
- cnf = confs;
- while(cnf) {
+
+ for (cnf = confs; cnf; cnf = cnf->next) {
if (!strcmp(confno, cnf->confno))
break;
- cnf = cnf->next;
}
+
if (!cnf && (make || dynamic)) {
- cnf = malloc(sizeof(struct ast_conference));
+ /* Make a new one */
+ cnf = calloc(1, sizeof(*cnf));
if (cnf) {
- /* Make a new one */
- memset(cnf, 0, sizeof(struct ast_conference));
ast_copy_string(cnf->confno, confno, sizeof(cnf->confno));
ast_copy_string(cnf->pin, pin, sizeof(cnf->pin));
ast_copy_string(cnf->pinadmin, pinadmin, sizeof(cnf->pinadmin));
@@ -476,7 +485,7 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
} else
ast_log(LOG_WARNING, "Out of memory\n");
}
-cnfout:
+ cnfout:
ast_mutex_unlock(&conflock);
return cnf;
}
@@ -484,6 +493,7 @@ cnfout:
static int confs_show(int fd, int argc, char **argv)
{
ast_cli(fd, "Deprecated! Please use 'meetme' instead.\n");
+
return RESULT_SUCCESS;
}
@@ -555,7 +565,7 @@ static int conf_cmd(int fd, int argc, char **argv) {
if (strcmp(argv[1], "mute") == 0) {
/* Mute */
if (strcmp(argv[3], "all") == 0) {
- strncat(cmdline, "|N", sizeof(cmdline) - strlen(cmdline) - 1);
+ strncat(cmdline, "|N", sizeof(cmdline) - strlen(cmdline) - 1);
} else {
strncat(cmdline, "|M|", sizeof(cmdline) - strlen(cmdline) - 1);
strncat(cmdline, argv[3], sizeof(cmdline) - strlen(cmdline) - 1);
@@ -563,7 +573,7 @@ static int conf_cmd(int fd, int argc, char **argv) {
} else {
/* Unmute */
if (strcmp(argv[3], "all") == 0) {
- strncat(cmdline, "|n", sizeof(cmdline) - strlen(cmdline) - 1);
+ strncat(cmdline, "|n", sizeof(cmdline) - strlen(cmdline) - 1);
} else {
strncat(cmdline, "|m|", sizeof(cmdline) - strlen(cmdline) - 1);
strncat(cmdline, argv[3], sizeof(cmdline) - strlen(cmdline) - 1);
@@ -599,22 +609,29 @@ static int conf_cmd(int fd, int argc, char **argv) {
}
}
/* Show all the users */
- user = cnf->firstuser;
- while(user) {
- ast_cli(fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s\n", user->user_no, user->chan->cid.cid_num ? user->chan->cid.cid_num : "<unknown>", user->chan->cid.cid_name ? user->chan->cid.cid_name : "<no name>", user->chan->name, (user->userflags & CONFFLAG_ADMIN) ? "(Admin)" : "", (user->userflags & CONFFLAG_MONITOR) ? "(Listen only)" : "", (user->adminflags & ADMINFLAG_MUTED) ? "(Admn Muted)" : "", istalking(user->talking));
- user = user->nextuser;
- }
+ for (user = cnf->firstuser; user; user = user->nextuser)
+ ast_cli(fd, "User #: %-2.2d %12.12s %-20.20s Channel: %s %s %s %s %s\n",
+ user->user_no,
+ user->chan->cid.cid_num ? user->chan->cid.cid_num : "<unknown>",
+ user->chan->cid.cid_name ? user->chan->cid.cid_name : "<no name>",
+ user->chan->name,
+ user->userflags & CONFFLAG_ADMIN ? "(Admin)" : "",
+ user->userflags & CONFFLAG_MONITOR ? "(Listen only)" : "",
+ user->adminflags & ADMINFLAG_MUTED ? "(Admn Muted)" : "",
+ istalking(user->talking));
ast_cli(fd,"%d users in that conference.\n",cnf->users);
+
return RESULT_SUCCESS;
} else
return RESULT_SHOWUSAGE;
ast_log(LOG_DEBUG, "Cmdline: %s\n", cmdline);
admin_exec(NULL, cmdline);
+
return 0;
}
static char *complete_confcmd(char *line, char *word, int pos, int state) {
- #define CONF_COMMANDS 6
+#define CONF_COMMANDS 6
int which = 0, x = 0;
struct ast_conference *cnf = NULL;
struct ast_conf_user *usr = NULL;
@@ -653,7 +670,6 @@ static char *complete_confcmd(char *line, char *word, int pos, int state) {
}
which++;
ast_mutex_lock(&conflock);
- cnf = confs;
/* TODO: Find the conf number from the cmdline (ignore spaces) <- test this and make it fail-safe! */
myline = ast_strdupa(line);
@@ -662,28 +678,26 @@ static char *complete_confcmd(char *line, char *word, int pos, int state) {
;
}
- while(cnf) {
- if (strcmp(confno, cnf->confno) == 0) {
- break;
- }
- cnf = cnf->next;
+ for (cnf = confs; cnf; cnf = cnf->next) {
+ if (!strcmp(confno, cnf->confno))
+ break;
}
+
if (cnf) {
/* Search for the user */
- usr = cnf->firstuser;
- while(usr) {
+ for (usr = cnf->firstuser; usr; usr = usr->nextuser) {
snprintf(usrno, sizeof(usrno), "%d", usr->user_no);
if (!strncasecmp(word, usrno, strlen(word))) {
if (++which > state)
break;
}
- usr = usr->nextuser;
}
}
ast_mutex_unlock(&conflock);
return usr ? strdup(usrno) : NULL;
}
}
+
return NULL;
}
@@ -698,6 +712,7 @@ static struct ast_cli_entry cli_conf = {
static void conf_flush(int fd)
{
int x;
+
x = ZT_FLUSH_ALL;
if (ioctl(fd, ZT_FLUSH, &x))
ast_log(LOG_WARNING, "Error flushing channel\n");
@@ -709,7 +724,7 @@ static int conf_free(struct ast_conference *conf)
{
struct ast_conference *prev = NULL, *cur = confs;
- while(cur) {
+ while (cur) {
if (cur == conf) {
if (prev)
prev->next = conf->next;
@@ -747,7 +762,7 @@ static int conf_free(struct ast_conference *conf)
static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags)
{
- struct ast_conf_user *user = malloc(sizeof(struct ast_conf_user));
+ struct ast_conf_user *user = calloc(1, sizeof(*user));
struct ast_conf_user *usr = NULL;
int fd;
struct zt_confinfo ztc, ztc_empty;
@@ -763,7 +778,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
int origfd;
int musiconhold = 0;
int firstpass = 0;
- int origquiet;
int lastmarked = 0;
int currentmarked = 0;
int ret = -1;
@@ -772,7 +786,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
int using_pseudo = 0;
int duration=20;
struct ast_dsp *dsp=NULL;
-
struct ast_app *app;
char *agifile;
char *agifiledefault = "conf-background.agi";
@@ -780,36 +793,33 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
char exitcontext[AST_MAX_CONTEXT] = "";
char recordingtmp[AST_MAX_EXTENSION] = "";
int dtmf;
-
ZT_BUFFERINFO bi;
char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
char *buf = __buf + AST_FRIENDLY_OFFSET;
if (!user) {
ast_log(LOG_ERROR, "Out of memory\n");
- return(ret);
+ return ret;
}
- memset(user, 0, sizeof(struct ast_conf_user));
if (confflags & CONFFLAG_RECORDCONF && conf->recording !=MEETME_RECORD_ACTIVE) {
- conf->recordingfilename = pbx_builtin_getvar_helper(chan,"MEETME_RECORDINGFILE");
+ conf->recordingfilename = pbx_builtin_getvar_helper(chan, "MEETME_RECORDINGFILE");
if (!conf->recordingfilename) {
- snprintf(recordingtmp,sizeof(recordingtmp),"meetme-conf-rec-%s-%s",conf->confno,chan->uniqueid);
+ snprintf(recordingtmp, sizeof(recordingtmp), "meetme-conf-rec-%s-%s", conf->confno, chan->uniqueid);
conf->recordingfilename = ast_strdupa(recordingtmp);
}
conf->recordingformat = pbx_builtin_getvar_helper(chan, "MEETME_RECORDINGFORMAT");
if (!conf->recordingformat) {
- snprintf(recordingtmp,sizeof(recordingtmp), "wav");
+ snprintf(recordingtmp, sizeof(recordingtmp), "wav");
conf->recordingformat = ast_strdupa(recordingtmp);
}
pthread_attr_init(&conf->attr);
pthread_attr_setdetachstate(&conf->attr, PTHREAD_CREATE_DETACHED);
- ast_verbose(VERBOSE_PREFIX_4 "Starting recording of MeetMe Conference %s into file %s.%s.\n", conf->confno, conf->recordingfilename, conf->recordingformat);
+ ast_verbose(VERBOSE_PREFIX_4 "Starting recording of MeetMe Conference %s into file %s.%s.\n",
+ conf->confno, conf->recordingfilename, conf->recordingformat);
ast_pthread_create(&conf->recordthread, &conf->attr, recordthread, conf);
}
- user->user_no = 0; /* User number 0 means starting up user! (dead - not in the list!) */
-
time(&user->jointime);
if (conf->locked) {
@@ -823,19 +833,16 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
conf->markedusers++;
ast_mutex_lock(&conflock);
- if (conf->firstuser == NULL) {
+ if (!conf->firstuser) {
/* Fill the first new User struct */
user->user_no = 1;
- user->nextuser = NULL;
- user->prevuser = NULL;
conf->firstuser = user;
conf->lastuser = user;
} else {
/* Fill the new user struct */
user->user_no = conf->lastuser->user_no + 1;
user->prevuser = conf->lastuser;
- user->nextuser = NULL;
- if (conf->lastuser->nextuser != NULL) {
+ if (conf->lastuser->nextuser) {
ast_log(LOG_WARNING, "Error in User Management!\n");
ast_mutex_unlock(&conflock);
goto outrun;
@@ -844,12 +851,14 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
conf->lastuser = user;
}
}
+
user->chan = chan;
user->userflags = confflags;
user->adminflags = 0;
user->talking = -1;
+ conf->users++;
ast_mutex_unlock(&conflock);
- origquiet = confflags & CONFFLAG_QUIET;
+
if (confflags & CONFFLAG_EXIT_CONTEXT) {
if ((agifile = pbx_builtin_getvar_helper(chan, "MEETME_EXIT_CONTEXT")))
ast_copy_string(exitcontext, agifile, sizeof(exitcontext));
@@ -860,12 +869,12 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
}
if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_INTROUSER)) {
- snprintf(user->namerecloc,sizeof(user->namerecloc),"%s/meetme/meetme-username-%s-%d",ast_config_AST_SPOOL_DIR,conf->confno,user->user_no);
- ast_record_review(chan,"vm-rec-name",user->namerecloc, 10,"sln", &duration, NULL);
+ snprintf(user->namerecloc, sizeof(user->namerecloc),
+ "%s/meetme/meetme-username-%s-%d", ast_config_AST_SPOOL_DIR,
+ conf->confno, user->user_no);
+ ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
}
- conf->users++;
-
if (!(confflags & CONFFLAG_QUIET)) {
if (conf->users == 1 && !(confflags & CONFFLAG_WAITMARKED))
if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
@@ -876,7 +885,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
}
if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_ANNOUNCEUSERCOUNT) && conf->users > 1) {
- int keepplaying=1;
+ int keepplaying = 1;
if (conf->users == 2) {
if (!ast_streamfile(chan,"conf-onlyone",chan->language)) {
@@ -911,21 +920,21 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
}
}
- /* Set it into linear mode (write) */
if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_WARNING, "Unable to set '%s' to write linear mode\n", chan->name);
goto outrun;
}
- /* Set it into linear mode (read) */
if (ast_set_read_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_WARNING, "Unable to set '%s' to read linear mode\n", chan->name);
goto outrun;
}
+
ast_indicate(chan, -1);
retryzap = strcasecmp(chan->type, "Zap");
user->zapchannel = !retryzap;
-zapretry:
+
+ zapretry:
origfd = chan->fds[0];
if (retryzap) {
fd = open("/dev/zap/pseudo", O_RDWR);
@@ -990,7 +999,9 @@ zapretry:
/* Add us to the conference */
ztc.chan = 0;
ztc.confno = conf->zapconf;
+
ast_mutex_lock(&conflock);
+
if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_INTROUSER) && conf->users > 1) {
if (conf->chan && ast_fileexists(user->namerecloc, NULL, NULL)) {
if (!ast_streamfile(conf->chan, user->namerecloc, chan->language))
@@ -1016,11 +1027,11 @@ zapretry:
ast_log(LOG_DEBUG, "Placed channel %s in ZAP conf %d\n", chan->name, conf->zapconf);
manager_event(EVENT_FLAG_CALL, "MeetmeJoin",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Meetme: %s\r\n"
- "Usernum: %d\r\n",
- chan->name, chan->uniqueid, conf->confno, user->user_no);
+ "Channel: %s\r\n"
+ "Uniqueid: %s\r\n"
+ "Meetme: %s\r\n"
+ "Usernum: %d\r\n",
+ chan->name, chan->uniqueid, conf->confno, user->user_no);
if (!firstpass && !(confflags & CONFFLAG_MONITOR) && !(confflags & CONFFLAG_ADMIN)) {
firstpass = 1;
@@ -1028,21 +1039,23 @@ zapretry:
if (!(confflags & CONFFLAG_WAITMARKED) || (conf->markedusers >= 1))
conf_play(chan, conf, ENTER);
}
- conf_flush(fd);
+
ast_mutex_unlock(&conflock);
- if (confflags & CONFFLAG_AGI) {
+ conf_flush(fd);
+
+ if (confflags & CONFFLAG_AGI) {
/* Get name of AGI file to run from $(MEETME_AGI_BACKGROUND)
- or use default filename of conf-background.agi */
+ or use default filename of conf-background.agi */
- agifile = pbx_builtin_getvar_helper(chan,"MEETME_AGI_BACKGROUND");
+ agifile = pbx_builtin_getvar_helper(chan, "MEETME_AGI_BACKGROUND");
if (!agifile)
agifile = agifiledefault;
if (user->zapchannel) {
/* Set CONFMUTE mode on Zap channel to mute DTMF tones */
x = 1;
- ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
+ ast_channel_setoption(chan, AST_OPTION_TONE_VERIFY, &x, sizeof(char), 0);
}
/* Find a pointer to the agi app and execute the script */
app = pbx_findapp("agi");
@@ -1055,15 +1068,15 @@ zapretry:
if (user->zapchannel) {
/* Remove CONFMUTE mode on Zap channel */
x = 0;
- ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
+ ast_channel_setoption(chan, AST_OPTION_TONE_VERIFY, &x, sizeof(char), 0);
}
} else {
if (user->zapchannel && (confflags & CONFFLAG_STARMENU)) {
/* Set CONFMUTE mode on Zap channel to mute DTMF tones when the menu is enabled */
x = 1;
- ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
+ ast_channel_setoption(chan, AST_OPTION_TONE_VERIFY, &x, sizeof(char), 0);
}
- if (confflags & CONFFLAG_MONITORTALKER && !(dsp = ast_dsp_new())) {
+ if (confflags & CONFFLAG_MONITORTALKER && !(dsp = ast_dsp_new())) {
ast_log(LOG_WARNING, "Unable to allocate DSP!\n");
res = -1;
}
@@ -1082,7 +1095,10 @@ zapretry:
menu_was_active = menu_active;
currentmarked = conf->markedusers;
- if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_MARKEDUSER) && (confflags & CONFFLAG_WAITMARKED) && lastmarked == 0) {
+ if (!(confflags & CONFFLAG_QUIET) &&
+ (confflags & CONFFLAG_MARKEDUSER) &&
+ (confflags & CONFFLAG_WAITMARKED) &&
+ lastmarked == 0) {
if (currentmarked == 1 && conf->users > 1) {
ast_say_number(chan, conf->users - 1, AST_DIGIT_ANY, chan->language, (char *) NULL);
if (conf->users - 1 == 1) {
@@ -1232,6 +1248,7 @@ zapretry:
if (confflags & CONFFLAG_MONITORTALKER) {
int totalsilence;
+
if (user->talking == -1)
user->talking = 0;
@@ -1239,20 +1256,20 @@ zapretry:
if (!user->talking && totalsilence < MEETME_DELAYDETECTTALK) {
user->talking = 1;
manager_event(EVENT_FLAG_CALL, "MeetmeTalking",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Meetme: %s\r\n"
- "Usernum: %d\r\n",
- chan->name, chan->uniqueid, conf->confno, user->user_no);
+ "Channel: %s\r\n"
+ "Uniqueid: %s\r\n"
+ "Meetme: %s\r\n"
+ "Usernum: %d\r\n",
+ chan->name, chan->uniqueid, conf->confno, user->user_no);
}
if (user->talking && totalsilence > MEETME_DELAYDETECTENDTALK) {
user->talking = 0;
manager_event(EVENT_FLAG_CALL, "MeetmeStopTalking",
- "Channel: %s\r\n"
- "Uniqueid: %s\r\n"
- "Meetme: %s\r\n"
- "Usernum: %d\r\n",
- chan->name, chan->uniqueid, conf->confno, user->user_no);
+ "Channel: %s\r\n"
+ "Uniqueid: %s\r\n"
+ "Meetme: %s\r\n"
+ "Usernum: %d\r\n",
+ chan->name, chan->uniqueid, conf->confno, user->user_no);
}
}
if (using_pseudo) {
@@ -1261,6 +1278,7 @@ zapretry:
}
} else if ((f->frametype == AST_FRAME_DTMF) && (confflags & CONFFLAG_EXIT_CONTEXT)) {
char tmp[2];
+
tmp[0] = f->subclass;
tmp[1] = '\0';
if (ast_goto_if_exists(chan, exitcontext, tmp, 1)) {
@@ -1275,7 +1293,6 @@ zapretry:
if (ioctl(fd, ZT_SETCONF, &ztc_empty)) {
ast_log(LOG_WARNING, "Error setting conference\n");
close(fd);
- ast_mutex_unlock(&conflock);
goto outrun;
}
@@ -1293,7 +1310,7 @@ zapretry:
if (!menu_active) {
menu_active = 1;
/* Record this sound! */
- if (!ast_streamfile(chan, "conf-adminmenu", chan->language))
+ if (!ast_streamfile(chan, "conf-adminmenu", chan->language))
dtmf = ast_waitstream(chan, AST_DIGIT_ANY);
else
dtmf = 0;
@@ -1345,27 +1362,21 @@ zapretry:
usr->adminflags |= ADMINFLAG_KICKME;
ast_stopstream(chan);
break;
-
case '4':
tweak_listen_volume(user, VOL_DOWN);
break;
-
case '6':
tweak_listen_volume(user, VOL_UP);
break;
-
case '7':
tweak_talk_volume(user, VOL_DOWN);
break;
-
case '8':
menu_active = 0;
break;
-
case '9':
tweak_talk_volume(user, VOL_UP);
break;
-
default:
menu_active = 0;
/* Play an error message! */
@@ -1378,7 +1389,6 @@ zapretry:
/* User menu */
if (!menu_active) {
menu_active = 1;
- /* Record this sound! */
if (!ast_streamfile(chan, "conf-usermenu", chan->language))
dtmf = ast_waitstream(chan, AST_DIGIT_ANY);
else
@@ -1387,60 +1397,53 @@ zapretry:
dtmf = f->subclass;
if (dtmf) {
switch(dtmf) {
- case '1': /* Un/Mute */
- menu_active = 0;
- if (ztc.confmode & ZT_CONF_TALKER) {
+ case '1': /* Un/Mute */
+ menu_active = 0;
+ if (ztc.confmode & ZT_CONF_TALKER) {
ztc.confmode = ZT_CONF_CONF | ZT_CONF_LISTENER;
confflags |= CONFFLAG_MONITOR ^ CONFFLAG_TALKER;
- } else if (!(user->adminflags & ADMINFLAG_MUTED)) {
- ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
- confflags ^= CONFFLAG_MONITOR | CONFFLAG_TALKER;
- }
- if (ioctl(fd, ZT_SETCONF, &ztc)) {
- ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
- ret = -1;
- break;
- }
- if (ztc.confmode & ZT_CONF_TALKER) {
- if (!ast_streamfile(chan, "conf-unmuted", chan->language))
- ast_waitstream(chan, "");
- } else {
- if (!ast_streamfile(chan, "conf-muted", chan->language))
- ast_waitstream(chan, "");
- }
+ } else if (!(user->adminflags & ADMINFLAG_MUTED)) {
+ ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
+ confflags ^= CONFFLAG_MONITOR | CONFFLAG_TALKER;
+ }
+ if (ioctl(fd, ZT_SETCONF, &ztc)) {
+ ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+ ret = -1;
break;
+ }
+ if (ztc.confmode & ZT_CONF_TALKER) {
+ if (!ast_streamfile(chan, "conf-unmuted", chan->language))
+ ast_waitstream(chan, "");
+ } else {
+ if (!ast_streamfile(chan, "conf-muted", chan->language))
+ ast_waitstream(chan, "");
+ }
+ break;
case '4':
tweak_listen_volume(user, VOL_DOWN);
break;
-
case '6':
tweak_listen_volume(user, VOL_UP);
break;
-
case '7':
tweak_talk_volume(user, VOL_DOWN);
break;
-
case '8':
menu_active = 0;
break;
-
case '9':
tweak_talk_volume(user, VOL_UP);
break;
-
default:
menu_active = 0;
- /* Play an error message! */
if (!ast_streamfile(chan, "conf-errormenu", chan->language))
ast_waitstream(chan, "");
break;
}
}
}
- if (musiconhold) {
+ if (musiconhold)
ast_moh_start(chan, NULL);
- }
if (ioctl(fd, ZT_SETCONF, &ztc)) {
ast_log(LOG_WARNING, "Error setting conference\n");
@@ -1450,7 +1453,9 @@ zapretry:
}
conf_flush(fd);
} else if (option_debug) {
- ast_log(LOG_DEBUG, "Got unrecognized frame on channel %s, f->frametype=%d,f->subclass=%d\n",chan->name,f->frametype,f->subclass);
+ ast_log(LOG_DEBUG,
+ "Got unrecognized frame on channel %s, f->frametype=%d,f->subclass=%d\n",
+ chan->name, f->frametype, f->subclass);
}
ast_frfree(f);
} else if (outfd > -1) {
@@ -1467,7 +1472,6 @@ zapretry:
ast_frame_adjust_volume(&fr, user->listen.actual);
if (ast_write(chan, &fr) < 0) {
ast_log(LOG_WARNING, "Unable to write frame to channel: %s\n", strerror(errno));
- /* break; */
}
} else
ast_log(LOG_WARNING, "Failed to read frame: %s\n", strerror(errno));
@@ -1506,9 +1510,9 @@ zapretry:
}
ast_mutex_unlock(&conflock);
-
-outrun:
+ outrun:
ast_mutex_lock(&conflock);
+
if (confflags & CONFFLAG_MONITORTALKER && dsp)
ast_dsp_free(dsp);
@@ -1560,6 +1564,7 @@ outrun:
}
free(user);
ast_mutex_unlock(&conflock);
+
return ret;
}
@@ -1571,11 +1576,9 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
/* Check first in the conference list */
ast_mutex_lock(&conflock);
- cnf = confs;
- while (cnf) {
+ for (cnf = confs; cnf; cnf = cnf->next) {
if (!strcmp(confno, cnf->confno))
break;
- cnf = cnf->next;
}
ast_mutex_unlock(&conflock);
@@ -1600,7 +1603,7 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
return NULL;
}
var = ast_variable_browse(cfg, "rooms");
- while(var) {
+ while (var) {
if (!strcasecmp(var->name, "conf")) {
/* Separate the PIN */
char *pin, *pinadmin, *conf;
@@ -1638,6 +1641,7 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
if (dynamic_pin[0] == 'q')
dynamic_pin[0] = '\0';
}
+
return cnf;
}
@@ -1674,14 +1678,15 @@ static int count_exec(struct ast_channel *chan, void *data)
if (!ast_strlen_zero(localdata)){
/* have var so load it and exit */
- snprintf(val,sizeof(val), "%d",count);
- pbx_builtin_setvar_helper(chan, localdata,val);
+ snprintf(val, sizeof(val), "%d",count);
+ pbx_builtin_setvar_helper(chan, localdata, val);
} else {
if (chan->_state != AST_STATE_UP)
ast_answer(chan);
res = ast_say_number(chan, count, "", chan->language, (char *) NULL); /* Needs gender */
}
LOCAL_USER_REMOVE(u);
+
return res;
}
@@ -1767,7 +1772,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
cfg = ast_config_load("meetme.conf");
if (cfg) {
var = ast_variable_browse(cfg, "rooms");
- while(var) {
+ while (var) {
if (!strcasecmp(var->name, "conf")) {
char *stringp = ast_strdupa(var->value);
if (stringp) {
@@ -1780,7 +1785,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
}
}
}
- if (! dynamic) {
+ if (!dynamic) {
/* For static: run through the list and see if this conference is empty */
ast_mutex_lock(&conflock);
cnf = confs;
@@ -1796,10 +1801,10 @@ static int conf_exec(struct ast_channel *chan, void *data)
if (!found) {
/* At this point, we have a confno_tmp (static conference) that is empty */
if ((empty_no_pin && ((!stringp) || (stringp && (stringp[0] == '\0')))) || (!empty_no_pin)) {
- /* Case 1: empty_no_pin and pin is nonexistent (NULL)
- * Case 2: empty_no_pin and pin is blank (but not NULL)
- * Case 3: not empty_no_pin
- */
+ /* Case 1: empty_no_pin and pin is nonexistent (NULL)
+ * Case 2: empty_no_pin and pin is blank (but not NULL)
+ * Case 3: not empty_no_pin
+ */
ast_copy_string(confno, confno_tmp, sizeof(confno));
break;
/* XXX the map is not complete (but we do have a confno) */
@@ -1863,13 +1868,16 @@ static int conf_exec(struct ast_channel *chan, void *data)
if (allowretry)
confno[0] = '\0';
} else {
- if ((!ast_strlen_zero(cnf->pin) && !ast_test_flag(&confflags, CONFFLAG_ADMIN)) || (!ast_strlen_zero(cnf->pinadmin) && ast_test_flag(&confflags, CONFFLAG_ADMIN))) {
+ if ((!ast_strlen_zero(cnf->pin) &&
+ !ast_test_flag(&confflags, CONFFLAG_ADMIN)) ||
+ (!ast_strlen_zero(cnf->pinadmin) &&
+ ast_test_flag(&confflags, CONFFLAG_ADMIN))) {
char pin[AST_MAX_EXTENSION]="";
int j;
/* Allow the pin to be retried up to 3 times */
- for (j=0; j<3; j++) {
- if (*the_pin && (always_prompt==0)) {
+ for (j = 0; j < 3; j++) {
+ if (*the_pin && (always_prompt == 0)) {
ast_copy_string(pin, the_pin, sizeof(pin));
res = 0;
} else {
@@ -1877,8 +1885,9 @@ static int conf_exec(struct ast_channel *chan, void *data)
res = ast_app_getdata(chan, "conf-getpin", pin + strlen(pin), sizeof(pin) - 1 - strlen(pin), 0);
}
if (res >= 0) {
- if (!strcasecmp(pin, cnf->pin) || (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin))) {
-
+ if (!strcasecmp(pin, cnf->pin) ||
+ (!ast_strlen_zero(cnf->pinadmin) &&
+ !strcasecmp(pin, cnf->pinadmin))) {
/* Pin correct */
allowretry = 0;
if (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin))
@@ -1936,9 +1945,10 @@ static int conf_exec(struct ast_channel *chan, void *data)
static struct ast_conf_user* find_user(struct ast_conference *conf, char *callerident) {
struct ast_conf_user *user = NULL;
char usrno[1024] = "";
+
if (conf && callerident) {
user = conf->firstuser;
- while(user) {
+ while (user) {
snprintf(usrno, sizeof(usrno), "%d", user->user_no);
if (strcmp(usrno, callerident) == 0)
return user;
@@ -1972,11 +1982,9 @@ static int admin_exec(struct ast_channel *chan, void *data) {
LOCAL_USER_REMOVE(u);
return -1;
}
- cnf = confs;
- while (cnf) {
- if (strcmp(cnf->confno, conf) == 0)
+ for (cnf = confs; cnf; cnf = cnf->next) {
+ if (!strcmp(cnf->confno, conf))
break;
- cnf = cnf->next;
}
if (caller)
@@ -1984,77 +1992,77 @@ static int admin_exec(struct ast_channel *chan, void *data) {
if (cnf) {
switch((int) (*command)) {
- case 76: /* L: Lock */
- cnf->locked = 1;
- break;
- case 108: /* l: Unlock */
- cnf->locked = 0;
- break;
- case 75: /* K: kick all users*/
- user = cnf->firstuser;
- while(user) {
- user->adminflags |= ADMINFLAG_KICKME;
- if (user->nextuser) {
- user = user->nextuser;
- } else {
- break;
- }
- }
- break;
- case 101: /* e: Eject last user*/
- user = cnf->lastuser;
- if (!(user->userflags & CONFFLAG_ADMIN)) {
- user->adminflags |= ADMINFLAG_KICKME;
+ case 76: /* L: Lock */
+ cnf->locked = 1;
+ break;
+ case 108: /* l: Unlock */
+ cnf->locked = 0;
+ break;
+ case 75: /* K: kick all users*/
+ user = cnf->firstuser;
+ while(user) {
+ user->adminflags |= ADMINFLAG_KICKME;
+ if (user->nextuser) {
+ user = user->nextuser;
+ } else {
break;
- } else
- ast_log(LOG_NOTICE, "Not kicking last user, is an Admin!\n");
+ }
+ }
+ break;
+ case 101: /* e: Eject last user*/
+ user = cnf->lastuser;
+ if (!(user->userflags & CONFFLAG_ADMIN)) {
+ user->adminflags |= ADMINFLAG_KICKME;
break;
- case 77: /* M: Mute */
- if (user) {
+ } else
+ ast_log(LOG_NOTICE, "Not kicking last user, is an Admin!\n");
+ break;
+ case 77: /* M: Mute */
+ if (user) {
+ user->adminflags |= ADMINFLAG_MUTED;
+ } else {
+ ast_log(LOG_NOTICE, "Specified User not found!\n");
+ }
+ break;
+ case 78: /* N: Mute all users */
+ user = cnf->firstuser;
+ while(user) {
+ if (user && !(user->userflags & CONFFLAG_ADMIN))
user->adminflags |= ADMINFLAG_MUTED;
+ if (user->nextuser) {
+ user = user->nextuser;
} else {
- ast_log(LOG_NOTICE, "Specified User not found!\n");
- }
- break;
- case 78: /* N: Mute all users */
- user = cnf->firstuser;
- while(user) {
- if (user && !(user->userflags & CONFFLAG_ADMIN))
- user->adminflags |= ADMINFLAG_MUTED;
- if (user->nextuser) {
- user = user->nextuser;
- } else {
- break;
- }
+ break;
}
- break;
- case 109: /* m: Unmute */
- if (user && (user->adminflags & ADMINFLAG_MUTED)) {
+ }
+ break;
+ case 109: /* m: Unmute */
+ if (user && (user->adminflags & ADMINFLAG_MUTED)) {
+ user->adminflags ^= ADMINFLAG_MUTED;
+ } else {
+ ast_log(LOG_NOTICE, "Specified User not found or he muted himself!");
+ }
+ break;
+ case 110: /* n: Unmute all users */
+ user = cnf->firstuser;
+ while(user) {
+ if (user && (user-> adminflags & ADMINFLAG_MUTED)) {
user->adminflags ^= ADMINFLAG_MUTED;
- } else {
- ast_log(LOG_NOTICE, "Specified User not found or he muted himself!");
}
- break;
- case 110: /* n: Unmute all users */
- user = cnf->firstuser;
- while(user) {
- if (user && (user-> adminflags & ADMINFLAG_MUTED)) {
- user->adminflags ^= ADMINFLAG_MUTED;
- }
- if (user->nextuser) {
- user = user->nextuser;
- } else {
- break;
- }
- }
- break;
- case 107: /* k: Kick user */
- if (user) {
- user->adminflags |= ADMINFLAG_KICKME;
+ if (user->nextuser) {
+ user = user->nextuser;
} else {
- ast_log(LOG_NOTICE, "Specified User not found!");
+ break;
}
- break;
+ }
+ break;
+ case 107: /* k: Kick user */
+ if (user) {
+ user->adminflags |= ADMINFLAG_KICKME;
+ } else {
+ ast_log(LOG_NOTICE, "Specified User not found!");
+ }
+ break;
}
} else {
ast_log(LOG_NOTICE, "Conference Number not found\n");
@@ -2069,14 +2077,13 @@ static int admin_exec(struct ast_channel *chan, void *data) {
static void *recordthread(void *args)
{
- struct ast_conference *cnf;
+ struct ast_conference *cnf = args;
struct ast_frame *f=NULL;
int flags;
struct ast_filestream *s;
int res=0;
- cnf = (struct ast_conference *)args;
- if( !cnf || !cnf->chan ) {
+ if (!cnf || !cnf->chan) {
pthread_exit(0);
}
ast_stopstream(cnf->chan);
@@ -2145,7 +2152,9 @@ char *description(void)
int usecount(void)
{
int res;
+
STANDARD_USECOUNT(res);
+
return res;
}