mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-27 16:07:15 -07:00
Merge "pjsip_options: wrongly applied "UNKNOWN" status"
This commit is contained in:
@@ -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 ------------
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -2282,6 +2282,7 @@
|
||||
<enumlist>
|
||||
<enum name="Reachable"/>
|
||||
<enum name="Unreachable"/>
|
||||
<enum name="NonQualified"/>
|
||||
</enumlist>
|
||||
</parameter>
|
||||
<parameter name="RoundtripUsec">
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
"Unreachable",
|
||||
"Reachable",
|
||||
"Unknown",
|
||||
"Created",
|
||||
"NonQualified",
|
||||
"Removed"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user