]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Ensure channel placed in meetme in ringing state is properly hung up.
authorJeff Peeler <jpeeler@digium.com>
Thu, 1 Jul 2010 15:05:43 +0000 (15:05 +0000)
committerJeff Peeler <jpeeler@digium.com>
Thu, 1 Jul 2010 15:05:43 +0000 (15:05 +0000)
An outgoing channel placed in meetme while still ringing which was then hung up
would not exit meetme and the channel was not properly destroyed. Specifically
checking for this scenario by looking at the appropriate control frames resolves
the issue.

(closes issue #15871)
Reported by: Ivan
Patches:
      meetme_congestion_trunk_v2.patch uploaded by Ivan (license 229)

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

apps/app_meetme.c

index 5fed964d849e505657cce067c7d0cc45daaad336..a13844e9a87b1f2471f3657e7b42db2d26d00036 100644 (file)
@@ -2322,6 +2322,20 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
                                        }
                                } else if (f->frametype == AST_FRAME_NULL) {
                                        /* Ignore NULL frames. It is perfectly normal to get these if the person is muted. */
+                               } else if (f->frametype == AST_FRAME_CONTROL) {
+                                       switch (f->subclass) {
+                                       case AST_CONTROL_BUSY:
+                                       case AST_CONTROL_CONGESTION:
+                                               ast_frfree(f);
+                                               goto outrun;
+                                               break;
+                                       default:
+                                               if (option_debug) {
+                                                       ast_log(LOG_DEBUG, 
+                                                               "Got ignored control frame on channel %s, f->frametype=%d,f->subclass=%d\n",
+                                                               chan->name, f->frametype, f->subclass);
+                                               }
+                                       }
                                } else if (option_debug) {
                                        ast_log(LOG_DEBUG,
                                                "Got unrecognized frame on channel %s, f->frametype=%d,f->subclass=%d\n",