From 9433b7157fcac8a1b089a5f13649b9e82913aca8 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Tue, 8 Nov 2005 21:32:51 +0000 Subject: whitepace cleanup and various minor fixes git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7032 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_meetme.c | 483 +++++++++++++++++++++++++++--------------------------- 1 file 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 : "", user->chan->cid.cid_name ? user->chan->cid.cid_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 : "", + user->chan->cid.cid_name ? user->chan->cid.cid_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; } -- cgit v1.2.3