Add missing connected line macro calls to initial dial for Dial and Queue apps.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 15 Mar 2012 18:32:22 +0000 (18:32 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 15 Mar 2012 18:32:22 +0000 (18:32 +0000)
The connected line interception macros do not get executed when the
outgoing channel is initially created and that channel's caller-id is
implicitly imported into the incoming channel's connected line data.  If
you are using the interception macros, you would expect that they get run
for every change to a channel's connected line information outside of
normal dialplan execution.

Review: https://reviewboard.asterisk.org/r/1817/
........

Merged revisions 359609 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 359620 from http://svn.asterisk.org/svn/asterisk/branches/10

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

apps/app_dial.c
apps/app_queue.c

index e641356..fbd4ef6 100644 (file)
@@ -1061,7 +1061,10 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
                        ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(outgoing->chan));
                        ast_channel_unlock(outgoing->chan);
                        connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-                       ast_channel_update_connected_line(in, &connected_caller, NULL);
+                       if (ast_channel_connected_line_sub(outgoing->chan, in, &connected_caller, 0) &&
+                               ast_channel_connected_line_macro(outgoing->chan, in, &connected_caller, 1, 0)) {
+                               ast_channel_update_connected_line(in, &connected_caller, NULL);
+                       }
                        ast_party_connected_line_free(&connected_caller);
                }
        }
@@ -1126,7 +1129,10 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
                                                        ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(c));
                                                        ast_channel_unlock(c);
                                                        connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-                                                       ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                       if (ast_channel_connected_line_sub(c, in, &connected_caller, 0) &&
+                                                               ast_channel_connected_line_macro(c, in, &connected_caller, 1, 0)) {
+                                                               ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                       }
                                                        ast_party_connected_line_free(&connected_caller);
                                                }
                                        }
@@ -1199,7 +1205,10 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
                                                                ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(c));
                                                                ast_channel_unlock(c);
                                                                connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-                                                               ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                               if (ast_channel_connected_line_sub(c, in, &connected_caller, 0) &&
+                                                                       ast_channel_connected_line_macro(c, in, &connected_caller, 1, 0)) {
+                                                                       ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                               }
                                                                ast_party_connected_line_free(&connected_caller);
                                                        }
                                                }
index ef3223b..d372a50 100644 (file)
@@ -3756,7 +3756,10 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
                                                        ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(o->chan));
                                                        ast_channel_unlock(o->chan);
                                                        connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-                                                       ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                       if (ast_channel_connected_line_sub(o->chan, in, &connected_caller, 0) &&
+                                                               ast_channel_connected_line_macro(o->chan, in, &connected_caller, 1, 0)) {
+                                                               ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                       }
                                                        ast_party_connected_line_free(&connected_caller);
                                                }
                                        }
@@ -3886,7 +3889,10 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
                                                                                ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(o->chan));
                                                                                ast_channel_unlock(o->chan);
                                                                                connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
-                                                                               ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                                               if (ast_channel_connected_line_sub(o->chan, in, &connected_caller, 0) &&
+                                                                                       ast_channel_connected_line_macro(o->chan, in, &connected_caller, 1, 0)) {
+                                                                                       ast_channel_update_connected_line(in, &connected_caller, NULL);
+                                                                               }
                                                                                ast_party_connected_line_free(&connected_caller);
                                                                        }
                                                                }