diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/config.h | 81 | ||||
-rw-r--r-- | include/asterisk/res_pjsip.h | 8 | ||||
-rw-r--r-- | include/asterisk/sorcery.h | 24 | ||||
-rw-r--r-- | include/asterisk/strings.h | 30 |
4 files changed, 140 insertions, 3 deletions
diff --git a/include/asterisk/config.h b/include/asterisk/config.h index d0bcae654..4c68e5c21 100644 --- a/include/asterisk/config.h +++ b/include/asterisk/config.h @@ -307,7 +307,7 @@ const char *ast_variable_retrieve(struct ast_config *config, const char *category, const char *variable); /*! - * \brief Gets a variable from a specific category structure + * \brief Gets a variable value from a specific category structure by name * * \param category category structure under which the variable lies * \param variable which variable you wish to get the data for @@ -321,7 +321,7 @@ const char *ast_variable_retrieve(struct ast_config *config, const char *ast_variable_find(const struct ast_category *category, const char *variable); /*! - * \brief Gets a variable from a variable list + * \brief Gets the value of a variable from a variable list by name * * \param list variable list to search * \param variable which variable you wish to get the data for @@ -335,7 +335,7 @@ const char *ast_variable_find(const struct ast_category *category, const char *v const char *ast_variable_find_in_list(const struct ast_variable *list, const char *variable); /*! - * \brief Gets the LAST occurrence of a variable from a variable list + * \brief Gets the value of the LAST occurrence of a variable from a variable list * * \param list The ast_variable list to search * \param variable The name of the ast_variable you wish to fetch data for @@ -352,6 +352,21 @@ const char *ast_variable_find_in_list(const struct ast_variable *list, const cha const char *ast_variable_find_last_in_list(const struct ast_variable *list, const char *variable); /*! + * \brief Gets a variable from a variable list by name + * \since 13.9.0 + * + * \param list variable list to search + * \param variable name you wish to get the data for + * + * \details + * Goes through a given variable list and searches for the given variable + * + * \retval The variable (not the value) on success + * \retval NULL if unable to find it. + */ +const struct ast_variable *ast_variable_find_variable_in_list(const struct ast_variable *list, const char *variable_name); + +/*! * \brief Retrieve a category if it exists * * \param config which config to use @@ -1217,6 +1232,66 @@ char *ast_realtime_decode_chunk(char *chunk); */ char *ast_realtime_encode_chunk(struct ast_str **dest, ssize_t maxlen, const char *chunk); +/*! + * \brief Tests 2 variable values to see if they match + * \since 13.9.0 + * + * \param left Variable to test + * \param right Variable to match against with an optional realtime-style operator in the name + * + * \retval 1 matches + * \retval 0 doesn't match + * + * \details + * + * The values of the variables are passed to ast_strings_match. + * If right->name is suffixed with a space and an operator, that operator + * is also passed to ast_strings_match. + * + * Examples: + * + * left->name = "id" (ignored) + * left->value = "abc" + * right->name = "id regex" (id is ignored) + * right->value = "a[bdef]c" + * + * will result in ast_strings_match("abc", "regex", "a[bdef]c") which will return 1. + * + * left->name = "id" (ignored) + * left->value = "abc" + * right->name = "id" (ignored) + * right->value = "abc" + * + * will result in ast_strings_match("abc", NULL, "abc") which will return 1. + * + * See the documentation for ast_strings_match for the valid operators. + */ +int ast_variables_match(const struct ast_variable *left, const struct ast_variable *right); + +/*! + * \brief Tests 2 variable lists to see if they match + * \since 13.9.0 + * + * \param left Variable list to test + * \param right Variable list with an optional realtime-style operator in the names + * \param exact_match If true, all variables in left must match all variables in right + * and vice versa. This does exact value matches only. Operators aren't supported. + * Except for order, the left and right lists must be equal. + * + * If false, every variable in the right list must match some variable in the left list + * using the operators supplied. Variables in the left list that aren't in the right + * list are ignored for matching purposes. + * + * \retval 1 matches + * \retval 0 doesn't match + * + * \details + * Iterates over the variable lists calling ast_variables_match. If any match fails + * or a variable in the right list isn't in the left list, 0 is returned. + */ +int ast_variable_lists_match(const struct ast_variable *left, const struct ast_variable *right, + int exact_match); + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index 3901cf73c..50fbc5102 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -2193,6 +2193,14 @@ void ast_sip_get_default_from_user(char *from_user, size_t size); unsigned int ast_sip_get_keep_alive_interval(void); /*! + * \brief Retrieve the system contact expiration check interval setting. + * + * \retval the contact expiration check interval. + */ +unsigned int ast_sip_get_contact_expiration_check_interval(void); + + +/*! * \brief Retrieve the system max initial qualify time. * * \retval the maximum initial qualify time. diff --git a/include/asterisk/sorcery.h b/include/asterisk/sorcery.h index 027ec0058..5e947257b 100644 --- a/include/asterisk/sorcery.h +++ b/include/asterisk/sorcery.h @@ -1148,6 +1148,7 @@ void *ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char * /*! * \brief Retrieve an object or multiple objects using specific fields + * \since 13.9.0 * * \param sorcery Pointer to a sorcery structure * \param type Type of object to retrieve @@ -1162,6 +1163,29 @@ void *ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char * * * \note If the AST_RETRIEVE_FLAG_ALL flag is used you may omit fields to retrieve all objects * of the given type. + * + * \note The fields parameter can contain realtime-style expressions in variable->name. + * All operators defined for ast_strings_match can be used except for regex as + * there's no common support for regex in the realtime backends at this time. + * If multiple variables are in the fields list, all must match for an object to + * be returned. See ast_strings_match for more information. + * + * Example: + * + * The following code can be significantly faster when a realtime backend is in use + * because the expression "qualify_frequency > 0" is passed to the database to limit + * the number of rows returned. + * + * struct ast_variable *var = ast_variable_new("qualify_frequency >", "0", ""); + * struct ao2_container *aors; + * + * if (!var) { + * return; + * } + * + * aors = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(), + * "aor", AST_RETRIEVE_FLAG_MULTIPLE, var); + * */ void *ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const char *type, unsigned int flags, struct ast_variable *fields); diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index 3701b5305..0e2f69ba8 100644 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -1335,4 +1335,34 @@ void ast_str_container_remove(struct ao2_container *str_container, const char *r * \return A pointer to buf */ char *ast_generate_random_string(char *buf, size_t size); + +/*! + * \brief Compares 2 strings using realtime-style operators + * \since 13.9.0 + * + * \param left The left side of the equation + * \param op The operator to apply + * \param right The right side of the equation + * + * \retval 1 matches + * \retval 0 doesn't match + * + * \details + * + * Operators: + * "=", "!=", "<", "<=", ">", ">=": + * If both left and right can be converted to float, then they will be + * compared as such. Otherwise the result will be derived from strcmp(left, right). + * "regex": + * The right value will be compiled as a regular expression and matched against the left + * value. + * "like": + * Any '%' character in the right value will be converted to '.*' and the resulting + * string will be handled as a regex. + * NULL , "": + * If the right value starts and ends with a '/' then it will be processed as a regex. + * Otherwise, same as "=". + */ +int ast_strings_match(const char *left, const char *op, const char *right); + #endif /* _ASTERISK_STRINGS_H */ |