summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/baresip.h1
-rw-r--r--src/ua.c22
2 files changed, 23 insertions, 0 deletions
diff --git a/include/baresip.h b/include/baresip.h
index f2d871d..b0f81f2 100644
--- a/include/baresip.h
+++ b/include/baresip.h
@@ -497,6 +497,7 @@ int ua_print_calls(struct re_printf *pf, const struct ua *ua);
int ua_print_status(struct re_printf *pf, const struct ua *ua);
int ua_print_supported(struct re_printf *pf, const struct ua *ua);
int ua_register(struct ua *ua);
+void ua_unregister(struct ua *ua);
bool ua_isregistered(const struct ua *ua);
const char *ua_aor(const struct ua *ua);
const char *ua_cuser(const struct ua *ua);
diff --git a/src/ua.c b/src/ua.c
index c30be6a..2a1e1c3 100644
--- a/src/ua.c
+++ b/src/ua.c
@@ -191,6 +191,28 @@ int ua_register(struct ua *ua)
}
+/**
+ * Unregister all Register clients of a User-Agent
+ *
+ * @param ua User-Agent
+ */
+void ua_unregister(struct ua *ua)
+{
+ struct le *le;
+
+ if (!ua)
+ return;
+
+ ua_event(ua, UA_EVENT_UNREGISTERING, NULL, NULL);
+
+ for (le = ua->regl.head; le; le = le->next) {
+ struct reg *reg = le->data;
+
+ reg_unregister(reg);
+ }
+}
+
+
bool ua_isregistered(const struct ua *ua)
{
struct le *le;