Asterisk - The Open Source Telephony Project  GIT-master-a24979a
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 = 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.

Macro Definition Documentation

◆ PAGE_BEEP

#define PAGE_BEEP   "beep"

Definition at line 163 of 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.

144  {
145  OPT_ARG_ANNOUNCE = 0,
148  OPT_ARG_ARRAY_SIZE = 3,
149 };
@ OPT_ARG_PREDIAL_CALLEE
Definition: app_page.c:146
@ OPT_ARG_ANNOUNCE
Definition: app_page.c:145
@ OPT_ARG_PREDIAL_CALLER
Definition: app_page.c:147
@ OPT_ARG_ARRAY_SIZE
Definition: app_page.c:148

◆ 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 };
@ PAGE_NOCALLERANNOUNCE
Definition: app_page.c:139
@ PAGE_PREDIAL_CALLEE
Definition: app_page.c:140
@ PAGE_IGNORE_FORWARDS
Definition: app_page.c:137
@ PAGE_ANNOUNCE
Definition: app_page.c:138
@ PAGE_RECORD
Definition: app_page.c:135
@ PAGE_DUPLEX
Definition: app_page.c:133
@ PAGE_PREDIAL_CALLER
Definition: app_page.c:141
@ PAGE_SKIP
Definition: app_page.c:136
@ PAGE_QUIET
Definition: app_page.c:134

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 453 of file app_page.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 453 of file app_page.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 453 of file app_page.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 443 of file app_page.c.

444 {
446 }
static int page_exec(struct ast_channel *chan, const char *data)
Definition: app_page.c:244
static const char *const app_page
Definition: app_page.c:130
#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 244 of file app_page.c.

245 {
246  char *tech;
247  char *resource;
248  char *tmp;
249  char *predial_callee = NULL;
250  char confbridgeopts[128];
251  char originator[AST_CHANNEL_NAME];
252  struct page_options options = { { 0, }, { 0, } };
253  unsigned int confid = ast_random();
254  struct ast_app *app;
255  int res = 0;
256  int pos = 0;
257  int i = 0;
258  struct ast_dial **dial_list;
259  unsigned int num_dials;
260  int timeout = 0;
261  char *parse;
262 
267  );
268 
269  if (!(app = pbx_findapp("ConfBridge"))) {
270  ast_log(LOG_WARNING, "There is no ConfBridge application available!\n");
271  return -1;
272  };
273 
274  parse = ast_strdupa(data ?: "");
275 
277 
278  ast_copy_string(originator, ast_channel_name(chan), sizeof(originator));
279  if ((tmp = strchr(originator, '-'))) {
280  *tmp = '\0';
281  }
282 
283  if (!ast_strlen_zero(args.options)) {
284  ast_app_parse_options(page_opts, &options.flags, options.opts, args.options);
285  }
286 
287  if (!ast_strlen_zero(args.timeout)) {
288  timeout = atoi(args.timeout);
289  }
290 
291  snprintf(confbridgeopts, sizeof(confbridgeopts), "ConfBridge,%u", confid);
292 
293  /* Count number of extensions in list by number of ampersands + 1 */
294  num_dials = 1;
295  tmp = args.devices ?: "";
296  while (*tmp) {
297  if (*tmp == '&') {
298  num_dials++;
299  }
300  tmp++;
301  }
302 
303  if (!(dial_list = ast_calloc(num_dials, sizeof(struct ast_dial *)))) {
304  ast_log(LOG_ERROR, "Can't allocate %ld bytes for dial list\n", (long)(sizeof(struct ast_dial *) * num_dials));
305  return -1;
306  }
307 
308  /* PREDIAL: Preprocess any callee gosub arguments. */
312  predial_callee =
314  }
315 
316  /* PREDIAL: Run gosub on the caller's channel */
321  }
322 
323  /* Go through parsing/calling each device */
324  while ((tech = strsep(&args.devices, "&"))) {
325  int state = 0;
326  struct ast_dial *dial = NULL;
327 
328  tech = ast_strip(tech);
329  if (ast_strlen_zero(tech)) {
330  /* No tech/resource in this position. */
331  continue;
332  }
333 
334  /* don't call the originating device */
335  if (!strcasecmp(tech, originator)) {
336  continue;
337  }
338 
339  /* If no resource is available, continue on */
340  if (!(resource = strchr(tech, '/'))) {
341  ast_log(LOG_WARNING, "Incomplete destination: '%s' supplied.\n", tech);
342  continue;
343  }
344 
345  /* Ensure device is not in use if skip option is enabled */
346  if (ast_test_flag(&options.flags, PAGE_SKIP)) {
347  state = ast_device_state(tech);
348  if (state == AST_DEVICE_UNKNOWN) {
349  ast_verb(3, "Destination '%s' has device state '%s'. Paging anyway.\n",
350  tech, ast_devstate2str(state));
351  } else if (state != AST_DEVICE_NOT_INUSE) {
352  ast_verb(3, "Destination '%s' has device state '%s'.\n",
353  tech, ast_devstate2str(state));
354  continue;
355  }
356  }
357 
358  *resource++ = '\0';
359 
360  /* Create a dialing structure */
361  if (!(dial = ast_dial_create())) {
362  ast_log(LOG_WARNING, "Failed to create dialing structure.\n");
363  continue;
364  }
365 
366  /* Append technology and resource */
367  if (ast_dial_append(dial, tech, resource, NULL) == -1) {
368  ast_log(LOG_ERROR, "Failed to add %s/%s to outbound dial\n", tech, resource);
369  ast_dial_destroy(dial);
370  continue;
371  }
372 
373  /* Set ANSWER_EXEC as global option */
375 
376  if (predial_callee) {
378  }
379 
380  if (timeout) {
381  ast_dial_set_global_timeout(dial, timeout * 1000);
382  }
383 
386  }
387 
390 
391  /* Run this dial in async mode */
392  ast_dial_run(dial, chan, 1);
393 
394  /* Put in our dialing array */
395  dial_list[pos++] = dial;
396  }
397 
398  ast_free(predial_callee);
399 
400  if (!ast_test_flag(&options.flags, PAGE_QUIET)) {
401  if (!ast_fileexists(PAGE_BEEP, NULL, NULL)) {
402  ast_log(LOG_WARNING, "Missing required sound file: '" PAGE_BEEP "'\n");
403  } else {
404  res = ast_streamfile(chan, PAGE_BEEP, ast_channel_language(chan));
405  if (!res) {
406  res = ast_waitstream(chan, "");
407  }
408  }
409  }
410 
411  if (!res) {
414 
415  snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid);
416  pbx_exec(chan, app, confbridgeopts);
417  }
418 
419  /* Go through each dial attempt cancelling, joining, and destroying */
420  for (i = 0; i < pos; i++) {
421  struct ast_dial *dial = dial_list[i];
422 
423  /* We have to wait for the async thread to exit as it's possible ConfBridge won't throw them out immediately */
424  ast_dial_join(dial);
425 
426  /* Hangup all channels */
427  ast_dial_hangup(dial);
428 
429  /* Destroy dialing structure */
430  ast_dial_destroy(dial);
431  }
432 
433  ast_free(dial_list);
434 
435  return -1;
436 }
static const char app[]
Definition: app_adsiprog.c:56
static void page_state_callback(struct ast_dial *dial)
Definition: app_page.c:229
static void setup_profile_caller(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:216
static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:178
#define PAGE_BEEP
Definition: app_page.c:163
static const struct ast_app_option page_opts[128]
Definition: app_page.c:161
#define ast_free(a)
Definition: astmm.h:180
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:298
#define ast_calloc(num, len)
A wrapper for calloc()
Definition: astmm.h:202
#define ast_log
Definition: astobj2.c:42
static int tmp()
Definition: bt_open.c:389
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1844
const char * ast_channel_name(const struct ast_channel *chan)
const char * ast_channel_language(const struct ast_channel *chan)
#define AST_CHANNEL_NAME
Definition: channel.h:171
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
@ AST_DEVICE_UNKNOWN
Definition: devicestate.h:53
@ AST_DEVICE_NOT_INUSE
Definition: devicestate.h:54
void ast_dial_set_state_callback(struct ast_dial *dial, ast_dial_state_callback callback)
Set a callback for state changes.
Definition: dial.c:1264
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
void ast_dial_set_user_data(struct ast_dial *dial, void *user_data)
Set user data on a dial structure.
Definition: dial.c:1269
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:1279
void ast_dial_hangup(struct ast_dial *dial)
Hangup channels.
Definition: dial.c:1069
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
enum ast_dial_result ast_dial_join(struct ast_dial *dial)
Cancel async thread.
Definition: dial.c:1021
@ AST_DIAL_OPTION_ANSWER_EXEC
Definition: dial.h:44
@ AST_DIAL_OPTION_PREDIAL
Definition: dial.h:47
@ AST_DIAL_OPTION_DISABLE_CALL_FORWARDING
Definition: dial.h:46
int ast_dial_destroy(struct ast_dial *dial)
Destroys a dialing structure.
Definition: dial.c:1086
int ast_dial_option_global_enable(struct ast_dial *dial, enum ast_dial_option option, void *data)
Enables an option globally.
Definition: dial.c:1140
struct ast_dial * ast_dial_create(void)
New dialing structure.
Definition: dial.c:225
int ast_streamfile(struct ast_channel *c, const char *filename, const char *preflang)
Streams a file.
Definition: file.c:1291
int ast_fileexists(const char *filename, const char *fmt, const char *preflang)
Checks for the existence of a given file.
Definition: file.c:1127
int ast_waitstream(struct ast_channel *c, const char *breakon)
Waits for a stream to stop or digit to be pressed.
Definition: file.c:1817
#define AST_APP_ARG(name)
Define an application argument.
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:348
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
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:367
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:3126
char * strsep(char **str, const char *delims)
#define LOG_ERROR
#define ast_verb(level,...)
#define LOG_WARNING
int pbx_exec(struct ast_channel *c, struct ast_app *app, const char *data)
Execute an application.
Definition: pbx_app.c:471
struct ast_app * pbx_findapp(const char *app)
Look up an application.
Definition: ael_main.c:165
#define NULL
Definition: resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:406
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
Definition: strings.h:223
ast_app: A registered application
Definition: pbx_app.c:45
Main dialing structure. Contains global options, channels being dialed, and more!
Definition: dial.c:48
int timeout
Definition: dial.c:50
const char * args
static struct test_options options
#define ast_test_flag(p, flag)
Definition: utils.h:63
long int ast_random(void)
Definition: main/utils.c:2210
void ast_replace_subargument_delimiter(char *s)
Replace '^' in a string with ','.
Definition: main/utils.c:2241

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(), LOG_ERROR, LOG_WARNING, NULL, OPT_ARG_PREDIAL_CALLEE, OPT_ARG_PREDIAL_CALLER, options, 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(), ast_dial::timeout, and tmp().

◆ page_state_callback()

static void page_state_callback ( struct ast_dial dial)
static

Definition at line 229 of file app_page.c.

230 {
231  struct ast_channel *chan;
232  struct page_options *options;
233 
235  !(chan = ast_dial_answered(dial)) ||
236  !(options = ast_dial_get_user_data(dial))) {
237  return;
238  }
239 
242 }
static void setup_profile_paged(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:194
enum ast_dial_result ast_dial_state(struct ast_dial *dial)
Return state of dial.
Definition: dial.c:1012
@ AST_DIAL_RESULT_ANSWERED
Definition: dial.h:61
void * ast_dial_get_user_data(struct ast_dial *dial)
Return the user data on a dial structure.
Definition: dial.c:1274
struct ast_channel * ast_dial_answered(struct ast_dial *dial)
Return channel that answered.
Definition: dial.c:981
Main Channel structure associated with a channel.

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().

◆ 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.

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 }
int ast_func_write(struct ast_channel *chan, const char *function, const char *value)
executes a write operation on a function

References ast_func_write(), ast_test_flag, options, and PAGE_RECORD.

Referenced by page_exec(), and page_state_callback().

◆ setup_profile_caller()

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

Definition at line 216 of file app_page.c.

217 {
218  /* Use default_user as a starting point if not already setup. */
219  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
220  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
221  ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
223  && ast_test_flag(&options->flags, PAGE_ANNOUNCE)
225  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
226  }
227 }

References ast_func_write(), ast_strlen_zero(), ast_test_flag, OPT_ARG_ANNOUNCE, options, PAGE_ANNOUNCE, and PAGE_NOCALLERANNOUNCE.

Referenced by page_exec().

◆ setup_profile_paged()

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

Definition at line 194 of file app_page.c.

195 {
196  /* Use default_user as a starting point */
197  ast_func_write(chan, "CONFBRIDGE(user,template)", "");
198  ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
199  ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes");
200  if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) {
201  ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes");
202  }
203  if (ast_test_flag(&options->flags, PAGE_ANNOUNCE)
205  ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
206  }
207 }

References ast_func_write(), ast_strlen_zero(), ast_test_flag, OPT_ARG_ANNOUNCE, options, PAGE_ANNOUNCE, and PAGE_DUPLEX.

Referenced by page_state_callback().

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 438 of file app_page.c.

439 {
441 }
int ast_unregister_application(const char *app)
Unregister an application.
Definition: pbx_app.c:392

References app_page, and ast_unregister_application().

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 443 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 unload_module().

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 453 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 130 of file app_page.c.

Referenced by page_exec().