summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorMatt Jordan <mjordan@digium.com>2015-11-04 07:44:12 -0600
committerGerrit Code Review <gerrit2@gerrit.digium.api>2015-11-04 07:44:14 -0600
commit1cf699c848e2b1780372a16265d059543bbd247a (patch)
tree9fb1dcd31d052f4c29bde366bb40eca70970ffe4 /res
parent562556c79f5c330a70705c5d2bde0d026f99c0a8 (diff)
parent715f770c9ff011284c1e87f9b5bcde1fc02ab4df (diff)
Merge "pjsip_configuration: On delete, remove the persistent version of an endpoint" into 13
Diffstat (limited to 'res')
-rw-r--r--res/res_pjsip/pjsip_configuration.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index 5d9097023..7e0c4b087 100644
--- a/res/res_pjsip/pjsip_configuration.c
+++ b/res/res_pjsip/pjsip_configuration.c
@@ -253,6 +253,17 @@ static const struct ast_sorcery_observer state_contact_status_observer = {
.updated = persistent_endpoint_contact_status_observer,
};
+static void endpoint_deleted_observer(const void *object)
+{
+ const struct ast_sip_endpoint *endpoint = object;
+
+ ao2_find(persistent_endpoints, ast_endpoint_get_resource(endpoint->persistent), OBJ_SEARCH_KEY | OBJ_UNLINK | OBJ_NODATA);
+}
+
+static const struct ast_sorcery_observer endpoint_observers = {
+ .deleted = endpoint_deleted_observer,
+};
+
static int dtmf_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
{
struct ast_sip_endpoint *endpoint = obj;
@@ -1954,6 +1965,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
return -1;
}
+ ast_sorcery_observer_add(sip_sorcery, "endpoint", &endpoint_observers);
ast_sorcery_observer_add(sip_sorcery, "contact", &state_contact_observer);
ast_sorcery_observer_add(sip_sorcery, CONTACT_STATUS, &state_contact_status_observer);