]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip/AMI: add contact.updated event 56/2556/2
authorAlexei Gradinari <alex2grad@gmail.com>
Thu, 7 Apr 2016 21:33:49 +0000 (17:33 -0400)
committerAlexei Gradinari <alex2grad@gmail.com>
Tue, 3 May 2016 21:35:27 +0000 (17:35 -0400)
With the old SIP module AMI sends PeerStatus event on every
successfully REGISTER requests, ie, on start registration,
update registration and stop registration.

With PJSIP AMI sends ContactStatus only when status is changed.
Regarding registration:
on start registration - Created
on stop registration - Removed
but on update registration nothing

This patch added contact.updated event.

ASTERISK-25904

Change-Id: I8fad8aae9305481469c38d2146e1ba3a56d3108f

CHANGES
include/asterisk/res_pjsip.h
res/res_pjsip/pjsip_options.c

diff --git a/CHANGES b/CHANGES
index 8d527d11f9ac1cdf260852bbc2bb6a5400bdbbfc..ca216ec4f4f93c44aa7cfb311d1212c7cff58953 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -14,6 +14,8 @@
 
 res_pjsip
 ------------------
+ * Added new status Updated to AMI event ContactStatus on update registration
+
  * Added "reg_server" to contacts.
    If the Asterisk system name is set in asterisk.conf, it will be stored
    into the "reg_server" field in the ps_contacts table to facilitate
index f284702df3770534fb909902a9ed1a7e57edf632..f985e32547652a3d77589e1b044914fd36cc6f35 100644 (file)
@@ -263,6 +263,7 @@ enum ast_sip_contact_status_type {
        UNKNOWN,
        CREATED,
        REMOVED,
+       UPDATED,
 };
 
 /*!
index b8d38ed42d7a5bf94f8c0771941ed438131520b1..f832e6f787704b2858b509a849185dccf70af82e 100644 (file)
@@ -42,6 +42,7 @@ static const char *status_map [] = {
        [UNKNOWN] = "Unknown",
        [CREATED] = "Created",
        [REMOVED] = "Removed",
+       [UPDATED] = "Updated",
 };
 
 static const char *short_status_map [] = {
@@ -50,6 +51,7 @@ static const char *short_status_map [] = {
        [UNKNOWN] = "Unknown",
        [CREATED] = "Created",
        [REMOVED] = "Removed",
+       [UPDATED] = "Updated",
 };
 
 const char *ast_sip_get_contact_status_label(const enum ast_sip_contact_status_type status)
@@ -541,6 +543,16 @@ static void contact_created(const void *obj)
        qualify_and_schedule((struct ast_sip_contact *) obj);
 }
 
+/*!
+ * \internal
+ * \brief A contact has been updated.
+ */
+static void contact_updated(const void *obj)
+{
+       update_contact_status((struct ast_sip_contact *) obj, UPDATED);
+       qualify_and_schedule((struct ast_sip_contact *) obj);
+}
+
 /*!
  * \internal
  * \brief A contact has been deleted remove status tracking.
@@ -567,7 +579,8 @@ static void contact_deleted(const void *obj)
 
 static const struct ast_sorcery_observer contact_observer = {
        .created = contact_created,
-       .deleted = contact_deleted
+       .deleted = contact_deleted,
+       .updated = contact_updated
 };
 
 static pj_bool_t options_start(void)