Fix "bug" of not being able to page multiple phones
authorMark Spencer <markster@digium.com>
Wed, 12 Oct 2005 22:56:53 +0000 (22:56 +0000)
committerMark Spencer <markster@digium.com>
Wed, 12 Oct 2005 22:56:53 +0000 (22:56 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6753 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/Makefile
apps/app_page.c [new file with mode: 0755]

index 5bc26a9..9063e20 100755 (executable)
@@ -28,7 +28,7 @@ APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_mp3.so\
      app_test.so app_forkcdr.so app_math.so app_realtime.so \
      app_dumpchan.so app_waitforsilence.so app_while.so app_setrdnis.so \
      app_md5.so app_readfile.so app_chanspy.so app_settransfercapability.so \
-     app_dictate.so app_externalivr.so app_directed_pickup.so
+     app_dictate.so app_externalivr.so app_directed_pickup.so app_page.so
 
 #
 # Obsolete things...
diff --git a/apps/app_page.c b/apps/app_page.c
new file mode 100755 (executable)
index 0000000..f84e0b3
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (c) 2004 - 2005 Digium, Inc.  All rights reserved.
+ *
+ * Mark Spencer <markster@digium.com>
+ *
+ * This code is released under the GNU General Public License
+ * version 2.0.  See LICENSE for more information.
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ */
+
+/*
+ *
+ * Page application
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/options.h"
+#include "asterisk/logger.h"
+#include "asterisk/channel.h"
+#include "asterisk/pbx.h"
+#include "asterisk/module.h"
+
+
+static char *tdesc = "Page Multiple Phones";
+
+static char *app_page= "Page";
+
+static char *page_synopsis = "Pages phones";
+
+static char *page_descrip =
+"Page(Technology/Resource&Technology2/Resource2)\n"
+"  Places outbound calls to the given technology / resource and dumps\n"
+"them into a conference bridge as muted participants.  The original\n"
+"caller is dumped into the conference as a speaker and the room is\n"
+"destroyed when the original caller leaves.  Always returns -1.\n";
+
+STANDARD_LOCAL_USER;
+
+LOCAL_USER_DECL;
+
+static int page_exec(struct ast_channel *chan, void *data)
+{
+       char *options;
+       char *tech, *resource;
+       char meetmeopts[80];
+       unsigned int confid = rand();
+       struct ast_app *app;
+
+       if (data) {
+               options = ast_strdupa((char *)data);
+               if (options) {
+                       char *tmp = strsep(&options, "|,");
+                       if (options) {
+                               /* XXX Parse options if we had any XXX */
+                       }
+                       snprintf(meetmeopts, sizeof(meetmeopts), "%ud|mqxdw", confid);
+                       while(tmp && !ast_strlen_zero(tmp)) {
+                               tech = strsep(&tmp, "&");
+                               if (tech) {
+                                       resource = strchr(tech, '/');
+                                       if (resource) {
+                                               *resource = '\0';
+                                               resource++;
+                                               ast_pbx_outgoing_app(tech, AST_FORMAT_SLINEAR, resource, 30000, "MeetMe", meetmeopts, NULL, 0, chan->cid.cid_num, chan->cid.cid_name, NULL, NULL);
+                                       }
+                               }
+                       }
+                       snprintf(meetmeopts, sizeof(meetmeopts), "%ud|Atqxd", confid);
+                       app = pbx_findapp("Meetme");
+                       if (app) {
+                               pbx_exec(chan, app, meetmeopts, 1);
+                       } else
+                               ast_log(LOG_WARNING, "Whoa, meetme doesn't exist!\n");
+               } else {
+                       ast_log(LOG_ERROR, "Out of memory\n");
+               }
+       }
+
+       return -1;
+}
+
+int unload_module(void)
+{
+       STANDARD_HANGUP_LOCALUSERS;
+       return ast_unregister_application(app_page);
+}
+
+int load_module(void)
+{
+       return ast_register_application(app_page, page_exec, page_synopsis, page_descrip);
+}
+
+char *description(void)
+{
+       return tdesc;
+}
+
+int usecount(void)
+{
+       int res;
+       STANDARD_USECOUNT(res);
+       return res;
+}
+
+char *key()
+{
+       return ASTERISK_GPL_KEY;
+}