Add parkedcalltransfers option for res_features. This basically enables/disables...
[asterisk/asterisk.git] / res / res_features.c
index e44090a..aa110fd 100644 (file)
@@ -78,6 +78,7 @@ enum {
 static char *parkedcall = "ParkedCall";
 
 static int parkaddhints = 0;                               /*!< Add parking hints automatically */
 static char *parkedcall = "ParkedCall";
 
 static int parkaddhints = 0;                               /*!< Add parking hints automatically */
+static int parkedcalltransfers = 0;                        /*!< Enable DTMF based transfers on bridge when picking up parked calls */
 static int parkingtime = DEFAULT_PARK_TIME;                /*!< No more than 45 seconds parked before you do something with them */
 static char parking_con[AST_MAX_EXTENSION];                /*!< Context for which parking is made accessible */
 static char parking_con_dial[AST_MAX_EXTENSION];           /*!< Context for dialback for parking (KLUDGE) */
 static int parkingtime = DEFAULT_PARK_TIME;                /*!< No more than 45 seconds parked before you do something with them */
 static char parking_con[AST_MAX_EXTENSION];                /*!< Context for which parking is made accessible */
 static char parking_con_dial[AST_MAX_EXTENSION];           /*!< Context for dialback for parking (KLUDGE) */
@@ -1828,8 +1829,10 @@ static int park_exec(struct ast_channel *chan, void *data)
                        ast_verbose(VERBOSE_PREFIX_3 "Channel %s connected to parked call %d\n", chan->name, park);
 
                memset(&config, 0, sizeof(struct ast_bridge_config));
                        ast_verbose(VERBOSE_PREFIX_3 "Channel %s connected to parked call %d\n", chan->name, park);
 
                memset(&config, 0, sizeof(struct ast_bridge_config));
-               ast_set_flag(&(config.features_callee), AST_FEATURE_REDIRECT);
-               ast_set_flag(&(config.features_caller), AST_FEATURE_REDIRECT);
+               if (parkedcalltransfers) {
+                       ast_set_flag(&(config.features_callee), AST_FEATURE_REDIRECT);
+                       ast_set_flag(&(config.features_caller), AST_FEATURE_REDIRECT);
+               }
                res = ast_bridge_call(chan, peer, &config);
 
                /* Simulate the PBX hanging up */
                res = ast_bridge_call(chan, peer, &config);
 
                /* Simulate the PBX hanging up */
@@ -2116,6 +2119,7 @@ static int load_config(void)
        adsipark = 0;
        comebacktoorigin = 1;
        parkaddhints = 0;
        adsipark = 0;
        comebacktoorigin = 1;
        parkaddhints = 0;
+       parkedcalltransfers = 0;
 
        transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT;
        featuredigittimeout = DEFAULT_FEATURE_DIGIT_TIMEOUT;
 
        transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT;
        featuredigittimeout = DEFAULT_FEATURE_DIGIT_TIMEOUT;
@@ -2148,6 +2152,8 @@ static int load_config(void)
                        parkfindnext = (!strcasecmp(var->value, "next"));
                } else if (!strcasecmp(var->name, "parkinghints")) {
                        parkaddhints = ast_true(var->value);
                        parkfindnext = (!strcasecmp(var->value, "next"));
                } else if (!strcasecmp(var->name, "parkinghints")) {
                        parkaddhints = ast_true(var->value);
+               } else if (!strcasecmp(var->name, "parkedcalltransfers")) {
+                       parkedcalltransfers = ast_true(var->value);
                } else if (!strcasecmp(var->name, "adsipark")) {
                        adsipark = ast_true(var->value);
                } else if (!strcasecmp(var->name, "transferdigittimeout")) {
                } else if (!strcasecmp(var->name, "adsipark")) {
                        adsipark = ast_true(var->value);
                } else if (!strcasecmp(var->name, "transferdigittimeout")) {