| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2006-04-11 21:51:17 +00:00
										 |  |  |  * Copyright (c) 2004 - 2006 Digium, Inc.  All rights reserved. | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-24 20:12:06 +00:00
										 |  |  | /*! \file
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-10-24 20:12:06 +00:00
										 |  |  |  * \brief page() - Paging application | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-12-30 21:18:06 +00:00
										 |  |  |  * \author Mark Spencer <markster@digium.com> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-11-06 15:09:47 +00:00
										 |  |  |  * \ingroup applications | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-24 17:11:45 +00:00
										 |  |  | /*** MODULEINFO
 | 
					
						
							|  |  |  | 	<depend>zaptel</depend> | 
					
						
							|  |  |  |  ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <unistd.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | #include <errno.h>
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #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"
 | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | #include "asterisk/file.h"
 | 
					
						
							| 
									
										
										
										
											2005-10-13 05:37:49 +00:00
										 |  |  | #include "asterisk/app.h"
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 7265-7266,7268-7275 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r7265 | oej | 2005-12-01 17:18:14 -0600 (Thu, 01 Dec 2005) | 2 lines
Changing bug report address to the Asterisk issue tracker
........
r7266 | kpfleming | 2005-12-01 17:18:29 -0600 (Thu, 01 Dec 2005) | 3 lines
Makefile 'update' target now supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful
........
r7268 | kpfleming | 2005-12-01 17:34:58 -0600 (Thu, 01 Dec 2005) | 2 lines
ensure channel's scheduling context is freed (issue #5788)
........
r7269 | kpfleming | 2005-12-01 17:49:44 -0600 (Thu, 01 Dec 2005) | 2 lines
don't block waiting for the Festival server forever when it goes away (issue #5882)
........
r7270 | kpfleming | 2005-12-01 18:26:12 -0600 (Thu, 01 Dec 2005) | 2 lines
allow variables to exist on both 'halves' of the Local channel (issue #5810)
........
r7271 | kpfleming | 2005-12-01 18:28:48 -0600 (Thu, 01 Dec 2005) | 2 lines
protect agent_bridgedchannel() from segfaulting when there is no bridged channel (issue #5879)
........
r7272 | kpfleming | 2005-12-01 18:39:00 -0600 (Thu, 01 Dec 2005) | 3 lines
properly handle password changes when mailbox is last line of config file and not followed by a newline (issue #5870)
reformat password changing code to conform to coding guidelines (issue #5870)
........
r7273 | kpfleming | 2005-12-01 18:42:40 -0600 (Thu, 01 Dec 2005) | 2 lines
allow previous context-searching behavior to be used if desired (issue #5899)
........
r7274 | kpfleming | 2005-12-01 18:51:15 -0600 (Thu, 01 Dec 2005) | 2 lines
inherit channel variables into channels created by Page() application (issue #5888)
........
r7275 | oej | 2005-12-01 18:52:13 -0600 (Thu, 01 Dec 2005) | 2 lines
Bug #5907. Improve SIP INFO DTMF debugging output. (1.2 & Trunk)
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
											
										 
											2005-12-02 01:01:11 +00:00
										 |  |  | #include "asterisk/chanvars.h"
 | 
					
						
							| 
									
										
										
										
											2006-01-13 03:34:31 +00:00
										 |  |  | #include "asterisk/utils.h"
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | static const char *app_page= "Page"; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | static const char *page_synopsis = "Pages phones"; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | static const char *page_descrip = | 
					
						
							| 
									
										
										
										
											2005-10-13 05:37:49 +00:00
										 |  |  | "Page(Technology/Resource&Technology2/Resource2[|options])\n" | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | "  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" | 
					
						
							| 
									
										
										
										
											2005-10-13 05:37:49 +00:00
										 |  |  | "destroyed when the original caller leaves.  Valid options are:\n" | 
					
						
							| 
									
										
										
										
											2005-11-07 22:01:22 +00:00
										 |  |  | "        d - full duplex audio\n" | 
					
						
							| 
									
										
										
										
											2006-05-03 22:38:56 +00:00
										 |  |  | "	 q - quiet, do not play beep to caller\n" | 
					
						
							| 
									
										
										
										
											2006-05-03 22:40:42 +00:00
										 |  |  | "        r - record the page into a file (see 'r' for app_meetme)\n"; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | LOCAL_USER_DECL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-03 21:19:11 +00:00
										 |  |  | enum { | 
					
						
							|  |  |  | 	PAGE_DUPLEX = (1 << 0), | 
					
						
							|  |  |  | 	PAGE_QUIET = (1 << 1), | 
					
						
							| 
									
										
										
										
											2006-05-03 22:38:56 +00:00
										 |  |  | 	PAGE_RECORD = (1 << 2), | 
					
						
							| 
									
										
										
										
											2005-11-03 21:19:11 +00:00
										 |  |  | } page_opt_flags; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AST_APP_OPTIONS(page_opts, { | 
					
						
							|  |  |  | 	AST_APP_OPTION('d', PAGE_DUPLEX), | 
					
						
							|  |  |  | 	AST_APP_OPTION('q', PAGE_QUIET), | 
					
						
							| 
									
										
										
										
											2006-05-03 22:38:56 +00:00
										 |  |  | 	AST_APP_OPTION('r', PAGE_RECORD), | 
					
						
							| 
									
										
										
										
											2005-10-13 05:37:49 +00:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | struct calloutdata { | 
					
						
							|  |  |  | 	char cidnum[64]; | 
					
						
							|  |  |  | 	char cidname[64]; | 
					
						
							|  |  |  | 	char tech[64]; | 
					
						
							|  |  |  | 	char resource[256]; | 
					
						
							|  |  |  | 	char meetmeopts[64]; | 
					
						
							| 
									
										
											  
											
												Merged revisions 7265-7266,7268-7275 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r7265 | oej | 2005-12-01 17:18:14 -0600 (Thu, 01 Dec 2005) | 2 lines
Changing bug report address to the Asterisk issue tracker
........
r7266 | kpfleming | 2005-12-01 17:18:29 -0600 (Thu, 01 Dec 2005) | 3 lines
Makefile 'update' target now supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful
........
r7268 | kpfleming | 2005-12-01 17:34:58 -0600 (Thu, 01 Dec 2005) | 2 lines
ensure channel's scheduling context is freed (issue #5788)
........
r7269 | kpfleming | 2005-12-01 17:49:44 -0600 (Thu, 01 Dec 2005) | 2 lines
don't block waiting for the Festival server forever when it goes away (issue #5882)
........
r7270 | kpfleming | 2005-12-01 18:26:12 -0600 (Thu, 01 Dec 2005) | 2 lines
allow variables to exist on both 'halves' of the Local channel (issue #5810)
........
r7271 | kpfleming | 2005-12-01 18:28:48 -0600 (Thu, 01 Dec 2005) | 2 lines
protect agent_bridgedchannel() from segfaulting when there is no bridged channel (issue #5879)
........
r7272 | kpfleming | 2005-12-01 18:39:00 -0600 (Thu, 01 Dec 2005) | 3 lines
properly handle password changes when mailbox is last line of config file and not followed by a newline (issue #5870)
reformat password changing code to conform to coding guidelines (issue #5870)
........
r7273 | kpfleming | 2005-12-01 18:42:40 -0600 (Thu, 01 Dec 2005) | 2 lines
allow previous context-searching behavior to be used if desired (issue #5899)
........
r7274 | kpfleming | 2005-12-01 18:51:15 -0600 (Thu, 01 Dec 2005) | 2 lines
inherit channel variables into channels created by Page() application (issue #5888)
........
r7275 | oej | 2005-12-01 18:52:13 -0600 (Thu, 01 Dec 2005) | 2 lines
Bug #5907. Improve SIP INFO DTMF debugging output. (1.2 & Trunk)
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
											
										 
											2005-12-02 01:01:11 +00:00
										 |  |  | 	struct ast_variable *variables; | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void *page_thread(void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct calloutdata *cd = data; | 
					
						
							|  |  |  | 	ast_pbx_outgoing_app(cd->tech, AST_FORMAT_SLINEAR, cd->resource, 30000, | 
					
						
							| 
									
										
										
										
											2006-02-11 19:02:14 +00:00
										 |  |  | 		"MeetMe", cd->meetmeopts, NULL, 0, cd->cidnum, cd->cidname, cd->variables, NULL, NULL); | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 	free(cd); | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void launch_page(struct ast_channel *chan, const char *meetmeopts, const char *tech, const char *resource) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct calloutdata *cd; | 
					
						
							| 
									
										
											  
											
												Merged revisions 7265-7266,7268-7275 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r7265 | oej | 2005-12-01 17:18:14 -0600 (Thu, 01 Dec 2005) | 2 lines
Changing bug report address to the Asterisk issue tracker
........
r7266 | kpfleming | 2005-12-01 17:18:29 -0600 (Thu, 01 Dec 2005) | 3 lines
Makefile 'update' target now supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful
........
r7268 | kpfleming | 2005-12-01 17:34:58 -0600 (Thu, 01 Dec 2005) | 2 lines
ensure channel's scheduling context is freed (issue #5788)
........
r7269 | kpfleming | 2005-12-01 17:49:44 -0600 (Thu, 01 Dec 2005) | 2 lines
don't block waiting for the Festival server forever when it goes away (issue #5882)
........
r7270 | kpfleming | 2005-12-01 18:26:12 -0600 (Thu, 01 Dec 2005) | 2 lines
allow variables to exist on both 'halves' of the Local channel (issue #5810)
........
r7271 | kpfleming | 2005-12-01 18:28:48 -0600 (Thu, 01 Dec 2005) | 2 lines
protect agent_bridgedchannel() from segfaulting when there is no bridged channel (issue #5879)
........
r7272 | kpfleming | 2005-12-01 18:39:00 -0600 (Thu, 01 Dec 2005) | 3 lines
properly handle password changes when mailbox is last line of config file and not followed by a newline (issue #5870)
reformat password changing code to conform to coding guidelines (issue #5870)
........
r7273 | kpfleming | 2005-12-01 18:42:40 -0600 (Thu, 01 Dec 2005) | 2 lines
allow previous context-searching behavior to be used if desired (issue #5899)
........
r7274 | kpfleming | 2005-12-01 18:51:15 -0600 (Thu, 01 Dec 2005) | 2 lines
inherit channel variables into channels created by Page() application (issue #5888)
........
r7275 | oej | 2005-12-01 18:52:13 -0600 (Thu, 01 Dec 2005) | 2 lines
Bug #5907. Improve SIP INFO DTMF debugging output. (1.2 & Trunk)
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
											
										 
											2005-12-02 01:01:11 +00:00
										 |  |  | 	const char *varname; | 
					
						
							|  |  |  | 	struct ast_variable *lastvar = NULL; | 
					
						
							|  |  |  | 	struct ast_var_t *varptr; | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 	pthread_t t; | 
					
						
							|  |  |  | 	pthread_attr_t attr; | 
					
						
							| 
									
										
										
										
											2006-01-13 03:34:31 +00:00
										 |  |  | 	if ((cd = ast_calloc(1, sizeof(*cd)))) { | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 		ast_copy_string(cd->cidnum, chan->cid.cid_num ? chan->cid.cid_num : "", sizeof(cd->cidnum)); | 
					
						
							|  |  |  | 		ast_copy_string(cd->cidname, chan->cid.cid_name ? chan->cid.cid_name : "", sizeof(cd->cidname)); | 
					
						
							|  |  |  | 		ast_copy_string(cd->tech, tech, sizeof(cd->tech)); | 
					
						
							|  |  |  | 		ast_copy_string(cd->resource, resource, sizeof(cd->resource)); | 
					
						
							|  |  |  | 		ast_copy_string(cd->meetmeopts, meetmeopts, sizeof(cd->meetmeopts)); | 
					
						
							| 
									
										
											  
											
												Merged revisions 7265-7266,7268-7275 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r7265 | oej | 2005-12-01 17:18:14 -0600 (Thu, 01 Dec 2005) | 2 lines
Changing bug report address to the Asterisk issue tracker
........
r7266 | kpfleming | 2005-12-01 17:18:29 -0600 (Thu, 01 Dec 2005) | 3 lines
Makefile 'update' target now supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful
........
r7268 | kpfleming | 2005-12-01 17:34:58 -0600 (Thu, 01 Dec 2005) | 2 lines
ensure channel's scheduling context is freed (issue #5788)
........
r7269 | kpfleming | 2005-12-01 17:49:44 -0600 (Thu, 01 Dec 2005) | 2 lines
don't block waiting for the Festival server forever when it goes away (issue #5882)
........
r7270 | kpfleming | 2005-12-01 18:26:12 -0600 (Thu, 01 Dec 2005) | 2 lines
allow variables to exist on both 'halves' of the Local channel (issue #5810)
........
r7271 | kpfleming | 2005-12-01 18:28:48 -0600 (Thu, 01 Dec 2005) | 2 lines
protect agent_bridgedchannel() from segfaulting when there is no bridged channel (issue #5879)
........
r7272 | kpfleming | 2005-12-01 18:39:00 -0600 (Thu, 01 Dec 2005) | 3 lines
properly handle password changes when mailbox is last line of config file and not followed by a newline (issue #5870)
reformat password changing code to conform to coding guidelines (issue #5870)
........
r7273 | kpfleming | 2005-12-01 18:42:40 -0600 (Thu, 01 Dec 2005) | 2 lines
allow previous context-searching behavior to be used if desired (issue #5899)
........
r7274 | kpfleming | 2005-12-01 18:51:15 -0600 (Thu, 01 Dec 2005) | 2 lines
inherit channel variables into channels created by Page() application (issue #5888)
........
r7275 | oej | 2005-12-01 18:52:13 -0600 (Thu, 01 Dec 2005) | 2 lines
Bug #5907. Improve SIP INFO DTMF debugging output. (1.2 & Trunk)
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
											
										 
											2005-12-02 01:01:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		AST_LIST_TRAVERSE(&chan->varshead, varptr, entries) { | 
					
						
							|  |  |  | 			if (!(varname = ast_var_full_name(varptr))) | 
					
						
							|  |  |  | 				continue; | 
					
						
							|  |  |  | 			if (varname[0] == '_') { | 
					
						
							|  |  |  | 				struct ast_variable *newvar = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (varname[1] == '_') { | 
					
						
							|  |  |  | 					newvar = ast_variable_new(varname, ast_var_value(varptr)); | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					newvar = ast_variable_new(&varname[1], ast_var_value(varptr)); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (newvar) { | 
					
						
							|  |  |  | 					if (lastvar) | 
					
						
							|  |  |  | 						lastvar->next = newvar; | 
					
						
							|  |  |  | 					else | 
					
						
							|  |  |  | 						cd->variables = newvar; | 
					
						
							|  |  |  | 					lastvar = newvar; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 		pthread_attr_init(&attr); | 
					
						
							|  |  |  | 		pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); | 
					
						
							|  |  |  | 		if (ast_pthread_create(&t, &attr, page_thread, cd)) { | 
					
						
							|  |  |  | 			ast_log(LOG_WARNING, "Unable to create paging thread: %s\n", strerror(errno)); | 
					
						
							|  |  |  | 			free(cd); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | static int page_exec(struct ast_channel *chan, void *data) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 	struct localuser *u; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 	char *options; | 
					
						
							|  |  |  | 	char *tech, *resource; | 
					
						
							|  |  |  | 	char meetmeopts[80]; | 
					
						
							| 
									
										
										
										
											2005-10-13 05:37:49 +00:00
										 |  |  | 	struct ast_flags flags = { 0 }; | 
					
						
							| 
									
										
										
										
											2006-04-05 17:44:44 +00:00
										 |  |  | 	unsigned int confid = ast_random(); | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 	struct ast_app *app; | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 	char *tmp; | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 	int res=0; | 
					
						
							| 
									
										
										
										
											2006-04-11 21:51:17 +00:00
										 |  |  | 	char originator[AST_CHANNEL_NAME]; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-26 19:48:14 +00:00
										 |  |  | 	if (ast_strlen_zero(data)) { | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 		ast_log(LOG_WARNING, "This application requires at least one argument (destination(s) to page)\n"); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-19 18:19:02 +00:00
										 |  |  | 	LOCAL_USER_ADD(u); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 	if (!(app = pbx_findapp("MeetMe"))) { | 
					
						
							|  |  |  | 		ast_log(LOG_WARNING, "There is no MeetMe application available!\n"); | 
					
						
							| 
									
										
										
										
											2005-10-19 18:19:02 +00:00
										 |  |  | 		LOCAL_USER_REMOVE(u); | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-10 13:22:15 +00:00
										 |  |  | 	options = ast_strdupa(data); | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-13 17:41:43 +00:00
										 |  |  | 	ast_copy_string(originator, chan->name, sizeof(originator)); | 
					
						
							|  |  |  | 	if ((tmp = strchr(originator, '-'))) | 
					
						
							|  |  |  | 		*tmp = '\0'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 	tmp = strsep(&options, "|"); | 
					
						
							|  |  |  | 	if (options) | 
					
						
							| 
									
										
										
										
											2005-11-03 21:19:11 +00:00
										 |  |  | 		ast_app_parse_options(page_opts, &flags, NULL, options); | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-03 22:38:56 +00:00
										 |  |  | 	snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%s%sqxdw", confid, (ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m"), | 
					
						
							|  |  |  | 		(ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") ); | 
					
						
							| 
									
										
										
										
											2006-04-11 21:51:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 	while ((tech = strsep(&tmp, "&"))) { | 
					
						
							| 
									
										
										
										
											2006-04-11 21:51:17 +00:00
										 |  |  | 		/* don't call the originating device */ | 
					
						
							|  |  |  | 		if (!strcasecmp(tech, originator)) | 
					
						
							|  |  |  | 			continue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 		if ((resource = strchr(tech, '/'))) { | 
					
						
							|  |  |  | 			*resource++ = '\0'; | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 			launch_page(chan, meetmeopts, tech, resource); | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 			ast_log(LOG_WARNING, "Incomplete destination '%s' supplied.\n", tech); | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-04-11 21:51:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 	if (!ast_test_flag(&flags, PAGE_QUIET)) { | 
					
						
							|  |  |  | 		res = ast_streamfile(chan, "beep", chan->language); | 
					
						
							|  |  |  | 		if (!res) | 
					
						
							|  |  |  | 			res = ast_waitstream(chan, ""); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (!res) { | 
					
						
							| 
									
										
										
										
											2006-05-03 22:38:56 +00:00
										 |  |  | 		snprintf(meetmeopts, sizeof(meetmeopts), "%ud|A%s%sqxd", confid, (ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "t"),  | 
					
						
							|  |  |  | 			(ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") ); | 
					
						
							| 
									
										
										
										
											2006-03-30 21:29:39 +00:00
										 |  |  | 		pbx_exec(chan, app, meetmeopts); | 
					
						
							| 
									
										
										
										
											2005-10-14 00:23:47 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	LOCAL_USER_REMOVE(u); | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | static int unload_module(void *mod) | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2005-10-18 22:52:21 +00:00
										 |  |  | 	int res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res =  ast_unregister_application(app_page); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | 	STANDARD_HANGUP_LOCALUSERS; | 
					
						
							| 
									
										
										
										
											2005-10-13 13:14:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-18 22:52:21 +00:00
										 |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | static int load_module(void *mod) | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return ast_register_application(app_page, page_exec, page_synopsis, page_descrip); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | static const char *description(void) | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | 	return "Page Multiple Phones"; | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | static const char *key(void) | 
					
						
							| 
									
										
										
										
											2005-10-12 22:56:53 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return ASTERISK_GPL_KEY; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2006-04-14 14:08:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | STD_MOD1; | 
					
						
							| 
									
										
										
										
											2006-04-24 17:11:45 +00:00
										 |  |  | 
 |