]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Don't send redirecting updates to the caller if the dialplan forked the call.
authorRichard Mudgett <rmudgett@digium.com>
Fri, 4 Feb 2011 18:53:06 +0000 (18:53 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 4 Feb 2011 18:53:06 +0000 (18:53 +0000)
Each fork in the dial could be redirected and confuse the caller.  For
ISDN the DivLeg1 and DivLeg3 messages would get confused because ISDN
redirects calls in sequence not in parallel.

* Also fixed a formatting inconsistency in app_dial.c and make a warning
message more useful about what frame type could not be written.

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

apps/app_dial.c
apps/app_queue.c

index 581a881701ae9138e77a83a308ba74570e08e1a9..408a8739f7b69b50c6558d8f63af069672621a2d 100644 (file)
@@ -1276,7 +1276,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
                                case AST_CONTROL_REDIRECTING:
                                        if (ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
                                                ast_verb(3, "Redirecting update to %s prevented.\n", in->name);
-                                       } else {
+                                       } else if (single) {
                                                ast_verb(3, "%s redirecting info has changed, passing it to %s\n", c->name, in->name);
                                                if (ast_channel_redirecting_macro(c, in, f, 1, 1)) {
                                                        ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);
@@ -1321,20 +1321,22 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
                                }
                        } else if (single) {
                                switch (f->frametype) {
-                                       case AST_FRAME_VOICE:
-                                       case AST_FRAME_IMAGE:
-                                       case AST_FRAME_TEXT:
-                                               if (ast_write(in, f)) {
-                                                       ast_log(LOG_WARNING, "Unable to write frame\n");
-                                               }
-                                               break;
-                                       case AST_FRAME_HTML:
-                                               if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML) && ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
-                                                       ast_log(LOG_WARNING, "Unable to send URL\n");
-                                               }
-                                               break;
-                                       default:
-                                               break;
+                               case AST_FRAME_VOICE:
+                               case AST_FRAME_IMAGE:
+                               case AST_FRAME_TEXT:
+                                       if (ast_write(in, f)) {
+                                               ast_log(LOG_WARNING, "Unable to write frametype: %d\n",
+                                                       f->frametype);
+                                       }
+                                       break;
+                               case AST_FRAME_HTML:
+                                       if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML)
+                                               && ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
+                                               ast_log(LOG_WARNING, "Unable to send URL\n");
+                                       }
+                                       break;
+                               default:
+                                       break;
                                }
                        }
                        ast_frfree(f);
index 2c0833360c3db6977740be794dd17bae62f0c225..553d57aa7d6d7091896ae37c2b385e7ffaa6be87 100644 (file)
@@ -3754,7 +3754,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
                                                case AST_CONTROL_REDIRECTING:
                                                        if (!update_connectedline) {
                                                                ast_verb(3, "Redirecting update to %s prevented\n", inchan_name);
-                                                       } else {
+                                                       } else if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
                                                                ast_verb(3, "%s redirecting info has changed, passing it to %s\n", ochan_name, inchan_name);
                                                                if (ast_channel_redirecting_macro(o->chan, in, f, 1, 1)) {
                                                                        ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);