This graph shows which files directly or indirectly include this file:

Go to the source code of this file.
Data Structures | |
| struct | ast_app_option |
| A structure to hold the description of an application 'option'. More... | |
| struct | ast_group_info |
| struct | ast_ivr_menu |
| struct | ast_ivr_option |
Defines | |
| #define | AST_APP_ARG(name) char *name |
| Define an application argument. | |
| #define | AST_APP_OPTION(option, flagno) [option] = { .flag = flagno } |
| Declares an application option that does not accept an argument. | |
| #define | AST_APP_OPTION_ARG(option, flagno, argno) [option] = { .flag = flagno, .arg_index = argno + 1 } |
| Declares an application option that accepts an argument. | |
| #define | AST_APP_OPTIONS(holder, options...) static const struct ast_app_option holder[128] = options |
| Declares an array of options for an application. | |
| #define | AST_DECLARE_APP_ARGS(name, arglist) |
| Declare a structure to hold the application's arguments. | |
| #define | AST_IVR_DECLARE_MENU(holder, title, flags, foo...) |
| #define | AST_IVR_FLAG_AUTORESTART (1 << 0) |
| #define | AST_NONSTANDARD_APP_ARGS(args, parse, sep) args.argc = ast_app_separate_args(parse, sep, args.argv, ((sizeof(args) - offsetof(typeof(args), argv)) / sizeof(args.argv[0]))) |
| Performs the 'nonstandard' argument separation process for an application. | |
| #define | AST_STANDARD_APP_ARGS(args, parse) args.argc = ast_app_separate_args(parse, '|', args.argv, ((sizeof(args) - offsetof(typeof(args), argv)) / sizeof(args.argv[0]))) |
| Performs the 'standard' argument separation process for an application. | |
| #define | BEGIN_OPTIONS { |
| #define | END_OPTIONS } |
Typedefs | |
| typedef int(*) | ast_ivr_callback (struct ast_channel *chan, char *option, void *cbdata) |
| Callback function for IVR. | |
Enumerations | |
| enum | ast_ivr_action { AST_ACTION_UPONE, AST_ACTION_EXIT, AST_ACTION_CALLBACK, AST_ACTION_PLAYBACK, AST_ACTION_BACKGROUND, AST_ACTION_PLAYLIST, AST_ACTION_MENU, AST_ACTION_REPEAT, AST_ACTION_RESTART, AST_ACTION_TRANSFER, AST_ACTION_WAITOPTION, AST_ACTION_NOOP, AST_ACTION_BACKLIST } |
| enum | AST_LOCK_RESULT { AST_LOCK_SUCCESS = 0, AST_LOCK_TIMEOUT = -1, AST_LOCK_PATH_NOT_FOUND = -2, AST_LOCK_FAILURE = -3 } |
Functions | |
| int | ast_app_dtget (struct ast_channel *chan, const char *context, char *collect, size_t size, int maxlen, int timeout) |
| Present a dialtone and collect a certain length extension. | |
| int | ast_app_getdata (struct ast_channel *c, char *prompt, char *s, int maxlen, int timeout) |
| Plays a stream and gets DTMF data from a channel. | |
| int | ast_app_getdata_full (struct ast_channel *c, char *prompt, char *s, int maxlen, int timeout, int audiofd, int ctrlfd) |
| Full version with audiofd and controlfd. NOTE: returns '2' on ctrlfd available, not '1' like other full functions. | |
| int | ast_app_group_discard (struct ast_channel *chan) |
| int | ast_app_group_get_count (const char *group, const char *category) |
| ast_group_info * | ast_app_group_list_head (void) |
| int | ast_app_group_list_lock (void) |
| int | ast_app_group_list_unlock (void) |
| int | ast_app_group_match_get_count (const char *groupmatch, const char *category) |
| int | ast_app_group_set_channel (struct ast_channel *chan, const char *data) |
| int | ast_app_group_split_group (const char *data, char *group, int group_max, char *category, int category_max) |
| int | ast_app_group_update (struct ast_channel *oldchan, struct ast_channel *newchan) |
| int | ast_app_has_voicemail (const char *mailbox, const char *folder) |
| int | ast_app_inboxcount (const char *mailbox, int *newmsgs, int *oldmsgs) |
| int | ast_app_messagecount (const char *context, const char *mailbox, const char *folder) |
| void | ast_app_options2str (const struct ast_app_option *options, struct ast_flags *flags, char *buf, size_t len) |
| Given a list of options array, return an option string based on passed flags. | |
| 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. | |
| unsigned int | ast_app_separate_args (char *buf, char delim, char **array, int arraylen) |
| Separate a string into arguments in an array. | |
| int | ast_control_streamfile (struct ast_channel *chan, const char *file, const char *fwd, const char *rev, const char *stop, const char *pause, const char *restart, int skipms) |
| int | ast_dtmf_stream (struct ast_channel *chan, struct ast_channel *peer, const char *digits, int between) |
| Send DTMF to a channel. | |
| void | ast_install_vm_functions (int(*has_voicemail_func)(const char *mailbox, const char *folder), int(*inboxcount_func)(const char *mailbox, int *newmsgs, int *oldmsgs), int(*messagecount_func)(const char *context, const char *mailbox, const char *folder)) |
| int | ast_ivr_menu_run (struct ast_channel *c, struct ast_ivr_menu *menu, void *cbdata) |
| Runs an IVR menu. | |
| int | ast_linear_stream (struct ast_channel *chan, const char *filename, int fd, int allowoverride) |
| enum AST_LOCK_RESULT | ast_lock_path (const char *path) |
| Lock a filesystem path. | |
| int | ast_play_and_prepend (struct ast_channel *chan, char *playfile, char *recordfile, int maxtime_sec, char *fmt, int *duration, int beep, int silencethreshold, int maxsilence_ms) |
| int | ast_play_and_record (struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime_sec, const char *fmt, int *duration, int silencethreshold, int maxsilence_ms, const char *path) |
| int | ast_play_and_record_full (struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime_sec, const char *fmt, int *duration, int silencethreshold, int maxsilence_ms, const char *path, const char *acceptdtmf, const char *canceldtmf) |
| int | ast_play_and_wait (struct ast_channel *chan, const char *fn) |
| char * | ast_read_textfile (const char *file) |
| int | ast_record_review (struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime, const char *fmt, int *duration, const char *path) |
| void | ast_replace_sigchld (void) |
| Replace the SIGCHLD handler. | |
| int | ast_safe_system (const char *s) |
| void | ast_uninstall_vm_functions (void) |
| int | ast_unlock_path (const char *path) |
| void | ast_unreplace_sigchld (void) |
| Restore the SIGCHLD handler. | |
Definition in file app.h.
Define an application argument.
| name | The name of the argument |
Definition at line 244 of file app.h.
Referenced by __login_exec(), acf_channel_read(), acf_curl_exec(), acf_if(), acf_odbc_read(), acf_odbc_write(), acf_rand_exec(), acf_sprintf(), acf_strftime(), acf_strptime(), acf_vmcount_exec(), add_agent(), admin_exec(), app_exec(), aqm_exec(), array(), astman_get_variables(), asyncgoto_exec(), auth_exec(), cdr_read(), cdr_write(), chanavail_exec(), checkmd5(), conf_exec(), count_exec(), cut_internal(), dictate_exec(), directory_exec(), disa_exec(), filter(), find_conf(), forkcdr_exec(), func_header_read(), function_agent(), function_db_delete(), function_db_exists(), function_db_read(), function_db_write(), function_enum(), function_fieldqty(), function_realtime_read(), function_realtime_write(), hasvoicemail_exec(), isAnsweringMachine(), math(), misdn_check_l2l1(), mixmonitor_exec(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), pbx_builtin_background(), pbx_builtin_waitexten(), playback_exec(), pqm_exec(), privacy_exec(), ql_exec(), queue_exec(), read_exec(), record_exec(), regex(), reload_queues(), rqm_exec(), sayunixtime_exec(), sendimage_exec(), sendtext_exec(), smdi_msg_read(), smdi_msg_retrieve_read(), transfer_exec(), upqm_exec(), userevent_exec(), vm_box_exists(), vm_exec(), and vm_execmain().
| #define AST_APP_OPTION | ( | option, | |||
| flagno | ) | [option] = { .flag = flagno } |
Declares an application option that does not accept an argument.
| option | The single character representing the option | |
| flagno | The flag index to be set if this option is present |
| #define AST_APP_OPTION_ARG | ( | option, | |||
| flagno, | |||||
| argno | ) | [option] = { .flag = flagno, .arg_index = argno + 1 } |
Declares an application option that accepts an argument.
| option | The single character representing the option | |
| flagno | The flag index to be set if this option is present | |
| argno | The index into the argument array where the argument should be placed |
| #define AST_APP_OPTIONS | ( | holder, | |||
| options... | ) | static const struct ast_app_option holder[128] = options |
Declares an array of options for an application.
| holder | The name of the array to be created | |
| options | The actual options to be placed into the array |
struct ast_option elements to hold the list of available options for an application. Each option must be declared using either the AST_APP_OPTION() or AST_APP_OPTION_ARG() macros.Example usage:
enum { OPT_JUMP = (1 << 0), OPT_BLAH = (1 << 1), OPT_BLORT = (1 << 2), } my_app_option_flags; enum { OPT_ARG_BLAH = 0, OPT_ARG_BLORT, !! this entry tells how many possible arguments there are, and must be the last entry in the list OPT_ARG_ARRAY_SIZE, } my_app_option_args; AST_APP_OPTIONS(my_app_options, { AST_APP_OPTION('j', OPT_JUMP), AST_APP_OPTION_ARG('b', OPT_BLAH, OPT_ARG_BLAH), AST_APP_OPTION_BLORT('B', OPT_BLORT, OPT_ARG_BLORT), }); static int my_app_exec(struct ast_channel *chan, void *data) { char *options; struct ast_flags opts = { 0, }; char *opt_args[OPT_ARG_ARRAY_SIZE]; ... do any argument parsing here ... if (ast_parseoptions(my_app_options, &opts, opt_args, options)) { LOCAL_USER_REMOVE(u); return -1; } }
| #define AST_DECLARE_APP_ARGS | ( | name, | |||
| arglist | ) |
Value:
struct { \ unsigned int argc; \ char *argv[0]; \ arglist \ } name
| name | The name of the structure | |
| arglist | The list of arguments, defined using AST_APP_ARG |
Definition at line 261 of file app.h.
Referenced by __login_exec(), acf_channel_read(), acf_curl_exec(), acf_if(), acf_odbc_read(), acf_odbc_write(), acf_rand_exec(), acf_sprintf(), acf_strftime(), acf_strptime(), acf_vmcount_exec(), add_agent(), admin_exec(), app_exec(), aqm_exec(), array(), astman_get_variables(), asyncgoto_exec(), auth_exec(), cdr_read(), cdr_write(), chanavail_exec(), checkmd5(), conf_exec(), count_exec(), cut_internal(), dictate_exec(), directory_exec(), disa_exec(), filter(), find_conf(), forkcdr_exec(), func_header_read(), function_agent(), function_db_delete(), function_db_exists(), function_db_read(), function_db_write(), function_enum(), function_fieldqty(), function_realtime_read(), function_realtime_write(), hasvoicemail_exec(), isAnsweringMachine(), math(), misdn_check_l2l1(), mixmonitor_exec(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), pbx_builtin_background(), pbx_builtin_waitexten(), playback_exec(), pqm_exec(), privacy_exec(), ql_exec(), queue_exec(), read_exec(), record_exec(), regex(), reload_queues(), rqm_exec(), sayunixtime_exec(), sendimage_exec(), sendtext_exec(), smdi_msg_read(), smdi_msg_retrieve_read(), transfer_exec(), upqm_exec(), userevent_exec(), vm_box_exists(), vm_exec(), and vm_execmain().
| #define AST_IVR_DECLARE_MENU | ( | holder, | |||
| title, | |||||
| flags, | |||||
| foo... | ) |
Value:
static struct ast_ivr_option __options_##holder[] = foo;\ static struct ast_ivr_menu holder = { title, flags, __options_##holder }
| #define AST_NONSTANDARD_APP_ARGS | ( | args, | |||
| parse, | |||||
| sep | ) | args.argc = ast_app_separate_args(parse, sep, args.argv, ((sizeof(args) - offsetof(typeof(args), argv)) / sizeof(args.argv[0]))) |
Performs the 'nonstandard' argument separation process for an application.
| args | An argument structure defined using AST_DECLARE_APP_ARGS | |
| parse | A modifiable buffer containing the input to be parsed | |
| sep | A nonstandard separator character |
Definition at line 290 of file app.h.
Referenced by acf_if(), acf_odbc_write(), add_agent(), array(), find_conf(), function_agent(), function_db_delete(), function_db_exists(), function_db_read(), function_db_write(), record_exec(), regex(), and reload_queues().
| #define AST_STANDARD_APP_ARGS | ( | args, | |||
| parse | ) | args.argc = ast_app_separate_args(parse, '|', args.argv, ((sizeof(args) - offsetof(typeof(args), argv)) / sizeof(args.argv[0]))) |
Performs the 'standard' argument separation process for an application.
| args | An argument structure defined using AST_DECLARE_APP_ARGS | |
| parse | A modifiable buffer containing the input to be parsed |
Definition at line 277 of file app.h.
Referenced by __login_exec(), acf_channel_read(), acf_curl_exec(), acf_odbc_read(), acf_odbc_write(), acf_rand_exec(), acf_sprintf(), acf_strftime(), acf_strptime(), acf_vmcount_exec(), admin_exec(), app_exec(), aqm_exec(), array(), astman_get_variables(), asyncgoto_exec(), auth_exec(), cdr_read(), cdr_write(), chanavail_exec(), checkmd5(), conf_exec(), count_exec(), cut_internal(), dictate_exec(), directory_exec(), disa_exec(), filter(), func_header_read(), function_enum(), function_fieldqty(), function_realtime_read(), function_realtime_write(), hasvoicemail_exec(), isAnsweringMachine(), math(), misdn_check_l2l1(), mixmonitor_exec(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), pbx_builtin_background(), pbx_builtin_waitexten(), playback_exec(), pqm_exec(), privacy_exec(), ql_exec(), queue_exec(), read_exec(), rqm_exec(), sayunixtime_exec(), sendimage_exec(), sendtext_exec(), smdi_msg_read(), smdi_msg_retrieve_read(), transfer_exec(), upqm_exec(), userevent_exec(), vm_box_exists(), vm_exec(), and vm_execmain().
| typedef int(*) ast_ivr_callback(struct ast_channel *chan, char *option, void *cbdata) |
| enum ast_ivr_action |
| AST_ACTION_UPONE | adata is unused |
| AST_ACTION_EXIT | adata is the return value for ast_ivr_menu_run if channel was not hungup |
| AST_ACTION_CALLBACK | adata is an ast_ivr_callback |
| AST_ACTION_PLAYBACK | adata is file to play |
| AST_ACTION_BACKGROUND | adata is file to play |
| AST_ACTION_PLAYLIST | adata is list of files, separated by ; to play |
| AST_ACTION_MENU | adata is a pointer to an ast_ivr_menu |
| AST_ACTION_REPEAT | adata is max # of repeats, cast to a pointer |
| AST_ACTION_RESTART | adata is like repeat, but resets repeats to 0 |
| AST_ACTION_TRANSFER | adata is a string with exten[] |
| AST_ACTION_WAITOPTION | adata is a timeout, or 0 for defaults |
| AST_ACTION_NOOP | adata is unused |
| AST_ACTION_BACKLIST | adata is list of files separated by ; allows interruption |
Definition at line 37 of file app.h.
00037 { 00038 AST_ACTION_UPONE, /*!< adata is unused */ 00039 AST_ACTION_EXIT, /*!< adata is the return value for ast_ivr_menu_run if channel was not hungup */ 00040 AST_ACTION_CALLBACK, /*!< adata is an ast_ivr_callback */ 00041 AST_ACTION_PLAYBACK, /*!< adata is file to play */ 00042 AST_ACTION_BACKGROUND, /*!< adata is file to play */ 00043 AST_ACTION_PLAYLIST, /*!< adata is list of files, separated by ; to play */ 00044 AST_ACTION_MENU, /*!< adata is a pointer to an ast_ivr_menu */ 00045 AST_ACTION_REPEAT, /*!< adata is max # of repeats, cast to a pointer */ 00046 AST_ACTION_RESTART, /*!< adata is like repeat, but resets repeats to 0 */ 00047 AST_ACTION_TRANSFER, /*!< adata is a string with exten[@context] */ 00048 AST_ACTION_WAITOPTION, /*!< adata is a timeout, or 0 for defaults */ 00049 AST_ACTION_NOOP, /*!< adata is unused */ 00050 AST_ACTION_BACKLIST, /*!< adata is list of files separated by ; allows interruption */ 00051 } ast_ivr_action;
| enum AST_LOCK_RESULT |
Definition at line 186 of file app.h.
00186 { 00187 AST_LOCK_SUCCESS = 0, 00188 AST_LOCK_TIMEOUT = -1, 00189 AST_LOCK_PATH_NOT_FOUND = -2, 00190 AST_LOCK_FAILURE = -3, 00191 };
| int ast_app_dtget | ( | struct ast_channel * | chan, | |
| const char * | context, | |||
| char * | collect, | |||
| size_t | size, | |||
| int | maxlen, | |||
| int | timeout | |||
| ) |
Present a dialtone and collect a certain length extension.
Definition at line 65 of file app.c.
References ast_exists_extension(), ast_get_indication_tone(), ast_ignore_pattern(), ast_log(), ast_matchmore_extension(), ast_playtones_start(), ast_playtones_stop(), ast_waitfordigit(), ast_channel::cid, ast_callerid::cid_num, ind_tone_zone_sound::data, ast_pbx::dtimeout, LOG_NOTICE, ast_channel::pbx, and ast_channel::zone.
Referenced by builtin_atxfer(), and builtin_blindtransfer().
00066 { 00067 struct ind_tone_zone_sound *ts; 00068 int res=0, x=0; 00069 00070 if (maxlen > size) 00071 maxlen = size; 00072 00073 if (!timeout && chan->pbx) 00074 timeout = chan->pbx->dtimeout; 00075 else if (!timeout) 00076 timeout = 5; 00077 00078 ts = ast_get_indication_tone(chan->zone,"dial"); 00079 if (ts && ts->data[0]) 00080 res = ast_playtones_start(chan, 0, ts->data, 0); 00081 else 00082 ast_log(LOG_NOTICE,"Huh....? no dial for indications?\n"); 00083 00084 for (x = strlen(collect); x < maxlen; ) { 00085 res = ast_waitfordigit(chan, timeout); 00086 if (!ast_ignore_pattern(context, collect)) 00087 ast_playtones_stop(chan); 00088 if (res < 1) 00089 break; 00090 if (res == '#') 00091 break; 00092 collect[x++] = res; 00093 if (!ast_matchmore_extension(chan, context, collect, 1, chan->cid.cid_num)) 00094 break; 00095 } 00096 if (res >= 0) 00097 res = ast_exists_extension(chan, context, collect, 1, chan->cid.cid_num) ? 1 : 0; 00098 return res; 00099 }
| int ast_app_getdata | ( | struct ast_channel * | c, | |
| char * | prompt, | |||
| char * | s, | |||
| int | maxlen, | |||
| int | timeout | |||
| ) |
Plays a stream and gets DTMF data from a channel.
| c | The channel to read from | |
| prompt | The file to stream to the channel | |
| s | The string to read in to. Must be at least the size of your length | |
| maxlen | How many digits to read (maximum) | |
| timeout | set timeout to 0 for "standard" timeouts. Set timeout to -1 for "ludicrous time" (essentially never times out) |
Definition at line 107 of file app.c.
References ast_readstring(), ast_streamfile(), ast_pbx::dtimeout, ast_channel::pbx, and ast_pbx::rtimeout.
Referenced by __login_exec(), auth_exec(), conf_exec(), dictate_exec(), exec(), find_conf(), read_exec(), testclient_exec(), testserver_exec(), and vm_exec().
00108 { 00109 int res,to,fto; 00110 /* XXX Merge with full version? XXX */ 00111 if (maxlen) 00112 s[0] = '\0'; 00113 if (prompt) { 00114 res = ast_streamfile(c, prompt, c->language); 00115 if (res < 0) 00116 return res; 00117 } 00118 fto = c->pbx ? c->pbx->rtimeout * 1000 : 6000; 00119 to = c->pbx ? c->pbx->dtimeout * 1000 : 2000; 00120 00121 if (timeout > 0) 00122 fto = to = timeout; 00123 if (timeout < 0) 00124 fto = to = 1000000000; 00125 res = ast_readstring(c, s, maxlen, to, fto, "#"); 00126 return res; 00127 }
| int ast_app_getdata_full | ( | struct ast_channel * | c, | |
| char * | prompt, | |||
| char * | s, | |||
| int | maxlen, | |||
| int | timeout, | |||
| int | audiofd, | |||
| int | ctrlfd | |||
| ) |
Full version with audiofd and controlfd. NOTE: returns '2' on ctrlfd available, not '1' like other full functions.
Definition at line 130 of file app.c.
References ast_readstring_full(), and ast_streamfile().
Referenced by handle_getdata().
00131 { 00132 int res, to, fto; 00133 if (prompt) { 00134 res = ast_streamfile(c, prompt, c->language); 00135 if (res < 0) 00136 return res; 00137 } 00138 fto = 6000; 00139 to = 2000; 00140 if (timeout > 0) 00141 fto = to = timeout; 00142 if (timeout < 0) 00143 fto = to = 1000000000; 00144 res = ast_readstring_full(c, s, maxlen, to, fto, "#", audiofd, ctrlfd); 00145 return res; 00146 }
| int ast_app_group_discard | ( | struct ast_channel * | chan | ) |
Discard all group counting for a channel
Definition at line 927 of file app.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, ast_group_info::chan, and free.
Referenced by ast_channel_free().
00928 { 00929 struct ast_group_info *gi = NULL; 00930 00931 AST_LIST_LOCK(&groups); 00932 AST_LIST_TRAVERSE_SAFE_BEGIN(&groups, gi, list) { 00933 if (gi->chan == chan) { 00934 AST_LIST_REMOVE_CURRENT(&groups, list); 00935 free(gi); 00936 } 00937 } 00938 AST_LIST_TRAVERSE_SAFE_END 00939 AST_LIST_UNLOCK(&groups); 00940 00941 return 0; 00942 }
| int ast_app_group_get_count | ( | const char * | group, | |
| const char * | category | |||
| ) |
Get the current channel count of the specified group and category.
Definition at line 870 of file app.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_strlen_zero(), ast_group_info::category, and ast_group_info::group.
Referenced by group_count_function_read().
00871 { 00872 struct ast_group_info *gi = NULL; 00873 int count = 0; 00874 00875 if (ast_strlen_zero(group)) 00876 return 0; 00877 00878 AST_LIST_LOCK(&groups); 00879 AST_LIST_TRAVERSE(&groups, gi, list) { 00880 if (!strcasecmp(gi->group, group) && (ast_strlen_zero(category) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category)))) 00881 count++; 00882 } 00883 AST_LIST_UNLOCK(&groups); 00884 00885 return count; 00886 }
| struct ast_group_info* ast_app_group_list_head | ( | void | ) |
Get the head of the group count list
Definition at line 949 of file app.c.
References AST_LIST_FIRST.
Referenced by group_count_function_read(), group_function_read(), group_list_function_read(), and group_show_channels().
00950 { 00951 return AST_LIST_FIRST(&groups); 00952 }
| int ast_app_group_list_lock | ( | void | ) |
Lock the group count list
Definition at line 944 of file app.c.
References AST_LIST_LOCK.
Referenced by group_count_function_read(), group_function_read(), group_list_function_read(), and group_show_channels().
00945 { 00946 return AST_LIST_LOCK(&groups); 00947 }
| int ast_app_group_list_unlock | ( | void | ) |
Unlock the group count list
Definition at line 954 of file app.c.
References AST_LIST_UNLOCK.
Referenced by group_count_function_read(), group_function_read(), group_list_function_read(), and group_show_channels().
00955 { 00956 return AST_LIST_UNLOCK(&groups); 00957 }
| int ast_app_group_match_get_count | ( | const char * | groupmatch, | |
| const char * | category | |||
| ) |
Get the current channel count of all groups that match the specified pattern and category.
Definition at line 888 of file app.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_strlen_zero(), ast_group_info::category, and ast_group_info::group.
Referenced by group_match_count_function_read().
00889 { 00890 struct ast_group_info *gi = NULL; 00891 regex_t regexbuf; 00892 int count = 0; 00893 00894 if (ast_strlen_zero(groupmatch)) 00895 return 0; 00896 00897 /* if regex compilation fails, return zero matches */ 00898 if (regcomp(®exbuf, groupmatch, REG_EXTENDED | REG_NOSUB)) 00899 return 0; 00900 00901 AST_LIST_LOCK(&groups); 00902 AST_LIST_TRAVERSE(&groups, gi, list) { 00903 if (!regexec(®exbuf, gi->group, 0, NULL, 0) && (ast_strlen_zero(category) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category)))) 00904 count++; 00905 } 00906 AST_LIST_UNLOCK(&groups); 00907 00908 regfree(®exbuf); 00909 00910 return count; 00911 }
| int ast_app_group_set_channel | ( | struct ast_channel * | chan, | |
| const char * | data | |||
| ) |
Set the group for a channel, splitting the provided data into group and category, if specified.
Definition at line 825 of file app.c.
References ast_app_group_split_group(), AST_LIST_INSERT_TAIL, AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, ast_strlen_zero(), calloc, ast_group_info::category, ast_group_info::chan, free, ast_group_info::group, group, and len.
Referenced by group_function_write().
00826 { 00827 int res = 0; 00828 char group[80] = "", category[80] = ""; 00829 struct ast_group_info *gi = NULL; 00830 size_t len = 0; 00831 00832 if (ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category))) 00833 return -1; 00834 00835 /* Calculate memory we will need if this is new */ 00836 len = sizeof(*gi) + strlen(group) + 1; 00837 if (!ast_strlen_zero(category)) 00838 len += strlen(category) + 1; 00839 00840 AST_LIST_LOCK(&groups); 00841 AST_LIST_TRAVERSE_SAFE_BEGIN(&groups, gi, list) { 00842 if ((gi->chan == chan) && ((ast_strlen_zero(category) && ast_strlen_zero(gi->category)) || (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, category)))) { 00843 AST_LIST_REMOVE_CURRENT(&groups, list); 00844 free(gi); 00845 break; 00846 } 00847 } 00848 AST_LIST_TRAVERSE_SAFE_END 00849 00850 if (ast_strlen_zero(group)) { 00851 /* Enable unsetting the group */ 00852 } else if ((gi = calloc(1, len))) { 00853 gi->chan = chan; 00854 gi->group = (char *) gi + sizeof(*gi); 00855 strcpy(gi->group, group); 00856 if (!ast_strlen_zero(category)) { 00857 gi->category = (char *) gi + sizeof(*gi) + strlen(group) + 1; 00858 strcpy(gi->category, category); 00859 } 00860 AST_LIST_INSERT_TAIL(&groups, gi, list); 00861 } else { 00862 res = -1; 00863 } 00864 00865 AST_LIST_UNLOCK(&groups); 00866 00867 return res; 00868 }
| int ast_app_group_split_group | ( | const char * | data, | |
| char * | group, | |||
| int | group_max, | |||
| char * | category, | |||
| int | category_max | |||
| ) |
Split a group string into group and category, returning a default category if none is provided.
Definition at line 798 of file app.c.
References ast_strlen_zero().
Referenced by ast_app_group_set_channel(), group_count_function_read(), and group_match_count_function_read().
00799 { 00800 int res=0; 00801 char tmp[256]; 00802 char *grp=NULL, *cat=NULL; 00803 00804 if (!ast_strlen_zero(data)) { 00805 ast_copy_string(tmp, data, sizeof(tmp)); 00806 grp = tmp; 00807 cat = strchr(tmp, '@'); 00808 if (cat) { 00809 *cat = '\0'; 00810 cat++; 00811 } 00812 } 00813 00814 if (!ast_strlen_zero(grp)) 00815 ast_copy_string(group, grp, group_max); 00816 else 00817 *group = '\0'; 00818 00819 if (!ast_strlen_zero(cat)) 00820 ast_copy_string(category, cat, category_max); 00821 00822 return res; 00823 }
| int ast_app_group_update | ( | struct ast_channel * | oldchan, | |
| struct ast_channel * | newchan | |||
| ) |
Update all group counting for a channel to a new one
Definition at line 913 of file app.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, and ast_group_info::chan.
Referenced by ast_do_masquerade().
00914 { 00915 struct ast_group_info *gi = NULL; 00916 00917 AST_LIST_LOCK(&groups); 00918 AST_LIST_TRAVERSE(&groups, gi, list) { 00919 if (gi->chan == old) 00920 gi->chan = new; 00921 } 00922 AST_LIST_UNLOCK(&groups); 00923 00924 return 0; 00925 }
| int ast_app_has_voicemail | ( | const char * | mailbox, | |
| const char * | folder | |||
| ) |
Determine if a given mailbox has any voicemail
Definition at line 168 of file app.c.
References ast_has_voicemail_func, ast_verbose(), option_verbose, and VERBOSE_PREFIX_3.
Referenced by action_mailboxstatus(), has_voicemail(), notif