Fix option handling code.
authorTilghman Lesher <tilghman@meg.abyt.es>
Fri, 17 Oct 2008 04:28:13 +0000 (04:28 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Fri, 17 Oct 2008 04:28:13 +0000 (04:28 +0000)
(closes issue #11040)
 Reported by: DEA
 Patches:
       rt-meetme-flag-fixes-v2.txt uploaded by DEA (license 3)
       with additional fixes by me

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@150384 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 070c3c7..f40d6b4 100644 (file)
@@ -389,6 +389,9 @@ struct ast_conference {
        char pinadmin[MAX_PIN];                 /*!< If protected by a admin PIN */
        char uniqueid[32];
        long endtime;                           /*!< When to end the conf if scheduled */
+       const char *useropts;                   /*!< RealTime user flags */
+       const char *adminopts;                  /*!< RealTime moderator flags */
+       const char *bookid;                     /*!< RealTime conference id */
        struct ast_frame *transframe[32];
        struct ast_frame *origframe;
        struct ast_trans_pvt *transpath[32];
@@ -2966,8 +2969,7 @@ bailoutandtrynormal:
 }
 
 static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char *confno, int make, int dynamic,
-                               char *dynamic_pin, size_t pin_buf_len, int refcount, struct ast_flags *confflags,
-                               char *useropts, char *adminopts, int *too_early)
+                               char *dynamic_pin, size_t pin_buf_len, int refcount, struct ast_flags *confflags, int *too_early)
 {
        struct ast_variable *var, *origvar;
        struct ast_conference *cnf;
@@ -2991,6 +2993,10 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char
                struct timeval now;
                char currenttime[19] = "";
                char eatime[19] = "";
+               char bookid[19] = "";
+               char recordingtmp[AST_MAX_EXTENSION] = "";
+               char useropts[OPTIONS_LEN]; /* Used for RealTime conferences */
+               char adminopts[OPTIONS_LEN];
                struct ast_tm tm, etm;
                struct timeval endtime = { .tv_sec = 0 };
 
@@ -3050,6 +3056,8 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char
                                pin = ast_strdupa(var->value);
                        } else if (!strcasecmp(var->name, "adminpin")) {
                                pinadmin = ast_strdupa(var->value);
+                       } else if (!strcasecmp(var->name, "bookId")) {
+                               ast_copy_string(bookid, var->value, sizeof(bookid));
                        } else if (!strcasecmp(var->name, "opts")) {
                                ast_copy_string(useropts, var->value, sizeof(char[OPTIONS_LEN]));
                        } else if (!strcasecmp(var->name, "maxusers")) {
@@ -3071,6 +3079,12 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char
                        cnf->maxusers = maxusers;
                        cnf->endalert = endalert;
                        cnf->endtime = endtime.tv_sec;
+                       cnf->useropts = ast_strdup(useropts);
+                       cnf->adminopts = ast_strdup(adminopts);
+                       cnf->bookid = ast_strdup(bookid);
+                       snprintf(recordingtmp, sizeof(recordingtmp), "%s/meetme/meetme-conf-rec-%s-%s", ast_config_AST_SPOOL_DIR, confno, bookid);
+                       cnf->recordingfilename = ast_strdup(recordingtmp);
+                       cnf->recordingformat = ast_strdup("wav");
                }
        }
 
@@ -3391,8 +3405,6 @@ static int conf_exec(struct ast_channel *chan, void *data)
                        }
                }
                if (!ast_strlen_zero(confno)) {
-                       char useropts[OPTIONS_LEN] = "";
-                       char adminopts[OPTIONS_LEN] = "";
                        /* Check the validity of the conference */
                        cnf = find_conf(chan, confno, 1, dynamic, the_pin, 
                                sizeof(the_pin), 1, &confflags);
@@ -3400,7 +3412,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
                                int too_early = 0;
 
                                cnf = find_conf_realtime(chan, confno, 1, dynamic, 
-                                       the_pin, sizeof(the_pin), 1, &confflags, useropts, adminopts, &too_early);
+                                       the_pin, sizeof(the_pin), 1, &confflags,&too_early);
                                if (rt_schedule && too_early)
                                        allowretry = 0;
                        }
@@ -3437,14 +3449,16 @@ static int conf_exec(struct ast_channel *chan, void *data)
                                                                /* Pin correct */
                                                                allowretry = 0;
                                                                if (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin)) {
-                                                                       if(!ast_strlen_zero(adminopts))
-                                                                               ast_app_parse_options(meetme_opts, &confflags, optargs, adminopts);
-                                                                       ast_set_flag(&confflags, CONFFLAG_ADMIN);
+                                                                       if (!ast_strlen_zero(cnf->adminopts)) {
+                                                                               char *opts = ast_strdupa(cnf->adminopts);
+                                                                               ast_app_parse_options(meetme_opts, &confflags, optargs, opts);
+                                                                       }
                                                                } else {
-                                                                       if(!ast_strlen_zero(useropts))
-                                                                               ast_app_parse_options(meetme_opts, &confflags, optargs, useropts);
+                                                                       if (!ast_strlen_zero(cnf->useropts)) {
+                                                                               char *opts = ast_strdupa(cnf->useropts);
+                                                                               ast_app_parse_options(meetme_opts, &confflags, optargs, opts);
+                                                                       }
                                                                }
-
                                                                /* Run the conference */
                                                                res = conf_run(chan, cnf, confflags.flags, optargs);
                                                                break;
@@ -3453,8 +3467,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
                                                                if (!ast_streamfile(chan, "conf-invalidpin", chan->language)) {
                                                                        res = ast_waitstream(chan, AST_DIGIT_ANY);
                                                                        ast_stopstream(chan);
-                                                               }
-                                                               else {
+                                                               } else {
                                                                        ast_log(LOG_WARNING, "Couldn't play invalid pin msg!\n");
                                                                        break;
                                                                }