res_pjsip_outbound_registration.c: Be tolerant of short registration timeouts.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 17 Nov 2015 20:53:19 +0000 (14:53 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 18 Nov 2015 19:26:49 +0000 (13:26 -0600)
Change-Id: Ie16f5053ebde0dc6507845393709b4d6a3ea526d

res/res_pjsip_outbound_registration.c

index 2fd5b8c..83386c6 100644 (file)
@@ -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;