summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Gradinari <alex2grad@gmail.com>2016-04-07 17:33:49 -0400
committerAlexei Gradinari <alex2grad@gmail.com>2016-05-03 16:38:30 -0500
commita4cfcda0367e282d7ff9d937676c7f83d0ce8521 (patch)
tree55dcac9223abc5b4916df2d642abe84d2246078f
parentc339d4c6edafcc007c7de345a5f97388f5de84de (diff)
res_pjsip/AMI: add contact.updated event
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
-rw-r--r--CHANGES2
-rw-r--r--include/asterisk/res_pjsip.h1
-rw-r--r--res/res_pjsip/pjsip_options.c15
3 files changed, 17 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 9f067bd9f..8d1e339d6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -277,6 +277,8 @@ Queue
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
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index b6684ae56..05f8100cf 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -263,6 +263,7 @@ enum ast_sip_contact_status_type {
UNKNOWN,
CREATED,
REMOVED,
+ UPDATED,
};
/*!
diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c
index fc64947ed..c0d41c3d1 100644
--- a/res/res_pjsip/pjsip_options.c
+++ b/res/res_pjsip/pjsip_options.c
@@ -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)
@@ -532,6 +534,16 @@ static void contact_created(const void *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.
*/
static void contact_deleted(const void *obj)
@@ -556,7 +568,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)