diff options
author | Matt Jordan <mjordan@digium.com> | 2015-09-29 07:27:13 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2015-09-29 07:27:13 -0500 |
commit | 8bb8f99252941da06bb406e92bc354012de1d90e (patch) | |
tree | 9879788967f22bde0b0c6fe8e63d6c28cdd38873 | |
parent | e0d8b6a65dfaf3036684830b3d3fe5a6e92faf92 (diff) | |
parent | 145608bd81b871a10ddc03bcc2825ce28bcf91c6 (diff) |
Merge "app_queue.c: Factor out a connected line update routine."
-rw-r--r-- | apps/app_queue.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 23f69853d..0d5f743b3 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -4579,6 +4579,34 @@ static void rna(int rnatime, struct queue_ent *qe, struct ast_channel *peer, cha return; } +/*! + * \internal + * \brief Update connected line on chan from peer. + * \since 13.6.0 + * + * \param chan Channel to get connected line updated. + * \param peer Channel providing connected line information. + * \param is_caller Non-zero if chan is the calling channel. + * + * \return Nothing + */ +static void update_connected_line_from_peer(struct ast_channel *chan, struct ast_channel *peer, int is_caller) +{ + struct ast_party_connected_line connected_caller; + + ast_party_connected_line_init(&connected_caller); + + ast_channel_lock(peer); + ast_connected_line_copy_from_caller(&connected_caller, ast_channel_caller(peer)); + ast_channel_unlock(peer); + connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER; + if (ast_channel_connected_line_sub(peer, chan, &connected_caller, 0) + && ast_channel_connected_line_macro(peer, chan, &connected_caller, is_caller, 0)) { + ast_channel_update_connected_line(chan, &connected_caller, NULL); + } + ast_party_connected_line_free(&connected_caller); +} + #define AST_MAX_WATCHERS 256 /*! * \brief Wait for a member to answer the call @@ -4613,12 +4641,9 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte #ifdef HAVE_EPOLL struct callattempt *epollo; #endif - struct ast_party_connected_line connected_caller; char *inchan_name; struct timeval start_time_tv = ast_tvnow(); - ast_party_connected_line_init(&connected_caller); - ast_channel_lock(qe->chan); inchan_name = ast_strdupa(ast_channel_name(qe->chan)); ast_channel_unlock(qe->chan); @@ -4703,15 +4728,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte ast_channel_update_connected_line(in, &o->connected, NULL); } } else if (!o->dial_callerid_absent) { - ast_channel_lock(o->chan); - 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; - 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); + update_connected_line_from_peer(in, o->chan, 1); } } if (o->aoc_s_rate_list) { @@ -4874,15 +4891,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte ast_channel_update_connected_line(in, &o->connected, NULL); } } else if (!o->dial_callerid_absent) { - ast_channel_lock(o->chan); - 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; - 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); + update_connected_line_from_peer(in, o->chan, 1); } } if (o->aoc_s_rate_list) { |