Asterisk - The Open Source Telephony Project  18.5.0
Data Structures | Macros | Enumerations | Functions | Variables
app_page.c File Reference

page() - Paging application More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/file.h"
#include "asterisk/app.h"
#include "asterisk/chanvars.h"
#include "asterisk/utils.h"
#include "asterisk/devicestate.h"
#include "asterisk/dial.h"
Include dependency graph for app_page.c:

Go to the source code of this file.

Data Structures

struct  page_options
 

Macros

#define PAGE_BEEP   "beep"
 

Enumerations

enum  { OPT_ARG_ANNOUNCE = 0, OPT_ARG_PREDIAL_CALLEE = 1, OPT_ARG_PREDIAL_CALLER = 2, OPT_ARG_ARRAY_SIZE = 3 }
 
enum  page_opt_flags {
  PAGE_DUPLEX = (1 << 0), PAGE_QUIET = (1 << 1), PAGE_RECORD = (1 << 2), PAGE_SKIP = (1 << 3),
  PAGE_IGNORE_FORWARDS = (1 << 4), PAGE_ANNOUNCE = (1 << 5), PAGE_NOCALLERANNOUNCE = (1 << 6), PAGE_PREDIAL_CALLEE = (1 << 7),
  PAGE_PREDIAL_CALLER = (1 << 8)
}
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_module (void)
 
static int page_exec (struct ast_channel *chan, const char *data)
 
static void page_state_callback (struct ast_dial *dial)
 
static void setup_profile_bridge (struct ast_channel *chan, struct page_options *options)
 
static void setup_profile_caller (struct ast_channel *chan, struct page_options *options)
 
static void setup_profile_paged (struct ast_channel *chan, struct page_options *options)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Page Multiple Phones" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "app_confbridge", }
 
static const char *const app_page = "Page"
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static const struct ast_app_option page_opts [128] = { [ 'b' ] = { .flag = PAGE_PREDIAL_CALLEE , .arg_index = OPT_ARG_PREDIAL_CALLEE + 1 }, [ 'B' ] = { .flag = PAGE_PREDIAL_CALLER , .arg_index = OPT_ARG_PREDIAL_CALLER + 1 }, [ 'd' ] = { .flag = PAGE_DUPLEX }, [ 'q' ] = { .flag = PAGE_QUIET }, [ 'r' ] = { .flag = PAGE_RECORD }, [ 's' ] = { .flag = PAGE_SKIP }, [ 'i' ] = { .flag = PAGE_IGNORE_FORWARDS }, [ 'A' ] = { .flag = PAGE_ANNOUNCE , .arg_index = OPT_ARG_ANNOUNCE + 1 }, [ 'n' ] = { .flag = PAGE_NOCALLERANNOUNCE }, }
 

Detailed Description

page() - Paging application

Author
Mark Spencer marks.nosp@m.ter@.nosp@m.digiu.nosp@m.m.co.nosp@m.m

Definition in file app_page.c.

Macro Definition Documentation

◆ PAGE_BEEP

#define PAGE_BEEP   "beep"

Definition at line 163 of file app_page.c.

Referenced by page_exec().

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
OPT_ARG_ANNOUNCE 
OPT_ARG_PREDIAL_CALLEE 
OPT_ARG_PREDIAL_CALLER 
OPT_ARG_ARRAY_SIZE 

Definition at line 144 of file app_page.c.

◆ page_opt_flags

Enumerator
PAGE_DUPLEX 
PAGE_QUIET 
PAGE_RECORD 
PAGE_SKIP 
PAGE_IGNORE_FORWARDS 
PAGE_ANNOUNCE 
PAGE_NOCALLERANNOUNCE 
PAGE_PREDIAL_CALLEE 
PAGE_PREDIAL_CALLER 

Definition at line 132 of file app_page.c.

132  {
133  PAGE_DUPLEX = (1 << 0),
134  PAGE_QUIET = (1 << 1),
135  PAGE_RECORD = (1 << 2),
136  PAGE_SKIP = (1 << 3),
137  PAGE_IGNORE_FORWARDS = (1 << 4),
138  PAGE_ANNOUNCE = (1 << 5),
139  PAGE_NOCALLERANNOUNCE = (1 << 6),
140  PAGE_PREDIAL_CALLEE = (1 << 7),
141  PAGE_PREDIAL_CALLER = (1 << 8),
142 };

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 459 of file app_page.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 459 of file app_page.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 459 of file app_page.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 449 of file app_page.c.

References app_page, AST_MODFLAG_DEFAULT, AST_MODULE_INFO(), AST_MODULE_SUPPORT_CORE, ast_register_application_xml, ASTERISK_GPL_KEY, page_exec(), and unload_module().

450 {
452 }
static const char *const app_page
Definition: app_page.c:130
static int page_exec(struct ast_channel *chan, const char *data)
Definition: app_page.c:250
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Definition: module.h:626

◆ page_exec()

static int page_exec ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 250 of file app_page.c.

References app, args, AST_APP_ARG, ast_app_exec_sub(), ast_app_expand_sub_args(), ast_app_parse_options(), ast_calloc, ast_channel_language(), AST_CHANNEL_NAME, ast_channel_name(), ast_copy_string(), AST_DECLARE_APP_ARGS, AST_DEVICE_NOT_INUSE, AST_DEVICE_UNKNOWN, ast_devstate2str(), ast_dial_append(), ast_dial_create(), ast_dial_destroy(), ast_dial_hangup(), ast_dial_join(), AST_DIAL_OPTION_ANSWER_EXEC, AST_DIAL_OPTION_DISABLE_CALL_FORWARDING, ast_dial_option_global_enable(), AST_DIAL_OPTION_PREDIAL, ast_dial_run(), ast_dial_set_global_timeout(), ast_dial_set_state_callback(), ast_dial_set_user_data(), ast_fileexists(), ast_free, ast_log, ast_random(), ast_replace_subargument_delimiter(), AST_STANDARD_APP_ARGS, ast_strdupa, ast_streamfile(), ast_strip(), ast_strlen_zero, ast_test_flag, ast_verb, ast_waitstream(), page_options::flags, LOG_ERROR, LOG_WARNING, NULL, OPT_ARG_PREDIAL_CALLEE, OPT_ARG_PREDIAL_CALLER, page_options::opts, PAGE_BEEP, PAGE_IGNORE_FORWARDS, page_opts, PAGE_PREDIAL_CALLEE, PAGE_PREDIAL_CALLER, PAGE_QUIET, PAGE_SKIP, page_state_callback(), parse(), pbx_exec(), pbx_findapp(), setup_profile_bridge(), setup_profile_caller(), strsep(), timeout, and tmp().

Referenced by load_module().

251 {
252  char *tech;
253  char *resource;
254  char *tmp;
255  char *predial_callee = NULL;
256  char confbridgeopts[128];
257  char originator[AST_CHANNEL_NAME];
258  struct page_options options = { { 0, }, { 0, } };
259  unsigned int confid = ast_random();
260  struct ast_app *app;
261  int res = 0;
262  int pos = 0;
263  int i = 0;
264  struct ast_dial **dial_list;
265  unsigned int num_dials;
266  int timeout = 0;
267  char *parse;
268 
271  AST_APP_ARG(options);
272  AST_APP_ARG(timeout);
273  );
274 
275  if (!(app = pbx_findapp("ConfBridge"))) {
276  ast_log(LOG_WARNING, "There is no ConfBridge application available!\n");
277  return -1;
278  };
279 
280  parse = ast_strdupa(data ?: "");
281 
282  AST_STANDARD_APP_ARGS(args, parse);
283 
284  ast_copy_string(originator, ast_channel_name(chan), sizeof(originator));
285  if ((tmp = strchr(originator, '-'))) {
286  *tmp = '\0';
287  }
288 
289  if (!ast_strlen_zero(args.options)) {
290  ast_app_parse_options(page_opts, &options.flags, options.opts, args.options);
291  }
292 
293  if (!ast_strlen_zero(args.timeout)) {
294  timeout = atoi(args.timeout);
295  }
296 
297  snprintf(confbridgeopts, sizeof(confbridgeopts), "ConfBridge,%u", confid);
298 
299  /* Count number of extensions in list by number of ampersands + 1 */
300  num_dials = 1;
301  tmp = args.devices ?: "";
302  while (*tmp) {
303  if (*tmp == '&') {
304  num_dials++;
305  }
306  tmp++;
307  }
308 
309  if (!(dial_list = ast_calloc(num_dials, sizeof(struct ast_dial *)))) {
310  ast_log(LOG_ERROR, "Can't allocate %ld bytes for dial list\n", (long)(sizeof(struct ast_dial *) * num_dials));
311  return -1;
312  }
313 
314  /* PREDIAL: Preprocess any callee gosub arguments. */
318  predial_callee =
319  (char *) ast_app_expand_sub_args(chan, options.opts[OPT_ARG_PREDIAL_CALLEE]);
320  }
321 
322  /* PREDIAL: Run gosub on the caller's channel */
326  ast_app_exec_sub(NULL, chan, options.opts[OPT_ARG_PREDIAL_CALLER], 0);
327  }
328 
329  /* Go through parsing/calling each device */
330  while ((tech = strsep(&args.devices, "&"))) {
331  int state = 0;
332  struct ast_dial *dial = NULL;
333 
334  tech = ast_strip(tech);
335  if (ast_strlen_zero(tech)) {
336  /* No tech/resource in this position. */
337  continue;
338  }
339 
340  /* don't call the originating device */
341  if (!strcasecmp(tech, originator)) {
342  continue;
343  }
344 
345  /* If no resource is available, continue on */
346  if (!(resource = strchr(tech, '/'))) {
347  ast_log(LOG_WARNING, "Incomplete destination: '%s' supplied.\n", tech);
348  continue;
349  }
350 
351  /* Ensure device is not in use if skip option is enabled */
352  if (ast_test_flag(&options.flags, PAGE_SKIP)) {
353  state = ast_device_state(tech);
354  if (state == AST_DEVICE_UNKNOWN) {
355  ast_verb(3, "Destination '%s' has device state '%s'. Paging anyway.\n",
356  tech, ast_devstate2str(state));
357  } else if (state != AST_DEVICE_NOT_INUSE) {
358  ast_verb(3, "Destination '%s' has device state '%s'.\n",
359  tech, ast_devstate2str(state));
360  continue;
361  }
362  }
363 
364  *resource++ = '\0';
365 
366  /* Create a dialing structure */
367  if (!(dial = ast_dial_create())) {
368  ast_log(LOG_WARNING, "Failed to create dialing structure.\n");
369  continue;
370  }
371 
372  /* Append technology and resource */
373  if (ast_dial_append(dial, tech, resource, NULL) == -1) {
374  ast_log(LOG_ERROR, "Failed to add %s/%s to outbound dial\n", tech, resource);
375  ast_dial_destroy(dial);
376  continue;
377  }
378 
379  /* Set ANSWER_EXEC as global option */
381 
382  if (predial_callee) {
384  }
385 
386  if (timeout) {
387  ast_dial_set_global_timeout(dial, timeout * 1000);
388  }
389 
390  if (ast_test_flag(&options.flags, PAGE_IGNORE_FORWARDS)) {
392  }
393 
395  ast_dial_set_user_data(dial, &options);
396 
397  /* Run this dial in async mode */
398  ast_dial_run(dial, chan, 1);
399 
400  /* Put in our dialing array */
401  dial_list[pos++] = dial;
402  }
403 
404  ast_free(predial_callee);
405 
406  if (!ast_test_flag(&options.flags, PAGE_QUIET)) {
407  if (!ast_fileexists(PAGE_BEEP, NULL, NULL)) {
408  ast_log(LOG_WARNING, "Missing required sound file: '" PAGE_BEEP "'\n");
409  } else {
410  res = ast_streamfile(chan, PAGE_BEEP, ast_channel_language(chan));
411  if (!res) {
412  res = ast_waitstream(chan, "");
413  }
414  }
415  }
416 
417  if (!res) {
418  setup_profile_bridge(chan, &options);
419  setup_profile_caller(chan, &options);
420 
421  snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid);
422  pbx_exec(chan, app, confbridgeopts);
423  }
424 
425  /* Go through each dial attempt cancelling, joining, and destroying */
426  for (i = 0; i < pos; i++) {
427  struct ast_dial *dial = dial_list[i];
428 
429  /* We have to wait for the async thread to exit as it's possible ConfBridge won't throw them out immediately */
430  ast_dial_join(dial);
431 
432  /* Hangup all channels */
433  ast_dial_hangup(dial);
434 
435  /* Destroy dialing structure */
436  ast_dial_destroy(dial);
437  }
438 
439  ast_free(dial_list);
440 
441  return -1;
442 }
#define PAGE_BEEP
Definition: app_page.c:163
const char * ast_devstate2str(enum ast_device_state devstate) attribute_pure
Convert device state to text string for output.
Definition: devicestate.c:237
ast_device_state
Device States.
Definition: devicestate.h:52
int ast_dial_destroy(struct ast_dial *dial)
Destroys a dialing structure.
Definition: dial.c:1091
struct ast_flags flags
Definition: app_page.c:168
int ast_streamfile(struct ast_channel *c, const char *filename, const char *preflang)
Streams a file.
Definition: file.c:1250
int ast_dial_option_global_enable(struct ast_dial *dial, enum ast_dial_option option, void *data)
Enables an option globally.
Definition: dial.c:1151
static void setup_profile_caller(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:222
int pbx_exec(struct ast_channel *c, struct ast_app *app, const char *data)
Execute an application.
Definition: pbx_app.c:471
Main dialing structure. Contains global options, channels being dialed, and more! ...
Definition: dial.c:48
void ast_dial_set_global_timeout(struct ast_dial *dial, int timeout)
Set the maximum time (globally) allowed for trying to ring phones.
Definition: dial.c:1313
const char * ast_app_expand_sub_args(struct ast_channel *chan, const char *args)
Add missing context/exten to subroutine argument string.
Definition: main/app.c:351
#define ast_test_flag(p, flag)
Definition: utils.h:63
void ast_dial_hangup(struct ast_dial *dial)
Hangup channels.
Definition: dial.c:1069
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
#define LOG_WARNING
Definition: logger.h:274
static int timeout
Definition: cdr_mysql.c:86
static int tmp()
Definition: bt_open.c:389
const char * args
#define NULL
Definition: resample.c:96
char * opts[OPT_ARG_ARRAY_SIZE]
Definition: app_page.c:167
#define ast_verb(level,...)
Definition: logger.h:463
#define ast_strlen_zero(foo)
Definition: strings.h:52
void ast_dial_set_user_data(struct ast_dial *dial, void *user_data)
Set user data on a dial structure.
Definition: dial.c:1298
void ast_dial_set_state_callback(struct ast_dial *dial, ast_dial_state_callback callback)
Set a callback for state changes.
Definition: dial.c:1293
void ast_replace_subargument_delimiter(char *s)
Replace &#39;^&#39; in a string with &#39;,&#39;.
Definition: main/utils.c:2095
#define ast_log
Definition: astobj2.c:42
enum ast_dial_result ast_dial_join(struct ast_dial *dial)
Cancel async thread.
Definition: dial.c:1021
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
Definition: strings.h:219
long int ast_random(void)
Definition: main/utils.c:2064
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
int ast_app_parse_options(const struct ast_app_option *options, struct ast_flags *flags, char **args, char *optstr)
Parses a string containing application options and sets flags/arguments.
Definition: main/app.c:2906
enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async)
Execute dialing synchronously or asynchronously.
Definition: dial.c:939
static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:180
#define LOG_ERROR
Definition: logger.h:285
static void page_state_callback(struct ast_dial *dial)
Definition: app_page.c:235
int ast_dial_append(struct ast_dial *dial, const char *tech, const char *device, const struct ast_assigned_ids *assignedids)
Append a channel.
Definition: dial.c:282
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
#define ast_free(a)
Definition: astmm.h:182
#define ast_calloc(num, len)
A wrapper for calloc()
Definition: astmm.h:204
struct ast_dial * ast_dial_create(void)
New dialing structure.
Definition: dial.c:225
#define AST_CHANNEL_NAME
Definition: channel.h:172
char * strsep(char **str, const char *delims)
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:401
ast_app: A registered application
Definition: pbx_app.c:45
const char * ast_channel_name(const struct ast_channel *chan)
int ast_waitstream(struct ast_channel *c, const char *breakon)
Waits for a stream to stop or digit to be pressed.
Definition: file.c:1776
int ast_fileexists(const char *filename, const char *fmt, const char *preflang)
Checks for the existence of a given file.
Definition: file.c:1086
int ast_app_exec_sub(struct ast_channel *autoservice_chan, struct ast_channel *sub_chan, const char *sub_args, int ignore_hangup)
Run a subroutine on a channel, placing an optional second channel into autoservice.
Definition: main/app.c:370
const char * ast_channel_language(const struct ast_channel *chan)
static struct test_options options
static const struct ast_app_option page_opts[128]
Definition: app_page.c:161
struct ast_app * pbx_findapp(const char *app)
Look up an application.
Definition: ael_main.c:165
static const char app[]
Definition: app_mysql.c:62
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
#define AST_APP_ARG(name)
Define an application argument.

◆ page_state_callback()

static void page_state_callback ( struct ast_dial dial)
static

Definition at line 235 of file app_page.c.

References ast_dial_answered(), ast_dial_get_user_data(), AST_DIAL_RESULT_ANSWERED, ast_dial_state(), options, setup_profile_bridge(), and setup_profile_paged().

Referenced by page_exec().

236 {
237  struct ast_channel *chan;
238  struct page_options *options;
239 
241  !(chan = ast_dial_answered(dial)) ||
242  !(options = ast_dial_get_user_data(dial))) {
243  return;
244  }
245 
246  setup_profile_bridge(chan, options);
247  setup_profile_paged(chan, options);
248 }
Main Channel structure associated with a channel.
void * ast_dial_get_user_data(struct ast_dial *dial)
Return the user data on a dial structure.
Definition: dial.c:1303
enum ast_dial_result ast_dial_state(struct ast_dial *dial)
Return state of dial.
Definition: dial.c:1012
static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:180
struct ast_channel * ast_dial_answered(struct ast_dial *dial)
Return channel that answered.
Definition: dial.c:981
static struct test_options options
static void setup_profile_paged(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:198

◆ setup_profile_bridge()

static void setup_profile_bridge ( struct ast_channel chan,
struct page_options options 
)
static

Definition at line 180 of file app_page.c.

References ast_func_write(), ast_test_flag, page_options::flags, and PAGE_RECORD.

Referenced by page_exec(), and page_state_callback().

181 {
182  /* Use default_bridge as a starting point */
183  ast_func_write(chan, "CONFBRIDGE(bridge,template)", "");
184  if (ast_test_flag(&options->flags, PAGE_RECORD)) {
185  ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
186  }
187 }
struct ast_flags flags
Definition: app_page.c:168
#define ast_test_flag(p, flag)
Definition: utils.h:63
int ast_func_write(struct ast_channel *chan, const char *function, const char *value)
executes a write operation on a function

◆ setup_profile_caller()

static void setup_profile_caller ( struct ast_channel chan,
struct page_options options 
)
static

Definition at line 222 of file app_page.c.

References ast_func_write(), ast_strlen_zero, ast_test_flag, page_options::flags, OPT_ARG_ANNOUNCE, page_options::opts, PAGE_ANNOUNCE, and PAGE_NOCALLERANNOUNCE.

Referenced by page_exec().

223 {
224  /* Use default_user as a starting point if not already setup. */
225  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
226  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
227  ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
228  if (!ast_test_flag(&options->flags, PAGE_NOCALLERANNOUNCE)
229  && ast_test_flag(&options->flags, PAGE_ANNOUNCE)
230  && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
231  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
232  }
233 }
struct ast_flags flags
Definition: app_page.c:168
#define ast_test_flag(p, flag)
Definition: utils.h:63
char * opts[OPT_ARG_ARRAY_SIZE]
Definition: app_page.c:167
#define ast_strlen_zero(foo)
Definition: strings.h:52
int ast_func_write(struct ast_channel *chan, const char *function, const char *value)
executes a write operation on a function

◆ setup_profile_paged()

static void setup_profile_paged ( struct ast_channel chan,
struct page_options options 
)
static

Definition at line 198 of file app_page.c.

References ast_func_write(), ast_strlen_zero, ast_test_flag, page_options::flags, OPT_ARG_ANNOUNCE, page_options::opts, PAGE_ANNOUNCE, and PAGE_DUPLEX.

Referenced by page_state_callback().

199 {
200  /* Use default_user as a starting point */
201  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
202  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
203  ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes");
204  if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) {
205  ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes");
206  }
207  if (ast_test_flag(&options->flags, PAGE_ANNOUNCE)
208  && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
209  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
210  }
211 }
struct ast_flags flags
Definition: app_page.c:168
#define ast_test_flag(p, flag)
Definition: utils.h:63
char * opts[OPT_ARG_ARRAY_SIZE]
Definition: app_page.c:167
#define ast_strlen_zero(foo)
Definition: strings.h:52
int ast_func_write(struct ast_channel *chan, const char *function, const char *value)
executes a write operation on a function

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 444 of file app_page.c.

References app_page, and ast_unregister_application().

Referenced by load_module().

445 {
447 }
static const char *const app_page
Definition: app_page.c:130
int ast_unregister_application(const char *app)
Unregister an application.
Definition: pbx_app.c:392

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Page Multiple Phones" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "app_confbridge", }
static

Definition at line 459 of file app_page.c.

◆ app_page

const char* const app_page = "Page"
static

Definition at line 130 of file app_page.c.

Referenced by load_module(), and unload_module().

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 459 of file app_page.c.

◆ page_opts

const struct ast_app_option page_opts[128] = { [ 'b' ] = { .flag = PAGE_PREDIAL_CALLEE , .arg_index = OPT_ARG_PREDIAL_CALLEE + 1 }, [ 'B' ] = { .flag = PAGE_PREDIAL_CALLER , .arg_index = OPT_ARG_PREDIAL_CALLER + 1 }, [ 'd' ] = { .flag = PAGE_DUPLEX }, [ 'q' ] = { .flag = PAGE_QUIET }, [ 'r' ] = { .flag = PAGE_RECORD }, [ 's' ] = { .flag = PAGE_SKIP }, [ 'i' ] = { .flag = PAGE_IGNORE_FORWARDS }, [ 'A' ] = { .flag = PAGE_ANNOUNCE , .arg_index = OPT_ARG_ANNOUNCE + 1 }, [ 'n' ] = { .flag = PAGE_NOCALLERANNOUNCE }, }
static

Definition at line 161 of file app_page.c.

Referenced by page_exec().