summaryrefslogtreecommitdiff
path: root/main/bridge_basic.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2014-11-21 02:17:15 +0000
committerMatthew Jordan <mjordan@digium.com>2014-11-21 02:17:15 +0000
commit2be984fb1142af6bf33951ee2d29ce2b3dfbd682 (patch)
treee63a2452bae91f293d8df8806728f9b401ae59ab /main/bridge_basic.c
parent2f78fde10f265a0e4c18b696678d828e172cf536 (diff)
main/bridge_basic: Fix features regressions introduced by r428165
In r428165, two bugs were introduced: * Prior to entering the features retry loop, the buffer that holds the collected digits is wiped. However, this inadvertently wipes out the first collected digit on the first pass through, which is obtained in ast_stream_and_wait. This caused all of the features tests to fail. * If ast_app_dtget returns a hangup (-1), the loop would retry incorrectly. If we detect a hangup, we have to stop trying the feature. This patch fixes both issues. Review: https://reviewboard.asterisk.org/r/4196/ ........ Merged revisions 428505 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428506 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/bridge_basic.c')
-rw-r--r--main/bridge_basic.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/main/bridge_basic.c b/main/bridge_basic.c
index 449543512..084212b32 100644
--- a/main/bridge_basic.c
+++ b/main/bridge_basic.c
@@ -3012,12 +3012,18 @@ static int grab_transfer(struct ast_channel *chan, char *exten, size_t exten_len
/* Drop to dialtone so they can enter the extension they want to transfer to */
do {
++attempts;
- memset(exten, 0, exten_len);
+
ast_test_suite_event_notify("TRANSFER_BEGIN_DIAL",
"Channel: %s\r\n"
"Attempt: %d",
ast_channel_name(chan), attempts);
res = ast_app_dtget(chan, context, exten, exten_len, exten_len - 1, digit_timeout);
+ ast_test_suite_event_notify("TRANSFER_DIALLED",
+ "Channel: %s\r\n"
+ "Attempt: %d\r\n"
+ "Dialled: %s\r\n"
+ "Result: %s",
+ ast_channel_name(chan), attempts, exten, res > 0 ? "Success" : "Failure");
if (res < 0) {
/* Hangup or error */
res = -1;
@@ -3034,25 +3040,20 @@ static int grab_transfer(struct ast_channel *chan, char *exten, size_t exten_len
} else {
ast_stream_and_wait(chan, invalid_sound, AST_DIGIT_NONE);
}
- res = -1;
+ memset(exten, 0, exten_len);
+ res = 1;
} else {
/* Dialed extension is valid. */
res = 0;
}
- ast_test_suite_event_notify("TRANSFER_DIALLED",
- "Channel: %s\r\n"
- "Attempt: %d\r\n"
- "Dialled: %s\r\n"
- "Result: %s",
- ast_channel_name(chan), attempts, exten, res == 0 ? "Success" : "Failure");
- } while (res < 0 && attempts < max_attempts);
+ } while (res > 0 && attempts < max_attempts);
ast_test_suite_event_notify("TRANSFER_DIAL_FINAL",
"Channel: %s\r\n"
"Result: %s",
ast_channel_name(chan), res == 0 ? "Success" : "Failure");
- return res;
+ return res ? -1 : 0;
}
static void copy_caller_data(struct ast_channel *dest, struct ast_channel *caller)