Asterisk - The Open Source Telephony Project GIT-master-8f1982c
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
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 166 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 147 of file app_page.c.

147 {
152};
@ OPT_ARG_PREDIAL_CALLEE
Definition: app_page.c:149
@ OPT_ARG_ANNOUNCE
Definition: app_page.c:148
@ OPT_ARG_PREDIAL_CALLER
Definition: app_page.c:150
@ OPT_ARG_ARRAY_SIZE
Definition: app_page.c:151

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

135 {
136 PAGE_DUPLEX = (1 << 0),
137 PAGE_QUIET = (1 << 1),
138 PAGE_RECORD = (1 << 2),
139 PAGE_SKIP = (1 << 3),
140 PAGE_IGNORE_FORWARDS = (1 << 4),
141 PAGE_ANNOUNCE = (1 << 5),
142 PAGE_NOCALLERANNOUNCE = (1 << 6),
143 PAGE_PREDIAL_CALLEE = (1 << 7),
144 PAGE_PREDIAL_CALLER = (1 << 8),
145};
@ PAGE_NOCALLERANNOUNCE
Definition: app_page.c:142
@ PAGE_PREDIAL_CALLEE
Definition: app_page.c:143
@ PAGE_IGNORE_FORWARDS
Definition: app_page.c:140
@ PAGE_ANNOUNCE
Definition: app_page.c:141
@ PAGE_RECORD
Definition: app_page.c:138
@ PAGE_DUPLEX
Definition: app_page.c:136
@ PAGE_PREDIAL_CALLER
Definition: app_page.c:144
@ PAGE_SKIP
Definition: app_page.c:139
@ PAGE_QUIET
Definition: app_page.c:137

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 456 of file app_page.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 456 of file app_page.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 456 of file app_page.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 446 of file app_page.c.

447{
449}
static int page_exec(struct ast_channel *chan, const char *data)
Definition: app_page.c:247
static const char *const app_page
Definition: app_page.c:133
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Definition: module.h:640

References app_page, ast_register_application_xml, and page_exec().

◆ page_exec()

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

Definition at line 247 of file app_page.c.

248{
249 char *tech;
250 char *resource;
251 char *tmp;
252 char *predial_callee = NULL;
253 char confbridgeopts[128];
254 char originator[AST_CHANNEL_NAME];
255 struct page_options options = { { 0, }, { 0, } };
256 unsigned int confid = ast_random();
257 struct ast_app *app;
258 int res = 0;
259 int pos = 0;
260 int i = 0;
261 struct ast_dial **dial_list;
262 unsigned int num_dials;
263 int timeout = 0;
264 char *parse;
265
270 );
271
272 if (!(app = pbx_findapp("ConfBridge"))) {
273 ast_log(LOG_WARNING, "There is no ConfBridge application available!\n");
274 return -1;
275 };
276
277 parse = ast_strdupa(data ?: "");
278
280
281 ast_copy_string(originator, ast_channel_name(chan), sizeof(originator));
282 if ((tmp = strchr(originator, '-'))) {
283 *tmp = '\0';
284 }
285
286 if (!ast_strlen_zero(args.options)) {
287 ast_app_parse_options(page_opts, &options.flags, options.opts, args.options);
288 }
289
290 if (!ast_strlen_zero(args.timeout)) {
291 timeout = atoi(args.timeout);
292 }
293
294 snprintf(confbridgeopts, sizeof(confbridgeopts), "ConfBridge,%u", confid);
295
296 /* Count number of extensions in list by number of ampersands + 1 */
297 num_dials = 1;
298 tmp = args.devices ?: "";
299 while (*tmp) {
300 if (*tmp == '&') {
301 num_dials++;
302 }
303 tmp++;
304 }
305
306 if (!(dial_list = ast_calloc(num_dials, sizeof(struct ast_dial *)))) {
307 ast_log(LOG_ERROR, "Can't allocate %ld bytes for dial list\n", (long)(sizeof(struct ast_dial *) * num_dials));
308 return -1;
309 }
310
311 /* PREDIAL: Preprocess any callee gosub arguments. */
315 predial_callee =
317 }
318
319 /* PREDIAL: Run gosub on the caller's channel */
324 }
325
326 /* Go through parsing/calling each device */
327 while ((tech = strsep(&args.devices, "&"))) {
328 int state = 0;
329 struct ast_dial *dial = NULL;
330
331 tech = ast_strip(tech);
332 if (ast_strlen_zero(tech)) {
333 /* No tech/resource in this position. */
334 continue;
335 }
336
337 /* don't call the originating device */
338 if (!strcasecmp(tech, originator)) {
339 continue;
340 }
341
342 /* If no resource is available, continue on */
343 if (!(resource = strchr(tech, '/'))) {
344 ast_log(LOG_WARNING, "Incomplete destination: '%s' supplied.\n", tech);
345 continue;
346 }
347
348 /* Ensure device is not in use if skip option is enabled */
349 if (ast_test_flag(&options.flags, PAGE_SKIP)) {
350 state = ast_device_state(tech);
351 if (state == AST_DEVICE_UNKNOWN) {
352 ast_verb(3, "Destination '%s' has device state '%s'. Paging anyway.\n",
353 tech, ast_devstate2str(state));
354 } else if (state != AST_DEVICE_NOT_INUSE) {
355 ast_verb(3, "Destination '%s' has device state '%s'.\n",
356 tech, ast_devstate2str(state));
357 continue;
358 }
359 }
360
361 *resource++ = '\0';
362
363 /* Create a dialing structure */
364 if (!(dial = ast_dial_create())) {
365 ast_log(LOG_WARNING, "Failed to create dialing structure.\n");
366 continue;
367 }
368
369 /* Append technology and resource */
370 if (ast_dial_append(dial, tech, resource, NULL) == -1) {
371 ast_log(LOG_ERROR, "Failed to add %s/%s to outbound dial\n", tech, resource);
372 ast_dial_destroy(dial);
373 continue;
374 }
375
376 /* Set ANSWER_EXEC as global option */
378
379 if (predial_callee) {
381 }
382
383 if (timeout) {
385 }
386
389 }
390
393
394 /* Run this dial in async mode */
395 ast_dial_run(dial, chan, 1);
396
397 /* Put in our dialing array */
398 dial_list[pos++] = dial;
399 }
400
401 ast_free(predial_callee);
402
403 if (!ast_test_flag(&options.flags, PAGE_QUIET)) {
405 ast_log(LOG_WARNING, "Missing required sound file: '" PAGE_BEEP "'\n");
406 } else {
408 if (!res) {
409 res = ast_waitstream(chan, "");
410 }
411 }
412 }
413
414 if (!res) {
417
418 snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid);
419 pbx_exec(chan, app, confbridgeopts);
420 }
421
422 /* Go through each dial attempt cancelling, joining, and destroying */
423 for (i = 0; i < pos; i++) {
424 struct ast_dial *dial = dial_list[i];
425
426 /* We have to wait for the async thread to exit as it's possible ConfBridge won't throw them out immediately */
427 ast_dial_join(dial);
428
429 /* Hangup all channels */
430 ast_dial_hangup(dial);
431
432 /* Destroy dialing structure */
433 ast_dial_destroy(dial);
434 }
435
436 ast_free(dial_list);
437
438 return -1;
439}
static const char app[]
Definition: app_adsiprog.c:56
static void page_state_callback(struct ast_dial *dial)
Definition: app_page.c:232
static void setup_profile_caller(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:219
static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:181
#define PAGE_BEEP
Definition: app_page.c:166
static const struct ast_app_option page_opts[128]
Definition: app_page.c:164
char * strsep(char **str, const char *delims)
#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
const char * ast_channel_name(const struct ast_channel *chan)
#define AST_CHANNEL_NAME
Definition: channel.h:173
const char * ast_channel_language(const struct ast_channel *chan)
const char * ast_devstate2str(enum ast_device_state devstate) attribute_pure
Convert device state to text string for output.
Definition: devicestate.c:240
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:1269
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:280
struct ast_dial * ast_dial_create(void)
New dialing structure.
Definition: dial.c:223
void ast_dial_set_user_data(struct ast_dial *dial, void *user_data)
Set user data on a dial structure.
Definition: dial.c:1274
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:1284
void ast_dial_hangup(struct ast_dial *dial)
Hangup channels.
Definition: dial.c:1074
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:935
enum ast_dial_result ast_dial_join(struct ast_dial *dial)
Cancel async thread.
Definition: dial.c:1017
@ 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:1091
int ast_dial_option_global_enable(struct ast_dial *dial, enum ast_dial_option option, void *data)
Enables an option globally.
Definition: dial.c:1145
int ast_streamfile(struct ast_channel *c, const char *filename, const char *preflang)
Streams a file.
Definition: file.c:1301
int ast_fileexists(const char *filename, const char *fmt, const char *preflang)
Checks for the existence of a given file.
Definition: file.c:1137
int ast_waitstream(struct ast_channel *c, const char *breakon)
Waits for a stream to stop or digit to be pressed.
Definition: file.c:1848
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:278
#define AST_APP_ARG(name)
Define an application argument.
#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:297
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:3066
#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:425
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: utils.c:2312
void ast_replace_subargument_delimiter(char *s)
Replace '^' in a string with ','.
Definition: utils.c:2343

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(), pbx_exec(), pbx_findapp(), setup_profile_bridge(), setup_profile_caller(), strsep(), and ast_dial::timeout.

Referenced by load_module().

◆ page_state_callback()

static void page_state_callback ( struct ast_dial dial)
static

Definition at line 232 of file app_page.c.

233{
234 struct ast_channel *chan;
235 struct page_options *options;
236
238 !(chan = ast_dial_answered(dial)) ||
239 !(options = ast_dial_get_user_data(dial))) {
240 return;
241 }
242
245}
static void setup_profile_paged(struct ast_channel *chan, struct page_options *options)
Definition: app_page.c:197
enum ast_dial_result ast_dial_state(struct ast_dial *dial)
Return state of dial.
Definition: dial.c:1008
@ AST_DIAL_RESULT_ANSWERED
Definition: dial.h:61
struct ast_channel * ast_dial_answered(struct ast_dial *dial)
Return channel that answered.
Definition: dial.c:977
void * ast_dial_get_user_data(struct ast_dial *dial)
Return the user data on a dial structure.
Definition: dial.c:1279
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 181 of file app_page.c.

182{
183 /* Use default_bridge as a starting point */
184 ast_func_write(chan, "CONFBRIDGE(bridge,template)", "");
185 if (ast_test_flag(&options->flags, PAGE_RECORD)) {
186 ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes");
187 }
188}
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 219 of file app_page.c.

220{
221 /* Use default_user as a starting point if not already setup. */
222 ast_func_write(chan, "CONFBRIDGE(user,template)", "");
223 ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes");
224 ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes");
228 ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]);
229 }
230}

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

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

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

442{
444}
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 456 of file app_page.c.

◆ app_page

const char* const app_page = "Page"
static

Definition at line 133 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 456 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 164 of file app_page.c.

Referenced by page_exec().