summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2017-12-11 15:27:29 -0600
committerKevin Harwell <kharwell@digium.com>2017-12-11 15:27:29 -0600
commitb088cddc03fcd64d49549a4a33556217c8e21123 (patch)
treedac69412ceb0b2ed86f47b8fb1dce38a4aedc319
parent38dcdf2d680b69d1a2264fdebfa025858e49c22a (diff)
pjsip_options: wrongly applied "UNKNOWN" status
A couple of places were setting the status to "UNKNOWN" when qualifies were being disabled. Instead this should be set to the "CREATED" status that represents when a contact is given (uri available), but the qualify frequency is set to zero so we don't know the status. This patch updates the relevant places with "CREATED". It also updates the "CREATED" status description (value shown in CLI/AMI/ARI output) to a value of "NonQualified"/"NonQual" as this description is hopefully less confusing. ASTERISK-27467 Change-Id: Id67509d25df92a72eb3683720ad2a95a27b50c89
-rw-r--r--CHANGES11
-rw-r--r--UPGRADE.txt9
-rw-r--r--include/asterisk/res_pjsip.h4
-rw-r--r--main/stasis_endpoints.c2
-rw-r--r--res/res_pjsip.c1
-rw-r--r--res/res_pjsip/pjsip_options.c32
-rw-r--r--rest-api/api-docs/events.json2
7 files changed, 37 insertions, 24 deletions
diff --git a/CHANGES b/CHANGES
index b2b740924..f367f46cf 100644
--- a/CHANGES
+++ b/CHANGES
@@ -26,6 +26,17 @@ chan_sip
headers be retrieved from the REFER message and made accessible to the
dialplan in the hash TRANSFER_DATA.
+AMI
+------------------
+ * The ContactStatus and Status fields for the manager events ContactStatus
+ and ContactStatusDetail are now set to "NonQualified" when a contact exists
+ but has not been qualified.
+
+ARI
+------------------
+ * The ContactInfo event's contact_status field is now set to "NonQualified"
+ when a contact exists but has not been qualified.
+
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 15.1.0 to Asterisk 15.2.0 ------------
------------------------------------------------------------------------------
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 39c0f8cec..dd37b259d 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -31,6 +31,15 @@ app_macro:
built. Users should migrate to app_stack (Gosub). A warning is logged
the first time any Macro is used.
+AMI:
+ - The ContactStatus and Status fields for the manager events ContactStatus
+ and ContactStatusDetail are now set to "NonQualified" when a contact exists
+ but has not been qualified.
+
+ARI:
+ - The ContactInfo event's contact_status field is now set to "NonQualified"
+ when a contact exists but has not been qualified.
+
New in 15.0.0:
Build System:
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index e71eb98d7..6c48d2e84 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -289,9 +289,13 @@ struct ast_sip_contact {
* \brief Status type for a contact.
*/
enum ast_sip_contact_status_type {
+ /*! Frequency > 0, but no response from remote uri */
UNAVAILABLE,
+ /*! Frequency > 0, and got response from remote uri */
AVAILABLE,
+ /*! Default last status, and when a contact status object is not found */
UNKNOWN,
+ /*! Frequency == 0, has a contact, but don't know status (non-qualified) */
CREATED,
REMOVED,
};
diff --git a/main/stasis_endpoints.c b/main/stasis_endpoints.c
index 161fdfa44..5cee22eba 100644
--- a/main/stasis_endpoints.c
+++ b/main/stasis_endpoints.c
@@ -82,7 +82,7 @@
<enum name="Unknown"/>
<enum name="Unreachable"/>
<enum name="Reachable"/>
- <enum name="Created"/>
+ <enum name="Unqualified"/>
<enum name="Removed"/>
<enum name="Updated"/>
</enumlist>
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 21e43f073..b50ee5fc7 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -2282,6 +2282,7 @@
<enumlist>
<enum name="Reachable"/>
<enum name="Unreachable"/>
+ <enum name="NonQualified"/>
</enumlist>
</parameter>
<parameter name="RoundtripUsec">
diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c
index 662166c89..63e5ef6a9 100644
--- a/res/res_pjsip/pjsip_options.c
+++ b/res/res_pjsip/pjsip_options.c
@@ -41,7 +41,7 @@ static const char *status_map [] = {
[UNAVAILABLE] = "Unreachable",
[AVAILABLE] = "Reachable",
[UNKNOWN] = "Unknown",
- [CREATED] = "Created",
+ [CREATED] = "NonQualified",
[REMOVED] = "Removed",
};
@@ -49,7 +49,7 @@ static const char *short_status_map [] = {
[UNAVAILABLE] = "Unavail",
[AVAILABLE] = "Avail",
[UNKNOWN] = "Unknown",
- [CREATED] = "Created",
+ [CREATED] = "NonQual",
[REMOVED] = "Removed",
};
@@ -205,24 +205,12 @@ static void update_contact_status(const struct ast_sip_contact *contact,
return;
}
- if (is_contact_refresh
- && status->status == CREATED) {
- /*
- * The contact status hasn't been updated since creation
- * and we don't want to re-send a created status.
- */
- if (contact->qualify_frequency
- || status->rtt_start.tv_sec > 0) {
- /* Ignore, the status will change soon. */
- return;
- }
-
- /*
- * Convert to a regular contact status update
- * because the status may never change.
- */
- is_contact_refresh = 0;
- value = UNKNOWN;
+ /*
+ * If the current status is CREATED, and it's a refresh or the given value is
+ * also CREATED then there is nothing to update as nothing needs to change.
+ */
+ if (status->status == CREATED && (is_contact_refresh || status->status == value)) {
+ return;
}
update = ast_sorcery_alloc(ast_sip_get_sorcery(), CONTACT_STATUS,
@@ -595,7 +583,7 @@ static void qualify_and_schedule(struct ast_sip_contact *contact)
schedule_qualify(contact, contact->qualify_frequency * 1000);
} else {
- update_contact_status(contact, UNKNOWN, 0);
+ update_contact_status(contact, CREATED, 0);
}
}
@@ -1127,7 +1115,7 @@ static void qualify_and_schedule_contact(struct ast_sip_contact *contact)
if (contact->qualify_frequency) {
schedule_qualify(contact, initial_interval);
} else {
- update_contact_status(contact, UNKNOWN, 0);
+ update_contact_status(contact, CREATED, 0);
}
}
diff --git a/rest-api/api-docs/events.json b/rest-api/api-docs/events.json
index 9ebbac061..e1b31bb97 100644
--- a/rest-api/api-docs/events.json
+++ b/rest-api/api-docs/events.json
@@ -207,7 +207,7 @@
"Unreachable",
"Reachable",
"Unknown",
- "Created",
+ "NonQualified",
"Removed"
]
}