Merge ADSI parking announcement (bug #2211)
authorMark Spencer <markster@digium.com>
Wed, 15 Sep 2004 19:49:33 +0000 (19:49 +0000)
committerMark Spencer <markster@digium.com>
Wed, 15 Sep 2004 19:49:33 +0000 (19:49 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3787 65c4cc65-6c06-0410-ace0-fbb531ad65f3

configs/features.conf.sample
res/res_features.c

index 6d31819..0b037e2 100755 (executable)
@@ -11,3 +11,4 @@ context => parkedcalls                ; Which context parked calls are in
 ;transferdigittimeout => 3     ; Number of seconds to wait between digits when transfering a call
 ;courtesytone = beep           ; Sound file to play to the parked caller 
                                ; when someone dials a parked call
+;adsipark = yes                        ; if you want ADSI parking announcements
index e9cb7e7..5daa0b5 100755 (executable)
@@ -27,6 +27,7 @@
 #include <asterisk/cli.h>
 #include <asterisk/manager.h>
 #include <asterisk/utils.h>
+#include <asterisk/adsi.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <unistd.h>
@@ -59,6 +60,8 @@ static int parking_start = 701;
 /* Last available extension for parking */
 static int parking_stop = 750;
 
+static int adsipark = 0;
+
 static int transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT;
 
 /* Default courtesy tone played when party joins conference */
@@ -120,6 +123,22 @@ char *ast_pickup_ext(void)
        return pickup_ext;
 }
 
+static int adsi_announce_park(struct ast_channel *chan, int parkingnum)
+{
+       int res;
+       int justify[5] = {ADSI_JUST_CENT, ADSI_JUST_CENT, ADSI_JUST_CENT, ADSI_JUST_CENT};
+       char tmp[256] = "";
+       char *message[5] = {NULL, NULL, NULL, NULL, NULL};
+
+       snprintf(tmp, sizeof(tmp), "Parked on %d", parkingnum);
+       message[0] = tmp;
+       res = adsi_load_session(chan, NULL, 0, 1);
+       if (res == -1) {
+               return res;
+       }
+       return adsi_print(chan, message, justify, 1);
+}
+
 int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeout, int *extout)
 {
        /* We put the user in the parking list, then wake up the parking thread to be sure it looks
@@ -194,7 +213,13 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou
                                 );
 
                        if (peer) {
+                               if (adsipark && adsi_available(peer)) {
+                                       adsi_announce_park(peer, pu->parkingnum);
+                               }
                                ast_say_digits(peer, pu->parkingnum, "", peer->language);
+                               if (adsipark && adsi_available(peer)) {
+                                       adsi_unload_session(peer);
+                               }
                                if (pu->notquiteyet) {
                                        /* Wake up parking thread if we're really done */
                                        ast_moh_start(pu->chan, NULL);
@@ -862,6 +887,8 @@ int load_module(void)
                                        parking_start = start;
                                        parking_stop = end;
                                }
+                       } else if (!strcasecmp(var->name, "adsipark")) {
+                               adsipark = ast_true(var->value);
                        } else if(!strcasecmp(var->name, "transferdigittimeout")) {
                                if ((sscanf(var->value, "%d", &transferdigittimeout) != 1) || (transferdigittimeout < 1)) {
                                        ast_log(LOG_WARNING, "%s is not a valid transferdigittimeout\n", var->value);