diff options
author | Matt Jordan <mjordan@digium.com> | 2015-11-21 10:57:16 -0600 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2015-11-21 10:57:16 -0600 |
commit | 35b8ea0a5f2745a9316c816123b68f0af0827c77 (patch) | |
tree | 464d49d8e18bbe4994ecb0c72ba2a8c48dc377cc | |
parent | 5ec076b3b8590aad8dbc31afa341605eec7146bd (diff) | |
parent | 3dbaf696e98aa0d31de9635c00de4a3de2d3f008 (diff) |
Merge "res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts."
-rw-r--r-- | res/res_pjsip_outbound_registration.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c index 3921aa0b2..e6cd96183 100644 --- a/res/res_pjsip_outbound_registration.c +++ b/res/res_pjsip_outbound_registration.c @@ -796,11 +796,18 @@ static int handle_registration_response(void *data) if (PJSIP_IS_STATUS_IN_CLASS(response->code, 200)) { /* Check if this is in regards to registering or unregistering */ if (response->expiration) { + int next_registration_round; + /* If the registration went fine simply reschedule registration for the future */ ast_debug(1, "Outbound registration to '%s' with client '%s' successful\n", server_uri, client_uri); response->client_state->status = SIP_REGISTRATION_REGISTERED; response->client_state->retries = 0; - schedule_registration(response->client_state, response->expiration - REREGISTER_BUFFER_TIME); + next_registration_round = response->expiration - REREGISTER_BUFFER_TIME; + if (next_registration_round < 0) { + /* Re-register immediately. */ + next_registration_round = 0; + } + schedule_registration(response->client_state, next_registration_round); } else { ast_debug(1, "Outbound unregistration to '%s' with client '%s' successful\n", server_uri, client_uri); response->client_state->status = SIP_REGISTRATION_UNREGISTERED; |