]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
DTMF transfer plays the wrong sounds for wrong number or other call failure.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 19 Jan 2011 21:21:56 +0000 (21:21 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 19 Jan 2011 21:21:56 +0000 (21:21 +0000)
* Set the default for features.conf.sample xferfailsound option to "beeperr"
as documented instead of "pbx-invalid" and corrected the use of it in DTMF
blind transfer (#1).

* Improved DTMF blind transfer handling of wrong numbers.

Most of the concerns in this issue were taken care of by the patch for
issue 17999: Issues with DTMF triggered attended transfers.

(closes issue #18379)
Reported by: gincantalupo
Tested by: rmudgett

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

res/res_features.c

index e62339405bb0c8cf2901e0825d8888adb5bdb713..54744be51a154414bbd4ee688c52d50ce4c5a8eb 100644 (file)
@@ -979,15 +979,27 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p
 
        ast_stopstream(transferer);
        res = ast_app_dtget(transferer, transferer_real_context, xferto, sizeof(xferto), 100, transferdigittimeout);
-       if (res < 0) {  /* hangup, would be 0 for invalid and 1 for valid */
+       if (res < 0) {  /* hangup or error, (would be 0 for invalid and 1 for valid) */
                finishup(transferee);
-               return res;
+               return -1;
        }
+       if (res == 0) {
+               if (xferto[0]) {
+                       ast_log(LOG_WARNING, "Extension '%s' does not exist in context '%s'\n",
+                               xferto, transferer_real_context);
+               } else {
+                       /* Does anyone care about this case? */
+                       ast_log(LOG_WARNING, "No digits dialed.\n");
+               }
+               ast_stream_and_wait(transferer, "pbx-invalid", transferer->language, "");
+               finishup(transferee);
+               return FEATURE_RETURN_SUCCESS;
+       }
+
        if (!strcmp(xferto, ast_parking_ext())) {
                res = finishup(transferee);
-               if (res)
-                       res = -1;
-               else if (!(parkstatus = masq_park_call_announce(transferee, transferer, 0, NULL, orig_chan_name))) {    /* success */
+               if (res) {
+               } else if (!(parkstatus = masq_park_call_announce(transferee, transferer, 0, NULL, orig_chan_name))) {  /* success */
                        /* We return non-zero, but tell the PBX not to hang the channel when
                           the thread dies -- We have to be careful now though.  We are responsible for 
                           hanging up the channel, else it will never be hung up! */
@@ -995,8 +1007,8 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p
                } else {
                        ast_log(LOG_WARNING, "Unable to park call %s, parkstatus=%d\n", transferee->name, parkstatus);
                }
-               /*! \todo XXX Maybe we should have another message here instead of invalid extension XXX */
-       } else if (ast_exists_extension(transferee, transferer_real_context, xferto, 1, transferer->cid.cid_num)) {
+               ast_autoservice_start(transferee);
+       } else {
                pbx_builtin_setvar_helper(transferer, "BLINDTRANSFER", transferee->name);
                pbx_builtin_setvar_helper(transferee, "BLINDTRANSFER", transferer->name);
                res=finishup(transferee);
@@ -1028,11 +1040,9 @@ static int builtin_blindtransfer(struct ast_channel *chan, struct ast_channel *p
                }
                check_goto_on_transfer(transferer);
                return res;
-       } else {
-               if (option_verbose > 2) 
-                       ast_verbose(VERBOSE_PREFIX_3 "Unable to find extension '%s' in context '%s'\n", xferto, transferer_real_context);
        }
-       if (parkstatus != FEATURE_RETURN_PARKFAILED && ast_stream_and_wait(transferer, xferfailsound, transferer->language, AST_DIGIT_ANY) < 0 ) {
+       if (parkstatus != FEATURE_RETURN_PARKFAILED
+               && ast_stream_and_wait(transferer, xferfailsound, transferer->language, "")) {
                finishup(transferee);
                return -1;
        }
@@ -3342,7 +3352,7 @@ static int load_config(void)
        strcpy(parkmohclass, "default");
        courtesytone[0] = '\0';
        strcpy(xfersound, "beep");
-       strcpy(xferfailsound, "pbx-invalid");
+       strcpy(xferfailsound, "beeperr");
        parking_start = 701;
        parking_stop = 750;
        parkfindnext = 0;