From 5985919ea4c296a005f49a3bf2f7306bfed9fdfa Mon Sep 17 00:00:00 2001 From: markster Date: Wed, 12 Oct 2005 22:56:53 +0000 Subject: Fix "bug" of not being able to page multiple phones git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6753 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/Makefile | 2 +- apps/app_page.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100755 apps/app_page.c diff --git a/apps/Makefile b/apps/Makefile index 5bc26a91a..9063e20c1 100755 --- a/apps/Makefile +++ b/apps/Makefile @@ -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 index 000000000..f84e0b346 --- /dev/null +++ b/apps/app_page.c @@ -0,0 +1,125 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (c) 2004 - 2005 Digium, Inc. All rights reserved. + * + * Mark Spencer + * + * 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 +#include +#include +#include + +#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; +} -- cgit v1.2.3