aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/ha/ha_cache.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-01-19 16:34:59 +0100
committerMartin Willi <martin@revosec.ch>2012-03-20 17:31:37 +0100
commitc8531b7e699e3d680cfbb1332f5cdfd446f2f400 (patch)
treec65d1b561baba88a3733d85e6da7a79707509b9e /src/libcharon/plugins/ha/ha_cache.c
parent47b8f6ef4b3637e94d4b211721b38ba263f6d9c0 (diff)
downloadstrongswan-c8531b7e699e3d680cfbb1332f5cdfd446f2f400.tar.bz2
strongswan-c8531b7e699e3d680cfbb1332f5cdfd446f2f400.tar.xz
Added support for Phase1 IV synchronization to HA plugin
Diffstat (limited to 'src/libcharon/plugins/ha/ha_cache.c')
-rw-r--r--src/libcharon/plugins/ha/ha_cache.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/libcharon/plugins/ha/ha_cache.c b/src/libcharon/plugins/ha/ha_cache.c
index 7b7a953e5..e21b461a7 100644
--- a/src/libcharon/plugins/ha/ha_cache.c
+++ b/src/libcharon/plugins/ha/ha_cache.c
@@ -88,6 +88,8 @@ typedef struct {
ha_message_t *midi;
/* last responder mid */
ha_message_t *midr;
+ /* last IV update */
+ ha_message_t *iv;
} entry_t;
/**
@@ -114,6 +116,7 @@ static void entry_destroy(entry_t *entry)
entry->add->destroy(entry->add);
DESTROY_IF(entry->midi);
DESTROY_IF(entry->midr);
+ DESTROY_IF(entry->iv);
free(entry);
}
@@ -164,6 +167,16 @@ METHOD(ha_cache_t, cache, void,
}
message->destroy(message);
break;
+ case HA_IKE_IV:
+ entry = this->cache->get(this->cache, ike_sa);
+ if (entry)
+ {
+ DESTROY_IF(entry->iv);
+ entry->iv = message;
+ break;
+ }
+ message->destroy(message);
+ break;
case HA_IKE_DELETE:
entry = this->cache->remove(this->cache, ike_sa);
if (entry)
@@ -309,6 +322,10 @@ METHOD(ha_cache_t, resync, void,
{
this->socket->push(this->socket, entry->midr);
}
+ if (entry->iv)
+ {
+ this->socket->push(this->socket, entry->iv);
+ }
}
}
enumerator->destroy(enumerator);