📄 app.h
字号:
/*! \brief Update all group counting for a channel to a new one */int ast_app_group_update(struct ast_channel *oldchan, struct ast_channel *newchan);/*! \brief Write Lock the group count list */int ast_app_group_list_wrlock(void);/*! \brief Read Lock the group count list */int ast_app_group_list_rdlock(void);/*! \brief Get the head of the group count list */struct ast_group_info *ast_app_group_list_head(void);/*! \brief Unlock the group count list */int ast_app_group_list_unlock(void);/*! \brief Define an application argument \param name The name of the argument*/#define AST_APP_ARG(name) char *name/*! \brief Declare a structure to hold an application's arguments. \param name The name of the structure \param arglist The list of arguments, defined using AST_APP_ARG This macro declares a structure intended to be used in a call to ast_app_separate_args(). The structure includes all the arguments specified, plus an argv array that overlays them and an argc argument counter. The arguments must be declared using AST_APP_ARG, and they will all be character pointers (strings). \note The structure is <b>not</b> initialized, as the call to ast_app_separate_args() will perform that function before parsing the arguments. */#define AST_DECLARE_APP_ARGS(name, arglist) AST_DEFINE_APP_ARGS_TYPE(, arglist) name/*! \brief Define a structure type to hold an application's arguments. \param type The name of the structure type \param arglist The list of arguments, defined using AST_APP_ARG This macro defines a structure type intended to be used in a call to ast_app_separate_args(). The structure includes all the arguments specified, plus an argv array that overlays them and an argc argument counter. The arguments must be declared using AST_APP_ARG, and they will all be character pointers (strings). \note This defines a structure type, but does not declare an instance of the structure. That must be done separately. */#define AST_DEFINE_APP_ARGS_TYPE(type, arglist) \ struct type { \ unsigned int argc; \ char *argv[0]; \ arglist \ }/*! \brief Performs the 'standard' argument separation process for an application. \param args An argument structure defined using AST_DECLARE_APP_ARGS \param parse A modifiable buffer containing the input to be parsed This function will separate the input string using the standard argument separator character ',' and fill in the provided structure, including the argc argument counter field. */#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]))) /*! \brief Performs the 'nonstandard' argument separation process for an application. \param args An argument structure defined using AST_DECLARE_APP_ARGS \param parse A modifiable buffer containing the input to be parsed \param sep A nonstandard separator character This function will separate the input string using the nonstandard argument separator character and fill in the provided structure, including the argc argument counter field. */#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]))) /*! \brief Separate a string into arguments in an array \param buf The string to be parsed (this must be a writable copy, as it will be modified) \param delim The character to be used to delimit arguments \param array An array of 'char *' to be filled in with pointers to the found arguments \param arraylen The number of elements in the array (i.e. the number of arguments you will accept) Note: if there are more arguments in the string than the array will hold, the last element of the array will contain the remaining arguments, not separated. The array will be completely zeroed by this function before it populates any entries. \return The number of arguments found, or zero if the function arguments are not valid.*/unsigned int ast_app_separate_args(char *buf, char delim, char **array, int arraylen);/*! \brief A structure to hold the description of an application 'option'. Application 'options' are single-character flags that can be supplied to the application to affect its behavior; they can also optionally accept arguments enclosed in parenthesis. These structures are used by the ast_app_parse_options function, uses this data to fill in a flags structure (to indicate which options were supplied) and array of argument pointers (for those options that had arguments supplied). */struct ast_app_option { /*! \brief The flag bit that represents this option. */ uint64_t flag; /*! \brief The index of the entry in the arguments array that should be used for this option's argument. */ unsigned int arg_index;};#define BEGIN_OPTIONS {#define END_OPTIONS }/*! \brief Declares an array of options for an application. \param holder The name of the array to be created \param options The actual options to be placed into the array \sa ast_app_parse_options This macro declares a 'static const' array of \c struct \c 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: \code 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)) { ast_module_user_remove(u); return -1; } } \endcode */#define AST_APP_OPTIONS(holder, options...) \ static const struct ast_app_option holder[128] = options/*! \brief Declares an application option that does not accept an argument. \param option The single character representing the option \param flagno The flag index to be set if this option is present \sa AST_APP_OPTIONS, ast_app_parse_options */#define AST_APP_OPTION(option, flagno) \ [option] = { .flag = flagno }/*! \brief Declares an application option that accepts an argument. \param option The single character representing the option \param flagno The flag index to be set if this option is present \param argno The index into the argument array where the argument should be placed \sa AST_APP_OPTIONS, ast_app_parse_options */#define AST_APP_OPTION_ARG(option, flagno, argno) \ [option] = { .flag = flagno, .arg_index = argno + 1 }/*! \brief Parses a string containing application options and sets flags/arguments. \param options The array of possible options declared with AST_APP_OPTIONS \param flags The flag structure to have option flags set \param args The array of argument pointers to hold arguments found \param optstr The string containing the options to be parsed \return zero for success, non-zero if an error occurs \sa AST_APP_OPTIONS */int ast_app_parse_options(const struct ast_app_option *options, struct ast_flags *flags, char **args, char *optstr); /*! \brief Parses a string containing application options and sets flags/arguments. \param options The array of possible options declared with AST_APP_OPTIONS \param flags The 64-bit flag structure to have option flags set \param args The array of argument pointers to hold arguments found \param optstr The string containing the options to be parsed \return zero for success, non-zero if an error occurs \sa AST_APP_OPTIONS */int ast_app_parse_options64(const struct ast_app_option *options, struct ast_flags64 *flags, char **args, char *optstr);/*! \brief Given a list of options array, return an option string based on passed flags \param options The array of possible options declared with AST_APP_OPTIONS \param flags The flags of the options that you wish to populate the buffer with \param buf The buffer to fill with the string of options \param len The maximum length of buf*/void ast_app_options2str64(const struct ast_app_option *options, struct ast_flags64 *flags, char *buf, size_t len);/*! \brief Present a dialtone and collect a certain length extension. \return Returns 1 on valid extension entered, -1 on hangup, or 0 on invalid extension.\note Note that if 'collect' holds digits already, new digits will be appended, so be sure it's initialized properly */int ast_app_dtget(struct ast_channel *chan, const char *context, char *collect, size_t size, int maxlen, int timeout);/*! \brief Allow to record message and have a review option */int ast_record_review(struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime, const char *fmt, int *duration, const char *path);/*! \brief Decode an encoded control or extended ASCII character */int ast_get_encoded_char(const char *stream, char *result, size_t *consumed);/*! \brief Decode a string which may contain multiple encoded control or extended ASCII characters */int ast_get_encoded_str(const char *stream, char *result, size_t result_size);#if defined(__cplusplus) || defined(c_plusplus)}#endif#endif /* _ASTERISK_APP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -