From 5057e4898fed195ce9d08f678843deac9a87e0ed Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Thu, 17 Feb 2005 20:04:10 +0000 Subject: Add atxfer fix (bug #3592) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5045 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_features.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'res') diff --git a/res/res_features.c b/res/res_features.c index a5b8f905d..2979ba87f 100755 --- a/res/res_features.c +++ b/res/res_features.c @@ -458,9 +458,8 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p struct ast_channel *transferer; struct ast_channel *transferee; char *transferer_real_context; - char newext[256], *ptr; + char newext[256]; int res; - int len; if (sense == FEATURE_SENSE_PEER) { transferer = peer; @@ -484,8 +483,7 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p ast_moh_start(transferee, NULL); memset(newext, 0, sizeof(newext)); - ptr = newext; - + /* Transfer */ if ((res=ast_streamfile(transferer, "pbx-transfer", transferer->language))) { ast_moh_stop(transferee); @@ -498,15 +496,12 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p ast_autoservice_stop(transferee); ast_indicate(transferee, AST_CONTROL_UNHOLD); return res; - } - ast_stopstream(transferer); - if (res > 0) { + } else if (res > 0) { /* If they've typed a digit already, handle it */ - newext[0] = res; - ptr++; - len--; + newext[0] = (char) res; } + ast_stopstream(transferer); res = ast_app_dtget(transferer, transferer_real_context, newext, sizeof(newext), 100, transferdigittimeout); if (res < 0) { ast_moh_stop(transferee); @@ -619,7 +614,7 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st ast_indicate(transferee, AST_CONTROL_HOLD); ast_autoservice_start(transferee); ast_moh_start(transferee, NULL); - + memset(xferto, 0, sizeof(xferto)); /* Transfer */ if ((res=ast_streamfile(transferer, "pbx-transfer", transferer->language))) { ast_moh_stop(transferee); @@ -632,6 +627,9 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st ast_autoservice_stop(transferee); ast_indicate(transferee, AST_CONTROL_UNHOLD); return res; + } else if(res > 0) { + /* If they've typed a digit already, handle it */ + xferto[0] = (char) res; } if ((ast_app_dtget(transferer, transferer_real_context, xferto, sizeof(xferto), 100, transferdigittimeout))) { cid_num = transferer->cid.cid_num; -- cgit v1.2.3