summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asterisk/config.h81
-rw-r--r--include/asterisk/res_pjsip.h8
-rw-r--r--include/asterisk/sorcery.h24
-rw-r--r--include/asterisk/strings.h30
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 */