/*--- count_exec: The MeetmeCount application */ static int count_exec(struct ast_channel *chan, void *data) { struct localuser *u; int res = 0; struct ast_conference *conf; int count; char *confnum, *localdata; char val[80] = "0"; if (!data || ast_strlen_zero(data)) { ast_log(LOG_WARNING, "MeetMeCount requires an argument (conference number)\n"); return -1; } localdata = ast_strdupa(data); LOCAL_USER_ADD(u); confnum = strsep(&localdata,"|"); conf = find_conf(chan, confnum, 0, 0, NULL); if (conf) count = conf->users; else count = 0; if (localdata && !ast_strlen_zero(localdata)){ /* have var so load it and exit */ snprintf(val,sizeof(val), "%i",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; }
static void limits_interval_playback(struct ast_bridge_channel *bridge_channel, struct ast_bridge_features_limits *limits, const char *file) { if (!strcasecmp(file, "timeleft")) { unsigned int remaining = ast_tvdiff_ms(limits->quitting_time, ast_tvnow()) / 1000; unsigned int min; unsigned int sec; if (remaining <= 0) { return; } if ((remaining / 60) > 1) { min = remaining / 60; sec = remaining % 60; } else { min = 0; sec = remaining; } ast_stream_and_wait(bridge_channel->chan, "vm-youhave", AST_DIGIT_NONE); if (min) { ast_say_number(bridge_channel->chan, min, AST_DIGIT_NONE, ast_channel_language(bridge_channel->chan), NULL); ast_stream_and_wait(bridge_channel->chan, "queue-minutes", AST_DIGIT_NONE); } if (sec) { ast_say_number(bridge_channel->chan, sec, AST_DIGIT_NONE, ast_channel_language(bridge_channel->chan), NULL); ast_stream_and_wait(bridge_channel->chan, "queue-seconds", AST_DIGIT_NONE); } } else { ast_stream_and_wait(bridge_channel->chan, file, AST_DIGIT_NONE); } /* * It may be necessary to resume music on hold after we finish * playing the announcment. */ if (ast_test_flag(ast_channel_flags(bridge_channel->chan), AST_FLAG_MOH)) { const char *latest_musicclass; ast_channel_lock(bridge_channel->chan); latest_musicclass = ast_strdupa(ast_channel_latest_musicclass(bridge_channel->chan)); ast_channel_unlock(bridge_channel->chan); ast_moh_start(bridge_channel->chan, latest_musicclass, NULL); } }
static int checkMax(struct ast_channel *chan, struct roomdetails *dtmfmatch) { int res=0; struct ast_app *app; char getvar[30]="AstVar"; char roomno[30]=""; char maxusers[30]=""; char currentusers[30]=""; char prompt[50]=""; char arg[255]=""; strcpy(maxusers,dtmfmatch->maxusers); strcpy(roomno,dtmfmatch->roomno); strcat(arg,roomno); strcat(arg,","); strcat(arg,getvar); if(!(app = pbx_findapp(ConfAppCount))) { ast_log(LOG_WARNING, "Invalid participant count application: %s\n", ConfAppCount); return -1; } res = pbx_exec(chan, app, arg); strcpy(currentusers, pbx_builtin_getvar_helper(chan, getvar)); if(atoi(currentusers) < atoi(maxusers)){ ast_log(LOG_NOTICE, "Currentusers: %i\n", atoi(currentusers)); if(atoi(currentusers)>0){ strcpy(prompt,"conf-thereare"); if (!ast_streamfile(chan, "conf-thereare", chan->language)){ res = ast_waitstream(chan,""); ast_stopstream(chan); if (!ast_say_number(chan, (atoi(currentusers)), AST_DIGIT_ANY, chan->language, (char *) NULL)){ res = ast_waitstream(chan,""); ast_stopstream(chan); } if (!ast_streamfile(chan, "conf-otherinparty", chan->language)){ res = ast_waitstream(chan,""); ast_stopstream(chan); } } } res=1; } else{ ast_log(LOG_NOTICE, "Maximum users exeeded, Current users in room: %s\n",currentusers); strcpy(prompt, "conf-locked"); if (!ast_streamfile(chan, prompt, chan->language)){ res = ast_waitstream(chan,""); ast_stopstream(chan); } res=-1; } return res; }
static int conf_exec(struct ast_channel *chan, void *data) { int res=-1; int confflags = 0; int confno = 0; char confnostr[80] = "", *tmp = NULL; struct ast_channel *tempchan = NULL, *lastchan = NULL, *ichan = NULL; struct ast_frame *f; char *desired_group; int input = 0, search_group = 0; if (chan->_state != AST_STATE_UP) ast_answer(chan); desired_group = ast_strdupa(data); if (!ast_strlen_zero(desired_group)) { ast_verb(3, "Scanning for group %s\n", desired_group); search_group = 1; } for (;;) { if (ast_waitfor(chan, 100) < 0) break; f = ast_read(chan); if (!f) break; if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*')) { ast_frfree(f); break; } ast_frfree(f); ichan = NULL; if(input) { ichan = get_dahdi_channel_locked(input); input = 0; } tempchan = ichan ? ichan : ast_channel_walk_locked(tempchan); if (!tempchan && !lastchan) { break; } if (tempchan && search_group) { const char *mygroup; if ((mygroup = pbx_builtin_getvar_helper(tempchan, "GROUP")) && (!strcmp(mygroup, desired_group))) { ast_verb(3, "Found Matching Channel %s in group %s\n", tempchan->name, desired_group); } else { ast_channel_unlock(tempchan); lastchan = tempchan; continue; } } if (tempchan && (!strcmp(tempchan->tech->type, "DAHDI")) && (tempchan != chan)) { ast_verb(3, "DAHDI channel %s is in-use, monitoring...\n", tempchan->name); ast_copy_string(confnostr, tempchan->name, sizeof(confnostr)); ast_channel_unlock(tempchan); if ((tmp = strchr(confnostr, '-'))) { *tmp = '\0'; } confno = atoi(strchr(confnostr, '/') + 1); ast_stopstream(chan); ast_say_number(chan, confno, AST_DIGIT_ANY, chan->language, (char *) NULL); res = conf_run(chan, confno, confflags); if (res < 0) { break; } input = res; } else if (tempchan) { ast_channel_unlock(tempchan); } lastchan = tempchan; } return res; }