diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2017-12-15 09:49:50 -0600 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2017-12-15 09:49:50 -0600 |
commit | dff0415b1ed680b008334f83387513da16a214a8 (patch) | |
tree | 980825f82fd1ea0e11e00573fcaffbf7039bff04 /res | |
parent | e7a6e64039f24887495ea6d5d95b477fa792840e (diff) | |
parent | b088cddc03fcd64d49549a4a33556217c8e21123 (diff) |
Merge "pjsip_options: wrongly applied "UNKNOWN" status"
Diffstat (limited to 'res')
-rw-r--r-- | res/res_pjsip.c | 1 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_options.c | 32 |
2 files changed, 11 insertions, 22 deletions
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 fbe07d53d..f9df2f0a5 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); } } |