android: Set CHILD_STATE_DOWN when the IKE_SA gets reestablished
authorTobias Brunner <tobias@strongswan.org>
Mon, 14 Jul 2014 13:10:49 +0000 (15:10 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 22 Jul 2014 08:55:51 +0000 (10:55 +0200)
src/frontends/android/jni/libandroidbridge/backend/android_service.c

index c893f62..d73dc45 100644 (file)
@@ -392,7 +392,8 @@ METHOD(listener_t, ike_updown, bool,
        private_android_service_t *this, ike_sa_t *ike_sa, bool up)
 {
        /* this callback is only registered during initiation, so if the IKE_SA
-        * goes down we assume an authentication error */
+        * goes down we assume some kind of authentication error, more specific
+        * errors are catched in the alert() handler */
        if (this->ike_sa == ike_sa && !up)
        {
                charonservice->update_status(charonservice,
@@ -452,6 +453,11 @@ METHOD(listener_t, ike_reestablish, bool,
                this->ike_sa = new;
                /* re-register hook to detect initiation failures */
                this->public.listener.ike_updown = _ike_updown;
+               /* if the IKE_SA got deleted by the responder we get the child_down()
+                * event on the old IKE_SA after this hook has been called, so they
+                * get ignored and thus we trigger the event here */
+               charonservice->update_status(charonservice,
+                                                                        CHARONSERVICE_CHILD_STATE_DOWN);
                /* the TUN device will be closed when the new CHILD_SA is established */
        }
        return TRUE;