Asterisk - The Open Source Telephony Project  GIT-master-1f78ee9
Data Structures | 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"

Go to the source code of this file.

Data Structures

struct  page_options
 

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 = AST_BUILDOPT_SUM, .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.

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 452 of file app_page.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 452 of file app_page.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 452 of file app_page.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 442 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().

443 {
445 }
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:248
#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 248 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_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_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().

249 {
250  char *tech;
251  char *resource;
252  char *tmp;
253  char *predial_callee = NULL;
254  char confbridgeopts[128];
255  char originator[AST_CHANNEL_NAME];
256  struct page_options options = { { 0, }, { 0, } };
257  unsigned int confid = ast_random();
258  struct ast_app *app;
259  int res = 0;
260  int pos = 0;
261  int i = 0;
262  struct ast_dial **dial_list;
263  unsigned int num_dials;
264  int timeout = 0;
265  char *parse;
266 
269  AST_APP_ARG(options);
270  AST_APP_ARG(timeout);
271  );
272 
273  if (!(app = pbx_findapp("ConfBridge"))) {
274  ast_log(LOG_WARNING, "There is no ConfBridge application available!\n");
275  return -1;
276  };
277 
278  parse = ast_strdupa(data ?: "");
279 
280  AST_STANDARD_APP_ARGS(args, parse);
281 
282  ast_copy_string(originator, ast_channel_name(chan), sizeof(originator));
283  if ((tmp = strchr(originator, '-'))) {
284  *tmp = '\0';
285  }
286 
287  if (!ast_strlen_zero(args.options)) {
288  ast_app_parse_options(page_opts, &options.flags, options.opts, args.options);
289  }
290 
291  if (!ast_strlen_zero(args.timeout)) {
292  timeout = atoi(args.timeout);
293  }
294 
295  snprintf(confbridgeopts, sizeof(confbridgeopts), "ConfBridge,%u", confid);
296 
297  /* Count number of extensions in list by number of ampersands + 1 */
298  num_dials = 1;
299  tmp = args.devices ?: "";
300  while (*tmp) {
301  if (*tmp == '&') {
302  num_dials++;
303  }
304  tmp++;
305  }
306 
307  if (!(dial_list = ast_calloc(num_dials, sizeof(struct ast_dial *)))) {
308  ast_log(LOG_ERROR, "Can't allocate %ld bytes for dial list\n", (long)(sizeof(struct ast_dial *) * num_dials));
309  return -1;
310  }
311 
312  /* PREDIAL: Preprocess any callee gosub arguments. */
316  predial_callee =
317  (char *) ast_app_expand_sub_args(chan, options.opts[OPT_ARG_PREDIAL_CALLEE]);
318  }
319 
320  /* PREDIAL: Run gosub on the caller's channel */
324  ast_app_exec_sub(NULL, chan, options.opts[OPT_ARG_PREDIAL_CALLER], 0);
325  }
326 
327  /* Go through parsing/calling each device */
328  while ((tech = strsep(&args.devices, "&"))) {
329  int state = 0;
330  struct ast_dial *dial = NULL;
331 
332  tech = ast_strip(tech);
333  if (ast_strlen_zero(tech)) {
334  /* No tech/resource in this position. */
335  continue;
336  }
337 
338  /* don't call the originating device */
339  if (!strcasecmp(tech, originator)) {
340  continue;
341  }
342 
343  /* If no resource is available, continue on */
344  if (!(resource = strchr(tech, '/'))) {
345  ast_log(LOG_WARNING, "Incomplete destination: '%s' supplied.\n", tech);
346  continue;
347  }
348 
349  /* Ensure device is not in use if skip option is enabled */
350  if (ast_test_flag(&options.flags, PAGE_SKIP)) {
351  state = ast_device_state(tech);
352  if (state == AST_DEVICE_UNKNOWN) {
353  ast_verb(3, "Destination '%s' has device state '%s'. Paging anyway.\n",
354  tech, ast_devstate2str(state));
355  } else if (state != AST_DEVICE_NOT_INUSE) {
356  ast_verb(3, "Destination '%s' has device state '%s'.\n",
357  tech, ast_devstate2str(state));
358  continue;
359  }
360  }
361 
362  *resource++ = '\0';
363 
364  /* Create a dialing structure */
365  if (!(dial = ast_dial_create())) {
366  ast_log(LOG_WARNING, "Failed to create dialing structure.\n");
367  continue;
368  }
369 
370  /* Append technology and resource */
371  if (ast_dial_append(dial, tech, resource, NULL) == -1) {
372  ast_log(LOG_ERROR, "Failed to add %s/%s to outbound dial\n", tech, resource);
373  ast_dial_destroy(dial);
374  continue;
375  }
376 
377  /* Set ANSWER_EXEC as global option */
379 
380  if (predial_callee) {
382  }
383 
384  if (timeout) {
385  ast_dial_set_global_timeout(dial, timeout * 1000);
386  }
387 
388  if (ast_test_flag(&options.flags, PAGE_IGNORE_FORWARDS)) {
390  }
391 
393  ast_dial_set_user_data(dial, &options);
394 
395  /* Run this dial in async mode */
396  ast_dial_run(dial, chan, 1);
397 
398  /* Put in our dialing array */
399  dial_list[pos++] = dial;
400  }
401 
402  ast_free(predial_callee);
403 
404  if (!ast_test_flag(&options.flags, PAGE_QUIET)) {
405  res = ast_streamfile(chan, "beep", ast_channel_language(chan));
406  if (!res)
407  res = ast_waitstream(chan, "");
408  }
409 
410  if (!res) {
411  setup_profile_bridge(chan, &options);
412  setup_profile_caller(chan, &options);
413 
414  snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid);
415  pbx_exec(chan, app, confbridgeopts);
416  }
417 
418  /* Go through each dial attempt cancelling, joining, and destroying */
419  for (i = 0; i < pos; i++) {
420  struct ast_dial *dial = dial_list[i];
421 
422  /* We have to wait for the async thread to exit as it's possible ConfBridge won't throw them out immediately */
423  ast_dial_join(dial);
424 
425  /* Hangup all channels */
426  ast_dial_hangup(dial);
427 
428  /* Destroy dialing structure */
429  ast_dial_destroy(dial);
430  }
431 
432  ast_free(dial_list);
433 
434  return -1;
435 }
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:166
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:220
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:165
#define ast_verb(level,...)
Definition: logger.h:455
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:1965
#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:1934
#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:2829
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:178
#define LOG_ERROR
Definition: logger.h:285
static void page_state_callback(struct ast_dial *dial)
Definition: app_page.c:233
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
#define ast_strlen_zero(a)
Definition: muted.c:73
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:1775
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 233 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().

234 {
235  struct ast_channel *chan;
236  struct page_options *options;
237 
239  !(chan = ast_dial_answered(dial)) ||
240  !(options = ast_dial_get_user_data(dial))) {
241  return;
242  }
243 
244  setup_profile_bridge(chan, options);
245  setup_profile_paged(chan, options);
246 }
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:178
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:196

◆ setup_profile_bridge()

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

Definition at line 178 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().

179 {
180  /* Use default_bridge as a starting point */
181  ast_func_write(chan, "CONFBRIDGE(bridge,template)", "");
182  if (ast_test_flag(&options->flags, PAGE_RECORD)) {
183  ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
184  }
185 }
struct ast_flags flags
Definition: app_page.c:166
#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 220 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().

221 {
222  /* Use default_user as a starting point if not already setup. */
223  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
224  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
225  ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
226  if (!ast_test_flag(&options->flags, PAGE_NOCALLERANNOUNCE)
227  && ast_test_flag(&options->flags, PAGE_ANNOUNCE)
228  && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
229  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
230  }
231 }
struct ast_flags flags
Definition: app_page.c:166
#define ast_test_flag(p, flag)
Definition: utils.h:63
char * opts[OPT_ARG_ARRAY_SIZE]
Definition: app_page.c:165
#define ast_strlen_zero(a)
Definition: muted.c:73
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 196 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().

197 {
198  /* Use default_user as a starting point */
199  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
200  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
201  ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes");
202  if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) {
203  ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes");
204  }
205  if (ast_test_flag(&options->flags, PAGE_ANNOUNCE)
206  && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) {
207  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
208  }
209 }
struct ast_flags flags
Definition: app_page.c:166
#define ast_test_flag(p, flag)
Definition: utils.h:63
char * opts[OPT_ARG_ARRAY_SIZE]
Definition: app_page.c:165
#define ast_strlen_zero(a)
Definition: muted.c:73
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 437 of file app_page.c.

References app_page, and ast_unregister_application().

Referenced by load_module().

438 {
440 }
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 = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "app_confbridge", }
static

Definition at line 452 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 452 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().