Merge tilghman's meetme fix for reentering pin (bug #2143)
authorMark Spencer <markster@digium.com>
Tue, 27 Jul 2004 03:08:00 +0000 (03:08 +0000)
committerMark Spencer <markster@digium.com>
Tue, 27 Jul 2004 03:08:00 +0000 (03:08 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3520 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c

index 983bf5f..091a613 100755 (executable)
@@ -1324,33 +1324,44 @@ static int conf_exec(struct ast_channel *chan, void *data)
                                        confno[0] = '\0';
                        } else {
                                if (!ast_strlen_zero(cnf->pin)) {
-                                       char pin[AST_MAX_EXTENSION];
-
-                                       if (*the_pin) {
-                                               strncpy(pin, the_pin, sizeof(pin) - 1);
-                                               res = 0;
-                                       } else {
-                                               /* Prompt user for pin if pin is required */
-                                               res = ast_app_getdata(chan, "conf-getpin", pin, sizeof(pin) - 1, 0);
-                                       }
-                                       if (res >= 0) {
-                                               if (!strcasecmp(pin, cnf->pin)) {
-                                                       /* Pin correct */
-                                                       allowretry = 0;
-                                                       /* Run the conference */
-                                                       res = conf_run(chan, cnf, confflags);
+                                       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) {
+                                                       strncpy(pin, the_pin, sizeof(pin) - 1);
+                                                       res = 0;
+                                               } else {
+                                                       /* Prompt user for pin if pin is required */
+                                                       res = ast_app_getdata(chan, "conf-getpin", pin, sizeof(pin) - 1, 0);
+                                               }
+                                               if (res >= 0) {
+                                                       if (!strcasecmp(pin, cnf->pin)) {
+                                                               /* Pin correct */
+                                                               allowretry = 0;
+                                                               /* Run the conference */
+                                                               res = conf_run(chan, cnf, confflags);
+                                                               break;
+                                                       } else {
+                                                               /* Pin invalid */
+                                                               res = ast_streamfile(chan, "conf-invalidpin", chan->language);
+                                                               if (!res)
+                                                                       ast_waitstream(chan, "");
+                                                               res = -1;
+                                                               if (allowretry)
+                                                                       confno[0] = '\0';
+                                                       }
                                                } else {
-                                                       /* Pin invalid */
-                                                       res = ast_streamfile(chan, "conf-invalidpin", chan->language);
-                                                       if (!res)
-                                                               ast_waitstream(chan, "");
                                                        res = -1;
-                                                       if (allowretry)
-                                                               confno[0] = '\0';
+                                                       allowretry = 0;
+                                                       break;
+                                               }
+
+                                               /* Don't retry pin with a static pin */
+                                               if (*the_pin) {
+                                                       break;
                                                }
-                                       } else {
-                                               res = -1;
-                                               allowretry = 0;
                                        }
                                } else {
                                        /* No pin required */