Merge "pjsip_options: contacts sometimes not being updated on reload"
This commit is contained in:
commit
30954337a0
|
@ -1192,32 +1192,21 @@ static int qualify_and_schedule_all_cb(void *obj, void *arg, int flags)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
* \brief Unschedule all existing contacts
|
|
||||||
*/
|
|
||||||
static int unschedule_all_cb(void *obj, void *arg, int flags)
|
|
||||||
{
|
|
||||||
struct sched_data *data = obj;
|
|
||||||
|
|
||||||
AST_SCHED_DEL_UNREF(sched, data->id, ao2_ref(data, -1));
|
|
||||||
|
|
||||||
return CMP_MATCH;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void qualify_and_schedule_all(void)
|
static void qualify_and_schedule_all(void)
|
||||||
{
|
{
|
||||||
struct ast_variable *var = ast_variable_new("qualify_frequency >", "0", "");
|
|
||||||
struct ao2_container *aors;
|
struct ao2_container *aors;
|
||||||
struct ao2_container *contacts;
|
struct ao2_container *contacts;
|
||||||
|
|
||||||
if (!var) {
|
/*
|
||||||
return;
|
* It's possible that the AOR had some of it's fields updated prior to a
|
||||||
}
|
* reload. For instance qualifying could have been turned on or off by
|
||||||
aors = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),
|
* setting the qualify_frequency. Due to this we have to iterate through
|
||||||
"aor", AST_RETRIEVE_FLAG_MULTIPLE, var);
|
* all contacts (static and dynamic), and not just ones where the frequency
|
||||||
|
* is greater than zero, updating any contact fields with the AOR's values.
|
||||||
|
*/
|
||||||
|
|
||||||
ao2_callback(sched_qualifies, OBJ_NODATA | OBJ_MULTIPLE | OBJ_UNLINK, unschedule_all_cb, NULL);
|
aors = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),
|
||||||
|
"aor", AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
|
||||||
|
|
||||||
if (aors) {
|
if (aors) {
|
||||||
ao2_callback(aors, OBJ_NODATA, qualify_and_schedule_all_cb, NULL);
|
ao2_callback(aors, OBJ_NODATA, qualify_and_schedule_all_cb, NULL);
|
||||||
|
@ -1225,14 +1214,11 @@ static void qualify_and_schedule_all(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
contacts = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),
|
contacts = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(),
|
||||||
"contact", AST_RETRIEVE_FLAG_MULTIPLE, var);
|
"contact", AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
|
||||||
if (contacts) {
|
if (contacts) {
|
||||||
ao2_callback(contacts, OBJ_NODATA, qualify_and_schedule_cb_without_aor, NULL);
|
ao2_callback(contacts, OBJ_NODATA, qualify_and_schedule_cb_without_aor, NULL);
|
||||||
ao2_ref(contacts, -1);
|
ao2_ref(contacts, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_variables_destroy(var);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ast_sip_format_contact_ami(void *obj, void *arg, int flags)
|
int ast_sip_format_contact_ami(void *obj, void *arg, int flags)
|
||||||
|
|
Loading…
Reference in New Issue