diff options
author | Martin Willi <martin@revosec.ch> | 2010-07-22 18:54:35 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2010-07-26 13:53:49 +0200 |
commit | aa334daa9bf3f87b4c8f0565a6f56d67da651316 (patch) | |
tree | d946c9eac831bc404fe66d94aade2f67de209a18 /src/libcharon/plugins/ha/ha_socket.c | |
parent | 2031002d426a94af3fc362053f36313f721c5489 (diff) | |
download | strongswan-aa334daa9bf3f87b4c8f0565a6f56d67da651316.tar.bz2 strongswan-aa334daa9bf3f87b4c8f0565a6f56d67da651316.tar.xz |
Use a sync message cache to resynchronize IKE_SAs without rekeying
Diffstat (limited to 'src/libcharon/plugins/ha/ha_socket.c')
-rw-r--r-- | src/libcharon/plugins/ha/ha_socket.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/libcharon/plugins/ha/ha_socket.c b/src/libcharon/plugins/ha/ha_socket.c index b30f3a37f..21e6eb6d5 100644 --- a/src/libcharon/plugins/ha/ha_socket.c +++ b/src/libcharon/plugins/ha/ha_socket.c @@ -58,8 +58,8 @@ struct private_ha_socket_t { * Data to pass to the send_message() callback job */ typedef struct { - ha_message_t *message; - private_ha_socket_t *this; + chunk_t chunk; + int fd; } job_data_t; /** @@ -67,7 +67,7 @@ typedef struct { */ static void job_data_destroy(job_data_t *this) { - this->message->destroy(this->message); + free(this->chunk.ptr); free(this); } @@ -76,12 +76,7 @@ static void job_data_destroy(job_data_t *this) */ static job_requeue_t send_message(job_data_t *data) { - private_ha_socket_t *this; - chunk_t chunk; - - this = data->this; - chunk = data->message->get_encoding(data->message); - if (send(this->fd, chunk.ptr, chunk.len, 0) < chunk.len) + if (send(data->fd, data->chunk.ptr, data->chunk.len, 0) < data->chunk.len) { DBG1(DBG_CFG, "pushing HA message failed: %s", strerror(errno)); } @@ -105,9 +100,10 @@ METHOD(ha_socket_t, push, void, /* Fallback to asynchronous transmission. This is required, as sendto() * is a blocking call if it acquires a policy. We could end up in a * deadlock, as we own an IKE_SA. */ - data = malloc_thing(job_data_t); - data->message = message; - data->this = this; + INIT(data, + .chunk = chunk_clone(chunk), + .fd = this->fd, + ); job = callback_job_create((callback_job_cb_t)send_message, data, (void*)job_data_destroy, NULL); @@ -116,7 +112,6 @@ METHOD(ha_socket_t, push, void, } DBG1(DBG_CFG, "pushing HA message failed: %s", strerror(errno)); } - message->destroy(message); } METHOD(ha_socket_t, pull, ha_message_t*, |